2016-05-14 21 views
0

私はASP.NET、visual studioでプログラミングしています。私はHTML形式で作成されたドロップダウンリストを持っています。リストをドロップダウンすると、関連する列のレコードが表に表示されます。しかし、私が望むのは、そのリストアイテムで対応する値/レコードを表示することです。ドロップダウンリスト項目に関連付けられた値を表示するには(リストから選択した後)

たとえば、表の場合、私は列id,productnameおよびpriceを持っています。特定の製品名(ドロップダウンリストから)を選択した後、関連する価格をラベルの前に表示する必要があります。

ただし、デフォルトでは、ドロップダウンリストに最初に何も表示しないようにします。

UPDATE:

Store.aspx:

<form id="form1" runat="server"> 
    <div> 
     Welcome 
     <asp:Label ID="Label3" runat="server" ></asp:Label> 
     <br /> 
     <br /> 
     Products: <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" ></asp:DropDownList> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [productdata]"></asp:SqlDataSource> 

    &nbsp;Price: 
     <asp:Label ID="Label1" runat="server" ></asp:Label> 
     <br /> 
     <br /> 
     <asp:Button ID="Button1" runat="server" Text="Add to Cart" /> 
     <br /> 
     <br /> 
     Items in cart: <asp:DropDownList ID="DropDownList2" runat="server"></asp:DropDownList> 

     <br /> 
     <br /> 

     Total Price: <asp:Label ID="Label2" runat="server"></asp:Label> 

    </div> 
    </form> 

Store.aspx.cs:

public partial class Store : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      Label3.Text = Request.QueryString["name"];//show welcome text 
      String cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
      if (!IsPostBack) 
      { 
       using (SqlConnection sc = new SqlConnection(cs)) 
       { 
        SqlCommand sqlcom = new SqlCommand("Select id, productname, price from productdata", sc); 
        sc.Open(); 
        DropDownList1.DataTextField = "productname";//show in the dropdown list 
        DropDownList1.DataValueField = "price"; //show in the label 
        DropDownList1.DataSource = sqlcom.ExecuteReader(); 
        DropDownList1.DataBind(); 
       } 
      } 
     } 
     protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      String cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
      SqlDataReader rd; 
      using (SqlConnection sc = new SqlConnection(cs)) 
      { 
       SqlCommand sqlcom = new SqlCommand("Select id, productname, price from productdata where id=" + Convert.ToUInt32(DropDownList1.SelectedValue), sc); 
       sc.Open(); 

       rd = sqlcom.ExecuteReader(); 
       if (rd.Read()) 
       { 
        Label1.Text = rd[2].ToString(); 
       } 
       sc.Close(); 

      } 

     } 
} 

データベース:

CREATE TABLE [dbo].[productdata] (
    [Id]   INT   NOT NULL, 
    [productname] VARCHAR (50) NULL, 
    [price]  FLOAT (53) NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC) 
); 
+0

あなたはSQL Serverを使用しているようですが、mysqlにタグを付けました。更新してください。 –

答えて

1

この編集ACCO

単純に解決するためにポストバックイベントを使用して::ArindamからPage_LoadおかげでAutoPostBack=Trueif (!IsPostBack)を使用するrding

まずあなただけの選択を取得あなたの背後にあるコードに続いてDropDownListコントロール

<asp:DropDownList ID="DropDownList1" runat="server" 
    OnSelectedIndexChanged="GetPrice" AutoPostBack="true"> 
</asp:DropDownList> 

ためOnSelectedIndexChangedイベントを追加する必要があります値段とラベル価格に塗りつぶし

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Label3.Text = Request.QueryString["name"];//show welcome text 
     String cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
     using (SqlConnection sc = new SqlConnection(cs)) 
     { 
      SqlCommand sqlcom = new SqlCommand("Select id, productname, price from productdata", sc); 
      sc.Open(); 
      DropDownList1.DataTextField = "productname";//show in the dropdown list 
      DropDownList1.DataValueField = "price"; //show in the label 
      DropDownList1.DataSource = sqlcom.ExecuteReader(); 
      DropDownList1.DataBind(); 
     } 
    } 
} 
protected void GetPrice(object sender, EventArgs e) 
{ 
    Label1.Text = DropDownList1.SelectedValue; 
} 
  1. AutoPostBack=Trueを使用する必要があります。ドロップダウンリストのインデックスを変更すると、サーバーにポストバックが発生し、GetPrice(...)という関数が呼び出されるようになります。

  2. たびにページpostback、それはあなたがCASE1 _thisは、ページがロードされる最初の時間である、またはケース2 _aポストバックイベントかどうかをチェックするためにpropertive IsPostBackを使用しなければならないので、最初の関数Page_Load(...)を呼び出して、あなたでしょうcase1にddlデータソースを設定するだけです。データソースを設定した場合、デフォルトではドロップダウンリストにリセットされ、リストの最初の項目が選択されるためです。ページがこのポストバックソリューションのように再びロードしないよう

事前に行く

は、あなたは、この問題を解決するためにはJavaScriptとjQueryを使用して検討すべきです。

もう1つ、あなたのコントロールの名前を付けて、そのようにデフォルトにしないでください。それはtwo hard things in programmingの1つです。

+0

Pham X. Bach、ありがとうございます。残念ながら、何もしません。私の更新をご覧ください。 –

+0

'protected void GetPrice(.....' Store.aspx.cs'コードに入れましたか? –

+0

Pham X. Bach、はい、プロジェクトをビルドした後、エラーはなくなりました。 –

1

はい、私はdatatableを使用してくださいしてください私はうまく動作しないと確信しています。

+0

Arindam、datatable?ok、私は現在持っているものを正確に更新しました。 –

+0

データベーステーブルを意味する場合は、私は、私はあなたのためにコードを更新するつもりです。私はデータベーステーブルからデータを取得しています。 –

関連する問題