Telerik XML 数据源绑定的问题
Telerik GridView 默认的 XElement 数据源的直接绑定,会导致内置的sort, filter ,group等功能无法使用.
原因在于Telerik GridView的那些功能是根据数据类型实现的,而XElement绑定在数据源本身是无法区分类型的。
一个解决方案是绑定的属性转换为具体的 一个个属性,也就是Telerik 官网所谓的various datasource当中XML的绑定方式
另外一个比较适合实际项目的解决方案是 讲数据源转变为Dynamic数据源,然后将ItemSource绑定到这个Dynamic数据源当中。
别的方式或许也有,我没试验出来.
代码如下:
public void LoadXmlData(XElement data)
{
if (data != null)
{
this.Items = new ObservableCollection<dynamic>(from element in data.Elements() select new DataRow(ToDictionary(element), element));
}
}
private IDictionary<string, object> ToDictionary(XElement element)
{
var dict = new Dictionary<string, object>();
foreach (var e in element.Elements())
{
dict.Add(e.Name.LocalName, e.Value);
} return dict;
}
添加一个转换Dynamic的类:
public class DataRow : DynamicObject, INotifyPropertyChanged
{
readonly IDictionary<string, object> data; //public XElement ItemXml { get; set; } public DataRow(IDictionary<string, object> source,XElement item)
{
data = source;
//Item = item;
} public override IEnumerable<string> GetDynamicMemberNames()
{
return data.Keys;
} public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = this[binder.Name]; return true;
} public override bool TrySetMember(SetMemberBinder binder, object value)
{
this[binder.Name] = value; return true;
} public object this[string columnName]
{
get
{
if (data.ContainsKey(columnName))
{
return data[columnName];
} return null;
}
set
{
if (!data.ContainsKey(columnName))
{
data.Add(columnName, value); OnPropertyChanged(columnName);
}
else
{
if (data[columnName] != value)
{
data[columnName] = value; OnPropertyChanged(columnName);
}
}
}
} private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
} #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion
}
Telerik XML 数据源绑定的问题的更多相关文章
- WPF绑定各种数据源之xml数据源
一.WPF绑定各种数据源索引 WPF 绑定各种数据源之Datatable WPF绑定各种数据源之object数据源 WPF绑定各种数据源之xml数据源 WPF绑定各种数据源之元素控件属性 Bindin ...
- XML数据源快速开发框架——XmlFramwork
浪漫的周末从cnblogs开始.话说,今天和往常的周末一样,韩君躲在被窝里用手机翻阅着园子里的珠玑.一篇<应用XML作为数据库的快速开发框架>的文章在韩君脑子里激起了一波球形闪电.想想上周 ...
- Spring Boot + Druid 多数据源绑定
date: 2019-12-19 14:40:00 updated: 2019-12-19 15:10:00 Spring Boot + Druid 多数据源绑定 版本环境:Spring Boot 2 ...
- C#窗体:关于DataGridView的数据源绑定字符串两个值得注意的问题
无意间遇到的问题,然后就GOOGLE了下,搜到些资料,总结整理如下(注:是转载的) 1. LINQ的查询结果无法直接作为DataGridView的数据源 DataGridView的DataSource ...
- coreseek(sphinx)安装1(xml数据源配置和测试)
1.下载coreseek-3.2.14-32版本.网址:http://www.coreseek.cn/products-install/install_on_windows/ (有详细的安装说明) ...
- C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结
我们在编程过程中,会涉及到表格数据的显示,存储等,就可能涉及到DataGridView,DataSource, DataTable等概念. 下面我就我自己模糊的一些知识点串讲以下: 1)首先我要讲的是 ...
- 使用DataContext和ItemsSource将数据源绑定到ListView上的区别
在最近的一个项目中,将DataView类型的数据源绑定到ListView控件时,发现当DataView的内容发生变化时,前台的ListView控件的内容并没有发生改变,在这里我先贴出前台要绑定数据源的 ...
- vb.net中将DataGridView与数据源绑定
在< .net中将DataGridView内的数据导出为Excel表格>中说了如何导出数据到Excel,今天这篇文章将讲述如何绑定数据源,在控件中显示我们需要的信息. 在敲机房收费系统的时 ...
- GridView绑定数据源 绑定DataReader /DataSet /DataTable
有一个GridView1 <asp:GridView ID="GridView1" runat="server"></asp:GridView ...
随机推荐
- 你很牛B,面试却没过,为什么?
点击标题下「飞测」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期 ...
- OpenGL: 渲染管线理论
http://blog.csdn.net/augusdi/article/details/19934463 学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解. 首先要知 ...
- linux下OpenCV的安装配置
1 安装cmake及一些依赖库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavc ...
- MySQL(二)
一.外键 外键是设置当前表中的某一列与别一数据表中的主键列关联.主要目的是控制与外键表中的数据,保持数据一致性,完整性,也就是说:当前表中这一列的数据必须是关联外键列中的某一数据,而且相关联的两个数据 ...
- 统计Crash工具—Crashlytics
官网:https://www.crashlytics.com/login 步骤: 注意:有时候再次运行,或者换了Crashlytics账号之后,获取不到Crash信息,其实你需要把plist文件里的K ...
- Could not find action or result
[WARN ] 2013-11-21 14:08:16 :Could not find action or resultThere is no Action mapped for namespace ...
- PAT1030. Travel Plan
//晴神模板,dij+dfs,貌似最近几年PAT的的图论大体都这么干的,现在还在套用摸板阶段....估计把这及格图论题题搞完,dij,dfs,并查集就掌握差不多了(模板还差不多)为何bfs能自己干出来 ...
- openStack reboot调试
- Windbg 线程状态笔记
1.ntdll!ZwWaitForSingleObject 线程被挂起,如果下面跟着是这样子: RetAddr : Args to Child : Call Site `7766e518 : `fff ...
- OpenGL函数解析之glLoadIdentity()
函数原型:void glLoadIdentity(void) 函数说明:调用glLoadIdentity()函数可以恢复初始坐标系,用一个4x4的单位矩阵来代替当前矩阵,实际上就是对当前矩阵进行初始化 ...