Я экспериментировал с этим и часами пытался понять жизненный цикл страницы. В этот момент я совершенно озадачен: «(Любая помощь будет С благодарностью.
Ниже приведены мои методы. Мой метод _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
был вызван, в результате чего ни один из CheckBoxes не был предварительно заполнен. Как сделать так, чтобы они генерировались до вызова метода 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