将集合绑定到Windows窗体中的DataGridView

时间:2010-04-25 12:03:56

标签: c# datagridview winforms

我正在尝试将集合绑定到DataGridView。事实证明,虽然EditMode设置为EditOnKeystrokeOrF2,但用户无法在此DataGridView中编辑任何内容。
这是简化的代码:

public Supplies()
{
   InitializeComponent();
   List<string> l = new <string>();
   l.Add("hello");
   this.SuppliesDataGridView.DataSource = l;
}

当我将集合类型更改为SortableBindingList,Dictionary或甚至使用BindingSource时,它也不起作用。

这里有什么不妥?

3 个答案:

答案 0 :(得分:5)

对我来说,以下方法按预期工作:

  • 使用设计器
  • 打开表单(usercontrol等)
  • 向表单添加BindingSource
  • 在表单中选择BindingSource并打开属性页
  • 选择DataSource属性,然后单击向下箭头
  • 点击添加项目数据源
  • 选择对象
  • 选择您要处理的对象类型
    • 这应该是您的集合将处理的类型,而不是CustomCollection本身!
  • 从菜单栏中选择数据 - 显示数据源
  • 显示可用的数据源
  • 从表单
  • 上的DatasSources拖放ItemType
  • 进入表单代码并将CustomCollection绑定到BindingSource

        var cc = new CustomCollection();
        bindingSource1.DataSource = cc;
    

<强>说明
DataGridView只是链中允许更改,添加和删除列表中的对象(或CustomCollection)的最后一部分。 BindingSource中还有一个属性AllowNewICollection接口的属性IsReadOnly必须设置为false才能进行编辑。最后但同样重要的是,集合中类的属性必须具有允许更改值的公共setter方法。

答案 1 :(得分:2)

试试这个:

    public class CustomCollection { public string Value { get; set; } }

    public Supplies()
    {
        InitializeComponent();
        List<CustomCollection> l = new List<CustomCollection> { new CustomCollection { Value = "hello" } };
        this.SuppliesDataGridView.DataSource = l;
    }

答案 2 :(得分:0)

一旦设置了DataSource属性,您就需要触发DataBind()方法。

this.SuppliesDataGridView.DataSource = l;
this.SuppliesDataGridView.DataBind();

<击> 更新:

正如您在评论中正确指出的那样,此控件不存在DataBind()方法。

此链接可能会提供一些有用的信息:http://msdn.microsoft.com/en-us/library/fbk67b6z%28v=VS.90%29.aspx