2015-05-10 8 views
5

Ich habe eine Winforms Anwendung, die eine DataGridView hat. Die DataGridView ist nicht an eine Datenquelle gebunden. Ich lese eine Textdatei, und entsprechend jeder Zeile in der Datei platziere ich die Werte jeder Zeile in das Datagrid.Get DatagridviewComboBoxCells SelectedIndex

Ich habe eine Spalte in meinem Raster, die eine ComboBoxColumn ist. Es hat eine Sammlung von Gegenständen darin.

Mein Ziel ist es, den Index des Elements, das in der Zelle angezeigt wird, in der Datei zu speichern. Allerdings scheint ComboBoxCell die SelectedIndex Eigenschaft wie ComboBox nicht zu haben.

Es ist wichtig zu erwähnen, dass ich den Index des angezeigten Elements nur wissen muss, wenn der Benutzer die Option "Speichern" drückt. Daher glaube ich nicht, dass das EditingControlShowing-Ereignis mein Weg ist.

Antwort

3

Nun, Sie haben es fast richtig: Um die gewählten Index zu finden Sie Notwendigkeit tun das EditingControlShowing Ereignis codieren, so stellen Sie sicher, einen Verweis auf die ComboBox zu halten, die während der Bearbeitung verwendet wird:

// hook up the event somwhere: 
    dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing; 

// keep a reference to the editing comtrol: 
ComboBox combo = null; 

// fill the reference, once it is valid: 
void dataGridView1_EditingControlShowing(object sender, 
              DataGridViewEditingControlShowingEventArgs e) 
{ 
    combo = e.Control as ComboBox; 
} 

Jetzt können Sie es verwenden:

private void Save_Click(object sender, EventArgs e) 
{ 
     int index = -1; 
     if (combo != null) index = combo.SelectedIndex; 
     // now do what you want.. 
} 

Hinweis dass dies nur eine minim ist ein Beispiel. Wenn Ihre Benutzer mehrere Spalten und Zeilen bearbeiten, bevor sie das 'Speichern' Buton drücken, müssen Sie entweder das ComboBoxes oder, weniger teuer, das SelectedIndex Event, möglicherweise in dem CellEndEdit Ereignis pro Zelle speichern. Die Zellen Tag liegen auf der Hand Lagerplätze:

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (combo != null) 
     dataGridView1[e.ColumnIndex, e.RowIndex].Tag = combo.SelectedIndex; 
} 

In dieser Version werden Sie natürlich den Index abrufen bilden die Tag, nicht aus Combo ..

Natürlich könnte man auch eine Item vom Value finden wie dies:

DataGridViewComboBoxCell dcc = 
         (DataGridViewComboBoxCell)dataGridView1[yourColumn, yourRow]; 
int index = dcc.Items.IndexOf(dcc.Value); 

Aber das wird einfach die erste Fitting Index bekommen, nicht derjenige, der tatsächlich gewählt wurde ..

+2

Die Tag-Eigenschaft kombiniert mit diesen Ereignissen gab mir die Lösung, die ich brauchte. Danke vielmals – subirshan

Verwandte Themen