Присвоить выпадающий список выбранное значение не работает - PullRequest
0 голосов
/ 05 марта 2019

У меня есть сетка, которая привязывается к данным автомобиля.Консультант сможет изменить уровень покрытия или удалить транспортное средство из сетки, а затем нажать кнопку, чтобы пересчитать премию.Это должно происходить на лету без внесения изменений в базу данных.

Один из столбцов представляет собой раскрывающийся список.После заполнения вида сетки выпадающие списки заполняются внутри события RowDataBound.Все это работает нормально, пока мне не нужно установить каждое перетаскивание с выбранным значением / текстом - эти значения взяты из данных.Проблема, с которой я сталкиваюсь, заключается в том, что выбранное значение не устанавливается (хотя и содержит правильные значения).

Это то, что я сделал: Aspx:

    <ajax:UpdatePanel ID="upVehicles" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
            <ContentTemplate>
                <table width="100%" cellspacing="2" cellpadding="0" border="0" summary="Step3" align="center">
                    <tr>
                        <td>
                            <asp:GridView ID="grdVehicles" runat="server" AutoGenerateColumns="False" Width="100%" CellPadding="0" GridLines="None" DataKeyNames="RecordNumber" OnRowDataBound="grdVehicles_RowDataBound">
                                <HeaderStyle CssClass="NormalBold" VerticalAlign="Middle" HorizontalAlign="Left" BackColor="#FFFF80" Font-Underline="True" Height="18px" />
                                <RowStyle CssClass="Normal" HorizontalAlign="Left" />
                                <AlternatingRowStyle CssClass="DataGrid_AlternateItem" />
                                <EditRowStyle CssClass="NormalTextBox" />
                                <SelectedRowStyle CssClass="NormalRed" />
                                <FooterStyle CssClass="DataGrid_Footer" />
                                <PagerStyle CssClass="DataGrid_Pager" />
                                <Columns>
                                    <asp:TemplateField HeaderText="Remove">
                                        <ItemTemplate>
                                            <asp:CheckBox ID="cbRemove" runat="server" AutoPostBack="true" OnCheckedChanged="cbRemove_CheckedChanged" ToolTip="Vehicle to remove" />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:BoundField DataField="RegNo" HeaderText="Reg No" HeaderStyle-HorizontalAlign="Left" />
                                    <asp:BoundField DataField="VehicleYear" HeaderText="Year" HeaderStyle-HorizontalAlign="Left" />
                                    <asp:BoundField DataField="Make" HeaderText="Make" HeaderStyle-HorizontalAlign="Left" />
                                    <asp:BoundField DataField="Model" HeaderText="Model" HeaderStyle-HorizontalAlign="Left" />
                                    <asp:BoundField DataField="Series" HeaderText="Series" HeaderStyle-HorizontalAlign="Left" />
                                    <asp:BoundField DataField="vVariant" HeaderText="Variant" HeaderStyle-HorizontalAlign="Left" />
                                    <asp:TemplateField HeaderText="Rental">
                                        <ItemTemplate>
                                            <asp:CheckBox ID="cbRental" Checked='<%# Eval("RentalAfterAccident") %>' runat="server" AutoPostBack="true" />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Cover Level">
                                        <ItemTemplate> <%--SelectedValue='<%# Eval("CoverLevelType") %>'--%>
                                            <asp:DropDownList ID="cbCoverLevel" Width="220px" AppendDataBoundItems="true"  runat="server"></asp:DropDownList>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                        </td>
                    </tr>
                    <br />
                </table>
            </ContentTemplate>
        </ajax:UpdatePanel>

Заполнение сетки:

    Private Sub FillVehicleDetails(ByRef vehicleDetail As SSVehicle(), ByVal paymentFrequency As String)
    Dim totPremium As Double = 0
    Dim objDT As New DataTable("dtVehicles")
    dtCoverLevelVehicles = objDT

    ViewState("dtVehicles") = Nothing

    objDT.Columns.Add("RecordNumber")
    objDT.Columns.Add("RegNo")
    objDT.Columns.Add("VehicleYear")
    objDT.Columns.Add("Make")
    objDT.Columns.Add("Model")
    objDT.Columns.Add("Series")
    objDT.Columns.Add("vVariant")
    objDT.Columns.Add("RentalAfterAccident")
    objDT.Columns.Add("CoverLevelType")

    For Each vehicle In vehicleDetail
        Dim dr As DataRow = objDT.NewRow
        dr("RecordNumber") = vehicle.RecordNumber
        dr("RegNo") = vehicle.RegNo
        dr("VehicleYear") = vehicle.VehicleYear
        dr("Make") = vehicle.Make
        dr("Model") = vehicle.Model
        dr("Series") = vehicle.Series
        dr("vVariant") = vehicle.vVariant
        dr("RentalAfterAccident") = vehicle.RentalAfterAccident
        dr("CoverLevelType") = vehicle.Cover.ToString()

        objDT.Rows.Add(dr)

        totPremium += vehicle.PremiumDetail.TotalPremium
    Next

    ViewState("dtVehicles") = objDT
    grdVehicles.DataSource = CType(ViewState("dtVehicles"), DataTable)
    grdVehicles.DataBind()
    SetVehicleOptions()
    upVehicles.Update()

End Sub


     Private Sub SetVehicleOptions()
    Dim cbCheckBox As CheckBox

    For i As Integer = 0 To grdVehicles.Rows.Count - 1
        cbCheckBox = CType(grdVehicles.Rows(i).FindControl("cbRemove"), CheckBox)
        cbCheckBox.Enabled = (grdVehicles.Rows.Count > 1)
        cbCheckBox.ToolTip = "Remove Vehicle"
    Next
End Sub

Это RowDataBound и пытается присвоить выбранное значение:

    Protected Sub grdVehicles_RowDataBound(sender As Object, e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim cboCoverLevelType As DropDownList = CType(e.Row.FindControl("cbCoverLevel"), DropDownList)
        objLU.FillCombo("COVERLEVEL", cboCoverLevelType, True)
        Dim recordNumber As String = grdVehicles.DataKeys(e.Row.RowIndex).Values(0).ToString()
        Dim drRecordNumber As String
        Dim drCoverLevel As String

        'Check if DataTable has any rows
        If dtCoverLevelVehicles.Rows.Count > 0 Then
            'Loop through datatable
            For i As Integer = 0 To dtCoverLevelVehicles.Rows.Count - 1
                ' check and compare here
                drRecordNumber = dtCoverLevelVehicles.Rows(i).Item("RecordNumber").ToString()

                If recordNumber = drRecordNumber Then
                    drCoverLevel = dtCoverLevelVehicles.Rows(i).Item("CoverLevelType").ToString()
                    'cboCoverLevel.Items.FindByText(drCoverLevel).Selected = True
                    'cboCoverLevel.SelectedValue = drCoverLevel
                    ' cboCoverLevel.Text = drCoverLevel
                    ' cboCoverLevel.SelectedValue = DataBinder.Eval(e.Row.DataItem, "CoverLevelType").ToString()
                End If
            Next
        End If
    End If

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