Treeview动态添加用户控件 取值和传值

Treeview动态添加用户控件 取值和传值

今天做了很好玩的树,是treeview与用户控件之间进行交互先看效果:

Treeview动态添加用户控件 取值和传值

主要功能:勾选子节点的checkbox,右边会动态加载该节点的信息,出现TextBox让用户填写节点的值,点击保存按钮将文本框的值保存到对应的节点。

里面涉及到了asp执行ascx页面里的事件,并取值。

这是前台的代码:CustomXMLmanager2.aspx

Treeview动态添加用户控件 取值和传值
Treeview动态添加用户控件 取值和传值
View Code

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CustomXMLmanager2.aspx.cs" Inherits="usexml.CustomXMLmanager2" %>
2
3 <%@ Register src="Custom2.ascx" tagname="Custom2" tagprefix="uc1" %>
4
5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
7 <html xmlns="http://www.w3.org/1999/xhtml">
8 <head runat="server">
9 <title></title>
10 </head>
11 <body>
12
13 <script language="javascript" type="text/javascript">
14
15 // 点击复选框时触发事件
16
17 function postBackByObject() {
18
19 var o = window.event.srcElement;
20
21 if (o.tagName == "INPUT" && o.type == "checkbox") {
22
23 __doPostBack("", "");
24
25 }
26
27 }
28
29 </script>
30 <form id="form1" runat="server">
31 <div>
32 <asp:ScriptManager ID="ScriptManager1" runat="server">
33 </asp:ScriptManager>
34 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
35 <ContentTemplate>
36 <table width="100%" style="border: 2px dotted #008080"><tr><td width="30%">
37
38
39 <asp:TreeView ID="TreeView1" runat="server" ImageSet="Simple" ShowCheckBoxes="Leaf"
40 ShowLines="True"
41 ViewStateMode="Enabled">
42 <HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
43 <Nodes>
44 <asp:TreeNode Text="个人信息" Value="海洋信息数据集">
45 <asp:TreeNode Text="名字" Value="数据名称"></asp:TreeNode>
46 <asp:TreeNode Text="性别" Value="数据格式"></asp:TreeNode>
47 <asp:TreeNode Text="年龄" Value="数据摘要"></asp:TreeNode>
48 <asp:TreeNode Text="帅不帅" Value="帅不帅"></asp:TreeNode>
49 <asp:TreeNode Text="漂不漂亮" Value="漂不漂亮"></asp:TreeNode>
50 </asp:TreeNode>
51 </Nodes>
52 <NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black"
53 HorizontalPadding="0px" NodeSpacing="0px" VerticalPadding="0px" />
54 <ParentNodeStyle Font-Bold="False" />
55 <SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD"
56 HorizontalPadding="0px" VerticalPadding="0px" />
57 </asp:TreeView>
58
59
60
61
62
63 </td>
64 <td style="background-color: #008080; width: 2px"></td>
65 <td>
66
67
68
69
70
71
72
73 <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
74
75
76
77
78
79
80 </td>
81
82 </tr></table>
83 <div>
84
85 </div>
86 </ContentTemplate>
87 </asp:UpdatePanel>
88
89 </div>
90 <div align="center"><asp:Button ID="Button1" runat="server" Text="保存"
91 οnclick="Button1_Click" /></div>
92 </form>
93 </body>
94 </html>

这是后台代码:CustomXMLmanager2.aspx.cs

Treeview动态添加用户控件 取值和传值
Treeview动态添加用户控件 取值和传值
View Code

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.UI;
6 using System.Web.UI.WebControls;
7 using System.Reflection;
8
9 namespace usexml
10 {
11 public partial class CustomXMLmanager2 : System.Web.UI.Page
12 {
13 protected void Page_Load(object sender, EventArgs e)
14 {
15
16 if (IsPostBack)
17 {
18
19
20 //if (ViewState["node"] != null)
21 //{
22 // nodes1();
23
24 //}
25
26 nodes1();
27
28
29 }
30
31
32
33
34
35
36
37 TreeView1.Attributes.Add("onclick", "postBackByObject()");
38
39 }
40
41
42 private void nodes1()
43 {
44 int tg = 0;
45 foreach (TreeNode nod in TreeView1.CheckedNodes)
46 {
47
48 nod.Target = tg.ToString();
49 Custom2 uc = (Custom2)LoadControl("Custom2.ascx");
50 uc.Nodname = nod.Text;
51 uc.Nodvalue = nod.Value;
52
53 uc.Nodetag = nod.Target;
54
55 PlaceHolder1.Controls.Add(uc);
56
57 tg++;
58
59 }
60
61
62 }
63
64
65 protected void Button1_Click(object sender, EventArgs e)
66 {
67 for (int i = 0; i < PlaceHolder1.Controls.Count; i++)
68 {
69 UserControl uc2 = (UserControl)PlaceHolder1.Controls[i];
70
71 Type ucType = uc2.GetType();
72
73 //用MethodInfo类来获取用户控件中的方法.
74
75 MethodInfo UcMethod = ucType.GetMethod("GetText");// Button1_Click控件中的方法。
76
77 //在此处页面的方法中执行用户控件中的方法.
78
79 object[] argumentArrray = new object[0];
80
81 UcMethod.Invoke(uc2, new object[0]);//调用用户控件中的方法。此处执行了!!。
82
83 foreach (TreeNode nod in TreeView1.CheckedNodes)
84 {
85
86
87 PropertyInfo UctextName = ucType.GetProperty("PicName");
88 PropertyInfo tag = ucType.GetProperty("Nodetag");
89 if (nod.Target == tag.GetValue(uc2, null).ToString())
90 {
91
92 nod.Value = UctextName.GetValue(uc2, null).ToString();//获取了上传的文件名信息。并显示在 page 页面上。
93
94 }
95
96
97 }
98
99
100 }
101
102 }
103
104 }
105 }

这是用户控件的前台:Custom2.ascx

Treeview动态添加用户控件 取值和传值
Treeview动态添加用户控件 取值和传值
View Code

1 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Custom2.ascx.cs" Inherits="usexml.Custom2" %>
2 <div>
3 <asp:Label ID="Label1" runat="server" Text="Label" ForeColor="#006666"></asp:Label>
4 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
5 当前节点的值:<asp:Label ID="Label2" runat="server" Text="Label" ForeColor="#003366"></asp:Label>
6
7 </div>

这是用户控件的后台:Custom2.ascx.cs

Treeview动态添加用户控件 取值和传值
Treeview动态添加用户控件 取值和传值
View Code

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.UI;
6 using System.Web.UI.WebControls;
7
8 namespace usexml
9 {
10 public partial class Custom2 : System.Web.UI.UserControl
11 {
12
13
14 private string nodname = "";
15 public string nodvalue = "";
16 private string nodtag = "";
17 private string picname = "";
18 public string Nodname
19 {
20
21
22 get
23 {
24
25 return nodname;
26
27 }
28
29 set
30 {
31
32
33 nodname = value;
34
35 }
36
37
38 }
39
40 public string Nodvalue
41 {
42
43
44 get
45 {
46
47 return nodvalue;
48
49 }
50
51 set
52 {
53
54
55 nodvalue = value;
56
57 }
58
59
60 }
61
62 public string Nodetag
63 {
64
65
66 get
67 {
68
69 return nodtag;
70
71 }
72
73 set
74 {
75
76
77 nodtag = value;
78
79 }
80
81
82 }
83
84 public string PicName
85 {
86
87 get { return picname; }
88
89 set { picname = value; }
90
91 }
92
93 protected void Page_Load(object sender, EventArgs e)
94 {
95 Label1.Text = nodname+"";
96
97 Label2.Text = nodvalue;
98
99
100 }
101
102 public void GetText()
103 {
104
105
106 picname = TextBox1.Text;
107 TextBox1.Text = "";
108 Label2.Text = picname;
109
110
111
112 }
113
114
115 }
116 }

主要功能已实现,下一步我要将其结合到XML去,实现对XML文档的自定义扩展。

转载于:https://www.cnblogs.com/panan/archive/2011/12/28/2304854.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110496.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 【转载】D3D深度测试和Alpha混合

    【转载】D3D深度测试和Alpha混合

  • let/const 的变量提升与暂时性死区

    let/const 的变量提升与暂时性死区在面试或一些文章中提到var和let/const区别时,总说var有变量提升,let/const不存在变量提升,这种说法是错误的.var和let/const都有变量提升,但是let/const暂时性死区的存在要求调用该类变量前必须先经过显式赋值

  • Android开发:CompoundButton.onCheckedChangeListener和RadioGroup.onCheckedChangeListener冲突问题「建议收藏」

    Android开发:CompoundButton.onCheckedChangeListener和RadioGroup.onCheckedChangeListener冲突问题「建议收藏」在今天的开发工作当中,要同时用到ToggleButton和RadioGroup的监听事件,ToggleButton的监听事件需要导入CompoundButton.onCheckedChangeListener,RadioGroup的监听事件需要导入RadioGroup.onCheckedChangeListener,但是这两个导入是冲突的,而且这两个事件是必须用到的。怎么办呢?不要导入任何事件,在…

  • keil如何生成bin文件_keil4生成bin文件

    keil如何生成bin文件_keil4生成bin文件如何利用KEIL生成bin文件并且用于固件更新?生成bin文件KEIL在编译完成后在Object目录下生成axf文件,我们可以使用fromelf工具将axf文件转化为bin文件。在User选项卡中可以看到如果勾选了Run#1选项,那么在编译完成之后(AfterBuild/Rebuild),就会执行该选项下的命令。接下来详细的探讨利用fromelf.exe转换工具是如何生成bin文件的。首先我们了解fromelf.exe转换工具的语法其格式如下:fromelf[…

    2022年10月20日
  • 点对点通信实验

    点对点通信实验点对点通信实验语言:python1.socket基础参考:百度百科,socket,CSDN上也有很多讲解socket的。2.python中使用的相关函数官方文档1)socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)AF_INET:ipv4协议SOCK_STREAM:面…

  • spark面试题目_面试提问的问题及答案

    spark面试题目_面试提问的问题及答案一、简答题1.Sparkmaster使用zookeeper进行HA的,有哪些元数据保存在Zookeeper?答:spark通过这个参数spark.deploy.zookeeper.dir指定master元数据在zookeeper中保存的位置,包括Worker,Driver和Application以及Executors。standby节点要从zk中,获得元数据信息,恢复集群运行状态,才能对外…

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号