我想从gridview中的asp:checkbox中检索多个选中的值(id)。使用所选记录,我想用nhibernate执行删除功能。问题是即使我选择了多个记录,我也只从gridview获取一个值(id)。我的目标是删除gridview中的选中项。我的代码:
<ItemTemplate>
<asp:Label ID="labelID" runat="server" Text='<%# Eval("Accountant") %>' />
</ItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbDelete" runat="server" AutoPostBack="true"
oncheckedchanged="cbDelete_CheckedChanged" />
</ItemTemplate>
这个有效。该列表从检查的项目中获取所有值。
protected void btnDelete_Click(object sender, EventArgs e)
{
List<int> lstE = new List<int>();
foreach (GridViewRow gridViewRow in gvAccountants.Rows)
{
if (((CheckBox)gridViewRow.FindControl("cbDelete")).Checked == true)
{
string ID = ((Label)gridViewRow.FindControl("labelID")).ToString();
int n = Convert.ToInt32(ID);
lstE.Add(n);
}
}
this.Accountant = Data.Instance.NHibernateSession.Load<Accountant>(lstE);
Data.Instance.NHibernateSession.Delete(this.Accountant);
Data.Instance.NHibernateSession.Flush();
}
使用我的列表项的foreach循环解决了问题:
foreach (int nn in lstE)
{
//delete function
}
答案 0 :(得分:1)
点击按钮,只需输入此代码,然后从您的gridview复选框中删除AutoPostBack="true" oncheckedchanged="cbDelete_CheckedChanged"
//remove checked rows
protected void btn_removeall_Click(object sender, EventArgs e)
{
try
{
foreach (GridViewRow gr in grid.Rows)
{
CheckBox cc = (CheckBox)gr.FindControl("cbDelete");
if (cc.Checked == true)
{
string id = grid.DataKeys[gr.RowIndex].Values["ID"].ToString();
//
//call your delete function here
//
}
}
}
catch (Exception ex) { }
}
答案 1 :(得分:0)
听起来你正在从Page_Load中加载你的gridview,这很好。但在您的情况下,您需要确保您的gridview加载代码如下所示:
if(!Page.IsPostBack)
{
//gridview loading code
}
这会阻止您在单击删除按钮时重新加载gridview(并且会丢失选中的框)