2013-03-12 64 views
1

我有一个DataGridView,我绑定到字典的值集合。在我的窗体的构造,我可以创建词典并在DataGridView的列绑定到将被包含在字典中的结构域:如何更新绑定到列表的预格式化的DataGridView?

 m_tasks = new Dictionary<int,OperationsTaskLabeledData>(); 
     var taskArray = from task in m_tasks.Values select new { 
     StartDate = task.m_start_task_date.ToString("M/dd H:mm"), 
     EndDate = task.m_task_date.ToString("M/dd H:mm"), 
     Description = task.m_short_desc, 
     Object = task.m_device_id, 
     InitialLocation = task.m_initial_location, 
     FinalLocation = task.m_final_location }; 
     dgvFutureTasks.DataSource = taskArray.ToArray(); 

我想在窗体的构造函数的代码,这样的列可以格式化后,每次更新网格中的数据时,我都不必重新格式化它们。

当我真的有数据显示在这个datagridview中,我该怎么处理它?我会调用这个函数:

private void DisplayFutureTasks(IEnumerable<OperationsTaskLabeledData> tasks) 

但是我不知道在这个函数里面做什么。

我可以重新绑定datagridview控件,并在每次控件更新时重新格式化所有列,但这看起来很浪费。我确信有更好的方法可以做到这一点,我宁愿以某种合理的方式来做这件事,而不是使用丑陋的蛮力。

+0

asp.net or winforms? – Win 2013-03-12 22:21:59

+0

遗憾遗憾。的WinForms。 – 2013-03-13 02:14:43

回答

0

我现在已经想出了如何做我想做的事情。

我知道设计时需要的列,所以在IDE中,我将这些列添加到我的datagridview并根据需要对其进行格式化。然后,我将网格视图的AutoGenerateColumns属性设置为false。由于某些未知原因,该属性在设计器中不可用,必须在代码中设置。最后,我可以将每列的DataPropertyName设置为我要链接到的结构中相应字段的名称。例如,这里是我将使用生成的数据源中的LINQ代码:

taskArray = from task in tasks select new { 
           StartDate = task.m_start_task_date.ToString("M/dd H:mm"), 
           EndDate = task.m_task_date.ToString("M/dd H:mm"), 
           Description = task.m_short_desc, 
           Object = task.m_device_id, 
           InitialLocation = task.m_initial_location, 
          FinalLocation = task.m_final_location }; 
.DataSource = taskArray.ToArray(); 

这里是我的窗体构造函数来设置DataPropertyName属性代码:

dgvFutureTasks.AutoGenerateColumns = false; 
dgvFutureTasks.Columns["colStartTime"].DataPropertyName = "StartDate"; 
dgvFutureTasks.Columns["colFinishTime"].DataPropertyName = "EndDate"; 
dgvFutureTasks.Columns["colDescription"].DataPropertyName = "Description"; 
dgvFutureTasks.Columns["colObject"].DataPropertyName = "Object"; 
dgvFutureTasks.Columns["colInitialLocation"].DataPropertyName = "InitialLocation"; 
dgvFutureTasks.Columns["colFinalLocation"].DataPropertyName = "FinalLocation"; 

此时,DataGridView按预期显示数据。

RobR