wpf - 如何更改数据在 WPF GridControl 中的显示方式?

标签 wpf data-binding mvvm devexpress gridcontrol

我正在尝试使用 GridControl来自 DevExpress,但我不能做我通常在 ListView 中做的事情用GridView View .

我都做了。使用 DisplayMemberBindingCellTemplate .两者都没有显示。下面的代码(我删除了一些列):

<dxg:GridControl ItemsSource="{Binding}" Name="gridControl1">
    <dxg:GridControl.Columns>
        <dxg:GridColumn Header="Teste" DisplayMemberBinding="{Binding DataNascimento}"/>
        <dxg:GridColumn Header="Nome">
            <dxg:GridColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Nome}"/>
                </DataTemplate>
            </dxg:GridColumn.CellTemplate>
        </dxg:GridColumn>
    </dxg:GridControl.Columns>
    <dxg:GridControl.View>
        <dxg:TableView Name="tableView1" AutoWidth="True" />
    </dxg:GridControl.View>
</dxg:GridControl>

如图所示:

Grid with bound data but shown nothing

您可以看到我的专栏但没有数据。我绑定(bind)了 3 个项目,它显示了 3 行。数据本身已绑定(bind),但看起来模板未显示。

我尝试了与 this 相同的方法问题但不适合我。 我类有INotifyPropertyChanged我用了ObservableCollection<T>在绑定(bind)到 GridControl 之前. 唯一可行的方法是删除几乎所有代码并更改 AutoPopulateColumnsTrue .但在某些情况下,我想要自定义格式,但无法使用此选项实现。

编辑1: 我在设计模式下做了这个并且工作:

            <dxg:GridColumn FieldName="DataNascimento" Name="gridColumn3">
                <dxg:GridColumn.EditSettings>
                    <dxe:TextEditSettings DisplayFormat="{}{0:dd/MM/yyyy HH:mm:ss}" />
                </dxg:GridColumn.EditSettings>
            </dxg:GridColumn>

编辑2: 尝试了同样的方法 @blindmeis建议使用 grid 并且它像我预想的那样工作:

<DataGrid AutoGenerateColumns="False" Grid.Row="2" ItemsSource="{Binding}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding DataNascimento}" Header="Nascimento" />
        <DataGridTextColumn Binding="{Binding Nome}" Header="Header" />
        <DataGridTemplateColumn Header="Teste">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Nome}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

看起来这种方法适用于 ListViewDataGrid .遗憾GridControl行为不同。

使用 <dxg:GridColumn.EditSettings>是正确的方法吗?

最佳答案

它最终会变成一个更复杂的问题。

正如我在编辑中提到的,TextEditSettings 在特定情况下做了我想要的。但是当我改进代码后,一些错误开始出现。

提到之后我遇到的问题here在官方 DevExpress 论坛上,我总结如下:

真正的问题

我在一些报告中使用基类,在那些网格中我使用他们的派生类。

我在问题中提到的解决方案适用于常规的派生类,但是当我开始使用基类和派生类的属性时,一些奇怪的行为开始发生。

通过将 TextEditSettingsFieldName 结合使用,我可以格式化数据并显示派生类中属性的摘要,但对于基类中的属性它不起作用。

所以我更改为 DisplayMemberBinding,它适用于所有属性,但摘要停止工作。

解决方案

要使格式选项可用于您的类继承的属性以使摘要正常工作,您必须像这样使用:

Side Note: Don't know if all those properties in the TableView are really necessary but since this control is very sensitive to changes with them I keep them all just to make clear what worked for me.

<dxg:GridControl ItemsSource="{Binding MyObservableCollection}">
    <dxg:GridControl.Columns>
        <dxg:GridColumn DisplayMemberBinding="{Binding Percent}"
                        FieldName="Percent"
                        Header="%">
            <dxg:GridColumn.EditSettings>
                <dxe:TextEditSettings DisplayFormat="F2" />
            </dxg:GridColumn.EditSettings>
        </dxg:GridColumn>
    </dxg:GridControl.Columns>
    <dxg:GridControl.View>
        <dxg:TableView AllowSorting="False"
                       ShowTotalSummary="True"
                       FilterEditorShowOperandTypeIcon="True"
                       NavigationStyle="Row"
                       MultiSelectMode="None"
                       AllowColumnFiltering="False"
                       AllowDateTimeGroupIntervalMenu="False"
                       AllowEditing="False"
                       AllowFilterEditor="False"
                       AllowGrouping="False"
                       ClipboardCopyAllowed="False"
                       ShowGroupPanel="False" />
    </dxg:GridControl.View>
    <dxg:GridControl.TotalSummary>
        <dxg:GridSummaryItem FieldName="Percent"
                             DisplayFormat="F2"
                             SummaryType="Sum" />
    </dxg:GridControl.TotalSummary>
</dxg:GridControl>

在这种情况下,它将在继承的 Percent 属性中起作用。 DisplayMemberBinding 将使其适用于 TextEditSettings 并且 GridColumn 中的 FieldName 用于制作摘要GridSummaryItem 中的属性。

关于wpf - 如何更改数据在 WPF GridControl 中的显示方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11293939/

相关文章:

c# - 如何创建悬停工具栏

c# - 具有有效选择的可编辑组合框

c# - 如何在 C# 中获取网格的行数和列数?

wpf - 如何在 MVVM 中制作 MouseOver 事件?

xaml - 如何在 XAML 中将 Entry.Text 作为按钮的 CommandParameter 传递?

c# - 从父 View xaml 设置子控件 View 模型的属性

c# - 处理 Youtube 嵌入限制

android - Webview 和 ProgressBar 的 2 种方式数据绑定(bind)

javascript - 带有 knockout 绑定(bind)的嵌套 foreach ?

c# - 带虚线的 TreeView/TreeViewItem ControlTemplates