datagrID是silverlight中相对独立且相对复杂的控件。
正常使用过程中 我们需要明确一个具体的类结构如下
public class BasicInfo
{
public string ID { set; get; }
public string name { set; get; }
public string tel { set; get; }
}
如果DataGrID是autoGenerateColumns="True" 则只需要绑定 DataGrID.ItemsSource = List<BasicInfo>
则出现以ID,name,tel为列头的列表。这个很明显不符合中文开发者使用,至少ID,name肯定得是明确表达意义的中文名。
如果autoGenerateColumns="False" 则可以自行定制列头内容,但不管怎样,我们都需要一个固定的类如上BasicInfo类。
我接触DataGrID的时候我不能有明确的类,因为我的值取自数据库中动态的表。不确定表名,不确定字段名,和字段个数。
用一段代码来描述 我希望我的DataGird绑定的数据能像下面的代码那样简单
List.Add(new string[] {"ID","姓名","年龄","性别","毕业院校" });
List.Add(new string[] {"1","zhangli","19","男","武汉大学"});
List.Add(new string[] { "2","liuli","女","华中科技大学" });
List.Add(new string[] { "3","zhuxi","黄埔军校"});
心神不宁的Google一番后
http://www.cnblogs.com/Ivan-Yan/archive/2009/05/27/1490667.html此人博客‘通过 IDictionary对Silverlight DataGrid 进行动态数据绑定’貌似可以解决我一部分需求 但他的方法还是xaml部分太固定。列个数 列头,绑定字段都不太自由。
总结万能绑定类
public class BingClass : IEditableObject //实现这个接口的目的是需要在界面被编辑时处理一些事件
{
public String key0 { get; set; }
public string key1 {get;set;}
public String key2{get;set;}
………
public String key19{get;set;}
以下可能足够长, 我的需求不超过20个字段,可以放心 这些字段不必要全部初始化 留null不会占用内存空间。
public String[] keyarr = new string[20]; //这个集合保存上面所有key0~key19的引用
public string[] keystrarr = //属性的字符表示
{
"key0","key1","key2","key3","key4","key5","key6","key7","key8","key9",
"key10","key11","key12","key13","key14","key15","key16","key17","key18","key19"
};
很重要的refresh方法
public voID refresh()
{
key0 = keyarr[0]; key1 = keyarr[1]; key2 = keyarr[2]; key3 = keyarr[3]; key4 = keyarr[4];
key5 = keyarr[5]; key6 = keyarr[6]; key7 = keyarr[7]; key8 = keyarr[8]; key9 = keyarr[9];
key10 = keyarr[10]; key11 = keyarr[11]; key12 = keyarr[12]; key13 = keyarr[13]; key14 = keyarr[14];
key15 = keyarr[15]; key16 = keyarr[16]; key17 = keyarr[17]; key18 = keyarr[18]; key19 = keyarr[19];
}
绑定数据
public List<BingClass> columndisplay(DataGrID grID,List<string[]> List)
{
List<BingClass> reList = new List<BingClass>(); //需要经过一系列讲List<string[]> 转换为List<BingClass>
for (int num = 0; num < List[0].Length; num++)
{
//DataGrIDTextColumn 在C#中定义,使xaml自由一点
DataGrIDTextColumn column = new DataGrIDTextColumn();
Binding binding = new Binding(keystrarr[num]); //这部分很重要 定义该列绑定指定的属性列
grID.FroZenColumnCount = 1;
binding.Mode = BindingMode.TwoWay;
column.Binding = binding;
column.header = List[0][num]; //注意我的List第一行是中文字段名用作DataGird列名
grID.Columns.Add(column);
}
for (int i = 1; i < List.Count; i++) //List<string[]> 转换为List<BingClass>
{
string[] strs = List[i];
BingClass bing = new BingClass();
for (int j = 0; j < strs.Length; j++)
{
bing.keyarr[j] = strs[j];
}
bing.refresh(); //很重要,使集合中的值赋给各个key属性
reList.Add(bing);
}
grID.ItemsSource = reList; //费这么大功夫就为了这一行……
return reList;
}使用
List.Add(new string[] {"ID","黄埔军校"});
bingclass = new BingClass();
reList = bingclass.columndisplay(dataGrID1,List);The Last
以上是内存溢出为你收集整理的DataGrid动态绑定,既不知道Class的结构全部内容,希望文章能够帮你解决DataGrid动态绑定,既不知道Class的结构所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)