asp.net 如何将数据源列表框中的值赋给字符串

ffscu2ro  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(110)

我陷入了一个asp.net的用例,其中一个列表框(id:l1)从一个返回3列(name,id,value)的查询中得到填充,现在id被赋给l1.datavaluefield=“id”,但是我想根据我在列表框上单击的任何项目将name的值存储在一个字符串变量中。
我完全不知道。

ubbxdtey

ubbxdtey1#

实际上,查询返回3列还是10列并不重要。
列表框只提供了2列。因此,在大多数情况下,您将“值”存储为数据库“ID”列,然后您将有一列用于显示第二列。
获取“其他”列-列表框中不包含的列?
您通常必须使用“ID”并重新提取(使用另一个查询)以获取其他列。
因此,假设我们有一个列表框,它将显示ID和HotelName(2列)。如果您为列表框提供5列或10列,这真的没有关系,它仍然只会使用+ store + have 2列。
因此,让我们设置一个列表框,当您单击给定的酒店时,我们将在网页上显示该表中的其他列。
所以,这个列表框,还要多显示一点其他的列:

<h4>Select Hotel</h4>
        <asp:ListBox ID="ListBox1" runat="server"
            DataValueField="ID"
            DataTextField="HotelName"
            AutoPostBack="true" 
            OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" Height="162px" Width="308px" >
        </asp:ListBox>

        <br />

        <h4>Hotel Informaton</h4>

        <div style="width: 303px; height: 185px;">
            <div style="text-align: right">
                HotelName: <asp:TextBox ID="txtHotel" runat="server"></asp:TextBox> <br />
                City:      <asp:TextBox ID="txtCity" runat="server"></asp:TextBox>
            </div>
            Descripiton:
            <br />
            <asp:TextBox ID="txtDesc" runat="server" TextMode="MultiLine" Height="83px" Width="290px"></asp:TextBox>
        </div>

我们的代码如下:

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

    If Not IsPostBack Then
        LoadData
    End If
End Sub

Sub Loaddata()

    Dim strSQL As string =
        "SELECT ID, HotelName FROM tblHotelsA
        ORDER BY HotelName"
    Dim cmdSQL As New SqlCommand(strSQL)

    ListBox1.DataSource = MyrstP(cmdSQL)
    ListBox1.DataBind()

End Sub

Protected Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs)

    Dim PKID As Integer = ListBox1.SelectedItem.Value

    Dim cmdSQL As New SqlCommand("SELECT * FROM tblHotelsA WHERE ID = @ID")
    cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = PKID

    Dim rstData As DataTable = MyrstP(cmdSQL)

    With rstData.Rows(0)
        txtHotel.Text = .Item("HotelName")
        txtCity.Text = .Item("City")
        txtDesc.Text = .Item("Description")
    End With

End Sub

Public Function MyrstP(cmdSQL As SqlCommand) As DataTable

    Dim rstData As New DataTable
    Using mycon As New SqlConnection(GetConstr)
        Using (cmdSQL)
            cmdSQL.Connection = mycon
            mycon.Open()
            rstData.Load(cmdSQL.ExecuteReader)
        End Using
    End Using
    Return rstData
End Function

现在我们看到了:

因此,请注意我们是如何自由地从数据库中获取/使用/拥有任何列的。然而,由于列表框只保存这两列,因此我们必须根据LB选择再次访问数据库,拉取额外的列,此时我们可以自由地使用/拥有/享受使用所有数据库列,而不仅仅是在数据库中使用的列。

相关问题