2012-09-18 104 views
0

我有一个WPF DataGrid(.NET框架4),它从myObject的数组中获取它的ItemsSource。 myObject的一个列/变量是DateTime。有没有办法改变DataGrid行的绘图事件,以便除了每个对象的DateTime以外,还可以在该列的单元格中显示其他内容?使用手动DataGridTextColumn,DataGridTemplateColumn`等以编程方式更改WPF Datagrid单元格的内容


编辑使用AutoGeneratingColumn事件

+0

绘图事件不是更改数据的正确时间。 – Paparazzi

+0

我不想更改myObject的数据。我想改变显示内容。 – user1241727

+0

仍然没有正确使用绘图事件。 – Paparazzi

回答

0

设置AutoGenerateColumns为False,并定义列,可以通过添加IValueConverter修改列的输出:

void MyGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
     // check if the current column is the target 
     if (e.PropertyName == "MyDateproperty") 
     { 
      // assuming it's a Text-type column 
      var column = (e.Column as DataGridTextColumn); 
      if (column != null) 
      { 
       var binding = column.Binding as Binding; 
       if (binding != null) 
       { 
        // add a converter to the binding 
        binding.Converter = new StringFormatConverter(); 
       } 
      } 
     } 
    } 

现在,以通常的方式定义StringFormatConverter,将日期/时间值转换为任何值:

public class StringFormatConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var col = (DateTime?)value; 
     return (col == null) ? null : col.Value.ToShortDateString(); 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

我已经有一个autogeneratecolumn事件的回调,以便更改列的标题,我不会摆脱它。我希望datagrid在datetime值以外的单元格中显示其他内容,所以当我添加一行时,而不是列中的值为01/01/0001,我希望它是一个字符串,表示“Immediatley”或whatnot基于在那里显示的时间 – user1241727

+0

为什么拒绝摆脱AutoGenerateColumns?而不是修改只是明确地设置它。 – Paparazzi

+0

如果我想让它显示某些行上的按钮以及同一列中其他行上的文本,该怎么办? – user1241727

相关问题