日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】[SharePoint 开发详解] 一个Feature中使用SPGridView的几个Tips

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】[SharePoint 开发详解] 一个Feature中使用SPGridView的几个Tips 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

根據(jù)上面一篇隨筆所介紹的PC購買流程的項(xiàng)目,在項(xiàng)目中,需要有一個(gè)生成訂單的功能,能夠使得Admin很方便的在獲得批準(zhǔn)的申請(qǐng)中選取一些來生成訂單,要求界面操作簡(jiǎn)單明了,大概的效果圖如下:

?

點(diǎn)擊checkbox,自動(dòng)計(jì)算當(dāng)前訂單的總價(jià)值,點(diǎn)擊按鈕,生成訂單。

有此想到了用SPGridView這個(gè)現(xiàn)成的控件來完成,以前也用過這個(gè)控件,其實(shí)和GridView沒什么大區(qū)別。這里就簡(jiǎn)單介紹一下了:

首先Create 一個(gè)WebPart

在CreateChildControls()中可以設(shè)置SPGridView 的數(shù)據(jù)源和屬性,添加Field等等。

但是CheckBox這一列,必須自己自定義一個(gè)模板類來生成,下面是我們自定義的CheckBox模板類,它實(shí)現(xiàn)了ITemplate接口:

?

代碼

?

????class?CheckBoxTemplateField:ITemplate
????{
????????string?id;
????????public?EventHandler?OnCheck?=?null;
????????public?CheckBoxTemplateField(string?chbId,?EventHandler?checkEvent)
????????{
????????????id?=?chbId;
????????????OnCheck?=?checkEvent;
????????}
????????
????????public?void?InstantiateIn(System.Web.UI.Control?container)
????????{
????????????CheckBox?chb?=?new?CheckBox();
????????????chb.AutoPostBack?=?true;
????????????chb.ID?=?id;
????????????chb.CheckedChanged?+=?OnCheck;
????????????container.Controls.Add(chb);
????????}
????}

?

這樣就可以在SPGridView中調(diào)用這個(gè)模板類,并且為Oncheck事件提供處理方法:

代碼

?

?????protected?override?void?CreateChildControls()
????????{
????????????if?(!_error)
????????????{
????????????????try
????????????????{
????????????????????SPList?sourceList?=?SPContext.Current.Web.Lists["Purchase?Request"];
????????????????????dataSource?=?new?SPDataSource();
????????????????????this.Controls.Add(dataSource);
????????????????????dataSource.List?=?sourceList;
????????????????????gridView?=?new?SPGridView();
????????????????????gridView.AutoGenerateColumns?=?false;

?

????????????????????TemplateField?chbField?=?new?TemplateField();
????????????????????chbField.HeaderText?=?"";
????????????????????EventHandler?onCheck?=?new?EventHandler(OnCheck);
????????????????????chbField.ItemTemplate?=?new?CheckBoxTemplateField("chb",?onCheck);
????????????????????gridView.Columns.Add(chbField);

?

當(dāng)我們提供了所以的Field綁定后,需要指定一列為Group列,我們這里指定了"Team"列:

?

代碼

?

????????????????????SPBoundField?createdField?=?CreateNewBoundField("Created",?"Created",?0);
????????????????????gridView.Columns.Add(createdField);

?

????????????????????SPBoundField?applicantField?=?CreateNewBoundField("Created?By",?"Created?By",?0);
????????????????????gridView.Columns.Add(applicantField);

????????????????????SPBoundField?mtField?=?CreateNewBoundField("Machine?Type",?"Machine?Type",?0);
????????????????????gridView.Columns.Add(mtField);

????????????????????SPBoundField?compField?=?CreateNewBoundField("Component?Type",?"Component?Type",?0);
????????????????????gridView.Columns.Add(compField);

????????????????????SPBoundField?purNumField?=?CreateNewBoundField("Purchase?Number",?"Purchase?Number",?0);
????????????????????gridView.Columns.Add(purNumField);

????????????????????SPBoundField?purReasonField?=?CreateNewBoundField("Purchase?Reason",?"Purchase?Reason",?0);
????????????????????gridView.Columns.Add(purReasonField);

????????????????????SPBoundField?mgrAppField?=?CreateNewBoundField("Manager?Approval",?"Manager?Approval",?0);
????????????????????gridView.Columns.Add(mgrAppField);

????????????????????SPBoundField?drtAppField?=?CreateNewBoundField("Director?Approval",?"Director?Approval",?0);
????????????????????gridView.Columns.Add(drtAppField);

????????????????????SPBoundField?priceField?=?CreateNewBoundField("Total?Price",?"Total?Price",?0);
????????????????????gridView.Columns.Add(priceField);

????????????????????gridView.AllowGrouping?=?true;
????????????????????gridView.AllowGroupCollapse?=?true;
????????????????????gridView.GroupField?=?"Team";
????????????????????gridView.GroupFieldDisplayName?=?"Team";

?

但是"Team"這個(gè)Field在數(shù)據(jù)源的List中是Lookup類型的,如果不作處理,那么顯示的結(jié)果將會(huì)是Team:23;#SharePoint Test,即 連lookupid也顯示出來了,這里我們需要在數(shù)據(jù)綁定的時(shí)候作處理,為此我們添加了gridView.RowDataBound += new GridViewRowEventHandler(gridView_RowDataBound)這個(gè)事件,gridView_RowDataBound的代碼如下:

?

代碼

?

void?gridView_RowDataBound(object?sender,?GridViewRowEventArgs?e)
????????{
????????????if?(e.Row.RowType?==?DataControlRowType.DataRow)
????????????{
????????????????if?((sender?as?SPGridView).AllowGrouping)
????????????????{
????????????????????SPGridViewRow?gridViewRow?=?e.Row?as?SPGridViewRow;
????????????????????if?(gridViewRow?!=?null?&&?gridViewRow.HeaderText?!=?null)
????????????????????{
????????????????????????gridViewRow.HeaderText?=?"Team?:?"?+?new?SPFieldLookupValue(DataBinder.GetPropertyValue(e.Row.DataItem,?(sender?as?SPGridView).GroupField).ToString()).LookupValue;
????????????????????}
????????????????}
????????????}
????????}

?

這樣,確保我們?cè)赟PGridView中做Groupby時(shí),顯示的只是LookupValue,而非LookupId;#LookUpValue的形式。

另外我們可以通過設(shè)置SPGridView的DataKeyNames為各行保存一些我們可能需要的信息,例如

gridView.DataKeyNames = new string[] { "ID", "Team", "Created By", "Total Price", "Machine Type", "Component Type", "Purchase Number", "Shipped Order" };

如下就可以使用這些數(shù)據(jù):

gridView.DataKeys[row.RowIndex].Values["Machine Type"].ToString();

我們用SPGridView作為WebPart開發(fā)的時(shí)候還遇到了一個(gè)問題,就是一訪問SharePoint的Session,頁面就報(bào)異常。但是在代碼中,并為出現(xiàn)異常,檢查了Web.config文件,發(fā)現(xiàn)HttpModule中也加了Session Module,<Page>節(jié)點(diǎn)中也Enable了Session, 至今未能找出原因,后來不得已,用了Context.Cache來代替,希望各位看官,有知道原因的,還請(qǐng)不吝賜教。謝謝拉~

SPGridView使用不復(fù)雜,關(guān)鍵還在于理清楚項(xiàng)目中的業(yè)務(wù)邏輯,選擇合適的Solution來解決問題。

總結(jié)

以上是生活随笔為你收集整理的【转】[SharePoint 开发详解] 一个Feature中使用SPGridView的几个Tips的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。