Product P = new Product();
  this.dataGridView1.DataSource = P.ShowProductInfo()
楼主您直接这样绑定,系统会按字段名的字母先后顺序绑定到各列.
您只要在界面上,定义每一列及绑定即可.

解决方案 »

  1.   

    --------本来 我开始是 指定列的。
     数据全部显示出来了。。当然列的顺序也对。刚好和 我数据库中列的 顺序相对应。。但是取值的时候,比如说在 datagridview 中
    this.datagridview.currentrow.cell[0].value . 他可能得到的 不是 第一列的值。。而 他取值的 顺序 ,可能 刚好 和自动生成列的 顺序相同。。this.datagridview.currentrow.cell[0].value 界面上明明是 第一列。。可能取出来就是 第三列
      

  2.   

    Nhibernate查询数据显示在DataGridView中的解决方法 
    原创: Ankoe 前言    Nhibernate 查询数据返回集合为 Ilist 类型,由于 Ilist 实现了 Collection ,所以当 Ilist 绑定到 DataGridView 时,显示的字段并未按真实的顺序排序,造成显示的不适当。可以采用两种解决方法: 方法一:将 Ilist 转换成 DataSet 注: iList: 数据源     className: 类完全限定名     DllFile:className 所属的程序集名 如 :SysGUI.QdcLib.dll         public DataSet ConvertIListToDataSet(IListiList, stringclassName, stringDllFile)         {             Type TheType = null;             if (DllFile != "")             {                 Assembly Assembly1 = Assembly.LoadFrom(DllFile);                  TheType = Assembly1.GetType(className);             }             else             {                 TheType = Type.GetType(className);             }             string sTableName = NHibernate.Cfg.ImprovedNamingStrategy.Instance.ClassToTableName(className);             BindingFlags bindFlag = BindingFlags.Public | BindingFlags.Instance;             PropertyInfo[] pInfos = TheType.GetProperties(bindFlag);             DataSet dSet = newDataSet();             DataTable dTable = dSet.Tables.Add(sTableName);             string strColmunName ="";             foreach (PropertyInfoinfoinpInfos)             {                 strColmunName = NHibernate.Cfg.ImprovedNamingStrategy.Instance.PropertyToColumnName(info.Name);                 dTable.Columns.Add(strColmunName, info.PropertyType.GetType());             }               foreach(objectobjiniList){                 DataRow dRow = dTable.NewRow();                 foreach(PropertyInfoinfoinpInfos){                     strColmunName = NHibernate.Cfg.ImprovedNamingStrategy.Instance.PropertyToColumnName(info.Name);                     dRow[strColmunName] = info.GetValue(obj, null);                 }                 dTable.Rows.Add(dRow);             }             return dSet;         } 上面采用反射根据属性名及类型信息生成一个DataTable,然后用Ilist数据填充DataTable,这种方法有个不好的地方就是如果数据量大的时候,严重造成了程序的性能损失。   方法二:建一个表来保存所有表的字段信息,DataGridView加载Ilist数据以后再改变DataGirdView的显示方式。和方法一相比少了数据得制,性能也得以提
      

  3.   

    太 麻烦了 为软 既然 提供了 Ilist 数据源 ,怎么会有 这么 多问题。。