asp.net IList查询数据后格式化数据再绑定控件 一、先讲最基本的 DataSet绑定操作,GridView为例。 当操作查询得一个 DataSet ds 后,可以进行一些数据的格式化,如: 复制代码 代码如下: foreach (DataRow dr in ds.Tables[0].Rows) { if (dr["Depth"].ToString() != "1") { dr["ColumnName"] = StringHelper.StringOfChar(Convert.ToInt32(dr["Depth"]) - 1, " ") + "├ " + dr["ColumnName"]; } } GridView1.DataSource = ds; GridView1.DataBind(); 复制代码 代码如下: public static class StringHelper { /// /// 生成指定长度的字符串,即生成strLong个str字符串 /// /// 生成的长度 /// 以str生成字符串 /// public static string StringOfChar(int strLong, string str) { string ReturnStr = ""; for (int i = 0; i < strLong; i++) { ReturnStr += str; } return ReturnStr; } /// /// 生成日期随机码 /// /// public static string GetRamCode() { #region return DateTime.Now.ToString("yyyyMMddHHmmssffff"); #endregion } } 像这样很快就能进行一些数据的格式化并绑定到控件了。 二、现在讲下我主要想讲的内容,如果我们用Ilist 查询得数据后,想格式化一些字符串,以达到自己想要的显示效果,我们该怎么办呢?先看下效果图再给您答案。 比如我们在做无限分类的时候 往往想让数据如上图所显示,我们又该怎么做呢。 刚上让面的DataSet写了些格式化代码,现在相信大家都想知道Ilist又该怎么操作对吧? 泛型的功能 强大我在这里就不说了,现在说重点,主要有两种方法实现, 一,把Ilist得的数据转为 DataSet的,这样你又可以重新回到熟悉的操作了 IList 转 DataSet 类(这个是我引用别人的 ^ ^) 复制代码 代码如下: public static DataSet ConvertToDataSet(IList list) { if (list == null || list.Count <= 0) { return null; } DataSet ds = new DataSet(); DataTable dt = new DataTable(typeof(T).Name); DataColumn column; DataRow row; System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); foreach (T t in list) { if (t == null) { continue; } row = dt.NewRow(); for (int i = 0, j = myPropertyInfo.Length; i < j; i++) { System.Reflection.PropertyInfo pi = myPropertyInfo[i]; string name = pi.Name; if (dt.Columns[name] == null) { column = new DataColumn(name, pi.PropertyType); dt.Columns.Add(column); } row[name] = pi.GetValue(t, null); } dt.Rows.Add(row); } ds.Tables.Add(dt); return ds; } 然后 复制代码 代码如下: DataSet ds = ConvertToDataSet(b.ListColumn()); 看,又回来熟悉的操作了吧,但是,这样做我们启不是走弯路了,为啥不直接用 DataSet就得了?没错,我们走弯路了............我想用 IList啊,不想转来转去的,难道就没有好的办法? 哈哈,答案肯定是有的,也是最简单的,往往是初学的朋友不懂解IList才现在种种疑惑, 现在讲IList 对象类的操作 还是上面的例子 比如当查询得一个 复制代码 代码如下: BLL b = new BLL(); b.ListColumn(); 我们要绑定上图所示的只需这样做 复制代码 代码如下: IList list = new List(); foreach (Qzzm.Model.ColumnInfo m in b.ListColumn()) { if (m.Depth.ToString() != "1") { m.ColumnName = StringHelper.StringOfChar(Convert.ToInt32(m.Depth) - 1, " ") + "├ " + m.ColumnName + "
"; } list.Add(m); } DataList1.DataSource = list; DataList1.DataBind(); StringHelper还是上面的那个。经过这样的简单处理,我们就可以格式化 栏目名称了再分下DataList的绑定效果图,完毕!算是菜鸟与菜鸟之间的交流吧。