簡體   English   中英

更新行時獲取DataField值(asp GridView)asp.NET C#

[英]Get DataField value while updating row (asp GridView) asp.NET C#

我的.aspx文件中有一個GridView控件,由我的表( IdSurname )填充:

<asp:GridView 
    ID="gridView_1" 
    runat="server"
    AutoGenerateColumns="False" <!-- used to customize my columns -->
    DataKeyNames="Id" 
    DataSourceID="sqlDataSource_1"
    OnRowUpdating="gridView_rolesTiers_RowUpdating">

    <Columns>
    <asp:BoundField 
        DataField="dbColumn_db" 
        HeaderText="Id" 
        InsertVisible="False" 
        ReadOnly="True" />
    <asp:BoundField 
        DataField="dbColumn_Surname" 
        HeaderText="Surname" 
        SortExpression="RLT_Intitule">
    <asp:CommandField 
        ShowEditButton="True" />
</Columns>
</asp:GridView>

我有一個關聯的SqlDataSource,它允許我使用存儲過程來顯示我的姓氏

<asp:SqlDataSource 
    ID="sqlDataSource_1" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:myConString %>"
    SelectCommand="procedure_Select_surnames"
    SelectCommandType="StoredProcedure">
</asp:SqlDataSource>

GridView控件完美地顯示了我想要顯示的內容。

問題:現在如何通過存儲過程更新我的行而不離開當前頁面?

我發現這個問題的答案不是我想要的,或者是如此復雜以至於需要改變我的GridView的結構。

對於那些搜索使用存儲過程更新行的簡單方法的人來說,這是一個快速的解決方案:

第1步

GridView控件中添加CommandField以允許用戶更新行。 必須將此CommandField放入<Columns> <!-- here --> </Columns>標記中:

<asp:GridView 
        ID="gridView_1" 
        runat="server"
        AutoGenerateColumns="False" <!-- used to customize my columns -->
        DataKeyNames="Id" 
        DataSourceID="sqlDataSource_1"
        OnRowUpdating="gridView_rolesTiers_RowUpdating">

        <Columns>
            <!-- your precedent rows -->
            <asp:CommandField ShowEditButton="True" />
        </Columns>
        <!-- nexts attributes -->
</asp:GridView>

第2步

添加事件處理程序OnRowUpdating ,當您點擊“更新”按鈕但在用戶驗證更新之前發生:

<asp:GridView 
            ID="gridView_1"
            <!-- others parameters -->
            OnRowUpdating="gridView_1_RowUpdating" />
    <!-- ... -->
</asp:GridView>

第3步

您現在將更新我們剛添加的函數gridView_1_RowUpdating以獲取我們需要更新的變量。 以下是更新存儲過程的外觀:

CREATE PROCEDURE [dbo].[storedProcedure_Update_Surnames]
        @id        int
    ,   @surname   varchar(50)
AS
        UPDATE     [dbo].[table_Surnames]
        SET        dbColumn_Surname = @surname
        WHERE      dbColumn_Id = @id 
RETURN 0

以下是gridView_1_RowUpdating方法的內容:

protected void gridView_1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string surname = e.NewValues[0].ToString(); /* NewValues is the key */

    string id = gridView_1.DataKeys[e.RowIndex].Values[0].ToString(); /* get the id */

    sqlDataSource_1.UpdateCommand = "[storedProcedure_Update_Surnames] " + id + ", '" + surname +"'"; 
}  

解釋:

當您單擊“更新”時,所有字段而不是鍵都變為textBox 這些textBox包含您編輯的字段的新(或非)值。

所有這些值都存儲在一個數組NewValues []中。 您可以使用每個textBox更新的索引來訪問這些數據(從左到右為索引順序,從0到n)。

為了完成,我通過使用我需要的值正確填充參數來使用存儲過程,並通過觸發存儲過程的行為自動更新該行。

希望對那些需要執行此類過程的人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM