我想知道如何设置DataGridViewComboBox单元格的值。我已经将DataGridViewComboBox与DataSource绑定在一起。但是我想为这个数据源设置新值。
这是我到目前为止所做的:
gvList.Rows[0].Cells[0].value = "Select";
但它抛出一个错误说:格式异常:DataGridViewComboBox单元格值无效。
如何在没有错误的情况下实现这一目标?
答案 0 :(得分:14)
问题的根本原因是组合框值列表中不存在“选择”值。您需要将其添加到列的数据源,或者添加到单个单元的组合框的数据源(使用该单元的编辑控件)。
下面是关于设置我将要离开的所选项目的值的更多解释,因为您可能会发现它很有用。
设置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”。
以上几行是导致错误的直接原因 - 将值提供给组合框的列表不包含值“选择”。
要使用数据绑定设置值,您需要告诉ComboBoxColumn它在DataGridView数据源中绑定了什么。
完成后,我将ComboBoxColumn的DataPropertyName设置为DataGridView绑定的类的属性名称。
答案 1 :(得分:4)
有一种设置值的方法,但如果设置了DataSource则不允许。
DataGridViewComboBoxCell cell =(DataGridViewComboBoxCell)gvList.Rows[0].Cells[0];
cell.Items[0] = "Select";
答案 2 :(得分:3)
错误是由于您已将DataSource
绑定到ComboBox
列,并且在分配Select时尝试在其DataSource
范围内找到它。
您最好的选择是将相同的数据添加到绑定到ComboBox
列的原始数据源
答案 3 :(得分: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)
希望这个帮助
答案 4 :(得分:0)
尝试添加活动
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
}