一个值在数据网格中显示两列

时间:2010-05-24 20:00:22

标签: silverlight

我有一个包含3个值的XML,它们是'name','department','value'。我想显示一个包含姓名,部门,信用卡和借记卡等四列的数据网格。当我在'value'列中有一个正值时,我想在借方列中输入值,在信用列中输入0,反之亦然。

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。可能最干净的是添加DataGridTemplateColumn以进行信用和借记,将两个列绑定到“Value”,然后通过使用绑定来切换显示值的元素的Visibility属性(例如TextBlock)价值“和转换器。 例如:

    <DataGrid
        AutoGenerateColumns="False">
        <DataGrid.Resources>
            <converters:ValueToVisibilityConverter
                x:Key="ValueToVisibilityConverter" />
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTemplateColumn
                Header="Credit">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock
                            Text="{Binding Path=Value}"
                            Visibility="{Binding Path=Value, Converter={StaticResource CreditToVisibilityConverter}}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn
                Header="Debit">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock
                            Text="{Binding Path=Value}"
                            Visibility="{Binding Path=Value, Converter={StaticResource DebitToVisibilityConverter}}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

信用转换器可能如下所示:

public class CreditToVisibilityConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (double)value >= 0 ? Visibility.Visible : Visibility.Collapsed;
    }

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

    #endregion
}

借记转换器几乎相同,只是“值&gt; = 0部分”当然改为“值<0”。

干杯,亚历克斯