2015-11-29 42 views
0

我刚刚开始在SP2010中进行开发,因此我已经完成了前期工作。 我创建的代码简单的控制台应用程序是这样的:如何使用SPQuery结果填充HTML表格

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的结果,我想填充HTML表的结果静态(没有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() }); 

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

+0

你缺少一个右'}'顺便说一句..我会解决您的格式 – MethodMan

+0

'的foreach(SPListItem在collectionEmployeeDisplay项)'什么是与所有的额外'{}'请解决这个烂摊子..和可读的代码.. – MethodMan

+0

结帐这个http://stackoverflow.com/questions/11935729/populate-a-table-on-an-asp-net-page – MethodMan

回答

0

我发现一个solution.First我们需要添加RepeaterPlaceHolderMain

<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> 

比创建另一个类,并添加以下代码到最终的循环:

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