DataGridView根据数据查找行并定位,笔者找不到直接的方法,只能曲线求国。直接以代码来演示,大家可参考之,注意大数据量时尽量不用此方法。演示的代码数据是已经查询过的,因数据更新,需要重新查询,然后再定位到刷新之前的位置。个中意思,请看代码体会,就不做过多的注释和说明了。
var dr = dt.DefaultView[dgv1.CurrentRow.Index];
string sj = hl_lib.objtostr(dr["sj"]); //时间
string mc = hl_lib.objtostr(dr["mc"]); //项目
string je = hl_lib.objtostr(dr["je"]); //金额
var oldIndex = dgv1.CurrentRow.Index;
btn_Search_Click(sender, e);
if(dgv1.RowCount >= oldIndex)
{
try
{
var celmc = dgv1["mc", oldIndex];
if (celmc != null)
{
if (mc == hl_lib.objtostr(celmc.Value) &&
sj == hl_lib.objtostr(dgv1["sj", oldIndex].Value) &&
je == hl_lib.objtostr(dgv1["je", oldIndex].Value))
{
dgv1.FirstDisplayedScrollingRowIndex = oldIndex > 10 ? oldIndex - 10 : oldIndex;
//定位到指定行(样式)
dgv1.ClearSelection();
dgv1.Rows[oldIndex].Selected = true;
//让指定行处于选中状态(状态)
try { dgv1.CurrentCell = celmc; } catch (Exception ex) { return; }
dgv1.CurrentRow.Selected = true;
dgv1_CellClick(sender, new DataGridViewCellEventArgs(celmc.ColumnIndex, oldIndex));
return;
}
}
}
catch(Exception ex){
return;
}
}
try
{
int rowCount = dgv1.Rows.Count;//得到总行数
for (int i = 0; i < rowCount; i++)//得到总行数并在之内循环
{
var celmc = dgv1["mc", i];
if (celmc != null)
{
if (mc == hl_lib.objtostr(celmc.Value) &&
sj == hl_lib.objtostr(dgv1["sj", i].Value) &&
je == hl_lib.objtostr(dgv1["je", i].Value))
{
dgv1.FirstDisplayedScrollingRowIndex = i > 10 ? i - 10 : i;
//定位到指定行(样式)
dgv1.ClearSelection();
dgv1.Rows[i].Selected = true;
//让指定行处于选中状态(状态)
try { dgv1.CurrentCell = celmc; }catch (Exception ex){return;}
dgv1.CurrentRow.Selected = true;
dgv1_CellClick(sender, new DataGridViewCellEventArgs(celmc.ColumnIndex, oldIndex));
return;
}
}
}
}
catch (Exception ex)
{
return;
}
以上就是知道不分享的《在Winform的DataGridView中查找数据所在行并定位选择》,希望对您有所帮助。