0

I have a GridView which contains a Link Button inside a Template Field. The code is shown below:

<asp:GridView ID="gv1" runat="server" AutoGenerateColumns="False"
    DataSourceID="SqlDataSource1" onrowediting="gv1_RowEditing"
        onrowcommand="gv1_RowCommand">
        <Columns>
            <asp:BoundField DataField="inDetailsId" HeaderText="inDetailsId"
                SortExpression="inDetailsId" />
            <asp:BoundField DataField="inUserId" HeaderText="inUserId"
                SortExpression="inUserId" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnk1" runat="server" Text='<%# Eval("attDate")%>' CommandName="Edit"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="attstatus" HeaderText="attstatus"
                SortExpression="attstatus" />
            <asp:BoundField DataField="inAttendanceStatusId"
                HeaderText="inAttendanceStatusId" SortExpression="inAttendanceStatusId" />
        </Columns>

    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:LearnConnectionString %>"
    SelectCommand="SELECT * FROM [attendance]"></asp:SqlDataSource>
    <asp:Button ID="Button1" runat="server" Text="Button" />

The code-behind is below:

 protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            gv1.EditIndex = 1;
        }

On clicking the Link Button, I am setting GridView Edit Index to 1 to make the row editable.

Now I want to save the updated row. On Click of another button on the Web Page, I want to save the updated changes and change the row edit mode to non-editable mode.

1 Answer 1

1

The best way to do this is using the specifics events, this way:

protected void gridview1_RowEditing(object sender, GridViewEditEventArgs e)
{
    gridview1.EditIndex = e.NewEditIndex;
    BindGrid();
}

protected void gridview1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    gridview1.EditIndex = -1;
    BindGrid();
}

To save use the event RowUpdating:

protected void gridview1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{                
    GridViewRow row = gridview1.Rows[e.RowIndex];
    int id = Convert.ToInt32(gridview1.DataKeys[e.RowIndex].Value);
    string name = ((DropDownList)(row.Cells[2].Controls[1])).SelectedValue;

    //call save method of your business layer

    gridview1.EditIndex = -1;
    BindGrid();
}

Remember to declare the event in the gridview markup.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.