Как установить значение для столбца DataGridViewComboBox? - PullRequest
8 голосов
/ 12 мая 2011

Я хочу знать, как установить значение ячейки DataGridViewComboBox.Я уже связываю DataGridViewComboBox с DataSource.Но я хочу установить новое значение для этого источника данных.

Это то, что у меня пока есть:

gvList.Rows[0].Cells[0].value = "Select";

Но выдает ошибку, говорящую: Исключение формата: DataGridViewComboBox Недопустимое значение ячейки .

Как я могу добиться этого без ошибок?

Ответы [ 5 ]

14 голосов
/ 12 мая 2011

Основной причиной вашей проблемы является то, что значение «Выбрать» не существует в вашем списке значений поля со списком.Вам нужно будет либо добавить это к источнику данных для столбца, либо к источнику данных для поля со списком отдельной ячейки (используя элемент управления для редактирования этой ячейки).

Ниже приведено более подробное объяснение установки значения выбранного элемента, которое я собираюсь оставить, поскольку вы можете найти его полезным.

Существует два основных способа установить значение параметра.DataGridViewComboBoxColumn.Вы либо используете привязку данных, либо устанавливаете значение напрямую.

Звучит так, будто вы пытаетесь установить напрямую, поэтому сначала я объясню это, а затем ниже я дополню ответ привязкой данных.

Взяв следующий надуманный пример:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        BindingList<User> users = new BindingList<User> { new User() { UserName = "Fred", userid = 2 } };

        IList<MyValue> values = new List<MyValue> { new MyValue{id = 1, name="Fred"}, new MyValue{id = 2, name="Tom"}};

        dataGridView1.DataSource = users;

        DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
        col.DataSource = values;
        col.DisplayMember = "name";
        col.DataPropertyName = "userid";
        col.ValueMember = "id";
        dataGridView1.Columns.Add(col);

    }       
}

public class MyValue
{
    public int id { get; set; }
    public string name { get; set; }
}

public class User
{
    public string UserName { get; set; }
    public int userid {get;set;}
}

В этом примере я установил для свойства ValueMember значение "id", которое ссылается на идентификатор имен свойств в списке, к которому привязан мой ComboBox.

Итак, все, что мне нужно сделать, это следующее (где я уверен, что мои индексы строк и ячеек правильны - вы должны написать код, чтобы проверить это):

dataGridView1.Rows[0].Cells[2].Value = 1;

Теперь, вВ моем примере это работает, потому что мой ValueMember установлен на мое свойство "id", которое является целым числом, если бы вместо id было свойство строки, мне нужно было бы установить значение следующим образом:

dataGridView1.Rows[0].Cells[2].Value = "1";

(на самом деле простопопробовал это, и он справляется с неявным приведением)

И, конечно, я хотел бы убедиться, что в моем списке действительно есть значение "1".

выше несколько строк являются прямой причиной вашегоошибка - ваш список, который предоставляет значения в поле со списком, не содержит значения «Выбрать».

Чтобы установить значение с помощью привязки данных, вам нужно сообщить ComboBoxColumn, с чем оно связывается вDataGridView источник данных.

Я сделал, установив DataPropertyName объекта ComboBoxColumn в имя свойства класса, с которым связан DataGridView.

4 голосов
/ 12 мая 2011

Есть способ установить значение, но оно не разрешено, если установлен DataSource.

DataGridViewComboBoxCell cell =(DataGridViewComboBoxCell)gvList.Rows[0].Cells[0];
cell.Items[0] = "Select";
3 голосов
/ 17 января 2014

Это сработало для меня

dim dt as datatable
dt=fillMydata()  'do your function
'dt has 2 col myId as myDescription
Dim col As DataGridViewComboBoxColumn
col = New DataGridViewComboBoxColumn
col.HeaderText = "MyHeader"
col.Name = "Myname"
col.DataSource = data   '
col.DisplayMember = "myDescription"
col.ValueMember = "myId"
col.DropDownWidth = 240

''''''''''''''''''''''''''''''''''''''''''''''
'set the value
col.DefaultCellStyle.NullValue = dt.Rows(0).Item("myDescription").ToString
''''''''''''''''''''''''''''''''''''''''''''''

DataGridView1.Columns.Add(col)

надеюсь, что это поможет

3 голосов
/ 12 мая 2011

Ошибка связана с тем, что вы связали DataSource со столбцом ComboBox, и при назначении Select его пытается найти то же самое в DataSource его границе.Лучше всего добавить то же самое к исходному источнику данных, который вы привязываете к столбцу ComboBox

.
0 голосов
/ 12 мая 2011

Попробуйте добавить событие

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...