[★★★]我用 datagridView 或 GridView 绑定了一个, 实现IList接口的类,自动生成的列,排序有问题

问题描述

解析PetShop4.0的时候。Categorycategory=newCategory();...DataSource=category.GetCategories();//IList<CategoryInfo>作为数据源...DataBind();所以我照着这个例子做了一个数据库中的一个表有3列。。PidPnamePdate实体类[Serializable]publicclassProductInfo{privateint_Pid;privatestring_Pname;privateDateTime_Pdate;publicProductInfo(){}publicProductInfo(intm_Pid,stringm_Pname,DateTimem_Pdate){this._Pid=m_Pid;this._Pname=m_Pname;this._Pdate=m_Pdate;}publicintPid{get{returnthis._Pid;}set{this._Pid=value;}}publicstringPname{get{returnthis._Pname;}set{this._Pname=value;}}publicDateTimePdate{get{returnthis._Pdate;}set{this._Pdate=value;}}}-------读取数据publicIList<ProductInfo>ShowProductInfo(){IList<ProductInfo>pi=newList<ProductInfo>();using(SqlDataReaderdr=SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction,CommandType.Text,sql,null)){while(dr.Read()){ProductInfop=newProductInfo(dr.GetInt32(0),dr.GetString(1),dr.GetDateTime(2));pi.Add(p);}}returnpi;}-------------最后调用ProductP=newProduct();this.dataGridView1.DataSource=P.ShowProductInfo()-======================问题:我让他自动生成列,,数据全部显示出来,,但是列的顺序变了。。本来应该是PidPnamePdate这样的顺序,结果变成了PdatePidPname这样的顺序。。。如果绑定列的话,数据显示出来正确,列的顺序也正确,但是你取直就错了。比如你说。。。。cell[0]他会显示第三列的直,而不是第一列的直。。。---------------

解决方案

解决方案二:
ProductP=newProduct();this.dataGridView1.DataSource=P.ShowProductInfo()楼主您直接这样绑定,系统会按字段名的字母先后顺序绑定到各列.您只要在界面上,定义每一列及绑定即可.
解决方案三:
--------本来我开始是指定列的。数据全部显示出来了。。当然列的顺序也对。刚好和我数据库中列的顺序相对应。。但是取值的时候,比如说在datagridview中this.datagridview.currentrow.cell[0].value.他可能得到的不是第一列的值。。而他取值的顺序,可能刚好和自动生成列的顺序相同。。this.datagridview.currentrow.cell[0].value界面上明明是第一列。。可能取出来就是第三列。。。
解决方案四:
Nhibernate查询数据显示在DataGridView中的解决方法原创:Ankoe前言Nhibernate查询数据返回集合为Ilist类型,由于Ilist实现了Collection,所以当Ilist绑定到DataGridView时,显示的字段并未按真实的顺序排序,造成显示的不适当。可以采用两种解决方法:方法一:将Ilist转换成DataSet注:iList:数据源className:类完全限定名DllFile:className所属的程序集名如:SysGUI.QdcLib.dllpublicDataSetConvertIListToDataSet(IListiList,stringclassName,stringDllFile){TypeTheType=null;if(DllFile!=""){AssemblyAssembly1=Assembly.LoadFrom(DllFile);TheType=Assembly1.GetType(className);}else{TheType=Type.GetType(className);}stringsTableName=NHibernate.Cfg.ImprovedNamingStrategy.Instance.ClassToTableName(className);BindingFlagsbindFlag=BindingFlags.Public|BindingFlags.Instance;PropertyInfo[]pInfos=TheType.GetProperties(bindFlag);DataSetdSet=newDataSet();DataTabledTable=dSet.Tables.Add(sTableName);stringstrColmunName="";foreach(PropertyInfoinfoinpInfos){strColmunName=NHibernate.Cfg.ImprovedNamingStrategy.Instance.PropertyToColumnName(info.Name);dTable.Columns.Add(strColmunName,info.PropertyType.GetType());}foreach(objectobjiniList){DataRowdRow=dTable.NewRow();foreach(PropertyInfoinfoinpInfos){strColmunName=NHibernate.Cfg.ImprovedNamingStrategy.Instance.PropertyToColumnName(info.Name);dRow[strColmunName]=info.GetValue(obj,null);}dTable.Rows.Add(dRow);}returndSet;}上面采用反射根据属性名及类型信息生成一个DataTable,然后用Ilist数据填充DataTable,这种方法有个不好的地方就是如果数据量大的时候,严重造成了程序的性能损失。方法二:建一个表来保存所有表的字段信息,DataGridView加载Ilist数据以后再改变DataGirdView的显示方式。和方法一相比少了数据得制,性能也得以提
解决方案五:
太麻烦了为软既然提供了Ilist数据源,怎么会有这么多问题。。
解决方案六:
我也遇到这种问题.顺序都乱了.

时间: 2024-12-29 11:05:27

[★★★]我用 datagridView 或 GridView 绑定了一个, 实现IList接口的类,自动生成的列,排序有问题的相关文章

求教大大们一个程序运行中c#如何自动生成类的办法

问题描述 求教程序运行中,客户端通过向服务器发送不同的参数,然后由服务器端生成一个类,发给客户端执行呢?请大大们帮忙给点思路,最好有个代码实例,万分感谢! 解决方案 解决方案二:1:服务端生成类就是一个字符串,然后传给客户端.2:客户端利用CSharpCodeProvider,CompilerParameters动态执行字符串.解决方案三:最好两端都用类的定义,要么就别用这种方式,通过一种都能识别的数据结构作为传递对象,比如xml,json,序列化等解决方案四:什么叫做"生成一个类,发给客户端执

一个JAVA小项目--Web应用自动生成Word_java

前段时间接到一个Web应用自动生成Word的需求,现整理了下一些关键步骤拿来分享一下. 思路:(注:这里只针对WORD2003版本,其它版本大同小异.) 因为WORD文件内部的数据及格式等是通过XML文件的形式存储的,所以WORD文件可以很方便的实现由DOC到XML格式的相互转换,而操作XML文件就方便的多了,这样就实现了与平台无关的各种操作,通过节点的查询.替换.删除.新增等生成Word文件.所以,根据模板生成WORD文件实质就是由用户数据替换XML文件中特殊标签,然后另存为一个DOC文件的过

gridview绑定数据源不显示列,就一直是column1、2、3三列

问题描述 gridview绑定数据源不显示列,就一直是column1.2.3三列 解决方案 解决方案二:这个要看你代码好吧解决方案三:你没有绑定成功,自动生成的列也没有去掉解决方案四:grid.datasource=dt;//你的数据源grid.databind();//绑定 解决方案五:引用3楼Hsuifengershi的回复: grid.datasource=dt;//你的数据源grid.databind();//绑定 +1猜测楼主像使用winform程序一样,只指定了数据源,没执行绑定操作

关于GridView控件自动生成列的问题

问题描述 我的GridView控件手动添加了两上列,然后又需要选择自动生成列,这样绑定出来的效果是手动增加的列在自动自成列的前面,我想让自动生成的列在手动绑定列的前面,请问大家如何设置啊.谢谢. 解决方案 解决方案二:好像弄不了,都手动的绑定算了.解决方案三:....在2005里面GridView上有可视化操作啊!!!!完全可以可以实现你向他在哪就在哪啊~~~~~就算在前台也可以该啊<Columns><asp:BoundFieldDataField="身份证号码"He

myeclipse 2014创建动态网站的时候不能自动生成 xml文件,是需要自己创建一个吗?

问题描述 myeclipse 2014创建动态网站的时候不能自动生成 xml文件,是需要自己创建一个吗? 2013就会自动生成..xml文件是必要的吗...书上说用 myeclipse可以不用管xml,可是那用什么路径访问啊 解决方案 一般创建web工程后会自动创建web.xml的;如果没有的话,在创建web项目时有个窗口有个生成web.xml的项你要勾选上才会生成这个的; 如果还是没有的话,就手动在目录下创建一个就行了: 如果回答对您有帮助,请采纳 解决方案二: 解决方案三: web.xml对

gridview绑定一个表后,不想显示数据,怎么实现

问题描述 如题 解决方案 解决方案二:<asp:BoundColumnDataField="NewsAuthor"HeaderText="发布人"Visible="false"></asp:BoundColumn>解决方案三:1清空表,2设置datasource为null解决方案四:隐藏所有列就是了gdvList.Columns[0].Visible=false;gdvList.Columns[1].Visible=fal

一个简单的gridview绑定,你绝对解决不了

问题描述 第一次加载页面的时候显示全部数据,gridview绑定正确,分页功能正常.设断点后,第一次加载数据显示正常,如下图所示:当我输入"烤肉"查询条件时,设断点,执行到最后一步绑定代码,显示数据也正常,如下图所示:再执行下一步,浏览器跳出来显示的数据竟然还是全部的数据,清理浏览器的代码我也在源代码里面加上了,请问还可能是什么原因? 解决方案 解决方案二:一定是你把代码直接放到Page_Loaded里边了解决方案三:查询过后gridview没有重新绑定解决方案四:引用1楼tzh520

ASP.NET―001:GridView绑定List

这篇文章主要介绍了ASP.NET―GridView绑定List.页面返回值具体实现,需要的朋友可以参考下 用惯了WPF的绑定,ASP.NET的绑定貌似不是很好用.下面看看ASP.NET绑定的用法.一般来说可以直接绑定DataTable的,不过我觉得绑定List比较符合面向对象编程. 绑定的方法是两句代码:    代码如下: GridView名.DataSource = List<自定义类>;     GridView名.DataBind();       直接看例子吧,以下是一个绑定一个Per

Dev GridView 绑定List&amp;lt;T&amp;gt;、BindingList &amp;lt;T&amp;gt;、BindingSource

今天听到同事处理数据结构的时候特意处理为了 BindingList<T>,据说可以直接绑定到Dev GridView上,于是测试了一下: 1.在Dev GridView中新增三列,三列的FieldName分别对应与FormItem类对应:ItemKey.Name.Enable 具体类代码如下: public class FormItem { /// <summary> /// 标识 /// </summary> public string ItemKey { get;