【问题标题】:Adding groups and items to ListView in C# windows form在 C# windows 窗体中将组和项添加到 ListView
【发布时间】:2017-01-18 14:46:08
【问题描述】:

我正在尝试在 Windows 窗体中创建一个 ListView,其中包含我从数据库中获取的组和项目。

我的 ListView 被称为“lstItems”

一开始,ListView 是空的,我在程序运行期间用数据填充它。

这是我用来创建组的代码:

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

taskTbl 表不是空的,它创建了几个我现在在屏幕上看不到的组。

这是我用来为组创建项目和子项目的代码:

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 表也不为空,它为每个组创建项目和子项目。

我可以在调试器中看到组正确地拥有项目。

我的问题是我在屏幕上看不到组或项目。

我错过了什么?

有人可以帮帮我吗?

提前谢谢你!

【问题讨论】:

  • 在屏幕上是什么意思?在调试器监视窗口中?
  • 在屏幕上我根本没有看到该项目。当我在调试器的代码中使用断点时,我可以看到组属性中的项目。
  • 您必须将组分配给 LustViewItem 属性组,反之亦然。检查msdn.microsoft.com/en-us/library/ezh1batz(v=vs.110).aspx

标签: c# winforms listview listviewitem listviewgroup


【解决方案1】:

我发现了我的问题。

我需要向 ListView 添加列,然后将项目添加到 ListView,最后才将项目添加到组中。

我做到了,现在可以了。

【讨论】:

    【解决方案2】:

    一针见血,

    您需要随时创建组并将它们分配给您添加到 ListView 控件的项目。 这是一个简单的示例,它加载了一个带有数字 65 到 76 的 ListView。这些组基于数字模数 5。

    创建一个表单,添加一个名为 listView1 的 ListView,添加下面的方法并在表单加载期间调用该方法。您应该会看到一个包含五个组和每个组中的一些成员项的 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});
            }
    

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 2017-05-21
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2023-04-07
      相关资源
      最近更新 更多