2

StringFormatfrom の使用方法を見つけましたが、プログラムXAMLで列を追加する必要があり、その解決策が見つかりません。私が使用しているコードは機能しません:

foreach (Fields field in fields)
{
    DataGridTextColumn column = new DataGridTextColumn();
    column.Header = field.name;
    column.Binding = new Binding(field.name) { Mode = BindingMode.TwoWay };
    if (field.group[0] == "<numbers>" && field.group.Count == 1)
        column.Binding.StringFormat = "{0:d}";
    dgwDataMain.Columns.Add(column);
}
4

3 に答える 3

1

これはどう?

column.Binding =
    new Binding(field.name)
    {
        Mode = BindingMode.TwoWay,
        UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
    };

UpdateSourceTrigger.PropertyChanged入力された文字ごとにバインディング ソースが更新されるようにします。したがって、入力は毎回検証されます。

プロパティのデフォルトのUpdateSourceTriggerTextBox.Text(DataGrid セルによって使用される) はUpdateSourceTrigger.LostFocusです。

于 2013-01-11T12:11:54.423 に答える
1

次に、DataTable を使用する必要があります。列は任意の型にすることができますが、新しい DataGridColumn を追加するのは非常に困難です。

  1. すべてのデータを収集します。
  2. 正しい型の列を DataTable に追加します。
  3. すべてのデータを DataTable に追加します。
  4. dataGrid.DataSource = DataTable を設定します。
于 2013-01-11T12:54:13.543 に答える
0

Xamlコードで試してください

<TextBlock>
    <Run Text="Full date/time pattern (short time): "/>
    <Run Text="{Binding DateTime, StringFormat=f, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="Full date/time pattern (long time): "/>
    <Run Text="{Binding DateTime, StringFormat=F, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="Short date/time pattern (short time): "/>
    <Run Text="{Binding DateTime, StringFormat=g, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="Short date/time pattern (long time): "/>
    <Run Text="{Binding DateTime, StringFormat=G, ElementName=userControl}"/>
</TextBlock>

または

<TextBlock>
    <Run Text="In Currency with zero decimal point: "/>
    <Run Text="{Binding Number, StringFormat=\{0:c0\}, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="In Currency with two decimal point: "/>
    <Run Text="{Binding Number, StringFormat=\{0:c2\}, ElementName=userControl}"/>
</TextBlock>

また

<TextBlock>
    <Run Text="Normal Number: "/>
    <Run Text="{Binding Number, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="Above number with 2 decimal point: "/>
    <Run Text="{Binding Number, StringFormat=\{0:n2\}, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="Above number with 4 decimal point: "/>
    <Run Text="{Binding Number, StringFormat=\{0:n4\}, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="Above number with 10 Zero place holder: "/>
    <Run Text="{Binding Number, StringFormat=\{0:0000000000\}, ElementName=userControl}"/>
</TextBlock>

また

<TextBlock>
    <Run Text="Normal string: "/>
    <Run Text="{Binding Text, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="String with atleast 15 characters length: "/>
    <Run Text="{Binding Text, StringFormat=\{0\,15\}, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="String with atleast 25 characters length: "/>
    <Run Text="{Binding Text, StringFormat=\{0\,25\}, ElementName=userControl}"/>
</TextBlock>
<TextBlock>
    <Run Text="Text with quote: "/>
    <Run Text="{Binding Text, StringFormat='The string &quot;\{0\}&quot; inside a quot',
                              ElementName=userControl}"/>
</TextBlock>
于 2013-01-11T12:18:28.400 に答える