4

私はC#winformsアプリケーションを使用しており、現在選択されている行の後にデータグリッドビューの次の行を選択するボタンを機能させようとしています。

私がこれまでに持っているコードは次のとおりです。

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

4

7 に答える 7

8

これを試して:

 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;
    }
}
于 2012-06-22T14:43:52.653 に答える
1

それはここにあります:

dataGridView1.SelectedRows[selectedRowCount]

3 つの行が選択されている場合、selectedRowCount = 3 となり、インデックスが 0、1、2 の 3 つの行があります。

存在しない #3 にアクセスしようとしています。

于 2012-06-22T14:31:18.177 に答える
1

より良い解決策を得るには、行とセルを選択してください。このソリューションは、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;
        }
    }
于 2017-10-09T12:46:29.977 に答える
0

値セルまたは列を読み取るこの例は、datagridview の番号 4 です。

        int courow = dataGridView1.RowCount-1;
        for (int i=0; i < courow; i++)
        {
            MessageBox.Show(dataGridView1.Rows[i].Cells[4].Value.ToString());
        }
于 2014-08-31T03:04:58.353 に答える
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 

    }
于 2020-08-12T15:13:57.653 に答える