【发布时间】:2018-07-09 07:22:32
【问题描述】:
我想通过应插入 DataTable 顶部的选定行重新排列 DataGridView 中的 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;
}
}
不幸的是,既没有一种方法可以将选定的行排在最前面,也没有办法因为只读而更改索引。也许有人有一个好主意来帮助我。谢谢!
【问题讨论】:
标签: c# winforms datagridview datatable