none
TreeView(xml)とDataList(xml)の連携 RRS feed

  • 質問

  • http://65.55.20.225/ja-jp/magazine/13ftcwy9のチュートリアルを参考に、TreeViewのNodeを選択し、その選択されたNodeに関するデータをDataListに表示させたいのですが、お手上げ状態です。

    チュートリアルでは、GridView1(xml)、GridView2(xml)を使い、GridView1でレコードを選択するとGridView2でそれに関する下層のレコードを表示するというもので以下のようです。

     protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {  String isbn = (String)
    GridView1.DataKeys[GridView1.SelectedIndex].Value;
    XmlDataSource2.XPath =
    String.Format(
    "/bookstore/book[@ISBN='{0}']/comments/userComment",
    isbn);    }

    これをTreeViewとDataListで行うにはどのようにすればよいでしょうか?現状は以下のようです。

    いろいろとやってはみたのですが、根本的に基本がわかっていないため先に進めない状況です。

    どうかよろしくお願いします。

      protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {     String isbn = (String)
             TreeView1.SelectedNode(TreeView1.SelectedNode).Value; // SelectedNodeをメソドのように使用することはできません
            XmlDataSource2.XPath =
                String.Format(
                "/bookstore/book[@ISBN='{0}']/comments/userComment",
                isbn);   }


                <td class="style1">
                    <asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1"
                        ExpandDepth="1"
                        onselectednodechanged="TreeView1_SelectedNodeChanged">
                        <DataBindings>
                            <asp:TreeNodeBinding DataMember="book" ValueField="ISBN" />
                        </DataBindings>
                    </asp:TreeView>
                </td>
                <td class="style2">
                    <asp:DataList ID="DataList1" runat="server" DataSourceID="XmlDataSource2"
                        Width="241px" Height="140px">
                        <ItemTemplate>
                            rating:
                            <asp:Label ID="ratingLabel" runat="server" Text='<%# Eval("rating") %>' />
                            <br />
                            comment:
                            <asp:Label ID="commentLabel" runat="server" Text='<%# Eval("comment") %>' />
                            <br />
                        </ItemTemplate>
                    </asp:DataList>
                    <asp:XmlDataSource ID="XmlDataSource2" runat="server"
                        DataFile="~/Bookstore.xml" XPath="/bookstore/book/comments/userComment">
                    </asp:XmlDataSource>


    2011年11月1日 9:05

回答

  • どこまでできているのか分かりませんが、以下の部分のみが問題と理解
    して回答します。

    > String isbn =
    >   (String)TreeView1.SelectedNode(TreeView1.SelectedNode).Value;

    まず、以下の点を確認してください:

    (1) 変数 isbn に xml ファイルの ISBN の値をハードコーディングして
    (String isbn = "10-000000-001"; のようにして)直接渡せば DataList
    には期待通り目的のデータが表示されるのですか?

    (2) また、TreeView を生成するコードで、TreeNode.Value プロパティに
    ISBN の値を渡すように設定してあるのでしょうか?

    上記が OK であれば、問題のコードを以下のよう変更にすればうまくいく
    と思います。

    String isbn = TreeView1.SelectedNode.Value;

    うまくいかない場合は、上記 (1), (2) がそうなっていないからだと思いま
    す。確認してください。

     


    • 編集済み SurferOnWww 2011年11月1日 13:55 脱字訂正
    • 回答としてマーク taka_toshi 2011年11月2日 2:17
    2011年11月1日 13:39

すべての返信

  • どこまでできているのか分かりませんが、以下の部分のみが問題と理解
    して回答します。

    > String isbn =
    >   (String)TreeView1.SelectedNode(TreeView1.SelectedNode).Value;

    まず、以下の点を確認してください:

    (1) 変数 isbn に xml ファイルの ISBN の値をハードコーディングして
    (String isbn = "10-000000-001"; のようにして)直接渡せば DataList
    には期待通り目的のデータが表示されるのですか?

    (2) また、TreeView を生成するコードで、TreeNode.Value プロパティに
    ISBN の値を渡すように設定してあるのでしょうか?

    上記が OK であれば、問題のコードを以下のよう変更にすればうまくいく
    と思います。

    String isbn = TreeView1.SelectedNode.Value;

    うまくいかない場合は、上記 (1), (2) がそうなっていないからだと思いま
    す。確認してください。

     


    • 編集済み SurferOnWww 2011年11月1日 13:55 脱字訂正
    • 回答としてマーク taka_toshi 2011年11月2日 2:17
    2011年11月1日 13:39
  • いつもありがとうございます。

    >String isbn = TreeView1.SelectedNode.Value;

    に変更したところ見事に動作しました。感激、、、。

    (1)でも表示はできました。

    チュートリアルのString isbn = (String)・・・・・・(文字isbnは文字?)

    の意味が解らず、次のGridView1.DataKeys[GridView1.SelectedIndex].Value;

    から String isbn = TreeView1.SelectedNode.Value;を引き出すことは考えも及びませんでした。

    基本を勉強しなくては、、、、。

    これからもよろしくお願いします。

    ありがとうございました。

    2011年11月2日 2:17