我在这里难过。我在使用数据库中的数据之前动态创建了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,我还有另一种方法吗?
感谢您的帮助。
答案 0 :(得分: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();
答案 1 :(得分: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();
答案 2 :(得分: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();