在ASP.NET中显示带有数字的结果列表

时间:2010-09-14 20:25:07

标签: asp.net

我在ASP.NET Web表单中有一个常见问题。我很惊讶我没有找到一个共同的解决方案:)

我有一个从SQL Server数据库返回的结果列表。我想在我的网页上显示这些结果,并在其左侧显示数字。例如,我的结果集可能如下所示:

New York | NY
Chicago | IL
Los Angeles | CA

在我的网页中,我想将它们显示为:

1. New York, NY
2. Chicago, IL
3. Los Angeles, CA

我很惊讶我无法找到让数字自动出现的方法。我做错了吗?

6 个答案:

答案 0 :(得分:2)

HTML直接支持您要做的事情,您不需要任何花哨的ASP.NET。 HTML标记<ol><li>会创建一个有序列表。

如果要使用ASP.NET控件来包装有序列表,可以使用Repeater:http://msdn.microsoft.com/en-us/magazine/cc163780.aspx。使用它的一个例子是:http://www.jigar.net/howdoi/viewhtmlcontent194.aspx

摘自http://www.htmlcodetutorial.com/_OL.html

<OL>
<LI>Take 495 north
<LI>Cross the 14th Street Bridge
<LI>Take the Maine Avenue exit
<LI>Turn left at the first light
</OL>

答案 1 :(得分:1)

在HTML中使用有序列表(<ol>):

<ol>
<% foreach(var item in theList) { %>
    <li><%= item %></li>
<% } %>
</ol>

答案 2 :(得分:1)

由于您使用的是WebForms,请考虑使用BulletedList control。您可以将BulletedList控件绑定到数据源控件(如SqlDataSource或LinqDataSource控件),也可以通过DataSource属性以编程方式填充其值。

要使BulletedList呈现数字,请将BulletStyle属性设置为Numbers。

以下是使用BulletedList和SqlDataSource控件的示例:http://aspalliance.com/247_ASPNET_v20_Introducing_BulletedList_Control.4

答案 3 :(得分:1)

这是一项常见任务,需要很好地发布。将您的内容与演示文稿分离非常重要。这意味着您的数据应该被拆分并分开,以便任何控件或标签都可以显示,这样您的数据就不会与您的Web界面紧密耦合。

为此,您希望将数据转换为可单独访问的部分,以便数据绑定可以使用它们,但它需要没有限制。您可以使用LINQ中的投影执行强大的数据转换。该方法取决于您已有的数据类型。我将展示两种方式。

如果您当前的数据只是一组字符串,请执行以下操作:

        List<string> myData = new List<string>()
        {
            "New York | NY",
            "Chicago | IL",
            "Los Angeles | CA"
        };

...然后你可以在每个字符串前面加上数字,并在现在显示它时显示它。

myData = myData.Select((s, i) => i.ToString() + ". " + s).ToList();

使用字符串,这种方法很简单,但不能让您真正控制数据的表示,例如转换“1”。到“(1)”或“|”至 ”,”。

相反,如果你有一个City对象的集合,每个对象都有CityName和CityAbbreviation属性......

    class City
    {
        public string CityName { get; set; }
        public string CityAbbreviation { get; set; }
    }

...您仍然可以使用投影,并返回具有两个属性的匿名对象。第一个是行号,第二个是您的City类。这使您可以通过任何控件以任何方式灵活地进行数据绑定。

            // Create fake data.
            List<City> myData = new List<City>()
            {
                new City(){ CityName = "New York", CityAbbreviation="NY" },
                new City(){ CityName = "Chicago", CityAbbreviation="IL" },
                new City(){ CityName = "Los Angeles", CityAbbreviation="CA" }
            };

            // Project data...  We create a new container object
            // to hold each city in one property
            // and a NUMBER in a second property.
            var anonList = myData.Select((x, i) => new 
            {
                Number = (i + 1).ToString(),
                City = x
            }).ToList();

            // Databind (Winforms example)
            listBox1.Items.Clear();
            anonList.ForEach(
                c => 
                listBox1.Items.Add(
                    c.Number + ". " + c.City.CityName + " , " + c.City.CityAbbreviation
                )
            );

因此,要使用第二种方法,您只需要一个已经分离了数据元素(City,CityName)的数据集。如果您正在使用字符串,则可以使用此代码将它们转换为我上面使用的City类。

            // Create fake data.
            List<string> myStringData = new List<string>()
            {
                "New York | NY",
                "Chicago | IL",
                "Los Angeles | CA"
            };

            // Convert strings to City objects            
            List<City> myData = myStringData.Select(
                s => {
                    List<string> parts = s.Split('|').Select(s2 => s2.Trim()).ToList();
                    return new City()
                        { CityName = parts[0], CityAbbreviation = parts[1] };
                }).ToList();

答案 4 :(得分:0)

使用olli

<ol>
    <li>New York, NY</li>
    <li>Chicago, IL</li>
    <li>Los Angeles, CA</li>
</ol>

答案 5 :(得分:0)

如何循环结果集?

我可能错了,但我会用for循环来做这件事。

首先在前端声明列表

<ol runat="server" id="orderedList"></ol>

for(int i = 0; i < results.Length; i++)
{
    orderedList.InnerHtml += "<li>" + results[i].ToString() + "</li>";
}