2016-07-10 11 views
0

Ich bin neu in WPF meine App haben ein einfaches Fenster mit Datagrid und eine Schaltfläche zum Lesen aller Zellen drin - jedes Mal, wenn ich Fehler für bekomme nULL-Verweis, aber ich weiß nicht, warum (mein Gitter Bindung und Daten)Fehler: Objektreferenz nicht auf eine Instanz eines Objekts gesetzt - Datagrid in WPF

Der XAML-Code:

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <DataGrid AutoGenerateColumns="False" Height="232" HorizontalAlignment="Left" Margin="12,67,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="479" Loaded="dataGrid1_Loaded"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Sheba}" Header="شماره شبا" MinWidth="200"> </DataGridTextColumn> 
     <DataGridTextColumn Width="*" Binding="{Binding TrueFalse}" Header="صحت شماره شبا" > </DataGridTextColumn> 
     <DataGridTextColumn Width="*" Binding="{Binding Country}" Header="کشور"> </DataGridTextColumn> 
     <DataGridTextColumn Width="*" Binding="{Binding BankName}" Header="نام بانک"> </DataGridTextColumn> 
    </DataGrid.Columns> 
    </DataGrid> 

    <Button Content="Button" Height="25" HorizontalAlignment="Left" Margin="36,26,0,0" Name="button1" VerticalAlignment="Top" Width="85" Click="button1_Click" /> 
    <Button Content="remove" Height="21" HorizontalAlignment="Left" Margin="136,32,0,0" Name="button2" VerticalAlignment="Top" Width="79" Click="button2_Click" /> 
</Grid> 

und Code hinter der Bindung Datagrid

 public class RowsDatas 
    { 
     public string Sheba { get; set; } 
     public string TrueFalse { get; set; } 
     public string Country { get; set; } 
     public string BankName { get; set; } 
    } 

    private List<RowsDatas> LoadCollectionData() 
    { 
     List<RowsDatas> authors = new List<RowsDatas>(); 

     for (int i = 0; i < 10; i++) 
     { 
      authors.Add(new RowsDatas() 
      { 
       Sheba = "111111", 
       TrueFalse = "TrueFalse", 
       Country = "5555", 
       BankName = "Bank", 
      }); 
     } 
     return authors; 
    } 

    private void dataGrid1_Loaded(object sender, RoutedEventArgs e) 
    { 
     dataGrid1.ItemsSource = LoadCollectionData(); 
    } 
0 passieren

Und mein Code für Button und wo der Fehler ist hier:

 private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     string sHeaders = ""; 
     string stOutput = ""; 

     for (int j = 0; j < dataGrid1.Columns.Count; j++) 
      sHeaders = sHeaders.ToString() + Convert.ToString(dataGrid1.Columns[j].Header) + "\t"; 
     stOutput += sHeaders + "\r\n"; 

     for (int i = 0; i < dataGrid1.Items.Count - 1; i++) 
     { 
      string stLine = ""; 

      for (int j = 0; j < dataGrid1.Columns.Count - 1; j++) 
      { 
**//Error: Object reference not set to an instance of an object.** 
       string a = (dataGrid1.Items[i] as DataRowView).Row.ItemArray[j].ToString(); 

       stLine = stLine.ToString() + "\t"; 
       stOutput += stLine + "\r\n"; 
      } 
     } 
    } 

this "(dataGrid1.Items [i] als DataRowView)" ist Null und ich weiß nicht, warum Khow?

bitte helfen Sie mir THX.

+0

Mit 'dataGrid1.ItemsSource = LoadCollectionData();' weisen Sie die ItemsSource-Eigenschaft einer Sammlung von 'RowsDatas' zu. Ganz offensichtlich sind die Elemente nicht vom Typ 'DataRowView'. Deshalb gibt 'dataGrid1.Items [i] als DataRowView' null zurück. – Clemens

+1

Sie füllen das DataGrid mit einer Liste und versuchen, eine Zeile zu lesen, da es ein DataRowView ist. Natürlich ist das ein Null und jeder Code danach ist eine nullreferenceexception – Steve

+0

So leid für meine Duplikate und Anfänger Frage und dankbar für Ihre Kommentare und Antworten - aber eine Frage wie kann ich meine "RowsDatas" oder "als DataRowView" ändern, um Cell zu erreichen Werte in diesem Datagrid? Danke –

Antwort

0

Sollte Ihre erste for Schleife nicht wie sein

for (int i = 0; i < dataGrid1.Rows.Count; i++) 
    { 

Auch dataGrid1.ItemsSource = LoadCollectionData(); die Datenquelle Einstellung List<RowsDatas> und das Gießen dataGrid1.Items[i] as DataRowView in einem solchen Fall zu sein, wird fehlschlagen und in-wiederum null sein. Rufen Sie also auf ((dataGrid1.Items[i] as DataRowView).Row) wird in NRE führen.

Verwandte Themen