1

我有一个绑定到字典的 Values 集合的 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 控件并重新格式化所有列,但这似乎非常浪费。我确信有更好的方法可以做到这一点,我宁愿以某种合理的方式做到这一点,而不是使用丑陋的蛮力。

4

1 回答 1

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 按预期显示了数据。

罗伯

于 2013-03-13T15:16:07.163 回答