我一直在试验这个并试图理解几个小时的页面生命周期。在这一点上我完全难过:'(任何帮助都会非常感激。
以下是我的方法。我的_PrefillWizard
方法实际上适用于我的页面上的所有控件,除了那些动态填充的控件。 CheckBoxList
是这样的,因为它们是根据我的数据库中的表中的可选值自动生成的。我已经在我的标记中有这样的控件了...在运行其他代码之前如何强制加载并做好准备?
<asp:CheckBoxList ID="MyLanguagesCBL" runat="server" RepeatDirection="Vertical"
RepeatColumns="4" Width="100%" DataSourceID="LanguagesSDS"
DataTextField="Language" DataValueField="ID">
</asp:CheckBoxList>
<asp:SqlDataSource ID="LanguagesSDS" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>"
SelectCommand="select ID, [Language] from LanguagesListTable"
DataSourceMode="DataReader">
</asp:SqlDataSource>
显然,在我的_PrefillWizard
被调用之前,尚未生成这些特定控件或在页面上,导致没有预先填充任何CheckBox。 如何在调用prefill方法之前生成它们?谢谢;)
点击事件。
'On "Load" Button click, clears a Wizard control and Prefills it with the
' data from the clicked record based on the primary key stored in SessionState.
Protected Sub RowClick(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GridView2.RowCommand
If e.CommandName = "Select" Then
Session.Add("ClickedPrimaryKey", GridView2.DataKeys(e.CommandArgument).Value.ToString)
'This is the main function which calls "_SetCheckBoxes" among others.
_PrefillWizard(Session.Item("ClickedPrimaryKey"))
End If
End Sub
这是我填充my CheckBoxList
控件的功能,但显然取决于页面上已加载的控件。
'Parse a CSV String from the Database back into CheckBoxList Selections
Protected Sub _SetCheckBoxes(ByRef cbl As CheckBoxList, ByRef dt As DataTable, ByVal row As Integer, ByVal csv As String)
'Do something if there is a value in the cell
If Not IsDBNull(dt.Rows.Find(row)(csv)) Then
For Each item As ListItem In cbl.Items
item.Selected = False 'Reset the checkbox first
'Then, if the ID value of the checkbox corresponds to a value
' in the CSV string, then tick the checkbox.
If csv.Contains(item.Value) Then
item.Selected = True
End If
Next
End If
End Sub
答案 0 :(得分:0)
这是一个潜在的想法,也是我们之前在类似情况下使用过的想法:
因为在单击处理程序之前触发了Page Init事件,所以实际上可以检查Request.Form("__EventTarget")
,如果是行单击,则将新的CheckBoxList添加到适当的容器(页面,选项卡等)。 / p>
如果要添加多个控件,则必须确保在页面中的某处跟踪添加的项目,以便每次触发Page Init时都可以自动重新创建它们。
答案 1 :(得分:0)
你们可能会对此感到兴奋,但答案是如此明显,以至于我这次都没有抓住它。当然,我也专注于大约10个其他功能&gt;。&lt;
这是答案。您会注意到,在我的_SetCheckBoxes
方法中,我首先检查以确保特定csv
字符串存在值,但是请注意,我之后未能将其实际设置为相应的值字符串。这并不是很明显,但我实际传入的csv
是DataTable
中字符串实际存在的列的名称。
csv = dt.Rows.Find(row)(csv).ToString
在我的IsDBNull
检查后立即添加该行,解决了我的问题。 :)