所以我有一个类,它将定时任务存储在其中:
class Task
{
public string Description { get; set; }
public TimeSpan Duration
{
get
{
if (BeginDate == DateTime.MinValue)
return new TimeSpan(0, 0, 0);
else if (EndDate == DateTime.MinValue)
return DateTime.Now.Subtract(this.BeginDate);
else
return this.EndDate.Subtract(this.BeginDate);
}
}
public DateTime BeginDate { get; set; }
public DateTime EndDate { get; set; }
public TaskStatus Status { get; set; }
public Task()
{
this.Description = string.Empty;
this.BeginDate = new DateTime();
this.EndDate = new DateTime();
}
}
public enum TaskStatus
{
UNINVOICED,
INVOICED,
PAID
}
我使用这些列在DataTable和DataGridView之间使用DataBinding:
private void AddDataGridViewColumns()
{
dgvTimesheet.Columns.Add(new DataGridViewTextBoxColumn()
{
Name = "id",
Visible = false,
DataPropertyName = "id"
});
dgvTimesheet.Columns.Add(new DataGridViewTextBoxColumn()
{
Name = "description",
HeaderText = "Description",
Visible = true,
DataPropertyName = "description"
});
dgvTimesheet.Columns.Add(new DataGridViewTextBoxColumn()
{
Name = "duration",
HeaderText = "Duration",
Visible = true,
});
dgvTimesheet.Columns.Add(new DataGridViewTextBoxColumn()
{
Name = "begindate",
HeaderText = "Date Started",
Visible = false,
DataPropertyName = "begindate"
});
dgvTimesheet.Columns.Add(new DataGridViewTextBoxColumn()
{
Name = "enddate",
HeaderText = "Date Completed",
Visible = true,
DataPropertyName = "enddate"
});
dgvTimesheet.Columns.Add(new DataGridViewTextBoxColumn()
{
Name = "status",
Visible = false,
DataPropertyName = "status"
});
}
每当用户需要添加新任务时,我手动将其添加到DataTable:
DataRow row = timesheet.Tasks().NewRow();
row["description"] = ActiveTask.Description; // String
row["begindate"] = ActiveTask.BeginDate; // DateTime object
row["enddate"] = ActiveTask.EndDate; // DateTime object
row["status"] = ActiveTask.Status; // Enum
然后我做了典型的:
DataTable.Rows.Add(DataRow)
DataAdapter.Update(DataTable),
DataAdapter.Fill(DataTable)
有没有办法使用Task对象作为在DataGridView和DataTable之间保存数据的对象,而不是创建与Task对象具有相同数据的DataRow?
每次我需要从DataGridView获取信息时,我需要转换值.ToString(),然后将其解析为我想要的值。
所以我在datagridview [“begindate”]列中有一个DateTime对象但要将其取回,我需要将其转换为字符串并再次将其解析为DateTime对象。如果我可以简单地访问DataGridView.Row [index] .BeginDate会更好。这可能吗?
TL; DR如何从DataTable中取一行并将其转换为自定义对象并用它填充DataGridView?
如果你想在整个项目中玩游戏是https://github.com/codeliger/timelord
的开源