2016-07-10 15 views
0

私はWPFの新機能です。DataGridとその中のすべてのセルを読むためのボタンが付いた単純なウィンドウを持っています。エラー:オブジェクトリファレンスがオブジェクトのインスタンスに設定されていません - WPFの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データグリッドをバインドするための

<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> 

とコードの後ろに:null参照が、(私のグリッドがバインドし、データを持っている)なぜ私にはわからない

XAMLコード?

、ボタン、どこでエラーが起こるために私のコードはここにある:

 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"; 
      } 
     } 
    } 

この "(dataGrid1.Items [i]はDataRowViewとして)" ヌルであると私はその理由をkhowませんか?

THXを助けてください。

+0

'DataGrid1.ItemsSource = LoadCollectionData();によって、' RowsDatas'のコレクションにItemsSourceプロパティを割り当てます。明らかに、項目は 'DataRowView'型ではありません。そのため、 'DataGrid1.Items [i] as DataRowView'はnullを返します。 – Clemens

+1

DataGridにリストを入力し、行をDataRowViewとして読み取るようにします。もちろん、これはnullであり、その後のコードはnull参照例外です – Steve

+0

私の重複と初心者質問には申し訳ありません。あなたのコメントと回答には感謝します。しかし、私の "RowsDatas"や "as DataRowView"このデータグリッドの値は?どうも –

答えて

0

はあなたの最初のforループは

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

dataGrid1.ItemsSource = LoadCollectionData();List<RowsDatas>すると、このような場合には、この鋳造dataGrid1.Items[i] as DataRowViewは失敗とでターンnullなりますデータソースを設定するようにすべきではありません。したがって、を((dataGrid1.Items[i] as DataRowView).Row)に設定するとNREが発生します。

関連する問題