2016-12-01 3 views
0

Ich habe eine Datenrasteransicht mit Kombinationsfeld Spalte in es zu bekommen, habe ich diese Spalte binden wie diese Datentabelle:So setzen und den Wert der Daten Bind Gridview Combobox Spalte in C#

((grdItems.Columns[1]) as DataGridViewComboBoxColumn).DataSource = dt; 
((grdItems.Columns[1]) as DataGridViewComboBoxColumn).DisplayMember = "LocationName"; 
((grdItems.Columns[1]) as DataGridViewComboBoxColumn).ValueMember = "Id"; 

i jetzt kann den ausgewählten Wert wie diese:

var value = grdItems.Rows[0][1].Value; 

aber das Problem ist, wenn ich die Zeilen in der Gridview manuell hinzufügen (ohne die Netzbindung), ich kann den Wert der Combobox Zelle erhalten. ich bin Hinzufügen von Zeilen wie folgt aus:

grdItems.Rows.Add(1, 1, "Some Value"); 

wenn i var Wert = grdItems.Rows [0] [1] .Wert; diese Methode, um den Wert zu erhalten, gibt ich den Text der Zelle nicht den Wert, d. H. in diesem Fall.

Wie kann ich dieses Problem lösen? da ich den Wert der Zelle im Falle des Addierens der Reihen manuell, sowie Datenbindungsreihen wollen.

Antwort

0

Nehmen wir an, dass Sie manuell Zeilen hinzufügen, die Sie von der Benutzeroberfläche bedeuten, also eine Möglichkeit, den Wert der neu hinzugefügten Zeile zu erhalten, ist ein event handler für die events ausgelöst, wenn Sie eine Zeile hinzufügen. Sie können eine der folgenden 1) RowsAddedhttps://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowsadded(v=vs.110).aspx 2) verwenden RowPrePaint-https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowprepaint(v=vs.110).aspx - nicht so viel verwendet, sondern ist auch eine Option

this.myGridView.RowsAdded += new DataGridViewRowsAddedEventHandler(myGridView_RowsAdded); 

private void myGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    var newRow = this.myGridView.Rows[e.RowIndex]; 
} 

Edit: Basierend auf den tatsächlichen Bedarf in den Kommentaren angegeben - tatsächliche Anforderung ist die Beschaffung von die neu hinzugefügte Zeile der Zelle Wert (Id) an die Combox Feld Spalte auf die Schaltfläche Sie das Kombinationsfeld mit einer Datenquelle selbst, das heißt, Ihr

combobox.DataSource=someList 
gebunden haben speichern geklickt Ereignis entspricht

Unter der Annahme,

so, was Sie tun können, ist eine Linq-Abfrage

someList.Where(v=>v.Text.Equals("row.Cells[1].Value")).FirstOrDefault().Id 
+0

i den Wert der Spalte nicht wollen, schreiben, wenn die neue Zeile hinzugefügt wird. Ich möchte den Wert später durchschleifen alle Zeilen im Raster und erhalten Sie den Wert jeder Zelle einschließlich der Kombinationsfeld Zelle –

+0

Sie könnten dies tun, indem Sie die neu hinzugefügt die Zeilen im Speicher und besuchen Sie es später wieder, aber bin _not sure was Du meinst später? _ später wenn irgendein bestimmtes Ereignis wie das Drücken der Schaltfläche "Speichern"? – Jaya

+0

Ja, indem ich die Schaltfläche "Speichern" drücke. Wenn ich auf "Speichern" klicke, habe ich Folgendes getan: foreach (DataGridViewRow-Zeile in grdView.Rows) {var val = row.Cells [1] .Value; } Aber das gibt mir den Text der Zelle, nicht seinen Wert, den ich an ihn gebunden habe –

Verwandte Themen