2016-10-27 3 views
0

Так что я не совсем знакомы с WPF еще и в WinForms, вы можете иметь CellDoubleClick событие, которое я могу получить значение какVB.NET WPF Как получить значение столбца из datagrid?

row.Cells("ID").Value.ToString() 

Но в WPF, строка не является членом DataGrid. Итак, как я могу получить значение выбранного идентификатора, если пользователь просто дважды щелкнул по строке? enter image description here Вот фотография, чтобы уточнить мой вопрос. Показанная запись - из данных. Когда отображается несколько строк записей, а пользователь дважды щелкает по любой строке, как мне получить значение выбранного идентификатора строки? Получить SelectedIndex легко, но я потерялся, пытаясь выяснить, как получить значение ID.

------- UPDATE -------

Так в WinForms, я бы получить идентификатор, как это, но не уверен, как в WPF.

Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick 
    If e.RowIndex >= 0 Then 
     Dim row As New DataGridViewRow 
     row = Me.DataGridView1.Rows(e.RowIndex) 
     THE_ID = row.Cells("ID").Value.ToString() 'The ID is saved 
    End If 
End Sub 

ответ

2

В сетях данных WPF сама сетка никогда не должна использоваться для получения данных. Вместо этого используйте информацию, которую вы знаете о сетке. Выбранный индекс строки или «SelectedIndex» - это то, что вы должны использовать для перекрестной ссылки на связанный источник данных.

Например, давайте предположим, что вы были некоторые DataTable и связала это вид на DataGrid, вы можете иметь то, что выглядит следующим образом:

Dim View As DataView = TryCast(DataGrid1.ItemsSource, DataView) 
    If View IsNot Nothing Then 
     Dim ViewRow As DataRowView = View.Item(DataGrid1.SelectedIndex) 
     Dim ColumnValue As Object = ViewRow.Item("ID") 'or ViewRow.Item(0) for positional value. 

     'do something with ColumnValue here. 
    End If 

Это должно работать в том случае, если вы Привязка DataTable-х Посмотрите на сетку, но помните, что сетка может принимать любой IEnumerable. Таким образом, ваш вопрос действительно сильно зависит от того, какой объект является вашим ItemsSource, и как этот объект реализует IEnumerable.

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

+0

Спасибо! Не могли бы вы объяснить далее, почему вы пытаетесь загрузить источник и данные? – Student

+1

Ну, как я уже упоминал, ItemsSource на самом деле просто интерфейс IEnumerable. Который может буквально быть ЛЮБЫМ типом объекта. Я просто использую TryCast ради безопасности. TryCast вернет «Nothing», если тип данных не относится к типу «DataView» (который для DataTable должен возвращать тип DataView). –

Смежные вопросы