GridView обновляет строку SqlDataSource.Обновление из CodeBehind

#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. Напротив, пример на самом деле не соответствует действительности. Я не публиковал сценарий, потому что он содержит сенсационную информацию, я просто написал плохо продуманный пример. Команда обновления на самом деле не проблема, на самом деле ее выполнение.