如何将文档URL传入SPGridwebview加载url?

用SPGridView显示SharePoint内容 - Erucy - 博客园
随笔 - 102, 文章 - 0, 评论 - 112, 引用 - 0
    我们在SharePoint上查看列表视图的时候,默认的那个Web部件(ListViewWebPart)提供了丰富且友好的功能,可以在上面进行排序、筛选等操作,每个列表条目上还有一个友好的下拉菜单。在2007中,SharePoint内置了一个类似的控件SPGridView来达到类似的效果,所以当我们需要显示一些其他数据的时候(例如来自SQL Server等),将数据绑定到SPGridView上就可以实现类似的排序和筛选效果,而不用写一行排序筛选相关的代码,下拉菜单的实现通过几行简单代码可以搞定。
    关于SPGridView网上有很多文章介绍它的用法(例如,其中介绍了如何通过ObjectDataSource来显示一个SharePoint风格的数据视图,并有一个比较简单的下拉菜单,也可以做排序和筛选)。但是文章的后半部分,也就是如何显示SharePoint列表数据的部分,有比较大的问题,而且根据我搜索的结果,也很少有文章提到这个问题。
    网上的一些例子在使用SharePoint列表作为数据源的时候,直接使用了SPDataSource来进行数据绑定。这个东西也是2007中新加上去的,配合SPGridView的一个控件,可以直接通过List属性绑定到一个SharePoint列表上。显示成那个样子没有问题,但是在排序和筛选的时候就有问题了。不知道那些文章的作者是否试过绑定SharePoint列表,反正在我这里用无代码方式是不能进行筛选的(排序似乎OK)。处理筛选的时候,一般介绍的方法是指定SPGridView的FilteredDataSourcePropertyName属性为“FilterExpression”、指定FilteredDataSourcePropertyFormat属性为“{1}='{0}'”,但是这种方法对于数据源为SPDataSource的SharePoint列表绑定是行不通的,因为SPDataSource并没有FilterExpression这个属性,也没有任何和筛选相关的属性,我也没找到其他解决筛选的方法。从这一点看来,我觉得SPDataSouce并不是一个完善的数据源实现,不知道在2009中会不会有改进。
    其实解决SharePoint列表数据绑定的方法也很简单,那就是先把列表数据转换成DataTable(通过SPListItemCollection的GetDataTable方法),再用ObjectDataSource作为数据源绑定到SPGridView上,这样就可以实现不写代码的排序和筛选了(不过也有一些不如用SPDataSource的地方,放到后面再说)。
    先来说筛选,关于SPGridView的筛选问题网上几乎所有的文章都提到了这一篇:。这篇文章主要说的内容有两点:第一、在SPGridView绑定的时候,如果希望实现筛选功能,那么在绑定时需要指定SPGridView的DataSourceID为ObjectDataSource的ID,而不能直接将DataSource指定为ObjectDataSouce;第二、默认情况下SPGridView的筛选和排序同时进行的时候会有问题(显示不合逻辑),文中给出了一种使用ViewState保存筛选条件的解决方案,在这里就不再赘述了。
    然后说说数据绑定问题,SPGridView是不支持自动生成绑定列的,所以必须把AutoGenerateColumn设成false。一般我们在写asp.net的时候,绑定数据列使用BoundField控件,在SharePoint中有一个更好的选择,那就是SPBoundField。它的使用方法和BoundField完全一致,但是它对SharePoint的数据类型(也就是栏类型)做了处理,对超链接、多选、查阅项等内容都有比较好的处理,它的底层是调用了对应SPField的GetFieldValueAsHtml方法(所以,如果你希望这个东西能很好地显示你的自定义字段类型,你最好在实现自定义字段的时候把GetFieldValueAsHtml重写)。当然,这个所谓的“比较好的处理”指的是使用SPDataSource作为数据源。当我们使用ObjectDataSource绑定用GetDataTable方法获得的DataTable时,问题就出现了:多选项不能正常显示为多选(而是;#那种内部表示)、超链接不能显示为链接(显示为“url,说明”)、人员没有链接、最不能忍受的是多行文本都不是以html形式显示的,这是因为在GetDataTable的时候,SharePoint就已经做过一次数据转换了,即使用SPBoundField绑定,也会有问题。解决方法也有,就是实现一个自己的GetDataTable……其实也不麻烦。
    最后,SPGridView是继承了GridView的,所以可以加“选择”功能,直接在最后加一列CommandField就行了。也可以通过一些trick的方法把选择按钮隐藏掉,然后实现单击一行的时候选中,比如下图:
   
    当然,既然是继承了GridView,也可以做一些其他操作,比如加个按钮什么的。但是另一个问题又出现了,SPGridView在按钮列(或者那种下拉菜单)PostBack的时候,数据绑定失败。也有解决方案:。posts - 32,&
comments - 16,&
trackbacks - 0
在SharePoint中想做一个弹出效果其实很简单,仅仅在js中使用SharePoint Modal Dialog,&以下做一个简单的例子:很多情况下我们会通过linkButton弹出一个详细页面,那么下面我们将以这样的场景作为例子。
场景:&在结果集里将鼠标停留在"Impact on Product Type"&列,并选中你所需要查看的信息,它将会弹出窗体并显示与impact on product type相关的信息
  首先我们看一下最终的效果图 (这里我选中第二条数据,在"Impact on Product Type"列下点击65000Transaction Management Software)
  接下来,我们将设计该弹出功能:
  1.&在Web Part中添加SharePoint的SPGridView控件(你也可以直接使用ASP里的LinkButton控件),在SPGridView里添加LinkButton控件,对于如何使用SPGridView控件这里就不多说了
  因为是在点击Link时将弹出窗体,所以在asp:LinkButton控件需要添加点击事件(OnClientClick='&%#"javascript:openCommentsDialog(\"" + SPEncode.HtmlEncode(Eval("ImapctOnProductGuid") as string) + "\");" %&'),其中SPEncode.HtmlEncode(Eval("ImapctOnProductGuid")&as string)是参数
&asp:TemplateField HeaderText="Impact on Product Type"&
&ItemTemplate&
&asp:LinkButton ID="impactProductLinkButton" runat="server" Text='&%# Bind("ImpactOnProduct") %&'
OnClientClick='&%# "javascript:openCommentsDialog(\"" + SPEncode.HtmlEncode(Eval("ImapctOnProductGuid") as string) + "\");" %&'&&/asp:LinkButton&
&/ItemTemplate&
&/asp:TemplateField&
  2. 在客户端Javascript对象模型中的SP.UI.ModalDialog类提供了对话框框架的定义。
  其中urlStr变量用于存放详细页面的路径及传递参数到详细页面,如果传递参数的数据量比较大,请不要使用该方法,请参考下一篇文章
1 function openCommentsDialog(name) {
var options = SP.UI.$create_DialogOptions();
var localUrl = window.
var urlStr = localUrl.protocol + "//" + localUrl.host + "/_layouts/15/ImpactOnProductTypeDetial.aspx?impactOnProductGuid=" +
options.url = urlS // 定向详细页面的URL
options.height = 500; // 定义窗体的高度
options.width = 500; // 定义窗体的高度
SP.UI.ModalDialog.showModalDialog(options);
  3.&在详细页面中我们需要接收参数并通过参数绑定数据,&由于详细页面因个人需求不同,这里将不做任何讲解。&
有些朋友会问如何将详细页面中指定的值返回到父页面呢?这一问题我们将在下一篇文章弹窗效果(三)中讲解.
阅读(...) 评论()首先上效果图:
前台代码:
&script type="text/javascript"&
function show() {
alert("abc");
&SharePoint:SPGridView ID="GridView1" DataKeyNames="ID" AutoGenerateColumns="false" runat="server"&
&SharePoint:SPBoundField DataField="LinkTitle" HeaderText="标题"&
&/SharePoint:SPBoundField&
&SharePoint:SPBoundField DataField="_x5185__x5bb9_" HeaderText="内容"&
&/SharePoint:SPBoundField&
&SharePoint:SPBoundField DataField="Author" HeaderText="创造者"&
&/SharePoint:SPBoundField&
&asp:CommandField ShowEditButton="true" HeaderText="操作" EditText="编辑" UpdateText="更新" CancelText="取消" /&
&SharePoint:SPMenuField MenuTemplateId="MenuTemplate1" HeaderText="标题1" NavigateUrlFields="ID,LinkTitle"
NavigateUrlFormat="do.aspx?p={0}&q={1}" TokenNameAndValueFields="EDIT=ID,NAME=LinkTitle"
TextFields="LinkTitle"&
&ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" /&
&/SharePoint:SPMenuField&
&/Columns&
&/SharePoint:SPGridView&
&SharePoint:MenuTemplate ID="MenuTemplate1" runat="server"&
&SharePoint:MenuItemTemplate ID="MenuItemTemplate1" runat="server" Text="删除2" Title="删除1"
ClientOnClickNavigateUrl="do.aspx?this=%EDIT%&that=%NAME%" ImageUrl="/_layouts/images/EawfNewUser.gif"&
&/SharePoint:MenuItemTemplate&
&SharePoint:MenuItemTemplate ID="MenuItemTemplate2" runat="server" Text="编辑2" ImageUrl="/_layouts/images/ICWM.gif"
ClientOnClickScript="show();"&
&/SharePoint:MenuItemTemplate&
&/SharePoint:MenuTemplate&
后台代码:
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
BindGridView();
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
string id = GridView1.DataKeys[e.RowIndex].Value.ToString();
if (!string.IsNullOrEmpty(id))
SPWeb web = SPContext.Current.W
SPList list = web.Lists["CusList"];
SPListItem item = list.GetItemById(Convert.ToInt32(id));
item["_x5185__x5bb9_"] = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();
item.Update();
GridView1.EditIndex = -1;
BindGridView();
protected void GridView1_RowCancelling(object sender, GridViewCancelEditEventArgs e)
GridView1.EditIndex = -1;
BindGridView();
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
GridView1.EditIndex = e.NewEditI
BindGridView();
private void BindGridView()
SPWeb web = SPContext.Current.W
SPList list = web.Lists["CusList"];
SPListItemCollection items = list.I
DataTable dt = items.GetDataTable();
if (dt != null)
GridView1.DataSource = dt.DefaultV
GridView1.DataBind();
1.创建下拉菜单代码:
1)在SPGridView中的SPMenuField MenuTemplateId ,注意它的MenuTemplateId
属性说明:
NavigateUrlFields="ID,LinkTitle"//指定下面链接的参数 NavigateUrlFormat="do.aspx?p={0}&q={1}" //这里指定url,参数用{0}{1}...{n}替代,实际值,由上面的值替换。 TokenNameAndValueFields="EDIT=ID,NAME=LinkTitle"//指定菜单项中可以使用的值,就是ClientOnClickNavigateUrl="do.aspx?this=%EDIT%&that=%NAME%" TextFields="LinkTitle"//指定绑定的项值,比如图中的title1,title2
2)MenuTemplate它是下啦菜单项的容器,注意它的ID必须和上面的MenuTemplateId一致。
3)SPMenuField MenuTemplateId就是菜单项了。
属性说明:
Text="删除2" //下啦菜单项看到的值 Title="删除1"//下拉菜单项title(有什么用处?) ClientOnClickNavigateUrl="do.aspx?this=%EDIT%&that=%NAME%" //点击下拉菜单项后跳转,注意这里的参数。 ImageUrl="/_layouts/images/EawfNewUser.gif"//下拉菜单项前面的小图标
ClientOnClickScript="show();"//可以绑定js函数
首先SPGridView继承自GridView,所以你可以直接用GridView里面的思想来编辑。但是由于前者的列是&SharePoint:SPBoundField ,所以此时编辑时并不会像GridView那样出现文本框。如下:下面是出于编辑状态的SPGridView,可以看出,标题和内容等并没转成可输入的文本框。
将代码作如下改变即可:将上面的所有SharePoint:SPBoundField 换成asp:BoundField,就行了。如下
&SharePoint:SPGridView ID="SPGridView1" DataKeyNames="ID" AutoGenerateColumns="false"
OnRowEditing="GridView1_RowEditing" OnRowCancelingEdit="GridView1_RowCancelling"
OnRowUpdating="GridView1_RowUpdating" runat="server"&
&asp:BoundField
&asp:BoundField DataField="LinkTitle" HeaderText="标题"&
&/asp:BoundField&
&asp:BoundField DataField="_x5185__x5bb9_" HeaderText="内容"&
&/asp:BoundField&
&asp:BoundField DataField="Author" HeaderText="创造者"&
&/asp:BoundField&
&asp:CommandField ShowEditButton="true" HeaderText="操作" EditText="编辑" UpdateText="更新" CancelText="取消" /&
。。。。。。。。&节省篇幅,其他代码省略&
注意,1.有没有看到内容里有div标签,这个很不好,不过asp:BoundField里有HtmlEncode属性,设为false即可。SharePoint:SPBoundField没有该属性。
2.asp:CommandField 并没有对应的SharePoint:CommandField
3.完全可以用gridview的功能替代spgridView
源码下载:#
阅读(...) 评论()主题 : 使用UIDocumentInteractionController 如何在线预览网络URL的文档?
级别: 新手上路
可可豆: 38 CB
威望: 38 点
在线时间: 7(时)
发自: Web Page
使用UIDocumentInteractionController 如何在线预览网络URL的文档?&&&
技术问题发到问答:我知道,我仍旧要在论坛继续发布问题
我想要做一个在线预览服务器端的文档的功能,使用的是UIDocumentInteractionController这个控件。- (UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath   定义URL 代码为:fileURL = [NSURL fileURLWithPath:@&http://192.168.101.128:8090/merweb/images/merchant/1.jpg&];
//页面列表显示要预览的文档名称- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx定义URL  代码为:   NSString *urlStr = @&http://192.168.101.128:8090/merweb/images/merchant/1.jpg&;        urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];        fileURL = [NSURL URLWithString:urlStr];  //选中一条记录后,记录要预览的对象的URL.打印fileURL结果为:@&http://192.168.101.128:8090/merweb/images/merchant/1.jpg&;但运行后报错为:Couldn't issue file extension for path: /merweb/images/merchant/1.jpg请问有没有人碰到类似问题?”“”或者有没有哪位大牛 能够告诉我  如何在线预览(不保存到本地,只预览)服务器端的文档呢?谢谢!!!
级别: 新手上路
可可豆: 38 CB
威望: 38 点
在线时间: 7(时)
发自: Web Page
没有人回应么
级别: 新手上路
可可豆: 4 CB
威望: 4 点
在线时间: 3(时)
发自: Web Page
楼主解决么,我也遇到了这个问题,求解!!!!!
级别: 新手上路
可可豆: 110 CB
威望: 110 点
在线时间: 34(时)
发自: Web Page
回 楼主(cocoye) 的帖子
LZ解决了话,放出来看看哇。。。
级别: 新手上路
可可豆: 1 CB
威望: 1 点
在线时间: 7(时)
发自: Web Page
&&&&&&&&&&&&
级别: 新手上路
可可豆: 339 CB
威望: 339 点
在线时间: 62(时)
发自: Web Page
Couldn't issue file extension for path: /library/ios/documentation/UIKit/Reference/。。。碰到了同样的问题,求解
级别: 新手上路
UID: 140262
可可豆: 20 CB
威望: 22 点
在线时间: 87(时)
发自: Web Page
lz这个问题解决了吗?碰到同样的问题啊
关注本帖(如果有新回复会站内信通知您)
3*3+1 正确答案:10
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版如何用jquery获取当前页面url传入的参数
已有 205 次阅读
|个人分类:|系统分类:|关键词:js, jquery, url, parameter
参考:/blog/index.php/jquery/8-useful-jquery-snippets-for-urls-querystrings/&这里把代码摘录一下:var vars = [], & &var q = document.URL.split('?')[1]; & &if(q != undefined){ & & & &q = q.split('&'); & & & &for(var i = 0; i & q. i++){ & & & & & &hash = q[i].split('='); & & & & & &vars.push(hash[1]); & & & & & &vars[hash[0]] = hash[1]; & & & &}}// Will alert the value of parameter aalert(vars['a']);实际使用时,可灵活使用,如detailactivity.html?id=8只传入一个参数可以利用:var id = $(location).attr('href').split('?')[1].split('&')[0].split('=')[1];来获取到。另外如下两个也不错,记下来做个参考:& 第一个代码如下:& * 解析URL中的参数 * @param {url路径} string * @returns {返回object&key,value&}
*/$.getUrlParam = function(string) {var obj = new Object();if (string.indexOf(&?&) != -1) {var string = string.substr(string.indexOf(&?&) + 1);var strs = string.split(&&&);for (var i = 0; i & strs. i++) {var tempArr = strs[i].split(&=&);obj[tempArr[0]] = tempArr[1];}}return}&第二个代码如下:jQuery.extend({/*** Returns get parameters.** If the desired param does not exist, null will be returned** @example value = $.getURLParam(&paramName&);*/ &getURLParam: function(strParamName){ &var strReturn = &&; &var strHref = window.location. &var bFound= & &var cmpstring = strParamName + &=&; &var cmplen = cmpstring. &if ( strHref.indexOf(&?&) & -1 ){ & &var strQueryString = strHref.substr(strHref.indexOf(&?&)+1); & &var aQueryString = strQueryString.split(&&&); & &for ( var iParam = 0; iParam & aQueryString. iParam++ ){ & & &if (aQueryString[iParam].substr(0,cmplen)==cmpstring){ & & & &var aParam = aQueryString[iParam].split(&=&); & & & &strReturn = aParam[1]; & & & &bFound= & & & & & & &} & & & & &} &} &if (bFound==false) &return strR}});
本文引用地址:&此文来自科学网孙鹏博客,转载请注明出处。
上一篇:下一篇:
当前推荐数:0
评论 ( 个评论)
作者的其他最新博文
热门博文导读
Powered by
Copyright &

我要回帖

更多关于 webview加载url 的文章

 

随机推荐