Предварительно выбрать элементы в динамически заполненном CheckBoxList - PullRequest
1 голос
/ 04 ноября 2011

Я экспериментировал с этим и часами пытался понять жизненный цикл страницы. В этот момент я совершенно озадачен: «(Любая помощь будет С благодарностью.

Ниже приведены мои методы. Мой метод _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

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

Вы, ребята, вероятно, получите удовольствие от этого, но ответ был настолько очевиден, что я даже не уловил его все это время.Конечно, я был занят примерно 10 другими функциями>. <</p>

Вот ответ.Вы заметите, что в моем методе _SetCheckBoxes я сначала проверил, существует ли значение для конкретной строки csv, но также заметил, что впоследствии мне не удалось установить его в соответствующую строку значения.Это не сразу видно, но то, что я на самом деле передавал как csv, было именем столбца в моем DataTable, где на самом деле находилась строка.

csv = dt.Rows.Find(row)(csv).ToString

Эта строка добавлена ​​сразу после моегоIsDBNull проверьте, исправили мою проблему.:)

0 голосов
/ 05 ноября 2011

Вот потенциальная идея, которую мы использовали ранее в аналогичной ситуации:

Поскольку событие Page Init вызывается до обработчика щелчка, вы можете на самом деле проверить Request.Form("__EventTarget") и, если онокликните по строке, добавьте новый CheckBoxList в соответствующий контейнер (страницу, вкладку и т. д.).

Если вы добавляете несколько элементов управления, вы должны быть уверены, что отслеживаете добавленные элементы где-то на страницечтобы их можно было автоматически воссоздавать при каждом запуске Page Init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...