2016-07-29 60 views
0

我試圖動態地將數據檢索到標籤。意思說標籤會改變,因爲我改變DropDownList選擇的項目。可能嗎?使用DropDownList動態檢索數據庫信息到標籤

ASPX:

<asp:DropDownList ID="ddl_CNo" AutoPostBack="true" runat="server" Height="16px" Width="138px" OnSelectedIndexChanged="ddl_CNo_SelectedIndexChanged" > 
       </asp:DropDownList> 

aspx.cs:

//page load box retrieve 
    SqlConnection myConnect2 = new SqlConnection(_connStr); 
    string strCommandText2 = "SELECT Card_Type, Card_Type2, Card_Number, Card_Number2, Name_On_Card, Name_On_Card2, Expired_Date, Expired_Date2 From Card_Details where Card_Id = @Card_Id"; 
    myConnect2.Open(); 
    SqlCommand cmd2 = new SqlCommand(strCommandText2, myConnect2); 
    cmd2.Parameters.AddWithValue("@Card_Id", 1); 

    ////open connection and retrieve data by calling ExecuteReader 

    SqlDataReader dr2 = cmd2.ExecuteReader(); 

    if (dr2.Read()) 
    { 

     string CNo1 = dr2["Card_Number"].ToString(); 
     string CNo2 = dr2["Card_Number2"].ToString(); 

     CNo = new List<string>(); 
     CNo.Add(dr2["Card_Number"].ToString()); 
     CNo.Add(dr2["Card_Number2"].ToString()); 

     ddl_CNo.DataSource = CNo; 
     ddl_CNo.DataBind(); 

    ddl_CNo.Text = dr2["Card_Number"].ToString(); 
    ddl_CNo.Text = dr2["Card_Number2"].ToString(); 
    Lbl_CardName.Text = dr2["Name_On_Card"].ToString(); 
    Lbl_CardName.Text = dr2["Name_On_Card2"].ToString(); 
    Lbl_CardType.Text = dr2["Card_Type"].ToString(); 
    Lbl_CardType.Text = dr2["Card_Type2"].ToString(); 
    Lbl_EDate.Text = dr2["Expired_Date"].ToString(); 
    Lbl_EDate.Text = dr2["Expired_Date2"].ToString(); 


    } 
    dr2.Dispose(); 
    dr2.Close(); 

    myConnect2.Close(); 

    if (!IsPostBack) 
    { 

     LoadCart(); 

    } 
} 

DDLSelectedIndexChanged:

protected void ddl_CNo_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    { 
     SqlConnection myConnect2 = new SqlConnection(_connStr); 
     string strCommandText2 = "SELECT Card_Type, Card_Type2, Card_Number, Card_Number2, Name_On_Card, Name_On_Card2, Expired_Date, Expired_Date2 From Card_Details where Card_Id = @Card_Id"; 
     myConnect2.Open(); 
     SqlCommand cmd2 = new SqlCommand(strCommandText2, myConnect2); 
     cmd2.Parameters.AddWithValue("@Card_Id", 1); 
     SqlDataReader dr2 = cmd2.ExecuteReader(); 

     if (dr2.Read()) 
     { 

      string CNo1 = dr2["Card_Number"].ToString(); 
      string CNo2 = dr2["Card_Number2"].ToString(); 

      CNo = new List<string>(); 
      CNo.Add(dr2["Card_Number"].ToString()); 
      CNo.Add(dr2["Card_Number2"].ToString()); 

      ddl_CNo.DataSource = CNo; 
      ddl_CNo.DataBind(); 

      if (ddl_CNo.SelectedItem.Equals("Card_Number")) 
      { 
       Lbl_CardName.Text = dr2["Name_On_Card"].ToString(); 
       Lbl_CardType.Text = dr2["Card_Type"].ToString(); 
       Lbl_EDate.Text = dr2["Expired_Date"].ToString(); 
      } 
      else if (ddl_CNo.SelectedItem.Equals("Card_Number2")) 
      { 
       Lbl_CardName.Text = dr2["Name_On_Card2"].ToString(); 
       Lbl_CardType.Text = dr2["Card_Type2"].ToString(); 
       Lbl_EDate.Text = dr2["Expired_Date2"].ToString(); 
      } 
      dr2.Dispose(); 
      dr2.Close(); 

      myConnect2.Close(); 
     } 
    } 
} 

圖片僅供參考:enter image description here

我真正的新所有這些,任何幫助非常感謝:)

+1

你正在做這個正確的。但爲什麼不使用數據適配器並使用斷開模型。它會更容易。但最新的問題 –

+0

像我提供的圖片:卡號DDL不顯示任何值(DDL中沒有)我需要從datalist檢索DDL信息,但由於某種原因,它不工作 –

+1

@john所有代碼移動它下'Page_Load' – Webruster

回答

1

考慮到你的情況後,我認爲這將是解決方案,將工作。綁定您的DropDownList一旦頁面加載內,然後onselctedIndexChanged我們可以獲取數據的基礎上CardID選擇和綁定與所有需要數據的標籤。您可以根據您的規格優化代碼。嘗試一次:

string _connStr =ConfigurationManager.ConnectionStrings[""].ConnectionString; 
     string query = ""; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       query = "SELECT Card_ID,Card_Name From Card_Details"; // Do Change your query according to your requirment 
       DataTable drpdt = SelectedBindValue(query); 
       if (drpdt.Rows.Count > 0) 
       { 
        drp.DataSource = drpdt; 
        drp.DataTextField = "Card_Name"; 
        drp.DataValueField = "Card_ID"; 
        drp.DataBind(); 
       } 
      } 
     } 

     protected void Unnamed_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      string cardId = drp.SelectedValue; 
      query = String.Format("SELECT Card_Type, Card_Type2, Card_Number, Card_Number2, Name_On_Card, Name_On_Card2, Expired_Date, Expired_Date2 From Card_Details where Card_Id = {0}",cardId); 
      DataTable lablebind = SelectedBindValue(query); 
      if (lablebind.Rows.Count>0) 
      { 
       Lbl_CardName.Text = lablebind.Rows[0]["Name_On_Card"].ToString(); // considering there is only one row 
       Lbl_CardType.Text = lablebind.Rows[0]["Card_Type"].ToString();// considering there is only one row 
       Lbl_EDate.Text = lablebind.Rows[0]["Expired_Date"].ToString();// considering there is only one row 
      } 
     } 
     protected DataTable SelectedBindValue(string query) 
     { 
      using(SqlConnection myConnect2 = new SqlConnection(_connStr)) 
      {    
       using(SqlDataAdapter sqd = new SqlDataAdapter(query,myConnect2)) 
       { 
        using (DataTable dt = new DataTable()) 
        { 
         sqd.Fill(dt); 
         return dt; 
        } 
       } 
      } 
     }