- PR -

TreeView(WEB)のSelectedValueについて

1
投稿者投稿内容
アオリイカ
会議室デビュー日: 2006/09/22
投稿数: 3
お住まい・勤務地: 東京
投稿日時: 2009-03-25 07:35
TreeViewコントロールについてお尋ねしたいのですが、
(開発環境:C#2.0、Webアプリケーション)

画面にはTreeViewがあり、選択された値(SelectedValue)をDBの検索条件にしています。
また、検索ボタンとクリアボタンがあり、
クリアボタンで検索条件をクリアしたいのですが、
TreeViewのSelectedValueは読み取り専用のため、クリアボタンを押したときにTreeViewのNodes.RemoveAt(0)でノードを削除し、再作成しています。

クリアボタンを押して、ノードを削除したときには、SelectedValueは""になっているのですが、
その後に検索ボタンを押したときには、SelectedValueに、クリアボタンを押す前の選択値が残っています。
また、Nodes.RemoveAt(0)の代わりにNodes.Clear()を試したりしたのですが、同じ現象です。

この現象についてご存知の片いらっしゃいませんでしょうか。
よろしくお願いいたします。


King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-03-25 10:00
> クリアボタンを押したときにTreeViewのNodes.RemoveAt(0)でノードを削除し、再作成しています。

Nodes.RemoveAt(0) では最初の Node しか削除されません。
Nodes.RemoveAt(0) を繰り返して Node を全て削除している、の間違いでしょうか。
間違いと仮定して下記のコードで実行しましたが、
クリア&再作成後は問題なく SelectedValue には何も入っていません。
何か他に処理をしていて、それが影響しているのではないでしょうか。

コード:
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        CreateTree();
    }
}

protected void searchButton_Click(object sender, EventArgs e)
{
    Response.Write("SelectedValue : " + myTreeView.SelectedValue);
}

protected void clearButton_Click(object sender, EventArgs e)
{
    while (0 < myTreeView.Nodes.Count)
    {
        myTreeView.Nodes.RemoveAt(0);
    }

    CreateTree();
}

private void CreateTree()
{
    myTreeView.Nodes.Add(new TreeNode("親1", "10"));
    myTreeView.Nodes.Add(new TreeNode("親2", "20"));

    myTreeView.Nodes[0].ChildNodes.Add((new TreeNode("子1−1", "11")));
    myTreeView.Nodes[0].ChildNodes.Add((new TreeNode("子1−2", "12")));
    myTreeView.Nodes[0].ChildNodes.Add((new TreeNode("子1−3", "13")));

    myTreeView.Nodes[1].ChildNodes.Add((new TreeNode("子2−1", "21")));
    myTreeView.Nodes[1].ChildNodes.Add((new TreeNode("子2−2", "22")));
    myTreeView.Nodes[1].ChildNodes.Add((new TreeNode("子2−3", "23")));
}

会議室デビュー日: 2005/02/09
投稿数: 18
投稿日時: 2009-03-25 10:09
単純に検索条件をクリアしたいのならば、
SelectedValue ではなくて TreeView.SelectedNode.Selected = false で、
未選択にできそうな気がします。
アオリイカ
会議室デビュー日: 2006/09/22
投稿数: 3
お住まい・勤務地: 東京
投稿日時: 2009-03-25 23:21
King さんのサンプルをこちらで試してみました。
こちらで望んでいる動きになりました。

>Nodes.RemoveAt(0) では最初の Node しか削除されません。
>Nodes.RemoveAt(0) を繰り返して Node を全て削除している、の間違いでしょうか。
につきましては、失礼しました。すべて削除しています。

また、た さんの
>単純に検索条件をクリアしたいのならば、
>SelectedValue ではなくて TreeView.SelectedNode.Selected = false で、
>未選択にできそうな気がします。
ですが、おっしゃるとおりで、クリアしたいだけですので今後はこちらで考えてみます。(このプロパティを知りませんでした・・・)

ですが、結論としましてはまだ解決していません。
開発中のものとサンプルとでどこが違っているのかもう一度、探してみます。

(開発中のページは ajax extension を使っていてTreeViewはUpdatePanelの中にあったり、MasterPageを使っているContentだったりするのですが、サンプルにも実装してみたところ、関係なさそうです。)

解決しましたらご報告します。
1

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