是否有一种简单的方法可以在[{1}}的{{1}}中显示代表TimeSpan
字段的格式化字符串?
我有一组自定义对象(由Web服务返回),我绑定到我的数据网格。这些对象具有DataGridViewTextBoxColumn
属性。当我将此属性绑定到datagrid的列时,我获取对象名称(类似于 MyApplication.MyClass.TimeSpan ),而不是timepan字符串。
我该如何解决?
注意:
最后我发现我的问题是我从Web服务中获取了的对象数组。
似乎DataGridView
类型不能被xml序列化,因此系统类被重新分类到自定义对象中:
答案 0 :(得分:1)
在对象中创建一个只读字符串属性,表示格式化的TimeSpan。类似的东西:
public class MyObject
{
private TimeSpan _myTimeSpan;
// ...
public string TimeSpanFormatted
{
get
{
return _myTimeSpan.ToString("c");
}
}
// ...
}
然后为此属性添加一列并隐藏“原始”TimeSpan列。
请参阅here for TimeSpan formatting info。
注意:对于列的属性,请务必将DataMember设置为TimeSpanFormatted
答案 1 :(得分:1)
这为我显示了一个值:
class TimeSpanItem
{
public TimeSpan Time { get; set; }
}
并使用此:
DataGridView dataGridView1 = new DataGridView();
DataGridViewTextBoxColumn Column1 = new DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(dataGridView1)).BeginInit();
//
// dataGridView1
//
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.Columns.AddRange(new DataGridViewColumn[] {
Column1});
dataGridView1.Location = new Point(38, 58);
dataGridView1.Name = "dataGridView1";
dataGridView1.Size = new Size(240, 150);
dataGridView1.TabIndex = 0;
//
// Column1
//
Column1.HeaderText = "Column1";
Column1.Name = "Column1";
Column1.DataPropertyName = "Time";
this.Controls.Add(dataGridView1);
((System.ComponentModel.ISupportInitialize)(dataGridView1)).EndInit();
List<TimeSpanItem> list = new List<TimeSpanItem>();
list.Add(new TimeSpanItem() { Time = DateTime.Now.TimeOfDay });
dataGridView1.DataSource = list;