分享

DataGrid动态绑定,既不知道Class的结构

 牛人的尾巴 2017-01-20
2011-09-26 11:21 300人阅读 评论(0) 收藏 举报
分类:
 

   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", "19", "女","华中科技大学" });
list.Add(new string[] { "3","zhuxi", "19", "女" ,"黄埔军校"});
心神不宁的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", "姓名", "年龄", "性别","毕业院校" });
list.Add(new string[] {"1","zhangli","19","男","武汉大学"});
list.Add(new string[] { "2","liuli", "19", "女","华中科技大学" });
list.Add(new string[] { "3","zhuxi", "19", "女" ,"黄埔军校"});
bingclass = new BingClass();
relist = bingclass.columnDisplay(dataGrid1, list);       

The Last    datagird

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多