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 データの結果の 1 つです。

データが 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

DataTextFieldDataValueFieldどちらもオブジェクトのプロパティ名を参照します。データ バインディングでは、リフレクションを使用して、バインドされているアイテムを検索します。

この場合はXmlNodeタイプです。エラーが示すように、タイプ「330 S Valley View Blvd」のプロパティがありません。これは の値ですInnerText

この場合、おそらくリストを中間型に射影し、それをバインディングに使用する必要があります。これにはさまざまな方法がありますが、その 1 つを次に示します。

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 に答える