zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    什么是IO多路复用
    Coursera, Machine Learning, Unsupervised Learning, K-means, Dimentionality Reduction
    Coursera, Machine Learning, SVM
    ShareSDK
    iOS JS和OC交互
    iOS KVO 常见错误
    第三方框架之SDWebImage
    单例存储账号
    UIRefreshControl
    二维码扫描
  • 原文地址:https://www.cnblogs.com/zhijianliutang/p/2642022.html
Copyright © 2011-2022 走看看