Winform中ArrayList绑定到DataGrid时排序出错
//按钮 "加载 "的单击事件,向集合中添加数据
private void button1_Click(object sender, System.EventArgs e)
{
arr.Add(new Number( "3 "));
arr.Add(new Number( "2 "));
arr.Add(new Number( "1 "));
arr.Sort();
this.dataGrid1.DataSource=arr;
DataGridTableStyle ts=new DataGridTableStyle();
ts.MappingName= "ArrayList ";
DataGridTextBoxColumn cs=new DataGridTextBoxColumn();
cs.MappingName= "getNumber ";
cs.Format= "f4 ";
ts.GridColumnStyles.Add(cs);
this.dataGrid1.TableStyles.Clear();
this.dataGrid1.TableStyles.Add(ts);
}
//类
public class Number
{
private string number;
public Number(string num)
{
number=num;
}
public string getNumber
{
get
{
return number;
}
set
{
number=value;
}
}
}
在执行铵钮的单击事件时出现异常了.
arr.Sort();
this.dataGrid1.DataSource=arr;//在这个地方抛出异常了
异常信息为:
未处理的“System.InvalidOperationException”类型的异常出现在 mscorlib.dll 中。
其他信息: 指定的 IComparer 引发异常。
哪位大哥帮我解决一下.谢谢!
------解决方案--------------------改改你的Number,不过请你注意你那getNumber是接受的string(PS:楼主是Java开发风格啊,hehe,用属性来做这个)
public class Number : IComparable
{
private string number;
public Number(string num)
{
number = num;
}
public string getNumber
{
get
{
return number;
}
set
{
number = value;
}
}
#region IComparable Members
public int CompareTo(object obj)
{
Number objNum = obj as Number;
if (objNum == null) throw new ArgumentException();
if (objNum.getNumber == this.number) return 0;
return Convert.ToInt32(objNum.getNumber) > Convert.ToInt32(this.number) ? -1 : 1;
}
#endregion
}
------解决方案--------------------arr.Add(new Number( "3 "));
arr.Add(new Number( "2 "));
arr.Add(new Number( "1 "));
//arr.Sort();去掉这一句也可以的,否则就必须用实现IComparable接口
...
...