//先上我的代码吧(这个可以排序):
//按奖金的升序排序.
        void OrderDataByPriceAscending(object sender, EventArgs e) {
            var sorted = from employee in set.Tables["T_Employee"].AsEnumerable()
                         orderby employee.Field<int>("FAge") ascending
                         select employee;
            dataGV.DataSource = sorted.AsDataView();
        }//(这个不可以排序)
//按奖金的升序排序.
        void OrderDataByPriceAscending(object sender, EventArgs e) {
            var sorted = from employee in set.Tables["T_Employee"].AsEnumerable()
                         orderby employee.Field<float>("FPrice") ascending
                         select employee;
            dataGV.DataSource = sorted.AsDataView();
        }
报错:
Specified cast is not valid.
大家看图就知道了,我的字段"FPrice"明明是 float 怎么说格式转换的时候出问题?运行界面:字段定义:

解决方案 »

  1.   

    数据库的float和C#里的float也不是一个float啊
      

  2.   

    不是float排序不行,而是你的字段没办法转换成float的。
      

  3.   

    对table没有好感~~
    为什么不用实体类呢~
      

  4.   


    你是说 那个 LinqToSQLServer的 .dbml 类么?
    Table不好么?
      

  5.   

    貌似,数据库中的float 是对应C#中的 double...
    而C#中的float,数据库中没有对应的类型....
      

  6.   

    SQL Server类型与C#类型对应关系 
    http://www.cnblogs.com/abllyboy/archive/2010/11/11/1875122.html
      

  7.   


    你是说 那个 LinqToSQLServer的 .dbml 类么?
    Table不好么?ORM是个概念; Linq to sql其中的一种实现,LinqToSql已经不更新了,有更强大的EntityFramwork;
    也可以自己简单第实现ORM,如下
    public static List<Entity> GetData()
            {
                const string sql = "";            List<Entity> list = new List<Entity>();
                using (SqlConnection conn = new SqlConnection(GlobalSetting.ConnectionString))
                {
                    conn.Open();                SqlCommand cmd = new SqlCommand(sql, conn);
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        Entity entity = new Entity();
                        entity.ID = Guid.Parse(dr["ID"].ToString());
                        ....//这部分可以使用CodeSmith生成                    list.Add(entity);
                    }
                }            return list;
            }返回的是强类型的数据集合,比Table好多~
    可以看看我科普的帖子
    http://bbs.csdn.net/topics/390435776
      

  8.   


    你是说 那个 LinqToSQLServer的 .dbml 类么?
    Table不好么?ORM是个概念; Linq to sql其中的一种实现,LinqToSql已经不更新了,有更强大的EntityFramwork;
    也可以自己简单第实现ORM,如下
    public static List<Entity> GetData()
            {
                const string sql = "";            List<Entity> list = new List<Entity>();
                using (SqlConnection conn = new SqlConnection(GlobalSetting.ConnectionString))
                {
                    conn.Open();                SqlCommand cmd = new SqlCommand(sql, conn);
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        Entity entity = new Entity();
                        entity.ID = Guid.Parse(dr["ID"].ToString());
                        ....//这部分可以使用CodeSmith生成                    list.Add(entity);
                    }
                }            return list;
            }返回的是强类型的数据集合,比Table好多~
    可以看看我科普的帖子
    http://bbs.csdn.net/topics/390435776
    你说到 "强数据类型"或称 Type DataSet ...我就懂了...不过我开始学C#的时候,在强数据类型用的是 .mdf数据库,如果托数据库表,让其生成的结构...不过...这个我没有用过...
      

  9.   


    你是说 那个 LinqToSQLServer的 .dbml 类么?
    Table不好么?ORM是个概念; Linq to sql其中的一种实现,LinqToSql已经不更新了,有更强大的EntityFramwork;
    也可以自己简单第实现ORM,如下
    public static List<Entity> GetData()
            {
                const string sql = "";            List<Entity> list = new List<Entity>();
                using (SqlConnection conn = new SqlConnection(GlobalSetting.ConnectionString))
                {
                    conn.Open();                SqlCommand cmd = new SqlCommand(sql, conn);
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        Entity entity = new Entity();
                        entity.ID = Guid.Parse(dr["ID"].ToString());
                        ....//这部分可以使用CodeSmith生成                    list.Add(entity);
                    }
                }            return list;
            }返回的是强类型的数据集合,比Table好多~
    可以看看我科普的帖子
    http://bbs.csdn.net/topics/390435776

    我看了一下你的文档...也查了一下关于这个的概率...
    这是我最近写的测试...你看看是不是你说的意思:
    public partial class Form1: Form {
            private string _strConn = @"Data Source=.\SQLExpress;Initial Catalog=DB_Person;Integrated Security=True";    //连接字符串.
            private LinqToSQLServerAdderDataContext _linq;   //Linq对象.
            public Form1() {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e) {
                ShowPerson();
            }        private void btnAdd_Click(object sender, EventArgs e) {
                T_Person p = new T_Person();    //新增的对象.
                p.FName = txtName.Text;
                p.FAge = int.Parse(txtAge.Text);
                _linq.T_Persons.InsertOnSubmit(p);
                _linq.SubmitChanges();
                ShowPerson();   //新增后重显示.
            }        //显示数据.
            void ShowPerson() {
                _linq = new LinqToSQLServerAdderDataContext(_strConn);
                var result = from person in _linq.T_Persons
                             select new {
                                 序号 = person.FId,
                                 姓名 = person.FName,
                                 年龄 = person.FAge
                             };
                dataGV.DataSource = result;
            }
        }
      

  10.   

    这倒也不是,主要是两种类型的精确度不一样
    当数据类型是Numeric(10, 6)这种时,应该就可以转成C#中的float,主要是精确度以及数值范围
      

  11.   

    断点查看那个列的实际数据类型,不要想当然地转换,在不知道实际类型的情况下,你直接Cast<object>,然后用object排序也可以的。
      

  12.   

    个人觉得你数据库设计都有问题。Fprice既然是表示价格金额,就不应该用float类型,应该用decimal或者Number
      

  13.   


    你是说 那个 LinqToSQLServer的 .dbml 类么?
    Table不好么?ORM是个概念; Linq to sql其中的一种实现,LinqToSql已经不更新了,有更强大的EntityFramwork;
    也可以自己简单第实现ORM,如下
    public static List<Entity> GetData()
            {
                const string sql = "";            List<Entity> list = new List<Entity>();
                using (SqlConnection conn = new SqlConnection(GlobalSetting.ConnectionString))
                {
                    conn.Open();                SqlCommand cmd = new SqlCommand(sql, conn);
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        Entity entity = new Entity();
                        entity.ID = Guid.Parse(dr["ID"].ToString());
                        ....//这部分可以使用CodeSmith生成                    list.Add(entity);
                    }
                }            return list;
            }返回的是强类型的数据集合,比Table好多~
    可以看看我科普的帖子
    http://bbs.csdn.net/topics/390435776

    我看了一下你的文档...也查了一下关于这个的概率...
    这是我最近写的测试...你看看是不是你说的意思:
    public partial class Form1: Form {
            private string _strConn = @"Data Source=.\SQLExpress;Initial Catalog=DB_Person;Integrated Security=True";    //连接字符串.
            private LinqToSQLServerAdderDataContext _linq;   //Linq对象.
            public Form1() {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e) {
                ShowPerson();
            }        private void btnAdd_Click(object sender, EventArgs e) {
                T_Person p = new T_Person();    //新增的对象.
                p.FName = txtName.Text;
                p.FAge = int.Parse(txtAge.Text);
                _linq.T_Persons.InsertOnSubmit(p);
                _linq.SubmitChanges();
                ShowPerson();   //新增后重显示.
            }        //显示数据.
            void ShowPerson() {
                _linq = new LinqToSQLServerAdderDataContext(_strConn);
                var result = from person in _linq.T_Persons
                             select new {
                                 序号 = person.FId,
                                 姓名 = person.FName,
                                 年龄 = person.FAge
                             };
                dataGV.DataSource = result;
            }
        }是的,但如果有分层就更好了~
    搜搜 三层架构
      

  14.   

    另外是使用linq to sql么~
    如果可以的话 还是用EntityFrameword
    两者差不多~