2016-04-17 18 views
1

Ich habe eine DataGridView Kontrolle in meiner Windows Forms-Anwendung, mit der Benutzer die Produktliste bearbeiten können. Um die Produktkategorie zu bearbeiten, möchte ich, dass der Benutzer neue Einträge hinzufügt oder aus den bereits eingegebenen auswählt. Um dies zu erreichen, fügte ich eine comboBox Spalte hinzu, die an eine DataSource gebunden ist, die die eindeutigen Kategorienamen aus der Produkttabelle erhält. Mit Hilfe von einigen anderen SO Fragen konnte ich machen dieses comboBox editierbar mit diesem Code:DataGridView-ComboBox-Spalte akzeptiert keine neuen Werte

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == CategorySelector.Index) 
    { 
     ComboBox combo = e.Control as ComboBox; 
     if (combo == null) 
      return; 
     combo.DropDownStyle = ComboBoxStyle.DropDown; 
    } 
} 

Aber das Problem ist, dass wenn ich versuche, die Kategorie comboBox Spalte zu bearbeiten und neue Kategorie andere als die aufgeführten hinzufügen, und Wenn ich zu einer anderen Zelle umschalte, wird zu einem alten Kategorieelement für ein existierendes Produkt oder ein leeres für ein neues Produkt zurückgeschaltet. Bitte sagen Sie mir, wie kann ich neue Kategorie über diese comboBox Spalte hinzufügen?

+0

Veröffentlichen Sie die Codes, die Sie versuchten, eine Kategorie hinzuzufügen. –

+0

@RezaAghaei Ich verwende automatisch generierte 'DataGridView' Methoden zum Hinzufügen. –

+0

Die 'DataGridViewComboBoxColumn' zeigt nur die Elemente ihrer' DataSource'. Wenn Sie also einen neuen Eintrag in der Liste erwarten, sollten Sie der Datenquelle einen neuen Eintrag hinzufügen. –

Antwort

1

Endlich habe ich es selbst gelöst. Ich implementierte das LostFocus Ereignis der comboBox, wo ich den Code für die Aktualisierung der Grenze DataSet mit dem neuen Element hinzugefügt.

Das Element wurde erfolgreich hinzugefügt, aber ein Problem besteht immer noch. Der Artikel ist nicht ausgewählt, nachdem er hinzugefügt wurde. ComboBox wird immer noch auf die vorherige Auswahl zurückgesetzt. Ich kann den neuen Artikel jedoch manuell auswählen. Aber wenn Sie diesen Fehler beheben können, wird es eine bessere UX für den Benutzer. Folgendes ist, wie ich erreicht, neue Artikel hinzufügen:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == CategorySelector.Index) 
    { 
     ComboBox combo = e.Control as ComboBox; 
     if (combo == null) 
      return; 
     combo.DropDownStyle = ComboBoxStyle.DropDown; 
     combo.LostFocus += combo_LostFocus; 
    } 
} 
void combo_LostFocus(object sender, EventArgs e) 
{ 
    ComboBox c = (ComboBox)sender; 
    if (c.FindStringExact(c.Text.Trim().ToLower()) == -1) 
    { 
     inventoryCategorySet.Tables[0].Rows.Add(c.Text.Trim().ToLower()); 
     inventoryCategorySet.AcceptChanges(); 
    } 
} 
Verwandte Themen