在DataGridView中以编程方式选择行

时间:2013-01-29 06:18:38

标签: c# .net visual-studio-2010 datagridview

我希望在某些事件之后选择之前选定行的行,我的代码如下所示。

int currentRow = dgvIcbSubsInfo.CurrentCell.RowIndex;
//code to execute
dgvIcbSubsInfo.Rows[currentRow].Selected = true;

执行代码后,预览将如下所示。但是我需要在id = 1272741(蓝色选择)而不是在1272737中获得符号>

enter image description here

3 个答案:

答案 0 :(得分:46)

可能您可能已经查看了DataGridView.CurrentRow Property,这是一个只读属性:

  

获取包含当前单元格的行。

但是在备注部分,有写道:

  

要更改当前行,必须将CurrentCell属性设置为a   所需行中的单元格。

另外,从DataGridView.CurrentCell Property我们发现:

  

更改此属性的值时,SelectionChanged事件   发生在CurrentCellChanged事件之前。任何SelectionChanged事件   此时访问CurrentCell属性的处理程序将获得它   以前的价值。

因此,您无需实际选择currentRow,因为在设置CurrentCell值时将会选择它(除非您在SelectionChanged之间的当前范围内执行某些代码{1}}和CurrentCellChanged个事件)。试试这个:

//dgvIcbSubsInfo.Rows[currentRow].Selected = true;
dgvIcbSubsInfo.CurrentCell = dgvIcbSubsInfo.Rows[currentRow].Cells[0];

答案 1 :(得分:0)

我想你想强调这一行。请尝试以下代码,我认为这可能会有所帮助:

Color color = dgv.Rows[prevRowIndex].DefaultCellStyle.SelectionBackColor;
dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColor = color;

答案 2 :(得分:0)

请尝试以下操作更改当前行。由于OP不清楚应该将新行显示在哪一行,因此我的示例仅显示了从当前行移至上一行(如果有前一行)。第一行代码是可选的。如果您不想使用FullRowSelect,也可以将col硬编码为0(或其他列)以使用固定列。

dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
int row = dataGridView.CurrentCell.RowIndex;
int firstRow = dataGridView.Rows.GetFirstRow(DataGridViewElementStates.None);
if (row != firstRow)
{
  row--;
  int col = dataGridView.CurrentCell.ColumnIndex;
  dataGridView.CurrentCell = dataGridView[col, row];
}