如何做到C1TrueDBGrid列排序时,选中数据行的状态不变.
如:列名:aaa bbb ccc
一行:111 222 123
二行:123 333 555
三行:133 444 666
四行:144 766 909选中的是一行:111 222 123
点击列“aaa"后排序后:
列名:aaa bbb ccc
一行:144 766 909
二行:133 444 666
三行:123 333 555
四行:111 222 123目前选中还是一行:144 766 909怎么做到选中四行:111 222 123 呢??
如:列名:aaa bbb ccc
一行:111 222 123
二行:123 333 555
三行:133 444 666
四行:144 766 909选中的是一行:111 222 123
点击列“aaa"后排序后:
列名:aaa bbb ccc
一行:144 766 909
二行:133 444 666
三行:123 333 555
四行:111 222 123目前选中还是一行:144 766 909怎么做到选中四行:111 222 123 呢??
以DataGrid举例,可以在排序前记录下当前选中行的主键,然后帮定后重新定位到该行排序前:string id = this.DataGrid1.SelectedItem.Cells[0].Text ;排序后:
foreach(DataGridItem r in this.DataGrid1.Items)
{
if(r.Cells[0].Text == id)
{
this.DataGrid1.SelectedIndex = r.ItemIndex;
break;
}
}
DataGrid1.SelectedItem
DataGrid1.SelectedIndex
SelectedItem
SelectedIndex
属性了.
我的辦法比較笨拙,是先每次點擊行的時候,用一string變量讀取每行第一列的數值,
在每次進行排序的時候加上個ColumnHeaderMouseClick事件,把剛剛的值傳入進來再進行選中動作!
方法很笨啊,效果還好啊,我的數據77條沒有影響,大的數據量就不知道了!
代碼如下:
//定義變量
string sCell="";
//委託方法
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.Click += new EventHandler(dataGridView1_Click);
dataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView1_ColumnHeaderMouseClick);
}
//賦值變量
void dataGridView1_Click(object sender, EventArgs e)
{
sCell = dataGridView1.SelectedCells[0].Value.ToString();
}
//點擊排序標題
void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView1.SelectedCells[0].Selected = false;
SelectRow(sCell); }
//選中行
void SelectRow(string sindex)
{
foreach (DataGridViewRow r in dataGridView1.Rows)
{
if (r.Cells[0].Value.ToString() == sindex)
{
r.Selected = true;
break;
}
} }
----------------
小弟初學,方法不好見諒啊!