2016-02-12 2 views
0

Я пытаюсь получить значение выбранного столбца и определенного столбца. Я уже пробовал некоторые идеи из stackoverflow, но пока ничего не получилось. Если я использую этот код:C# DataGridView получить выбранное значение Row/Column

string strid = ""; 
DataRowView rowview = DG1.SelectedItem as DataRowView; 
strid = rowview.Row["Id"].ToString(); 
MessageBox.Show(strid); 

Я получаю эту ошибку:

An unhandled exception of type 'System.NullReferenceException' occurred in NLauncher.exe

Дополнительная информация:

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Мой XAML:

<DataGrid IsReadOnly="True" Name="DG1" ItemsSource="{Binding}" AutoGenerateColumns="False" SelectionChanged="DG1_SelectionChanged_1" SelectedItem="{Binding Path=SelectedDG1, Mode=TwoWay}" > 
      <DataGrid.Columns> 
       <mui:DataGridTextColumn x:Name="id" Header="#ID" Binding="{Binding id}"/> 
       <mui:DataGridTextColumn Header="Clientname" Binding="{Binding name}" />    
      </DataGrid.Columns> 
      <DataGrid.ContextMenu> 
       <ContextMenu > 
        <MenuItem Header="Menu 1" Click="MenuItem_Click" /> 
       </ContextMenu> 
      </DataGrid.ContextMenu> 
     </DataGrid> 

Мой полный C# код: http://pastebin.com/WEHV2Z6e

Все, что я хочу получить, это значение столбца «ID» выбранной строки.

+0

вы запрашиваете rowview.Row [ «Id»], но столбец привязан к колонку «ид» , Столбец чувствителен к регистру. Это может быть вашей проблемой. –

ответ

1

Если SelecetdItem обязан Property так:

private DataGridItem selectedDG1; 

    public DataGridItem SelectedDG1 
    { 
     get { return selectedDG1; } 
     set { selectedDG1 = value; 
      UpdateProperty("SelectedDG1"); 
      } 
    } 

Для DataItem из DataGrid:

public class DataGridItem 
{ 
    public string name { get; set; } 

    public int id { get; set; } 
} 

Тогда ID может быть получить как SelectedDG1.id.

And code System.Data.DataRowView rowview = DG1.SelectedItem as System.Data.DataRowView; is wrong. This will only work when ItemSource is a Datatable . If ItemSource is a collection then:

 var selctedItem = DG1.SelectedItem as DataGridItem; 
     if (selctedItem != null) 
     { 
      int value = selctedItem.id; 
     } 

В любом случае вы можете подавить исключение, поставив Null проверку по линии: (Также ваш DataGridColumn обязан «ид», и вы пытаетесь retrive «Id», что также может вызвать исключения нулевого)

if (rowview != null) 
     strid = rowview.Row["Id"].ToString(); 
+0

его работа, thx – NemeZiz

+0

@NemeZiz ваш прием. –

0

Вы, вероятно получение NullReferenceException, потому что ваш бросок

DataRowView rowview = DG1.SelectedItem as DataRowView; 

недействителен и возвращает значение null. Это означает, что независимо от типа DG1.SelectedItem, он не может быть передан типу «DataRowView».

Для доступа к самому ID, ответ Кило Рена, вероятно, является лучшим способом приблизиться к нему.

Edit: Поскольку rowView имеет нулевое значение, вы получаете NullReferenceException при попытке получить доступ к ряду:

strid = rowview.Row["Id"].ToString(); 
+1

, поскольку операция никогда не дает пустое исключение. –

+1

Я знаю, я думаю, что мое заявление было недостаточно ясным. См. Править. – Sosian

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