找回密码
 立即注册

QQ登录

只需一步,快速开始

talentrabbit

注册会员

2

主题

10

帖子

70

积分

注册会员

积分
70
QQ
最新发帖
talentrabbit
注册会员   /  发表于:2017-2-10 10:15  /   查看:6594  /  回复:10
您好,
    我最近安装了ComponentOne for WPF的评估版本并重构了公司项目。这里仍然有几个问题想请教:
    1. 每个CellEditView模板似乎无法自由切换?

        由于公司的需求是当MouseEnter时切换Edit模板,MouseLeave切换View模板。我尝试在事件的handler中对CellPresenter.IsEditing赋值然后再调用UpdateEditingCell并没有效果

    2. 该控件似乎并没有显式的虚拟化开关,默认打开?

    3. C1DataGrid的行高和列宽似乎无法动态调整(手动or代码调整好像都不行)?CanUserResizeColumnsCanUserResizeRows已设True

以上几种情形能否提供一个sample

非常感谢,期待您的回复

10 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2017-2-10 14:16:40
沙发
谢谢您的反馈。
1.《-Edit和View模板自由切换
没有理解是什么意思?(主要是不知道View模板和Edit模板有什么区别)。
2.你说的是虚拟化,指的是什么,UI虚拟化还是虚拟滚动?
3.默认设置RowHeight 为 Auto,可以自动调整高度。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
talentrabbit
注册会员   /  发表于:2017-2-10 17:49:30
板凳

hello,如下

本帖最后由 talentrabbit 于 2017-2-10 17:53 编辑

您好,
      十分感谢您的迅速回复
1.《-Edit和View模板自由切换
没有理解是什么意思
【TalentRabbit】由于我们公司开发的是行业专用软件,因此DataGrid中,我全部使用了自定义列,即新写MyTemplateColumn(派生自DataGridTemplateColumn),然后按照说明文档,重载CreateCellContent和GetCellEditingContent方法,从而创建单元格在编辑和非编辑模式下的Template,代码如下:
public override FrameworkElement CreateCellContent( DataGridRow dataItem )
        {
            // The DataGridTemplateColumn uses ContentPresenter with your DataTemplate.
            var cc = (ContentControl) base.CreateCellContent( dataItem );
            cc.ContentTemplateSelector = (DataTemplateSelector) DataGrid.FindResource( "cellViewSelector" );
            return cc;
        }

public override FrameworkElement GetCellEditingContent( DataGridRow row )
        {
            // The DataGridTemplateColumn uses ContentPresenter with your DataTemplate.
            ContentControl cc = new ContentControl();
            cc.ContentTemplateSelector = (DataTemplateSelector) DataGrid.FindResource( "defaultCellEditSelector" );
            SetBinding( row, cc );
            return cc;
        }
需求是在鼠标进入cell时使用defaultCellEditSelector,鼠标离开cell时使用cellViewSelector。
2.你说的是虚拟化,指的是什么,UI虚拟化还是虚拟滚动?
【TalentRabbit】UI虚拟化。也就是当数据量过大时,DataGrid会延迟加载可视范围之外的Row。当滚动ScrollBar时再加载, 以提高效率。这个功能window自己的DataGrid是有开关的,叫做EnableColumnVirtualization和EnableRowVirtualization。在C1DataGrid里我没有看到,但根据测试结果,好像已经打开了。

3.谢谢,设置Auto后解决
回复 使用道具 举报
talentrabbit
注册会员   /  发表于:2017-2-10 17:57:15
地板
不知您是否方便接听电话,我给你pm个电话和qq,等您有空,电话或者qq联系都可以,谢谢!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-2-10 18:11:51
5#
talentrabbit 发表于 2017-2-10 17:49
您好,
      十分感谢您的迅速回复
1.《-Edit和View模板自由切换

1.这个问题我觉得您可以参考随机安装示例,路径如下:
\Documents\ComponentOne Samples\WPF\C1.WPF.DataGrid\CS\DataGridSamples
里面的CustomColumns示例可以参考。
2.您说的是WPF和Silverlight下支持的UI virtualization ,有标准模式和recycling模式两种,C1DataGrid采用的是recycling模式来处理大数据,就如同你所说的。

对于售前用户,我们提供了多种服务:
电话:400-657-6008
选型顾问:http://www.gcpowertools.com.cn/products/applyonline.aspx
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
talentrabbit
注册会员   /  发表于:2017-2-10 19:25:18
6#
1.随机安装示例我看过了,那里的CustomColumn和我的需求有一些不同,如下:
    I. 安装示例的CustomerColumn是固定格式的DataTemplate,而我这里的每个column的模板都是可变的,由DataTemplateSelector实现(.NET自带的DataGridTemplateColumn支持CellTemplateSelector和CellEditingTemplateSelector)。而我在C1DataGrid中的DataGridTemplateColumn并没有找到类似DataTemplateSelector功能的成员
    II. 公司的需求是鼠标移动到某个单元格内时,该单元格自动切换到编辑模式,而无需点击。我尝试在MouseEnter事件中设置了CellPresenter.IsSelected=true; CellPresenter.UpdateEditingCell(),但此时仍然需要再点击一次该单元格后才能编辑
     

2. 虚拟化了解了,谢谢!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-2-13 09:56:22
7#
talentrabbit 发表于 2017-2-10 19:25
1.随机安装示例我看过了,那里的CustomColumn和我的需求有一些不同,如下:
    I. 安装示例的CustomerCol ...

谢谢反馈。
1.很抱歉C1DataGrid没有支持DataTemplateSelector的功能。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
talentrabbit
注册会员   /  发表于:2017-2-13 15:25:34
8#
Alice 发表于 2017-2-13 09:56
谢谢反馈。
1.很抱歉C1DataGrid没有支持DataTemplateSelector的功能。

这没关系,我已经移植了公司现有的DataTemplateSelector到C1DataGrid,参见楼上代码。
现在的问题是如何用代码触发编辑状态。我试了一下,好像用BeginEdit(DataGridCell),确实能让该单元格进入编辑模式(触发了DataGridTemplateColumn.GetCellEditingContent())。但同时也选中了该cell所在行?因为我们公司的需求允许selectedRow和editRow不相同。盼解答,谢谢!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-2-13 17:52:57
9#
talentrabbit 发表于 2017-2-13 15:25
这没关系,我已经移植了公司现有的DataTemplateSelector到C1DataGrid,参见楼上代码。
现在的问题是如何 ...

谢谢您的反馈。
进入编辑状态需要调用BeginEdit方法。
选择可以用SelectionMode控制,设置为SingleCell就只能选择一个单元格,而不是行。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
talentrabbit
注册会员   /  发表于:2017-2-15 14:48:21
10#
关于虚拟化还想个问题, 您提到
2.您说的是WPF和Silverlight下支持的UI virtualization ,有标准模式和recycling模式两种,C1DataGrid采用的是recycling模式来处理大数据,就如同你所说的

那如果我想改变虚拟化的模式,从recycling改成standard,应该怎么修改?我找了找,也没有发现类似virtualizationMode这样的属性?
因为根据公司的需求,每一行的行高也是可变的,打开虚拟化之后,大幅拖动滚动条,cell的高度会产生不可预期的变化。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部