Обновление ASP.NET GridView
Я использую VS2005 C# и SQL Server 2005.
У меня есть GridView, и это мой текущий оператор обновления:
UpdateCommand="UPDATE [UserData] SET [UserID] = @UserIDe, [Username] = @Username, [Age] = @Age, [MemberType]=@MemberType WHERE [UserID] = @UserID
Приведенный выше оператор обновит идентификатор строки пользователя UserID
,
Тем не менее, я хотел бы переменную UserID
быть редактируемым, поэтому, если я отредактирую UserID
при обновлении таблицы строка не будет обновлена, потому что UserID
может не существовать
Как я могу использовать UpdateCommand
и обновить строку, указав row number
отредактированного ряда?
2 ответа
Это может быть сделано путем отслеживания всех исходных значений. Visual Studio сделает это за вас, если вы используете мастер для генерации операторов SQL и выберете опцию "использовать оптимистичный параллелизм", как показано здесь.
Пример сгенерированного SQL можно найти здесь.
Пример кода со страницы:
UPDATE Products SET
ProductName = @ProductName,
UnitPrice = @UnitPrice
WHERE
ProductID = @original_ProductID AND
ProductName = @original_ProductName AND
UnitPrice = @original_UnitPrice
Прочитав статью, вы сможете применить тот же тип запроса к вашей ситуации, так как использование исходных значений позволит вам обойти необходимость в первичном ключе. Однако я должен отметить, что наличие редактируемого идентификационного ключа - очень плохой дизайн, поскольку вы не можете гарантировать, что он уникален. Вы можете очень легко закончить обновление более чем одной записи, наряду с целым рядом других проблем.
Под GridView у таблицы должен быть хотя бы один уникальный идентификатор, чтобы обновить запись. Если вам нужно отредактировать UserID, вам нужно иметь фиксированный ключ в вашей таблице. По крайней мере, назовите его как UserKey. Я думаю, что GridView может редактировать и обновлять данные, только если у вас есть указатель на эту строку. В противном случае удалите UserID из коллекции DataKeyNames и назначьте его столбцам, которые, по вашему мнению, являются уникальными и не изменяются.