【问题标题】:How to delete a row in a dynamically generating grid view?如何在动态生成的网格视图中删除一行?
【发布时间】:2014-01-12 11:35:03
【问题描述】:

尊敬的先生,您好,

我正在生成一个类似于订购系统的购物车,在其中我将产品名称、产品价格和产品数量从 DataTable 添加/绑定到 GridView。

我在 gridview 中添加了一个 ImageButton,仅用于删除选定的行。

我也知道我们不能从动态生成的网格视图中删除一行。所以我在 ImageButton Click 事件中放置了一个代码,该事件从 DataTable 中删除了该行(在整个过程中是 STATIC)并再次将 Data 与 GridView 绑定。

请注意,我已经在“BTN_ADD TO CART_Clicked”中将数据与 gridview 绑定过一次。

这是我的代码 sn-p,

protected void gvorderlist_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Delete")
    {
        int index = Convert.ToInt32(e.CommandArgument);

        DataRow row = dt.Rows[index];
        dt.Rows.Remove(row);
        gvorderlist.DataSource = dt;
        gvorderlist.DataBind();
    }
}

而 ASP 代码是,

<asp:GridView ID="gvorderlist" runat="server" CellPadding="4" 
    ForeColor="#333333" GridLines="None" AllowPaging="True" PageSize="5" 
    onpageindexchanging="gvorderlist_PageIndexChanging" 
    onrowcommand="gvorderlist_RowCommand">
    <AlternatingRowStyle BackColor="White" />
    <Columns>
        <asp:TemplateField HeaderText="Cancel Order" ShowHeader="False">
            <ItemTemplate>
                <asp:ImageButton ID="ImgbtnCancelOrder" runat="server" CausesValidation="false" 
                     ImageUrl="~/images/cross.PNG" OnClientClick="Javascript: return confirm('Aap Chutiye hai');" CommandName="Delete"
                    CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

我收到一条错误消息:GridView 'gvorderlist' 触发了未处理的事件 RowDeleting。

任何帮助将不胜感激... 谢谢你

【问题讨论】:

  • 一旦你将 DataTable 绑定到 Datagridview,datatable 中的更改会自动反映在 datagridview 中。在按钮单击事件上检索唯一列值并将其从数据表中删除。
  • PrakashVishwakarma,你是想建议我不要在“删除按钮点击事件”中再次绑定 gridview 吗??
  • 在imagebutton单击事件中,我检索我要删除的行的行索引然后我执行上述代码......所以如果有任何错误请指导我
  • 你试图从 datagridview 中删除一行,这是错误的方法。最好从数据表中删除该行。由于绑定已经完成。数据表中的更改将自动反映在 gridview 中。对不起,延迟回复。由于星期天很忙。

标签: asp.net gridview cart


【解决方案1】:

错误说明了一切。您需要在标记中定义OnRowDeleting的事件方法:

<asp:GridView ID="gvorderlist" runat="server" CellPadding="4" 
    ForeColor="#333333" GridLines="None" AllowPaging="True" PageSize="5" 
    onpageindexchanging="gvorderlist_PageIndexChanging" 
    onrowcommand="gvorderlist_RowCommand" OnRowDeleting="gvorderlist_RowDeleting">
    <AlternatingRowStyle BackColor="White" />
    <Columns>
        <asp:TemplateField HeaderText="Cancel Order" ShowHeader="False">
            <ItemTemplate>
                <asp:ImageButton ID="ImgbtnCancelOrder" runat="server" CausesValidation="false" 
                     ImageUrl="~/images/cross.PNG" OnClientClick="Javascript: return confirm('Aap Chutiye hai');" CommandName="Delete"
                    CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

并在代码中添加一个空方法:

protected void gvorderlist_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    // No need to implement code here
}

【讨论】:

    【解决方案2】:

    GridView 的属性区分大小写,因此将onrowcommand 更改为OnRowCommand 并查看单击删除按钮时是否触发。如果没有,您需要明确定义 OnRowDeleting。 (同时改变onpageindexingchange的大小写)

    【讨论】:

      【解决方案3】:

      提供Command Name=D 而不是删除。当Command Name =Delete时搜索Row_Deleting事件。

      【讨论】:

        猜你喜欢
        • 2021-08-24
        • 2020-11-06
        • 2012-05-13
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 2017-11-10
        相关资源
        最近更新 更多