none
获取单个实体对象后,如何将其属性值赋给DataGridView? RRS feed

  • 问题

  • 教材上暂时只教了直接添加泛型集合到datagridview,比如dgv.DataSource = List<T> 这样里面的实体属性值就直接全部显示在Datagridview里。
    但是只把单个实体对象通过什么方法赋给DataGridView并显示呢?

    2009年6月1日 13:55

答案

  • 手动指定绑定列就可以

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinFormsApp
    {
        /// <summary>
        /// 标题:DataGridView 简单绑定 List 对像
        /// 日期:2009-05-14
        /// </summary>
        public partial class X200905142324 : FormBase
        {
            public X200905142324()
            {
                InitializeComponent();
                this.BindGrid();
            }
    
            private void BindGrid()
            {
                List<XList> fXList = new List<XList>();
    
                fXList.Add(new XList(1, "Rol", true));
                fXList.Add(new XList(2, "Chole", false));
                fXList.Add(new XList(3, "John", true));
                fXList.Add(new XList(4, "X.X.Y", false));
    
                this.xGrid1.AutoGenerateColumns = false;
    
                DataGridViewColumn fColumn1 = new DataGridViewColumn(new DataGridViewTextBoxCell());
                fColumn1.HeaderText = "Id";
                fColumn1.DataPropertyName = "Id";
    
                DataGridViewColumn fColumn2 = new DataGridViewColumn(new DataGridViewTextBoxCell());
                fColumn2.HeaderText = "Name";
                fColumn2.DataPropertyName = "Name";
    
                //DataGridViewColumn fColumn3 = new DataGridViewColumn(new DataGridViewCheckBoxCell());
                //fColumn3.HeaderText = "IsDeleted";
                //fColumn3.DataPropertyName = "IsDeleted";
    
                // 这里改变 Add 顺序将会改变列显示顺序
                this.xGrid1.Columns.Add(fColumn1);
                this.xGrid1.Columns.Add(fColumn2);
                //this.xGrid1.Columns.Add(fColumn3);
                this.xGrid1.DataSource = fXList;
    
                XList f = (XList)this.xGrid1.Rows[0].DataBoundItem;
    
                 //不一定非得用索引来取,下面的方式更好
                int fId = f.Id;
                string fName = f.Name;
                bool fIsDeleted = f.IsDeleted;
            }
        }
    
        public class XList
        {
            private int fId;
            private string fName;
            private bool fIsDeleted;
    
            public int Id
            {
                get { return fId; }
                set { fId = value; }
            }
    
            public string Name
            {
                get { return fName; }
                set { fName = value; }
            }
    
            public bool IsDeleted
            {
                get { return fIsDeleted; }
                set { fIsDeleted = value; }
            }
    
            public XList(int fId, string fName, bool fIsDeleted)
            {
                this.fId = fId;
                this.fName = fName;
                this.fIsDeleted = fIsDeleted;
            }
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 8848cjf 2009年6月3日 9:47
    2009年6月2日 1:17
    版主

全部回复

  • 你好!

    DataGridView 类支持标准的 Windows 窗体数据绑定模型。这意味着数据源可以是实现下列接口之一的任何类型:

    通常绑定到 BindingSource 组件,并将 BindingSource 组件绑定到其他数据源或使用业务对象填充该组件。BindingSource 组件为首选数据源,因为该组件可以绑定到各种数据源,并可以自动解决许多数据绑定问题。

    在绑定到包含多个列表或表的数据源时,必须将 DataMember 属性设置为指定要绑定的列表或表的字符串。但是,在绑定到包含多个列表或表的 BindingSource 组件时,可以设置 BindingSource 组件的 DataMember 属性。

    当绑定到数据库数据以外的对象集合时,通常会将 DefaultCellStyle 属性返回的对象的 DataSourceNullValue 属性设置为 空引用(在 Visual Basic 中为 Nothing),而不是使用默认值 System.DbNull.Value (该值适用于数据库数据)。


    周雪峰
    2009年6月1日 14:06
    版主
  • 手动指定绑定列就可以

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinFormsApp
    {
        /// <summary>
        /// 标题:DataGridView 简单绑定 List 对像
        /// 日期:2009-05-14
        /// </summary>
        public partial class X200905142324 : FormBase
        {
            public X200905142324()
            {
                InitializeComponent();
                this.BindGrid();
            }
    
            private void BindGrid()
            {
                List<XList> fXList = new List<XList>();
    
                fXList.Add(new XList(1, "Rol", true));
                fXList.Add(new XList(2, "Chole", false));
                fXList.Add(new XList(3, "John", true));
                fXList.Add(new XList(4, "X.X.Y", false));
    
                this.xGrid1.AutoGenerateColumns = false;
    
                DataGridViewColumn fColumn1 = new DataGridViewColumn(new DataGridViewTextBoxCell());
                fColumn1.HeaderText = "Id";
                fColumn1.DataPropertyName = "Id";
    
                DataGridViewColumn fColumn2 = new DataGridViewColumn(new DataGridViewTextBoxCell());
                fColumn2.HeaderText = "Name";
                fColumn2.DataPropertyName = "Name";
    
                //DataGridViewColumn fColumn3 = new DataGridViewColumn(new DataGridViewCheckBoxCell());
                //fColumn3.HeaderText = "IsDeleted";
                //fColumn3.DataPropertyName = "IsDeleted";
    
                // 这里改变 Add 顺序将会改变列显示顺序
                this.xGrid1.Columns.Add(fColumn1);
                this.xGrid1.Columns.Add(fColumn2);
                //this.xGrid1.Columns.Add(fColumn3);
                this.xGrid1.DataSource = fXList;
    
                XList f = (XList)this.xGrid1.Rows[0].DataBoundItem;
    
                 //不一定非得用索引来取,下面的方式更好
                int fId = f.Id;
                string fName = f.Name;
                bool fIsDeleted = f.IsDeleted;
            }
        }
    
        public class XList
        {
            private int fId;
            private string fName;
            private bool fIsDeleted;
    
            public int Id
            {
                get { return fId; }
                set { fId = value; }
            }
    
            public string Name
            {
                get { return fName; }
                set { fName = value; }
            }
    
            public bool IsDeleted
            {
                get { return fIsDeleted; }
                set { fIsDeleted = value; }
            }
    
            public XList(int fId, string fName, bool fIsDeleted)
            {
                this.fId = fId;
                this.fName = fName;
                this.fIsDeleted = fIsDeleted;
            }
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 8848cjf 2009年6月3日 9:47
    2009年6月2日 1:17
    版主