Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “从图像上的GridView中删除和更新行”按钮_C#_Asp.net_Gridview - Fatal编程技术网

C# “从图像上的GridView中删除和更新行”按钮

C# “从图像上的GridView中删除和更新行”按钮,c#,asp.net,gridview,C#,Asp.net,Gridview,我想单击ImageButton从Gridview中删除记录。请参阅GridView代码以供参考:- <asp:GridView ID="grdCSRPageData" runat="server" Width="100%" border="1" Style="border: 1px solid #E5E5E5;" CellPadding="3" AutoGenerateColumns="false" OnDataBound="grdCSRPageData_DataBound" PageSi

我想单击ImageButton从Gridview中删除记录。请参阅GridView代码以供参考:-

<asp:GridView ID="grdCSRPageData" runat="server" Width="100%" border="1" Style="border: 1px solid #E5E5E5;" CellPadding="3" AutoGenerateColumns="false" OnDataBound="grdCSRPageData_DataBound" PageSize="5" AllowPaging="true" OnPageIndexChanging="grdCSRPageData_PageIndexChanging" OnRowCommand="grdCSRPageData_RowCommand">
                <AlternatingRowStyle BackColor="#CCCCCC" />
                <Columns>
                    <asp:TemplateField ItemStyle-Width="30">
                        <ItemTemplate>
                            <asp:CheckBox ID="chkSelect" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <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%">
                        <ItemTemplate>
                            <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="~/images/edit.png" Width="15" Height="15" />
                            <span onclick="return confirm('Are you sure want to delete?')">
                                <asp:ImageButton ID="btnDelete" AlternateText="Delete" ImageUrl="~/images/delete.png" runat="server" Width="15" Height="15" CommandName="DeleteRow" />
                            </span>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:LinkButton ID="btnUpdate" Text="Update" runat="server" CommandName="Update" />
                            <asp:LinkButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" />
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
试试这个

protected void grdCSRPageData_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "DeleteRow")
        {
            int rowIndex = ((GridViewRow)((ImageButton)e.CommandSource).NamingContainer).RowIndex;
            grdCSRPageData.Rows.RemoveAt(rowIndex);
            //delete from database
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
               int Id = Convert.ToInt32(e.CommandArgument);
               string sql = "DELETE FROM YourTable WHERE ID = @ID";
               SqlCommand cmd = new SqlCommand(sql,connection);
               cmd.Parameters.AddWithValue("@ID",Id);
               cmd.ExecuteNonQuery();
           }
        }
    }
请参阅有关GridView移除的文档

文件

更新

要从其行获取gridView,可以调用此函数

public static GridView GetParentGridView(GridViewRow row)
        {

            GridView gridView = (GridView)row.NamingContainer;
            return gridView;
        }
使用它在我的代码中获取gridview

替换

 grdCSRPageData.Rows.RemoveAt(rowIndex)

确保只有在页面加载时没有回发时才绑定网格

protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
        //bind the 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" OnPageIndexChanging="grdCSRPageData_PageIndexChanging" DataKeyNames="Id" OnRowDeleting="grdCSRPageData_RowDeleting" OnClientClick="return confirm('Are you sure you want to delete this record?')">
                <AlternatingRowStyle BackColor="#CCCCCC" />
                <Columns>
                    <%-- <asp:TemplateField ItemStyle-Width="30">
                        <ItemTemplate>
                            <asp:CheckBox ID="chkSelect" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>--%>
                    <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%">
                        <ItemTemplate>
                            <%-- <asp:LinkButton ID="lbtnEdit" runat="server" CommandName="Edit" Text="Edit" />--%>
                            <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="~/images/edit.png" Width="15" Height="15" />
                            <%-- <span onclick="return confirm('Are you sure want to delete?')"> -- %>
                                <%--<asp:LinkButton ID="btnDelete" Text="Delete" runat="server" CommandName="Delete" ></asp:LinkButton>--%>
                           <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>
                        <EditItemTemplate>
                            <asp:LinkButton ID="btnUpdate" Text="Update" runat="server" CommandName="Update" />
                            <asp:LinkButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" />
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

数据的绑定也应该在“!IsPostBack'方法

祝你好运!看来你有了一个好的开始。你真的有问题吗?@entropic:我需要更新和删除ImageButton的代码。。。到目前为止,您尝试了哪些不起作用的方法?@entropic:我尝试了使用CommandName属性的onRowCommand,但它不起作用受保护的无效grdCSRPageData_RowCommandobject发送方,GridViewCommandEventArgs e{如果e.CommandName==DeleteRow{//如果需要行索引int rowIndex=GridViewRowImageButtone.CommandSource.NamingContainer.rowIndex;int Id=Convert.ToInt32e.CommandArgument;//后跟代码}}'在我的代码中要从表格和gridview1中删除哪些内容。你应该编辑你的问题并将代码放在那里。2.什么不起作用?3.我在这里暗中试探一下-但是你没有在上面的代码中定义一个可以在ImageButton上引用的命令名。数据会从选项卡中删除吗le?从gridview?是的..是否要将其从数据库中删除?“Rows.RemoveAt”不包含定义错误。我仍然在“Rows.RemoveAt”处遇到相同的错误,请尝试检查var testGridView=GetParentGridViewGridViewRowImageButtone.CommandSource.NamingContainer的类型。让我知道它似乎与我的sug非常相似我在聊天中写的手势。我不明白你为什么写代码作为你的答案而忽略我自己的答案Faby,这不要紧。我得到一件事,我必须将PageLoad上的数据绑定到!iPostBack中。这很有效。我会标记你的答案,不是问题。如果有人想知道详细信息,就发布
protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
        //bind the 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" OnPageIndexChanging="grdCSRPageData_PageIndexChanging" DataKeyNames="Id" OnRowDeleting="grdCSRPageData_RowDeleting" OnClientClick="return confirm('Are you sure you want to delete this record?')">
                <AlternatingRowStyle BackColor="#CCCCCC" />
                <Columns>
                    <%-- <asp:TemplateField ItemStyle-Width="30">
                        <ItemTemplate>
                            <asp:CheckBox ID="chkSelect" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>--%>
                    <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%">
                        <ItemTemplate>
                            <%-- <asp:LinkButton ID="lbtnEdit" runat="server" CommandName="Edit" Text="Edit" />--%>
                            <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="~/images/edit.png" Width="15" Height="15" />
                            <%-- <span onclick="return confirm('Are you sure want to delete?')"> -- %>
                                <%--<asp:LinkButton ID="btnDelete" Text="Delete" runat="server" CommandName="Delete" ></asp:LinkButton>--%>
                           <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>
                        <EditItemTemplate>
                            <asp:LinkButton ID="btnUpdate" Text="Update" runat="server" CommandName="Update" />
                            <asp:LinkButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" />
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
  protected void grdCSRPageData_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        bool IsDeleted = false;
        //getting key value, row id
        int Id = Convert.ToInt32(grdCSRPageData.DataKeys[e.RowIndex].Value.ToString());
        using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultCSRConnection"].ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "DELETE FROM tbl_Pages WHERE Id=@ID";
                cmd.Parameters.AddWithValue("@ID", Id);
                cmd.Connection = conn;
                conn.Open();
                IsDeleted = cmd.ExecuteNonQuery() > 0;
                conn.Close();
            }
        }
        if (IsDeleted)
        {
            //record has been deleted successfully!
            //call here gridview bind method and replace it..
            ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Page Succesfully deleted');window.location ='csrpage.aspx';", true); ;
            grdCSRPageData.DataBind();
        }
        else
        {
            //Error while deleting record
            Response.Write("Some error");
        }
    }