使用 Sharepoint 2007 中的自定义 WebPart 连接到数据库






3.92/5 (9投票s)
构建自定义 WebPart 以与数据库交互
引言
一个WebPart是一个ASP.NET服务器控件,用户在运行时将其添加到Web部件页面上的Web部件区域。Web部件是一组集成的控件,用于创建Web网站,使最终用户可以直接从浏览器修改Web页面的内容、外观和行为。
MOSS 2007提供了一些基本Web部件,它们将执行一些有限的功能。如果我们需要一个具有不同功能的Web部件,我们必须使用自定义Web部件,该Web部件必须由您自己构建,或者可以从第三方购买。当您的需求超出开箱即用或第三方提供的功能时,您就可以构建Web部件。
在本文中,我将展示如何编写一个自定义Web部件的代码,该Web部件用于连接到数据库(SQL)并从数据库中提取数据。
创建新项目
在Visual Studio 2008/2005中创建一个新的Web部件项目,如图所示

如果您在已安装的模板中没有看到Web部件,您可能需要从此链接获取Visual Studio 2008的Sharepoint扩展。.
代码
在SharePoint中创建自定义Web部件始于从WebPart
类继承。因此,无论何时创建新项目,您都应该已经观察到您的类是从WebPart
类继承的,例如这样
public class DBConnWebPart : System.Web.UI.WebControls.WebParts.WebPart
声明控件
正确呈现Web部件需要您首先创建您将在代码中需要的任何ASP.NET控件。在此代码中,我需要一个Grid来显示我的数据和一个Label来显示消息。
所以,我在类的开始声明这些控件
DataGrid grid;
Label messages;
创建控件
一旦声明了控件,您就可以设置它们的属性并将它们添加到Web部件的控件集合中。您可以通过重写this
方法来实现,设置每个控件的属性值,然后使用CreateChildControls
方法将其添加到控件集合中。在此方法中,设置每个控件的属性值,然后使用collectionControls.Add
方法将其添加到Controls
集合中,就像这样
protected override void CreateChildControls()
{
//Add grid
grid = new DataGrid();
grid.AutoGenerateColumns = false;
grid.Width = Unit.Percentage(100);
grid.GridLines = GridLines.Horizontal;
grid.CellPadding = 2;
//Add Grid columns
BoundColumn column = new BoundColumn();
column.DataField = "CustomerID";
column.HeaderText = "CustomerID";
grid.Columns.Add(column);
column = new BoundColumn();
column.DataField = "FirstName";
column.HeaderText = "FirstName";
grid.Columns.Add(column);
column = new BoundColumn();
column.DataField = "LastName";
column.HeaderText = "LastName";
grid.Columns.Add(column);
//Adding the Grid to Controls
Controls.Add(grid);
//Add label
messages = new Label();
Controls.Add(messages);
}
绘制输出
一旦所有控件都配置完毕并添加到Web部件中,您就可以绘制输出。在呈现Web部件的用户界面时,您可以使用HTMLTextWriter
类,该类由RenderContents
方法提供。此类允许您为Web部件创建任何方式的HTML输出。
我在SQL 2008中使用AdventureWorksLT
数据库来提取数据。我试图在Web部件中显示姓氏以字母o
结尾的所有客户的姓名、姓氏和CustomerID。
这是提取输出的代码
protected override void RenderContents(HtmlTextWriter writer)
{
// Declaring a dataset
DataSet dataSet = null;
// SQL Query
string sql = "select CustomerID,FirstName,LastName from SalesLT.Customer
where FirstName like 'o%'";
//Defining the connection SQL connection string
SqlConnection sqlcon = new SqlConnection("Data Source=SERVER\\SQLEXPRESS05;
Initial Catalog=AdventureWorksLT;Integrated Security=SSPI");
// Pulling the data using try catch block
try
{
sqlcon.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, sqlcon);
dataSet = new DataSet("root");
adapter.Fill(dataSet, "sales");
}
catch (SqlException x)
{
messages.Text = x.Message;
}
catch (Exception x)
{
messages.Text += x.Message;
}
//Bind data
try
{
grid.DataSource = dataSet;
grid.DataMember = "sales";
grid.DataBind();
}
catch (Exception x)
{
messages.Text += x.Message;
}
//Display data
writer.Write("<table border=\"0\" width=\"100%\">");
writer.Write("<tr><td>");
grid.RenderControl(writer);
writer.Write("</td></tr>");
writer.Write("<tr><td>");
messages.RenderControl(writer);
writer.Write("</td></tr>");
writer.Write("</table>");
}
整合
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Web;
using System.Drawing;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace DatabaseConnWebPart
{
[Guid("426cc33f-fd12-432e-91e9-fa48f36e82bf")]
public class DBConnWebPart : System.Web.UI.WebControls.WebParts.WebPart
{
DataGrid grid;
Label messages;
protected override void CreateChildControls()
{
//Add grid
grid = new DataGrid();
grid.AutoGenerateColumns = false;
grid.Width = Unit.Percentage(100);
grid.GridLines = GridLines.Horizontal;
grid.HeaderStyle.CssClass = "ms-vh2";
grid.CellPadding = 2;
//Add Grid columns
BoundColumn column = new BoundColumn();
column.DataField = "CustomerID";
column.HeaderText = "CustomerID";
grid.Columns.Add(column);
column = new BoundColumn();
column.DataField = "FirstName";
column.HeaderText = "FirstName";
grid.Columns.Add(column);
column = new BoundColumn();
column.DataField = "LastName";
column.HeaderText = "LastName";
grid.Columns.Add(column);
// Adding the Grid to Controls
Controls.Add(grid);
//Add label
messages = new Label();
Controls.Add(messages);
}
protected override void RenderContents(HtmlTextWriter writer)
{
// Declaring a dataset
DataSet dataSet = null;
// SQL connection string.
string sql = "select CustomerID,FirstName,
LastName from SalesLT.Customer where FirstName like 'o%'";
//Get data
SqlConnection sqlcon = new SqlConnection("Data Source=SERVER\\SQLEXPRESS05;
Initial Catalog=AdventureWorksLT;Integrated Security=SSPI");
try
{
sqlcon.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, sqlcon);
dataSet = new DataSet("root");
adapter.Fill(dataSet, "sales");
}
catch (SqlException x)
{
messages.Text = x.Message;
}
catch (Exception x)
{
messages.Text += x.Message;
}
//Bind data
try
{
grid.DataSource = dataSet;
grid.DataMember = "sales";
grid.DataBind();
}
catch (Exception x)
{
messages.Text += x.Message;
}
//Display data
writer.Write("<table border=\"0\" width=\"100%\">");
writer.Write("<tr><td>");
grid.RenderControl(writer);
writer.Write("</td></tr>");
writer.Write("<tr><td>");
messages.RenderControl(writer);
writer.Write("</td></tr>");
writer.Write("</table>");
}
}
}
结论
就这样!!!!! 现在我们已经成功创建了一个与SQL数据库交互并提取我们需要的记录的自定义Webpart
。所以,总共有三个主要点
- 声明控件
- 通过重写
CreateChildControls
方法创建控件 - 通过重写
RenderContents
方法提取输出
将Webpart部署到Sharepoint
现在我们已经有了自定义Web部件,我们可以在Sharepoint中部署这个Web部件并在那里使用它。我将在本文的第2部分中详细讨论如何将此Web部件部署到Sharepoint。
历史
- 2009 年 3 月 5 日:初始发布