0

値が同じカテゴリに該当する場合、データグリッドビューの列に1つを超える値が表示されないという問題が発生しました。

例:同じ場所で働く2人。最初の男のシフトのタイミングは:10:00〜1700です。2番目の男のシフトのタイミングは:1500:2100です。

スケジュールデータグリッドビューに2人のシフトタイミングを表示するコードを実装します。問題はここから始まります。この2人の労働者は、15:00〜17:00の間に重複するタイムシフトがあります。15:00〜17:00の間にデータグリッドビューに表示される値は、最初の人の名前にすぎません。15:00〜17:00のタイムシフト中に、両方の従業員の名前を表示する必要があります。

これは、データをデータグリッドビューに表示するためのコードです。

foreach (allocation a in query)
        {
            for (int i = 0; i < scheduleDGV.Rows.Count - 1; i++)
            {
                for (int j = 0; j < scheduleDGV.Columns.Count; j++)
                {
                    if (cbLocation.SelectedItem.Equals(a.LocationName) && cbScheduleDate.SelectedItem.Equals(a.AllocationDate))
                    {
                        if (a.LocationName.Equals(scheduleDGV["Location", i].Value.ToString()) &&
                            a.StationName.Equals(scheduleDGV["Station", i].Value.ToString()))
                        {
                            if (scheduleDGV.Columns[j].HeaderText.Equals(a.AllocationTime.ToString()))
                            {
                                scheduleDGV[j, i].Value = a.EmployeeName;
                            }
                        }
                    }
                }
            }
        }

1つだけではなく両方の名前を表示できるように実装する方法について誰かが考えていますか?ありがとう!助けていただければ幸いです。:)

4

1 に答える 1

0

あなたの問題はおそらくラインから発生します

scheduleDGV[j, i].Value = a.EmployeeName; 

セルに関連する従業員の名前を入力するだけで、そこにすでに名前があるかどうかはチェックしません。

コードの残りの部分をリファクタリングせずに、この行を次のように置き換えることができます。

var existingName = scheduleDGV[j, i].Value as string;
if (!String.IsNullOrempty(existingName))
{
    scheduleDGV[j, i].Value = 
        existingName +
        Environment.NewLine +
        a.EmployeeName;
}
else
{
    scheduleDGV[j, i].Value = a.EmployeeName; 
}

そしてそれがあなたが期待することをするかどうか見てください。

于 2012-08-21T09:18:13.347 に答える