如何从Row Command的gridview中删除一行?

时间:2019-01-23 05:42:20

标签: c# asp.net

我有一个网格视图,其中动态添加了数据。我需要一个onRowCommand,其中所选行将被删除。我只需要从网格视图中删除该行。

 protected void LoadDataTable()
    {
        string header = lblHeader.Text;
        string aa = tv.SelectedNode.Parent.Value;
        string child = tv.SelectedNode.Text;
        string parent = tv.SelectedNode.Parent.Text;

        var dt = new DataTable();
        dt.Columns.Clear();
        dt.Rows.Clear();
        dt.Columns.Add("TargetGLId");          
        dt.Columns.Add("TargetHead");
        dt.Columns.Add("Parent");
        dt.Columns.Add("Header");

        foreach (GridViewRow row in gvBudgetSetup.Rows)
        {
            var lblheader = (Label)row.FindControl("lblHeader");
            var lblparticular = (Label)row.FindControl("lblParticular");
            var lblGlId = (Label)row.FindControl("lblGLId");
            var lblparent = (Label)row.FindControl("lblParent");
            var dr = dt.NewRow();
            dr["TargetHead"] = lblparticular.Text;
            dr["TargetGLID"] = lblGlId.Text;
            dr["Parent"] = lblparent.Text;
            dr["Header"] = lblHeader.Text;
            dt.Rows.Add(dr);
        }            
        var dr1 = dt.NewRow();
        dr1["TargetHead"] = child;
        dr1["TargetGLID"] = tv.SelectedValue;
        dr1["Parent"] = parent;
        dr1["Header"] = header;

        dt.Rows.Add(dr1);
        gvBudgetSetup.DataSource = null;
        gvBudgetSetup.DataBind();
        gvBudgetSetup.DataSource = dt;
        gvBudgetSetup.DataBind();
    }

我已尝试使用此代码删除该行,但该行不起作用。

   protected void gvBudgetSetup_RowCommand(object sender, GridViewCommandEventArgs e)
    {
         if (e.CommandName == "Delete1")
        {
            // gvBudgetSetup.DeleteRow(e.Row.RowIndex);
            GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
            int getRowIndex = gvr.RowIndex;

            gvBudgetSetup.DeleteRow(getRowIndex);
        }
    }

这是创建的Gridview。 gridview未连接到任何数据库。 gridview中的数据是从后端代码添加的。

  <asp:GridView ID="gvBudgetSetup" runat="server" CssClass="table1" AutoGenerateColumns="false" ShowFooter="true" OnSelectedIndexChanged="gvBudgetSetup_SelectedIndexChanged"
                 ShowHeaderWhenEmpty="true" OnRowDataBound="gvBudgetSetup_RowDataBound" OnRowCommand="gvBudgetSetup_RowCommand" OnRowDeleting="gvBudgetSetup_RowDeleting"  Width="100%">
                                       <FooterStyle CssClass="GridFooter" />
                        <RowStyle CssClass="GridItem" />
                            <columns>
                                   <asp:TemplateField HeaderText="Sn">
                                         <ItemTemplate>
                                <%# Container.DataItemIndex + 1 %>
                            </ItemTemplate>
                                    </asp:TemplateField>
                                  <asp:TemplateField HeaderText="GL Id">
                                     <ItemTemplate>
                                <asp:Label ID="lblGLId" runat="server" Text='<%# Bind("TargetGLID") %>'></asp:Label>
                            </ItemTemplate>
                                </asp:TemplateField>
                                  <asp:TemplateField HeaderText="Header">
                                      <ItemTemplate>
                                <asp:Label ID="lblHeader" runat="server" Text='<%# Bind("Header") %>'></asp:Label>
                            </ItemTemplate>
                                </asp:TemplateField>
                                 <asp:TemplateField HeaderText="Parent">
                                      <ItemTemplate>
                                <asp:Label ID="lblParent" runat="server" Text='<%# Bind("Parent") %>'></asp:Label>
                            </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Child">
                                      <ItemTemplate>
                                <asp:Label ID="lblParticular" runat="server" Text='<%# Bind("TargetHead") %>'></asp:Label>
                            </ItemTemplate>
                                </asp:TemplateField>

                            <asp:TemplateField HeaderText="Delete">
                            <ItemTemplate>
                                <asp:LinkButton runat="server"  Text="Delete" CommandName="Delete1"
                                    ID="lnkDelete"></asp:LinkButton>
                            </ItemTemplate>
                                   </asp:TemplateField>
                            </columns>
                                      <EmptyDataTemplate>
                            "There are no data to display..."
                        </EmptyDataTemplate>
                            </asp:GridView>

2 个答案:

答案 0 :(得分:0)

    GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer); 
int getRowIndex = gvr.RowIndex;

    gvBudgetSetup.DeleteRow(getRowIndex);

使用此更新的代码

答案 1 :(得分:0)

更好的方法是在数据源中有一个标记,标记(删除)一行并再次绑定它。要从GridViewEvent中删除数据行,必须再次重新绑定数据源。

在数据源中引入一个Flag列

  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
              //Update the flag in datasource using the CommandArgument  value
              //Bind the datasource again.

            }
        }

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {

        }