您好
我有自动生成列的DataGrid。有些列是字符串,有些是int,有些是double。
如何在每列上设置显示格式?
(Silverlight 4)
顺便说一句,我读了somwhere建议来捕捉AutoGenerating
事件,并把这样的东西放到这样的
private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
e.Column.Format="N0";
}
但e.Column.Format
不存在!
答案 0 :(得分:3)
参考这个网站,我认为这是你正在寻找的,它应该与Toolkit控件而不是telerik控件一起使用。 干杯
void gridView_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(DateTime))
{
DataGridBoundColumn obj = e.Column as DataGridBoundColumn;
if (obj != null && obj.Binding != null)
obj.Binding.StringFormat = "{0:d}";
}
}
答案 1 :(得分:2)
更新: *使用MVVM,绑定您的列表,阻止autogeneratecolumns然后使用datatemplate自定义celltemplate(也将为您提供更多的灵活性,以及如何在列上显示内容)然后格式化文本块文本。
public partial class MainPage : UserControl, INotifyPropertyChanged
{
private ObservableCollection<CustomClass> _myList;
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<CustomClass> MyList
{
get { return _myList ?? (_myList = new ObservableCollection<CustomClass>()); }
set
{
_myList = value;
RaisePropertyChanged("MyList");
}
}
protected void RaisePropertyChanged(string propertyname)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyname));
}
public MainPage()
{
InitializeComponent();
this.DataContext = this;
MyList.Add(new CustomClass() { PropertyToBeWatched = "12"});
MyList.Add(new CustomClass() { PropertyToBeWatched = "23" });
MyList.Add(new CustomClass() { PropertyToBeWatched = "24" });
MyList.Add(new CustomClass() { PropertyToBeWatched = "25" });
}
}
XAML:
<sdk:DataGrid ItemsSource="{Binding MyList}" RowStyle="{StaticResource Style1}" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding SomeEntity, StringFormat=c}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Binding="{Binding PropertyToBeWatched}" Header="Property1"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
希望这有帮助。
答案 2 :(得分:1)
我不知道是否知道MVVM模式。使用它的方法,您可以为绑定到DataGrid的项创建其他类(ViewModel
)。
例如,假设您有一个类:
public class MyObject
{
public int Value1 { get; set; }
public double Value2 { get; set; }
public string Value3 { get; set; }
}
所以你可以像这样创建一个MyObjectViewModel类:
public class MyObjectViewModel
{
private MyObject _object;
public MyObjectViewModel(MyObject obj)
{
_object = obj;
}
public string Value1
{
get
{
return _object.Value1.ToString() //format for int
}
}
public string Value2
{
get
{
return _object.Value2.ToString() //format for double
}
}
public string Value3
{
get
{
return _object.Value3
}
}
}
然后在数据绑定之前,您可以将MyObject
的集合转换为MyObjectViewModel
的集合并绑定此集合。这样您就可以随意格式化您的属性。