1

我正在使用 Visual Studio 2012 和 MySQL 构建我的第一个网站。这是我第一次真正使用它们中的任何一个,所以我的知识缺乏,但我正在慢慢学习。

我正在尝试开发一个网站,用于我们工作中的锁定/挂牌数据库。它最终将能够自动生成报告/标签,但我还没有做到这一点。我想做的是提供两个下拉列表,一个用于复杂,另一个用于机器(这些将用于对给定设备进行排序)。当用户选择特定的复合体时,我希望机器下拉列表仅限于特定于该复合体的机器。例如,我的 SQL 查询看起来像这样:

SELECT * FROM machine WHERE complex_id = complex.complex_id ORDER BY machine_name;

为了比较 machine.complex_id 和 complex.complex_id,我认为使用参数是正确的方法。

SELECT * FROM machine WHERE complex_id = @compid ORDER BY machine_name;

但是,我对在 SQL 语句中使用参数感到困惑。查看了以下页面:MSDN,我能够弄清楚如何在 SQL 语句中使用参数。但是,我不清楚如何实际创建参数。即使经过大量的谷歌搜索,我也没有发现任何真正突出的作为我想要完成的正确方法的方法。

编辑

<%@ Page Title="Lockout" Language="VB" MasterPageFile="~/Site.Master" 
AutoEventWireup="true" CodeBehind="Lockout.aspx.vb" Inherits="Lockout.Lockout" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">

<asp:DropDownList 
    ID="DropDownList_Complex" 
    runat="server" 
    DataTextField="complex_name"
    DataSourceID="SqlDataSource_Complex" 
    DataValueField="complex_id" 
    AutoPostBack="True" 
    AppendDataBoundItems="True">
    <asp:ListItem Value="" Selected="True">
        Select
    </asp:ListItem>
</asp:DropDownList>

<asp:DropDownList
    ID="DropDownList_Machine"
    runat="server"
    DataTextField="machine_name"
    DataSourceID="SqlDataSource_Machine"
    DataValueField="machine_id"
    AutoPostBack="True"
    AppendDataBoundItems="true">
    <asp:ListItem Value="" Selected="True">
        Select
    </asp:ListItem>
</asp:DropDownList>

<asp:SqlDataSource 
    ID="SqlDataSource_Complex" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:lockoutConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:lockoutConnectionString.ProviderName %>" 
    SelectCommand="SELECT complex_id, complex_name FROM complex ORDER BY complex_name">
</asp:SqlDataSource>

<asp:SqlDataSource
    ID="SqlDataSource_Machine"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:lockoutConnectionString %>"
    ProviderName="<%$ ConnectionStrings:lockoutConnectionString.ProviderName %>"
    SelectCommand="SELECT machine_id, machine_name, complex_id FROM machine ORDER BY machine_name">
</asp:SqlDataSource>

4

1 回答 1

1

您想在指向您提到的第一个下拉列表(复杂的下拉列表)ControlParameter的(填充您的机器下拉列表的那个)中使用 a 。SqlDataSource像这样:

<asp:SqlDataSource
    ID="SqlDataSource_Machine"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:lockoutConnectionString %>"
    ProviderName="<%$ ConnectionStrings:lockoutConnectionString.ProviderName %>"
    SelectCommand="SELECT machine_id, machine_name, complex_id FROM machine WHERE complex_id=@complex_id ORDER BY machine_name">
    <SelectParameters>
        <asp:ControlParameter Name="complex_id" ControlId="DropDownList_Complex" PropertyName="SelectedValue"/>
    </SelectParameters>
</asp:SqlDataSource>

这样,当您在 DropDownList_Complex 中选择一个值时,它会自动填充用于填充下一个下拉列表的查询的参数。

请注意,您可能希望在 DropDownList_Complex 上将“AutoPostBack”设置为 true(以自动重新加载)。

于 2013-07-02T18:49:24.927 回答