34

我正在尝试将 a 绑定List<T>到 DataGridView 控件,但我没有任何运气来创建自定义绑定。

我努力了:

gvProgramCode.DataBindings.Add(new Binding("Opcode",code,"Opcode"));

它抛出一个异常,表示该属性名称没有找到任何内容。

有问题的列的名称是“操作码”。中的属性名称List<T>是 Opcode。

回答编辑:问题是我的类中没有可绑定字段作为属性,只有公共字段......显然它不会反映字段,只是属性。

4

4 回答 4

14

您是否也将网格上的属性绑定到 Opcode?.. 如果您想直接绑定到 List,您只需 DataSource = list. 数据绑定允许自定义绑定。您是否正在尝试做数据源以外的事情?

你得到一堆空行?自动生成的列有名称吗?您是否已验证数据在对象中(不仅仅是 string.empty)?

    class MyObject
    {
        public string Something { get; set; }
        public string Text { get; set; }
        public string Other { get; set; }
    }

    public Form1()
    {
        InitializeComponent();

        List<MyObject> myList = new List<MyObject>();

        for (int i = 0; i < 200; i++)
        {
            string num = i.ToString();
            myList.Add(new MyObject { Something = "Something " + num , Text = "Some Row " + num , Other = "Other " + num  });
        }

        dataGridView1.DataSource = myList;
    }

这应该可以正常工作...

于 2008-09-24T02:49:10.520 回答
5

我无法真正说出您要对包含的示例进行什么操作,但是如果您只想列出对象,则绑定到通用对象列表相当简单:

    private BindingSource _gridSource;

    private BindingSource GridSource
    {
        get
        {
            if (_gridSource == null)
                _gridSource = new BindingSource();
            return _gridSource;
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        List<FluffyBunny> list = new List<FluffyBunny>();
        list.Add(new FluffyBunny { Color = "White", EarType = "Long", Name = "Stan" });
        list.Add(new FluffyBunny { Color = "Brown", EarType = "Medium", Name = "Mike" });
        list.Add(new FluffyBunny { Color = "Mottled", EarType = "Short", Name = "Torvald" });

        GridSource.DataSource = list;
        dataGridView1.Columns["EarType"].Visible = false; //Optionally hide a column
        dataGridView1.DataSource = GridSource;

    }

如果您只想显示列表类型的特定属性,您应该能够使不需要的列不可见。

从技术上讲,您实际上并不需要创建 BindingSource,但是如果我拥有它,我发现在进行更新或更改时会容易得多。

希望这可以帮助。

于 2008-09-24T02:59:29.437 回答
4

有同样的问题......我显然有一个带有公共字段的结构。网格中没有任何内容。提供公共吸气剂,工作。

于 2009-03-26T17:03:24.430 回答
4

我发现的另一个解决方案是使用 BindingList 集合。



private void Form1_Load(object sender, EventArgs e)
{
   BindingList people= new BindingList {
    new Person {Name="John",Age=23},
    new Person {Name="Lucy",Age=16}
  };

   dataGridView1.DataSource= people;
}

这对我来说可以,

于 2009-11-13T12:36:20.640 回答