- PR -

TreeViewコントロールの子ノードのテキストが取得できないです

1
投稿者投稿内容
ラーミア
会議室デビュー日: 2004/02/23
投稿数: 14
投稿日時: 2004-03-29 10:52
よろしくお願いします。

ASP.NET(VB.NET)でTreeViewコントロール(MSからdownload)を使用して開発しています。
選択されたノードのテキストが取得したいです。
以下のプロパティで親ノードのテキストは取得できるのですが、
子ノードのテキストが取得できません。

myString = TreeView1.Nodes(TreeView1.SelectedNodeIndex).Text

日本語版のTreeViewが微妙だといううわさを聞いたのですが関係あるのでしょうか?

ご存知の方ご教授お願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-29 11:26
 面倒ですが、上から順にたどってください。
コード:
Private Function IndexToNodeString( _
 ByVal Nodes As Microsoft.Web.UI.WebControls.TreeNodeCollection _
 , ByVal SelectString As String) As String
	' 選択文字列は、ピリオドをデリミタとして、リーフの数だけ続く
	' ノードを特定するために、上から順に選択されているノードを特定する
	Dim delm As Integer
	Dim index As Integer
	Dim startIndex As Integer = 0
	Dim appointed As String = ""

	Do
		delm = SelectString.IndexOf(".", startIndex)
		If delm < 0 Then
			index = SelectString.Substring(startIndex)
			startIndex = -1
		Else
			index = SelectString.Substring(startIndex, delm - startIndex)
			startIndex = delm + 1
		End If
		appointed = Nodes(index).Text
		Nodes = Nodes(index).Nodes
	Loop While startIndex > 0

	IndexToNodeString = appointed
End Function

ラーミア
会議室デビュー日: 2004/02/23
投稿数: 14
投稿日時: 2004-03-29 17:14
Jittaさん、BIGありがとうございます、100%理解できていませんが動きました。
インデックスプロパティは文字列なのですね。

ついでといっては何ですが、クライアント側のスクリプト(vbscript)でも、
ノードテキストを取得したいのですが、やっぱりできません。

ご存知でしたらご教授お願いします。

よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-29 21:39
引用:

ラーミアさんの書き込み (2004-03-29 17:14) より:

Jittaさん、BIGありがとうございます、100%理解できていませんが動きました。


 それは困りました。理解して、使ってください。私があなたのプロジェクトをメンテナンスすることはできないので、何らかの仕様変更(たとえば、逆に、インデックスが必要になる、なんてことはありませんか?)があると、あなたがメンテナンスしなければならないからです。

 基本は、最初のコメントの通り、「ノードを特定するために、上から順に選択されているノードを特定する」です。インデックスは、デバッガでみればわかりますが、「1.3.2.1」の形で入っています。

 まず、delm = String.IndexOf()で、SelectStringの、StartIndex位置から検査を始めて、"."ピリオドがある文字位置をdelmに代入します。

 delmが0未満ならば、ピリオドは見つかりませんでした。indexを最後の位置、startIndexから後ろの文字列をintegerに変換した値として、startIndexには最終を示す、-1を入れます。
 delmが0以上ならば、indexをselectStringのstartIndex文字目からdelm-startIndex文字文取り出した文字列をintegerに変換した値にします。startIndexには、次の検索位置を示すdeml+1を入れます。

 指定文字列を指すappointedに、node配列のindex番目のTextプロパティ、つまり表示している文字列を入れます。

 Nodesは、1つ子に下がります。

 これを、startIndexが0以上の間続けることで、階層を順に下がります。


 もっといい方法があって、splitすると、階層の個数分、配列ができるんですよね。そうすると、もっとすっきり、わかりやすくなるのですが、かなり前に作ったものなので、、、


 クライアント側で取得する方法は、わかりません。あしからず。
1

スキルアップ/キャリアアップ(JOB@IT)