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 read-only (i.e. non-editable) set of data, e.g.:
How can i enabled the cells of the GridView
to be editable, e.g (Photoshop Mockup):
Note: i didn't mockup in Photoshop an edit box into every row and column (cause it was taking too long). You still get the idea.
asp:GridView
to show an edit-box in each cell? asp:GridView
to show an edit-box, how do i "read" them OnClick
of Save button?i would not be opposed to using an asp:Repeater
, manually placing <INPUT>
controls. My confusion then is about how to read each input during the OnClick
of the Save button. And although i would be perfectly happy to use a repeater, and a GridView might not be able to accomplish what i want making the repeater the only possibility, this question is about a GridView.
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>