none
GridView无法更新功能 RRS feed

  • 问题

  • GridView的代码如下:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                  DataKeyNames="DDID" onrowcancelingedit="GridView1_RowCancelingEdit"
                  onrowediting="GridView1_RowEditing" Width="715px"
                  onrowupdating="GridView1_RowUpdating"
                  onrowdeleting="GridView1_RowDeleting" Height="60px" >
                          <Columns>
                              <asp:BoundField DataField="DDID" HeaderText="编号" InsertVisible="False"
                          ReadOnly="True" SortExpression="DDID" >
                                  <ItemStyle Font-Size="9pt" />
                              </asp:BoundField>
                              <asp:BoundField DataField="CPID" HeaderText="产品编号" SortExpression="CPID"
                          ReadOnly="True" >
                                  <ItemStyle Font-Size="9pt" />
                              </asp:BoundField>
                              <asp:BoundField DataField="CPNAME" HeaderText="产品名" SortExpression="CPNAME"
                          ReadOnly="True" >
                                  <ItemStyle Font-Size="9pt" />
                              </asp:BoundField>
                              <asp:BoundField DataField="CPDJ" HeaderText="产品单价" SortExpression="CPDJ"
                          ReadOnly="True" >
                                  <ItemStyle Font-Size="9pt" />
                              </asp:BoundField>
                              <asp:TemplateField HeaderText="数量" SortExpression="SL">
                                  <EditItemTemplate>
                                      <asp:TextBox ID="TextBox1" Width="60px" runat="server" Text='<%# Bind("SL") %>'></asp:TextBox>
                                  </EditItemTemplate>
                                  <ItemTemplate>
                                      <asp:Label ID="Label1" runat="server" Text='<%# Bind("SL") %>'></asp:Label>
                                  </ItemTemplate>
                                  <ItemStyle Font-Size="9pt" />
                              </asp:TemplateField>
                              <asp:BoundField DataField="CPSUM" HeaderText="合计" SortExpression="CPSUM"
                          ReadOnly="True" >
                                  <ItemStyle Font-Size="9pt" />
                              </asp:BoundField>
                              <asp:CommandField ShowEditButton="True" >
                                  <ItemStyle Font-Size="9pt" />
                              </asp:CommandField>
                              <asp:CommandField ShowDeleteButton="True" >
                                  <ItemStyle Font-Size="9pt" />
                              </asp:CommandField>
                          </Columns>
                      </asp:GridView>

    GridView1的RowUpdating事件代码如下:

    但就是无法实现更新功能.也没有报错,麻烦看看代码哪里错了.

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            int RowKey = e.RowIndex;//整型变量获取当前的所属值
            TextBox Mytext;
            Mytext = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1");
            Cpdt.Rows[RowKey]["SL"] = Convert.ToInt32(Mytext.Text.ToString());//数量
            Cpdt.Rows[RowKey]["CPSUM"] = Convert.ToInt32(Mytext.Text) * Convert.ToSingle(Cpdt.Rows[RowKey]["CPDJ"]);//单价
            Cpdt.AcceptChanges();
            var mm = Cpdt.AsEnumerable().Sum(p => Convert.ToDouble(p["CPSUM"]));
            Label2.Text = mm.ToString();
            GridView1.EditIndex = -1;
            GridView1.DataSource = Cpdt;
            GridView1.DataBind();

        }

    2012年5月10日 6:34

全部回复

  • 设个断点跟踪下,看下Cpdt里面是数据是否发生变化


    http://blog.csdn.net/zx13525079024

    2012年5月10日 8:20
  • 你的更新事件:

    1)“Cpdt.AcceptChanges();”删除。

    2)调用更新数据库的类似SqlDataAdapter.Update方法去更新这张表啊。

    PS:你这个数据表到底内存中的虚拟表还是和数据库相关的生成的DataTable?


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月10日 8:48
  • 内存中Session的虚拟表
    2012年5月10日 9:06
  • 内存中Session的虚拟表

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            DataTable Cpdt= Session["你的名字"] as DataTable;
            int RowKey = e.RowIndex;//整型变量获取当前的所属值
            TextBox Mytext;
            Mytext = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1");
            Cpdt.Rows[RowKey]["SL"] = Convert.ToInt32(Mytext.Text.ToString());//数量
            Cpdt.Rows[RowKey]["CPSUM"] = Convert.ToInt32(Mytext.Text) * Convert.ToSingle(Cpdt.Rows[RowKey]["CPDJ"]);//单价
            Cpdt.AcceptChanges();
           Session["你的名字"] = Cpdt;
            var mm = Cpdt.AsEnumerable().Sum(p => Convert.ToDouble(p["CPSUM"]));
            Label2.Text = mm.ToString();
            GridView1.EditIndex = -1;
            GridView1.DataSource = Cpdt;
            GridView1.DataBind();

        }

    另外请确定你的事件被执行了!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月10日 9:08
  • 好像还是不行,得不到TextBox1的值,

    因为我在Label2的下面添加了一个Label3,

    点击"更新"后还是发现Label3的值还是1,没有变化.

    .net3.5的写法没效果?

    2012年5月10日 9:22
  • protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
             int RowKey = e.RowIndex;//整型变量获取当前的所属值
            TextBox Mytext;
            Mytext = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1");
            Cpdt.Rows[RowKey]["SL"] = Convert.ToInt32(Mytext.Text.ToString());//数量
            Cpdt.Rows[RowKey]["CPSUM"] = Convert.ToInt32(Mytext.Text) * Convert.ToSingle(Cpdt.Rows[RowKey]["CPDJ"]);//单价
            Cpdt.AcceptChanges();
            var mm = Cpdt.AsEnumerable().Sum(p => Convert.ToDouble(p["CPSUM"]));
            Label2.Text = mm.ToString();

           Label3.Text = Mytext.Text.ToString();

            GridView1.EditIndex = -1;
            GridView1.DataSource = Cpdt;
            GridView1.DataBind();

        }

    2012年5月10日 9:23
  • 你Label3是Mytext的结果,那么Mytext你改变过吗?请把代码打包发到我这里来(不要包含数据库,只包含虚拟的DataTable),我看看究竟怎么回事?谢谢。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月11日 5:01