silverlight datagrid绑定匿名类

时间:2022-06-01 21:01:13

 

原文 http://www.cnblogs.com/luweis/archive/2011/10/21/2220587.html
刚开始遇到的一个问题是这样的,我有一个datagrid,根据不同的条件可以绑定上不同的数据源,或者根据同一个数据源,所要展示的数据字段是不一样的,所以我不能再xaml中把字段给写死了,我第一想到的方法如下:

ds_t.fake_proc_T_AP_PMs.Clear();
                     ds_t.Load(ds_t.Proc_T_AP_PMQuery("2011-07-01", "2011-10-10", cbb_method.SelectedIndex),
                        (lo)=>
                        {   
                            var query = from i in lo.Entities
                                        select new {
                                                        i.AP名称,
                                                        i.MAC地址,
                                                        i.AP关联用户数,
                                                        i.CPU利用率,
                                                        i.内存利用率,
                                                        i.上行速率,
                                                        i.下行速率,
                                                        i.关联用户总数,
                                                        i.在线用户总数,
                                                        i.每用户关联次数,
                                                        i.上行流量,
                                                        i.下行流量
                                                      };                                                      

                            this.PMGrid.ItemsSource = query; 

但是代码中还是会报错,我google了一下,发现datagrid无法绑定匿名类,那好吧,我还是构造一个类吧
ds_t.Load(ds_t.Proc_T_AP_PMQuery("2011-07-01", "2011-10-10", cbb_method.SelectedIndex),
   (lo)=>
   {
       var query = from i in lo.Entities
                   select new AP_BASE{
                                  AP名称= i.AP名称,
                                  MAC地址= i.MAC地址
                                   ...
                                 };                                  

 this.PMGrid.ItemsSource = query.ToList<AP_BASE>();

无奈,还是跟原来的错误是一样的,看到网上有这样的说法:This is Silverlight security restriction - you cannot reflect internal types and anonymous type are internal 

这个是在telerik中的论坛找到了http://www.telerik.com/community/forums/silverlight/gridview/gridview-anonymous-types-wont-bind.aspx 因为我本身用到的是RadGridview, 
看来这个方法行不通,有时候http://*.com这里找找还是蛮有用的,
在AssemblyInfo.cs中添加
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Windows")]
即可, 


不过得用SilverlightToolkit中的DataGrid才行,Telerik的Gridview还是报错。

参考文章:

http://www.devcurry.com/2011/04/silverlight-4-databinding-with.html
 
http://blog.lab49.com/archives/2306

http://forums.silverlight.net/p/55332/266134.aspx

http://*.com/questions/6193387/populating-datagrid-in-wpf-with-anonymous-type-collection
 
http://blogs.msdn.com/b/mikehillberg/archive/2008/05/05/binding-to-anonymous-types-in-an-xbap-or-silverlight.aspx

http://forums.silverlight.net/t/160324.aspx/1

key:gridview anonymous type