数据库中这个price字段是varchar的,用来记录这个产品的几种价格。
例如“2400|4500|263|”这样的
现在将这个字段绑定在DataGrid中。
页面上要将默认取出的第一个价格排序。
因为字段是string的,我现在排序后都是按字符来排的。我需要按数据的大小来排。如何实现?
请高手帮忙。我自己想了一下。在datatable中增加了一列,类型为System.Double
然后在DataGrid1_ItemDataBound中将价格读出来,再赋给这一列。
我是这样做的。可是写不进去。
if (e.Item.ItemIndex>=0)
{
string[] _price;
string price =e.Item.Cells[6].Text;
_price = price.Split(new Char [] {'|'});
if(_price.Length > 0 )
{
   e.Item.Cells[12].txt = Convert.ToDouble(_price[0]);
}
}请高手指教,或者有没有其它好的方法?

解决方案 »

  1.   

    lz的意思是从“2400 ¦4500 ¦263 ¦”取出2400来吗?
    可以定义一个数组,然后用Split方法把2400 ¦4500 ¦263 ¦分割再赋值到数组里
    数组就会有这3个值了,然后再循环数组排序就可以了
    这样应该可以吧?
      

  2.   

    普通绑定列price就好了 protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                e.Item.Cells[12].Text = e.Item.Cells[12].Text.Substring(0, e.Item.Cells[12].Text.IndexOf('|'));
            }
        }
      

  3.   

    to simenpeng :因为数据类型绑到Grid的时候是string的,没办法按价格的大小来排,况且我上面有个价格的按钮,需要点击从大到小,或者从小到大。to seedling_lq:试了一下你给我的方法,可是报“指定的参数已超出有效值的范围”错。请帮忙。
      

  4.   

    我想您真的没把需求说得很明白才会造成一些不必要的周折,要解决问题请先说清楚
    1."price字段是记录这个产品的几种价格,页面上要将默认取出的第一个价格排序",您并没说明是取第一个价格来显示没实现,还是排序功能没实现;
    2.关于排序,您也没说清楚是在"2400|4500|263|"里对这三个数字排序呢还是对所有记录的已取出的第一个价格排序,现在我才知道您指的是后者,所以从一开始的思路就不对了;
    3.要实现按price的排序应该从数据源着手,而不是等绑定完了在去考虑排序,建一视图或存储过程,新加一字段只取price字段的第一个数值,排序时按照这个新字段排即可