2010-12-28 9 views
2

Ich habe folgendes Problem: Ich habe eine Liste „lst“ von „Person“ Objekte, und ich habe sie in einem Datagridview eine Dataview-Objekt (Ich brauche es für Filter)DataBoundItem mit Dataview

 DataTable dt = Request.ListToDataTable(lst); 
     dw = new DataView(dt); 
     dw.Sort = "age ASC"; 
     dataGridView1.DataSource = dw; 

Wenn ich auf eine Schaltfläche klicke, muss ich den Wert eines Felds der Person-Klasse abrufen, das ich in einer versteckten Spalte relativ zur ausgewählten Zeile einfüge. Um das zu tun, die ich benutze:

 Person val = dataGridView1.SelectedRows[0].DataBoundItem as Person; 
     Debug.WriteLine(val.id); 

aber wenn ich das Programm ausführen, ist das Ergebnis ein Absturz, wahrscheinlich, weil das gebundene Element ist keine Person Objekt, sondern ein Element Datatable. Kann mir jemand zeigen, wie ich dieses Element bekommen kann? Wenn die Kolumne nicht versteckt wäre, wäre es leicht gewesen, aber auf diese Weise kann ich nicht herausfinden, wie ich sie erhalte! Danke an alle

+0

do lst.Sort(); dataGridView1.DataSource = lst; anstelle des aktuellen Codes. –

+0

Ich brauche Dataview einfach hinzufügen und entfernen Sie Filter auf die Datagrid Elemente – kaharas

+0

Wo 'Request.ListToDataTable()' kommen aus? Wie auch immer, das scheint der Ort zu sein, an dem Ihre Person-Objekte in DataRows konvertiert werden. Sie können nicht zurückgeworfen werden. –

Antwort

4

Sie müssen so etwas wie:

var row = dataGridView1.SelectedRows[0].DataBoundItem as DataRow; 
var val = row[X] as MyType; 

Zweiter Versuch:

var drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView; 
var row = drv.Row as DataRow; 
var val = row[X] as MyType; 
+0

Wenn ich den Knopf drücke, ist die Zeilenvariable Null, selbst wenn ich eine Zeile aus dem Datagrid ausgewählt habe. – kaharas

+0

Ist das DataBoundItem ebenfalls null? Siehe Bearbeiten. –

+0

Jetzt funktioniert es, vielen Dank. – kaharas

4

dass becuase ist, werden Sie verbindlich Dataview Datagridview, so dass die Artikel Sammlung von Typ sein DataRowView, um es richtig zu bekommen.

DataRowView drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView ; 

Now get the associated Row 

if(drv != null) 
    { 
    DataRow row = drv.Row; 

    // Now get the respective column value say PersonId and assuming PersonId is a column in the bounded DataView 

    if(row!=null) 
     { 
     var personId = row["PersonId"]; 
     } 
    } 
Verwandte Themen