Hallo zusammen,
ich habe ein DataGridView
mit 10 Spalten. Dann hab ich eine DataTable dt
mit Werten bestehend aus 4 Spalten. Die Werte der ersten Spalte (Primary Key) werden in einer DataGridViewComboBoxCell
im DataGridView
zur Auswahl angeboten und sind wie unten per DataSource, DisplayMember
und ValueMember
angebunden.
Nachdem ein Wert aus DataGridViewComboBoxCell
ausgewählt wurde, sollen in 3 anderen Spalten in meinem DataGridView
die entsprechend damit verknüpften Werte aus der DataTable
angezeigt werden.
DataGridViewComboBoxCell artikel = new DataGridViewComboBoxCell();
artikel.DataSource = dt;
artikel.DisplayMember = dt.Columns[0].ColumnName; // "Artikel";
artikel.ValueMember = dt.Columns[0].ColumnName; // "Artikel";
Wie muss ich denn die 3 anderen Spalten anbinden, damit der Filter-Mechanismus über die DataGridViewComboBoxCell
richtig funktioniert?
Das mußt du dann selbst ausprogrammieren, z.B. mittels des DataGridView.CellValueChanged
-Ereignisses.
Hhm, ich hoffe, ich hab das dann nicht zu kompliziert gemacht. Wirkt irgendwie nicht so prickelnd bis jetzt:
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridView dataGridView = sender as DataGridView;
if (dataGridView != null && e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
var comboBoxCell = dataGridView[e.ColumnIndex, e.RowIndex] as DataGridViewComboBoxCell;
if (comboBoxCell != null)
{
var dt = comboBoxCell.DataSource as DataTable;
if (dt != null)
{
var dtSelectedRows = dt.Select().Where(rowValue => rowValue.ItemArray[0].ToString() == comboBoxCell.Value.ToString()).CopyToDataTable();
if (dtSelectedRows.Rows != null && dtSelectedRows.Rows.Count == 1)
{
dataGridView[1, e.RowIndex].Value = dtSelectedRows.Rows[0].ItemArray[1];
dataGridView[2, e.RowIndex].Value = dtSelectedRows.Rows[0].ItemArray[2];
dataGridView[3, e.RowIndex].Value = dtSelectedRows.Rows[0].ItemArray[3];
}
}
}
}
}
Was mich auch gerade noch etwas verwundert, dieses Ereignis kommt erst, nachdem ich von meiner Zelle mit der DropDownBox den Fokus auf eine andere Zelle setze und nicht schon, wenn ein Wert aus der DropDownBox selektiert wurde und diese damit dann zuklappt.
nein, da muss man nix selber proggen.
Die anderen drei spalten müssen einfach auch ComboboxColumns sein - nur je mit anderm DisplayMember.
Hmm - naja.
Wie's aussieht verwendest du kein typisiertes Dataset.
Das ist dann alles ziemlich chaotisch, und du musst vielleicht doch so rumwursteln.
Also wenn du mal sehen willst, wie es auch gehen kann gugge
vier Views-Videos
Der Code dazu ist aber vb - das ist aber nicht wesentlich daran. Wichtig ist, die Konzepte zu verstehen, und wie die Designer zu nutzen sind.
Der frühe Apfel fängt den Wurm.