2009-09-07 10 views
6

Bunun Access'te olduğu gibi basit olduğunu sanmıştım.DataGridViewComboBoxColumn adı/değeri nasıl?

Kullanıcı, 1 veya

2. Bir combobox gösteren "ONE" sunmak istedim ya bir datatable bir sütunun değerini ayarlamak için "İKİ" ihtiyacı ve benzeri sahne arkasında 1 veya 2 ayarı Access Formlarında birçok kez yaptım.

Diğer tarafta, eğer tablo gösteriliyorsa, 1 veya 2'yi göstermeyecek, ancak ComboBox'taki ilgili dizeyi göstermeyecektir.

Bu basit görevi nasıl çalıştırabilirim ??

cevap

12

Sorunu etiketlediğiniz halde, GridView ASP.NET için iken, Windows Forms için olan DataGridView kastettiğinizi kastediyorum.

Verileri DataGridViewComboBoxColumn'a nasıl bağlıyorsunuz? DataSource ayarını yaparken DataGridViewComboBoxColumn üzerinde DisplayMember ve ValueMember özelliklerini ayarlamanız gerekir. MSDN, DisplayMember'e bir örnek gösterir, ancak her iki özelliği aynı şeylere ayarladığı için isteğinizi tam olarak göstermez.

DisplayMember, kullanıcının görmesini istediğiniz metin olacak ve ValueMember onunla ilişkili gizli temel değer olacaktır. Seçimlerinizi içeren bir liste döndürür)

public class Choice 
{ 
    public string Name { get; private set; } 
    public int Value { get; private set; } 
    public Choice(string name, int value) 
    { 
     Name = name; 
     Value = value; 
    } 

    private static readonly List<Choice> possibleChoices = new List<Choice> 
    { 
     { new Choice("One", 1) }, 
     { new Choice("Two", 2) } 
    }; 

    public static List<Choice> GetChoices() 
    { 
     return possibleChoices; 
    } 
} 

GetChoices (: Örnek uğruna

, en Seçimlerinizi temsil eder ve şöyle projenizde bir Seçenek sınıfı var diyelim. İdeal olarak, bir hizmet katmanında böyle bir yönteminiz olabilir, ya da eğer isterseniz (kendi formunuzun kodunda) kendi listenizi oluşturabilirsiniz. Basitlik için hepsini hep aynı sınıfta topladım. aşağıdaki gibi formda

sen DataGridViewComboBoxColumn listeyi bağlamak istiyorum:

// reference the combobox column 
DataGridViewComboBoxColumn cboBoxColumn = (DataGridViewComboBoxColumn)dataGridView1.Columns[0]; 
cboBoxColumn.DataSource = Choice.GetChoices(); 
cboBoxColumn.DisplayMember = "Name"; // the Name property in Choice class 
cboBoxColumn.ValueMember = "Value"; // ditto for the Value property 

Artık combobox "One" ve "Two" görmelisiniz. Seçilen değeri ondan aldığınızda, temel 1 veya 2 değeri olmalıdır.

DisplayMember/ValueMember öğesinin kullanılmasının ardında yatan fikir budur. Bu, gitmenize ve kullandığınız veri kaynağını uyarlamanıza yardımcı olur.

+0

! Teşekkür ederim Ahmad! Reinhard –

+2

Datagrid'de bir açılır hücrenin seçili değerini nasıl okuyabiliriz? – Meysam

+0

Bu kadar basit olduğunu bilmiyordum! Teşekkürler – Jack

3

Bu ızgara değeri okumak nasıl olduğu zaman combobox değer değişip:

dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing; 

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox) 
    { 
     ComboBox comboBox = e.Control as ComboBox; 
     comboBox.SelectedIndexChanged += LastColumnComboSelectionChanged; 
    } 
} 

private void LastColumnComboSelectionChanged(object sender, EventArgs e) 
{ 
    var sendingCB = sender as DataGridViewComboBoxEditingControl; 
    object value = sendingCB.SelectedValue; 
    if (value != null) 
    { 
     int intValue = (int)sendingCB.SelectedValue; 
     //do something with value 
    } 
} 

kaynaklar: this post Bu mükemmel cevaptır