读书人

ListView控件有关问题()

发布时间: 2011-12-12 22:59:56 作者: rapoo

ListView控件问题(在线等)
Winform 窗体上有一个ListView 2个Buttons 1个label
//****************
private void button2_Click(object sender, System.EventArgs e)
{
try
{
this.listView1 .Clear ();
this.listView1.Columns .Add ( "名 ",50,HorizontalAlignment.Left);
this.listView1.Columns .Add ( "姓 ",50,HorizontalAlignment.Left);
this.listView1.Columns .Add ( "级 ",50,HorizontalAlignment.Left);
this.listView1.Columns .Add ( "tt ",50,HorizontalAlignment.Left);
for(int i=0;i <5;i++)
{
string []sub={ "ww "+i, "ee "+i, "rr "+i, "ss "+i};
this.listView1 .Items .Insert (this.listView1.Items .Count ,new ListViewItem (sub));
}
}
catch(Exception Error)
{
this.label1 .Text =Error.Message ;
}
}
//***************
private void button1_Click(object sender, System.EventArgs e)
{
try
{
this.listView1 .Clear ();
this.listView1.Columns .Add ( "名称 ",50,HorizontalAlignment.Left);
this.listView1.Columns .Add ( "姓名 ",50,HorizontalAlignment.Left);
this.listView1.Columns .Add ( "级别 ",50,HorizontalAlignment.Left);
for(int i=0;i <5;i++)
{
string []sub={ "Ni "+i, "Wo "+i, "Ta "+i};
this.listView1 .Items .Insert (this.listView1.Items .Count ,new ListViewItem (sub));
}
}
catch(Exception Error)
{
this.label1 .Text =Error.Message ;
}
}
//****************
private int CurrentColumn = -1; //记录上次点击的列号
private bool b_Convert = false; //记录正逆序信息
//****************
private void listView1_ColumnClick_1(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if(e.Column == CurrentColumn)
{
b_Convert = ! b_Convert;

}
else
{
CurrentColumn = e.Column;
b_Convert = false;

}
this.listView1 .ListViewItemSorter = new ListSortBySubItem(this.CurrentColumn ,b_Convert);
}
//******************排序
public class ListSortBySubItem : IComparer
{
private int m_Column = 0;
private int m_SortType = 0;//排序类型
private bool m_asc = true;
public ListSortBySubItem(int Column,bool bAsc)
{
m_Column = Column;
m_asc = bAsc;
}
public ListSortBySubItem(int Column,bool bAsc, int SortType)
{
m_Column = Column;
m_SortType = SortType;
m_asc = bAsc;
}
int IComparer.Compare(object x, object y)
{
string item1 = ((ListViewItem)x).SubItems[m_Column].Text.Trim();
string item2 = ((ListViewItem)y).SubItems[m_Column].Text.Trim();
int intSort = 0;
if(!m_asc)//反序
{


string temp = item1;
item1 = item2;
item2 = temp;
}

if(m_SortType == 0) //字符排序
intSort = String.Compare(item1,item2);
else //数值排序
{
double str1 = 0;
double str2 = 0;
if(item1 == " ")//为空设置为最小
return 1;
else if(item2 == " ")
return 0;
try
{
str1 = double.Parse(item1);
str2 = double.Parse(item2);
}
catch
{
//转换出错
return 0;
}
if(str1 > =str2)
return 0;
else
return 1;

}
return intSort;
}


}

//****************
问题 当我点击button2之后 Listview显示4列数据 我点击第四列进行排序(显示正常)然后我点击button1(我想显示另外3行数据),此时显示出错 *指定的参数已超出有效值的范围。\r\n参数名: “3”不是“index”的有效值。*


//****************
大家救命啊!!!


[解决办法]
你这样做当然有问题啊..

Button2点击时创建了四列..

再点击Button1时虽然你调用了this.listView1 .Clear ();但是只能清除ListView中的项,不可能清除Column啊...

读书人网 >C#

热点推荐