如何从数据库对象值

时间:2016-10-19 14:31:30

标签: c# wpf datagrid textblock dockpanel

我正在开发WPF应用程序,它有一个Window.xaml,我正在使用从数据库(MSSQL 2008R2)填充的dataGrid,在那个dataGrid我正在从我的数据库加载订单。

我也是通过numberOfOrder对我的订单进行分组,并且可以扩展它们或者将它们折叠起来,以防万一同时有很多订单。

无论如何,在我的扩展器里面是DockPanel,它有textBlock,我使用textBlock来显示数据库中每个订单的数量,但我想知道如何在数据库中显示其他内容到该textBlock(例如我想要当我将订单插入数据库时​​显示DateTime - 我已经完成了该属性),让我们按照Order of Order的顺序保存所有内容,让我们显示其他内容,而不是像我之前那样显示numberOfOrder。

以下是现在看起来的照片:

enter image description here

订单号:#1< - 我在TextBlock中显示它,1是我数据库中的numberOfOrder。

<TextBlock FontWeight="Normal" FontFamily="Verdana" FontSize="20" Height="25" Foreground="#83D744"  Text="{Binding Path=Name,StringFormat= Number of Order:# {0}}" />

我想在这里做的是显示其他东西而不是订单号,因为我说我想显示DateTime或者其他什么,所以我会把它看起来像这样:

enter image description here

以下是完整代码:

XAML :( TextBlock在这里很重要)

<DataGrid.GroupStyle>
        <!-- Style for groups at top level. -->
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Expander IsExpanded="True"  Background="Black" Opacity="0.7">
                                    <Expander.Header >
                                        <DockPanel Height="50" Margin="0,0,0,0"  Name="dockPanel" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}, Path=ActualWidth}">

                                            <Button>...</Button>
                                            <Button>...</Button>

                                            <TextBlock FontWeight="Normal" FontFamily="Verdana" FontSize="20" Height="25" Foreground="#83D744"  Text="{Binding Path=Name,StringFormat= Number of Order:# {0}}" />

                                            </DockPanel>
                                    </Expander.Header>
                                    <Expander.Content>
                                        <ItemsPresenter />
                                    </Expander.Content>
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </DataGrid.GroupStyle>

用于填写DATAGRID的MY CLASS:

public class OrderLocal
{
    public string Title           { get; set; }
    public int Quantity           { get; set; }
    public int NumberOfOrder      { get; set; }
    public DateTime DateOfInput   { get; set; }

}

在我填写DATAGRID的所有订单后的代码:

public MainWindow()
{

        InitializeComponent();
        this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
        this.WindowState = WindowState.Maximized;

        var ordersList = OrdersController.localOrders();
        collectionViewSource.Source = ordersList;

        collectionViewSource.GroupDescriptions.Add(new PropertyGroupDescription("NumberOfOrder"));
        DataContext = collectionViewSource;


}

1 个答案:

答案 0 :(得分:0)

也许你可以在DockPanel中放入另一个TextBlock?

<DockPanel>
   <Button DockPanel.Dock="Right"/>
   <Button DockPanel.Dock="Right"/>
   <TextBlock Text=""/>
   <TextBlock Text"whatever you wan"/>
   <TextBlock Text="{Binding Items, Converter={StaticResource ItemsConverter},StringFormat=\{0:d\}}"/>
</DockPanel>

和转换器:

public class ItemsConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ReadOnlyObservableCollection<object> items = value as ReadOnlyObservableCollection<object>;
        if (items == null) throw new ArgumentNullException(nameof(items));

        DateTime latestOrderDate = items.Max(x => x.OrderDate);
        return latestOrderDate;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

那就是它。使用不同的转换后,您可以从商品中获得不同的值。

此致

斯特芬