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 は期待どおりにデータを表示しました。

ロブR

于 2013-03-13T15:16:07.163 に答える