DotNet - DataGridView mit eigener DataTable als DataSource
Hi,
in Anlehnung meiner anderen Frage von heute: DotNet - DatagridView - Hinzufügen von Zeilen langsam
Ich versuche jetzt eine Alternative. Zuerst eine DateTable aufbauen und diese einem DataGridView (DGV) als DataSource übergeben.
Mein Problem hier: Wie komme ich von der angezeigten Zelle zurück zum ursprünglichen Datenobjekt?
Bsp.:
Datenobjekt ist eine Klasse "EINS" mit Eigenschaften "Name" , "Ort", "ID"
Die DataTable hat nur eine Spalte. Die Zeilen dieser Tabelle demnach nur ein Feld. Dieses wird mit einer Instanz von EINS gefüllt. Damit das DGV dieses Objekte von EINS anzeigen kann, haben diese ToString implementiert und liefern einen "schönen" Anzeigename.
Wenn ich im DGV auf eine Zelle klicke, dann will ich aus dieser auf das Datenobjekt schlussfolgern. Ich bekomme aber immer nur den angezeigten Wert geliefert, nicht das zugrundeliegende Objekt.
Bei einem Event habe ich RowIndex und ColumnIndex, kann also bestimmen, in welcher Zelle etwas passiert ist.
Frage: Wie komme ich von der DataGridViewCell zurück auf die dort angezeigte Instanz von EINS, z.B. damit ich die Eigenschaft ID dieser Instanz auslesen kann`?
E.
in Anlehnung meiner anderen Frage von heute: DotNet - DatagridView - Hinzufügen von Zeilen langsam
Ich versuche jetzt eine Alternative. Zuerst eine DateTable aufbauen und diese einem DataGridView (DGV) als DataSource übergeben.
Mein Problem hier: Wie komme ich von der angezeigten Zelle zurück zum ursprünglichen Datenobjekt?
Bsp.:
Datenobjekt ist eine Klasse "EINS" mit Eigenschaften "Name" , "Ort", "ID"
Die DataTable hat nur eine Spalte. Die Zeilen dieser Tabelle demnach nur ein Feld. Dieses wird mit einer Instanz von EINS gefüllt. Damit das DGV dieses Objekte von EINS anzeigen kann, haben diese ToString implementiert und liefern einen "schönen" Anzeigename.
Wenn ich im DGV auf eine Zelle klicke, dann will ich aus dieser auf das Datenobjekt schlussfolgern. Ich bekomme aber immer nur den angezeigten Wert geliefert, nicht das zugrundeliegende Objekt.
Class EINS
Public Property Name As String
Public Property Ort As String
Public Property ID As String
Public Overrides Function ToString() As String
Return String.Format("{0}, {1}", Me.Name, Me.Ort)
End Function
End Class
... im Code DGV = DataGridView
Dim DT As New DataTable
DT.Columns.Add("Objekt")
DT.Rows.Add(New EINS With {.Name = "Anton", .Ort ="Berlin", .ID = 1})
DT.Rows.Add(New EINS With {.Name = "Berta", .Ort = "Hamburg", .ID = 2})
DT.Rows.Add(New EINS With {.Name = "Delta", .Ort = "Köln", .ID = 3})
DGV.DataSource = DT
Bei einem Event habe ich RowIndex und ColumnIndex, kann also bestimmen, in welcher Zelle etwas passiert ist.
Frage: Wie komme ich von der DataGridViewCell zurück auf die dort angezeigte Instanz von EINS, z.B. damit ich die Eigenschaft ID dieser Instanz auslesen kann`?
E.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 422608
Url: https://administrator.de/forum/dotnet-datagridview-mit-eigener-datatable-als-datasource-422608.html
Ausgedruckt am: 31.03.2025 um 14:03 Uhr
3 Kommentare
Neuester Kommentar
Hallo,
das lässt sich sehr einfach machen,
In deiner OnClick Mehthode wo du den RowIndex bekommst, kannst du dir ja die DataSource vom DGV nehmen und dort anhand des RowIndex ja einfach das Element herauspicken.
das lässt sich sehr einfach machen,
In deiner OnClick Mehthode wo du den RowIndex bekommst, kannst du dir ja die DataSource vom DGV nehmen und dort anhand des RowIndex ja einfach das Element herauspicken.
DataTable table;
table = (DataTable) DGV.DataSource;
DataRow row;
// Get Row
row = (DataRow)table.Rows[ROWINDEX];
Was passiert denn wenn du dir die row mit einem Cast holst?
Alternativ müsste es auch über einen GridView gehen, denn dort kannst du dir die Spatel auch Casten.
row = (EINS)table.Rows[ROWINDEX];
Alternativ müsste es auch über einen GridView gehen, denn dort kannst du dir die Spatel auch Casten.
private void gridView1_FocusedRowChanged(object sender, GridViewsBase.FocusedRowChangedEventArgs e) {
GridView view = sender as GridView;
EINS rec = view.GetRow(e.FocusedRowHandle) as EINS;
Text = rec.ID;
}