如何设置DataGridViewComboBox列的值?

问题描述 投票:0回答:5

我想知道如何设置 DataGridViewComboBox 单元格的值。我已经将 DataGridViewComboBox 与 DataSource 绑定。但我想为此数据源设置新值。

这就是我到目前为止所拥有的:

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

但它会抛出一个错误: Format Exception: DataGridViewComboBox Cell value is not valid

我怎样才能在没有错误的情况下实现这一目标?

c# winforms datagridview
5个回答
19
投票

问题的根本原因是组合框值列表中不存在值“Select”。您需要将其添加到列的数据源,或单个单元格组合框的数据源(使用该单元格的编辑控件)。

下面是有关设置所选项目的值的更多说明,我将保留这些说明,因为您可能会发现它很有用。

设置 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 绑定到的列表中的属性名称 id。

所以我需要做的就是以下内容(我确信我的行和单元格索引是正确的 - 您应该编写代码来检查):

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

现在,在我的示例中,这是有效的,因为我的

ValueMember
设置为我的“id”属性,它是一个整数,如果 id 是一个字符串属性,我需要设置如下值:

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

(实际上只是尝试了这个,它通过隐式转换进行管理)

当然,我想确保我的列表中确实有一个值“1”。

上面几行是错误的直接原因 - 向组合框提供值的列表不包含值“Select”。

要使用数据绑定设置值,您需要告诉 ComboBoxColumn 它在 DataGridView 数据源中绑定的内容。

这是通过将 ComboBoxColumn 的

DataPropertyName
设置为 DataGridView 所绑定的类的属性名称来完成的。


5
投票

有一种方法可以设置该值,但如果设置了DataSource则不允许。

DataGridViewComboBoxCell cell =(DataGridViewComboBoxCell)gvList.Rows[0].Cells[0];
cell.Items[0] = "Select";

3
投票

该错误是由于您已将

DataSource
绑定到
ComboBox
列,并且在您分配 Select 时,它试图在其绑定的
DataSource
中找到相同的内容。 最好的选择是将其添加到绑定到
ComboBox

的原始数据源中

3
投票

这对我有用

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)

希望这有帮助


0
投票

尝试添加事件

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
 }
© www.soinside.com 2019 - 2024. All rights reserved.