日期:2014-05-19  浏览次数:20888 次

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接口
...
...