Laden...

Wie kann ich Werte im DataGridView abhängig von einer ComboBox verändern?

Erstellt von OXO vor 3 Jahren Letzter Beitrag vor 3 Jahren 537 Views
O
OXO Themenstarter:in
86 Beiträge seit 2020
vor 3 Jahren
Wie kann ich Werte im DataGridView abhängig von einer ComboBox verändern?

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?

4.931 Beiträge seit 2008
vor 3 Jahren

Das mußt du dann selbst ausprogrammieren, z.B. mittels des DataGridView.CellValueChanged-Ereignisses.

O
OXO Themenstarter:in
86 Beiträge seit 2020
vor 3 Jahren

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.

5.299 Beiträge seit 2008
vor 3 Jahren

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.