dt是一个datable,从一个比较复杂的xml获取的其中一个节点,结构如下(用gridview输出查看):
id name image  
1 好开心 ~/Images/Front/Face/1/1.gif  
2 好难过 ~/Images/Front/Face/1/2.gif  
3 好伤心 ~/Images/Front/Face/1/3.gif  
4 要唱歌 ~/Images/Front/Face/1/4.gif  
5 正哭泣 ~/Images/Front/Face/1/5.gif  
6 很满意 ~/Images/Front/Face/1/6.gif 极度奇怪的问题如下:DataRow[] rows = dt.Select("id=1");
Response.Write(rows.Length); //正常,结果是1DataRow[] rows = dt.Select("id=2或大于2的数");
Response.Write(rows.Length); //结果是0!!!DataRow[] rows = dt.Select("id='2'");
Response.Write(rows.Length); //加了引号,又正常了,结果是1
但是第一行测试并没有加引号,输出也正常啊!!

解决方案 »

  1.   

    先检查一下dt第一列,也就是id是什么类型值
    string s=DataRow["id"].GetType().toString() 
      

  2.   

    DataRow[] rows = dt.Select("id=2或大于2的数");
    这样可以?DataRow[] rows = dt.Select("id=2");
    这样不可以么?
      

  3.   

    你的dt列设定数据类型DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(int));
      

  4.   

    下面做了个对比,说明了你出现错误的原因:第一种:
    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(char));
    dt.Rows.Add("1");
    dt.Rows.Add("2");
    dt.Rows.Add("3");
    dt.Rows.Add("4");DataRow[] dr = dt.Select("ID='2'");//结果是1
    //DataRow[] dr = dt.Select("ID=2");//结果是0
    MessageBox.Show(dr.Length.ToString());第二种:
    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(int));
    //dt.Columns.Add("ID", typeof(string));//int和string二者选其一,如果要排序的话,请注意选择int
    dt.Rows.Add("1");
    dt.Rows.Add("2");
    dt.Rows.Add("3");
    dt.Rows.Add("4");
    DataRow[] dr = dt.Select("ID=2");//结果是1
    //DataRow[] dr = dt.Select("ID='2'");//结果是1
    MessageBox.Show(dr.Length.ToString());其实对比你就会发现,你的dt中id列的type设置成了char类型,不知我说的对否,见笑!~~~
      

  5.   

    datatable是用ds.ReadXml读取xml文件的,没有定义过字段类型
    现在已发现问题所在xml文件中,当id字段存在一位以上的数字时候,就会出现问题!如果只有1-9的ID值,就没问题,看来就是char类型类型的问题了
      

  6.   

    dataset.ReadXml时候,如何指定xml文件内指定字段的类型呢?就是把id指定为int,而不是char