C# 在GridView中编辑和更新

C# 在GridView中编辑和更新,c#,asp.net,gridview,edit,C#,Asp.net,Gridview,Edit,我尝试为gridview实现编辑和更新按钮的代码,但它似乎不适合我。我按照我的要求添加了代码,但它不起作用。请参阅您的ref的gridview代码:- <asp:GridView ID="grdCSRPageData" runat="server" Width="100%" border="1" Style="border: 1px solid #E5E5E5;" CellPadding="3" AutoGenerateColumns="False" OnDataBound="grdCS

我尝试为gridview实现编辑和更新按钮的代码,但它似乎不适合我。我按照我的要求添加了代码,但它不起作用。请参阅您的ref的gridview代码:-

 <asp:GridView ID="grdCSRPageData" runat="server" Width="100%" border="1" Style="border: 1px solid #E5E5E5;" CellPadding="3" AutoGenerateColumns="False" OnDataBound="grdCSRPageData_DataBound" AllowPaging="true" CssClass="hoverTable" OnPageIndexChanging="grdCSRPageData_PageIndexChanging" DataKeyNames="Id" OnRowDeleting="grdCSRPageData_RowDeleting" PageSize="4" ShowFooter="true" OnRowUpdating="grdCSRPageData_RowUpdating" OnRowEditing="grdCSRPageData_RowEditing" OnRowCancelingEdit="grdCSRPageData_RowCancelingEdit">
                <AlternatingRowStyle BackColor="#CCCCCC" />
                <Columns>
                    <asp:BoundField DataField="page_title" HeaderText="Page Title" ItemStyle-Width="30" />
                    <asp:BoundField DataField="page_description" HeaderText="Page Description" ItemStyle-Width="30" />
                    <asp:BoundField DataField="meta_title" HeaderText="Meta Title" ItemStyle-Width="30" />
                    <asp:BoundField DataField="meta_keywords" HeaderText="Meta Keywords" ItemStyle-Width="30" />
                    <asp:BoundField DataField="meta_description" HeaderText="Meta Description" ItemStyle-Width="30" />
                    <asp:BoundField DataField="Active" HeaderText="Active" ItemStyle-Width="30" />
                    <asp:TemplateField HeaderText="Action" HeaderStyle-Width="15%">
                        <EditItemTemplate>
                            <asp:LinkButton ID="lbtnUpdate" runat="server" CommandName="Update" Text="Update" />
                            <asp:LinkButton ID="lbtnCancel" runat="server" CommandName="Cancel" Text="Cancel" />
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="~/images/edit.png" Width="15" Height="15" CommandName="Edit"  />
                            <asp:ImageButton ID="btnDelete" AlternateText="Delete" ImageUrl="~/images/delete.png" runat="server" Width="15" Height="15" CommandName="Delete" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?')" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>

请提供帮助。

使用“CommandField”获取编辑解决方案:- 请参阅GridView HTML

<asp:GridView ID="grdCSRPageData" runat="server" Width="100%" border="1" Style="border: 1px solid #E5E5E5;" CellPadding="3" AutoGenerateColumns="False" OnDataBound="grdCSRPageData_DataBound" AllowPaging="true" CssClass="hoverTable" OnPageIndexChanging="grdCSRPageData_PageIndexChanging" DataKeyNames="Id" OnRowDeleting="grdCSRPageData_RowDeleting" PageSize="5" ShowFooter="true" OnRowEditing="grdCSRPageData_RowEditing" OnRowUpdating="grdCSRPageData_RowUpdating" OnRowCancelingEdit="grdCSRPageData_RowCancelingEdit">
                <AlternatingRowStyle BackColor="#CCCCCC" />
                <Columns>
                    <asp:BoundField DataField="page_title" HeaderText="Page Title" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="page_description" HeaderText="Page Description" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="meta_title" HeaderText="Meta Title" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="meta_keywords" HeaderText="Meta Keywords" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="meta_description" HeaderText="Meta Description" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="Active" HeaderText="Active" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:TemplateField HeaderText="Action" HeaderStyle-Width="15%">
                        <ItemTemplate>
                            <asp:ImageButton ID="btnDelete" AlternateText="Delete" ImageUrl="~/images/delete.png" runat="server" Width="15" Height="15" CommandName="Delete" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?')" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:CommandField ButtonType="Image" ItemStyle-Width="15" EditImageUrl="~/images/edit.png" ShowEditButton="True" ControlStyle-Width="15" ControlStyle-Height="15" CancelImageUrl="~/images/close.png" UpdateImageUrl="~/images/update.png">
                        <ControlStyle Height="20px" Width="20px"></ControlStyle>
                    </asp:CommandField>
                </Columns>
            </asp:GridView>

对我来说没有任何错误,任何例外吗?@RahulSingh:事实上,也没有任何期待。当我添加行时,一旦弹出窗口打开,当填充它时,信息被添加到其中。那么原因可能是什么呢?你也需要这些代码吗?嘿,OP。我想如果你看一下中的这些演练会更好。@VitorCanova:我当然会看一看,现在我在这里被搞糊涂了,该怎么办?对不起,我从来没有使用过GridView的这个功能。通常我从DataKeyNames获取PK,然后再次查询数据库并使用另一个控件。
<asp:GridView ID="grdCSRPageData" runat="server" Width="100%" border="1" Style="border: 1px solid #E5E5E5;" CellPadding="3" AutoGenerateColumns="False" OnDataBound="grdCSRPageData_DataBound" AllowPaging="true" CssClass="hoverTable" OnPageIndexChanging="grdCSRPageData_PageIndexChanging" DataKeyNames="Id" OnRowDeleting="grdCSRPageData_RowDeleting" PageSize="5" ShowFooter="true" OnRowEditing="grdCSRPageData_RowEditing" OnRowUpdating="grdCSRPageData_RowUpdating" OnRowCancelingEdit="grdCSRPageData_RowCancelingEdit">
                <AlternatingRowStyle BackColor="#CCCCCC" />
                <Columns>
                    <asp:BoundField DataField="page_title" HeaderText="Page Title" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="page_description" HeaderText="Page Description" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="meta_title" HeaderText="Meta Title" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="meta_keywords" HeaderText="Meta Keywords" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="meta_description" HeaderText="Meta Description" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:BoundField DataField="Active" HeaderText="Active" ItemStyle-Width="30" ControlStyle-CssClass="k-grid td" />
                    <asp:TemplateField HeaderText="Action" HeaderStyle-Width="15%">
                        <ItemTemplate>
                            <asp:ImageButton ID="btnDelete" AlternateText="Delete" ImageUrl="~/images/delete.png" runat="server" Width="15" Height="15" CommandName="Delete" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?')" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:CommandField ButtonType="Image" ItemStyle-Width="15" EditImageUrl="~/images/edit.png" ShowEditButton="True" ControlStyle-Width="15" ControlStyle-Height="15" CancelImageUrl="~/images/close.png" UpdateImageUrl="~/images/update.png">
                        <ControlStyle Height="20px" Width="20px"></ControlStyle>
                    </asp:CommandField>
                </Columns>
            </asp:GridView>
 protected void grdCSRPageData_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        bool IsUpdated = false;
        //getting key value, row id
        int Id = Convert.ToInt32(grdCSRPageData.DataKeys[e.RowIndex].Value.ToString());

        //get all the row field detail here by replacing id's in FindControl("")..

        GridViewRow row = grdCSRPageData.Rows[e.RowIndex];
        TextBox PageTitle = ((TextBox)(row.Cells[0].Controls[0]));
        TextBox PageDesc = ((TextBox)(row.Cells[1].Controls[0]));
        TextBox MetaTitle = ((TextBox)(row.Cells[2].Controls[0]));
        TextBox Metakeywords = ((TextBox)(row.Cells[3].Controls[0]));
        TextBox Metadesc = ((TextBox)(row.Cells[4].Controls[0]));
        TextBox ddlActive = ((TextBox)(row.Cells[5].Controls[0]));

        using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultCSRConnection"].ConnectionString))
        {
            SqlCommand cmd = new SqlCommand();

            cmd.CommandText = "UPDATE tbl_Pages SET page_title=@page_title,page_description=@page_description,meta_title=@meta_title,meta_keywords=@meta_keywords,meta_description=@meta_description,Active=@Active  WHERE Id=@Id";

            cmd.Parameters.AddWithValue("@Id", Id);
            cmd.Parameters.AddWithValue("@page_title", PageTitle.Text);
            cmd.Parameters.AddWithValue("@page_description", PageDesc.Text);
            cmd.Parameters.AddWithValue("@meta_title", MetaTitle.Text);
            cmd.Parameters.AddWithValue("@meta_keywords", Metakeywords.Text);
            cmd.Parameters.AddWithValue("@meta_description", Metadesc.Text);
            cmd.Parameters.AddWithValue("@Active", ddlActive.Text == "1" ? true : false);

            cmd.Connection = conn;
            conn.Open();
            IsUpdated = cmd.ExecuteNonQuery() > 0;
            conn.Close();

        }
        if (IsUpdated)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('page updated sucessfully');window.location ='csrpage.aspx';", true);
            BindGrid();
        }
        else
        {
            //Error while updating details

            grdCSRPageData.EditIndex = -1;
            //bind gridview here..
            grdCSRPageData.DataBind();
        }
    }