2013-03-12 65 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