DataGridView在表

时间:2018-01-30 11:56:12

标签: c# winforms datagridview datatable

我想在DataGridView中按照应该插入DataTable顶部的选定行重新排序我的DataTable .-

在订购行之前看起来如何: before sort selected rows

我订购它们后应该如何照顾它们: after sort selected rows

我尝试使用后面的代码,但由于我在DataTable中的每一行使用for循环,所以它非常慢:

if (MainWindow.table_G_Level_Data.dataGridView1.SelectedRows.Count > 0)
{
   int count = MainWindow.table_G_Level_Data.dataGridView1.Rows.Count;
   DataTable tempTableDataSource = new DataTable();

   int selectorCounter = 0;

   tempTableDataSource = (DataTable)(MainWindow.table_G_Level_Data.dataGridView1.DataSource);
   tempTableClone = tempTableDataSource.Clone();

   for (int i = 0; i < MainWindow.table_G_Level_Data.dataGridView1.Rows.Count; i++)
   {
      if (MainWindow.table_G_Level_Data.dataGridView1.Rows[i].Selected == true)
      //first add all selected rows to get them on top
      {
         DataRow dr = ((DataRowView)MainWindow.table_G_Level_Data.dataGridView1.Rows[i].DataBoundItem).Row;
         tempTableClone.ImportRow(dr);
         selectorCounter++;
      }
   }

   for (int i = 0; i < MainWindow.table_G_Level_Data.dataGridView1.Rows.Count; i++)
   {
      if (MainWindow.table_G_Level_Data.dataGridView1.Rows[i].Selected == false)        
      //second add all unselected rows to get them below the selected
      {
         DataRow dr = ((DataRowView)MainWindow.table_G_Level_Data.dataGridView1.Rows[i].DataBoundItem).Row;
         tempTableClone.ImportRow(dr);
      }
   }

   MainWindow.table_G_Level_Data.dataGridView1.DataSource = tempTableClone;

   for (int i = 0; i < selectorCounter; i++)
   {

     MainWindow.table_G_Level_Data.dataGridView1.Rows[i].Selected = true;
   }
}

遗憾的是,既没有一种方法可以将所选行排在最前面,也不会因为只读而改变索引。也许有人有一个好主意来帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 添加一些隐藏的列(命名为&#34; Selected&#34;)
  2. 将其值设置为&#34; 1&#34; (或任何适合您的方式)选择行
  3. 使用Splitter1方法对该列和DataGridView.Sort(...)列进行排序/排序。
  4. 请参阅this,了解如何对多列进行排序。