C# 如何在表中动态显示循环项?
以下是设计C# 如何在表中动态显示循环项?,c#,sharepoint-2010,html-table,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="
<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>
项目名称
下载链接
“;
}
}
因此,我的问题是,当循环中有多个表时,如何允许表动态地容纳文档和dl链接
欣赏一些代码示例。为什么不跳过服务器端控件,只编写实际的html 将此div包括在您的aspx文件中:
<div runat="server" id="divTable"></div>
然后把这个放到你的页面加载()中:
StringBuilder sb=新建StringBuilder();
sb.追加(“项目标题下载链接”);
对于(int i=0;i<10;i++)
{
sb.AppendFormat(“{0}”,“Title”,“Link”);
}
某人加上(“”);
divTable.InnerHtml=sb.ToString();
当然,您需要用适当的值替换“Title”和“Link”
您的其他选择是实际创建新标签和链接,但是当您动态创建服务器端控件时,ASP.net是出了名的难以使用。我会使用一个转发器…类似这样的东西(代码可能不准确): 对于您的代码风格(手动创建html而不使用web控件),我建议您从侧面看。但我可以回答您的问题: 首先,您需要像这样使用asp:Repeater:
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
((Label)e.Item.FindControl("dlLbl")).Text= ((SPListItem)e.Item.DataItem)["Project Title"].ToString();
}
<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>
下一步你需要做:
// 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
结果如下所示:
试试看ASP:Repeater——这应该是你需要它做的。我想你的意思是有问题地生成HTML,然后将其注入到类似和ASP:Literal的东西中……ASP.NET动态创建服务器端控件并不难……你为什么要这样做?只需使用Repeater/gridview模板和do就像你在使用.NET时应该做的那样。这样做是违反直觉的,因为很明显,每次迭代标题/链接值都会改变。你重新发明轮子。甚至不要使用数据控件,如repeater。在没有dinamic生成html的情况下,也可以使用standart服务器端控件。您好,我可以问一下。我在哪里放置第三个p代码的艺术性?感谢并报告以下错误1“Microsoft.SharePoint.SPList”不包含“Where”的定义,并且找不到“Where”的扩展方法,“Where”接受类型为“Microsoft.SharePoint.SPList”的第一个参数(是否缺少using指令或程序集引用?)第三部分是您必须放置的代码,您希望将集合绑定到的位置。它可以在任何位置-在窗体加载事件上,或在按钮单击事件上。关于“where”-它的LINQ部分。LINQ可以从c#3.0和.NET Framework 3.0中访问。要使用LINQ,您需要包含下一个指令“using System.LINQ;“在代码文件的开头。
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
((Label)e.Item.FindControl("dlLbl")).Text= ((SPListItem)e.Item.DataItem)["Project Title"].ToString();
}
<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>
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
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);
}