Datagridview Combobox Werte zur Laufzeit ergaenzen

23/03/2009 - 17:08 von Markus | Report spam
Hallo zusammen,

Ich habe ein Datagridview, darin befindet sich eine Spalte mit
Comboboxen welche feste Werte enthalten.
Wenn nun ein ganz bestimmer Wert ausgewaehlt wird, soll ein kleiner
Dialog gezeigt werden, der zusaetzliche Auswahlmoeglichkeiten und
Kombinationen davon bereithaelt. Daraus soll dann ein string kreiert
werden der dann schlussendlich in der Zelle stehen soll (Dieser string
ist also noch NICHT in der items liste der Combobox).

Ich habe dies so geloest, dass ich im EditingControlShowing
Event des Datagridviews eine referenz auf sie combobox erzeuge un dann
auf den SelectionChangeCommitted
event hoere um meinen Dialog anzuzeigen.

cbo = e.Control as ComboBox;


if (cbo != null)

{
cbo.SelectionChangeCommitted += new EventHandler
(cbo_SelectionChangeCommitted);

}

Sobald der Dialog nun geschlossen wird, wird ein string verschickt,
der die Combobox updaten soll.
Also den Wert temporaer hinzufuegen, aktivieren, und wieder loeschen.

Ich habe bisher alles moegliche versucht, allerdings ohne viel Erfolg
(ArgumentExceptions...).

cbo.Items.Add(myString);
cbo.SelectedItem = myString
oder
dataGridViewComboBoxColumnElement.Items.Add(myString);



Was waere hier ein praktischer Ansatz?

Vielen Dank und Gruss,
Markus Steiner
 

Lesen sie die antworten

#1 Frank Dzaebel
23/03/2009 - 22:08 | Warnen spam
Hallo Markus,

Sobald der Dialog nun geschlossen wird, wird ein
string verschickt, der die Combobox updaten soll.
[...] Wert temporaer hinzufuegen, aktivieren, und wieder loeschen.



1) Sollen denn dann nur die Items der aktuelle
DataGridViewComboBoxCell geàndert werden, oder alle?

2) Wie ist das gemeint "und wieder loeschen". Das ist nicht
ganz schlüssig und würde Probleme bringen.

Ich habe mal als Ausgangsbasis kurz einen
funktionsfàhigen Code für den Fall der einzelnen Combo
gemacht, damit wir von einer gleichen Ausgangsbasis ausgehen:

DataGridView dgv = new DataGridView();
DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn();

private void Form1_Load(object sender, EventArgs e)
{
Controls.Add(dgv);
cbc.Items.AddRange("Eins", "Zwei", "Drei");
dgv.Columns.Add(cbc);
dgv.AllowUserToAddRows = false;
dgv.EditMode = DataGridViewEditMode.EditOnEnter;
dgv.Rows.Add("Eins"); dgv.Rows.Add("Drei");
dgv.Rows.Add("Zwei");
dgv.EditingControlShowing += new
DataGridViewEditingControlShowingEventHandler(
dgv_EditingControlShowing);
}

ComboBox cbo;

void dgv_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (dgv.CurrentCell.ColumnIndex == cbc.Index)
if (cbo == null)
{
cbo = e.Control as ComboBox;
cbo.DropDown += new EventHandler(cbo_DropDown);
cbo.SelectionChangeCommitted += new
EventHandler(cbo_SelectionChangeCommitted);
}
}

void cbo_DropDown(object sender, EventArgs e)
{
if (cbo.SelectedItem.ToString() == "Zwei"
&& !cbo.Items.Contains("Fünf"))
using(Form2 f2 = new Form2())
{
DialogResult res = f2.ShowDialog(this);
if (res == DialogResult.OK)
cbo.Items.Add("Fünf");
}
}

void cbo_SelectionChangeCommitted(object sender, EventArgs e)
{
if (cbo.Items.Contains("Fünf"))
cbo.Items.Remove("Fünf");
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen