我创建了一个listview,并且在运行时确定了列数。我一直在网上阅读有关listview的文本(我仍然是)但我想知道如何将项目添加到listview中的特定列我想到的是:
m_listview.Items.Add("1850").SubItems.Add("yes");
可以使用“1850”,这是列的文本将是目标列。
答案 0 :(得分:18)
ListViewItems不知道您的ListView列。
为了直接引用该列,首先需要将所有列添加到ListViewItem。
所以...让我们说你的ListView有三列A,B和C; 下一段代码只会向A列添加数据:
ListViewItem item = new ListViewItem();
item.text = "Column A";
m_listView.Items.Add(item);
要将它添加到C列,我们首先要告诉它它有一个B列...
ListViewItem item = new ListViewItem();
item.text = "Column A";
item.SubItems.Add("");
item.SubItems.Add("Column C");
m_listView.Items.Add(item);
现在我们在ListViewItem中有A,B和C列,文本出现在A和C列中,但不是B。
最后......现在我们已经告诉它它有三列,我们可以对那些特定的列做任何我们喜欢的事情......
ListViewItem item = new ListViewItem();
item.text = "Column A";
item.SubItems.Add("");
item.SubItems.Add("Column C");
m_listView.Items.Add(item);
m_listView.Items[0].SubItems[2].Text = "change text of column C";
m_listView.Items[0].SubItems[1].Text = "change text of column B";
m_listView.Items[0].SubItems[0].Text = "change text of column A";
希望有所帮助!
答案 1 :(得分:6)
我通常将ListView Item继承为:
public class MyOwnListViewItem : ListViewItem
{
private UserData userData;
public MyOwnListViewItem(UserData userData)
{
this.userData = userData;
Update();
}
public void Update()
{
this.SubItems.Clear();
this.Text = userData.Name; //for first detailed column
this.SubItems.Add(new ListViewSubItem(this, userData.Surname)); //for second can be more
}
}
其中
public class UserData
{
public string Name;
public string Surname;
}
使用
listView1.Items.Add(new MyOwnListViewItem(new UserData(){Name="Name", Surname = "Surname"}));
答案 2 :(得分:1)
ListViewItem item = new ListViewItem("foo");
item.SubItems.Add("foo2");
this.listView1.Items.Add(item);
ListViews不支持数据绑定和强类型命名。我建议考虑使用DataGridView。根据您的需要,它可以为您节省一些理智点。
Chernikov已经很好地实施了让事情变得更加健全。
答案 3 :(得分:1)
这就是我的工作,因为这些列是在运行时通过用户首选项添加的。
我使用listView将数据库中的信息显示给用户。 (我可能应该使用DataGrid,但是当我第一次创建程序时,DataGrid没有内置完整行选择,而且我对于通过我发现的自定义控件示例来说太过新了)
用户可以选择要显示的总数,宽度和标题文字。
我创建了一个用户首选项表,用于保存有关要添加的列的信息
我还创建了一个类ColumnPreferences
,并为每个列添加了一个属性
使用DataReader制作List<ColumnPreferences>
我根据显示索引对此列表进行排序,因此我可以按列显示的顺序迭代它。
我执行if语句检查首选项中的下一个首选项是否可见。
如果是,那么我使用ListView1.Columns.Add(ColumnName, ColumnText, ColumnWidth);
此时列都已设置,以保存用户拖动它们的位置,基本上相反。我遍历Listview.columns中的所有列并将列显示索引和列宽保存回我的用户首选项表
从表中加载实际数据时,我使用相同的列首选项列表来检查是否应该显示数据。
它再次按显示索引排序,我检查它是否可见,如果不是我跳过它并转到下一个
如果可见,我使用myDataReader[ ColumnPreference.ColumnName ]
查找我想要的数据的适当序数。
我只是按顺序将每个结果添加到列表视图项/子项中,然后将它们添加到列表视图中
答案 4 :(得分:0)
For i = 0 To listAcheivments.Items.Count - 1
Dim arrparam2(,) As String
arrparam2 = New String(,) {{"@emp_code", txtEmpCode.Text}, {"@ach_year", CDate("01-01-" & listAcheivments.Items(i).SubItems(0).Text)}, {"@acheivement", listAcheivments.Items(i).SubItems(1).Text}}
SaveData(arrparam2, "insert_acheivements")
Next
答案 5 :(得分:-1)
这样的事可能吗?
ListViewItem item = m_listview.Items.Add("1850");
item.Subitems.Add(string.Empty); //Make an add method that does this for every column you got and then you can use the indexer below.
item.Subitems[1].Text = "Test";
索引0是主要项目。指数1>是子项目。