talentrabbit 发表于 2017-2-10 10:15:40

C1DataGrid的几个问题

您好,    我最近安装了ComponentOne for WPF的评估版本并重构了公司项目。这里仍然有几个问题想请教:    1. 每个Cell的Edit和View模板似乎无法自由切换?
      由于公司的需求是当MouseEnter时切换Edit模板,MouseLeave切换View模板。我尝试在事件的handler中对CellPresenter.IsEditing赋值然后再调用UpdateEditingCell并没有效果
    2. 该控件似乎并没有显式的虚拟化开关,默认打开?
    3. C1DataGrid的行高和列宽似乎无法动态调整(手动or代码调整好像都不行)?CanUserResizeColumns和CanUserResizeRows已设True
以上几种情形能否提供一个sample?
非常感谢,期待您的回复

Alice 发表于 2017-2-10 14:16:40

谢谢您的反馈。
1.《-Edit和View模板自由切换
没有理解是什么意思?(主要是不知道View模板和Edit模板有什么区别)。
2.你说的是虚拟化,指的是什么,UI虚拟化还是虚拟滚动?
3.默认设置RowHeight 为 Auto,可以自动调整高度。

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

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

talentrabbit 发表于 2017-2-10 19:25:18

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

talentrabbit 发表于 2017-2-10 19:25
1.随机安装示例我看过了,那里的CustomColumn和我的需求有一些不同,如下:
    I. 安装示例的CustomerCol ...

谢谢反馈。
1.很抱歉C1DataGrid没有支持DataTemplateSelector的功能。

talentrabbit 发表于 2017-2-13 15:25:34

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

talentrabbit 发表于 2017-2-13 15:25
这没关系,我已经移植了公司现有的DataTemplateSelector到C1DataGrid,参见楼上代码。
现在的问题是如何 ...

谢谢您的反馈。
进入编辑状态需要调用BeginEdit方法。
选择可以用SelectionMode控制,设置为SingleCell就只能选择一个单元格,而不是行。

talentrabbit 发表于 2017-2-15 14:48:21

关于虚拟化还想个问题, 您提到
2.您说的是WPF和Silverlight下支持的UI virtualization ,有标准模式和recycling模式两种,C1DataGrid采用的是recycling模式来处理大数据,就如同你所说的

那如果我想改变虚拟化的模式,从recycling改成standard,应该怎么修改?我找了找,也没有发现类似virtualizationMode这样的属性?
因为根据公司的需求,每一行的行高也是可变的,打开虚拟化之后,大幅拖动滚动条,cell的高度会产生不可预期的变化。
页: [1] 2
查看完整版本: C1DataGrid的几个问题