我目前所做的是对ListBox数据作批量删除,添加到数据库表操作,我用的是students表,我把学生编号ID绑定到ListBox中,显在ListBox内的是学生姓名。
 具体操作代码如下:
private void ListboxBind()//把数据绑定到ListBox中
{
  strsql = "select StudentID,StudetnName from students";
  ds = new DataSet();
  da = new SqlDataAdapter(strsql,conn);
  conn.Open();
  da.Fill(ds,"B");
  ltBRights.DataSource=ds.Tables["B"].DefaultView;
  ltBRights.DataTextField="StudentName";
  ltBRights.DataValueField="StudentID";
  ltBRights.DataBind();
  conn.Close();
}
//下面是对Listbox的数据作批量删除操作。
private void lbtnDelRights_Click(object sender, System.EventArgs e)//删除权限处理事件
{
if(ltBRights.SelectedIndex.ToString()=="")
{
Response.Write("<script language='javascript'>alert('请选择一个对象!');</"+"script>");
}
else
{
for (int i=0;i<=ltBRights.Items.Count;i++)
  {
if (ltBRights.Items[i].Selected == true)
{
strsql = "Delete Rights where RightID='"+ltBRights.Items[i].Value+"'";
ExecuteSql(strsql);//执行SQL语句 
ListboxBind();//最后绑定Listbox状态
}
  }
               
}
}
 当作批量删除时,会出现如下错误:(索引超出范围。必须为非负值并小于集合大小。参数名: index )
请问各位高手这是什么回事啊????

解决方案 »

  1.   

    for (int i=0;i<=ltBRights.Items.Count;i++)
      {
    if (ltBRights.Items[i].Selected == true)
    {
    strsql = "Delete Rights where RightID='"+ltBRights.Items[i].Value+"'";
    ExecuteSql(strsql);//执行SQL语句 
    ListboxBind();//最后绑定Listbox状态
    }
      }
    大概是这儿问题吧
    在批量删除结束前不要重新绑定
      

  2.   

    把 ListboxBind(); 移到for循环之外。
      

  3.   

    先把ListboxBind()移到FOR循环外面试试看。
      

  4.   

    i<=ltBRights.Items.Count????我想应该是<吧.
      

  5.   

    把ListboxBind()移到FOR循环外面,确实可以批量删除,但也是异常现象,请问是什么问题啊?
    当作批量删除时,会出现如下错误:(索引超出范围。必须为非负值并小于集合大小。参数名: index )
      

  6.   

    for (int i=0;i<ltBRights.Items.Count;i++)
    不能用<=,要用<