能不能在listview控件的指定列中添加内容

explease01 2010-01-03 08:13:42
最近在做一个进程管理器,但是只能在前两列中添加内容,无法做到多列显示,也无法做到内容与标题对应。
所以请各位强人帮忙!
能不能在listview指定列中添加相应内容.
在这里先谢谢各位了!!!
...全文
449 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
swx002 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tianliang1 的回复:]
啊。来凑凑。。。
好像是可以直接添加,你找到相应的行和列就可以对之进行操作了!!!
如:this.listView1.Item[row].Submits[column].Text="你想赋予的值";
[/Quote]
4楼是正确的啊
whapp123 2010-11-01
  • 打赏
  • 举报
回复
ListViewItem item = new ListViewItem("");
listView1.Items.Add(item);
item.SubItems.Add("");
Johan. 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qldsrx 的回复:]
这样不就给四列添加了内容了吗?哪个列不要内容,那个位置就留空,填null吧。

C# code
listView1.Items.Add(new ListViewItem(new string[] { "1","2","3","4" }));
[/Quote]

二楼兄弟的代码是可以的。
三楼是代码写错了。
qldsrx 2010-01-04
  • 打赏
  • 举报
回复
listView1.Items.Add(new ListViewItem(new string[]{process.ProcessName,process.Id.ToString() }) { Name = process.Id.ToString()}); 
如果不想添加“进程名称”的话,要这样:
listView1.Items.Add(new ListViewItem(new string[]{null,process.Id.ToString() }) { Name = process.Id.ToString()}); 

发现那个ListView比较傻瓜化,添加的列和添加的项居然可以不对应,比如说我有2个列,项目中却添加3个列也行,或者我没有列,项目中先添加了带有列的,以后再添加列头也行。
既然这样,你只有在每次改变列头个数或者位置后,重新添加Item项了,添加时要根据列头排列位置添加,没有内容的也要补上null占个位置。
explease01 2010-01-04
  • 打赏
  • 举报
回复
我用9楼说的编了下面的程序,可是好象不对啊,我把Process.ID添加到列名为PID的列中,可是却添加到进程名称列中,是不是代码中缺少什么啊?
this.listView1.Columns.Add("进程名称", 100, HorizontalAlignment.Left);
this.listView1.Columns.Add("PID", 100, HorizontalAlignment.Left);
Process[] processes;
processes = System.Diagnostics.Process.GetProcesses();
Process process;
for (int i = 0; i < processes.Length - 1; i++)
{
process = processes[i];
listView1.Items.Add(new ListViewItem(new string[]{ process.Id.ToString() }) { Name = "PID" });
}
qldsrx 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 explease01 的回复:]
还有就是注意5楼说的,软件运行时ListView中是没有列的,通过Checkedlistbox添加的,所以多不能实现啊
[/Quote]
这个很简单,你先将所有的列填充进去,并填充Item数据,然后判断Checkedlistbox的选择情况,将为选择的列移出,并用Dictionary<int,ColumnHeader>记录已经移出的列,当该列再次被选择并要求显示时,将Dictionary<int,ColumnHeader>中保存的那个列再次添加到ListView中。

获取要移除的列用var col = listView1.Columns[index]
移除列用listView1.Columns.Remove(col)
在某个位置插入列用listView1.Columns.Insert(index,col);
注意:这里的index是索引号,分别对应了数组new string[23] {"进程名称","PID","CPU","CPU 时间","内存使用",…}中的索引。
explease01 2010-01-04
  • 打赏
  • 举报
回复
怎样设置Key
explease01 2010-01-04
  • 打赏
  • 举报
回复
还有就是注意5楼说的,软件运行时ListView中是没有列的,通过Checkedlistbox添加的,所以多不能实现啊
explease01 2010-01-04
  • 打赏
  • 举报
回复
9楼的意思是不是这样写啊
listprocess.Items.Add(new ListViewItem(new string[] {process.Id.ToString()}){ Name = "PID"});
好象不行啊!是不是使用的Key不对啊!
qldsrx 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 explease01 的回复:]
3楼的看不懂,能否解释下,2楼的试过了不行
我是用string[] a = new string[23] {"进程名称","PID","CPU","CPU 时间","内存使用",…};
循环使用this.listprocess.Columns.Add(a[i], 100, HorizontalAlignment.Left);
添加LISTVIEW中的列的,而且用Checkedlistbox控制其中的列是否显示的,如果不指定显示的话好好像内容对不住啊!!!         
[/Quote]
我不是早给你方法了吗?wuyq11的回答可以无视,90%的不可用,1楼的偏偏不试,你要是试了肯定行。

this.listprocess.Items["进程名称"].Text = process.ProcessName;
这个用法当然不行了,因为你这里面误把列名当作Key来使用了,如果要设置Key,方便以后检索,要这样写:
listView1.Items.Add(new ListViewItem(new string[] {"进程名称","PID","CPU","CPU 时间","内存使用",…}){ Name = "PID"});

这里的Name属性就是Items索引使用的Key,另外我随便使用了列名标识了下,实际添加Item的时候请用对应的值填入。
nixiang12 2010-01-03
  • 打赏
  • 举报
回复
各种围观你们
tinal2008 2010-01-03
  • 打赏
  • 举报
回复
感觉1楼说赋空值是个可行的办法啊
“未将对象引用设置到对象的实例。”是不是那里没有定义就引用了呢,貌似一般itmes[]里都是索引号啊
explease01 2010-01-03
  • 打赏
  • 举报
回复
直接用this.listprocess.Items["进程名称"].Text = process.ProcessName;
行不行的,能运行的不过显示错误“未将对象引用设置到对象的实例。”
explease01 2010-01-03
  • 打赏
  • 举报
回复
3楼的看不懂,能否解释下,2楼的试过了不行
我是用string[] a = new string[23] {"进程名称","PID","CPU","CPU 时间","内存使用",…};
循环使用this.listprocess.Columns.Add(a[i], 100, HorizontalAlignment.Left);
添加LISTVIEW中的列的,而且用Checkedlistbox控制其中的列是否显示的,如果不指定显示的话好好像内容对不住啊!!!
tianliang1 2010-01-03
  • 打赏
  • 举报
回复
啊。来凑凑。。。
好像是可以直接添加,你找到相应的行和列就可以对之进行操作了!!!
如:this.listView1.Item[row].Submits[column].Text="你想赋予的值";
wuyq11 2010-01-03
  • 打赏
  • 举报
回复
listView.Items[1].Submits[1].Text="";
wuyq11 2010-01-03
  • 打赏
  • 举报
回复
ListViewItem item = new ListViewItem("");
listView1.Items.Add(item);
item.SubItems.Add("");
qldsrx 2010-01-03
  • 打赏
  • 举报
回复
这样不就给四列添加了内容了吗?哪个列不要内容,那个位置就留空,填null吧。
listView1.Items.Add(new ListViewItem(new string[] { "1","2","3","4" }));

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧