【问题标题】:DropDownList Database下拉列表数据库
【发布时间】:2021-10-31 00:09:50
【问题描述】:

我有一个 DB 和一个 DropDownList,但这总是只显示 System.Data.DataRowView。我能做些什么?我的代码:

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:campingConnectionString2 %>" ProviderName="<%$ ConnectionStrings:campingConnectionString2.ProviderName %>" SelectCommand="SELECT Distinct LandDE FROM campingplatz ORDER BY LandDE ASC"></asp:SqlDataSource>

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    您需要为列表设置DataTextFieldDataValueField 属性,以便它知道要查看DataRow 中的哪些列。

    【讨论】:

    • 不幸的是,我不明白这一点。你能在我的代码上做吗,拜托!
    【解决方案2】:

    好的,总有很多方法可以做到这一点。

    我经常不使用嵌入在标记中的“数据源”。它们通常不太容易处理。 (但是,我会经常使用向导来设置下拉菜单,因为它确实设置了列等。

    但是,假设我们有两个组合框。一个用于城市,然后当您选择城市时,第二个组合框将填充该城市的酒店。

    所以我们有这个标记:

     <div style="font-size:x-large">
            Select City:
                <asp:DropDownList ID="cboCity" runat="server" width="150px" style="margin-right:25px"
                    DataValueField="City" DataTextField="City" 
                    AutoPostBack="true" OnTextChanged="cboCity_TextChanged">
                </asp:DropDownList>
    
            Select Hotel:
            <asp:DropDownList ID="cboHotels" runat="server" width="150px" 
                DataValueField="ID" DataTextField="HotelName">
            </asp:DropDownList>
    
    
        </div>
    

    然后是一些代码来填充第一个组合框,第二个是这样的:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
    
            ' load combo box (City)
            Using cmdSQL As SqlCommand = New SqlCommand("SELECT City from tblCity ORDER BY City",
                                          New SqlConnection(My.Settings.TEST3))
                cmdSQL.Connection.Open()
                cboCity.DataSource = cmdSQL.ExecuteReader
                cboCity.DataBind()
                ' add blank row to combo
                cboCity.Items.Insert(0, "")
            End Using
        End If
    End Sub
    
    Protected Sub cboCity_TextChanged(sender As Object, e As EventArgs)
    
        ' fill hotels combo based on city
        Dim strSQL As String
        strSQL = "SELECT ID, HotelName FROM tblHotels WHERE City = @City ORDER BY HotelName"
    
        Using cmdSQL As SqlCommand = New SqlCommand(strSQL, New SqlConnection(My.Settings.TEST3))
    
            cmdSQL.Parameters.Add("@City", SqlDbType.NVarChar).Value = cboCity.SelectedValue
            cmdSQL.Connection.Open()
            cboHotels.DataSource = cmdSQL.ExecuteReader
            cboHotels.DataBind()
        End Using
    
    End Sub
    

    所以现在我们可以这样说:

    所以我们确实为第一个组合设置了 autopostback = true,当用户选择了城市时,我们使用该城市值在第二个组合中填充该城市的酒店列表。

    【讨论】:

      【解决方案3】:

      很遗憾,我不明白这一点。请问你能在我的代码上这样做吗?

      <asp:DropDownList ID="LandList" runat="server" DataSourceID="SqlDataSource2" AutoPostBack="True" DataMember="DefaultView" DataTextField="LandDE" DataValueField="LandDE">
      </asp:DropDownList>
      
      <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:campingConnectionString2 %>" ProviderName="<%$ ConnectionStrings:campingConnectionString2.ProviderName %>" SelectCommand="SELECT Distinct LandDE FROM campingplatz ORDER BY LandDE ASC"></asp:SqlDataSource>
      

      【讨论】:

      • 您是在回答自己的问题吗?如果是这样,请更清楚。如果您只是发表评论,请不要回答。只需在您要评论的答案下发表评论(如果您有权这样做)。用评论回答问题被认为是一种不好的做法。请参阅How to AskHow to AnswerComments
      • 另外,尝试将代码格式化为代码。见Markdown help
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      相关资源
      最近更新 更多