2016-06-30 5 views
2

SQLデータベースから複数の値を1つのaspxページの複数のラベルに取り込みたいとします。今起こっていることは、最初の行から値を正常に取得していますが、2行目以降になると、最初の行から値が繰り返され続けます。複数の値をSQLから取得してラベル付けする方法

これは、データベースから値を選択するために使用しているコードです。誰も私が他の行を取得するためにこれを解決するのを助けることができますか?

ページの背後にあるコード:

public partial class filmes : System.Web.UI.Page 
{ 
    string strConnString = ConfigurationManager.ConnectionStrings["ENTDB"].ConnectionString; 
    string str; 
    SqlCommand com; 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     SqlConnection con = new SqlConnection(strConnString); 
     con.Open(); 
     str = "select * from FilmesSeries order by IDFilmesSeries desc"; 
     com = new SqlCommand(str, con); 
     SqlDataReader reader = com.ExecuteReader(); 

     int ID=1; 
     while (reader.Read()) 
     { 
      ID++; 
      Label tituloControl= (Label) Page.FindControl("Titulo"+ID); 
      if(tituloControl!=null) 
      { 
       tituloControl.ID=" Titulo"+ID;   
       tituloControl.Text= reader["Titulo"].ToString(); 
      } 

      Label GeneroControl= (Label) Page.FindControl("Genero"+ID); 
      if(GeneroControl!=null) 
      { 
       GeneroControl.ID=" Genero"+ID;   
       GeneroControl.Text= reader["NomeGenero"].ToString(); 
      } 
     } 

     reader.Close(); 
     con.Close(); 

    } 
} 

filmes.aspxページ:

<div class="row"> 
     <div class="col-md-5"> 
      <asp:Label id="Titulo1" runat="server" /> 
      <asp:Label id="Genero1" runat="server" /> 
     </div> 
    </div> 

    <hr> 

    <div class="row"> 
     <div class="col-md-5"> 
      <asp:Label id="Titulo2" runat="server" /> 
      <asp:Label id="Genero2" runat="server" /> 
     </div> 
    </div> 
+0

あなたが別の行に(または別のラベルに)それぞれの行を印刷したいですか右? –

+0

@JaydipJはい。現在、Titulo1とGenero1は正しく機能していますが、Titulo2とGenero2は同じ値を繰り返していますが、2番目の行から値を取得したいなどです。 – wickenex

+0

あなたはTitulo1、Titulo2、Titulo3を持っていますか.........ラベルは正しいですか? –

答えて

1

まず、あなたがに割り当てるコントロールの右側のインデックスを取得する必要があります。

int i = 1; 
while (reader.Read()) 
{ 
    ... 
    i++; 
} 

それからページからこれらのコントロールを取得する必要があります。

int i = 1; 
while (reader.Read()) 
{ 
    Label titleLabel = (Label)this.FindControl("Titulo" + i); 
    Label genreLabel = (Label)this.FindControl("NomeGenero" + i); 
    ... 
    i++; 
} 

そして最後に、あなたがページ上で、データベース内の10の項目とラベルの唯一の9組を言っている場合(つまり、Titulo9であることは、最後の一つであり、何のTitulo10が存在しない)ことにかかわらず、注意してください

int i = 1; 
while (reader.Read()) 
{ 
    Label titleLabel = (Label)this.FindControl("Titulo" + i); 
    Label genreLabel = (Label)this.FindControl("NomeGenero" + i); 
    titleLabel.Text = reader["Titulo"].ToString(); 
    genreLabel.Text = reader["NomeGenero"].ToString(); 
    i++; 
} 

を割り当てます上記のコードは失敗するので、エラー処理をしてください。 、

  1. は(右の秩序を維持することを確認してください)配列に、すべてのラベルを入れ、そしてtitleLabels[i]
  2. がリピータまたはGridViewのを持って、あなたが行うことができます。

    があることを超える最適化する方法がありますエンティティのリストを表し、必要なラベルを持つテンプレートを定義します。その後、データベースからデータをバインドすることができます。これにより、ソリューションの管理がずっと簡単で簡単になり、エラーが発生しにくくなります。しかし、それは本当に別の主題です、あまりにもこの質問に合わせて、チュートリアルをオンラインで調べてください。

+0

ありがとう、私はあなたの解決策を試みます。私はすでにデータベースからのすべての値を表示する別のページでGridviewを持っているが、それは1つのページから他のページにそれらの値を渡すことは難しいかもしれない、それで私はこの方法を試みた。 – wickenex

+0

@JaydipJ、確かに、 – Andrei

+0

@ wickenexに気づいていただきありがとうございます。私が話しているアプローチでは、他のページからのデータの受け渡しを想定していません。とにかくページ間でデータベースの内容を渡すべきではありません。これは非常に一般的なワークフローです。データベースに移動し、データをロードし、グリッドビューをバインドします。同様の機能を持つ複数のページがある場合は、それぞれ個別に行う必要があります。 – Andrei

0

各行のすべての値を表示し、それらをラベルに割り当てる場合は、あなたは、行ごとに動的にこれらのラベルを作成し、ページに割り当てることができます:

int ID=1; 
while (reader.Read()) 
{ 
    ID++; 
    Label TituloLabel= new Label(); 
    TituloLabel.ID=" Titulo"+ID; 
    TituloLabel.Text= reader["Titulo"].ToString(); 

    Label GeneroLabel= new Label(); 
    GeneroLabel.ID=" Genero"+ID; 
    GeneroLabel.Text= reader["NomeGenero"].ToString(); 

    Page.Controls.Add(TituloLabel); 
    Page.Controls.Add(GeneroLabel); 
} 

[編集]をページ上の特定のコントロールにコントロールをバインドします。そのコントロールはidで取得できます。例として、あなたは例えばdiv要素を持っていると仮定すると:

<div id="placeHolder" runat="server"></div>

次のコードは、そのdiv見つけることによって、単にそれに作成したラベルをバインドします

Page.FindControl("placeHolder").Controls.Add(TituloLabel); 
Page.FindControl("placeHolder").Controls.Add(GeneroLabel); 

を[更新]このコード各行のラベルを生成するのに役立ちますが、以前に作成したラベルをマップする場合は、Andreiのアプローチが有効です。

ハードコードされたラベルをマップアウトするには、[編集] [2]

int ID = 0; 
while (reader.Read()) 
{ 
    ID++; 
    Label tituloControl= (Label) Page.FindControl("Titulo"+ID); 
    if(tituloControl!=null) 
    {   
     tituloControl.Text= reader["Titulo"].ToString(); 
    } 

    Label GeneroControl= (Label) Page.FindControl("Genero"+ID); 
    if(GeneroControl!=null) 
    {  
     GeneroControl.Text= reader["NomeGenero"].ToString(); 
    } 
} 

enter image description here

+0

私はあなたのコードを試しました。唯一好きだったのは、ラベルを追加した場所に値を挿入することです。 – wickenex

+0

@wickenexそれでは、.FindControl関数を使用して、ページ上のコントロールを見つけてバインドしてください。 –

+0

@wickenexデモへの私の答えを更新しました。あなたが望むものを達成する方法を教えてください。 –

関連する問題