代码之家  ›  专栏  ›  技术社区  ›  Ryan French

在ASP.Net VB.Net中编辑datagrid的行

  •  1
  • Ryan French  · 技术社区  · 15 年前

    目前我正在编写一段代码,它使用一个老式的DataGrid来允许用户在表中输入信息。它已经有一个添加和删除按钮。当前,用户在页脚中的3个文本框中输入信息,其他行使用标签显示信息。

    3 回复  |  直到 15 年前
        1
  •  0
  •   sujata    15 年前

    有几件事需要澄清-您指的是较旧的.NET“DataGrid”控件还是较新的“GridView”控件。另外,这是一个web还是winforms应用程序?

    我的建议-

    您是否尝试通过处理GridView1\u行编辑事件以编程方式添加和设置TextBox控件?

    要删除已编辑的行,请将其从数据源中删除,然后重新绑定网格。

    list.Remove(itemToRemove);
    GridView1.DataSource = list;
    GridView1.DataBind();
    

    然后,从itemToRemove获取数据,并使用它以编程方式在页脚中创建和设置文本框。

    如果数据网格的第三列名为“Name”,并且包含Name数据,则可以创建并设置第三列的页脚行文本框值,如下所示-

    GridView1.FooterRow.Cells[2].Controls.Add(new TextBox { ID = "tbName", Text = item.Name });
    
        2
  •  0
  •   womp    15 年前

    您如何使用FindControl?发布代码总是有帮助的;)

    您应该能够执行 FindControl() 在页脚行上,获取文本框,没有问题。

    GridViewRow row = GridView1.FooterRow;
    TextBox txt1 = ((TextBox)row.FindControl,"TextBox1"));
    
        3
  •  0
  •   Ryan French    15 年前

    基本上我改变了我原来的计划。我没有将文本从行移动到页脚文本框并删除行,而是使用EditCommandColumn创建一个链接按钮,如下所示

    <asp:EditCommandColumn ButtonType="LinkButton" ItemStyle-ForeColor="Blue" EditText='[edit]' UpdateText='[update]' CancelText='[cancel]'></asp:EditCommandColumn>
    

    我还必须将EditItemTemplate添加到每个列中,每个列中都有一个文本框,并以与ItemTemplates中的标签绑定相同的方式将数据绑定到文本框。

    然后,我使用ItemCommand事件处理程序添加了一些代码,以将EditItemIndex设置为正在编辑的行。

    Private Sub GoodsList_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgdGoods.ItemCommand
    
        Select Case e.CommandName
    
    
            Case "Edit"
    
                dgdGoods.EditItemIndex = e.Item.ItemIndex
    
            Case "Cancel"
    
                dgdGoods.EditItemIndex = -1
    
            Case "Update"
    
                dgdGoods.EditItemIndex = -1
                'Update details here
    

    然后,在此结束时,将数据重新绑定到datagrid。使用EditCommandColumn,它将自动从显示编辑按钮更改为显示正在编辑的行上的更新和取消按钮。