GridView RowUpdating SqlDataSource.Update из CodeBehind - PullRequest
1 голос
/ 07 октября 2011

Поэтому у меня возникла проблема с обновлением 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();
}

Редактировать: Переписал мой пример команды обновления ... это действительно команда обновления, а не команда выбора, ха-ха.

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

Прежде всего, UpdateCommand не должно быть похоже на UPDATE A_Table SET ID = .. WHERE ...?

Я думаю, вы что-то упустили.Читать Вставить Обновить Редактировать Удалить запись в GridView .Это отличная статья для вас.

РЕДАКТИРОВАТЬ: Как Кейли сказать: Попробуйте SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;

2 голосов
/ 07 октября 2011

Другие ответы здесь ОЧЕНЬ правильны, если указать на проблему с вашим UpdateCommand.

Как я уже упоминал в комментарии ранее, я просто укажу, что это немного проще, чем то, что выесть там.При использовании GridView с 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 голосов
/ 07 октября 2011

Ваша команда 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

...