Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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外部的按钮从gridview中删除行_C#_Asp.net_Html - Fatal编程技术网

C# 如何使用gridview外部的按钮从gridview中删除行

C# 如何使用gridview外部的按钮从gridview中删除行,c#,asp.net,html,C#,Asp.net,Html,这似乎是一个重复的问题,但我无法得到我的答案 我有一个网格视图,当我单击网格视图外的按钮时,我需要删除一个特定的行 protected void btnDelete_Click(object sender, EventArgs e) { dtable = (DataTable)Session["data"]; DataRow row = dtable.Rows[DataGV1.SelectedIndex]; d

这似乎是一个重复的问题,但我无法得到我的答案

我有一个网格视图,当我单击网格视图外的按钮时,我需要删除一个特定的行

 protected void btnDelete_Click(object sender, EventArgs e)
      {
            dtable = (DataTable)Session["data"];
            DataRow row = dtable.Rows[DataGV1.SelectedIndex];
            dtable.Rows.Remove(row);
            DataGV1.DataSource = dtable;
            DataGV1.DataBind();
            Session["data"] = dtable;
        }
会话变量具有datatable的先前状态

protected void DataGV1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        GridView _gridView = (GridView)sender;

        // Get the selected index 
         _selectedIndex = int.Parse(e.CommandArgument.ToString());
     }
Gridview控件

onselectedindexchanged=“DataGV1\u SelectedIndexChanged”
OnRowCommand=“DataGV1\u RowCommand”onrowdeleding=“DataGV1\u rowdeleding”
AutoGenerateSelectButton=“False”DataKeyNames=“角色,姓氏”>
这似乎不起作用。
您能告诉我哪里出错了吗?

您必须将_selectedIndex存储在视图状态中,然后单击“删除”按钮,从视图状态检索_selectedIndex,并使用它从数据集中删除行,然后重新加载网格

protected void DataGV1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        GridView _gridView = (GridView)sender;

        // Get the selected index 
         ViewState["SelIndex"] = e.CommandArgument.ToString();
     }

protected void btnDelete_Click(object sender, EventArgs e)

  {
        if(ViewState["SelIndex"] == null)
            return;

        int selIndex = int.Parse(ViewState["SelIndex"]);

        dtable = (DataTable)Session["data"];
        DataRow row = dtable.Rows[selIndex ];
        dtable.Rows.Remove(row);
        DataGV1.DataSource = dtable;
        DataGV1.DataBind();
        Session["data"] = dtable;
    }
如果按钮位于
GridView
之外,则无需处理
RowCommand
事件(事实上这是不合适的)

建议:

您必须添加一个
TemplateField
列,在TemplateField的ItemTemplate中删除复选框控件,并在按钮的click handler中写入代码,以遍历
GridView.Rows
集合,通过读取
复选框
控件的值来识别所选行,如果选中该
复选框
,则执行删除操作

演示数据源(
列表

公共类项目
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共静态列表数据()
{
列表=新列表()
{
新项(){ID=11,Name=“A”},
新项(){ID=12,Name=“B”},
新项(){ID=13,Name=“C”},
新项(){ID=14,Name=“D”},
新项(){ID=15,Name=“E”},
};
退货清单;
}
}
标记:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
   <Columns>
        <asp:ButtonField DataTextField="Name" HeaderText="Name" CommandName="SingleClick"
            SortExpression="last_name" Text="Button" />
        <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
    </Columns>
</asp:GridView>
<asp:Button ID="btnDelete" runat="server" Text="Button" />

代码隐藏(页面加载)

受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
会话[“数据”]=Item.data();
GridView1.DataSource=会话[“数据”];
GridView1.DataBind();
}
/*---行命令处理程序---*/
GridView1.RowCommand+=(sa、ea)=>
{
ViewState[“RowIndex”]=ea.CommandArgument.ToString();
};
/*---删除按钮单击处理程序---*/
BTN删除。单击+=(sa,ea)=>
{
如果(视图状态[“行索引”]!=null)
{
int index=int.Parse(ViewState[“RowIndex”].ToString());
列表项=会话[“数据”]作为列表;
项目移除(索引);
GridView1.DataSource=会话[“数据”];
GridView1.DataBind();
ViewState[“RowIndex”]=null;
}
};
}

看看这些文章,它们将解释如何从gridview中删除一行/多行。
http://technico.qnownow.com/2012/06/14/how-to-delete-a-row-from-gridview-with-client-side-confirmation/

不确定,但请看一下这张复制件,谢谢您的回复。。但它仍然表示对象引用未设置为对象的实例。您从何处获得错误,请尝试添加一个try-catch块,并向我们显示一行,并始终检查对象是否为空。谢谢。。但是我不能使用复选框,我必须使用链接按钮。在文本框中获取该行,然后从gridview中删除该行。@user1488276-gridview中是否有按钮?请发布GridView标记和填充GridView的代码。我已经添加了GridView控件
public class Item
{
    public int ID { get; set; }
    public string Name { get; set; }

    public static List<Item> Data()
    {
        List<Item> list = new List<Item>()
        {
                new Item(){ ID=11, Name="A"},
                new Item(){ ID=12, Name="B"},
                new Item(){ ID=13, Name="C"},
                new Item(){ ID=14, Name="D"},
                new Item(){ ID=15, Name="E"},
        };
        return list;
    }
}
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
   <Columns>
        <asp:ButtonField DataTextField="Name" HeaderText="Name" CommandName="SingleClick"
            SortExpression="last_name" Text="Button" />
        <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
    </Columns>
</asp:GridView>
<asp:Button ID="btnDelete" runat="server" Text="Button" />
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["data"] = Item.Data();
        GridView1.DataSource = Session["data"];
        GridView1.DataBind();
    }
    /*--- RowCommand handler ---*/
    GridView1.RowCommand += (sa, ea) =>
        {
            ViewState["RowIndex"] = ea.CommandArgument.ToString();
        };
    /*--- Delete button click handler ---*/
    btnDelete.Click += (sa, ea) =>
        {
            if (ViewState["RowIndex"] != null)
            {
                int index = int.Parse(ViewState["RowIndex"].ToString());
                List<Item> items = Session["data"] as List<Item>;
                items.RemoveAt(index);
                GridView1.DataSource = Session["data"];
                GridView1.DataBind();
                ViewState["RowIndex"] = null;
            }
        };
}