我在ASP.NET Web表单中有一个常见问题。我很惊讶我没有找到一个共同的解决方案:)
我有一个从SQL Server数据库返回的结果列表。我想在我的网页上显示这些结果,并在其左侧显示数字。例如,我的结果集可能如下所示:
New York | NY
Chicago | IL
Los Angeles | CA
在我的网页中,我想将它们显示为:
1. New York, NY
2. Chicago, IL
3. Los Angeles, CA
我很惊讶我无法找到让数字自动出现的方法。我做错了吗?
答案 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)
使用ol
,li
:
<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>";
}