2017-09-04 1 views
-1

Ich habe eine DataGrid mit einer DataTable als DataGrid.ItemsSource.WPF DataGrid ColumnCount

Bisher funktioniert alles einwandfrei, und die Daten werden in den DataGrid gezeigt, wie ich es möchte. Jetzt möchte ich einige der Spalten der DataGrid verstecken. Und ich habe das schon mal gemacht und es hat gut geklappt, aber irgendwie bekomme ich immer eine Fehlermeldung

"System.ArgumentOutOfRangeException:" Index war außerhalb des Bereichs. Muss nicht negativ und kleiner als die Größe der Sammlung „

Ich weiß, was das bedeutet, aber ich verstehe nicht, warum dies geschieht

Hier ist mein Code:..

adapter.Fill(datatable); 
NameDG.ItemsSource = datatable.DefaultView; 

//Hide Column[1] 
NameDG.Columns[1].Visibility = Visibility.Hidden; 

die DataGrid hat mehr als 10 Spalten.

Vielen Dank für Hilfe.

+0

Ist Ihr Adapter keine Daten tatsächlich zurückkehrt? Haben Sie versucht, es Debuggen und Überprüfung (zum Beispiel) die Spaltenanzahl der zurückgegebenen Daten? – ainwood

+0

Wenn Sie debuggen, was ist der Inhalt von NameDG.Columns? Und was ist NameDG.Columns.Length? – Staeff

+1

Sie können die Spalte von datierbar entfernen, wenn sie nicht benötigt wird, die nicht in DataGrid –

Antwort

0

einfach diesen Thread schließen ich die Frage selbst beantworten, nachdem ich die Lösungen gefunden.

  1. Sie können die Spalten delet direkt aus dem DataTable wie zum Beispiel durch diese (Dank Nobody)

    datatable.Columns.Remove(datatable.Columns[0]); 
    

oder

  1. verwenden Sie die AutoGeneratedColumns Event-Handler aus dem DataGrid
0

, wenn Sie die Spaltennamen klicken, um es haben ist, einen negativen Wert spezifischer Wert -1 y ou müssen sie zur Validierung mithilfe von IF STATEMENT

Verwendung dieses Ereignis den Fehler verhindern

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
int rowIndex = e.RowIndex; 
if(rowIndex <= -1) 
{ 
//Error 
} 
else 
{ 
//Your Code 
} 

}

+0

Vielen Dank für Ihre Antwort, aber ich habe mit dem Entfernen der Spalten der DataTalbe direkt gelöst.Aber ich glaube nicht, dass dein Code mein Problem lösen würde, weil ich die Spalten direkt am Anfang und nicht nach einem ClickEvent entfernen möchte. – Morris

0

können Sie versuchen,

NameDG.Loaded += NameDG_Loaded; 

    void NameDG_Loaded(object sender, RoutedEventArgs e) 
    { 
     NameDG.Columns[1].Visibility = Visibility.Collapsed; 
    }