Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich Werte im DataGridView abhängig von einer ComboBox verändern?
OXO
myCSharp.de - Member



Dabei seit:
Beiträge: 62

Themenstarter:

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

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 3977

beantworten | zitieren | melden

Das mußt du dann selbst ausprogrammieren, z.B. mittels des DataGridView.CellValueChanged-Ereignisses.
private Nachricht | Beiträge des Benutzers
OXO
myCSharp.de - Member



Dabei seit:
Beiträge: 62

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von OXO am .
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers