从gridview C#中检索多个已检查的值

时间:2014-02-18 10:07:26

标签: c# asp.net nhibernate

我想从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
}

2 个答案:

答案 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(并且会丢失选中的框)