解决方案 »

  1.   

    string[] p = new string[listView1.Columns.Count];
                 for (int i = 0; i < listView1.Columns.Count-1; i++)
                 {
                    
                     p[i] = listView1.Items[i].Text;
                 }比如说listView1的列数是4
    那么数组p的长度是4
    for循环等价于
    for(int i=0;i<3;i++){}
    也就是说p[3]始终未null
    下面排序遍历到p[3]的时候,就出现“未将对象引用设置到对象的实例”咯
      

  2.   

    改成
    string[] p = new string[listView1.Columns.Count];
                 for (int i = 0; i < listView1.Columns.Count; i++)
                 {
                     
                     p[i] = listView1.Items[i].Text;
                 }
      

  3.   

    谢谢,实例问题已经解决了!我还有个问题,现在的代码是给listview中第一列进行排序,我想进行第二列排序应该怎么改啊?
      

  4.   

    1.string[] p = new string[listView1.Columns.Count];这里按照treeview的列,  p[i] = listView1.Items[i].Text;这又变成行,显然这里是有问题的;
    2.报异常那里设置断点看哪个为null就知道原因了;
    3.listView1.Items[i].Text; 这里截取 比如用substring
      

  5.   

    p[i] = listView1.Items[i]..SubItems[0].Text 这就是第二列了
      

  6.   

    冒泡排序变成快速排序
            // 快速排序算法
            // <param name="data">排序数组</param>
            // <param name="low">排序上限</param>
            // <param name="high">排序下限</param>
            static void QuickRun(int[] data, int low, int high)
            {
                //简单设定中间值,并以此为一趟快排的分割点
                //注意这里是一个简单的算法,如果想对这个算法优化的话,可以采取随机的方法来获取分割点
                int middle = data[(low + high) / 2];
                int i = low;//设定移动上标
                int j = high;//设定移动下标
                do//直至分割出两个序列
                {
                    while (data[i] < middle && i < high)//扫描中值左边元素
                        i++;
                    while (data[j] > middle && j > low)//扫描值右边元素
                        j--;
                    if (i <= j)//找到了一对可以交换的值
                    {
                        int temp = data[i];
                        data[i] = data[j];
                        data[j] = temp;
                        i++;
                        j--;
                    }
                } while (i<=j);
                if (j > low)//递归对比分割点元素都小的那个序列时行快速排序
                    QuickRun(data, low, j);
                if (i < high)//递归对比分割点元素都大的那个序列时行快速排序
                    QuickRun(data, i, high);
            }