【问题标题】:How can I place a list inside ASP.NET datalist如何在 ASP.NET 数据列表中放置一个列表
【发布时间】:2011-12-29 20:11:37
【问题描述】:

如果这个问题的答案似乎很明显,我深表歉意,但我自己无法弄清楚。 我正在构建一个 Web 应用程序,并且已经到了需要从数据库中获取数据并将其显示在数据列表中的阶段。

我的目标是在我的数据列表中输出以下输出:

问题 1 名称
答案 1
答案 2
...
答案 8
问题 2 名称
答案 1
答案 2
...
答案 8
问题 3 名称
答案 1
....

你明白了。 我已经编写了一个基本数据列表,从问题(下面的代码)开始,它在一定程度上有效,但是我不太确定如何获取答案,然后重复该过程,直到获取所有数据。 这是代码。 确认.aspx

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

确认.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));
        }

我知道我遗漏了一些东西,但我不确定要包含哪些内容才能显示每个问题的答案。

谢谢 伊迪尼,

【问题讨论】:

  • 好问题,以及结构良好的代码。您可能可以删除您的数据访问层代码,因为它的功能是隐含的,不是问题的直接部分,并且会使问题比它需要的长得多。

标签: c# asp.net list datalist


【解决方案1】:

基本上,您可以将DataList 放在另一个DataListItemTemplate 内。

您使用DataKeyField 属性链接它们。

tutorial 将引导您完成它。

【讨论】:

  • 是的,OP 面临的问题需要嵌套数据绑定控件。外部DataList 中的Repeater 也可能是一个不错的选择。
  • 教程提供了正确的方法。只是试图将数据读取器移动到 App_Code 中的 .cs,同时将数据绑定保留在 aspx.cs 页面上。有什么想法吗?
【解决方案2】:

我不确定我是否正确理解了您的问题。 我想您要做的是从数据库中获取所有问题,然后显示与该问题下方的问题相对应的所有答案。

您可以尝试使用中继器。基本上会有两个中继器,一个在另一个内部。外部中继器将显示来自数据源的问题,而内部中继器将显示该特定问题的答案。

【讨论】:

    猜你喜欢
    • 2022-06-18
    • 2013-02-16
    • 2014-12-31
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多