以 C# windows 形式向 ListView 添加组和项目
Adding groups and items to ListView in C# windows form
我正在尝试在 Windows 表单中创建一个 ListView,其中包含我从数据库中获取的组和项目。
我的 ListView 名为 "lstItems"
一开始,ListView是空的,我在程序运行的过程中填充了数据。
这是我用来创建群组的代码:
foreach(DataRow r in tasksTbl.Rows)
{
string groupName = "group" + num;
num++;
lstItems.Groups.Add(groupName, r.Field<string>(0));
}
tasksTbl table 不为空,它创建了几个我目前在屏幕上看不到的组。
这是我用来为组创建项目和子项目的代码:
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 table 也不为空,它为每个组创建项目和子项目。
我可以在调试器中看到这些组正确地包含了项目。
我的问题是我在屏幕上看不到组或项目。
我错过了什么?
有人可以帮帮我吗?
提前致谢!
茨基克,
您需要随时创建组并将它们分配给您添加到 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});
}
我解决了我的问题。
我需要将列添加到 ListView,然后将项目添加到 ListView,最后才将项目添加到组。
我做到了,现在可以了。
我正在尝试在 Windows 表单中创建一个 ListView,其中包含我从数据库中获取的组和项目。
我的 ListView 名为 "lstItems"
一开始,ListView是空的,我在程序运行的过程中填充了数据。
这是我用来创建群组的代码:
foreach(DataRow r in tasksTbl.Rows)
{
string groupName = "group" + num;
num++;
lstItems.Groups.Add(groupName, r.Field<string>(0));
}
tasksTbl table 不为空,它创建了几个我目前在屏幕上看不到的组。
这是我用来为组创建项目和子项目的代码:
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 table 也不为空,它为每个组创建项目和子项目。
我可以在调试器中看到这些组正确地包含了项目。
我的问题是我在屏幕上看不到组或项目。
我错过了什么?
有人可以帮帮我吗?
提前致谢!
茨基克,
您需要随时创建组并将它们分配给您添加到 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});
}
我解决了我的问题。
我需要将列添加到 ListView,然后将项目添加到 ListView,最后才将项目添加到组。
我做到了,现在可以了。