[ad_1]
WPF DataGrid の列形式についてよく読んだことがありますが、数値形式の解決策が見つかりませんでした。 私がこれまでに持っているのは、SQLite データベースと、正常に動作する数行のコードです (数値形式を除く)。 私が欲しいのは、小数点以下2桁です。
... DataGrid1.Columns.Clear(); DataGrid1.AutoGenerateColumns = false; Binding bindAmount = new Binding("amount"); CultureInfo germanCulture = CultureInfo.CreateSpecificCulture("de-DE"); bindAmount.ConverterCulture = germanCulture; DataGridTextColumn colAmount = new DataGridTextColumn(); colAmount.Header = "amount"; colAmount.Binding = bindAmount; style = new Style(); style.TargetType = typeof(DataGridCell); se = new Setter(); se.Property = ContentStringFormatProperty; // these 2 lines se.Value = "0.00"; // don't work !!! style.Setters.Add(se); se = new Setter(); se.Property = HorizontalAlignmentProperty; se.Value = HorizontalAlignment.Right; style.Setters.Add(se); colAmount.CellStyle = style; colAmount.Width = 70; DataGrid1.Columns.Add(colAmount); DataGrid1.ItemsSource = dbDataTbl.DefaultView; ...
なぜ私は XAML でそれをしないのですか? 国ごとに異なる形式が必要だからです。
私が試したこと:
上記のテキストとコードを参照してください…
解決策 1
コードではなく XAML を使用すると、 DataGrid
.
これは、同様の質問による古い質問への回答の例です。 という新しいプロジェクトを作成します。 WpfDataGridDateColumnFormatting
このコードを次の場所にドロップします。
1. という名前の新しいモデルを作成します Widget
データを保持するには:
C#
public class Widget { public string? Name { get; set; } public DateTime? Date { get; set; } public int Quantity { get; set; } = 0; }
2. 次のコードを MainWindow
コード ビハインド:
C#
using System; using System.Collections.ObjectModel; using System.Windows; public partial class MainWindow : Window { private Random random = new(); public ObservableCollection<Widget> Widgets { get; set; } = new(); public MainWindow() { CreateWidgets(); InitializeComponent(); } private void CreateWidgets() { for (int i = 0; i < 10; i++) { Widgets.Add(new() { Name = $"Widget {i}", Date = DateTime.Now.AddDays(random.NextDouble() * 5), Quantity = random.Next(0, 100) }); } } }
3. 今、 MainWindow
XAML:
XML
<Window x:Class="WpfDataGridDateColumnFormatting.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" mc:Ignorable="d" x:Name="Window" Title="MainWindow" Height="450" Width="800"> <DataGrid DataContext="{Binding ElementName=Window}" ItemsSource="{Binding Widgets}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> <DataGridTextColumn Header="Date" Binding="{Binding Date, StringFormat={}{0:dd.MM.yy}}" /> <DataGridTextColumn Header="Quantity" Binding="{Binding Quantity, StringFormat={}{0:#,##0.00}}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Right" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> </DataGrid.Columns> </DataGrid> </Window>
ここで、上記の手順に従ってアプリを実行すると、最後の 2 つの列がカスタム書式設定で表示され、最後の列が数値書式設定で表示されます。
ご覧のとおり、データ バインディングに直接書式設定を適用しています。
XML
Binding="{Binding Quantity, StringFormat={}{0:#,##0.00}}">
の StringFormat
プロパティは、データ バインディングと同じ書式設定オプションを使用します。 String.Format
. (参照: 標準数値書式文字列[^])
WPF の優れたチュートリアル Web サイト: 完全な WPF チュートリアル – WPF チュートリアル[^]
お役に立てれば!
[ad_2]
コメント