2010-05-24 26 views
0

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

回答

1

有几种方法可以解决这个问题。可能最干净的一种方法是添加一个DataGridTemplateColumn以用于信用和借方,将两个列都绑定到“Value”,然后通过使用绑定到“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 
} 

借记该转换器将是几乎相同,仅与“值> = 0部分”改为“值< 0“当然。

干杯,亚历克斯