我试图创建一个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);
    }
}

所做的就是在一个单列表中列出我所有的超链接,每个超链接都有一个新的行!

任何帮助将不胜感激!!

谢谢

我试图创建一个ASP.. NET表使用for循环获取一组超链接

假设您想创建一个每行显示两个超链接的表,您可以尝试下面的代码:

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>