如何修改循环函数以使用SQL查询而不是预定义的值

时间:2014-05-09 14:51:46

标签: c# sql sql-server

我在SQL中有一个表,它显示以下数据:

LOCATION                  LINK                 TAGS
New Rochelle              nr.htm               5
Purchase                  pr.htm               3
Rye                       ry.htm               8
Scarsdale                 sc.htm               2
White Plains              wp.htm               9
Yonkers                   qw.htm               5

我在页面中设置了以下<asp:Repeater>

<asp:Repeater ID="menu_ul_1" runat="server">
            <HeaderTemplate>
                <ul class="my-menu ulLocation" id="ulLocation_selector">
            </HeaderTemplate>
            <ItemTemplate>
                <li class="active">
                    <a class="large btn" href='<%# Eval("href_li")%>'>
                        <span class="check"><i class="icon icon-ok"></i></span>
                        <span class="name"><%# Eval("DisplayText")%></span>
                        <span class="count"><%# Eval("DisplayQty")%></span>
                    </a>
                </li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>

以下C#代码:

protected void Page_Load(object sender, EventArgs e)
    {

        /****************** THE BELOW IS GENERATING UL > LI ******************/

        DataTable newsDataTable = new DataTable();

        // add some columns to our datatable
        newsDataTable.Columns.Add("href_li");
        newsDataTable.Columns.Add("DisplayText");

        for (int i = 1; i <= 5; i++) {
            DataRow newsDataRow = newsDataTable.NewRow();
            newsDataRow["href_li"] = "?sc=item_" + i;
            newsDataRow["DisplayText"] = "List Item # "+i;
            newsDataTable.Rows.Add(newsDataRow);
        }
        menu_ul_1.DataSource = newsDataTable;
        menu_ul_1.DataBind();
    }

如何修改上面的代码,而不是使用内部for循环,我可以使用SQL表中的行数并填写以下值:

'<%# Eval("href_li")%>' = LOCATION
'<%# Eval("DisplayText")%>' = LINK
'<%# Eval("DisplayQty")%>' = TAGS

2 个答案:

答案 0 :(得分:1)

您是否只是询问如何遍历数据行?像这样:

foreach DataRow lobjDataRow in dsLocation.Tables[0].Rows
{
    DataRow newsDataRow = newsDataTable.NewRow();
    newsDataRow["href_li"] = lobjDataRow["Location"] ;
    newsDataRow["DisplayText"] = lobjDataRow["Link"] ;
    newsDataTable.Rows.Add(newsDataRow);
}

答案 1 :(得分:0)

OleDbDataReader是将数据库信息加载到asp:Repeater的合适方式。读者可以直接绑定到转发器作为数据源。

string connectionString = "< your connection string >";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    connection.Open();

    OleDbCommand command = new OleDbCommand();
    command.Connection = connection;
    command.CommandText = "SELECT LOCATION, LINK, TAGS FROM [dbo].[NewsTable]";
    command.CommandType = CommandType.Text;

    using (OleDbDataReader reader = command.ExecuteReader())
    {
        menu_ul_1.DataSource = reader;
        menu_ul_1.DataBind();
    }
}

ItemTemplate中,查询中的列名应提供给Eval表达式。

<a class="large btn" href='<%# Eval("LINK")%>'>
    <span class="check"><i class="icon icon-ok"></i></span>
    <span class="name"><%# Eval("LOCATION")%></span>
    <span class="count"><%# Eval("TAGS")%></span>
</a>