2016-10-19 5 views
-1

Я работаю над приложением WPF, в котором есть один Window.xaml, где я использую dataGrid, который заполняется из базы данных (MSSQL 2008R2), в том, что dataGrid загружает заказы из моей базы данных.Как добавить текстовое значение TextBlock из значения объекта базы данных

Я также группирую свои заказы с помощью numberOfOrder, и его можно развернуть или свернуть, если в то же время будет много заказов.

В любом случае, внутри моего расширителя есть DockPanel, у которого есть textBlock, я использовал этот textBlock для отображения числа каждого заказа из базы данных, но мне интересно, как я могу отобразить что-то еще из базы данных в этот textBlock (например, я хочу отображать DateTime, когда я вставил свой заказ в базу данных - у меня есть это свойство allready), давайте сохраним все, сгруппированные по номеру заказа, чтобы отображать что-то другое вместо numberOfOrder, как я делал до сих пор.

Вот фото того, как это выглядит сейчас: Number

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:

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; 


} 

ответ

0

Может быть, вы можете поставить только другой TextBlock в вашей DockPanel?

<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(); 
    } 
} 

Вот так. С помощью разных преобразований вы можете получать разные значения из своих предметов.

С уважением

Штеффен

Смежные вопросы