【问题标题】:Check box in gridview should update the splistitem check boxgridview 中的复选框应更新 splistitem 复选框
【发布时间】:2013-12-11 23:26:27
【问题描述】:

我是视觉工作室的新手。我有一个 Sharepoint 列表,其中包含以下字段组名、用户、部分和活动(这是一个复选框)。我有一个网格视图可视 Web 部件,它将从列表中检索值,我需要在网格视图中添加一个复选框。

当用户在网格视图中选中复选框并单击 Ok 按钮时,我希望 SharePoint 列表项 Active 更新为 True 或 Yes,取消选中并单击 Ok 为 False 或 No。

以下是我到目前为止所做的。我能够从列表中检索值。但是当我单击复选框时,我的 SharePoint 列表中没有任何更新。

<asp:GridView ID="GridView1" runat="server" 
    onselectedindexchanged="GridView1_SelectedIndexChanged" AutoGenerateColumns="false">   

<Columns>
<asp:BoundField DataField="Group Name" HeaderText="Group Name" />
<asp:BoundField DataField="User" HeaderText="User" />
<asp:BoundField DataField="Section" HeaderText="Section" />
<asp:TemplateField HeaderText="Action" ShowHeader="true" HeaderStyle-HorizontalAlign="Center" Visible="true" HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="#ad0015">


<ItemTemplate>
<asp:CheckBox ID="chkStatus" runat="server" AutoPostBack="true" 
                                  Width="100px"/>
</ItemTemplate> 
</asp:TemplateField>
<asp:TemplateField HeaderText="">

<HeaderTemplate>
</HeaderTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Ok" 
Width="119px" />




protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.DataSource = GetData();
        if (!Page.IsPostBack)
        {

            GridView1.DataBind();
        }
    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    DataTable GetData()
    {
        SPSite oSiteCollection = SPContext.Current.Site;
        SPWeb oWeb = oSiteCollection.OpenWeb();
        SPList oSPList = oWeb.Lists["sample"];
        SPListItemCollection oSPListItemCollection = oSPList.Items;

        DataTable dt = new DataTable();
        try
        {
            dt.Columns.Add("Group Name", typeof(String));
            dt.Columns.Add("User", typeof(String));
            dt.Columns.Add("Section", typeof(String));
            dt.Columns.Add("Active", typeof(bool));
            dt.Columns.Add("ID", typeof(int));
            DataRow dataRow;
            foreach (SPListItem oSplistItem in oSPListItemCollection)
            {
                dataRow = dt.Rows.Add();
                dataRow["Group Name"] = oSplistItem["Group Name"].ToString();
                dataRow["User"] = oSplistItem["User"].ToString();
                dataRow["Section"] = oSplistItem["Section"].ToString();
                //dataRow["ID"] = oSplistItem["ID"].ToString();
                //   dataRow["Active"] = oSplistItem["Active"].ToString();

            }


            return dt;
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Managers Approval" + ex.Message.ToString());
            return dt;
        }
    }


    protected void Button1_Click(object sender, EventArgs e)
    {

        foreach (GridViewRow row in GridView1.Rows)
        {
            // Access the CheckBox
            CheckBox cb = (CheckBox)row.FindControl("chkStatus");
            bool status = cb.Checked;
            string strBoolean = Convert.ToString(status);
                    if (cb != null)
                    {
                        SPSite oSiteCollection = SPContext.Current.Site;

                        using (SPWeb oWeb = oSiteCollection.OpenWeb())
                        {
                            SPList oSPList = oWeb.Lists["sample"];
                            SPListItemCollection oSPListItemCollection = oSPList.Items;
                            foreach (SPListItem oSplistItem in oSPListItemCollection)
                            {
                                if (strBoolean == "True")
                                {
                                    oSplistItem["Active"] = true;
                                }
                                else
                                {
                                    oSplistItem["Active"] = false;
                                }
                                oSplistItem.Update();
                            }

                        }
        }

【问题讨论】:

  • 欢迎来到 Stackoverflow。请注意,Stackexchange 有一个解决所有 Sharepoint 相关问题的网站:sharepoint.stackexchange.com
  • 有错误吗?
  • 您还尝试更新特定项目吗?如果是,那么您需要添加带有列表项 ID 的隐藏输入字段,并在您选中的事件中获取此 ID 并仅更新具有此 ID 的项目。
  • 我已经添加了输入字段。它是“活跃的”
  • 我已经让它适用于一行,但它不适用于网格视图中的每一行。我将在上面添加修改后的代码

标签: c# asp.net sharepoint gridview


【解决方案1】:
    uncomment the following lines 
     1. uncomment the following lines
     2. //   dataRow["Active"] = oSplistItem["Active"].ToString();
     3.  in your button_click event, get the row id
     4.  give the id to the splistitem and it will find the items as well as improve performance
     5.  you have to use the AllowUnsafeUpdates before and after your changes

     let me know if I can help further
    <asp:GridView ID="GridView1" runat="server" onselectedindexchanged="GridView1_SelectedIndexChanged" AutoGenerateColumns="false">   
    <Columns>
      <asp:BoundField DataField="Group Name" HeaderText="Group Name" />
      <asp:BoundField DataField="User" HeaderText="User" />
      <asp:BoundField DataField="Section" HeaderText="Section" />
      <asp:TemplateField HeaderText="Action" ShowHeader="true" HeaderStyle-HorizontalAlign="Center" Visible="true" HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="#ad0015">
   <ItemTemplate>
      <asp:CheckBox ID="chkStatus" runat="server" AutoPostBack="true" Width="100px"/>
      </ItemTemplate> 
      </asp:TemplateField>
    <asp:TemplateField HeaderText="">
    <HeaderTemplate>
      </HeaderTemplate>
      </asp:TemplateField>
      </Columns>
      </asp:GridView>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Ok" 
      Width="119px" />

protected void Page_Load(object sender, EventArgs e)
{
    GridView1.DataSource = GetData();
    if (!Page.IsPostBack)
    {

        GridView1.DataBind();
    }
}

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{

}
DataTable GetData()
{
    SPSite oSiteCollection = SPContext.Current.Site;
    SPWeb oWeb = oSiteCollection.OpenWeb();
    SPList oSPList = oWeb.Lists["sample"];
    SPListItemCollection oSPListItemCollection = oSPList.Items;

    DataTable dt = new DataTable();
    try
    {
        dt.Columns.Add("Group Name", typeof(String));
        dt.Columns.Add("User", typeof(String));
        dt.Columns.Add("Section", typeof(String));
        dt.Columns.Add("Active", typeof(bool));
        dt.Columns.Add("ID", typeof(int));
        DataRow dataRow;
        foreach (SPListItem oSplistItem in oSPListItemCollection)
        {
            dataRow = dt.Rows.Add();
            dataRow["Group Name"] = oSplistItem["Group Name"].ToString();
            dataRow["User"] = oSplistItem["User"].ToString();
            dataRow["Section"] = oSplistItem["Section"].ToString();
            dataRow["ID"] = oSplistItem["ID"];
            dataRow["Active"] = oSplistItem["Active"].ToString();

        }
        return dt;
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("Managers Approval" + ex.Message.ToString());
        return dt;
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        // Access the CheckBox
        CheckBox cb = (CheckBox)row.FindControl("chkStatus");
        bool status = cb.Checked;
        string strBoolean = Convert.ToString(status);
                if (cb != null)
                {
                    SPSite oSiteCollection = SPContext.Current.Site;

                    using (SPWeb oWeb = oSiteCollection.OpenWeb())
                    {
                        SPList oSPList = oWeb.Lists["sample"];
                        SPListItemCollection oSPListItemCollection = oSPList.Items;
                        //foreach (SPListItem oSplistItem in oSPListItemCollection)
                        //{
                         int rowId = Int32.Parse(grdList.DataKeys[dr.RowIndex].Value.ToString());

                         SPListItem oSplistItem = oSPList.GetItemById(Convert.ToInt32(rowId));
                          oWeb.AllowUnsafeUpdates = true;
                           {

                            if (strBoolean == "True")
                            {
                                oSplistItem["Active"] = true;
                            }
                            else
                            {
                                oSplistItem["Active"] = false;
                            }
                            oSplistItem.Update();
                        }
                          oWeb.AllowUnsafeUpdates = false;
                    }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多