![](/img/trans.png)
[英]How to delete the specific row from gridview.Using builtin delete command button of gridview
[英]how to delete a row from the gridview by using a button outside the gridview
这似乎是一个重复的问题,但我无法得到我的答案。
我有一个网格视图,当我单击gridview外部的按钮时,需要删除特定的行。
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;
}
会话变量具有数据表的先前状态。
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_SelectedIndexChanged"
OnRowCommand="DataGV1_RowCommand" OnRowDeleting="DataGV1_RowDeleting"
AutoGenerateSelectButton="False" DataKeyNames="Role,Last_name">
<Columns>
<asp:ButtonField DataTextField="last_name" HeaderText="Last_name" CommandName="SingleClick"
SortExpression="last_name" Text="Button" />
<asp:BoundField DataField="role" HeaderText="role" SortExpression="role" />
<asp:BoundField DataField="role" HeaderText="role" HeaderText="Frist_name"
SortExpression="first_name" Text="First_name" />
</Columns>
</asp:GridView>
这似乎不起作用。 你能告诉我我要去哪里了吗?
您必须将_selectedIndex存储在ViewState中,然后单击删除按钮,从Viewstate中检索_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;
}
如果button在GridView
之外,则无需处理RowCommand
事件(实际上这是不合适的)。
建议:
您必须添加一个TemplateField
列,将CheckBox控件拖放到TemplateField的ItemTemplate中,并在按钮的单击处理程序中编写代码以遍历GridView.Rows
集合,通过读取CheckBox
控件的值来标识选定的行,如果CheckBox
是检查。
演示数据源( List<T>
)
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" />
后台代码(Page_Load)
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;
}
};
}
看一下这些文章,这些文章将解释如何从gridview中删除单行/多行。 http://technico.qnownow.com/2012/06/15/how-to-delete-multiple-rows-from-gridview-with-checkboxes/ http://technico.qnownow.com/2012/06/14/如何从带有客户端确认的gridview删除行/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.