以下是设计。
<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链接?
感谢一些代码示例。
答案 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);
}
结果将如下所示:
答案 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非常难以使用。