2011-12-29 11 views
3

これに対する答えが明らかなように思えば謝りますが、私自身はそれを理解できません。 私はWebアプリケーションを構築しており、データベースからデータを取得してデータリストに表示する必要がある段階に来ました。私はデータリストで、次の出力を目指していますASP.NETデータリスト内にリストを配置するには

質問1名
回答1
回答2
...
回答8
質問2名
回答1
回答2
...
回答8
質問3名
回答1
....

あなたがアイデアを得ます。 私は基本的なデータリストを書いていますが、ある程度はうまくいく質問(以下のコード)で書かれていますが、すべてのデータが取得されるまで、答えを出してからプロセスを繰り返す方法はよくわかりません。 ここにコードがあります。 Confirm.aspx

<asp:DataList runat="server" id="dgQuestionnaire"> 
        <ItemTemplate> 
         <asp:Label ID="Name" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "QuestionText") %>' /> 
        </ItemTemplate> 
       </asp:DataList> 

Confirm.aspx.cs

public partial class Confirm_Questionnaire : System.Web.UI.Page 
    { 
     OsqarSQL GetData; 
     DataTable DT; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      GetData = new OsqarSQL(); 
      int questionnaireId = (int)Session["QuestionnaireID"]; 
      string questionnaireName = (string)Session["QuestionnaireName"]; 
      ReturnQnrName.Text = questionnaireName + " (ID: " + questionnaireId.ToString() + ")"; 
      int questionId = GetData.GetQuestionID(questionnaireId); 
      DT = GetData.GetQuestionName(questionnaireId); 
      dgQuestionnaire.DataSource = DT; 
      dgQuestionnaire.DataBind(); 

     } // End Page_Load 

    } // Emd Class Confirm_Questionnaire 

Questionnaire.cs(にApp_Code)

public class OsqarSQL 
    { 
     private string _productConnectionString; 
     private SqlConnection _productConn; 

     public OsqarSQL() 
     { 
      _productConn = new SqlConnection(); 
      _productConnectionString += "data source=mssql.database.co.uk; Initial Catalog=devworks_oscar;User ID=me;Password=you"; 
      _productConn.ConnectionString = _productConnectionString; 
     } 
     public DataTable GetQuestionName(int QuestionnaireID) 
     { 
      string returnValue = string.Empty; 
      SqlCommand myCommand = new SqlCommand("GetQuestion", _productConn); 
      myCommand.CommandType = CommandType.StoredProcedure; 
      myCommand.Parameters.Add(new SqlParameter("@QUEST_ID", SqlDbType.Int)); 
      myCommand.Parameters[0].Value = QuestionnaireID; 
      return createDataTable(getData(myCommand)); 
     } 
     public DataTable GetAnswerTitle(int QuestionnaireID) 
     { 
      string returnValue = string.Empty; 
      SqlCommand myCommand = new SqlCommand("GetAnswer", _productConn); 
      myCommand.CommandType = CommandType.StoredProcedure; 
      myCommand.Parameters.Add(new SqlParameter("@QUEST_ID", SqlDbType.Int)); 
      myCommand.Parameters[0].Value = QuestionnaireID; 
      return createDataTable(getData(myCommand)); 
     } 

私は何かが欠けています知っているが、私表示するために何を含めるべきかわからないそれぞれの質問の答え。

おかげ Idny、

+0

良い質問ときちんと構造化されたコード。おそらくデータアクセスレイヤーのコードは、その機能が暗示されているため、問題の直接的な部分ではないため、必要以上に長くなる可能性があります。 – pseudocoder

答えて

4

基本的に、あなたは別のDataListItemTemplateDataListを置くことができます。

DataKeyFieldプロパティを使用してリンクします。

これはtutorialです。

+0

ええ、OPの問題はネストされたデータバインドされたコントロールを要求します。外側の 'DataList'内の' Repeater 'も良い選択かもしれません。 – pseudocoder

+0

チュートリアルが正しい方法を提供しました。 aspx.csページのデータバインディングを維持しながら、データコードリーダーをApp_Code内の.csに移動しようとするだけです。何か案は? – HGomez90

0

私はあなたの質問を正しく理解しているかどうかわかりません。 あなたがしようとしているのは、DBからすべての質問を取得し、その質問の下の質問に対応するすべての回答を表示することです。

リピーターを使用できます。基本的には、2つのリピーターがあります。外側のリピータはデータソースからの質問を表示し、内側のリピータはその特定の質問に対する回答を表示します。

関連する問題