为从不同数据源绑定的下拉列表选择selectedvalue

时间:2014-10-20 21:53:46

标签: asp.net vb.net visual-studio-2010

我在webform上有两个下拉列表,这些下拉列表是从一个SQL db上的查询填充的。第一个填充制造商部件号,另一个填充制造商。 ddl在页面加载时正确绑定如下:

Imports System
Imports System.IO
Imports System.DateTime
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.ComponentModel
Imports System.Web.UI.Page
Imports System.Web.UI.WebControls

Public Class IQCRecord
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Page.IsPostBack = False Then
        Dim dt1 As New DataTable
        Dim MPN As String
        Dim MFG As String
        Dim con1 As New SqlConnection("Data Source=<datasource>")
        Dim cmd1 As New SqlCommand("SELECT ROW_NUMBER() Over(order by [PREFER_49]) As Row, [MPNNUM_49] As MPN, [MPNMFG_49] As MFR, [PREFER_49] FROM [Mfg_Part_Master] WHERE ([PRTNUM_49] = @PRTNUM_49)", con1)
        cmd1.CommandType = Data.CommandType.Text
        cmd1.Parameters.AddWithValue("@PRTNUM_49", Request.QueryString("PARTID"))
        con1.Open()

        Dim da1 As New SqlDataAdapter
        da1.SelectCommand = cmd1
        da1.Fill(dt1)

        If dt1.Rows.Count > 0 Then
            For i As Integer = 0 To dt1.Rows.Count - 1
                MPN = dt1.Rows(i)("MPNNUM_49").ToString()
                ddlMPN.Items.Add(New ListItem(MPN))
                MFG = dt1.Rows(i)("MPNMFG_49").ToString()
                ddlMFG.Items.Add(New ListItem(MFG))
            Next
            ddlMPN.Items.Add(New ListItem("Wrong Part Rcv'd"))
        End If

        con1.Close()

    End If

    Dim dt As New DataTable
    Dim con As New SqlConnection("Data Source=<different-datasource>")
    Dim cmd As New SqlCommand("SP_GetIQCRecord", con)
    cmd.CommandType = Data.CommandType.StoredProcedure
    cmd.Parameters.AddWithValue("@IQCID", Request.QueryString("IQC ID"))

    con.Open()

    Dim da As New SqlDataAdapter
    da.SelectCommand = cmd
    da.Fill(dt)

    lblIqcId.Text = dt.Rows(0).Item("IQCID")
    txtPrtNum.Text = dt.Rows(0).Item("PartID")
    txtRev.Text = dt.Rows(0).Item("Rev")
    txtIqcDate.Text = dt.Rows(0).Item("IQC DATE")
    ddlMPN.SelectedValue = dt.Rows(0).Item("MPN")
    ddlMFG.SelectedValue = dt.Rows(0).Item("MFG")
    txtPO.Text = dt.Rows(0).Item("PO Num")
    txtVendor.Text = dt.Rows(0).Item("VENDOR")
    txtInspector.Text = dt.Rows(0).Item("Inspector")
    lblInsID.Text = dt.Rows(0).Item("InsID")
    txtLotQty.Text = dt.Rows(0).Item("LOT QTY")
    txtSampSize.Text = dt.Rows(0).Item("SAMPLE SIZE")
    txtQtyAcc.Text = dt.Rows(0).Item("QTY ACC")
    txtQtyRej.Text = dt.Rows(0).Item("QTY REJ")
    bolMRB.Checked = dt.Rows(0).Item("MRB?")
    bolRej.Checked = dt.Rows(0).Item("REJ?")
    bolpB.Checked = dt.Rows(0).Item("pB")
    txtRecDC.Text = dt.Rows(0).Item("REC DATE CODE")
    txtDateCode.Text = dt.Rows(0).Item("DATE CODE")
    txtLotCode.Text = dt.Rows(0).Item("LOT CODE").ToString()
    txtRemarks.Text = If(IsDBNull(dt.Rows(0).Item("REMARKS")), String.Empty, dt.Rows(0).Item("REMARKS").ToString())

    con.Close()

End Sub

在这个绑定之后,我有另一个查询,它为单个检查记录提取数据并填充webform,包括选择这两个ddl的选定值。不幸的是,ddl没有选择与数据表中的文本匹配的值。我已经验证了dt.Rows(0).Item(“MFG”)和...(“MPN”)从app db获取值,并且这些值在绑定的ddl中。我没有收到任何错误,只是没有选择正确的值。它只是默认为列表中的第一个值。我在下面包含了我的.aspx和vb代码。

<table>
    <tr>
        <td class="style27">
            <strong>Add/Edit Incoming Inspection Record</strong></td>
        <td class="style27">

            &nbsp;</td>
        <td class="style27">
            &nbsp;</td>
    </tr>
    <tr>
        <td class="style27">
            &nbsp;</td>
        <td class="style27">
            &nbsp;</td>
        <td class="style27">
            <asp:Label ID="lblIqcId" runat="server" Visible="False"></asp:Label>
        </td>
    </tr>
    <tr>
        <td class="style27">
            <asp:Label ID="lblPartId1" runat="server" Text="Part ID:" />
            &nbsp;&nbsp;
            <asp:TextBox ID="txtPrtNum" runat="server" Height="21px" Width="178px" />
        </td>
        <td class="style27">
        </td>
        <td class="style27">
            <asp:Label ID="lblRev" runat="server" Text="Rev:" />
            &nbsp;&nbsp;
            <asp:TextBox ID="txtRev" runat="server" Height="21px" />
        </td>
    </tr>
    <tr>
        <td class="style27">

            <asp:Label ID="lblIqcDate" runat="server" Text="IQC Date:" />&nbsp&nbsp
            <asp:TextBox ID="txtIqcDate" runat="server" Height="21px" />
        </td>
        <td class="style27">
            <asp:Label ID="lblMPN" runat="server" Text="MPN:" />&nbsp&nbsp
            <asp:DropDownList ID="ddlMPN" runat="server"
                DataTextField="MPN" DataValueField="MPN" Height="21px" 
                Width="195px" >
            </asp:DropDownList>

        </td>
        <td class="style27">
            <asp:Label ID="lblMFR" runat="server" Text="MFR:" />&nbsp&nbsp
            <asp:DropDownList ID="ddlMFG" runat="server"
                DataTextField="MFG" DataValueField="MFG" Height="21px" 
                Width="159px">
            </asp:DropDownList>
        </td>  
    </tr>
    <tr>
        <td class="style26">
            <asp:Label ID="lblPO" runat="server" Text="PO Num:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtPO" runat="server" Height="21px" Width="168px"></asp:TextBox>
        </td>
        <td class="style26">
            <asp:Label ID="lblVendor" runat="server" Text="Vendor:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtVendor" runat="server" Height="21px" Width="175px"></asp:TextBox>
        </td>
        <td class="style26">
            <asp:Label ID="lblInspect" runat="server" Text="Inspector:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtInspector" runat="server" Height="21px" Width="160px"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td class="style27">
            <asp:Label ID="lblLotQty" runat="server" Text="Lot Qty:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtLotQty" runat="server" Height="21px" Width="190px"></asp:TextBox>
        </td>
        <td class="style27">
            <asp:Label ID="lblSampSize" runat="server" Text="Sample Size:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtSampSize" runat="server" Height="21px" Width="170px"></asp:TextBox>
        </td>
        <td class="style27">

            <asp:Label ID="lblInsID" runat="server" Visible="False"></asp:Label>

        </td>
    </tr>
    <tr>
        <td class="style27">
            <asp:Label ID="lblQtyAcc" runat="server" Text="Qty Acc.:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtQtyAcc" runat="server" Height="21px" Width="190px"></asp:TextBox>
        </td>
        <td class="style27">
            <asp:Label ID="lblQtyRej" runat="server" Text="Qty Rej:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtQtyRej" runat="server" Height="21px" Width="170px"></asp:TextBox>
        </td>
        <td class="style27">

        </td>
    </tr>
    <tr>
        <td class="style27" align="center">
            <asp:CheckBox ID="bolMRB" runat="server" style="text-align: right" Text="MRB?" 
                TextAlign="Left" />
        </td>
        <td class="style27" align="center">
            <asp:CheckBox ID="bolRej" runat="server" style="text-align: right" Text="Rej?" 
                TextAlign="Left" />
        </td>
        <td class="style27" align="center">
            <asp:CheckBox ID="bolpB" runat="server" style="text-align: right" Text="pB?" 
                TextAlign="Left" />
        </td>
    </tr>
    <tr>
        <td class="style27">
            <asp:Label ID="lblRecDC" runat="server" Text="Rec. Date Code:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtRecDC" runat="server" Height="21px" Width="140px"></asp:TextBox>
        </td>
        <td class="style27">
            <asp:Label ID="lblDateCode" runat="server" Text="DateCode:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtDateCode" runat="server" Height="21px" Width="140px"></asp:TextBox>
        </td>
        <td class="style27">
            <asp:Label ID="lblLotCode" runat="server" Text="Lot Code:"></asp:Label>&nbsp&nbsp
            <asp:TextBox ID="txtLotCode" runat="server" Height="21px" Width="140px"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td class="style28">
            </td>
        <td class="style28">
            </td>
        <td class="style28">
            </td>
    </tr>
    <tr>
        <td class="style27">
            <asp:Label ID="lblRemarks" runat="server" Text="Remarks:"></asp:Label>  
        </td>
        <td class="style27">
            &nbsp;</td>
        <td class="style27">
            &nbsp;</td>
    </tr>
    <tr>
        <td class="style27" colspan="3" rowspan="3">
            <asp:TextBox ID="txtRemarks" runat="server" TextMode="MultiLine" Height="64px" 
                Width="722px"></asp:TextBox>
        </td>
    </tr>

</table>

con.Open()

Dim da As New SqlDataAdapter
da.SelectCommand = cmd
da.Fill(dt)

lblIqcId.Text = dt.Rows(0).Item("IQCID")
txtPrtNum.Text = dt.Rows(0).Item("PartID")
txtRev.Text = dt.Rows(0).Item("Rev")
txtIqcDate.Text = dt.Rows(0).Item("IQC DATE")
ddlMFG.SelectedValue = dt.Rows(0).Item("MFG")
ddlMPN.SelectedValue = dt.Rows(0).Item("MPN")
txtPO.Text = dt.Rows(0).Item("PO Num")
txtVendor.Text = dt.Rows(0).Item("VENDOR")
txtInspector.Text = dt.Rows(0).Item("Inspector")
lblInsID.Text = dt.Rows(0).Item("InsID")
txtLotQty.Text = dt.Rows(0).Item("LOT QTY")
txtSampSize.Text = dt.Rows(0).Item("SAMPLE SIZE")
txtQtyAcc.Text = dt.Rows(0).Item("QTY ACC")
txtQtyRej.Text = dt.Rows(0).Item("QTY REJ")
bolMRB.Checked = dt.Rows(0).Item("MRB?")
bolRej.Checked = dt.Rows(0).Item("REJ?")
bolpB.Checked = dt.Rows(0).Item("pB")
txtRecDC.Text = dt.Rows(0).Item("REC DATE CODE")
txtDateCode.Text = dt.Rows(0).Item("DATE CODE")
txtLotCode.Text = dt.Rows(0).Item("LOT CODE").ToString()
txtRemarks.Text = If(IsDBNull(dt.Rows(0).Item("REMARKS")), String.Empty, dt.Rows(0).Item("REMARKS").ToString())

con.Close()

1 个答案:

答案 0 :(得分:1)

这已经解决,但我不记得我在哪个论坛上获得了代码修订的帮助。为了别人的利益,我包括修正了我的问题的修订代码。

            Dim selectedindex As Integer = 0

        For index As Integer = 0 To dt1.Rows.Count - 1
            If dt1.Rows(index).Item("MPN") = MPN1 Then
                selectedindex = index
            End If
        Next

        ddlMPN.SelectedIndex = selectedindex
        ddlMFG.SelectedIndex = selectedindex

        con1.Close()