Jordan Foreman
Jordan Foreman

Reputation: 3888

Databind not refreshing Gridview

I have a gridview that I databind dynamically in my codebehind. For some reason, and only when a user deletes a row from the gridview (using a custom function), after postback, the gridview isn't refreshed (the deleted value remains). However, if the user were to refresh the gridview in any other way (ie. adding an item, selecting the right item in another tab, etc), it is bound just fine.

I put breakpoints in my codebehind to see what was happening, and apparently the gridview is being bound correctly, and the item that was deleted isn't in it's gridview.DataSource.

Here is my code, so if you see what I don't, just let me know!

Delete Row-Command:

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
        }

bindGridView method (works every other time its called, so I don't think the problem is here):

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();
     }

[EDIT] The funny thing is, not only does it run, but when I check the contents of the datasource after its been run (whilst debugging), the item that was deleted actually is removed from the datasource, it just doesn't show the changes to the user.

Upvotes: 1

Views: 5649

Answers (3)

asus3000
asus3000

Reputation: 163

That was totally the problem with mine as well. I was passing "Delete" as the CommandName for the asp:ImageButton. After I saw your post I changed it to pass "DeleteThis" and it began working immediately. Reserved word problems like these....!

Thanks for posting the solution after the fact. It helped at least one person.

Victor Del Prete

Upvotes: 1

Jordan Foreman
Jordan Foreman

Reputation: 3888

I figured out the problem:

Gridviews have predefined commands set up, such as 'select', 'edit', and 'delete'. When I try to define my own event to run with the command name 'delete', the program will try and run parts of my event alongside it's predefined event. This is what has been causing issues.

Upvotes: 5

all2neat
all2neat

Reputation: 125

Does the bindgridview get ran for sure? Have you run it in debug mode to verify?

Upvotes: 0

Related Questions