如何更新绑定到列表的预格式化DataGridView?

时间:2013-03-12 21:53:03

标签: c# asp.net winforms datagridview

我有一个DataGridView,我绑定到字典的Values集合。在我的表单构造函数中,我可以创建字典并将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控件,并在每次更新控件时重新格式化所有列,但这看起来非常浪费。我确信有更好的方法可以做到这一点,而且我宁愿以合理的方式做到这一点,而不是使用丑陋的蛮力。

1 个答案:

答案 0 :(得分: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