对选中的datagridview中的多行,不能正确删除,不知什么原因.
datagridview绑定通过bindingsource, 代码如下://绑定
this.bindingsource1.DataSource = ds.Tables[0];
this.dgv.DataSource = bindingsource1;//删除
private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
{
            for (int i = 0; i < dgv.SelectedRows.Count; i++)
            {
                try
                {
                    dgv.Rows.Remove(dgv.SelectedRows[i]);
                    
                }
            }       
}
//跟踪删除过程,发现count始终是1,但删除时在DataGridView上呈现不规则情况,有多删和少删现象.

解决方案 »

  1.   

    for (int i = dgv.SelectedRows.Count - 1; i >= 0; i--) 

        dgv.Rows.Remove(dgv.SelectedRows[i]); 
    }  
      

  2.   

    to:amandag 
    按照上面的改,还是一样!
    请问,为何要这样改?另:用Del键删除没有异常出现。
      

  3.   

    但是,我现在DeleteItem_Click事件当中的删除,还是不对,和原来一样。
      

  4.   


    private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e) 

                for (int i = 0; i < dgv.SelectedRows.Count; i++) 
                { 
                    try 
                    { 
    //dgv.SelectedRows[i] 这里就有问题了,删除前面的后,这时的SelectedRows已发生变化了.
                        dgv.Rows.Remove(dgv.SelectedRows[i]); 
                        
                    } 
                }      
    }
    这样正确:
    foreach (DataGridViewRow row in dgv.SelectedRows)
    {
    dgv.Rows.Remove(row);
    }
      

  5.   

    不会哦,我刚测试了,很正常//部分代码
            public Form1()
            {
                InitializeComponent();
                DataTable data = new DataTable();
                data.Columns.Add("A", typeof(string));
                for (int i = 0; i < 20; ++i)
                {
                    DataRow dr = data.NewRow();
                    dr["A"] = i.ToString();
                    data.Rows.Add(dr);
                }
                dataGridView1.DataSource = data;
            }        private void btnLoad_Click(object sender, EventArgs e)
            {
                foreach (DataGridViewRow row in dataGridView1.SelectedRows)
                {
                    this.dataGridView1.Rows.Remove(row);
                }
            }
        }