2016-10-28 92 views
0

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

+0

显示你的表在这里可以帮助回答你的问题。 – bogzy

+0

我有7个表(A-G)具有相同的列名称(Sno,Product,Picture)。当页面加载的DDL1包含来自所有表格的“产品”值时,当我从DDL1中选择一个值时,那么在具有该产品的A-G表格中应该出现DDL2,没有该产品的人员不应该进入DDL2。我想检索表名,我需要为此查询/ StoredProcedure。 –

+0

我在数据库中有7个不同的表格(A-G)。每个表具有相同的列名(Sno,Product,Picture)。当我的页面加载时,将只有一个DDL1和所有表(A-G)中的“产品”名称。还有一些常见的产品名称。 EX。产品“笔”可能包含表B,表C,表F.当我在DDL1中选择“笔”时,我想用表名B,C,F来数据绑定我的DDL2。怎么可能。我想要一个查询检索表名,基于列值而不是列名。 –

回答

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; 
    } 
} 

只是给你一个主意。

+0

我有具有相同列名的7个表(AG)(Sno,Product,Picture)。当页面加载的DDL1包含来自所有表格的“产品”值时,当我从DDL1中选择一个值时,那么在具有该产品的A-G表格中应该出现DDL2,没有该产品的人员不应该进入DDL2。我想检索表名,我需要为此查询/ StoredProcedure。 –

+0

我很抱歉,但我真的不明白你想做什么。你能重新表达这个问题吗? – McNets

+0

我在数据库中有7个不同的表格(A-G)。每个表具有相同的列名(Sno,Product,Picture)。当我的页面加载时,将只有一个DDL1和所有表(A-G)中的“产品”名称。还有一些常见的产品名称。 EX。产品“笔”可能包含表B,表C,表F.当我在DDL1中选择“笔”时,我想用表名B,C,F来数据绑定我的DDL2。怎么可能。我想要一个查询检索表名,基于列值而不是列名。 –

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(); 
}