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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值