保持用户选中的datagridview行

时间:2010-06-15 16:50:16

标签: c# .net winforms

我需要C#中的代码段代码,以便在双击该行后从DataGridView中选择行。

现在我正在显示数据集中的数据,选择模式为FullRowSelect。 有什么方法可以设置吗?

有两种情况需要处理:

  1. 每次计时器勾选所选行时,总是转到datagridview的第一行。
  2. 单击一行后,会选中该行,但在计时器滴答后,所选行将转到第一行。
  3. 感谢您的帮助!

    新手程序员

3 个答案:

答案 0 :(得分:1)

您必须在函数timer_tick

中执行此操作
private void timer3_Tick(object sender, EventArgs e)
    {
        int rowIndex;

        if (dgvOrdini.Rows.Count == 0)  //here I check if the dgv is empty
            rowIndex = 0;
        else
        // I save the index of the current row in rowIndex
        rowIndex = this.dgvOrdini.CurrentCell.RowIndex;  

        .......
        .......
        if (dgvOrdini.Rows.Count != 0)  //Now if the dgv is not empty
           //I set my rowIndex
           dgvOrdini.CurrentCell = dgvOrdini.Rows[rowIndex].Cells[0];    
    }

使用此方法,所选行不会更改。

答案 1 :(得分:1)

试试这个。 首先保存实际选择的行的索引

int index = -1 //set the index to negative (because if you have only 1 row in your grid, this is a zero index
if (yourdatagridview.Rows.Count > 0) //if you have rows in datagrid
{
 index = yourdatagridview.SelectedRows[0].Index; //then save index into variable
}

现在您可以更新datagridview ...

更新后,您必须设置选择的行:

if (index != -1) //if index == -1 then you don't have rows in your datagrid
{
 yourdatagridview.Rows[index].Selected = true; 
}

这是有效的!

答案 2 :(得分:0)

  

现在我正在显示数据集中的数据,选择模式为FullRowSelect。有什么方法可以设置吗?

DataGridView.SelectionMode属性将通过DataGridViewSelectionMode枚举为您执行此操作。

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

至于你提出的其他问题,我认为还需要进一步的细节。你之后有什么样的行为?

编辑#1

根据你的评论:

  

在我连续点击后,会打开一个新表单。问题是,每次启用计时器时,都会调用populate_DatagridView方法,并且所选行位于第一行,而不是选中单击的行。

一种解决方案可能如下:

private _dataGridViewRowSelectedIndex;

private void dataGridview1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
    DataGridView dgv = (DataGridview)sender;
    if (dgv.Rows.GetRowState(e.RowIndex) == DataGridViewElementStates.Selected)
        _dataGridViewRowSelectedIndex = e.RowIndex;

    // Open your form here...

    // And when your form returns...
    // Set the selected index like so
    dgv.Rows[_dataGridViewRowSelectedIndex].Selected = true;
}

这会帮助你吗?