1。listView1.Items[index].Selected=true;可以定位选择某一行,但这行被选中后为灰色,并不是单击listview时那样显示为深蓝色,如何使定位时的颜色为深蓝色。
2.我将listview中的第一列隐藏,如何能防止用户不把第一列拖出来(要代码),这种情况在网上看到很多,但都没有解决,只是浅浅的说了几句。请高手指教
3.左面是树,单击一个结点右边出现listview(里面填充一个表中的数据),单击listview列进行列排序,这时没有问题。
单击另一个结点,右边出现listview(里面填充另一个表中的数据),单击listview列进行列排序,这时提示索引超出范围,这两个listview是同一个listview,而且单击树的不同结点时有的listview显示Details,有的显示largeicon(也就是叶子结点下对应Details,其它结点对应largeicon),我感觉应该是内部比较器IComparer的问题,代码如下:
 private   int   iColumn=0;   
  private   bool   iOrder=false;   
  private   void   MyListView_ColumnClick(object   sender,   System.Windows.Forms.ColumnClickEventArgs   e)   
  {   
  if(iColumn==e.Column)   
  {   
  iOrder=!iOrder;   
  }   
  else   
  {   
  iOrder=true;   
  }   
  MyListView.Sorting=iOrder?SortOrder.Ascending:SortOrder.Descending;   
  MyListView.Sort();   
  MyListView.ListViewItemSorter=new   ListViewItemComparer(e.Column,MyListView.Sorting);   
  iColumn=e.Column;   
  }   
    
  class   ListViewItemComparer   :   IComparer     
  {   
  private   int   col;   
  private   SortOrder   _order;   
  public   ListViewItemComparer()     
  {   
  col=0;   
  this._order=SortOrder.Ascending;   
  }   
  public   ListViewItemComparer(int   column,SortOrder   order)     
  {   
  col=column;   
  this._order=order;   
  }   
  public   int   Compare(object   x,   object   y)     
  {   
  int   returnVal=-1;   
  returnVal=String.Compare(((ListViewItem)x).SubItems[col].Text,   ((ListViewItem)y).SubItems[col].Text);   
  if(_order==SortOrder.Descending)   
  {   
  returnVal   *=-1;   
  }   
  return   returnVal;   
  }   
  }   
 请问如何解决?

解决方案 »

  1.   

    try
    http://www.syncfusion.com/FAQ/WindowsForms/Default.aspx
      

  2.   

    没有办法保证它不能被拖出来,我原来也问过相关的问题,最后把隐藏数据保存到他的tag域里了,不要显示在listview上面
      

  3.   

    to 1在
    listView1.Items[index].Selected=true;
    之后加上
    listView1.Focus();
    即可。
      

  4.   

    to 2.我将listview中的第一列隐藏,如何能防止用户不把第一列拖出来(要代码),这种情况在网上看到很多,但都没有解决,只是浅浅的说了几句。请高手指教其实最简单的方法,是不增加这一列,或者用listviewitem的tag属性来代替这一列。
      

  5.   

    to 3你已经有程序了,自己单步进行调试,看看compare那些环节不对,出现异常的上下文是什么状况,这样下来分析出错误不是件难事。
      

  6.   

    Knight94(愚翁) 
    怎么用listviewitem的tag属性来代替这一列。
    隐藏那一列是表的主键,想单击listview得到主键的值,以便其它操作,而且不想让用户看到这一列
      

  7.   

    to 怎么用listviewitem的tag属性来代替这一列。
    隐藏那一列是表的主键,想单击listview得到主键的值,以便其它操作,而且不想让用户看到这一列你在创建column的时候,不要创建这一列,然后
    添加的时候如下操作,
    ListViewItem itmNew = yourListView.Items.Add( FirstColValue );
    itmNew.Tag = yourKeyValue;//Save key value using "Tag" property.//Get its value
    ListViewItem itmCurrent = yourListView.Items[index];
    //Get its key value through "itmCurrent.Tag" property
      

  8.   

    我是在属性中加listview的列的,不是在程序中
    还有比如ListViewItem item=listView1.SelectedItems[0];
    如何根据item,定位它在listview中的位置
      

  9.   

    to 如何根据item,定位它在listview中的位置int nIndex = yourListView.Items.IndexOf( yourItem );
      

  10.   

    to 我是在属性中加listview的列的,不是在程序中通过属性进行删除即可
      

  11.   

    to 如何根据item,定位它在listview中的位置ListViewItem item=listView1.SelectedItems[0];
    比如item是第5行,刷新listview后,它跑到第一行中,int nIndex = yourListView.Items.IndexOf( yourItem );这个索引就定不到它了吧
      

  12.   

    刷新listview后 重新来就行了.
      

  13.   

    to ListViewItem item=listView1.SelectedItems[0];
    比如item是第5行,刷新listview后,它跑到第一行中,int nIndex = yourListView.Items.IndexOf( yourItem );这个索引就定不到它了吧怎么做的刷新?重新创建?
    那你需要做foreach来查找。
      

  14.   

    如何用ListViewItem item=listView1.SelectedItems[0];中的item来做foreach查找,麻烦你好久了,
      

  15.   

    修改后调用:
    private void Addlistview()

    listView1.Items.Clear();
    int a=0;
    DataRow[] DR=StuDS.sldrpurplan.Select("defineprjid='"+SysInfo.ProjID+"'","MOrgTime DESC");
    foreach(DataRow dr in DR)
    {
    if(dr.RowState.ToString()!="Deleted") //判断数据集中的行是否在删除的状态
    {
    listView1.Items.Add(dr["MPurPlanId"].ToString());                                       //
    listView1.Items[a].SubItems.Add(dr["PurTitle"].ToString());                             //
    listView1.Items[a].SubItems.Add(dr["Material"].ToString());                             //
    listView1.Items[a].SubItems.Add(dr["MateSpec"].ToString());                             //
    listView1.Items[a].SubItems.Add(dr["ItemName"].ToString());                             //
    listView1.Items[a].SubItems.Add(dr["MQuantity"].ToString());                            //
    listView1.Items[a].SubItems.Add(dr["MOrganizer"].ToString());                           //
    listView1.Items[a].SubItems.Add(Convert.ToDateTime(dr["MOrgTime"]).ToLongDateString()); //
    listView1.Items[a].SubItems.Add(dr["MTaster"].ToString());                              //
    a++;
    }
    }
    }
      

  16.   

    private int GetIndex( ListViewItem itmSearched )
    {
        foreach( ListViewItem itm in yourListView.Items )
         {
              if( itm.Text == itmSearched.Text )
                   return itmSearched.Index;
          }
          return -1;//Can't find it
    }
      

  17.   

    ListViewItem item=listView1.SelectedItems[0];
    Addlistview();
    foreach( ListViewItem itm in listView1.Items)
    {
      if( itm.Text == item.Text )
    {
    listView1.Focus();
    listView1.Items[item.Index].Selected =true;
    }
    }
    还是找不到索引
      

  18.   

    自己单步调试这部分,看看你的代码有没有问题
    foreach( ListViewItem itm in listView1.Items)
    {
    if( itm.Text == item.Text )
    {
    listView1.Focus();
    listView1.Items[item.Index].Selected =true;
    }
    }
      

  19.   

    MessageBox.Show(item.Index.ToString());
    值 为 -1
      

  20.   

    应该这么写
    foreach( ListViewItem itm in listView1.Items)
    {
    if( itm.Text == item.Text )
    {
    listView1.Focus();
    listView1.Items[itm.Index].Selected =true;
    }
    }
      

  21.   

    Knight94(愚翁) ,谢谢了,我刚学C#,现在做焊接工程管理软件呢,有很多不太懂的地方,麻烦你了,有没有好的学习C#的方法,书或网站等,请告诉我一下,
    我的第二个问题我自己再研究一下
    结贴了,谢谢