0

C#の初心者が質問しているので、質問が愚かであるか、答えが本当に明白である場合、それはおそらく私がどのように機能するかを完全に理解していないためですXmlDataSource

次のXMLファイル「super-simple-xml.xml」(スペースを節約するためにフォーマットされたもの)が与えられた場合、

<items>
    <item> <one id="ms">Microsoft</one>  <two>MSFT</two> </item>
    <item> <one id="in">Intel</one>      <two>INTC</two> </item>
    <item> <one id="de">Dell</one>       <two>DELL</two> </item>
</items>

このようなリピーター、

<asp:Repeater id="SuperSimple" runat="server" OnItemCommand="SuperSimple_ItemDataBound">
    <HeaderTemplate>
        <table border="1"><tr><th>Company</th><th>Symbol</th><th>Wrong</th></tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><asp:Label Text=<%#XPath("one") %> runat="server" /></td>
            <td><asp:CheckBox Text=<%#XPath("two") %> runat="server" id="symbol" /></td>
        </tr>
    </ItemTemplate>  
    <FooterTemplate>
        </table>
        <asp:Button id="buttonOne" Text="Submit!" runat="server" />
    </FooterTemplate>
</asp:Repeater>

XMLをバインドするには、次のようにします。

private void Page_Load(object sender, EventArgs e) 
{
    XmlDataSource xmlSource = new XmlDataSource();
    xmlSource.DataFile = "super-simple-xml.xml";
    xmlSource.XPath = "items/item";

    if (!IsPostBack) // Did this to prevent an error
    {
        SuperSimple.DataSource = xmlSource;
        SuperSimple.DataBind();
    }
}

id各XMLエントリからクラスまたは変数にプルする方法を教えてください。

ここでの考え方は、リピーターにアイテムを表示しているということです。チェックボックスを追加したので、任意の<two>エントリをチェックして、[送信]を押します。投稿したら、チェックしたエントリを自分で作成したクラスに保存したいと思います。リピーターには参照可能なIDがあるので、取得と入力は非常に簡単です<one><two>しかし、idXMLの属性が呼び出されることはないので、その属性にアクセスする方法がわかりません。idデータを渡すときに参照するクラスにを入れたいです。これは可能ですか、どうすればよいですか?

4

2 に答える 2

1

属性を取得するには、XPath @ 構文を使用します。

<%# XPath("one/@id") %>

この式を HiddenField にバインドし、ポストバックでアクセスできます。

<asp:HiddenField runat="server" ID="hidID" Value='<%# XPath("one/@id") %>' />

にコマンド ボタンを追加します<ItemTemplate>

<asp:Button runat="server" ID="btnGetID" Text="Get ID" CommandName="GetID" />

OnItemCommand イベントで:

protected void SuperSimple_ItemDataBound(object sender, RepeaterCommandEventArgs e)
{
    //check the item type, headers won't contain the control
    if (e.CommandName == "GetID")
    {
        //find the control and put it's value into a variable
        HiddenField hidID = (HiddenField)e.Item.FindControl("hidID");
        string strID = hidID.Value;
    }
}

これは別の方法です (最初に投稿したのは、OnItemCommand イベントの名前に混乱し、DataBinding 時に値が必要だと思ったためです)。

あなたの<ItemTemplate>

<asp:Button runat="server" ID="btnGetID" OnClick="btnGetID_Click" Text="Get ID" />

分離コード:

protected void btnGetID_Click(object sender, e as EventArgs)
{
    //sender is the button
    Button btnGetID = (Button)sender;
    //the button's parent control is the RepeaterItem
    RepeaterItem theItem = (RepeaterItem)sender.Parent;
    //find the hidden field in the RepeaterItem
    HiddenField hidID = (HiddenField)theItem.FindControl("hidID");
    //assign to variable
    string strID = hidID.Value;
}
于 2012-11-14T23:07:02.703 に答える
0

問題が間違ったxml構造にある可能性があります。

http://forums.asp.net/t/1813664.aspx/1?getting+xml+node+id+number

于 2012-11-14T23:01:27.067 に答える