我试图创建一个ASP.. NET表使用for循环获取一组超链接
本文关键字:循环 for 超链接 获取 一组 ASP 创建 一个 NET | 更新日期: 2023-09-27 17:53:39
我有一个超链接列表,我想用它来创建一个2x*表(*是超链接的数量)
这是我的代码…
for (int rows = 0; rows < hlist.Count; rows++) //Create rows for the number of hyperlinks, so i will always have a spare row.
{
TableRow row = new TableRow(); // Create the new rows
table.Rows.Add(row); //Add rows to the table
for (int cells = 0; cells < 2; cells++)
{
TableCell cell = new TableCell();
for(int h = 0; h < hlist.Count; h++)
cell.Controls.Add(hlist[h]);
row.Cells.Add(cell);
}
}
所做的就是在一个单列表中列出我所有的超链接,每个超链接都有一个新的行!
任何帮助将不胜感激!!
谢谢
假设您想创建一个每行显示两个超链接的表,您可以尝试下面的代码:
for (int i = 0; i < hlist.Count; i += 2)
{
TableRow row = new TableRow(); // Create the new rows
table.Rows.Add(row);
for (int j = i; j < Math.Min(i + 2, hlist.Count); j++)
{
TableCell cell = new TableCell();
cell.Controls.Add(hlist[j]);
row.Controls.Add(cell);
}
}
但是,在ASP中使用动态添加的控件。如果你想让它们对事件做出反应,NET是复杂的。所以我建议检查你是否可以改变你的方法,这样你就可以用一个Repeater来代替。为了做到这一点,你首先必须改变你的数据模型,例如,一个包含两个url的Pair对象列表,例如:
public void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
IEnumerable<Uri> uris = GetUris();
List<Tuple<Uri, Uri>> pairs = new List<Tuple<Uri, Uri>>();
for (int i = 0; i < uris.Count; i += 2)
{
var uri1 = uris[i];
var uri2 = i + 1 < uris.Count ? uris[i + 1] : null;
pairs.Add(new Tuple<Uri, Uri>(uri1, uri2));
}
rpt.DataSource = pairs;
rpt.DataBind();
}
}
如果您的url与Uri不兼容(可能它们包含一个前导~),您也可以使用字符串代替Uri。
您的中继器的标记看起来像这样:
<asp:Repeater ID="rpt" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:HyperLink runat="server" Text="Link 1"
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Item1") %>' />
</td>
<td>
<asp:HyperLink runat="server" Text="Link 1"
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Item2") %>' />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>