我要把page上的一个控件动态移动到本页面的panel上去,
我在page_load中,使用了 panel1.controls.add(dropdownlist1);
虽然移动过去了,但是dropdownlist1的内容不变了,总是他原来的静态值,我发现在这个语句运行前textbox1.text是正确的值,于是我在上下添加两句
string s=dropdownlist1.text;
panel1.controls.add(dropdownlist1);
dropdownlist1.text=s;
这样虽然可以,但是我的dropdownlist1的事件不能正确触发了。
非常非常着急,大家帮我想想办法?
我在page_load中,使用了 panel1.controls.add(dropdownlist1);
虽然移动过去了,但是dropdownlist1的内容不变了,总是他原来的静态值,我发现在这个语句运行前textbox1.text是正确的值,于是我在上下添加两句
string s=dropdownlist1.text;
panel1.controls.add(dropdownlist1);
dropdownlist1.text=s;
这样虽然可以,但是我的dropdownlist1的事件不能正确触发了。
非常非常着急,大家帮我想想办法?
解决方案 »
- 请教:多用户访问sql server
- select 的onchange 事件,为什么在javascript 编辑器里可以选择一项就可以打开网站,而在.net里却没有反应,打不开比如新浪搜狐的网站???????请高手指教?
- 急!!!03系统中安装SharePoint Services 2.0时 提示需要安装 Framework v1.1.4322
- 帮我看看这段代码
- 求救,怎样设定一个表中的每一行数据的上下间隔?
- 一个密码只能由字母,数字,_,-和组成,正则表达式怎么写?
- 如何强制使页面刷新呢??
- checkboxlist在客戶端生成后,如何在客戶端代碼取得選擇的值(多選)?
- aspnetmenu控件的arrow.gif在本机上可以显示,但是在远程就不能显示了,是什么原因?????
- 怎样动态生成Datagird的模板列?模板中是TextBox?
- 多台服务器如何共享session与application?
- 兵器谱排行榜!--大家现在都用什么AJAX框架?
panel1.controls.add(dropdownlist1);
dropdownlist1.Autopostback=true;//加这句试试看
所以改变他的值,每次post_back都要做.
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<hr />
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
</asp:Panel>
<asp:Button ID="Button1" runat="server" Text="Button" />
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Panel1.Controls.Add(Me.DropDownList1)
End Sub
===========
在页面的这个方法里找.
private void InitializeComponent()
{
}
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<hr />
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
</asp:Panel>
<asp:Button ID="Button1" runat="server" Text="Button" />
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Me.SmartNavigation = True
Me.Panel1.Controls.Add(Me.DropDownList1)
End Sub Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
Me.Button1.Text = Me.DropDownList1.SelectedValue
End Sub控件移动到的新位置是对的,选择结果是对的,事件也是触发的。
=========
楼主在后台动态加了个dropdown的. item 然后就会出现问题.
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<hr />
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
</asp:Panel>
<asp:Button ID="Button1" runat="server" Text="Button" /> Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
Me.SmartNavigation = True
'Me.Panel1.Controls.Add(Me.DropDownList1) '这行让整个页面其它地方的逻辑也乱了
Dim Test As New DropDownList
Test.ID = "test"
Me.Form.Controls.Add(Test)
If Not IsPostBack Then
With Test.Items
.Add("1")
.Add("2")
.Add("3")
End With
End If
AddHandler Test.SelectedIndexChanged, _
AddressOf DropDownList1_SelectedIndexChanged
'Me.Panel1.Controls.Add(Test) '这行影响Test的处理逻辑
End Sub Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
Dim d As DropDownList = sender
Me.Button1.Text = d.ID + " " + d.SelectedValue
End Sub可见,那些写在设计器上“静态产生”的DropDownList如果 Move,不但自己乱了,别的地方的控件也乱了。动态产生的DropDownlist如果Move,只有自己乱了。但不管怎样,反正Value和事件都是乱了。
把一些程序员写的静态界面,变成能够支持用户自定义的动态界面。我要用动态元素替换静态元素而又要保留原静态元素的事件处理程序。我实现的动态,要以静态为前提,也就是说开发人员在原有的静态界面
上添加了我的组件,就自动变为动态界面了,这个在cs上实现很容易的,
不知道为什么webform这么吃力。不移动他们的控件也可以,但是我动态
生成的控件怎么能 添加他们原来为静态控件编写的事件处理程序呢?
Inherits UserControl Public MustOverride Property SelectedValue() As String Public Event Hi() Protected Sub onHi()
RaiseEvent Hi()
End Sub
End Class
然后,某一个程序员开发一个动态加载的含DropdownList的组件,在文件WebUserControl.ascx中设计,前后台代码如下:<%@ Control Language="VB" AutoEventWireup="false" CodeFile="WebUserControl.ascx.vb"
Inherits="WebUserControl" %>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
Partial Class WebUserControl
Inherits Dynamic Public Overrides Property SelectedValue() As String
Get
Me.EnsureChildControls()
Return Me.DropDownList1.SelectedValue
End Get
Set(ByVal value As String)
Me.EnsureChildControls()
Me.DropDownList1.SelectedValue = value
End Set
End Property Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
Me.onHi()
End Sub
End Class
主页面的前后台代码是(前台代码省略了<Form>及其以外的部分):
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
</asp:Panel>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" Text="装入控件" />
<asp:Button ID="Button1" runat="server" Text="Button" />Partial Class _Default
Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
Me.SmartNavigation = True
abc()
End Sub Protected Sub Dynamic_SelectedIndexChanged()
Me.Button1.Text = dyna.SelectedValue
End Sub Private dyna As Dynamic Private Sub abc()
Dim C As Control = Me.Panel1.FindControl("test")
If C IsNot Nothing Then Me.Panel1.Controls.Remove(C)
If Me.CheckBox1.Checked Then
dyna = Me.LoadControl("WebUserControl.ascx")
dyna.ID = "test"
Me.Panel1.Controls.Add(dyna)
AddHandler dyna.Hi, AddressOf Dynamic_SelectedIndexChanged
End If
End Sub Protected Sub CheckBox1_CheckedChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
abc()
End Sub
End Class这里用一个CheckBox控制动态装入用户控件,并且在用另外一个按钮刻意刷新主页面的时候保持用户控件(如果装入的话)的状态和事件。
——————————————————————————————————————————
局部还是整体,显示还是管理,这些都是很虚的词。关键是看你的细节是如何做的。我说出了任何区域都可以使用数据库、配置文件动态改变,而开发这个主程序的时候、这个工厂的建造完全可以在工厂里生产产品之前,这是我所认为的整体、管理的概念。另外,我说出你的思路其实不过让页面在装载的时候把所有控件都装载,然后你再移动它们的位置、设置它们的Visible之类的。这在c/s上也是极其不必要的做法。在web上,每一次服务器处理页面实例都要“重建”页面,而不是像c/s那样仅仅在最初建立一次。在web上有很多依赖控件树的机制,例如如果你没有给一个动态控件设置准确的ID,如果下次装载的最初时刻它的相对位置与上次输出之前最后时刻相比改变了,它就不会被asp.net认识到了,状态、事件等也就乱了。我以这个帖子用个简单的例子完整说明用户控件的设计方法,首当其冲是要说明Dynamic作为接口协议的作用,说明方法、属性、事件在接口与用户控件的定义和重写方法,以便将客户/服务双方分清职责。如果你不打算在项目中把成熟的应用程序总结为自己的控件,希望把这个例子也能让别人看到,相信这会对很多人有益。
我的东西是一个不可见的组件,只要你把它放到窗体上。我就能把你原来的静态程序转换为动态程序,动态添加删除移动控件,动态数据库绑定,在这些动态的同时还能保持原来静态窗口中的代码可以使用。比如我的窗体是客户档案,客户的各个字段之间彼此有复杂的关系,这些关系是通过本窗口内的静态编码实现的,而我增加的动态机制是为他增加了最重用户自定义的功能,我根本不用知道他要实现什么,也不必告诉他们有什么接口,也不必管理他们。
http://community.csdn.net/Expert/topic/5240/5240699.xml?temp=.1409418
开发人员以前手写了一个静态的客户卡片窗体。现在我要让我的动态窗体挂到原来的静态窗体上去。(按照控件名称对应就可以)。
我要毁掉原来静态窗口的界面,但是保留其控制功能。有必要告诉大家,这个在cs下已经实现了两年了。
在bs模式下也可以实现,只不过我现在的模型不是可视化的,可视化了就有刚才提到的“移动”以后出错的问题。
http://www.cnblogs.com/cathsfz/archive/2006/11/19/564929.html
经营之道 http://info.7ecity.com/