如何动态显示表中的循环项?

时间:2011-11-07 04:53:46

标签: c# sharepoint-2010 html-table

以下是设计。

<table>
<tr>
<td>Project Title</td>
<td>Download Link</td>
</tr>
<tr>
<td><asp:Label ID="dlLbl" runat="server"></asp:Label></td>
<td><asp:Label ID="dlLink" runat="server"></asp:Label></td>
</tr>
</table>

以下是后端代码。

foreach (SPListItem objInnovationListItem in objInnovationList.Items)
        {
            if (Convert.ToString(objInnovationListItem["Innovation Approval Status"])== status)
            {
                countStatus++;

                //Displays name of the document and download link
                dlLbl.Text = objInnovationListItem["Project Title"].ToString();
                dlLink.Text = "<a href='/RIDepartment/Innovation%20Submission/" + objInnovationListItem.File.Name + "'>Download</a><br>";
            }
        }

因此,我的问题是,当循环中有多于1个时,我该怎么做才能让表动态地容纳文档和dl链接?

感谢一些代码示例。

2 个答案:

答案 0 :(得分:1)

使用您的代码样式(手动创建没有Web控件的html),我建议您查看ASP.NET MVC方面。但我可以回答你的问题:

首先 - 你需要像这样使用asp:Repeater:

<table>
    <tr>
        <td>Project Title</td>
        <td>Download Link</td>
    </tr>
    <asp:Repeater ID="repLinks" runat="server" 
        onitemdatabound="repLinks_ItemDataBound">
        <ItemTemplate>
            <tr>
                <td>
                    <asp:Label ID="lblProject" runat="server" Text="Label"></asp:Label>
                </td>
                <td>
                    <asp:HyperLink ID="hlLink" runat="server">HyperLink</asp:HyperLink>
                </td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>
</table>

第二:您需要初始化要显示的集合。例如:您想要显示objInnovationListItem类的集合:

public class objInnovationListItem
    {
        public string Name { get; set; }
        public string Title { get; set; }
        public override string ToString()
        {
            return Title;
        }
    }

你需要做下一步:

        // list - it's source List<objInnovationListItem>
        var bindList = list.Where(p => objInnovationListItem["Innovation Approval Status"] == status); // filter your collection - replace you foreach and if statement

        repLinks.DataSource = bindList; // set to repeater your displayed collection
        repLinks.DataBind(); // bind your collection

和最后 - 你需要在Repeater ItemTemplate中指明如何显示你的objInnovationListItem实例 - 订阅你的Repeater ItemDataBound的事件:

        protected void repLinks_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        var item = e.Item.DataItem as objInnovationListItem;
        ((Label) e.Item.FindControl("lblProject")).Text = item.Name;
        ((HyperLink) e.Item.FindControl("hlLink")).NavigateUrl = string.Format("/downloaduri?id={0}", item.Title);
    }

结果将如下所示:

Result

答案 1 :(得分:-2)

为什么不跳过服务器端控件,只编写实际的html?

在您的aspx文件中包含此div:

    <div runat="server" id="divTable"></div>

将它放在你的Page_Load()中:

    StringBuilder sb = new StringBuilder();
    sb.Append("<table><tr><td>Project Title</td><td>Download Link</td></tr>");
    for (int i = 0; i < 10; i++)
    {
        sb.AppendFormat("<tr><td>{0}</td><td><a href='{1}'>{1}</a></td></tr>", "Title", "Link");
    }
    sb.Append("</table>");
    divTable.InnerHtml = sb.ToString();

您当然需要将“标题”和“链接”替换为适当的值。

您的其他选择是实际创建新的标签和链接,但是当您动态创建服务器端控件时,ASP.net非常难以使用。