DataGridView导航到下一行

时间:2012-06-22 14:20:43

标签: c# winforms datagridview

我有一个C#winforms应用程序,我正在尝试使用一个按钮,在选择一个之后将选择datagridview中的下一行。

我到目前为止的代码是:

private void button4_Click(object sender, EventArgs e)
{
  try
  {
    Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);

    // index out of range on this line
    dataGridView1.Rows[dataGridView1.SelectedRows[selectedRowCount].Index].Selected = true;

    dataGridView1.FirstDisplayedScrollingRowIndex = selectedRowCount + 1;
  }
  catch (Exception ex)
  {
    return;
  }

但是在运行它时会引发异常。任何人都可以指出我可能出错的地方。抛出的错误是:Index is out of range

7 个答案:

答案 0 :(得分:7)

试试这个:

 int nRow;
private void Form1_Load(object sender, EventArgs e)
{

    nRow = dataGridView1.CurrentCell.RowIndex;
}

private void button1_Click(object sender, EventArgs e)
{
    if (nRow < dataGridView1.RowCount )
    {
        dataGridView1.Rows[nRow].Selected = false;
        dataGridView1.Rows[++nRow].Selected = true;
    }
}

答案 1 :(得分:1)

就在这里:

dataGridView1.SelectedRows[selectedRowCount]

如果你有3个选定的行,那么selectedRowCount = 3并且有三行索引:0,1,2。

您正在尝试访问不存在的#3。

答案 2 :(得分:1)

首先,将daatgridview的“ Multiselect ”属性设置为 false。

int currentRow = dataGridView1.SelectedRows[0].Index;
if (currentRow < dataGridView1.RowCount)
{
    dataGridView1.Rows[++currentRow].Selected = true;
}

它将选择datagridview中的下一行。

答案 3 :(得分:0)

此示例读取值单元格或列是datagridview的数字4

        int courow = dataGridView1.RowCount-1;
        for (int i=0; i < courow; i++)
        {
            MessageBox.Show(dataGridView1.Rows[i].Cells[4].Value.ToString());
        }

答案 4 :(得分:0)

选择行和单元格以获得更好的解决方案。 此解决方案在DataGridView上移动行指示符。

    private void _GotoNext(object sender, EventArgs e)
    {
        int currentRow = DataGridView1.SelectedRows[0].Index;
        if (currentRow < DataGridView1.RowCount - 1)
        {
            DataGridView1.Rows[++currentRow].Cells[0].Selected = true;
        }
    }

    private void _GotoPrev(object sender, EventArgs e)
    {
        int currentRow = DataGridView1.SelectedRows[0].Index;
        if (currentRow > 0)
        {
            DataGridView1.Rows[--currentRow].Cells[0].Selected = true;
        }
    }

答案 5 :(得分:0)

我更喜欢此行选择:

首先检查是否没有多重选择:number_of_data 然后获取选择单元格(或行):row_index

private void next_click(object sender, EventArgs e)
    {
        int number_of_data = dataGridView.SelectedRows.Count;
        if (number_of_data > 1) return;

        int row_index = dataGridView.SelectedCells[0].RowIndex;

        if (row_index < dataGridView.RowCount-1)
        {
            dataGridView.Rows[row_index++].Selected = false;
            dataGridView.Rows[row_index].Selected = true;
        }

        // Do something 

    }

答案 6 :(得分:-1)

dgv_PhotoList.Rows[dgv_PhotoList.CurrentRow.Index+1].Selected = true;