none
DataGrid - Kommastellen einzelner Spalten einstellen RRS feed

  • Frage

  • Bei unserer Anwendung wird das DataGrid per ItemsSource über eine DataTable befüllt, d.h. aktuell werden die Spalten und die Header direkt von einer SQL Datenbank in eine DataTable gelesen und mittels ItemsSource dem DataGrid zugewiesen.

    In den Spalten stehen nun Werte die die z.B. 8 Kommastellen besitzen. Wir sollten nun max. 3 Kommastellen anzeigen.

    Bei WinForms haben wir das folgendermaßen gelöst:

    GrdEntnahme.Columns[22].DefaultCellStyle.Format = "#0.00";
    Bei WPF haben wir aktuell keinen Ansatz und drehen uns etwas im Kreis. Hat jemand eine einfache Idee?
    Freitag, 18. Januar 2019 14:20

Antworten

  • Hi,
    im WPF-DataGrid funktioniert das genau so mit "StringFormat":

    <Window x:Class="WpfApp1.Window87"
            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:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="Window87" Height="450" Width="800">
      <Window.Resources>
        <local:Window87VM x:Key="vm"/>
      </Window.Resources>
      <Grid DataContext="{StaticResource vm}">
        <DataGrid ItemsSource="{Binding Daten}" AutoGenerateColumns="False">
          <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
            <DataGridTextColumn Header="Info" Binding="{Binding Info}"/>
            <DataGridTextColumn Header="Zahl" Binding="{Binding Zahl, StringFormat=#0.00}"/>
          </DataGrid.Columns>
        </DataGrid>
      </Grid>
    </Window>

    Dazu der ViewModel mit den Demo-Daten:

    using System.Collections.ObjectModel;
    using System.ComponentModel;
    using System.Windows;
    using System.Windows.Data;
    
    namespace WpfApp1
    {
    
      public class Window87VM
      {
        public Window87VM()
        {
          for (int i = 1; i < 10; i++)
            _daten.Add(new Window87Data()
            {
              ID = i,
              Info = $"Zeile {i}",
              Zahl = 3.33333 * i
            });
          cvs1.Source = _daten;
        }
    
        private ObservableCollection<Window87Data> _daten = new ObservableCollection<Window87Data>();
        private CollectionViewSource cvs1 = new CollectionViewSource();
    
        public ICollectionView Daten { get { return cvs1.View; } }
      }
    
      public class Window87Data
      {
        public int ID { get; set; }
        public string Info { get; set; }
        public double Zahl { get; set; }
      }
    
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Freitag, 18. Januar 2019 15:50