none
DataGrid如何删除选中的多行? RRS feed

  • 问题

  • int y = DataGrid1.SelectedItems.Count;
                int i;
                for (i = 0; i < y; i++)
                {
                       DataRowView drv = DataGrid1.SelectedItems[i] as DataRowView;

                    DataSet1.Tb_mytableRow RemoveRow = (DataSet1.Tb_mytableRow )drv.Row;
                  
                    RemoveRow.Delete();
                }

    ===================

    DataSet1.Tb_mytableRow  是DataSet1.xsd集合里的

    现在删除选中一行可以,选中多行在删除就报错,DataGrid1.SelectedItems[i] as DataRowView; 显示索引超出范围,怎么回事呢

    2011年12月8日 6:33

答案

  • 每删掉一行你的 DataGrid1.SelectedItems.Count 就会少一个。 所以你应该用 foreach 语法

     foreach (DataRowView drv in  DataGrid1.SelectedItems)
     {
        DataSet1.Tb_mytableRow RemoveRow = (DataSet1.Tb_mytableRow )drv.Row;
        RemoveRow.Delete();
     }
    

    或者你先把他们全部读取出来,另存一个数组,然后从这个数组中再读一遍,进行DataSet删除。

     



    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 WCF小Q 2011年12月16日 15:47
    2011年12月12日 8:35
    版主

全部回复

  • 因为你删掉一行后 DataGrid1的总行数就变化了, 本来有5行的现在只有4行了,如果你循环的i没有做相比应变化,是会造成数组越界的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2011年12月8日 9:46
    版主
  • 那应该怎么办能移除多行

    2011年12月12日 7:51
  • 每删掉一行你的 DataGrid1.SelectedItems.Count 就会少一个。 所以你应该用 foreach 语法

     foreach (DataRowView drv in  DataGrid1.SelectedItems)
     {
        DataSet1.Tb_mytableRow RemoveRow = (DataSet1.Tb_mytableRow )drv.Row;
        RemoveRow.Delete();
     }
    

    或者你先把他们全部读取出来,另存一个数组,然后从这个数组中再读一遍,进行DataSet删除。

     



    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 WCF小Q 2011年12月16日 15:47
    2011年12月12日 8:35
    版主