Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在表中动态显示循环项?_C#_Sharepoint 2010_Html Table - Fatal编程技术网

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);
    }