2009-07-07 13 views
11

Böyle bir DataGridViewComboBoxColumn kuruyorum:Her hücrede farklı bir DataSource ile DataGridView ComboBoxColumn nasıl kurarım?

var newColumn = new DataGridViewComboBoxColumn() { 
    Name = "abc" 
}; 
newColumn.DataSource = new string[] { "a", "b", "c" }; 
dgv.Columns.Add(newColumn); 

Bu çalışır: her satır a, b, c ile doldurulur o sütundaki bir açılan kutu vardır.

Ancak, şimdi bazı satırlar için liste Döşeme istiyorum. Böyle satır başına listesini ayarlamak çalışıyorum:

foreach (DataGridViewRow row in dgv.Rows) { 
    var cell = (DataGridViewComboBoxCell)(row.Cells["abc"]);   
    cell.DataSource = new string[] { "a", "c" };       
} 

Ancak bu kod etkisi yoktur - her satır hala "a", "b", "c" gösterir.

new string[]'u new List<string> ve new BindingList<string> ile değiştirmeyi denedim, ikisi de boşuna.

Ayrıca, newColumn.DataSource'u ayarlayan kodu kaldırmayı denedim, ancak listeler boş.

nasıl düzgün bunu hakkında gitmek gerekir ? Benim için

cevap

20

aşağıdaki çalışır:

DataGridViewComboBoxColumn newColumn = new DataGridViewComboBoxColumn(); 
newColumn.Name = "abc"; 
newColumn.DataSource = new string[] { "a", "b", "c" }; 
dataGridView1.Columns.Add(newColumn); 

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)(row.Cells["abc"]); 
    cell.DataSource = new string[] { "a", "c" }; 
} 

Şunu da deneyebilirsiniz (bu da benim için çalışıyor):

for (int row = 0; row < dataGridView1.Rows.Count; row++) 
{ 
    DataGridViewComboBoxCell cell = 
     (DataGridViewComboBoxCell)(dataGridView1.Rows[row].Cells["abc"]); 
    cell.DataSource = new string[] { "f", "g" }; 
} 
+0

Hmm. Bu – Blorgbeard

+3

Tamam ben farklı yapıyorum şey .. olmalı, sorun benim DataGridView AutoSizeColumnMode Allcells ayarlı olduğu gerçeği ile ilgili bir şeydi. Veri kaynağı ayarlanmadan (veya bir şey) önce hücrelerin değerlerini doğruladığını düşünüyorum. – Blorgbeard

+1

Sorunumda bana yardımcı oldu! – XXXXX

0

Diğer bir seçenek satır düzeyinde veri bağlama denemektir. OnRowDataBound etkinliğini kullanmayı deneyin. Daha sonra, bu satırın içeriğine göre açılan kutuda ne olduğunu programatik olarak ayarlayabilirsiniz. Tabii

, bu size grid veri bağlama vardır varsaymaktadır. Temiz bir deney projesinde - çok benim için çalışıyor

+2

Veri bağlarım var, ancak bu web değil winforms. winforms datagridview bu etkinliğe sahip görünmüyor .. – Blorgbeard