#c# #asp.net #sql #code-behind #sqldatasource
#c# #asp.net #sql #код за #sqldatasource
Вопрос:
Итак, у меня возникла проблема с выполнением обновления в Gridview во время события OnRowUpdating.
То, что я пытаюсь сделать, это установить команду UpdateCommand в SqlDataSource, а затем обновить с помощью этой команды. Событие запускается нормально, но когда событие завершено, кажется, что строка никогда не обновляется.
C#:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @AValue WHERE ID = " e.RowIndex;
SqlDataSource1.Update();
}
Редактировать: переписал мой пример обновления command…it на самом деле это команда обновления, а не команда выбора, ха-ха.
Комментарии:
1. Вам не нужно ничего делать в том
RowUpdating
случае, если у вас естьDataKeyNames
настройки дляGridView
(и у вас естьUpdateCommand
определенные вSQLDataSource1
разметке). ВызовUpdate()
метода здесь приведетUPDATE
к повторному повторению.2. @jadarnel27 прав; если у вас есть
DataKeyNames
настройка, вызовUpdate()
изRowUpdating
обработчика вызовет StackOverflowExeption!
Ответ №1:
Другие ответы здесь ОЧЕНЬ корректны, указывая на проблему с вашим UpdateCommand
.
Как я упоминал в комментарии ранее, я просто укажу, что это немного проще, чем то, что у вас есть. При использовании a GridView
с a SQLDataSource
большая часть работы выполняется за вас, если вы правильно настроили.
Прежде всего, определите свой UpdateCommand
в разметке для SQLDataSource
, например:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="Your Connection String Here"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT ColPK, ColA, ColB, ColC FROM Table_Name"
UpdateCommand="UPDATE Table_Name
SET ColA=@ColA, ColB=@ColB, ColC=@ColC,
WHERE ColPK=@ColPK">
</asp:SqlDataSource>
( ColPK
будет первичным ключом таблицы, которую вы обновляете)
Затем вы можете установить для «AutoGenerateEditButton» значение true в вашей разметке GridView и, пуф! Вы можете обновить GridView
(без необходимости что-либо делать в коде).
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
AutoGenerateEditButton="True" DataKeyNames="ColPK"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="ColPK" HeaderText="Column PK"
SortExpression="ColA" ReadOnly="True" />
<asp:BoundField DataField="ColA" HeaderText="Column A"
SortExpression="ColA" />
<asp:BoundField DataField="ColB" HeaderText="Column B"
SortExpression="ColB" />
<asp:BoundField DataField="ColC" HeaderText="Column C"
SortExpression="ColC" />
</Columns>
</asp:GridView>
Теперь вы все равно можете обработать OnRowUpdating
событие в своем коде, если вам нужно выполнить дополнительную обработку или отменить на Update
основе некоторой логики и т. Д. Но базовая функциональность обновления в значительной степени бесплатна!
Ответ №2:
Предполагается, что ваша UpdateCommand должна быть UPDATE
командой, а не SELECT
командой.
SqlDataSource1.UpdateCommand = "SELECT Something FROM A_Table WHERE ID = " e.RowIndex;
Измените эту строку на что-то более близкое к этому:
SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " e.RowIndex;
Смотрите эту ссылку msdn для получения дополнительной информации о том, как использовать команду UpdateCommand:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updatecommand.aspx
Ответ №3:
Прежде всего, UpdateCommand
не должно быть похоже UPDATE A_Table SET ID = .. WHERE ...
?
Я думаю, вы что-то упустили. Чтение Вставка Обновление Редактирование Удаление записи в GridView. Это отличная статья для вас.
РЕДАКТИРОВАТЬ: как говорит Кайли: попробуйте SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " e.RowIndex;
Комментарии:
1. Напротив, пример на самом деле не соответствует действительности. Я не публиковал сценарий, потому что он содержит сенсационную информацию, я просто написал плохо продуманный пример. Команда обновления на самом деле не проблема, на самом деле ее выполнение.