asp.net Visual Basic Web サイトがあり、ストアド プロシージャを使用して値を取得し、ドロップダウン リストに入力しています。
ただし、2 つの問題があります。ページ読み込みイベントの If Not IsPostBack ステートメント内にドロップダウン リストを埋めるメソッドを配置すると、実際の値ではなく「System.Data.DataViewRow」という項目がリスト全体に表示されます。この「if」ステートメントの外に置いてもページ読み込みイベント内に置くと、正しい値が得られますが、何を選択しても、ドロップダウンを離れると、選択したアイテムではなく一番上のアイテムに戻ります.
私は何を間違っていますか??
編集: Nic の提案に従って DataTextField を追加し、Lee Bailey の提案に従って「If Not IsPostBack」イベント内にメソッドを配置しました。ただし、ドロップダウンにはまだすべての値が「System.Data.DataViewRow」として表示されているため、Lee のソリューションが機能したかどうかはわかりません。値を表示する問題に関する他のアイデア! 変更を反映するために、以下のコードを更新しました。
ビジュアルベーシック:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
bodyPanel.Visible = False
drpRegion_fill()
End If
End Sub
Protected Sub drpRegion_fill()
Dim sqlConn As SqlConnection
sqlConn = New SqlConnection
sqlConn.ConnectionString = ConfigurationManager.ConnectionStrings("ConnString").ConnectionString
Dim drpRegionCmd As SqlCommand
drpRegionCmd = New SqlCommand("getRegionName", sqlConn)
drpRegionCmd.CommandType = CommandType.StoredProcedure
Dim drpRegionAdp As SqlDataAdapter
drpRegionAdp = New SqlDataAdapter(drpRegionCmd)
Dim drpRegionDs As DataSet
drpRegionDs = New DataSet
sqlConn.Open()
drpRegionAdp.Fill(drpRegionDs)
With drpRegion
.DataSource = drpRegionDs
.DataBind()
.DataValueField = "regionName"
.DataTextField = "regionName"
.SelectedIndex = 0
End With
sqlConn.Close()
End Sub
マークアップ:
<asp:Panel ID="panelRegion" runat="server" Height="160px" Width="71%" CssClass="inlineBlock">
<h2>Region:</h2>
<asp:dropDownList runat="server" AutoPostBack="true" ID="drpRegion" />
</asp:Panel>
SQL プロシージャは、列 1 として「regionID」、列 2 として「regionName」を持つ 2 列のデータセットを返します。
私はこれに約2日間を費やし、さまざまなことを試し、できる限りすべての本を読みました! 同じ操作を実行したときにC#でこの問題が発生したことは一度もありません.VBで見逃したことを一生考えることはできません...