C1DataGrid for WPF使用技巧五:绑定TimeSpan属性

如果你有一个TimeSpan属性从类中暴露出来,你需要绑定C1DataGrid到对象集合,自动生成不能编辑的TimeSpan列。使用DataGridDateTimeColumn并不适合这种场景,因为DataGridDateTimeColumn列的类型和TimeSpan有所区别。以上是一种场景,虽然简单,但也很容易。

发布于 2015/09/06 00:00

ComponentOne Enterprise

绑定TimeSpan属性

如果你有一个TimeSpan属性从类中暴露出来,你需要绑定C1DataGrid到对象集合,自动生成不能编辑的TimeSpan列。

使用DataGridDateTimeColumn并不适合这种场景,因为DataGridDateTimeColumn列的类型和TimeSpan有所区别。

以上是一种场景,虽然简单,但也很容易。

最简单的处理问题的方法就是给DataGridDateTimeColumn设置CellEditingTemplate为C1TimeEditor。C1TimeEditor控件就是展示TimeSpan数据的特殊控件。如下的xmal代码定义需求的模板:

<c1:DataGridTemplateColumn Header="Time">
 <c1:DataGridTemplateColumn.CellTemplate>
     <DataTemplate>
           <TextBlock Text="{Binding TimeTaken}"/>
     </DataTemplate>
 </c1:DataGridTemplateColumn.CellTemplate>
 <c1:DataGridTemplateColumn.CellEditingTemplate>
      <DataTemplate>
           <c1:C1TimeEditor Format="TimeSpan"  Value="{Binding TimeTaken,Mode=TwoWay}"/>
      </DataTemplate>
 </c1:DataGridTemplateColumn.CellEditingTemplate>
 </c1:DataGridTemplateColumn>

 

一种可以创建自定义列示从DataGridBoundColumn继承,这对于使用AutoGeneratingColumns事件在运行时添加列是非常有用的。

代码参考:

public class DataGridTimeSpanColumn : DataGridBoundColumn
 {
      public DataGridTimeSpanColumn()
      {
           Initialize();
      }

      public DataGridTimeSpanColumn(PropertyInfo property)
           : base(property)
      {
           Initialize();
      }

      protected void Initialize()
      {
           IsReadOnly = false;
      }

      public override object GetCellContentRecyclingKey(C1.Silverlight.DataGrid.DataGridRow row)
      {
           return "TimeEditor";
      }

      public override FrameworkElement CreateCellContent(C1.Silverlight.DataGrid.DataGridRow row)
      {
           var tb = new TextBlock();
           return tb;
      }

      public override void BindCellContent(FrameworkElement cellContent, C1.Silverlight.DataGrid.DataGridRow row)
      {
           var tb = (TextBlock)cellContent;
           var binding = CopyBinding(Binding);
           tb.DataContext = row.DataItem;
           tb.SetBinding(TextBlock.TextProperty, binding);
      }

      public override void UnbindCellContent(FrameworkElement cellContent, C1.Silverlight.DataGrid.DataGridRow row)
      {
           var timeeditor = (TextBlock)cellContent;
           timeeditor.DataContext = null;
      }

      public override FrameworkElement GetCellEditingContent(C1.Silverlight.DataGrid.DataGridRow row)
      {
           var timeeditor = new C1TimeEditor();
           timeeditor.Format = C1TimeEditorFormat.TimeSpan;
           var binding = CopyBinding(Binding);
           timeeditor.SetBinding(C1TimeEditor.ValueProperty, binding);
           return timeeditor;
      }
 }

请在如下链接下载本文的参考示例:

TimeSpanColumn.zip (12.18 kb)

 

C1DataGrid的在线英文产品文档地址:

http://helpcentral.componentone.com/nethelp/C1datagridWPF/

如果你对C1DataGrid感兴趣,请到我们的官网下载最新版本:/download/?pid=6

如果你有疑问,可以到GCDN论坛获得技术支持:http://gcdn.grapecity.com.cn/showforum-138.html

 

C1DataGrid for WPF使用技巧》系列文章

(一)在表头展示合计信息

(二)简单数据绑定

(三)C1DataGrid的条件话数据模板

ComponentOne Enterprise | 下载试用

ComponentOne 是一套专注于企业 .NET开发、支持 .NET Core 平台,并完美集成于 Visual Studio 的第三方控件集,包含 300 多种 .NET开发控件,提供表格数据管理、数据可视化、报表和文档、日程安排、输入和编辑、导航和布局、系统提升工具等七大功能,被誉为“.NET开发的‘瑞士军刀’”。

ComponentOne 为您提供专业的产品咨询服务,并由技术支持工程师为您1对1解答。>> 发帖提问

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态