Привязка TimeSpan к столбцу DataGridView - PullRequest
2 голосов
/ 17 февраля 2012

Есть ли простой способ показать отформатированную строку, представляющую поле TimeSpan в DataGridViewTextBoxColumn из DataGridView?

У меня есть массив пользовательских объектов (возвращаемых веб-службой), которые я привязываю к своей сетке данных. Эти объекты имеют свойство TimeSpan. Когда я связываю это свойство со столбцом таблицы данных, я получаю имя объекта (что-то вроде MyApplication.MyClass.TimeSpan ), а не строку временного интервала.

Как я могу решить?

Примечание: Наконец я обнаружил, что моя проблема в том, что я получаю массив объектов от веб-службы . Кажется, что тип TimeSpan не может быть сериализован в xml, поэтому системный класс переклассифицирован в пользовательский объект:

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Это отображало значение для меня:

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

1 голос
/ 17 февраля 2012

Создайте в вашем объекте строковое свойство только для чтения, которое будет представлять отформатированный интервал времени.Что-то вроде:

public class MyObject
{
private TimeSpan _myTimeSpan;

// ...

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

// ...
}

Затем добавьте столбец для этого свойства и скройте «необработанный» столбец TimeSpan.

См. здесь для информации о форматировании TimeSpan .

ПРИМЕЧАНИЕ: Для свойств вашего столбца обязательно установите для DataMember значение TimeSpanFormatted

...