数据绑定不刷新Gridview

Jor*_*man 1 c# asp.net data-binding postback gridview

我有一个gridview,我在我的代码隐藏中动态地数据绑定.出于某种原因,并且仅当用户从gridview中删除一行(使用自定义函数)时,在回发后,gridview不会刷新(删除的值仍然存在).但是,如果用户要以任何其他方式刷新gridview(即添加项目,在另一个选项卡中选择正确的项目等),它就会受到限制.

我在我的代码隐藏中放置断点以查看发生了什么,显然gridview正在被绑定,并且删除的项目不在它的gridview.DataSource中.

这是我的代码,所以如果你看到我没有,请告诉我!

删除行命令:

if (e.CommandName == "delete")
        {
            int selectedId = int.Parse(e.CommandArgument.ToString());
            //delete selected row from database
            var item = (Item)DataContext.Items.Where(item => item.ItemId == selectedId).Single();
            if (item != null)
            {
                DataContext.CompanyGoalPrograms.DeleteObject(item);
            }
            DataContext.SaveChanges();

            bindGridView(currentId); //firing, but not refreshing gv after postback
            // currentId is a static variable
        }
Run Code Online (Sandbox Code Playgroud)

bindGridView方法(每隔一次调用它的工作方式,所以我不认为问题在这里):

protected void bindGridView(long thisId)
    {
        var query = from items in DataContext.Items
                    where items.SubSomething.Something.SomethingId == thisId && goals.SubSomething.YearId == selectedYearId //<--another static variable
                    select items;
        Gridview1.DataSource = from items in query.AsEnumerable()
                                    select new
                                    {
                                        items.Field1,
                                        items.Field2,
                                        items.Field3,
                                        Field4 = ((decimal)items.Field4).ToString("N2"),
                                        Field5 = ((decimal)items.Field5).ToString("N2"),
                                        Field6 = String.Format("{0:#,##0}", (long)items.Field6),
                                        Field7 = items.Field4 == null ? "$0.00" : ((decimal)items.Field7).ToString("C"),
                                    };
        Gridview1.DataBind();
     }
Run Code Online (Sandbox Code Playgroud)

[编辑]有趣的是,它不仅运行,但是当我检查数据源的内容,它的运行后(同时调试),即实际被删除的项目从数据源中删除,它只是不显示对用户的更改.

Jor*_*man 5

我解决了这个问题:

Gridview具有预定义的命令设置,例如"选择","编辑"和"删除".当我尝试使用命令名称"delete"来定义我自己的事件时,程序将尝试运行我的事件的一部分以及它的预定义事件.这就是导致问题的原因.