【问题标题】:Populate Accoridon from SQL Database Values从 SQL 数据库值填充 Accoridon
【发布时间】:2015-07-31 13:03:10
【问题描述】:

我正在创建一个将从 sql 数据库填充的手风琴。例如,如果数据库有 5 条记录(包括标题和描述),那么手风琴将有 5 个面板。绑定到面板标题字段的标题和由描述组成的正文。如下图:

这是我到目前为止使用 DataList 并将手风琴添加到项目模板的结果。

<asp:DataList ID="DynamicAccordion" runat="server" DataKeyField="Id" RepeatDirection="Vertical">
    <HeaderTemplate>
        <!--items in here are rendered once for the entire table and can be title, etc...)    -->
    </HeaderTemplate>
    <ItemTemplate>
        <div class="panel-group" id="accordion">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h4 class="panel-title">
                        <a runat="server" data-toggle="collapse" href="#collapseOne" data-parent="#accordion">
                            <asp:Label runat="server" Text='<%#Eval("Section") %>' ID="SectionTitle"></asp:Label>
                        </a>
                    </h4>
                </div>
                <div id="collapseOne" class="panel-collapse collapse in">
                    <div class="panel-body">
                         <a runat="server" data-toggle="collapse" href="#collapseOne" data-parent="#accordion">
                            <asp:Label runat="server" Text='<%#Eval("Description") %>' ID="Description"></asp:Label>
                        </a>
                    </div>
                </div>
            </div>
        </div>
    </ItemTemplate>
    <FooterTemplate>
        <!--Same as the header template just the footer-->
    </FooterTemplate>
</asp:DataList>

这里是将手风琴绑定到 sql 记录的后端:

   protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        LoadData();
    }

}

private void LoadData()
{
    var data = DataAccess.GetCurrentProject();


    try
    {
        //data.Columns.Add("hrefPath");
        foreach (DataRow dr in data.Rows)
        {
            dr["SectionTitle"] = dr["Section"];
            dr["Description"] = dr["Description"];
        }
        DynamicAccordion.DataSource = data;
        DynamicAccordion.DataBind();

    }
    catch (Exception ex)
    {

    }
}

//Data Access class code
       public static DataTable GetCurrentProject()
        {
            DataTable dt = new DataTable();
            try
            {
                string sqlCommandText = "Select * FROM RequestData";
                using (SqlConnection connect = new SqlConnection(strConn))
                {
                    using (SqlDataAdapter sda = new SqlDataAdapter(sqlCommandText, connect))
                    {
                        sda.Fill(dt);
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            return dt;
        }

任何有助于创建这种动态手风琴的信息都会很棒。

谢谢

【问题讨论】:

  • 你不是说你当前的代码会出现什么样的错误,如果有的话......
  • @matt,没有错误。手风琴只是不显示。这让我相信我没有遍历每条记录并显示数据库中的值。

标签: c# html sql-server accordion


【解决方案1】:

在 aspx 文件中使用 for each 循环来执行此操作: (请记住,您还需要附加到您的 ID 字段以使其唯一,否则您最终会得到重复)

<% foreach (DataRow dr in data.Rows) { %>
    <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a runat="server" data-toggle="collapse" href="#collapseOne" data-parent="#accordion">
                        <%= dr["Section"] %>
                    </a>
                </h4>
            </div>
            <div id="collapseOne" class="panel-collapse collapse in">
                <div class="panel-body">
                     <a runat="server" data-toggle="collapse" href="#collapseOne" data-parent="#accordion">
                        <%= dr["Description"] %>
                    </a>
                </div>
            </div>
        </div>
 <% } %>

【讨论】:

  • 感谢您的回复。在这种情况下,我会用您添加的 foreach 循环替换数据列表吗?
  • 这里的概念是 for each 循环将在每次迭代时将所有包含的 html 元素添加到页面中(即 4 次循环迭代 = 4 个手风琴项)。在您的情况下,您将在循环内拥有手风琴项目的 html - 我在上面已经猜到了。所以你可以把循环放在你的面板组中。
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多