Gr中可edit ,这样中必然会出现所有可见列都为空值的,我想在某行失去焦点时,进行判断,如空则删除,用dataGridView1_RowLeave事件,但出错信息为:不能在此事件中执行操作。高手请教,该怎做?private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
        {
            bool flag = true;
           
            for (int i = 0; i < dataGridView1.ColumnCount; i++)
            {
                if (dataGridView1.Rows[e.RowIndex].Cells[i].Value.ToString ().Trim ()=="")
                    flag = true;
                else                { flag = false;
                  break; 
                }            }
            if (flag&&(e.RowIndex!=this.dataGridView1.Rows.Count-1 ))//最后一行,不删
            {                try
                {
                    this.dataGridView1.Rows.Remove(this.dataGridView1.Rows[e.RowIndex]);//有问题
                    //this.dataGridView1.Rows.RemoveAt(e.RowIndex);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString()+"kkk"+e.RowIndex.ToString ());
                   
                }            }
        }

解决方案 »

  1.   

    只是个思路,lz可以试下
            DataTable dt;
            private void Form1_Load(object sender, EventArgs e)
            {
                dt = new DataTable();
                dt.Columns.Add(new DataColumn("id"));
                dt.Columns.Add(new DataColumn("name"));            DataRow dr = null;
                dr = dt.NewRow();
                dr["id"] = "001";
                dr["name"] = "Name1";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["id"] = "002";
                dr["name"] = "Name2";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["id"] = "001";
                dr["name"] = "Name1";
                dt.Rows.Add(dr);            //dt.TableNewRow += new DataTableNewRowEventHandler(dt_NewTableRow);
                dataGridView1.DataSource = dt;
            }
            bool flag = true;
            private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
            {
                if (flag == false)
                    dt.Rows.RemoveAt(e.RowIndex);
                flag = false;        }
      

  2.   

    谢楼上
    如改成
    bool flag = true;
           
            private void dataGridView1_RowLeave_1(object sender, DataGridViewCellEventArgs e)
            {  
                for(int i=0;i<dt.Columns.Count ;i++)
                {
                    if (dt.Rows[e.RowIndex][i].ToString() == "")
                        flag = true;
                    else
                    {
                        flag = false; break;
                    }
                }            if (flag)
                    dt.Rows.RemoveAt(e.RowIndex);
                
            }=====================
    出现错误如下
    1 每次清空一行,失去焦点,不能马上删除,当它再次获得焦点,失去时,才删除
    2 不能在最后一行空白行,写入数据,每次写入的数据是不可能马上放到dt里的吧,我的本意是,不管后添加的,还是原来的,只要一清空,DataGridView 里不能有空行,dt的数据另外处理