2010-08-26 3 views

ответ

123

Недвижимость RowIndex для свойства CurrentCell для DataGridView.

datagridview.CurrentCell.RowIndex 

Ручка SelectionChanged события и найти индекс выбранной строки, как указано выше.

+1

Perfect. Это кажется простым или быстрым, даже над SelectedRows [0] .Index. Будет ли это хорошим предположением? – ErikE

+0

Хм, я не думал о выборе нескольких строк. В этом случае я не уверен в поведении текущей ячейки. – fletcher

+1

Если это что-то вроде Excel, выбранный список может быть много строк/столбцов, но есть только одна текущая/активная ячейка. Я только забочусь о текущей строке, так что это должно делать хорошо. – ErikE

6
dataGridView1.SelectedRows[0].Index; 

Или, если вы хотите использовать LINQ и получить индекс всех выбранных строк, вы можете сделать:

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

полезное (IndexOf не был действительно «на прицеле» пока), но окольными начиная с получения строки не нужно. Метод .Index - это то, что я искал. – ErikE

31

Используйте свойство Index в вашей коллекции SelectedRows DGV в:

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

Считаете ли вы, что это лучше или DGV.CurrentCell.RowIndex? – ErikE

+4

В некоторых случаях текущая ячейка не может быть выбрана, поэтому это лучший способ пойти. – AbleArcher

+0

@thethuthinnang, когда вы не выбрали строку, решение @JayRiggs выведет ошибку индекса два. Вам лучше обернуть его с помощью 'if' –

1

Попробуйте DataGridView.CurrentCellAddress.

Возвраты: точка, представляющая индексы строки и столбца текущей активной ячейки.

E.G. Выберите первый столбец и пятый ряд, и вы вернетесь: Point (X = 1, Y = 5)

+0

P.S. так как я попросил индекс строки, все было бы менее скалистым в наших отношениях, если бы вы сказали «DataGridView.CurrentCellAddress.Y' ... :) – ErikE

+0

Я думаю, что на данный момент все эти ответы действительны, это просто вверх к которому вы хотите выбрать, что является самым чистым для ваших целей. Я бы предложил ввести различные реализации и посмотреть на IL в .NET Reflector (http://www.red-gate.com/products/reflector/), если вы действительно хотите узнать, какой код генерируется для каждого, но как многие скажут, это микро-оптимизация. Это действительно то, что наиболее очевидно в намерениях. PS Примечание, которое должно быть более ясным в будущем. – Kilanash

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 
} 
+0

Спасибо, именно то, что мне нужно, чтобы определить, что скрытое значение выбранной строки при использовании элемента управления, не связанного с gridview. – orgtigger

-1

Попробуйте следующее:

int myIndex = MyDataGrid.SelectedIndex; 

Это даст индекс строки, который выбран в данный момент.

Надеется, что это помогает

0

Я изменил ответ @JayRiggs', и это работает. Вам нужен if, потому что иногда SelectedRows может быть пустым, поэтому операция индекса выдает исключение.

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

Вы можете попробовать этот код:

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

Попробуйте:

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

Я надеюсь, что это поможет.

+2

Спасибо за исправление, но ваш ответ является дубликатом выбранного (и наиболее ответного ответа), который дал решение 'datagridview.CurrentCell.RowIndex'. Мои извинения - я собираюсь рекомендовать удалить этот пост в виде полного дубликата. – ErikE

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 
}