dafeng520 发表于 2013-9-23 14:15:00

【WinForms】C1Flexgrid中套用模板后双击列与列中间崩溃

在C1FlexGrid中套用DataTemplate后,发现两个问题。
1、模板中的Grid列无法调整列宽。
2、鼠标放在列与列中间时,鼠标图型改变,此时双击即会报错。
后发现,正常grid双击后,列宽会自动缩小,故我猜想此两个问题有一定关联。
demo代码如下(具体demo见附件):
<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml">

    <Window.Resources>
      <DataTemplate x:Key="EditTmpl">
            <Grid>
                <c1:C1DropDown>
                  <Border>
                        <StackPanel>
                            <c1:C1FlexGrid>
                              <c1:C1FlexGrid.Columns>
                                    <c1:Column Width="65" Header="Col1" HeaderHorizontalAlignment="Center"/>
                                    <c1:Column Width="80" Header="Col2" HeaderHorizontalAlignment="Center"/>
                                    <c1:Column Width="60" Header="Col3" HeaderHorizontalAlignment="Center"/>
                                    <c1:Column Width="35" Header="Col4" HeaderHorizontalAlignment="Center"/>
                              </c1:C1FlexGrid.Columns>
                            </c1:C1FlexGrid>
                        </StackPanel>
                  </Border>
                </c1:C1DropDown>
            </Grid>
      </DataTemplate>
    </Window.Resources>

    <Grid>
      <c1:C1FlexGrid x:Name="fg"AutoGenerateColumns="False"
                AllowSorting="False"
                HeadersVisibility="Column"
                Background="White"
                SelectionMode="ListBox">
            <c1:C1FlexGrid.Columns>
                <c1:Column Header="A" Binding="{Binding A}"CellEditingTemplate="{StaticResource EditTmpl}"HeaderHorizontalAlignment="Center" Width="200"/>
                <c1:Column Header="B" Binding="{Binding B}"HeaderHorizontalAlignment="Center" Width="200"/>
                <c1:Column Header="C" Binding="{Binding C}"HeaderHorizontalAlignment="Center" Width="200"/>
                <c1:Column Header="D" Binding="{Binding D}"HeaderHorizontalAlignment="Center" Width="200"/>
            </c1:C1FlexGrid.Columns>
      </c1:C1FlexGrid>
    </Grid>
</Window>

iceman 发表于 2013-9-23 15:13:00

回复 1楼dafeng520的帖子

dafeng520 你好,

感谢你的问题反馈。

使用你提供的代码片段,我已经重现了问题。
问题一:主表(Name=fg)如果没有数据,调整列宽会报错(包括双击和拖拽)。
问题二:模板列中表,无数据,双击调整列宽会报错。

附件是我重现问题的 Demo:


接下来我会把问题反馈给产品组,在得到反馈后,我会通过帖子通知你。

谢谢

dafeng520 发表于 2013-10-14 14:03:00

回复 2楼iceman的帖子

C1最新版本,问题一已解决:hjyzw:,但问题二依然存在:(。
在模板中,表内有无数据,双击调整列都会报错,且列宽无法拖拽。

iceman 发表于 2013-10-14 15:20:00

回复 3楼dafeng520的帖子

dafeng520 你好,

是的,问题二依然存在。

如果在实际使用过程中遇到模板中无数据情况,是否可以考虑把 CellEditingTemplate 移除?这样即避免了引发异常,又节省了性能,达提高用户体验的效果。

谢谢

lik 发表于 2013-10-14 17:16:00

数据都没有谈不上节省性能,怎么移除。

iceman 发表于 2013-10-14 18:05:00

回复 5楼lik的帖子

移除方法,明天会附上代码。请稍候

dafeng520 发表于 2013-10-15 08:59:00

回复 6楼iceman的帖子

如果没有数据,可以采用你提出的方法解决。
但有数据时,该问题还必须解决,一不小心双击到列,软件就崩溃了。

iceman 发表于 2013-10-15 11:15:00

回复 7楼dafeng520的帖子

dafeng520 你好,
C1FlexGrid中 AllowResizing 设置为 Node 时则无法调整列宽。不知道能否暂时接受这个 workaround ?
代码:

<Window.Resources>
      <DataTemplate x:Key="EditTmpl">
            <Grid>
                <c1:C1DropDown>
                  <Border>
                        <StackPanel>
                            <c1:C1FlexGridAllowResizing="None">
                              <c1:C1FlexGrid.Columns>
                                    <c1:Column Width="65" Header="Col1" Binding="{Binding A}" HeaderHorizontalAlignment="Center"/>
                                    <c1:Column Width="80" Header="Col2" Binding="{Binding B}" HeaderHorizontalAlignment="Center"/>
                                    <c1:Column Width="60" Header="Col3" Binding="{Binding C}" HeaderHorizontalAlignment="Center"/>
                                    <c1:Column Width="35" Header="Col4" Binding="{Binding D}" HeaderHorizontalAlignment="Center"/>
                              </c1:C1FlexGrid.Columns>
                            </c1:C1FlexGrid>
                        </StackPanel>
                  </Border>
                </c1:C1DropDown>
            </Grid>
      </DataTemplate>
    </Window.Resources>

dafeng520 发表于 2013-10-15 12:45:00

回复 8楼iceman的帖子

暂时先用这个解决下,希望软件尽快完善吧。

iceman 发表于 2013-10-15 15:31:00

回复 9楼dafeng520的帖子

好的,有进一步消息,我会通过帖子通知。
页: [1] 2
查看完整版本: 【WinForms】C1Flexgrid中套用模板后双击列与列中间崩溃