SharePoint快速入门(2)之WebPart

本节学习目标:用Linq读取Sharepoint List数据,并通过SPGridView展示数据

  • 生成 Linq to sharepoint代理类

    通过命令行定位到“c:\program files\common files\microsoft shared\web server extensions\14\bin”

  • 输入以下代码生成代理类
spmetal.exe /web:http://intranet.contoso.com /namespace:Jonny.VisualWebPart1 /code:SPLinq.cs

  备注:/web为你的站点,/namespace生成类的命名空间,最好和你要引用的项目命名空间一致,/code生成的类名。默认生成的类与spmetal.exe同一个目录

  • 项目中引用代理类

通过右键项目-->新增-->现有项-->选择我们刚刚生成的代理类

  • 项目中添加Microsoft.SharePoint.Linq.dll

     通过右键项目-->添加引用-->浏览(C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI)

  • 通过Linq to sharepoint读取list数据

上一节创建的空web part中,添加SPGridView

<SharePoint:SPGridView id="spGridView" runat="server" AutoGenerateColumns="false"> 
<HeaderStyle HorizontalAlign="Left" ForeColor="Navy" Font-Bold="true" />
 <Columns>
 <SharePoint:SPBoundField DataField="Title" HeaderText="Title"></SharePoint:SPBoundField> 
<SharePoint:SPBoundField DataField="JobTitle" HeaderText="JobTitle"></SharePoint:SPBoundField> 
<SharePoint:SPBoundField DataField="ProjectTitle" HeaderText="ProjectTitle"></SharePoint:SPBoundField> 
<SharePoint:SPBoundField DataField="DueDate" HeaderText="DueDate"></SharePoint:SPBoundField> 
</Columns> 
</SharePoint:SPGridView>

添加代码后的效果图

  • 在Page_load事件中添加读取List的代码
var dc = new SPLinqDataContext(SPContext.Current.Web.Url); 
var Employees = dc.GetList<EmployeesItem>("Employees"); 
var empQuery = from emp in Employees
where emp.Project.DueDate < DateTime.Now.AddMonths(6) select new { emp.Title, emp.JobTitle, ProjectTitle = emp.Project.Title, DueDate = emp.Project.DueDate.Value.ToShortDateString() }; 
spGridView.DataSource = empQuery; 
spGridView.DataBind();

备注:代码运行前需在站点中存在"Employees"和"Project"的List, 并且‘Employees‘中有2个LookUp类型的字段是来自于‘Project‘(Title,DueDate)

  • 部署当前解决方案

  • 使用web part

  • 总结

使用Linq to sharepoint步骤

  1. 通过命令生成代理类
  2. 将代理类添加到项目
  3. 使用Linq读取数据
  4. 使用控件展示数据

Linq to sharepoint优劣势

  • 采用强类型,在编译时即可发现错误(优势)
  • 如果站点中的List做了结构调整,代理类需要重新生成,很繁琐(劣势)
  • 对于大量数据的查询效率低(劣势)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。