创建自定义 Web 部件
创建自定义 Web 部件并使用 VS2005 将其与外部数据库集成,然后部署到 SharePoint 服务器。
引言
Web 部件是 SharePoint 门户中的一些基本构建块。Web 部件可以包含用户可以交互的信息,并提供个性化持久性。因此,用户可以使用 Web 部件(设计在 Web 部件区域中)设计页面布局,并将其存储到 SharePoint 内容数据库中,以便用户下次登录时找到该布局。SharePoint 附带了一堆内置 Web 部件,可以为开发工作带来巨大的价值。我不会在此文章中解释如何构建 Web 部件。因为我想 Tony Rabun 已经在他的精彩 文章 中解释了这一点。我想对它进行一些改进,即通过我们的 Web 部件与数据库文件交互。
使用代码
我不再浪费时间,直接进入主题
我使用一个 mdb 文件进行演示。我们需要添加一些命名空间来交互
与数据库。
using System.Data; using System.Data.OleDb;
添加命名空间后,我们想要创建一个 EventHandler
为此,我将引发一个事件:new EventHandler(_mybutton_click);
public void _mybutton_click(object sender, EventArgs e) { this.Title = _mytextbox.Value; try { OleDbConnection thisConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=PersonDatabase.mdb"); thisConnection.Open(); OleDbDataAdapter thisAdapter = new OleDbDataAdapter("SELECT PersonID, FirstName FROM PersonTable", thisConnection); OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter); DataSet thisDataSet = new DataSet(); thisAdapter.Fill(thisDataSet, "PersonTable"); Console.WriteLine("# rows before change: {0}", thisDataSet.Tables["PersonTable"].Rows.Count); DataColumn[] keys = new DataColumn[1]; keys[0] = thisDataSet.Tables["PersonTable"].Columns["Au_ID"]; thisDataSet.Tables["PersonTable"].PrimaryKey = keys; thisDataSet.Tables["PersonTable"].Columns["FirstName"].Unique = false; DataRow thisRow = thisDataSet.Tables["PersonTable"].NewRow(); thisRow["PersonID"] = "17000"; thisRow["FirstName"] = _mytextbox.Value; thisDataSet.Tables["PersonTable"].Rows.Add(thisRow); _mylist.Items.Add(thisRow["FirstName"].ToString()); thisAdapter.Update(thisDataSet, "PersonTable"); thisConnection.Close(); } catch { } }
创建事件处理程序后,我们需要编写一个 ChildControl,它将负责显示来自外部数据库的项目。
protected override void CreateChildControls() { // Create _mytextbox control. _mytextbox = new HtmlInputText(); _mytextbox.Value = ""; // Create _mybutton control and wire its event handler. _mybutton = new HtmlButton(); _mybutton.InnerText = "Set Web Part Title"; _mybutton.ServerClick += new EventHandler(_mybutton_click); Controls.Add(_mybutton); this.SaveControlState(); OleDbConnection thisConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=PersonDatabase.mdb"); thisConnection.Open(); OleDbDataAdapter thisAdapter = new OleDbDataAdapter("SELECT PersonID, FirstName FROM PersonTable", thisConnection); DataSet thisDataSet = new DataSet(); thisAdapter.Fill(thisDataSet, "PersonTable"); foreach (DataRow theRow in thisDataSet.Tables["PersonTable"].Rows) { _mylist.Items.Add(theRow["PersonID"] + "\t" + theRow["FirstName"]); } Controls.Add(_mylist); Controls.Add(_mytextbox); thisConnection.Close(); } [Browsable(true), Category("Miscellaneous"), DefaultValue(defaultText), WebPartStorage(Storage.Personal), FriendlyName("Text"), Description("Text Property")]
在代码的末尾,有一些属性设置为 WebPart:例如
Category、DefaultValue、WebPart 存储类型、Friendly Name。我们需要像所示那样设置它们,以便 Sharepoint Server 能够理解它。
关注点
在开发这个 Web 部件之前,我手动将其部署到服务器位置,即
c:\Inetpub\wwwroot\wss\VirtualDirectories\80\_app_bin\。在完成一些工作后,我不小心在我的 VS2005 Id 中按下了 F5 按钮,我很惊讶地看到部署功能已经集成到 Id 本身中了。它负责将 dll 部署到确切的位置,并将其他文件部署到 sharepint 的工作目录中。在我的系统中,它是:C:\WINDOWS\system32\inetsrv
成功部署 Webpart 后,将其添加到您现有的团队站点,并查看效果。
干杯!!!