DataGridViewで現在選択されている行のインデックス


96

とても簡単です。どのように私は、現在選択されているのインデックスを取得しますRowのはDataGridViewRowオブジェクトは必要ありません。インデックス(0 .. n)が必要です。

回答:


165

DataGridView のRowIndexプロパティにはCurrentCellプロパティがあります。

datagridview.CurrentCell.RowIndex

SelectionChangedイベントを処理し、上記のように選択した行のインデックスを見つけます。


1
完璧です。SelectedRows [0] .Indexよりも、これは最も単純/最速のようです。それは良い仮定でしょうか?
ErikE 2010

うーん、私は複数の行が選択されることを考えていませんでした。この場合、現在のセルの動作はわかりません。
フレッチャー2010

1
それがExcelのようなものである場合、選択されたリストは多くの行/列になる可能性がありますが、現在/アクティブなセルは1つしかありません。私は現在の行のみを気にするので、これで問題ありません。
ErikE 2010

18
私はこの投稿が古いことを知っていCurrentCellますが、他の誰かを助けるかもしれません:「選択された」とは異なる「アクティブな」セルを返します。複数の行が選択されている場合でも、アクティブセルは別の場所にある可能性があり、アクティブセルは1つしか存在できません
Luke Marlin

3
また、データグリッドビューですべての選択を解除しても、セルの1つはアクティブなままなので、行が選択されていないため、これがnullであるなどの条件に依存することはできません。
Daniel Grey

37

DGVのSelectedRowsコレクションでIndexプロパティを使用します。

int index = yourDGV.SelectedRows[0].Index;

これが良いと思いますか、それともDGV.CurrentCell.RowIndexですか?
ErikE 2010

4
現在のセルが選択されていない場合があるため、これがより良い方法です。
リトルエンディアン2014

1
@thethuthinnangで行を選択していない場合、@ JayRiggsのソリューションはインデックスエラー2をスローします。あなたはそれでラップするほうがいいでしょうif
アラン・ルイン

7
dataGridView1.SelectedRows[0].Index;

または、LINQを使用して、選択したすべての行のインデックスを取得したい場合は、次のようにします。

dataGridView1.SelectedRows.Select(r => r.Index);

役立ちました(IndexOfはまだ「私のレーダー」にはありませんでした)が、行を取得する必要がないため、ラウンドアバウトです。.Indexメソッドは私が探していたものです。
ErikE 2010


3

これを試してみてください...選択した行のインデックスのインデックスが表示されます...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());

2

これを試して

bool flag = dg1.CurrentRow.Selected;

if(flag)
{
  /// datagridview  row  is  selected in datagridview rowselect selection mode

}
else
{
  /// no  row is selected or last empty row is selected
}

おかげで、グリッドビューに関連付けられていないコントロールを使用したときに、選択した行の非表示の値を特定するために必要なことは正確にわかりました。
orgtigger 2014年

2

@JayRiggsの回答を変更しましたが、これは機能します。ifSelectedRowsが空になることがあるので、インデックス操作が例外をスローするため、これが必要です。

if (yourDGV.SelectedRows.Count>0){
    int index = yourDGV.SelectedRows[0].Index;
}

1

DataGridView.CurrentCellAddressを試してください。

戻り値:現在アクティブなセルの行と列のインデックスを表すPoint。

EG最初の列と5番目の行を選択すると、次の結果が得られます:Point(X = 1、Y = 5)


PS行インデックスを求めて以来、あなたが言っていたとしたら、私たちの関係はDataGridView.CurrentCellAddress.Y
それほど不安定ではなかった

この時点で、これらの答えはすべて有効であると思います。目的に最も適したものを選択するのは、あなた次第です。それぞれに対して生成されるコードを実際に確認したい場合は、さまざまな実装を入力して.NET Reflector(red-gate.com/products/reflector)のIL を確認することをお勧めしますが、多くの人が言うように、これはマイクロです-最適化。それは本当に意図の中で最も明確なものにかかっています。PS Noteは、将来、より明確になると思われます。
キラナッシュ2010

1

それを試してみてください:

int rc=dgvDataRc.CurrentCell.RowIndex;** //for find the row index number
MessageBox.Show("Current Row Index is = " + rc.ToString());

お役に立てば幸いです。


3
チップインしていただきありがとうございます。あなたの答えは、解決策を与えた選択された(そして最も賛成された答え)の複製ですdatagridview.CurrentCell.RowIndex。申し訳ありませんが、この投稿を完全に重複して削除することをお勧めします。
ErikE 2015年

0

あなたはこのコードを試すことができます:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;

0

行の値を取得するをクリックした場合に使用しました:

private void dataGridView_Product_CellClick(object sender, DataGridViewCellEventArgs e){
    int rowIndex;
    //rowIndex = e.RowIndex; //Option 1
    //rowIndex= dataGridView_Product.CurrentCell.RowIndex; //Option 2
    rowIndex = dataGridView_Product.CurrentRow.Index; //Option 3
}

-1

以下を試してください:

int myIndex = MyDataGrid.SelectedIndex;

これは、現在選択されている行のインデックスを提供します。

お役に立てれば

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.