我在datagridview选中3行数据但只运行前2行,另一行都不运行,而且有时还不稳定!也就是说有时我选了4个但它只运行了2 个,有时又运行3个!代码如下:
       for (int i = 0; i != dvg_TianJiaYongHui.Rows.Count;)
            {
                int kk = 0;
                i = 0;                //foreach (DataGridViewRow MyRow in dvg_TianJiaYongHui.Rows)
                for (int k = 0; k < dvg_TianJiaYongHui.Rows.Count;k ++ )
                {
                    dvg_TianJiaYongHui.EndEdit();
                    if (bool.Parse(dvg_TianJiaYongHui.Rows[k].Cells["选择"].EditedFormattedValue.ToString()) == true)
                    {
                        DataRow row = dt_right.NewRow();
                        row["机构名称"] = dvg_TianJiaYongHui.Rows[k].Cells["jgmc"].Value;
                        row["jgdm"] = dvg_TianJiaYongHui.Rows[k].Cells["jgdm"].Value;
                        row["教师姓名"] = dvg_TianJiaYongHui.Rows[k].Cells["xm"].Value;
                        row["jsbh"] = dvg_TianJiaYongHui.Rows[k].Cells["jsbh"].Value;
                        dt_right.Rows.Add(row);
                        int int_dtrowIndex = 0;
                        foreach (DataRow dtrow in dt_left.Rows)
                        {
                            if (dtrow["jgmc"] == dvg_TianJiaYongHui.Rows[k].Cells["jgmc"].Value && dtrow["jgdm"] == dvg_TianJiaYongHui.Rows[k].Cells["jgdm"].Value)
                            {
                                int_dtrowIndex = dt_left.Rows.IndexOf(dtrow);
                                break;
                            }
                        }
                        dt_left.Rows.RemoveAt(int_dtrowIndex);
                    }
                    else
                    {
                        kk++;
                    }
                }
                if (kk == dvg_TianJiaYongHui.Rows.Count)
                {
                    break;
                }                dt_left.AcceptChanges();
                dt_right.AcceptChanges();
                dvg_TianJiaYongHuinew.DataSource = dt_right;
            }

解决方案 »

  1.   

    没仔细看你代码。遍历的时候不要修改集合,否则可能会跳过某个对象。
    dt_left.Rows.RemoveAt(int_dtrowIndex);
    不太合适,尝试
    List<DataGridViewRow> removeList = new List<DataGridViewRow>();
    for (int k = 0; k < dvg_TianJiaYongHui.Rows.Count;k ++ )
    {
        ....
        //需要删除的情况下
         removeList.Add(dvg_TianJiaYongHui.Rows[k]);
    }准备好移除队列后
    foreach(DataGridViewRow row in removeList)
    {
        dvg_TianJiaYongHui.Rows.Remove(row);
    }
      

  2.   

    DataGridViewCheckBoxColumn c= new DataGridViewCheckBoxColumn();
    c.HeaderText = "选择";
    dgv1.Columns.Add(c);
    string str=string.empty;   
    foreach (DataGridViewRow dr in this.dataGridView1.Rows)   
      {   
      try   
      {   
      DataGridViewCheckBoxCell cbx = (DataGridViewCheckBoxCell)dr.Cells[0];   
      if ((bool)cbx.FormattedValue)   
      {   
      str+= dr.Cells[1].Value;   
      }   
      }   
      catch (Exception ex)   
      {   
      MessageBox.Show(ex.Message);   
      }   
      }  
     

    for (int i=0;i<dataGridView1.Rows.Count;i++)
                {
                    if(Convert.ToBoolean(dataGridView1.Rows[i].Cells[1].FormattedValue) == true)
                    {
                        
                    }            }