0

我被难住了。在使用来自数据库的数据之前,我已经动态创建了 RadioButtonLists,但不是来自 XML。我不确定我是否应该使用相同的方法,但到目前为止我没有工作。这是我所拥有的(stAddress 是我从用户那里获得的价值):

XmlDocument xAddress = new XmlDocument();
xAddress.Load("http://myxmlservice/geocode?address=" + stAddress);
XmlNodeList xNodeList = xAddress.DocumentElement.SelectNodes("response");
XmlNode address = xNodeList.Item(0).SelectSingleNode("address");
XmlNode latlong = xNodeList.Item(0).SelectSingleNode("latlng");

rbMultiAdd.DataSource = xNodeList;
rbMultiAdd.DataTextField = address.InnerText;
rbMultiAdd.DataValueField = latlong.InnerText;
rbMultiAdd.DataBind();

我在 DataBind() = "DataBinding: 'System.Xml.XmlElement' 不包含名为 '330 S Valley View Blvd' 的属性上不断收到错误消息。"

330 S Valley View Blvd 是我的 XML 数据的结果之一。

由于数据是 XML,我应该这样做吗?

感谢您提供任何帮助。

4

3 回答 3

1

我使用@Josh 发布的内容作为参考来解决这个问题。

XmlNodeList xNodeList = xAddress.DocumentElement.SelectNodes("response");

var addrs = new List<KeyValuePair<string, string>>();

foreach (XmlNode xNode in xNodeList)
{
   var xAddr = xNode["address"].InnerText;
   var xLatLng = xNode["latlng"].InnerText;
   addrs.Add(new KeyValuePair<string, string>(xAddr, xLatLng));   
}
rbMultiAdd.DataSource = addrs;
rbMultiAdd.DataTextField = "Key";
rbMultiAdd.DataValueField = "Value";
rbMultiAdd.DataBind();
于 2012-05-01T15:50:49.740 回答
1
        //Thanks Psykopup
    // Above code works fine for me when I Put "attributes" 

     string strSP = "USP_XML_StoredProcedure";
            cmd = new SqlCommand();
            cmd.Connection = cnn;
            cmd.CommandText = strSP;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@Id", DbType.Int32).Value = 28;

            XmlReader reader = cmd.ExecuteXmlReader();

            if (reader.Read())
            {
                xdoc.Load(reader);
            }

            XmlNodeList xNodeList = xdoc.SelectNodes("/Parent/REC");

            var source = new List<KeyValuePair<string, string>>();
            foreach (XmlNode xNode in xNodeList)
            {
                var xCode = ***xNode.Attributes***["ID"].InnerText;
                var xText = ***xNode.Attributes***["Name"].InnerText;
                source.Add(new KeyValuePair<string, string>(xCode, xText));
            }

            rbListDistrict.DataSource = source;
            rbListDistrict.DataTextField = "Value";
            rbListDistrict.DataValueField = "Key";
            rbListDistrict.DataBind();
于 2012-09-14T04:10:27.307 回答
0

DataTextField并且DataValueField两者都引用对象上的属性名称。数据绑定使用反射来查找被绑定的项目。

在这种情况下,它是一种XmlNode类型。其中,由于错误状态没有“330 S Valley View Blvd”类型的属性,即InnerText.

在这种情况下,您可能必须将列表投影到中间类型上并使用它进行绑定。有很多不同的方法可以做到这一点,这里是一种:

XmlNodeList xNodeList = xAddress.DocumentElement.SelectNodes("response");

var addresses = xNodeList.Select(n => new KeyValuePair<String, String>(
    n.SelectSingleNode("address"), n.SelectSingleNode("latlng")))
    .ToList();

rbMultiAdd.DataSource = addresses;
rbMultiAdd.DataTextField = "Key";
rbMultiAdd.DataValueField = "Value";
rbMultiAdd.DataBind();
于 2012-04-30T17:56:18.937 回答