- - PR -
TreeViewの中に配置したチェックボックスの中で選択されているものを取得したい。(コーディング見直し)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-08 15:47
環境 ASP.NET[C#] Webサイト作成
1.新規にWebフォームを作成して、その中にTreeViewとボタンを作成します。 2.TreeViewはチェックボックスを持つように設定。 3.ボタン押下時にTreeViewの中でチェックボックスを選択されているものを取得して、ラベルに表示。 今、実現はできているのですが、コーディングでもっとシンプルにならないものかと、 調査をしているのですが、平行して皆様のお力を借りれたらと思います。 ご指導お願い致します。 TreeViewイメージ □大分類A □中分類1 □小分類1 □小分類2 □小分類3 □中分類2 □小分類1 □小分類2 □小分類3 □大分類B □中分類1 □小分類1 コード(※ツリービューを作る所は省略) //ボタン押下時 protected void Button1_Click(object sender, EventArgs e) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); //大分類 sb.Append(SelectNode(TV1.Nodes)); foreach (TreeNode tn in TV1.Nodes) { //中分類 sb.Append(SelectNode(tn.ChildNodes)); foreach (TreeNode tn2 in tn.ChildNodes) { //小分類 sb.Append(SelectNode(tn2.ChildNodes)); } } Label1.Text = sb.ToString(); } //ノードに日もづく子ノードで且つ選択されているものを取得 public static string SelectNode(TreeNodeCollection tnc) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (TreeNode tn in tnc) { if (tn.Checked) { sb.Append(tn.Text); } } return sb.ToString(); } | ||||
|
投稿日時: 2007-03-08 16:21
こんなん出来ました。
| ||||
|
投稿日時: 2007-03-08 16:39
ありがとうございます。
なんか、すっきりとしましたし、 さらにこの場合、階層を指定してないので、 ツリーの中身全部を出力できますね。 PS.最初は回帰的なコードに???となっていましたwww ご指導ありがとうございました。 | ||||
|
投稿日時: 2007-03-08 17:48
再帰だよね。 | ||||
|
投稿日時: 2007-03-08 19:16
取り出す順番に意味がないなら、キューやスタックを使って、再帰しない方法もあります。
ツリーの深さに依りますが、関数呼び出しのスタックは、ヒープに比べて少ないし、コストも大きく変わるので、両方の方法を知っておくとよいでしょう。 二?三日後にブログのネタになる予定。書けたらいいな... _________________ | ||||
|
投稿日時: 2007-03-09 09:46
>>Jitta様
キューやスタックがなんだかわからないのでちょっと勉強してきます。 | ||||
|
投稿日時: 2007-03-09 10:20
私も楽しみにしてます>Jittaさん
| ||||
|
投稿日時: 2007-03-09 21:30
急かされた?
エントリしました<wankuma.com> ただ、私は再帰呼び出し(関数の呼び出し)にコストがかかると思いこんでいたのですが、実験結果は再帰呼び出しの方が早かったです。これは、意外というか、認識を改めないといけないのか。あるいは、テストケースが悪かったのか。 _________________ |