2009-09-07 7 views
6

Я думал, что это было просто, как в Access.DataGridViewComboBox Название столбца/значение как?

Пользователь должен установить значение одного столбца в DataTable либо 1, либо 2.

Я хотел представить выпадающий демонстрационный «один», «два» и установка 1 или 2 за сценой, как Я много раз делал в Access-Forms.

С другой стороны, если таблица показана, она не должна показывать 1 или 2, но соответствующую строку в ComboBox.

Как я могу заставить эту простую задачу работать?

ответ

12

Я предполагаю, что вы имели в виду DataGridView, который предназначен для Windows Forms, а GridView - для ASP.NET, хотя вы отметили свой вопрос как таковой.

Как вы привязываете данные к DataGridViewComboBoxColumn? Вам нужно будет установить свойства DisplayMember и ValueMember в DataGridViewComboBoxColumn, установив его DataSource. Ссылка MSDN на DisplayMember показывает пример, но он не совсем показывает, что вы запрашиваете, поскольку он устанавливает оба свойства в одну и ту же вещь.

DisplayMember - это текст, который вы хотите видеть, и ValueMember будет скрытым базовым значением, связанным с ним.

Ради примера, скажем, у вас есть класс, выбор в вашем проекте, который представляет ваш выбор и выглядит следующим образом:

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() возвращает список, содержащий ваш выбор. В идеале у вас будет такой метод на уровне сервиса, или вы можете создать свой собственный список в другом месте, если хотите (в коде вашей формы). Для простоты я объединил все это в одном классе.

В вашей форме вы бы связать список с DataGridViewComboBoxColumn следующим образом:

// 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 

Теперь вы должны увидеть «One» и «два» в выпадающем списке. Когда вы получаете от него выбранное значение, оно должно быть базовым значением 1 или 2.

Идея использования DisplayMember/ValueMember. Это должно заставить вас идти и помочь вам адаптировать источник данных, который вы использовали.

+0

Это идеальный ответ! Спасибо, Ахмад! Reinhard – 2009-09-08 16:39:43

+2

Как мы можем прочитать выбранное значение выпадающей ячейки в datagrid? – Meysam

+0

Не знал, что все так просто! благодаря – Jack

3

Это, как вы читаете значение из сетки, когда значение изменяется COMBOBOX:

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 
    } 
} 

источники: this post

Смежные вопросы