能不能在listview控件的指定列中添加内容 最近在做一个进程管理器,但是只能在前两列中添加内容,无法做到多列显示,也无法做到内容与标题对应。 所以请各位强人帮忙! 能不能在listview指定列中添加相应内容. 在这里先谢谢各位了!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样不就给四列添加了内容了吗?哪个列不要内容,那个位置就留空,填null吧。listView1.Items.Add(new ListViewItem(new string[] { "1","2","3","4" })); ListViewItem item = new ListViewItem(""); listView1.Items.Add(item); item.SubItems.Add(""); 啊。来凑凑好像是可以直接添加,你找到相应的行和列就可以对之进行操作了!!!如:this.listView1.Item[row].Submits[column].Text="你想赋予的值"; 3楼的看不懂,能否解释下,2楼的试过了不行我是用string[] a = new string[23] {"进程名称","PID","CPU","CPU 时间","内存使用",…};循环使用this.listprocess.Columns.Add(a[i], 100, HorizontalAlignment.Left);添加LISTVIEW中的列的,而且用Checkedlistbox控制其中的列是否显示的,如果不指定显示的话好好像内容对不住啊!!! 直接用this.listprocess.Items["进程名称"].Text = process.ProcessName;行不行的,能运行的不过显示错误“未将对象引用设置到对象的实例。” 感觉1楼说赋空值是个可行的办法啊“未将对象引用设置到对象的实例。”是不是那里没有定义就引用了呢,貌似一般itmes[]里都是索引号啊 我不是早给你方法了吗?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的时候请用对应的值填入。 9楼的意思是不是这样写啊listprocess.Items.Add(new ListViewItem(new string[] {process.Id.ToString()}){ Name = "PID"});好象不行啊!是不是使用的Key不对啊! 还有就是注意5楼说的,软件运行时ListView中是没有列的,通过Checkedlistbox添加的,所以多不能实现啊 这个很简单,你先将所有的列填充进去,并填充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 时间","内存使用",…}中的索引。 我用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" }); } 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占个位置。 ListViewItem item = new ListViewItem(""); listView1.Items.Add(item); item.SubItems.Add(""); 球大神,极啊 WPF软件中属性页怎么实现 跳转框架问题 C#调用C++编写的DLL报错 标签框为何无法实现锚定呢? 求专业人士 讲解关于数组问题!!! 如何获取WinForm下的resx文件的内容 C#里头能把实现了IPictureDisp 接口的数据保存成图片吗?! 请问如何获得一个文件夹下的所有文件? C++结构体转C# C# 如何获取软硬件信息 数据库操作错误
listView1.Items.Add(new ListViewItem(new string[] { "1","2","3","4" }));
listView1.Items.Add(item);
item.SubItems.Add("");
好像是可以直接添加,你找到相应的行和列就可以对之进行操作了!!!
如:this.listView1.Item[row].Submits[column].Text="你想赋予的值";
我是用string[] a = new string[23] {"进程名称","PID","CPU","CPU 时间","内存使用",…};
循环使用this.listprocess.Columns.Add(a[i], 100, HorizontalAlignment.Left);
添加LISTVIEW中的列的,而且用Checkedlistbox控制其中的列是否显示的,如果不指定显示的话好好像内容对不住啊!!!
行不行的,能运行的不过显示错误“未将对象引用设置到对象的实例。”
“未将对象引用设置到对象的实例。”是不是那里没有定义就引用了呢,貌似一般itmes[]里都是索引号啊
这个用法当然不行了,因为你这里面误把列名当作Key来使用了,如果要设置Key,方便以后检索,要这样写:
listView1.Items.Add(new ListViewItem(new string[] {"进程名称","PID","CPU","CPU 时间","内存使用",…}){ Name = "PID"});
这里的Name属性就是Items索引使用的Key,另外我随便使用了列名标识了下,实际添加Item的时候请用对应的值填入。
listprocess.Items.Add(new ListViewItem(new string[] {process.Id.ToString()}){ Name = "PID"});
好象不行啊!是不是使用的Key不对啊!
移除列用listView1.Columns.Remove(col)
在某个位置插入列用listView1.Columns.Insert(index,col);
注意:这里的index是索引号,分别对应了数组new string[23] {"进程名称","PID","CPU","CPU 时间","内存使用",…}中的索引。
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" });
}
listView1.Items.Add(new ListViewItem(new string[]{null,process.Id.ToString() }) { Name = process.Id.ToString()});
发现那个ListView比较傻瓜化,添加的列和添加的项居然可以不对应,比如说我有2个列,项目中却添加3个列也行,或者我没有列,项目中先添加了带有列的,以后再添加列头也行。
既然这样,你只有在每次改变列头个数或者位置后,重新添加Item项了,添加时要根据列头排列位置添加,没有内容的也要补上null占个位置。
listView1.Items.Add(item);
item.SubItems.Add("");