SharePoint 2010 之SPGridView编辑和下拉框

首先上效果图:

前台代码:

<script type="text/javascript">
     function show() {
         alert("abc");
     }
 </script>
 <SharePoint:SPGridView ID="GridView1" DataKeyNames="ID" AutoGenerateColumns="false" runat="server">
     <Columns>
         <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.Web;
                 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.NewEditIndex; 
            BindGridView();
         }
         private void BindGridView()
         {
             SPWeb web = SPContext.Current.Web;
             SPList list = web.Lists["CusList"];
             SPListItemCollection items = list.Items;
 
            DataTable dt = items.GetDataTable();
             if (dt != null)
             {
                 GridView1.DataSource = dt.DefaultView;
                 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函数

2.编辑

首先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">
     <Columns>
         <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

源码下载:https://skydrive.live.com/?cid=d0e02f3e0bfe5b57&sc=documents&uc=1&id=D0E02F3E0BFE5B57%21174#

参考:http://blog.ksenthil.net/archive/2009/07/27/a-control-with-the-specified-id-could-not-be-found-again.aspx

posted @ 2012-08-16 11:35  指尖流淌  阅读(940)  评论(0编辑  收藏  举报