0

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で見逃したことを一生考えることはできません...

4

2 に答える 2

2

DropDownList の DataTextField プロパティを設定しているようには見えません。

 With drpRegion
        .DataSource = drpRegionDs
        .DataValueField = "regionName"
        .DataTextField = "fieldToDisplayAsText"
        .SelectedIndex = 0
        .DataBind()
 End With

ソース: MSDN DataTextField

于 2013-06-21T14:15:12.067 に答える
1

ポストバック後に値をドロップダウンに再バインドしているため、元の値に戻っています。AutoPostBack プロパティが true に設定されているため、選択したアイテムを変更するとポストバックがトリガーされます。ポストバックでない場合にのみ、drpRegion_fill() を呼び出します。Ricが述べたようにDataTextFieldを設定すると、「System.Data.DataViewRow」に関する問題が解決するはずです

于 2013-06-21T14:18:15.960 に答える