C# GridView回发时出错

C# GridView回发时出错,c#,sharepoint-2010,C#,Sharepoint 2010,我在一个web应用程序中有两个站点。我要做的是使用按钮从站点B中的web部件更新站点A中的列表 问题是,如果我不使用Page.IsPostBack,当单击按钮时,页面会抛出一个未处理的异常,但是站点A中的列表会更新。但是如果我使用Page.IsPostBack,我不会得到异常,但过程不会推进;事实上,当单击按钮时,它甚至不会进入eventhandler if (!Page.IsPostBack) { using (SPSite site =

我在一个web应用程序中有两个站点。我要做的是使用按钮从站点B中的web部件更新站点A中的列表

问题是,如果我不使用
Page.IsPostBack
,当单击按钮时,页面会抛出一个未处理的异常,但是站点A中的列表会更新。但是如果我使用
Page.IsPostBack
,我不会得到异常,但过程不会推进;事实上,当单击按钮时,它甚至不会进入eventhandler

if (!Page.IsPostBack)
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    SPQuery query = new SPQuery();
                    query.Query = @"Query><OrderBy><FieldRef Name='Title' /></OrderBy><Query>";
                    query.ViewAttributes = "<FieldRef Name='Title' />";
                    query.ViewFields = string.Concat(
                        "<FieldRef Name='Title' />",
                        "<FieldRef Name='Status' />",
                        "<FieldRef Name='Severity' />",
                        "<FieldRef Name='Comment' />");

                    query.ViewFieldsOnly = true;
                    showGrid = new GridView();

                    this.Controls.Add(showGrid);

                    SPList list = SPContext.Current.Site.RootWeb.Lists["Ticket List"];
                    DataTable dt = new DataTable();                    

                    ButtonField approveBtn = new ButtonField();
                    approveBtn.ButtonType = ButtonType.Button;
                    approveBtn.CommandName = "Update";


                    approveBtn.Text = "Approve";
                    showGrid.Columns.Add(approveBtn);

                    dt = list.Items.GetDataTable().Copy();
                    dt = list.GetItems(query).GetDataTable();
                    showGrid.DataSource = dt;

                    showGrid.DataBind();

                    showGrid.RowCommand += new GridViewCommandEventHandler(inventoryGridView_RowCommand);
                }
            }

在页面加载事件中,您正在创建网格并将其添加到控件集合。因此,当您不准备回发时……它将再次创建控件,但当您尝试添加时,它将抛出异常


通过调试解决方案来检查它。

我不确定是否正确理解了您的意思。请你详细说明一下好吗?谢谢你的回复!你调试过你的解决方案吗?您在哪里为网格分配了ID。好的…您在pageload中创建了一个具有某个ID的控件,如果您没有检查ISPostback…它将再次尝试创建具有相同ID的同一控件,并将其添加到控件集合中。这将引发错误,因为控件的id必须始终是唯一的。
if (e.CommandName == "Update")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = showGrid.Rows[index];
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb Web = site.OpenWeb())
                    {
                        Web.AllowUnsafeUpdates = true;
                        // Open List 
                        SPList list = SPContext.Current.Site.RootWeb.Lists["Ticket List"];
                        SPListItem _listItem = list.Items[row.RowIndex];
                        _listItem["Status"] = "Approved";
                        _listItem.Update();
                        Web.AllowUnsafeUpdates = false;
                    }
                }
            }