找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2015-2-11 19:39  /   查看:7594  /  回复:8
C1FlexGrid 如何动态生成DataTemplate列

7 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-2-12 11:55:00
沙发
回复 1楼q406157290的帖子

XAML代码参考:
  1.         <c1:C1FlexGrid HorizontalAlignment="Left" Margin="93,128,0,0" VerticalAlignment="Top">
  2.             <c1:C1FlexGrid.Columns>
  3.                 <c1:Column>
  4.                     <c1:Column.CellTemplate>
  5.                         <DataTemplate>
  6.                             <TextBlock Text="{Binding FieldName}"></TextBlock>
  7.                         </DataTemplate>
  8.                     </c1:Column.CellTemplate>
  9.                 </c1:Column>
  10.             </c1:C1FlexGrid.Columns>
  11.         </c1:C1FlexGrid>
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-2-12 13:15:00
板凳
回复 2楼Alice的帖子

请问我是没说明白您还是不理解呢   动态生成 而不是在前台页面写的 在cs文件中动态生成的
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-2-12 15:23:00
地板
回复 3楼q406157290的帖子

根据你的描述,你在XAML写了一个模板,需要在cs文件里添加列并使用该模板,对吧?

按照之前的XAML代码,就可以这样子改。

如果XMAL文件里是这样定义数据模板的:
  1.     <Window.Resources>
  2.         <DataTemplate x:Key="template">
  3.             <TextBlock Text="{Binding FieldName}"/>
  4.         </DataTemplate>
  5.     </Window.Resources>
复制代码


你可以在后台天通过findResource方法找到你的resource然后赋值。添加列的方式就是Columns.Add方法。
  1.    DataTemplate template = this.FindResource("template") as DataTemplate;
  2.             if (template != null)
  3.             {
  4.                 C1.WPF.FlexGrid.Column c = new C1.WPF.FlexGrid.Column();
  5.                 c.CellTemplate = template;               
  6.                 flex1.Columns.Add(c);
  7.             }
复制代码

评分

参与人数 1满意度 +5 收起 理由
Antihero + 5

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-2-12 16:04:00
5#
回复 4楼Alice的帖子

懂你的意思
但是不想现在前台页面定义DataTemplate
而是所有的都在cs中写
您的回答还不是我想要的
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-2-12 16:49:00
6#
回复 5楼q406157290的帖子

首先DataTemplate不是C1FlexGrid创建出来的,也不是它独有的,它是WPF平台下基础概念.

Template用于定义控件结构(Visual Tree),和Style有点容易混淆,每个控件初始没有Style属性,而在WPF中所有的控件都有默认的Template。
列举Template结构


根据这张图,我们就能看出DataTemplateFrameWork Template下有ControlTemplate,DataTemplate和ItemsPanelTemplate。而你目前提到的就是DataTemplate。

数据模板与控件模板不同,主要是针对某种类型的数据而定制的模板,该模板会自动根据绑定的数据类型,在构造界面显示时,根据预先设定的数据模板来组织页面显示的内容。数据模板和控件模板的定义差不多。

我们先来定义一个数据模板,然后看看如何使用。
在2楼的代码就讲了如何使用数据模板。
在4楼的代码又讲了如何使用findresource方法查找资源。

接下来就是你又提出的问题,即如何使用代码动态创建模板。
实现的方式有很多,具体的建议你查找msdn,可以获得更多的资源。
我就讲其中的一种方法:
1.在内存中动态生成一个XAML,描述一个DataTemplate
代码参考:
  1.           private const string strXaml =
  2.     "<DataTemplate " +
  3.     "xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" " +
  4.     "xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> " +
  5.         "<TextBlock Text="{Binding FieldName}"></TextBlock> " +
  6.     "</DataTemplate>";
复制代码


2.将内存中的XAML实例化成为DataTemplate对象。
代码参考:
  1. DataTemplate template&#160;= (DataTemplate )XamlReader.Load(XmlReader.Create(new StringReader(strXaml)));
复制代码


3.赋值给你需要设置的Template属性。
代码参考:
  1. if (template != null)
  2. {
  3.     C1.WPF.FlexGrid.Column c = new C1.WPF.FlexGrid.Column();
  4.     c.CellTemplate = template;
  5.     flex1.Columns.Add(c);
  6. }
复制代码


推荐你看下《深入浅出WPF》,是很不错的书。对于学习WPF基础知识是特别有帮助的。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-2-12 19:41:00
7#
回复 6楼Alice的帖子

您的最后一个回复是我想要的
非常感谢   幸苦了  
讲解的很详细谢谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-2-13 11:11:00
8#
回复 7楼q406157290的帖子

谢谢反馈。
此问题结束,如果有新问题请开新帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部