如何根据列值获取表名?

时间:2016-10-28 07:30:06

标签: sql asp.net

我在asp.net网页上有一个下拉列表DDL1,它与特定数据库中所有表中的“Product”列数据绑定。现在我的问题是,如果我从DDL1中选择一个产品名称,那些拥有该产品名称的客户应绑定另一个DDL2的下拉列表。我每个客户都有桌子。我根据列的名称获取客户名称,但我希望客户名称基于列值。什么是查询/存储过程和代码? (Asp.Net,Sql-2014,C#)。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你有7个表格,其架构类似于:

Sno int,
Product varchar,
Picture varchar

首先使用所有可能的产品名称填充DropDownList。 然后你选择这个DropDownList的一个项目,例如:'Pen',你需要知道哪些表有Product ='Pen'。

一种可能的解决方案是构建一个过滤每个表并填充第二个DropDownList的函数。

string [] table_name = {"Table1","Table2",...};

private void FillSecondDDL(string product_name)
{
    DDL2.Items.Clear();

    foreach(string tname in table_name)
    {
        if (HasThisProduct(tname, product_name)
        {
            DDL2.Items.Add(tname);
        }
    }
}


private bool HasThisProduct(string table_name, string product_name)
{
    string cmd = string.Format("select Sno from {0} where Product='{1}'"
                               , table_name
                               , product_name);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        DataTable table;
        SqlDataAdapter adapter = new SqlDataAdapter();
        adp.SelectCommand = new SqlCommand(cmd, connection);
        adp.Fill(table);

        return table.Rows.Count > 0 ? true : false;
    }
}

只是为了给你一个想法。

答案 1 :(得分:0)

有许多不同的方法可以实现这一目标。这是一个:

<body>
    <form id="form1" runat="server">
    <div>    
        <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="Title" DataValueField="Id" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource2" DataTextField="Name" DataValueField="Id" AutoPostBack="True">
        </asp:DropDownList>       
    </div>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="[YOUR CONNECTION STRING]" ProviderName="System.Data.SqlClient" SelectCommand="SELECT [Id], [Title] FROM [Products]"></asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="[YOUR CONNECTION STRING]" ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM [Customers] WHERE ([ProductId] = @ProductId)">
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="ProductId" PropertyName="SelectedValue" Type="Int32" DefaultValue="1" />
            </SelectParameters>
        </asp:SqlDataSource>
    </form>
</body>

您需要的唯一C#代码是:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    this.DropDownList2.DataBind();
}