34

を DataGridView コントロールにバインドしようとしList<T>ていますが、カスタム バインディングを作成できません。

私が試してみました:

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

そのプロパティ名では何も見つからなかったという例外がスローされます。

問題の列の名前は「Opcode」です。のプロパティの名前List<T>は Opcode です。

ANSWER EDIT:問題は、クラスにプロパティとしてバインド可能なフィールドがなく、パブリックフィールドだけだったことです...明らかに、フィールドには反映されず、プロパティだけに反映されます。

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

私が見つけた別の解決策は、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 に答える