将TimeSpan绑定到DataGridView列

时间:2012-02-17 17:25:54

标签: c# .net winforms datagridview timespan

是否有一种简单的方法可以在[{1}}的{​​{1}}中显示代表TimeSpan字段的格式化字符串?

我有一组自定义对象(由Web服务返回),我绑定到我的数据网格。这些对象具有DataGridViewTextBoxColumn属性。当我将此属性绑定到datagrid的列时,我获取对象名称(类似于 MyApplication.MyClass.TimeSpan ),而不是timepan字符串。

我该如何解决?

注意: 最后我发现我的问题是我从Web服务中获取了的对象数组。 似乎DataGridView类型不能被xml序列化,因此系统类被重新分类到自定义对象中:

2 个答案:

答案 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;

enter image description here