2015-11-29 2 views
0

Я только начал играть с разработкой в ​​SP2010, так что я полный begginer. Я создал простое консольное приложение с кодом, как это:Как заполнить таблицу HTML с результатом SPQuery

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

Я считаю, есть более изящные решения этой проблемы, и если вы сейчас он, пожалуйста, дайте мне идею. Спасибо.

+0

у вас отсутствует закрытие '}' btw .. Я исправлю ваше форматирование – MethodMan

+0

'foreach (элемент SPListItem в коллекцииEmployeeDisplay)' что со всеми дополнительными '{}' исправьте этот беспорядок .. и пост читаемый код .. – MethodMan

+0

проверить это http://stackoverflow.com/questions/11935729/populate-a-table-on-an-asp-net-page – MethodMan

ответ

0

Я нашел 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> 

чем создать другой класс и добавить этот код в окончательном цикле:

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