public class MaterialInfo
{
    string _id;
    string _name;
    
    public stirng ID
    {
       get{....}
       set{....}
    }
    
    public string Name
    {
       get{....}
       set{....}
    }
}public class A
{
    string _id;
    MaterialInfo _material;
    
    public stirng ID
    {
       get{....}
       set{....}
    }
    
    public MaterialInfo Material
    {
       get{....}
       set{....}
    }
}在winform中如何绑定数据.
假设 A.ID=1;
     A.Material.ID = "00001";
     A.Material.Name = "物料名称";
如何将数据绑定到DataGrid或是DataGridView得到一行数据(1,00001,物料名称1).
DataGrid是否直接支持,如果支持怎么做。
要是不支持,有什么好的方法解决这个问题?

解决方案 »

  1.   

    DataGridViewCell.Tag   可以将任何对象绑定
    使用时转换回来就行
      

  2.   

    ArrayList al = new ArrayList();
    al.add("你的Class");
    ...
    你建一个DataGrid是可以这样的DataGrid.DataSource = al;或是等于你的Class数组.
      

  3.   

    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (this.dataGridView1.Columns["ContactName"].Index ==
            e.ColumnIndex && e.RowIndex >= 0)
        {
         this.DataGridView.Rows[e.RowIndex][e.ColumnIndex].Tag = A(你的值_)
        }
    }
      

  4.   

    to:csShooter
    DataGridViewCell.Tag 值怎么写
    不知道DataGrid能不能用这种方法.
      

  5.   

    没做过,能不能这样改变下思路...public class A
    {
        string _id;
        MaterialInfo _material;
        
        public stirng ID
        {
           get{....}
           set{....}
        }
        
        public MaterialInfo Material
        {
           set{....}//这里设置成只写
        }    //另外增加两个只读属性
        public string MaterialInforID
        {
            get{return _material.id;}
        }
        public string MaterialName
        {
            get{return _material.name;}
        }
    }这样非嵌套的对象绑定,楼主应该知道...
      

  6.   

    对于非嵌套对象的绑定,可见参见MSDN:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxmclictl/html/cb8f29fa-577e-4e2b-883f-3a01c6189b9c.htm
      

  7.   

    for example:public partial class Form1 : Form
        {
            private BindingSource bs = new BindingSource();
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                bs.Add(new A("111", new MaterialInfo("111", "aaa")));
                bs.Add(new A("222", new MaterialInfo("222", "bbb")));
                this.dataGridView1.DataSource = bs;
            }
        }
        public class MaterialInfo
        {
            string _id;
            string _name;        public MaterialInfo(string id, string name)
            {
                this._id = id;
                this._name = name;
            }
            public string ID
            {
                get { return this._id; }
                set { this._id = value; }
            }        public string Name
            {
                get { return this._name; }
                set { this._name = value; }
            }
        }
        public class A
        {
            string _id;
            MaterialInfo _material;        public A(string id, MaterialInfo material)
            {
                this._id = id;
                this._material = material;
            }
            public string ID
            {
                get { return this._id; }
                set { this._id = value; }
            }        public MaterialInfo Material
            {
                set { this._material = value; }//这里设置成只写
            }        //另外增加两个只读属性
            public string MaterialInforID
            {
                get { return _material.ID; }
            }
            public string MaterialName
            {
                get { return _material.Name; }
            }
        }
      

  8.   

    谢谢各位.
    snowlover的方法应该是很好的解决方法了.