質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

6911閲覧

TreeviewのNodeに設定したValue値を取得したいです。

culych

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/04/23 05:58

編集2020/04/23 10:15

実装したいこと

ASP.NET Web Formsで以下の一連の流れを実装したいです。

  1. 画面左側にTreeView表示、画面右側にTreeView詳細情報表示用divを用意
  2. DBから取得したデータをTreeViewにバインド
  3. 各ノードのvalue値にテーブルの主キーを設定
  4. 画面上で選択されたノードのvalue値を取得
  5. value値(主キー)に該当するテーブルのレコードを取得
  6. 取得した値を詳細画面表示用divに表示

上記の流れの中でTreeViewから選択したノードのvalue値を取得する方法がわかりません。

どなたかご教授いただければ幸いです。

また、不足している情報がありましたら随時更新しますので、ご指摘ください。

TreeView表示コード

HTML

1<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="TreeView.aspx.cs" Inherits="TreeView.TreeView" %> 2 3<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5</asp:Content> 6 7<asp:Content ID="Content2" ContentPlaceHolderID="holder" runat="server"> 8 <div class="board-body-margin"> 9 <div class="caption board-margin-bottom"> 10 <asp:Label ID="lblTitle" runat="server" Text="掲示板" CssClass="title"></asp:Label> 11 </div> 12 <asp:LinkButton ID="btnRegist" runat="server" OnClick="btnRegist_Click" OnClientClick="return btnRegister_Click()" class="portalBtn board-margin-bottom">新規登録</asp:LinkButton> 13 <hr /> 14 <div id="divTree" runat="server" style="width: 20%; float: left"> 15 <asp:TreeView ID="TreeView1" runat="server"></asp:TreeView> 16 </div> 17 <div id="divDetail" runat="server" style="width: 80%; float: right"></div> 18 </div> 19</asp:Content>

C#

1using System; 2using System.Collections.Generic; 3using System.Data; 4using System.Linq; 5using System.Web; 6using System.Web.UI; 7using System.Web.UI.WebControls; 8 9namespace TreeView 10{ 11 public partial class TreeView : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 if (IsPostBack == true) { return; } 16 set_treeMenuList(); 17 } 18 19 protected void btnRegist_Click(object sender, EventArgs e) 20 { 21 22 } 23 24 public void set_treeMenuList() 25 { 26 TreeNode parent = new TreeNode(); 27 TreeNode child = new TreeNode(); 28 29 string strSql = $" SELECT p.parentID as pID,p.BoardName as pName,c.childID as cID,c.TreadName as cName" 30 + $" FROM parent p" 31 + $" INNER JOIN child c" 32 + $" ON p.parentID=c.childID"; 33 34 //データベースに接続 35 DataTable dtTree = ----; 36 37 foreach (DataRow rowParent in dtTree.Rows) 38 { 39 // 親ノード作成 40 if (parent.Value != rowParent["pID"].ToString()) 41 { 42 parent = new TreeNode(); 43 parent.Value = rowParent["pID"].ToString(); 44 parent.Text = rowParent["pName"].ToString(); 45 TreeView1.Nodes.Add(parent); 46 47 foreach (DataRow rowChild in dtTree.Rows) 48 { 49 // 子ノード作成 50 if (parent.Value == rowChild["pID"].ToString()) 51 { 52 child = new TreeNode(); 53 child.Value = rowChild["cID"].ToString(); 54 child.Text = rowChild["cName"].ToString(); 55 parent.ChildNodes.Add(child); 56 } 57 } 58 } 59 } 60 } 61 } 62} 63 64

環境

ASP.net
C#
VisualStudio2017
Windows10
.NET 4.8
SQLServer
→エディション:MicrosoftSQLServerDeveloper(64-bit)
→バージョン:15.0.2000.5
SQLServerManagementStudio2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/23 06:23

TreeView ということは ASP.NET Web Forms アプリの話ということで良いのですよね? 開発環境を書いてください。OS, .NET のバージョン、DB サーバーは何でそのバージョン・エディションは何かなど。(SQL Server Management Studio は DB サーバーではなく単なるツールです)
culych

2020/04/23 06:40

ご指摘ありがとうございます。 ご指摘の通り、ASP.NET Web Forms アプリの話です。 環境情報を修正いたしました。ご確認いただければ幸いです。
退会済みユーザー

退会済みユーザー

2020/04/23 06:48

> ASP.NET Web Forms アプリの話です それも質問欄を編集して追記していただくようお願いします。 > .NET 4.0 .NET 4.0 は間違いないですか? すでにサポートされてないはずですけど。
culych

2020/04/23 06:56

再度ご指摘いただきありがとうございます。 >それも質問欄を編集して追記していただくようお願いします。 追記いたしました。 >.NET 4.0 は間違いないですか? すでにサポートされてないはずですけど。 確認する箇所を間違えておりました。再度確認したところ.NET4.8でした。失礼いたしました。
退会済みユーザー

退会済みユーザー

2020/04/23 07:07 編集

動的に TreeView を作って pnlTree に Page_Load イベントで初期画面の時だけ Add しているようですが、動的にやる意味があるのですか? そのやり方ですと、ポストバックしたときは TreeView は表示されなくなってしまうはずですけど?(動的に生成したコントロールは、ポストバックの際も毎回動的に生成する必要があります。また、そうすると毎回クエリを SQL Server に投げて動的に TreeView を生成するという無駄なことになります) そのあたりから見直した方がよさそうです。 > 3. 画面上でクリックされたノードの情報を取得 「ノードの情報」とは具体的に何ですか? コードを見る限り分からなかったのですが・・・
culych

2020/04/23 07:28

ご指摘ありがとうございます。 初心者ゆえ解釈違いがありましたらご指摘ください。 >動的に TreeView を作って pnlTree に Page_Load イベントで初期画面の時だけ Add しているようで >すが、動的にやる意味があるのですか? ノードの追加が多く、その度にコードに追加分を書き足すのが手間だと思いました。DBに値を追加すれば、自動でノードが追加されるようにしたく、動的にしています。 >「ノードの情報」とは具体的に何ですか? コードを見る限り分からなかったのですが・・・ 情報が不足しておりました。 valueに値を設定し、その値からDBのデータを取得しようと考えておりました。
退会済みユーザー

退会済みユーザー

2020/04/23 07:58

> ノードの追加が多く、その度にコードに追加分を書き足すのが手間だと思いました。DBに値を追加すれば、自動でノードが追加されるようにしたく、動的にしています。 私の言っていることが理解できてないようです。 C# のコードで new TreeView してそれを Panel に Add するのがダメなのです。静的にページに TreeView を配置し(ツールボックスから TreeView をページにドラッグ&ドロップするのと同じ)、その TreeView に DB から取得したデータをバインドするのです。わかります? Microsoft のドキュメントなどにサンプルがあると思いますので探してみてください。
退会済みユーザー

退会済みユーザー

2020/04/23 08:06

> valueに値を設定し、その値からDBのデータを取得しようと考えておりました。 例えば(あくまで例えばです)、Value に設定する値というのはテーブルの主キーで、クリックされた Node から Value すなわち主キーの値を取得し、それで DB のテーブルから主キーに該当するレコードを取得して別の Panel に表示するいうような話ですか? ← この例のレベルで、きちんと書いてください。
culych

2020/04/23 08:16

>C# のコードで new TreeView してそれを Panel に Add するのがダメなのです。静的にページに TreeView を配置し(ツールボックスから TreeView をページにドラッグ&ドロップするのと同じ)、その TreeView に DB から取得したデータをバインドするのです。わかります? おっしゃっていることが理解できました。 >例えば(あくまで例えばです)、Value に設定する値というのはテーブルの主キーで、クリックされた Node から Value すなわち主キーの値を取得し、それで DB のテーブルから主キーに該当するレコードを取得して別の Panel に表示するいうような話ですか? またしても説明不足でした。まさにそのような動作を実装したいと考えております。
退会済みユーザー

退会済みユーザー

2020/04/23 09:35

では、それらをベースに考え直して、質問を表題の「動的に追加したTreeview」から書き換えるようにしてください。今のままでは、少なくとも自分はとてもフォローできる内容でありませんので、書き換えていただけない限り撤退します。
culych

2020/04/23 10:16

ご指摘ありがとうございます。 全体的に修正をしてみました。 ご確認をお願いいたします。 よろしければご助言をお願いいたします。
退会済みユーザー

退会済みユーザー

2020/04/23 10:54 編集

TreeView.SelectedNodeChanged イベントにハンドラをアタッチして、そのハンドラの中で TreeView.SelectedNode プロパティで選択された TreeNode を取得し、TreeNode.Value プロパティで「value値(主キー)」を取得できるか試してみてください。 それで期待通り主キーが取得できていれば、その後取得した主キーを使って DB のテーブルからレコードが取得できるはずです。
culych

2020/04/23 12:05

ご助言ありがとうございます。 現在、開発環境が手元に無いため、明日改めて試させていただきます。
culych

2020/04/23 23:25

TreeView.SelectedNodeChanged イベントにハンドラをアタッチ、ハンドラの中で「TreeView1.SelectedNode.Value」とする事で無事にvalue値を取得する事が出来ました。 この度は大変お世話になりました。また機会がありましたらご助言いただければと思います。 本質問とは関係の無い事お許しください。 SurferOnWww様をベストアンサーとして選択したいのですが、回答にコメントが無い為選択する事ができません。この場合どうするべきでしょうか?
退会済みユーザー

退会済みユーザー

2020/04/24 00:01

お手数ですが、ご自分で上の質問者さんのコメントの解決策を解答欄に書いてベストアンサーを付けてクローズしていただくようお願いします。
culych

2020/04/24 00:24

承知いたしました。ありがとうございます。
guest

回答1

0

自己解決

TreeView.SelectedNodeChanged イベントにハンドラをアタッチ、ハンドラの中で「TreeView1.SelectedNode.Value」とする事でvalue値を取得する事が出来ました。

投稿2020/04/24 00:29

culych

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問