ASP.NET回发的树状的选择复选框 [英] ASP.NET PostBack on selecting checkbox of treeview

查看:149
本文介绍了ASP.NET回发的树状的选择复选框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个asp.net项目和工作在C#。

在项目中,我有一个复选框列表框数据绑定。

当用户点击一个复选框,它应该为一个例子更新标签/文本框。

问题是,它不更新标签/文本框,直到我点击一个按钮,做回发。我会怎么称呼上的复选框更改事件回传,自从OnTreeNodeCheckChanged事件看起来只闪光一次回传被触发?
这甚至是一个好主意(希望每次一个复选框已更改时间打电话回发)

- 更新code Snippet--
ASP

 < ASP:TreeView的ID =treevCourses=服务器的AutoPostBack =真ShowCheckBoxes =所有WIDTH =100%
                OnTreeNodeCheckChanged =check_changedHEIGHT =16像素ImageSet =联系人>

(有试过在C#部分的处理程序。)
C#

 保护无效check_changed(对象发件人,TreeNodeEventArgs E)
        {
        lblTest.Text =TestText;
        }

(也试过有它在脚本部分)

 无效check_changed(对象发件人,EventArgs的发送)
    {
        lblTest.Text =TestText;
    }

数据绑定到TreeView(出现这种情况的一个按钮回发)

 的foreach(DataRow的行中ds.Tables [0] .Rows)
                {
                    树节点节点=新的TreeNode(行[课程名]的ToString(),行[课程名]的ToString());
                    // node.PopulateOnDemand = TRUE;
                    treevCourses.Nodes.Add(节点);
                }
                //来自那里的话题= parentId的选择topicId。
                DS = myConClass.returnSqlDataset(选择cd.courseName,CT [日期]从courseDetails CD上cd.courseId = ct.courseId加入courseTimes克拉);                的foreach(在treevCourses.Nodes树节点树节点)
                {
                    的foreach(DataRow的行中ds.Tables [0] .Rows)
                    {
                        如果(行[课程名]。的ToString()== treenode.Value)
                        {
                            树节点节点=新的TreeNode(行[日]的ToString(),行[日]的ToString());
                            treenode.ChildNodes.Add(节点);
                        }
                    }
                }


解决方案

有上TreeView控件没有的AutoPostBack 属性。而作为每<一个href=\"http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treeview.ontreenodecheckchanged.aspx\">MSDN,在 TreeNodeCheckChanged 事件出现时,在岗位之间的 TreeView控件控制变化状态的复选框,将服务器

您需要其他人做一些事情,比如提到的此链接

1)添加上单击属性上的TreeView1页面加载

 保护无效的Page_Load(对象发件人,EventArgs的发送)
{
     TreeView1.Attributes.Add(的onclick,postBackByObject());
}

2)添加Java脚本函数,做回发

 &LT;脚本类型=文/ JavaScript的&GT;     功能postBackByObject()
     {
         变种O = window.event.srcElement;
         如果(o.tagName ==输入&放大器;&安培; o.type ==复选框)
        {
           __doPostBack(,);
        }
    }
   &LT; / SCRIPT&GT;

3)。实施 TreeNodeCheckChanged 事件

 保护无效TreeView1_TreeNodeCheckChanged(对象发件人,TreeNodeEventArgs E)
        {
            // 做东西
        }

I have an asp.net project and working in C#.

In my project I have a databound listbox that has checkboxes.

When the user clicks on a checkbox it should for an example update a label/textbox.

The thing is, it doesnt update the label/textbox until I click on a button that does a postback. How will I Call a postback on the checkbox changed event, since the "OnTreeNodeCheckChanged" event looks like it only fires once the postback has been triggered? Is this even a good idea (to want to call a postback every time the a checkbox has been changed)

--Updated code Snippet-- Asp

 <asp:TreeView ID="treevCourses" runat="server" AutoPostBack="true" ShowCheckBoxes="All" Width="100%"
                OnTreeNodeCheckChanged="check_changed" Height="16px" ImageSet="Contacts">

(Tried having the handler in the C# part.) C#

protected void check_changed(object sender, TreeNodeEventArgs e)
        {
        lblTest.Text = "TestText";
        }

(Also tried having it in the script part)

void check_changed(object sender, EventArgs e)
    {
        lblTest.Text = "TestText";
    }

Binding data to the Treeview (this happens on a button postback)

foreach (DataRow row in ds.Tables[0].Rows)
                {
                    TreeNode node = new TreeNode(row["courseName"].ToString(), row["courseName"].ToString());
                    //  node.PopulateOnDemand = true;
                    treevCourses.Nodes.Add(node);
                }


                //select from topic where parentId = topicId.
                ds = myConClass.returnSqlDataset("select cd.courseName,ct.[date] from courseDetails cd join courseTimes ct on cd.courseId = ct.courseId");

                foreach (TreeNode treenode in treevCourses.Nodes)
                {
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        if (row["courseName"].ToString() == treenode.Value)
                        {
                            TreeNode node = new TreeNode(row["date"].ToString(), row["date"].ToString());
                            treenode.ChildNodes.Add(node);
                        }
                    }       
                }

解决方案

There is no AutoPostBack property on TreeView. And as per the MSDN, The TreeNodeCheckChanged event is raised when a check box in the TreeView control changes state between posts to the server

You need to do something else, like mentioned on this link

1) Add on click attribute to TreeView1 on page load

protected void Page_Load(object sender, EventArgs e)
{
     TreeView1.Attributes.Add("onclick", "postBackByObject()");
}

2) add java script function and do the post back

    <script type="text/javascript">

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

3). Implement TreeNodeCheckChanged event

protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
        {
            // do stuff
        } 

这篇关于ASP.NET回发的树状的选择复选框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆