Значения, не установленные для Gridview CheckboxList в режиме редактирования - PullRequest
0 голосов
/ 31 октября 2018

Я работал над этой проблемой несколько недель, включая поиск в Интернете. Кажется, ничто не соответствует тому, что я пытаюсь сделать У меня есть пять логических полей в SQL Server. Я могу обновить их и отобразить их в поле метки без проблем Режим редактирования структурирует их в checkBoxList, но я не получаю значения базы данных для отображения. Вот код OnRowEditing:

     Protected Sub EmplSumm_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) Handles EmplSummGridView.RowEditing
    WriteToFile.WTF("EmployeeSummary.EmplSumm_RowEditing:" & e.NewEditIndex.ToString, Gbl.LogPath)
    Try
        UpdateIndex = e.NewEditIndex
        EmplSummGridView.EditIndex = e.NewEditIndex
        Dim SQLStm As String = "SELECT W4State, W4Allowances, W4Exempt, " &
            "IdSocialSecurity, IdBirthCert, IdDriverLic, IdPassport, IdPermit " &
            "From EmploymentInfo " &
            "Where emplid = '" & EmplSummGridView.DataKeys(e.NewEditIndex).Values(0).ToString() & "'; "
        Dim connection As New SqlConnection(connectionString)
        Dim adapter As New SqlDataAdapter(SQLStm, connection)
        Dim dt1 As New DataTable()
        adapter.Fill(dt1)

        'Dim row As GridViewRow = EmplSummGridView.Rows(UpdateIndex)

        WriteToFile.WTF("EmployeeSummary.EmplSumm_RowEditing:" & "|" & UpdateIndex & "|" & dt1.Rows(0).Item("IdSocialSecurity").ToString, Gbl.LogPath)
        Dim cbSecBirth As CheckBoxList = TryCast(EmplSummGridView.Rows(e.NewEditIndex).FindControl("cbSecBirthCertE"), CheckBoxList)

        cbSecBirth.Items(0).Selected = Convert.ToBoolean(dt1.Rows(0).Item("IdSocialSecurity"))
        cbSecBirth.Items(1).Selected = Convert.ToBoolean(dt1.Rows(0).Item("IdBirthCert"))
        cbSecBirth.Items(2).Selected = Convert.ToBoolean(dt1.Rows(0).Item("IdDriverLic"))
        cbSecBirth.Items(3).Selected = Convert.ToBoolean(dt1.Rows(0).Item("IdPassport"))
        cbSecBirth.Items(4).Selected = Convert.ToBoolean(dt1.Rows(0).Item("IdPermit"))
        cbSecBirth.DataBind()
        WriteToFile.WTF("EmployeeSummary.EmplSumm_RowEditing cbSecBirth:" & "|" & cbSecBirth.Items(0).Selected _
            & "|" & cbSecBirth.Items(1).Selected & "|" & cbSecBirth.Items(2).Selected _
            & "|" & cbSecBirth.Items(3).Selected & "|" & cbSecBirth.Items(4).Selected, Gbl.LogPath)
    Catch ex As Exception
        Dim S As String = ex.Message + vbCrLf
        S = S + "Help Link:" + ex.HelpLink + vbCrLf
        S = S + "Source:" + ex.Source + vbCrLf
        S = S + "Stack Trace:" + ex.StackTrace + vbCrLf
        'lblerror.Text = "System Error - System Error - Employee_ItemUpdating: " & S
        WriteToFile.WTF("Exception in EmployeeSummary.EmplSumm_RowEditing:" & Now() & "|" & S, Gbl.LogPath)
    End Try
End Sub

и ASP:

                <asp:Templatefield HeaderText="SecBirthCertDL" SortExpression="SecBirthCertDL" ItemStyle-CssClass="tableitem1">
            <ItemTemplate>
                <asp:Label ID="lblId" runat="server" readonly ="True"></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:CheckBoxList ID="cbSecBirthCertE" runat="server" autopostback="false" >
                <asp:ListItem  Text="SS Card" ></asp:ListItem>
                <asp:ListItem  Text="Birth Certificate" ></asp:ListItem>
                <asp:ListItem  Text="Drivers License" ></asp:ListItem>
                <asp:ListItem  Text="Passport" ></asp:ListItem>
                <asp:ListItem  Text="Permit" ></asp:ListItem>
                </asp:CheckBoxList>                
            </EditItemTemplate>
        </asp:Templatefield>

Значения установлены правильно из базы данных в CheckBoxList, например: cbSecBirth.Items (0). Выбрано, но не отображается при визуализации формы. Вот вывод из функции WriteToFile: EmployeeSummary.EmplSumm_RowEditing cbSecBirth: | True | True | False | False | False

1 Ответ

0 голосов
/ 08 ноября 2018

Я заставил его работать, установив значения в событии RowDataBound и исключив установку значений меток в строке обновления. Соответствующий код:

                Dim cbSecBirth As CheckBoxList = TryCast(e.Row.Cells(9).Controls(0).FindControl("cbSecBirthCertE"), CheckBoxList)
                If cbSecBirth Is Nothing Then
                    WriteToFile.WTF("EmployeeSummary.EmplSumm_RowDataBound:lblId Error:" & lblId.Text, Gbl.LogPath)
                    Return
                End If
                Dim ix As Int16 = 0

                ' Values for List item elements are 0 thru 4
                For Each Li As ListItem In cbSecBirth.Items
                     Li.Selected = Convert.ToBoolean(dt1.Rows(0).Item(ix + 3))
                    ix += 1
                Next 
...