C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: TreeViewの子ノードを削除する方法について


(過去ログ 60 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■34788 / inTopicNo.1)  TreeViewの子ノードを削除する方法について
  
□投稿者/ しまうま (1回)-(2009/04/09(Thu) 09:57:57)
しまうま さんの Web サイト

分類:[.NET 全般] 

OS:WindowsXP
開発環境:
ASP.NET
VisualStudio2005
言語:C#

お世話になります。C#を始めて1ヶ月あまりの初心者です。
TreeViewの子ノードを削除する方法について教えてください。

TreeViewでノードを選択し、削除ボタンを押すと選択したノードが削除されるプログラムを作りたいのですが、親ノードはうまく削除されるのですが選択したノードが子ノードだと削除されません。
現在以下のソースで処理しております。
(参考Webサイトとはちょっと違いますが、参考通りだと「'System.Web.UI.WebControls.TreeNode' に 'Remove' の定義がありません。」とでます。TreeView1.SelectedNodeプロパティにはRemoveメソッドがないとの意味なのかと思っておりますが・・・)


protected void DelBtn_Click(object sender, EventArgs e)
{
if (TreeView1.SelectedNode != null)
{
TreeView1.Nodes.Remove(TreeView1.SelectedNode);
}
}

デバッグで見ると「SelectedNode」にはちゃんと選択したノード情報(Value値などが選択したノードの値)が入っています。
例:
(コントロール名:TreeView1)

-親ノード
 |→子ノード1
 |→子ノード2(選択)
「削除」ボタンクリック

<TreeView1.SelectedNodeのデバッグ内容>
- TreeView1.SelectedNode {System.Web.UI.WebControls.TreeNode} System.Web.UI.WebControls.TreeNode
Checked false bool
+ ChildNodes {System.Web.UI.WebControls.TreeNodeCollection} System.Web.UI.WebControls.TreeNodeCollection
DataBound false bool
DataItem null object
DataPath "" string
Depth 1 int
Expanded null bool?
ImageToolTip "" string
ImageUrl "" string
NavigateUrl "" string
+ Parent {System.Web.UI.WebControls.TreeNode} System.Web.UI.WebControls.TreeNode
PopulateOnDemand false bool
SelectAction Select System.Web.UI.WebControls.TreeNodeSelectAction
Selected true bool
ShowCheckBox null bool?
Target "" string
Text "子ノード2" string
ToolTip "" string
Value "子ノード2" string
ValuePath "親ノード/子ノード2" string
+ パブリックでないメンバ

**************************************************************

TreeViewの構成(プロパティとかメソッドとか)自体がまだ良くわかっていない上にプログラミング自体未熟者なため、この処理そのものが間違えているのか、ほかに何か処理が足りないのか(バインドとか?)すらわかりません。

Webサイトに乗っているプロパティなどもちょっと違ったりするので(同じC#と言っていても記載されているプロパティやメソッドがない場合があります。もちろんバージョンとかにも依存するとは思いますが・・・)他にメソッドなどがあるのかなど(Clearとか)も調べてみましたが、だめでした。
なぜ子ノードだと削除されないのか、教えてください!!(削除対象となるノードの指定の仕方が悪いのでしょうか?)
よろしくお願いします。

引用返信 編集キー/
■34791 / inTopicNo.2)  Re[1]: TreeViewの子ノードを削除する方法について
□投稿者/ .SHO (790回)-(2009/04/09(Thu) 12:33:59)
> protected void DelBtn_Click(object sender, EventArgs e)
> {
> if (TreeView1.SelectedNode != null)
> {
> TreeView1.Nodes.Remove(TreeView1.SelectedNode);
> }
> }

このソース自体には問題はないと思います。
どこか他に原因があるのではないでしょうか?
引用返信 編集キー/
■34800 / inTopicNo.3)  Re[2]: TreeViewの子ノードを削除する方法について
□投稿者/ 倉田 有大 (527回)-(2009/04/09(Thu) 21:42:32)
No34791 (.SHO さん) に返信
>> protected void DelBtn_Click(object sender, EventArgs e)
>> {
>> if (TreeView1.SelectedNode != null)
>> {
>> TreeView1.Nodes.Remove(TreeView1.SelectedNode);
>> }
>> }
>
> このソース自体には問題はないと思います。
> どこか他に原因があるのではないでしょうか?

ですよね。どこが間違ってるのかわからなかった。
引用返信 編集キー/
■34804 / inTopicNo.4)  Re[1]: TreeViewの子ノードを削除する方法について
□投稿者/ Azulean (352回)-(2009/04/09(Thu) 22:50:00)
ASP.NETの質問なのでWindows Formsと思いこまないように注意しましょう。

■No34788 (しまうま さん) に返信
> (参考Webサイトとはちょっと違いますが、参考通りだと「'System.Web.UI.WebControls.TreeNode' に 'Remove' の定義がありません。」とでます。TreeView1.SelectedNodeプロパティにはRemoveメソッドがないとの意味なのかと思っておりますが・・・)

> Webサイトに乗っているプロパティなどもちょっと違ったりするので(同じC#と言っていても記載されているプロパティやメソッドがない場合があります。もちろんバージョンとかにも依存するとは思いますが・・・)他にメソッドなどがあるのかなど(Clearとか)も調べてみましたが、だめでした。

参考サイトはWindows Formsの話です。
ASP.NETでは同じ名前のクラスでも、全く別物ですのでやり方が違うことが多いと思います。

ASP.NET(System.Web.UI.WebControls.TreeNode)
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.treenode.aspx
Windows Forms(System.Windows.Forms.TreeNode)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treenode.aspx

> なぜ子ノードだと削除されないのか、教えてください!!(削除対象となるノードの指定の仕方が悪いのでしょうか?)
> よろしくお願いします。
TreeView.NodesでRemoveを実行すると一番上のノード一覧から削除するイメージです。
子ノードだけ消したい場合は、その一つ上のノード一覧から削除しなければなりません。

イメージとしてはこんな感じかな?

TreeNode selectedNode = TreeView1.SelectedNode;
if (selectedNode == null) return;
TreeNode parentNode = selectedNode.Parent;
if (parentNode != null)
{
    parentNode.ChildNodes.Remove(selectedNode);
}
else
{
    TreeView1.Nodes.Remove(selectedNode);
}

引用返信 編集キー/
■34805 / inTopicNo.5)  Re[2]: TreeViewの子ノードを削除する方法について
□投稿者/ Azulean (353回)-(2009/04/09(Thu) 22:53:11)
ただ、私は普段、ASP.NETをやらないのでもっと効率的なやり方があるかもしれません。

# Windows Formsだと、TreeView.Nodes.Removeで消せるんだけどねー。
引用返信 編集キー/
■34807 / inTopicNo.6)  Re[3]: TreeViewの子ノードを削除する方法について
□投稿者/ 倉田 有大 (530回)-(2009/04/10(Fri) 01:33:48)
No34805 (Azulean さん) に返信
> ただ、私は普段、ASP.NETをやらないのでもっと効率的なやり方があるかもしれません。
>
> # Windows Formsだと、TreeView.Nodes.Removeで消せるんだけどねー。

あ、なるほど、微妙に違うんですね。
ASP.NETでも、ここらへんは同じと思い込んでいました。
引用返信 編集キー/
■34809 / inTopicNo.7)  Re[3]: TreeViewの子ノードを削除する方法について
□投稿者/ .SHO (791回)-(2009/04/10(Fri) 09:31:25)
> ただ、私は普段、ASP.NETをやらないのでもっと効率的なやり方があるかもしれません。
>
> # Windows Formsだと、TreeView.Nodes.Removeで消せるんだけどねー。

なるほど!
勉強になりました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -