请教用Tables.Select进行数据有条件读取的时候,数据丢失的问题

luoxp520 2008-02-04 10:55:36
我是这样引用的:


new Class.Comm().BindListFormXml("/data/class.xml",this.DataList1,"classid<50","classid");
public void BindListFormXml(string xmlPath,DataList dataList,string strWhere,string strSort)
{
DataSet strxml=new DataSet();
xmlPath = HttpContext.Current.Server.MapPath(xmlPath);
strxml.ReadXml(xmlPath);
int row = strxml.Tables[0].Rows.Count;

DataTable dataTable = new DataTable("dataTable");
dataTable.Columns.Add("classid", typeof(Int32));
dataTable.Columns.Add("classname", typeof(String));

DataRow[] dataRow = strxml.Tables[0].Select(strWhere);
foreach(DataRow dtr in dataRow)
{
dataTable.ImportRow(dtr);
}
dataTable.DefaultView.Sort =strSort;
dataList.DataSource = dataTable;
dataList.DataBind();

}


<?xml version="1.0" encoding="GB2312"?>
<root>
<node1 id="1"><classid>1</classid><classname>北京</classname></node1>
<node1 id="2"><classid>2</classid><classname>上海</classname></node1>
<node1 id="3"><classid>3</classid><classname>天津</classname></node1>
<node1 id="4"><classid>4</classid><classname>河北</classname></node1>
<node1 id="5"><classid>5</classid><classname>河南</classname></node1>
<node1 id="6"><classid>6</classid><classname>山东</classname></node1>
<node1 id="7"><classid>7</classid><classname>山西</classname></node1>
<node1 id="8"><classid>8</classid><classname>黑龙江</classname></node1>
<node1 id="9"><classid>9</classid><classname>吉林</classname></node1>
<node1 id="10"><classid>10</classid><classname>辽宁</classname></node1>
<node1 id="11"><classid>11</classid><classname>江苏</classname></node1>
<node1 id="12"><classid>12</classid><classname>浙江</classname></node1>
<node1 id="13"><classid>13</classid><classname>安徽</classname></node1>
<node1 id="14"><classid>14</classid><classname>福建</classname></node1>
<node1 id="15"><classid>15</classid><classname>江西</classname></node1>
<node1 id="16"><classid>16</classid><classname>四川</classname></node1>
<node1 id="17"><classid>17</classid><classname>重庆</classname></node1>
<node1 id="18"><classid>18</classid><classname>湖北</classname></node1>
<node1 id="19"><classid>19</classid><classname>湖南</classname></node1>
<node1 id="20"><classid>20</classid><classname>广东</classname></node1>
<node1 id="21"><classid>21</classid><classname>广西</classname></node1>
<node1 id="22"><classid>22</classid><classname>海南</classname></node1>
<node1 id="23"><classid>23</classid><classname>云南</classname></node1>
<node1 id="24"><classid>24</classid><classname>贵州</classname></node1>
<node1 id="25"><classid>25</classid><classname>内蒙古</classname></node1>
<node1 id="26"><classid>26</classid><classname>西藏</classname></node1>
<node1 id="27"><classid>27</classid><classname>陕西</classname></node1>
<node1 id="28"><classid>28</classid><classname>甘肃</classname></node1>
<node1 id="29"><classid>29</classid><classname>青海</classname></node1>
<node1 id="30"><classid>30</classid><classname>宁夏</classname></node1>
<node1 id="31"><classid>31</classid><classname>新疆</classname></node1>
<node1 id="32"><classid>32</classid><classname>香港</classname></node1>
<node1 id="33"><classid>33</classid><classname>澳门</classname></node1>
<node1 id="34"><classid>34</classid><classname>台湾</classname></node1>
<node1 id="41"><classid>41</classid><classname>选定1</classname></node1>
<node1 id="42"><classid>42</classid><classname>选定2</classname></node1>
<node1 id="51"><classid>51</classid><classname>国外1</classname></node1>
<node1 id="52"><classid>52</classid><classname>国外2</classname></node1>
<node1 id="53"><classid>53</classid><classname>国外3</classname></node1>
<node1 id="54"><classid>54</classid><classname>国外4</classname></node1>
</root>

...全文
170 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2008-02-04
  • 打赏
  • 举报
回复
也可以用dataview.
Tables[0].DefaultView.RowFilter
一品梅 2008-02-04
  • 打赏
  • 举报
回复
解决了别忘了解释一下错误原因,谢谢兄弟了,呵呵.
一品梅 2008-02-04
  • 打赏
  • 举报
回复
我觉得楼主对dataset操作不熟悉.
Tables[0].Select里面的参数只能是某一字段符合值,不能为集合
而传回值也就是搜索值可以是集合.
duping9626 2008-02-04
  • 打赏
  • 举报
回复
int row = strxml.Tables[0].Rows.Count;
读出来的行数是正确的40行
但是
DataRow[] dataRow = strxml.Tables[0].Select(strWhere);
dataRow的长度是32

---------------------毫无凝问,问题就在strWhere
一品梅 2008-02-04
  • 打赏
  • 举报
回复
我没有调试工具啊,呵呵.
strwhere传的是什么值?
luoxp520 2008-02-04
  • 打赏
  • 举报
回复
帖出来就是请那位兄弟帮忙调试一下。。。


<table width="820" height="40" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<asp:DataList id="DataList1" runat="server" RepeatColumns="19" RepeatDirection="Horizontal">
<ItemTemplate>
| <a href='/Pages/New_List_Province.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "ClassId")%>' title='<%# DataBinder.Eval(Container.DataItem, "ClassName")%>'><%# DataBinder.Eval(Container.DataItem, "ClassName")%></a>
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</table>
luoxp520 2008-02-04
  • 打赏
  • 举报
回复
strxml.ReadXml(xmlPath);
int row = strxml.Tables[0].Rows.Count;
读出来的行数是正确的40行
但是
DataRow[] dataRow = strxml.Tables[0].Select(strWhere);
dataRow的长度是32


急呀。。。要回家过年了。。。

一品梅 2008-02-04
  • 打赏
  • 举报
回复
strxml.ReadXml(xmlPath);
加断点看看DataTable
一品梅 2008-02-04
  • 打赏
  • 举报
回复
检查一下生成的DataSet.
luoxp520 2008-02-04
  • 打赏
  • 举报
回复

<node1 id="6"><classid>6</classid><classname>山东</classname></node1>
<node1 id="7"><classid>7</classid><classname>山西</classname></node1>
<node1 id="8"><classid>8</classid><classname>黑龙江</classname></node1>
<node1 id="9"><classid>9</classid><classname>吉林</classname></node1>
<node1 id="10"><classid>10</classid><classname>辽宁</classname></node1>

6到10不能读出
一品梅 2008-02-04
  • 打赏
  • 举报
回复
终于明白.楼主结贴.
strwhere="classid<'50'"
一品梅 2008-02-04
  • 打赏
  • 举报
回复
在XML里面不都是字符串的数据吗?
如果你要使cate的内容为整数,需要定义XML的SHEMA的
------------------------------------------
这句话很重要.
把修改后的strwhere贴出来吧,给大伙看看
谢谢您了.
一品梅 2008-02-04
  • 打赏
  • 举报
回复
问题解决,请结帖吧...呵呵.
一品梅 2008-02-04
  • 打赏
  • 举报
回复
哦,不好意思,第一句没看到.classid<50.呵呵.
一品梅 2008-02-04
  • 打赏
  • 举报
回复
在么?
一品梅 2008-02-04
  • 打赏
  • 举报
回复
对你的strwhere比较好奇,能帖出来么?看看.
luoxp520 2008-02-04
  • 打赏
  • 举报
回复
http://www.cnblogs.com/dudu/archive/2004/07/12/23537.html
正解

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧