2011-10-06 102 views
1

因此,我在OnRowUpdating事件期間在Gridview中執行更新時遇到問題。GridView RowUpdating CodeBehind中的SqlDataSource.Update

我想要做的是在SqlDataSource中設置UpdateCommand,然後使用該命令進行更新。事件正在觸發,但事件完成後,看起來該行從不更新。

C#:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @AValue WHERE ID = " + e.RowIndex; 

    SqlDataSource1.Update(); 
} 

編輯:重新寫我的示例更新命令它確實是一個更新命令,而不是選擇命令哈哈。

+1

如果您爲'GridView'設置了'DataKeyNames'(並且您已在'SQLDataSource1'標記中定義了'UpdateCommand'),那麼您不應該在'RowUpdating'事件中執行任何操作。在這裏調用'Update()'方法會導致'UPDATE'發生兩次。 – jadarnel27

+1

@ jadarnel27是對的;如果設置了'DataKeyNames',則從'RowUpdating'處理程序調用'Update()'將導致一個StackOverflowExeption! –

回答

2

這裏其他的答案都在你的UpdateCommand指出的問題非常正確的。

正如我在前面的評論中提到的,我只是指出這比你在那裏更容易一些。當GridViewSQLDataSource一起使用時,只要設置正確,就可以完成大量工作。

首先,在標記定義UpdateCommandSQLDataSource,就像這樣:

<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 [email protected], [email protected], [email protected], 
        WHERE [email protected]"> 
</asp:SqlDataSource> 

ColPK將要更新的表的主鍵)

然後,您可以在你的GridView標記中設置「AutoGenerateEditButton」爲true,並且poof!您可以更新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幾乎是免費的!

+0

這個伎倆!謝啦 :)。 –

+0

@德里克你非常歡迎! – jadarnel27

2

首先, UpdateCommand不會像UPDATE A_Table SET ID = .. WHERE ...

我想你錯過了什麼。閱讀Insert Update Edit Delete record in GridView。這對你來說是一篇很棒的文章。

編輯:像基利說:嘗試SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;

+0

奧普斯,這個例子實際上並不正確。我沒有發佈劇本,因爲它包含了感性信息,我只寫了一個思路不清的例子。更新命令實際上並不是問題,實際上是讓它執行。 –

相關問題