2012-02-17 144 views
2

是否有一種簡單的方法可以顯示一個格式化的字符串,該字符串代表的一箇中的TimeSpan字段?將TimeSpan綁定到DataGridView列

我有一個自定義對象數組(由Web服務返回),我綁定到我的數據網格。這些對象具有TimeSpan屬性。當我將此屬性綁定到數據網格的列時,我獲取對象名稱(類似於MyApplication.MyClass.TimeSpan),而不是時間跨度字符串。

我該如何解決?

注: 最後,我發現我的問題是,我得到我從Web服務對象的數組。 似乎TimeSpan類型不能爲XML序列化的,所以系統類是重新歸類到自定義對象:

+0

你有谷歌d如何使用時間跨度..你是綁定到一個屬性或變量,例如var tick =(TimeSpan)(endTick - startTick); ??? – MethodMan 2012-02-17 17:29:03

+0

@DJKRAZE我有一組自定義對象綁定到我的數據網格。這些對象具有'TimeSpan'屬性。當我將此屬性綁定到數據網格的列時,我獲得對象名稱而不是時間跨度字符串。 – davioooh 2012-02-17 17:33:09

+1

您是否創建了自己的嵌套在「MyClass」中的'TimeSpan'類?對於沒有重寫方法的類的實例,字符串「MyApplication.MyClass.TimeSpan」看起來像是object.ToString()的返回值。在這種情況下,您只需獲取類型名稱即可。 – phoog 2012-02-17 18:19:44

回答

1

創建您的對象中的只讀字符串屬性將代表格式化的TimeSpan。例如:

public class MyObject 
{ 
private TimeSpan _myTimeSpan; 

// ... 

public string TimeSpanFormatted 
{ 
    get 
    { 
     return _myTimeSpan.ToString("c"); 
    } 
} 

// ... 
} 

然後爲此屬性添加一列,並隱藏「原始」TimeSpan列。

請參閱here for TimeSpan formatting info

注:爲了您的列的屬性務必將數據成員設置爲TimeSpanFormatted

+0

所以我需要添加另一個屬性到我的對象...? – davioooh 2012-02-17 17:34:11

+0

@DavidC .:是的。看我的編輯... – 2012-02-17 18:24:43

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