2016-10-28 111 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(); 
}