我想在DataGridView中按照应该插入DataTable顶部的选定行重新排序我的DataTable .-
我尝试使用后面的代码,但由于我在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;
}
}
遗憾的是,既没有一种方法可以将所选行排在最前面,也不会因为只读而改变索引。也许有人有一个好主意来帮助我。谢谢!
答案 0 :(得分:1)
Splitter1
方法对该列和DataGridView.Sort(...)
列进行排序/排序。请参阅this,了解如何对多列进行排序。