最近在做一个进程管理器,但是只能在前两列中添加内容,无法做到多列显示,也无法做到内容与标题对应。 
所以请各位强人帮忙! 
能不能在listview指定列中添加相应内容. 
在这里先谢谢各位了!!!

解决方案 »

  1.   

    这样不就给四列添加了内容了吗?哪个列不要内容,那个位置就留空,填null吧。
    listView1.Items.Add(new ListViewItem(new string[] { "1","2","3","4" }));
      

  2.   

    ListViewItem item = new ListViewItem(""); 
    listView1.Items.Add(item); 
    item.SubItems.Add("");
      

  3.   

    啊。来凑凑
    好像是可以直接添加,你找到相应的行和列就可以对之进行操作了!!!
    如:this.listView1.Item[row].Submits[column].Text="你想赋予的值";
      

  4.   

    3楼的看不懂,能否解释下,2楼的试过了不行
    我是用string[] a = new string[23] {"进程名称","PID","CPU","CPU 时间","内存使用",…};
    循环使用this.listprocess.Columns.Add(a[i], 100, HorizontalAlignment.Left);
    添加LISTVIEW中的列的,而且用Checkedlistbox控制其中的列是否显示的,如果不指定显示的话好好像内容对不住啊!!!           
      

  5.   

    直接用this.listprocess.Items["进程名称"].Text = process.ProcessName;
    行不行的,能运行的不过显示错误“未将对象引用设置到对象的实例。”
      

  6.   

    感觉1楼说赋空值是个可行的办法啊
    “未将对象引用设置到对象的实例。”是不是那里没有定义就引用了呢,貌似一般itmes[]里都是索引号啊
      

  7.   

    我不是早给你方法了吗?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的时候请用对应的值填入。
      

  8.   

    9楼的意思是不是这样写啊
    listprocess.Items.Add(new ListViewItem(new string[] {process.Id.ToString()}){ Name = "PID"});
    好象不行啊!是不是使用的Key不对啊!
      

  9.   

    还有就是注意5楼说的,软件运行时ListView中是没有列的,通过Checkedlistbox添加的,所以多不能实现啊
      

  10.   

    这个很简单,你先将所有的列填充进去,并填充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 时间","内存使用",…}中的索引。
      

  11.   

    我用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" });
                }
      

  12.   

    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占个位置。
      

  13.   

    ListViewItem item = new ListViewItem("");  
    listView1.Items.Add(item);  
    item.SubItems.Add("");