如何用 SPQuery 结果填充 HTML table

How to populate HTML table with SPQuery result

我刚开始玩 SP2010 开发,所以我完全是初学者。 我用这样的代码创建了简单的控制台应用程序:

using (SPSite currentSite = new SPSite("http://win-e9840laitme"))
{
    using (SPWeb currentWeb = currentSite.OpenWeb())
    {
        SPList myList = currentWeb.Lists["List1"];

        string currentUserName = currentWeb.CurrentUser.Name;

        SPQuery queryInformationAboutCurrentUser = new SPQuery();
        queryInformationAboutCurrentUser.Query = "<Where>" +
                                                  "<Eq><FieldRef Name='EmployeeName'/><Value Type='Text'>" + currentUserName + "</Value></Eq>" +
                                                  "</Where>";

        List<EmployeeInfo> listEmployeeInfo = new List<EmployeeInfo>();
        SPListItemCollection collectionEmployee = myList.GetItems(queryInformationAboutCurrentUser);

        foreach (SPListItem info in collectionEmployee)
        {
            EmployeeInfo eInfo = new EmployeeInfo();
            eInfo.Deparment = info["Office"].ToString();
            listEmployeeInfo.Add(eInfo);

        }
        foreach (EmployeeInfo eI in listEmployeeInfo)
        {
            SPQuery querySameOffice = new SPQuery();
            querySameOffice.Query = "<Where>" +                                                           
                                    "<Eq><FieldRef Name='Office'/><Value Type='Choice'>" + eI.Deparment + "</Value></Eq>" +                                                           
                                    "</Where>";
            SPListItemCollection collectionEmployeeDisplay = myList.GetItems(querySameOffice);
            foreach (SPListItem item in collectionEmployeeDisplay)
            {
                Console.WriteLine(item["EmployeeName"].ToString() + " " + item["PhoneNumber"].ToString() + "\n");
            }
        }
    }
}

现在我想在 sharepoint 项目中使用该代码,而不是将 SPQuery 的结果放在 Console 上,我想用结果静态填充 HTML table(没有 JS 或 Jquery ,如果可能的话)。 我创建了 sp 项目并添加了 ApplicationPage。 我的想法是使用 StringBuilder 和类似这样的东西:

StringBuilder html = new StringBuilder();


html.Append("<table border = '1'>");
//Building the Header row.
html.Append("<tr>");            
html.Append("<th>");
html.Append("EmployeeName");
html.Append("</th>");
html.Append("<th>");
html.Append("PhoneNumber");
html.Append("</th>");
html.Append("</tr>");

在最后一个 foreach 循环中,这段代码:

foreach (SPListItem item in collectionEmployeeDisplay)
{
    html.Append("<tr>");
    html.Append("<td>");
    html.Append(item["EmployeeName"].ToString());
    html.Append("</td>");

    html.Append("<td>");
    html.Append(item["PhoneBook"].ToString());
    html.Append("</td>");

    html.Append("</tr>");
}

//Table end.
html.Append("</table>");
//Append the HTML string to Placeholder.
PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });

我相信这个问题有更优雅的解决方案,如果你现在知道请给我想法。谢谢。

我找到了 solution.First 我们需要将 Repeater 添加到 PlaceHolderMain 中:

<asp:Repeater ID="rptEmployees" runat="server">
    <HeaderTemplate>
        <table border="1" style="width:70%">
            <tr>
                <td>Employee Name</td>
                <td>Phone Number</td>
                <td>Position</td>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><%# Eval("EmployeeName") %></td>
            <td><%# Eval("PhoneNumber") %></td>
            <td><%# Eval("Position") %></td>
        </tr>            
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>


</asp:Repeater>

创建另一个 class 并将此代码添加到最终循环中:

foreach (SPListItem item in collectionEmployeeDisplay)
                    {
                        DisplayEmployee dE = new DisplayEmployee();
                        dE.EmployeeName = item[Sol.PB1.Fields.EmployeeName].ToString();
                        dE.PhoneNumber = item[Sol.PB1.Fields.PhoneNumber].ToString();
                        dE.Position = item[Sol.PB1.Fields.Position].ToString();
                        display.Add(dE);
                    }

                    rptEmployees.DataSource = display;
                    rptEmployees.DataBind();
                }

您不能使用 XSLT 转换将 SPQuery 结果转换为 HTML table。请参阅 Applying an XSLT Transform to a DataSet

的示例