Пользовательские множественные выборки сетки в командах обновления строки - PullRequest
0 голосов
/ 29 мая 2009

У меня есть расширенный класс GridView, GridViewEx, который наследуется от базового вида сетки ASP.NET. Я переопределяю метод CreateColumns, чтобы перехватить коллекцию столбцов и ввести свой собственный столбец, содержащий измененный CheckBoxField.

(Sidenote: я пытался найти какой-то другой способ хранения и обновления выбранных строк и просто использовал флажок в качестве механизма отображения, но в конечном итоге флажок стал самым простым способом обработки всего.)

Свойство ReadOnly CheckBoxField имеет значение true, когда оно создается (и оно остается истинным при добавлении в коллекцию столбцов), что должно препятствовать его передаче в качестве параметра для запросов обновления к источнику данных gridview.

Как вы понимаете, этого не происходит. Когда я пытаюсь выполнить редактирование и обновление строки, я получаю предупреждение «Слишком много параметров» с одним параметром, который не имеет имени. Если я отключу функцию множественного выбора, это исчезнет. Итак, я знаю, что мое поле checkbox не обрабатывается как поле Readonly. Но я не знаю, как это исправить!

Есть идеи, где, когда и как мне нужно настроить это поле, чтобы оно не передавалось автоматически в качестве параметра для моих обновлений?

1 Ответ

0 голосов
/ 29 мая 2009

Хорошо, разобрался.

У меня также был собственный CheckBoxField, который переопределяет InitializeDataCell и пишет в моем собственном флажке. Мне нужно было добавить дополнительную проверку, чтобы отключить поле во время редактирования, если установлено Readonly. Это, кажется, решило эту проблему. Надеюсь, что это поможет любому, кто может делать пользовательские правки GridView.

    internal class InputCheckBoxField : CheckBoxField
    {
        //... Some boilerplate for ID and other properties here

        protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
        {
            base.InitializeDataCell(cell, rowState);

            if (cell.Controls.Count == 0)
            {
                CheckBox chk = new CheckBox();
                chk.ID = CheckBoxID;
                chk.AutoPostBack = true;
                cell.Controls.Add(chk);

                //This was the needed check
                if(ReadOnly && rowState == DataControlRowState.Edit)
                    chk.Enabled = false;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...