首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

中午休息大家帮忙看看,XML文件操作问?绑顶有分!该怎么处理

2012-03-04 
中午休息大家帮忙看看,XML文件操作问?绑顶有分!!!我把XML数据读取到datatable中。然后用datatable.select(

中午休息大家帮忙看看,XML文件操作问?绑顶有分!!!
我把XML数据读取到datatable中。然后用datatable.select( "id= "   &   id)这样进行筛选绑定,如果id <10的话,没有问题。数据都能读出来。但如果id> =10时。不能读出数据!!没想什么原因!!
      顺便提醒大家。不是传值的问题。我直接写成:datatable.select( "id=10 ")也不行!!极郁闷中。。高手们路过支招!!!

[解决办法]
sf
[解决办法]
1:xml构十行数据吗?
2:单步调试,看看datatable中的数据.
[解决办法]
帮顶
[解决办法]
学习 关注
帮顶
[解决办法]
如果本来就没有id> 10的数据,你怎么解决也是解决不了的。
你还是先看看吧。
[解决办法]
没有代码,设个断点单步调试一下
[解决办法]
调式看看你的DataTable中存的是什么
[解决办法]
帮顶,LZ还是看下数据里有id> 10的没
[解决办法]
看看数据
[解决办法]
关注,帮顶下!
[解决办法]

[解决办法]
ding
[解决办法]
看看你datatable的id列是字符串还是int型的,估计是select的时候因为字段是字符串型,比较就当作字符串来比较了。
[解决办法]
准备xml的时候同时准备Schema
下面是一个简单的示例
using System;
using System.Reflection;
using System.Data;
using System.Xml;
using System.IO;
using System.Text;
class A
{

public static void Main(String[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add( "id ", typeof(int));
dt.Columns.Add( "str ", typeof(string));
dt.Rows.Add(new object[] {9, "9 " });
dt.Rows.Add(new object[] { 10, "10 " });
dt.Rows.Add(new object[] { 11, "11 " });


DataSet ds = new DataSet();
ds.Tables.Add(dt);
//不同时写入Schema.则读取出来时因为无法分析数据格式可能导至select出错
//ds.WriteXml( "xmlfile ");
ds.WriteXml( "xmlfilewithschema ",XmlWriteMode.WriteSchema);
ds.Tables.Remove(dt);

//同时读出时也带着Schema一起读出可以有效还原数据格式
//ds.ReadXml( "xmlfile ");
ds.ReadXml( "xmlfilewithschema ", XmlReadMode.ReadSchema);
dt = ds.Tables[0];

PrintTable(dt, "id=10 ");
PrintTable(dt, "id> 10 ");
PrintTable(dt, "id <10 ");

Console.Read();

}

static void PrintTable(DataTable dt,string condition)
{

DataRow[] drs = dt.Select(condition);

Console.WriteLine( "条件:{0}记录数:{1} ",condition ,drs.Length);
foreach(DataRow dr in drs){
foreach (DataColumn col in dt.Columns)
{
Console.Write( "{0}:{1}\t ",col.Caption,dr[col.Caption] );
}
Console.Write( "\r\n ");
}


}
}

[解决办法]
帮顶
[解决办法]
幫頂...
XML取第10筆後的數據好像問題滿多的
[解决办法]
帮顶下!

[解决办法]
如果本来就没有id> 10的数据,你怎么解决也是解决不了的。
你还是先看看吧。

[解决办法]
sf jf
[解决办法]
ding
[解决办法]
jf
[解决办法]
帮顶,顺便学习
[解决办法]
up
[解决办法]
id> =10中的数据里面有非法值
[解决办法]
顶 !!!
[解决办法]
看来还差一点就解决了,如果楼主把源程序帖出来,说不定我就可以帮帮你了

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接分
[解决办法]
using System;
using System.Data;


class A
{

public static void Main(String[] args)
{


DataTable dt = CreateTable();
DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.WriteXml( "xmlfile ");
/*这时候XML文件内容为
* <?xml version= "1.0 " standalone= "yes "?>
<NewDataSet>
<Table1>
<id> 9 </id>
<str> 9 </str>
</Table1>
<Table1>
<id> 10 </id>
<str> 10 </str>
</Table1>
<Table1>
<id> 11 </id>
<str> 11 </str>
</Table1>
</NewDataSet>
* 稍后读入到datatable时,id字段的类型为String
*/
ds.Tables.Remove(dt);
ds.ReadXml( "xmlfile ");
dt = ds.Tables[0];
PrintTable(dt, "id=10 ");
PrintTable(dt, "id> 10 ");
/*这时候select id <10找不到9,实现的细节可能要看select的实现*/
PrintTable(dt, "id <10 ");


dt = CreateTable();
ds = new DataSet();
ds.Tables.Add(dt);
ds.WriteXml( "xmlfilewithschema ", XmlWriteMode.WriteSchema);
/*这时候XML文件内容为,看 <xs:element name= "id " type= "xs:int " minOccurs= "0 " />
* 配置节决定了id是整型
* <?xml version= "1.0 " standalone= "yes "?>
<NewDataSet>
<xs:schema id= "NewDataSet " xmlns= " " xmlns:xs= "http://www.w3.org/2001/XMLSchema " xmlns:msdata= "urn:schemas-microsoft-com:xml-msdata ">
<xs:element name= "NewDataSet " msdata:IsDataSet= "true " msdata:UseCurrentLocale= "true ">
<xs:complexType>
<xs:choice minOccurs= "0 " maxOccurs= "unbounded ">
<xs:element name= "Table1 ">
<xs:complexType>


<xs:sequence>
<xs:element name= "id " type= "xs:int " minOccurs= "0 " />
<xs:element name= "str " type= "xs:string " minOccurs= "0 " />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Table1>
<id> 9 </id>
<str> 9 </str>
</Table1>
<Table1>
<id> 10 </id>
<str> 10 </str>
</Table1>
<Table1>
<id> 11 </id>
<str> 11 </str>
</Table1>
</NewDataSet>
* 稍后读入到datatable时,id字段的类型为int32
*/
ds.Tables.Remove(dt);
ds.ReadXml( "xmlfilewithschema ", XmlReadMode.ReadSchema);
dt = ds.Tables[0];
PrintTable(dt, "id=10 ");
PrintTable(dt, "id> 10 ");
PrintTable(dt, "id <10 ");
Console.Read();

}

static DataTable CreateTable() {
DataTable dt = new DataTable();
dt.Columns.Add( "id ", typeof(int));
dt.Columns.Add( "str ", typeof(string));
dt.Rows.Add(new object[] { 9, "9 " });
dt.Rows.Add(new object[] { 10, "10 " });
dt.Rows.Add(new object[] { 11, "11 " });
return dt;
}

static void PrintTable(DataTable dt,string condition)
{

DataRow[] drs = dt.Select(condition);
Console.WriteLine( "条件:{0}记录数:{1} ",condition ,drs.Length);
foreach (DataColumn col in dt.Columns)
{
Console.Write( "{0}:{1}\t ", col.Caption, col.DataType.Name);
}
Console.Write( "\r\n ");
foreach(DataRow dr in drs){
foreach (DataColumn col in dt.Columns)
{
Console.Write( "{0}\t ",dr[col.Caption] );
}
Console.Write( "\r\n ");
}
}
}
=====运行结果

条件:id=10记录数:1
id:String str:String
10 10
条件:id> 10记录数:1
id:String str:String
11 11
条件:id <10记录数:0
id:String str:String
条件:id=10记录数:1
id:Int32 str:String
10 10
条件:id> 10记录数:1
id:Int32 str:String
11 11
条件:id <10记录数:1
id:Int32 str:String
9 9

[解决办法]
我觉得是 Console.WriteLine( "条件:{0}记录数:{1} ",condition ,drs.Length);的问题,drs.Length 是dtrow的长度,不是 dt 的长度
[解决办法]
mark
[解决办法]
帮顶

[解决办法]
帮顶

接分
[解决办法]
帮顶,学习
[解决办法]
关注


[解决办法]
不明白说什么, 简单的逻辑处理而已, 再不明白输出DataTable 的数据看看

热点排行