这样的“List<>集合”应该怎样绑定
方法:
private static List<IDictionary<string, string>> DataTableToList(DataTable dt)
{
var list = new List<IDictionary<string, string>>();
foreach (DataRow row in dt.Rows)
{
list.Add(new Dictionary<string, string>
{
{"code_key",row.Field<string>("code_key").Trim()},
{"code_name",(row.Field<string>("code_name")??string.Empty).Trim().Replace("'","''")},
{"ref_val_1",(row.Field<string>("ref_val_1")??string.Empty).Trim().Replace("'","''")},
{"ref_val_2",(row.Field<string>("ref_val_2")??string.Empty).Trim().Replace("'","''")},
{"ref_val_3",(row.Field<string>("ref_val_3")??string.Empty).Trim().Replace("'","''")}
});
}
return list;
}
描述:
可以看出,方法是将“DataTable”结果集,转化为了“List<>集合”和“Dictionary<>集合”的组合,List<>就好比表,“Dictionary<>”就好比每一行的记录。
问题:这样的“结果集”该怎样作为数据源绑定呢?
比如“List<T>”可以这样的结果集,可以:
cb_chartType.ItemsSource = slcharttypes;
cb_chartType.SelectedValuePath = "Value";
cb_chartType.DisplayMemberPath = "Text";
cb_chartType.SelectedIndex = 0;
而现在“实体集对象”为“Dictionary”,它也是一个集合。要绑定的项也为一个“集合”,咋处理?
比如:现在想绑定“code_name”这一列,应该不能叫“列”了,应该叫“List集合”下每一项“Dictionary集合”的“code_name键”的值,应该怎么办???
------解决方案-------------------- 为什么不直接绑定DataTable呢,而要做一个这样的转换去绑定?
在进行数据绑定的时候,系统会取集合中项类型的属性作为字段数据,所以如果用List<Dictionary<string,string>>进行绑定的话,生成自动列时只会有Dictionary<string,string>的属性列。
看LZ上述的写的貌似字典里面的键也是固定的,是否可以用一个类去概括这些信息?
------解决方案-------------------- 貌似强类型的集合可以做数据源吧。
------解决方案-------------------- 强类型的集合不能做数据源么?
------解决方案-------------------- 这个方法真是有够蛋疼的,直接用datatable不就好了
------解决方案-------------------- 呵呵,作为技术学习的确不错,实际中简单就是王道
------解决方案-------------------- DataTable设置主键,用起来和Dic一样简单的
------解决方案-------------------- 道生一,一生二,二生三,三生万物,修炼到一才是正道
------解决方案-------------------- Silverlight里面DataTable是精简版?
------解决方案-------------------- “绑定”根本不认识 Dictionary<K,T> 个体,仅从这个类型(而不读取数据)根本找不到列,(目前)它如何绑定?
至少目前是不支持的。其实我也希望微软的程序员突然开窍,支持绑定 List<IDictionary<string,object>> 类型的数据,那样就可以方便许多开发引擎系统的聪明人士。不过我认为最近两年可能没戏。
------解决方案-------------------- 我自己写了一个方法,可以首先遍历List<IDictionary<string,object>>类型的数据,收集所有的列,然后动态使用Emit产生并动态编译一个临时的对象,然后再将这个List中每一行的词典值反射为这个动态产生的类型的对象实例,得到这个类型的对象列表。
这样就可以将这类灵活的数据绑定到控件。
------解决方案-------------------- 探讨 要用在“Silverlight”下的呢。
------解决方案-------------------- 看到 sp大神的签名,win8要败了?
------解决方案-------------------- 以前silverlight开发的时候用过list<list<string>>类型的变量,可以绑定,source指定为变量后,需要的字段好像用this.[index]还是this[index]绑定,不过这个要自己记住变量中字段的存放index
------解决方案--------------------