Member 14141512 Ответов: 1

Treeview с чекбоксами


У меня есть treeview, и я ставлю флажок в каждом treenode.Я пишу событие treeview_treenodeCheckChanged для того, чтобы, если parentnode проверен, его дочерние узлы были проверены.Но сначала это событие не сработало, а потом я погуглил и обнаружил, что должен успешно использовать метод postback для этого события.Теперь событие работает, но я не хочу, чтобы мой проект обновлялся в каждый клик.Пожалуйста, помогите мне..

Что я уже пробовал:

protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
        {
            if (e.Node.ChildNodes.Count > 0 && e.Node.Checked)
            {
                foreach (TreeNode childnode in e.Node.ChildNodes)
                {
                    childnode.Checked = true;
                }
            }
            else if (e.Node.ChildNodes.Count > 0 && !e.Node.Checked)
            {
                foreach (TreeNode childnode in e.Node.ChildNodes)
                {
                    childnode.Checked = false;
                }
            }
            else if (e.Node.ChildNodes.Count == 0 && e.Node.Checked)
            {
                e.Node.Parent.Checked = true;
            }
            else if (e.Node.ChildNodes.Count == 0 && Count_checkedChilds(e.Node.Parent) == 0)
            {
                e.Node.Parent.Checked = false;
            }
        }

protected int Count_checkedChilds(TreeNode node)
        {
            int k = 0;
            foreach (TreeNode childnode in node.ChildNodes)
            {
                if (childnode.Checked == true)
                {
                    k++;
                }
            }
            return k;
        }




 <script type="text/javascript">
        function postBackByObject() {
            var o = window.event.srcElement;
            if (o.tagName == "INPUT" && o.type == "checkbox") {
                __doPostBack('TreeView1', '');
            }
        }
</script>

1 Ответов

Рейтинг:
2

OriginalGriff

Ты действительно не хочешь этого делать. На веб-сайте ваш код C# всегда - всегда - выполняется на сервере, а не на клиенте, и это означает, что если вы обрабатываете элементы пользовательского интерфейса в C#, то данные должны совершить круговую поездку на сервер и обратно, чтобы обновить дисплей. Это означает, что скорость подключения к интернету на обоих концах определяет, как быстро будет выполняться действие пользователя, прежде чем он увидит результат - и чем больше пользователей у вас есть, тем медленнее это происходит ...

Вы действительно не должны делать это на сервере (даже если вы используете Ajax, чтобы предотвратить обратную передачу всей страницы) - вы должны делать это локально, в javascript.

Начать здесь: как проверить.снимите флажок treeview parent and child с помощью javascript? | На форумах ASP.NET [^] и если это не поможет, начните читать: проверка родителя в treeview javascript - поиск Google[^]