2016-04-02 18 views
0

umwandeln Ich bin Anfänger in WPF. Ich versuche, ausgewählte Datagrid-Elemente mit DataRow/DataRowView zu lesen. Mein Code ist following--Kann Objekt des Typs AnonymousType nicht zu System.Data.DataRowView in WPF

foreach (System.Data.DataRowView row in dgDocument.SelectedItems) 
    { 
    txtPhotoIDNo.Text = row["PhotoIdNumber"].ToString(); 
    } 

aber ich bin vor der folgenden error--

„Kann nicht Objekt des Typs werfen '<> f__AnonymousTypeb 11[System.String,System.Byte,System.String,System.String,System.String,System.Byte[],System.Nullable 1 [System.DateTime], System. String, System.Nullable`1 [System.DateTime], System.String, System.String] ' , um' System.Data.DataRowView 'einzugeben. "

Wenn ich mit folgendem Weg bin versucht, das funktioniert fein-

(dgDocument.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text; 

Das Problem ist, wenn ich die Datagrid-Spalte Position eine neue Spalte/ändern hinzuzufügen erforderlich, I erforderlich Index für gesamte zu ändern zugewiesener Wert. Um dieses Problem zu beheben, möchte ich den Wert mit dem oben genannten Weg mit Spalte Name zuweisen.

+1

Das 'DataGrid'-Steuerelement hat nichts mit' System.Data'/'DataTable' usw. zu tun. Die' SelectedItems' -Eigenschaft enthält die tatsächlichen Objekte, die Sie hinzugefügt haben das Raster (die in diesem Fall anonyme Typen zu sein scheinen). Sie sollten in die Datenbindung schauen - Sie sollten nicht versuchen, den Text direkt so zu setzen. –

+0

Bitte! Gib mir ein Beispiel. –

Antwort

1

Der Inhalt der SelectedItems-Liste wird von dem Typ sein, der an Ihr DataGrid gebunden ist. So zum Beispiel, wenn ich eine Eigenschaft Liste Datasource in meinem Code-Behind und binde ich diese Liste der Itemssource des Datengitters zu sein:

<DataGrid x:Name="grid" ItemsSource={Binding DataSource) /> 

die grid.SelectedItems mir eine Liste von Strings zurück.

In Ihrem Fall ist die ItemsSource des DataGrid an einen anonymen Typ gebunden. Während ich in der Regel verwenden, anonyme Typen in diesem speziellen Fall entmutigen würde, wäre die Abhilfe für Sie Folgendes:

foreach (dynamic item in dgDocument.SelectedItems) 
    { 
    txtPhotoIDNo.Text = Convert.ToString(item.???); 
    } 

Sie müssen ersetzen ??? mit dem Namen der Eigenschaft aus der anonymen Klasse, die die Daten enthält, die Sie in txtPhotoIDNo eingeben möchten.

0

Endlich habe ich mein Problem gefunden. Das sind zwei Werte meiner SelectedItems war null. Aus diesem Grund ist das Schlüsselwertpaar nicht perfekt vorbereitet. Der folgende Code funktioniert einwandfrei.

foreach (System.Data.DataRowView row in dgDocument.SelectedItems) 
    { 
    txtPhotoIDNo.Text = row["PhotoIdNumber"].ToString(); 
    } 
0
foreach (dynamic row in dgBarDetails.ItemsSource) 
{ 
    myList.Add(row); 
} 

in meinem Fall Reihe ist ein Ziel meiner Klasse verwendet Itemssource zu füllen. Es kann ein int oder eine Zeichenfolge sein oder was auch immer Sie in ItemsSource

haben
Verwandte Themen