首页 新闻 会员 周边

动态加载用户控件问题。

0
[已解决问题] 解决于 2009-01-31 23:08

页面上有一个DropDownList 控件 设置了 AutoPostback 为 True ,当选择了不同的Value值时,动态加载不同的用户控件

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsNothing(drplstDepart.Items.FindByValue(strDepartID)) Then
drplstDepart.SelectedValue
= strDepartID
DispReportTable(drplstDepart.SelectedValue, strRptID)
End If

End Sub

Private Sub DispReportTable(ByVal strValue As String, Optional ByVal strRptID As String
= Nothing)
Dim typUser As Type
Dim propUserRetUrl As PropertyInfo
Dim ctrl As UserControl
= Nothing
Select Case strValue
Case
"2"
ctrl
= LoadControl("*****/****.ascx")
Case
"4"
ctrl
= LoadControl("*****/****.ascx")
Case
"7"
ctrl
= LoadControl("*****/****.ascx")
Case
"8"
ctrl
= LoadControl("*****/****.ascx")
End Select

If IsNothing(ctrl) Then
Exit Sub
End If

ctrl.ID
= UseExtControlName

typUser
= ctrl.GetType()
'Set the ReturnURL value
propUserRetUrl = typUser.GetProperty("ReturnURL")
propUserRetUrl.SetValue(ctrl,
"frm***.aspx", Nothing)

'typUser.InvokeMember("ClearAllTextBox", BindingFlags.InvokeMethod, Nothing,, Nothing)

plDepartMent.Controls.Clear()

'ADD the UserControl to Page
plDepartMent.Controls.Add(ctrl)

end sub

 



 代码大概就是这个样子。
这样是可以实现动态加载控件,可是有两个问题。
一、是控件会加载两次。我试过当调用 DispReportTable 方法时往ViewState 里写一个值,然后在FormLoad 里判断一下这个ViewState里是不是有值,如果有值说明已经加载过了。可是这样不行。
加载后,加载的用户控件中有Button控件(还有几个TEXTBOX控件)。点击后用户控件消失了。但是把这个判断去掉后能动态的加载控件了,
但是另一个问题出现了。这几个用户控件很类似,用表格做的。比如两行两列的表格。当选择了那个调用用户控件的页面的DropDownList的值,引起的SelectIndexChanged事件,然后根据SelectedValue 值,调用了用户控件A,然后在用户控件A中的第一行第一列的TEXTBOX控件值(写在ascx文件上的值)正常的显示到了页面上,可是当我选择别的值。比如当加载用户控件B的时候,(B和A的用户控件并不多)也可能是两行两列的也可能是大于两行两列的表格,当加载这个用户控件B的时候,在用户控件A的第一行第一列的中的Textbox的值,被带到了加载出来的B控件的第一行第一列的TextBox控件中。也就是说当我加载用户控件B的时候,在A的相应位置的Textbox的值被带到了B控件中。不知道是怎么回事。是不是这个PlaceHolder的缘故?还是像我这样加载的时候就会有这样的问题。 谢谢高手们。
问题补充: 其实我也不习惯。不过看看就还行吧。 我现在这样的做的在 CtrlID = UseExtControlName 后面加一个区分 也就是 CtrlID = UseExtControlName & "_" & strValue 这样是能解决一下。不过好像不是什么好方法。 而且好像也有点问题。
二十二号同学的主页 二十二号同学 | 小虾三级 | 园豆:790
提问于:2009-01-21 16:55
< >
分享
最佳答案
0

如果这几个用户控件很类似,为什么不做成一个用户控件然后用参数来控制界面和逻辑呢?

如果界面相差太多,也可以用mutiview这个控件来控制这个用户控件的view呀。

风海迷沙 | 老鸟四级 |园豆:4453 | 2009-01-25 13:10
其他回答(1)
0

看vb的代码很累....

Such Cloud | 园豆:130 (初学一级) | 2009-01-21 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册