Forums Neueste Beiträge
 

Einträge in DataGridViewComboboxCell disablen

11/05/2008 - 20:31 von Nicolas Pavlidis | Report spam
Hi!

Folgende Situation:

Ich eine (den selben wie virher :-) ) Datagrid, wo es eine Spalte gibt,
in der es eine Combobox mit auszuwàhlenden Werten gibt.

Diese Werte sollten nur einmal ausgewàhlt werden können. Sprich wenn ein
Wert aus dieser Combobox in einer Row schon einmal ausgewàhlt wurde,
soll er nicht noch einmal ausgewàhlt werden können.

Die einfachste Variante ist nun natürlich auf CellValidating / oder
CellValidated zu reagieren, und die ganze Ziet die Spalte rauf und
runter zu schaun ob der zo eben ausgewàhlte Wert schon mal benutzt wurde.

Was ich gerne tun würde:
Wenn der User einen Wert in Zeile 1 eingegeben ausgewàhlt hat, soll er
im restlichen grid, in dieser Spalte nicht mehr auswàhl bar sein, am
schönsten wàre es, wenn er graun unterlegt wird und nicht anklickbar
ist, ist denk ich das Bester was die Usability angeht.

Natürlich auch vizeversa, sprich wenn sich in genannter Zeile der Wert
für die Spalte mit der Combobox (nochmal DataGrindViewComboBoxCell! )
drinnen àndert, soll der alte Wert natürlich wieder verfügbar sein.

Aber wie mach ich das :-) ? Man kommt scheinbar gar nicht an die
ComboBox selbst heran, die entsprechenden Events die man bei einer ONU
Combobox (System.Windows.Forms.ComboBox) verwenden würde um das zu
bewerkstelligen gibts es bei der DataGridViewCell - Variante nicht :-(.

Das einzige was mir bisher eingefallen ist, war nur eine eigene
DataGridViewCell mit zugehöriger Colum zu implementieren, geht das echt
nicht einfacher?

Das ganze ist an .NET 2.0 gebunden.

Ich will mir den Aufwand eigentlich ersparen da die beiden neuen Klassen
zu implementieren, vielleicht gibts ja einen Einfacheren Weg, den ich
einfach nur nicht sehe.

Vielen Dank für etwaige Hilfe.

LG
Nicolas
 

Lesen sie die antworten

#1 Frank Dzaebel
12/05/2008 - 10:59 | Warnen spam
Hallo Nicolas,

Ich eine (den selben wie virher :-) ) Datagrid, wo es eine Spalte gibt,
in der es eine Combobox mit auszuwàhlenden Werten gibt.
Diese Werte sollten nur einmal ausgewàhlt werden können. Sprich wenn ein
Wert aus dieser Combobox in einer Row schon einmal ausgewàhlt wurde,
soll er nicht noch einmal ausgewàhlt werden können.



Eine kleine Gedankestütze ... :

void dgv_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (dgv.CurrentCell.ColumnIndex == comboColumnIndex)
{
DataGridViewComboBoxEditingControl cbo = e.Control as
DataGridViewComboBoxEditingControl;
ComboBox combo = e.Control as ComboBox;
foreach (DataGridViewRow row in dgv.Rows)
{
if (row.Cells[comboColumnIndex].Value == null) continue;
if ((int)row.Cells[comboColumnIndex].Value ==
((Function)cbo.SelectedItem).Index)
{
// TODO
allowedFuntions.Remove(cbo.SelectedItem as Function);
// TODO ...
}
}
combo.DataSource = allowedFuntions;
}
}


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

Ähnliche fragen