【问题标题】:How to set value to DataGridViewComboBox Column?如何为 DataGridViewComboBox 列设置值?
【发布时间】:2011-08-24 00:10:14
【问题描述】:

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

这是我目前所拥有的:

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

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

我怎样才能做到这一点而不会出错?

【问题讨论】:

  • @thinzar 你真的是指DataGridView吗?您的问题用 asp.net 标记,但 DataGridView 是一个 winforms 控件。
  • 你在使用 asp.net gridview 和 dropdownlist 吗?
  • 嗨,你遇到了什么错误?
  • 不,我在C# windows Form中使用了DataGridView和DataGridViewComboBox。
  • 格式异常:DataGridViewComboBox 单元格值无效。

标签: c# winforms datagridview


【解决方案1】:

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

下面是关于设置所选项目的值的更多解释,我将离开,因为您可能会发现它很有用。

有两种基本方法可以设置 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 的类的属性名称就完成了。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 可能这行不通,我认为cell.Items.Add("Select") 是正确的
    【解决方案3】:

    该错误是由于您已将DataSource 绑定到ComboBox 列,并且在分配 Select 时尝试在其绑定的DataSource 中找到相同的位置。 您最好的选择是将其添加到您绑定到 ComboBox 列的原始数据源中

    【讨论】:

      【解决方案4】:

      这对我有用

      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)
      

      希望有帮助

      【讨论】:

      • 这对我也有用。更简单的方法,只需设置 NullValue。
      【解决方案5】:

      尝试添加事件

      private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
      {
       }
      

      【讨论】:

      • 请回答完整的样本。
      • 只需添加从事件中选择的 datagridview 的事件,就像你说你得到格式异常
      • 这将吞噬错误,OP想要的是一个解决方案。这是解决问题的一种破旧方法。
      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      相关资源
      最近更新 更多