如何动态填充Bootstrap下拉列表

时间:2015-04-11 11:50:58

标签: c# database twitter-bootstrap

我是Bootstrap.i的新手,有一个填充通知下拉,如

<!-- BEGIN NOTIFICATION DROPDOWN -->
                <li class="dropdown" id="notifications-header">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
                        <i class="glyph-icon flaticon-notifications"></i>
                        <span class="badge badge-danger badge-header">6</span>
                    </a>
                    <ul class="dropdown-menu">
                        <li class="dropdown-header clearfix">
                            <p class="pull-left">Notifications</p>
                        </li>
                        <li>
                            <ul class="dropdown-menu-list withScroll" data-height="220">
                                <li>
                                    <a href="#">
                                        <i class="fa fa-star p-r-10 f-18 c-orange"></i>
                                        Steve have rated your photo
                                        <span class="dropdown-time">Just now</span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#">
                                        <i class="fa fa-heart p-r-10 f-18 c-red"></i>
                                        John added you to his favs
                                        <span class="dropdown-time">15 mins</span>
                                    </a>
                                </li>

等等 现在,我如何使用数据库动态填充此下拉列表?

2 个答案:

答案 0 :(得分:1)

以下是答案......我只是介绍了它的工作原理......任何人都可以使用适合他们的数据结构。

(1)在数据库中,我创建了一个名为&#34;的通知&#34;与三个领域   (a)friend_name;存储给你发消息的朋友的名字   (b)中通知;存储原始邮件   (3)notification_time;存储发消息的时间

(2)在后面的代码中,我创建了3个Lists对象和一个存储消息计数的整数

(a)friend_name;存储给你发消息的朋友的名字   (b)中通知;存储原始邮件   (c)中notification_time;存储一个消息给你的时间   (d)数量;存储消息计数。     private List friend_name = new List();     private List notification_time = new List();     private list notification_time = new List();

(3)现在我在页面加载中填充这些列表,这对于开发人员来说是常见的...      conn = new SqlConnection(&#34; Data Source = XXXX; Initial Catalog = XXXX; Integrated Security = True&#34;);         SqlCommand comm = new SqlCommand(&#34; select * from notifications&#34;);         comm.Connection = conn;         comm.CommandType = CommandType.Text;         SqlDataReader阅读器;         conn.Open();         reader = comm.ExecuteReader();

    while (reader.Read())
    {
        friend_name.Add(reader["friend_name"].ToString());
        notifications.Add(reader["notifications"].ToString());
        notification_time.Add(reader["notification_time"].ToString());
        count++;
    }

(4)现在转到aspx文件(标记)并调用三个列表对象......     &lt;%for(int i = 0; i                                                                                                                                                                                                                                                                                                            的&#39;&LT;%= FRIEND_NAME [I]%GT;&#39;                                                                                                      &#39;&LT;%= Notification_Time [I]%GT;&#39;                                                                                                                                           

&#39;&LT;%=声明[I]%GT;&#39; ...

                                                                             

                                 <% } %>

最后,您将能够动态填充引导程序。

答案 1 :(得分:0)

注意:我正在使用您的答案作为参考,我在此过程中做了一些假设,正在编辑

你有表,sql查询。 (你应该真正研究实体框架,而不是做常规的SQL查询。实体框架是读取/保存数据到数据库时的新风格。)

您应该创建一个可以包含表中数据的新类。类似的东西:

public class Notification
{
    public string FriendName {get;set;}
    public string Notification {get;set;}
    public DateTime Date {get;set;} // assuming you have a valid datetime that can be parsed.
}

Page_Load事件中,您可以进行一些修改。 在这里,我们将来自阅读器的所有数据放入Notification对象中,我们将这些对象放入List<Notification>,然后我们最后将数据绑定到转发器,转发器将负责呈现所需的输出。注意:在SqlConnection中包装SqlCommandSqlReaderusing()将在使用后处理它们,并释放资源。

        string connectionString = "Data Source=XXXX;Initial Catalog=XXXX;Integrated Security=True";
        string sqlQuery = "Select * from notifications";

        List<Notification> notifications = new List<Notification>();

        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            using (SqlCommand comm = new SqlCommand(sqlQuery, conn))
            {
                comm.CommandType = CommandType.Text;

                using (SqlDataReader reader = comm.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Notification notification = new Notification();
                        notification.FriendName = reader["friend_name"].ToString();
                        notification.Notification = reader["notifications"].ToString();
                        notification.Date = reader["notification_time"].ToString();

                        notifications.Add(notification);
                    }
                }
            }
        }

        DropDownItems.DataSource = notifications;
        DropDownItems.DataBind();

您要求的元素是asp:Repeater,您可以添加DataSourceDataBind。要重复下拉列表中的元素,您可以这样做:(注意:我假设friend_name是项目名称,通知是网址。)

<asp:Repeater ID="DropDownItems" runat="server">
    <HeaderTemplate>
         <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
    </HeaderTemplate>
    <ItemTemplate>
        <li role="presentation">
            <a role="menuitem" tabindex="-1" href="<%# Eval("Notification") %>"><%# Eval("FriendName") %></a>
        </li>
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:repeater>

TL; DR:在webforms标记(aspx)中使用asp:Repeater而不是常规for循环。