用于网格视图的Linq To Xml数据源无法正常工作。网格显示没有行

时间:2010-06-30 17:11:00

标签: asp.net linq data-binding linq-to-xml ienumerable

我从服务中获取了一些Xml。我希望它是我的aspx页面上的网格视图的数据源。这是一个Xml的样本

  <?xml version="1.0" encoding="utf-16" ?> 
<ArrayOfTripTollCompleteDC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TripTollCompleteDC>
     <TripTollId>5</TripTollId> 
     <DMSLaneModeID xsi:nil="true" /> 
     <HOVOnly>false</HOVOnly> 
     <CreateDateTime>2010-06-07T15:54:01.023</CreateDateTime> 
     <ConfigVTMSDelaySeconds>5</ConfigVTMSDelaySeconds> 
   </TripTollCompleteDC>

这是我的代码解析xml并尝试绑定网格。我在这里缺少什么?

var retVal = service.GetTripDetailsByTripID(tripId);

            var xmlTrips = XDocument.Parse(retVal);
            var tripTolls =
                from t in xmlTrips.Elements("TripTollCompleteDC")
                select new {
                    TripTollId = (int)t.Element("TripTollId")
                    , DMSLaneModeID = (int?)t.Element("DMSLaneModeID")
                    , HOVOnly = (bool)t.Element("HOVOnly")
                    , CreateDateTime = (DateTime)t.Element("CreateDateTime")
                    , ConfigVTMSDelaySeconds = (int)t.Element("ConfigVTMSDelaySeconds")
                };

            grdTripDetails.DataSource = tripTolls;
            grdTripDetails.DataBind();

我意识到这些是匿名类型。那是问题吗?我已经验证了服务正在返回如上所述的Xml。任何人都可以指出我正确的方向吗?非常感谢任何提示。

为了完整起见,这里是网格标记

 <asp:GridView runat="server" ID="grdTripDetails" />

干杯,
〜在圣地亚哥

1 个答案:

答案 0 :(得分:1)

试试这个:

 from t in xmlTrips.Root.Elements("TripTollCompleteDC")

注意在那里添加了Root。只有一个顶级元素,它不是TripTollCompleteDC。

需要自动生成列 - 我不知道网格视图。这提出了一个关于调试这种事情的有用的观点。这里有两个潜在的问题:

  • 解析和转换XML
  • 生成网格视图

您可以通过记录测试第一个点 - 以您通常记录的任何方式记录转换后的值。哎呀,你甚至可以使用一个单独的控制台应用程序进行测试。 (这就是我刚才所做的。)

您可以通过对某些数据进行硬编码并重新加载页面来测试第二点 - 它是否会显示您的预期结果?如果没有,请调整代码,直到它完成您想要的操作。

将这两个问题分开使得 更容易解决问题。