Вопрос

Я думал, что это было просто, как в доступе.

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

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

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

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

Это было полезно?

Решение

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

Как вы связываете данные с DataGridViewComboboxColumn? Вам нужно будет установить Дисплей и свойства Valuemember на DataGridViewComboboboxColumn при настройке данных. Ссылка MSDN на дисплей показывает пример, но она не совсем показывает, что вы запрашиваете, поскольку она устанавливает оба свойства на одно и то же.

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

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

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

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

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

Другие советы

Вот как вы читаете значение из сетки, когда изменение значения в 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
    }
}

Источники: эта почта

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top