2016-09-10 3 views
0

私はDataBaseから取得するグループとアイテムを含むWindowsフォームでListViewを作成しようとしています。私のリストビューが初めでは、「lstItems」C#ウィンドウのListViewにグループとアイテムを追加する

と呼ばれる

、ListViewコントロールが空であると私はプログラムのrunnig中のデータとそれを埋めます。

これは私がグループを作成するために使用するコードです:

foreach(DataRow r in tasksTbl.Rows) 
{ 
    string groupName = "group" + num; 
    num++; 
    lstItems.Groups.Add(groupName, r.Field<string>(0)); 
} 

tasksTblテーブルが空ではありません、それは私がこの時点で画面に表示することはできませんいくつかのグループを作成します。

これは私のグループのためのアイテムとサブアイテムを作成するために使用するコードである:

private void CreateItem(DataTable tbl) 
{ 
    int taskId = tbl.Rows[0].Field<int>(0); 
    string taskName = tbl.Rows[0].Field<string>(1); 
    DateTime startDate = tbl.Rows[0].Field<DateTime>(2); 
    DateTime endDate = tbl.Rows[0].Field<DateTime>(3); 

    string dateStr = startDate.ToString() + " - " + endDate.ToString(); 

    ListViewItem item = new ListViewItem(dateStr); 
    item.Tag = taskId.ToString(); 

    foreach (DataRow r in tbl.Rows) 
    { 
     string position = r.Field<string>(5); 
     string soldier = r.Field<string>(6); 
     item.SubItems.Add(soldier + " (" + position + ")"); 
    } 

    foreach(ListViewGroup grp in lstItems.Groups) 
     if (grp.Header.Equals(taskName)) 
      grp.Items.Add(item); 
} 

ここでもTBLテーブルが空でないと、それは、各グループにアイテムとサブアイテムを作成します。

デバッガで、グループに項目が適切に表示されていることがわかります。

私の問題は、画面上にグループやアイテムが表示されないことです。

私には何が欠けていますか?

誰かが私に手を差し伸べることはできますか?

ありがとうございます!

+0

画面上には?デバッガウォッチウィンドウでは? – Rahul

+0

画面上でアイテムが一切表示されませんでした。私がdebbugerのコードでブレークポイントを使うと、私はそのグループのproprtiesの中のアイテムを見ることができました。 –

+1

グループをLustViewItemプロパティグループに割り当てる必要があります。 https://msdn.microsoft.com/en-us/library/ezh1batz(v=vs.110).aspxを参照してください。 –

答えて

0

私は自分の問題を理解しました。

ListViewに列を追加してから、項目をListViewに追加し、最後に項目をグループに追加する必要がありました。

私はそれをやったが今は動作する。

0

itzick、

は、あなたが行くようにグループを作成し、リストビューコントロールに追加アイテムに割り当てる必要があります。 ListViewを数値65から76でロードする簡単な例を次に示します。グループは数値モジュラス5に基づいています。

フォームを作成し、listView1というListViewを追加し、以下のメソッドを追加してそのメソッドを呼び出しますフォームの負荷。各グループに5つのグループといくつかのメンバーアイテムを持つListViewが表示されます。

private void LoadListView() 
    { 
     // Assume we are in a form, with a ListView control called listView1 on the form 

     // Create a group label array 
     var groupLabels = new string[5]; 
     groupLabels[0] = "aaa"; 
     groupLabels[1] = "bbb"; 
     groupLabels[2] = "ccc"; 
     groupLabels[3] = "ddd"; 
     groupLabels[4] = "eee"; 

     for (var i = 65; i < 76; i++) 
     { 
      // Find group or create a new group 
      ListViewGroup lvg = null; 
      var found = false; 
      foreach (var grp in listView1.Groups.Cast<ListViewGroup>().Where(grp => grp.ToString() == groupLabels[i % 5])) 
      { 
       found = true; 
       lvg = grp; 
       break; 
      } 

      if (!found) 
      { 
       // Group not found, create 
       lvg = new ListViewGroup(groupLabels[i % 5]); 
       listView1.Groups.Add(lvg); 
      } 

      // Add ListViewItem 
      listView1.Items.Add(new ListViewItem {Text = i.ToString(CultureInfo.InvariantCulture), Group = lvg}); 
     } 
関連する問題