Databind не обновляет Gridview - PullRequest
1 голос
/ 06 июля 2011

У меня есть сетка, которую я динамически связываю с моим кодом.По какой-то причине, и только когда пользователь удаляет строку из вида сетки (используя пользовательскую функцию), после обратной передачи вид сетки не обновляется (удаленное значение остается).Тем не менее, если пользователь обновит представление сетки любым другим способом (т. Е. Добавит элемент, выберет нужный элемент на другой вкладке и т. Д.), Он будет привязан просто отлично.

Я поставил точки останова в своем кодечтобы увидеть, что происходит, и, очевидно, представление сетки привязано правильно, а удаленный элемент отсутствует в его 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
        }

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

[ПРАВИТЬ] Забавно, что не только делаетон запускается, но когда я проверяю содержимое источника данных после его запуска (во время отладки), элемент, который был фактически удален , удаляется из источника данных, он просто не показывает изменения пользователю.

Ответы [ 3 ]

5 голосов
/ 07 июля 2011

Я разобрался с проблемой:

Gridview имеют предустановленные команды, такие как «выбрать», «редактировать» и «удалить». Когда я пытаюсь определить свое собственное событие для запуска с именем команды «delete», программа попытается запустить части моего события вместе с его предопределенным событием. Это то, что вызывает проблемы.

1 голос
/ 20 июля 2012

Это была и моя проблема.Я передавал «Удалить» как CommandName для asp: ImageButton.После того, как я увидел ваше сообщение, я изменил его на «DeleteThis», и оно сразу же начало работать.Зарезервированные проблемы со словами, как эти ....!

Спасибо за размещение решения после факта.Помог по крайней мере один человек.

Виктор Дель Прет

0 голосов
/ 06 июля 2011

Обязательно ли запускается bindgridview? Вы запускаете его в режиме отладки для проверки?

...