Как удалить строку из GridView, используя невидимые данные?
-
03-07-2019 - |
Вопрос
Я пишу простой интерфейс прототипа, используя GridView, который заполняется с помощью функции, а не связан напрямую с источником данных SQLServer.
Таким образом, я могу удалить строку / запись из сетки / базовой базы данных, в которой я нахожусь в данный момент
- Установка AutoGenerateDeleteButton = true
- Отображение уникальных идентификаторов записей в первом столбце
- Обработка события RowDeleting
- Получение идентификатора путем получения сетки.Строки [e.RowIndex].Ячейки [idIndex].Текст
- Передача этого числа функции, которая выполняет удаление
Кажется, это работает просто отлично, но я бы предпочел не отображать идентификаторы пользователям, поскольку они для них ничего не значат.
Я попытался установить для свойства Visible столбца id значение false, но это привело к тому, что шаг 4 выше вернул пустую строку - и поэтому запись не была удалена.
Итак, как мне сохранить скрытый идентификационный номер в каждой строке?
Или я иду по этому поводу совершенно неправильным путем?
Следите за ответами:
Спасибо за оба ответа, в итоге я выбрал путь DataKeyNames Эрика.Для других людей, таких же новичков в ASP.NET, как я, шаги, которые я использовал, где
Между строками, где я установил источник данных grids и вызвал DataBind(), я добавил
grid.DataKeyNames = new string[] {"id"};
Затем в функции, обрабатывающей удаление строки, я получил свой идентификатор, используя
grid.DataKeys[e.RowIndex].Value
Решение
GridView имеет свойство DataKeyNames .Когда вы привязываете источник данных к сетке, вы задаете DataKeyNames (обычно только с одним именем, вашим полем PK).Вы не показываете PK, но вы можете получить к нему доступ из кода.
Другие советы
Видимый = false означает, что он не отображается на странице.Что вы хотите, так это либо сделать это шаблонным полем и использовать скрытое поле для хранения значения, либо установить стиль элемента управления на "отображать:нет;".Это было бы в том случае, если бы клиентскому коду требовался доступ к значению для вызова Ajax или чего-то еще.
В противном случае используйте свойство DataKeyNames, как предлагает @Eric Z Beard.