【求助|已解决】C# ASP.Net 为什么GridView有数据但前端不显示

 问题描述:我要做一个单位选择页面,在一个GV里选择完单位后会插入到另一个GV里,之前还很正常,后面不知道改了什么就变成后台debug的时候确定插入的GridView是有绑定了数据的,但是前端却没有正常显示数据

<asp:GridView ID="gv_bl" runat="server" AutoGenerateColumns="false" CssClass="grid" EmptyDataText="查无数据!" onrowdatabound="gv_bl_RowDataBound" Width="1200px" ShowFooter ="true">
                        <Columns>
                            <asp:BoundField HeaderText="序号" />
                            <asp:BoundField DataField="agencyno" HeaderText="单位编码" />
                            <asp:BoundField DataField="agencyname" HeaderText="单位名称" />
                            <asp:TemplateField HeaderText="比例(%)" ItemStyle-HorizontalAlign="Left">
                                <ItemTemplate>
                                    <asp:TextBox ID="txt_scale" runat="server" AutoPostBack="True" class="wdate" ontextchanged="txt_scale_TextChanged" Text='<%# Eval("ratio") %>' Width="90px"></asp:TextBox>
                                </ItemTemplate>
                                <HeaderStyle ForeColor="#CC3300" />
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="码洋" ItemStyle-HorizontalAlign="Left">
                                <ItemTemplate>
                                    <asp:TextBox ID="txt_bdmayang" runat="server" AutoPostBack="True" class="wdate" ontextchanged="txt_bdmayang_TextChanged" Text='<%# Eval("mayang") %>' Width="90px" ></asp:TextBox>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="money" HeaderText="实洋" />
                            <asp:BoundField DataField="djprice" HeaderText="底价" />
                            <asp:TemplateField HeaderText="删除" ItemStyle-Width="80">
                                <ItemTemplate>
                                    <asp:LinkButton ID="lb_dwdel" runat="server" CausesValidation="false" onclick="lb_dwdel_Click">删除</asp:LinkButton>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>

这是前端代码

这是后端代码

protected void btn_item_add_Click(object sender, EventArgs e)
    {
        try
        {
            //SetData();
            List<Orsrtb16> orlist = new List<Orsrtb16>();
            orlist = orlist.GroupBy(x => x.AgencyNo).Select(x => x.First()).ToList();
            Session["comlist"] = orlist;
            //创建临时数据源,先暂时存下已有数据
            DataTable tempdt = new DataTable();
            DataColumn dc1 = null;
            dc1 = tempdt.Columns.Add("ID", Type.GetType("System.Int32"));
            dc1.AutoIncrement = true;
            dc1.AutoIncrementSeed = 1;
            dc1.AutoIncrementStep = 1;
            dc1.AllowDBNull = false;

            double Ratio = 0;
            decimal Mayang = 0;
            decimal Money = 0;
            decimal Price = 0;

            dc1 = tempdt.Columns.Add("agencyno", Type.GetType("System.String"));
            dc1 = tempdt.Columns.Add("agencyname", Type.GetType("System.String"));
            dc1 = tempdt.Columns.Add("ratio", Type.GetType("System.String"));
            dc1 = tempdt.Columns.Add("money", Type.GetType("System.String"));
            dc1 = tempdt.Columns.Add("djprice", Type.GetType("System.String"));
            dc1 = tempdt.Columns.Add("mayang", Type.GetType("System.String"));

            //插入分配列表已有记录到临时数据源
            for (int j = 0; j < gv_bl.Rows.Count; j++)
            {
                DataRow row = tempdt.NewRow();
                TextBox ratio = gv_bl.Rows[j].FindControl("txt_scale") as TextBox;
                TextBox mayang = gv_bl.Rows[j].FindControl("txt_bdmayang") as TextBox;


                row["agencyname"] = gv_bl.Rows[j].Cells[2].Text;
                row["agencyno"] = gv_bl.Rows[j].Cells[1].Text;
                row["ratio"] = ratio.Text;
                row["money"] = gv_bl.Rows[j].Cells[5].Text;
                row["mayang"] = mayang.Text;
                row["djprice"] = gv_bl.Rows[j].Cells[6].Text;
                Ratio += Convert.ToDouble(ratio.Text);
                Mayang += Convert.ToDecimal(mayang.Text);
                Money += Convert.ToDecimal(gv_bl.Rows[j].Cells[5].Text);
                Price += Convert.ToDecimal(gv_bl.Rows[j].Cells[6].Text);
                tempdt.Rows.Add(row);
            }

            for (int i = 0; i < gv_com.Rows.Count; i++)
            {
                CheckBox ck = gv_com.Rows[i].FindControl("cb_item") as CheckBox;

                if (ck.Checked == true)
                {
                    //添加

                    DataRow row1 = tempdt.NewRow();
                    row1["agencyname"] = gv_com.Rows[i].Cells[3].Text;
                    row1["agencyno"] = gv_com.Rows[i].Cells[2].Text;
                    row1["ratio"] = "0";
                    row1["money"] = "0";
                    row1["mayang"] = "0";
                    row1["djprice"] = "0";
                    tempdt.Rows.Add(row1);

                }
            }

            //排重
            for (int k = 0; k < tempdt.Rows.Count; k++)
            {
                for (int m = tempdt.Rows.Count - 1; m > 0; m--)
                {
                    if (k != m && tempdt.Rows[k]["agencyno"].ToString() == tempdt.Rows[m]["agencyno"].ToString())
                    {
                        tempdt.Rows.RemoveAt(k);
                        k--;
                        m = tempdt.Rows.Count - 1;
                        break;
                    }
                }
            }


            for (int i = 0; i < tempdt.Rows.Count; i++)
            {
                orlist.Add(WriteData(i, tempdt));

            }

            if (Session["comlist"] == null)
            {
                Session.Add("comlist", orlist);
            }
            else
            {
                Session["comlist"] = null;
                Session.Add("comlist", orlist);
            }
            lblHratio.Text = Math.Round(Ratio, 2).ToString();
            lblHmayang.Text = Math.Round(Mayang, 2).ToString();
            lblHmoney.Text = Math.Round(Money, 2).ToString();
            lblHDjsy.Text = Math.Round(Price, 2).ToString();

            gv_bl.Visible = true;
            gv_bl.Enabled = true;
            gv_bl.DataSource = tempdt;
            gv_bl.DataBind();

            gv_bl.FooterRow.Cells[3].Text = "0";
            gv_bl.FooterRow.Cells[4].Text = "0";
            gv_bl.FooterRow.Cells[5].Text = "0";
            gv_bl.FooterRow.Cells[6].Text = "0";
        }catch(Exception ex)
        {
            ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "alertScript", "<script>alert(" + ex.ToString() + ")</script>", false);
            return;
        }
        
    }

正常显示页面

异常显示

相关控件代码

<asp:Button ID="btn_item_add" runat="server" CssClass="btn" Height="22px" onclick="btn_item_add_Click" Text="添加单位" />

排查了好久,网上查了很多,诸如GV的列名没跟绑定的数据源对应上,控件问题什么的,仍然没有解决问题,还望大佬们帮帮忙,看看结症在何处🙏🙏🙏

==========================问题原因==========================

问了现实中的大佬,说会不会是UpdatePanel的原因,试着根据提示去找原因,还真是。。。

原来的【添加单位】按钮被我放在了UpdatePanel3里面,而进行数据写入的GridView被我直接放在了form里面,当我把按钮移到form里面后,数据就正常显示了

但是这样按钮摆放的位置就不够合理,于是了解了一下UpdatePanel,看看怎么在UpdatePanel中实现可回发按钮对外部的刷新,以下内容对我起到了帮助↓

updatePanel有两个属性,一个是AsyncPostBackTrigger属性,一个是PostBackTrigger属性;

第一个属性用来指定UpdatePanel外的控件,如Button,ImageButton等可回发控件对UpdatePanel的刷新。如果没有指定,点击按钮会对UpdatePanel进行刷新,但不是异步更新,而是整页传送;第二个属性是用来指定UpdatePanel中可回发的控件,对外部的刷新。如果不指定,则点击UpdatePanel中可回发的控件,对外面的页面内容不能刷新。

资料地址:ASP.NET之UpdatePanel控件 - 全栈程序员必看 (javaforall.cn)

根据资料中的指引用PostBackTrigger指定了【添加单位】控件,经测试,代码顺利运行。

这个问题就此解决!本菜鸟又获得了新的经验 get✔

编译器:VS2019  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值