我创建一个列表视图和列的数量是在运行时确定的。我一直在阅读网络上的文字全约的ListView(和我仍然是),但我想知道如何将项目的列表视图添加到特定的专栏中,我想是这样的:如何添加到Listview项目中的特定列?
m_listview.Items.Add("1850").SubItems.Add("yes");
会的工作假设“1850”这是列的文本将是目标列。
我创建一个列表视图和列的数量是在运行时确定的。我一直在阅读网络上的文字全约的ListView(和我仍然是),但我想知道如何将项目的列表视图添加到特定的专栏中,我想是这样的:如何添加到Listview项目中的特定列?
m_listview.Items.Add("1850").SubItems.Add("yes");
会的工作假设“1850”这是列的文本将是目标列。
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);
所以现在我们必须出现在A和C柱列A,B和C在ListViewItem和文本,而不是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";
希望有帮助!
可能是这样的吗?
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>是子项目。
您的代码不起作用 – 2009-08-10 15:56:18
暗星,你需要切换到报表视图和首先插入第二列(lv.Columns.Add,我猜)。请注意,Listview将报告视图中的整行视为单个“Item”,子项的功能是有限的。 – peterchen 2009-08-10 16:01:52
该死的丑陋......必须有更好的解决方案。 – 2009-08-10 16:14:46
我usially继承的ListViewItem为:
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"}));
哇,非常好的实现。 +1 – 2009-08-10 16:07:19
ListViewItem item = new ListViewItem("foo");
item.SubItems.Add("foo2");
this.listView1.Items.Add(item);
列表视图不支持数据绑定和强类型命名。我会建议考虑使用DataGridView。根据你的需要,它可以为你自己节省一些理智点。
切尔尼科夫已经很好地实施了,让事情变得更加安全。
这就是我所做的,因为列是在运行时通过用户首选项添加的。
我正在使用listView将数据库中的信息显示给用户。(我也许应该使用DataGrid的,但是当我第一次做节目的DataGrid并没有内置全行选择,我是过大对于新手,都要经过自定义控件的例子,我发现)
用户选择哪他们想要显示的列总数,多宽和标题文本。
我创建的保存有关的列的信息来添加用户偏好表
我还做了一类ColumnPreferences
并添加属性为每个列的
使用的DataReader使List<ColumnPreferences>
我根据显示的索引排序这个名单,所以我可以通过它的迭代顺序显示列。
我做了一个if语句,检查偏好设置中的下一个首选项是否可见。
如果是那么我添加使用ListView1.Columns.Add(ColumnName, ColumnText, ColumnWidth);
列在这一点上的列都设置,保存在用户周围拖动他们我基本上做相反。我遍历Listview.columns中的所有列,并将列显示索引和列宽保存回我的用户优选表中
从表中加载实际数据时,我使用相同的列首选项来检查是否应该显示数据。
它是由显示指数再次排序,我检查,如果它是可见的,如果不是我跳过它,去下一个
如果它是可见我使用myDataReader[ ColumnPreference.ColumnName ]
查找的approprate序我想要的数据。
我只是添加的每个这些结果,为了到一个列表视图项/子项,然后将它们添加到列表视图
非常感谢SK93对它的解释,以便像我这样的noob可以理解和切尔尼科夫的想法。 – 2009-08-10 19:28:34
呵呵,不客气......我们都是小菜一次:) – Sk93 2009-08-10 22:24:24
很好的答案!谢谢!来自Sk93的惊人报价,“我们都是小菜一次”,非常鼓舞人心和激励! :) – neo 2012-07-27 23:22:08