How to enable in-place editing in an asp:GridView?

前端 未结 2 389
误落风尘
误落风尘 2021-01-05 18:19

How can i add edit boxes, and read their values during submit, with an asp:Repeater?


i have an asp:GridView which is displaying a rea

相关标签:
2条回答
  • 2021-01-05 18:51

    You can do this using a GridView, but you'll produce quite a lot of code if you have many columns.

    First make all columns in the GridView TemplateFields. In my sample I will use just one column. Like so:

    <asp:GridView ID="test" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="Foo" SortExpression="foo">
                <ItemTemplate>
                    <asp:TextBox ID="FooText" runat="server" Text='<%# Eval("Foo") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <!-- other cols here -->
        </Columns>
    </asp:GridView>
    <asp:Button ID="Save" runat="server" Text="Save" OnClick="Save_Click" />
    

    Then in your code behind for the Save button you can iterate over the rows in the GridView:

    foreach (GridViewRow gvRow in test.Rows)
    {
        string val = ((TextBox)gvRow.FindControl("FooText")).Text;
        <!-- other cols here -->
        //do something with all the values you have parsed from the row
    }
    
    0 讨论(0)
  • 2021-01-05 19:07

    Have you tried by setting up the EditIndex property of the DataGrid?

    Example:

    <asp:GridView runat="server" onrowediting="grdProducts_RowEditing" 
        ID="grdProducts">
        <Columns>
            <asp:CommandField ShowEditButton="True" />
        </Columns>
    </asp:GridView>
    

    Code behind

        protected void grdProducts_RowEditing(object sender, GridViewEditEventArgs e)
        {
            this.grdProducts.EditIndex = e.NewEditIndex;
            This.BindGrid();
        }
    

    Note that you have to re-bind your grid

    Usually you save the data per row, which means, you have an edit link in each row and after you enter edit mode, a save button and optionally a cancel button appear which will allow you to save the values of that specific row

    Following this approach is trivial when using the GridView:

        protected void grdProducts_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            // old values for the current row
            var oldValues = e.OldValues;
    
            // new (updated) values for the current row
            var newvalues = e.NewValues;
    
            // Exit edit mode
            this.grdProducts.EditIndex = -1;
    
            // Update the grid
            this.BindGrid();
        }
    

    In the grid markup just add the following:

        onrowupdating="grdProducts_RowUpdating"
    

    If you need to specify custom controls when editing or when displaying the cell data in read-only mode, use grid templates:

           <Columns>
            <asp:TemplateField HeaderText="Name">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
          </Columns>
    
    0 讨论(0)
提交回复
热议问题