GridView 的 RowUpdating事件另一個寫法 -- IBindableTemplate 介面

範例源自「ASP.NET本質論」一書

但 GridView按下「編輯」按鈕以後 會進入編輯模式
所以我微調一下 -- IBindableTemplate 介面 / TemplateField 類別





 

 

 

這個範例源自「ASP.NET本質論」一書

書裡面的範例是抓取 <ItemTemplate>

 

但 GridView按下「編輯」按鈕以後 會進入編輯模式<EditItemTemplate>

所以我微調一下:

 

 

HTML畫面:

            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1" OnRowUpdating="GridView1_RowUpdating">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True" SortExpression="id" />
                    <asp:BoundField DataField="test_time" HeaderText="test_time" SortExpression="test_time" />
 
                    <asp:TemplateField HeaderText="title (轉成樣板)" SortExpression="title">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("title") %>'></asp:TextBox>
                        </EditItemTemplate>
 
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("title") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
 
                </Columns>
            </asp:GridView>
 
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" />

 

後置程式碼:

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {                        
        TemplateField TF = (TemplateField)GridView1.Columns[3];
 
        IBindableTemplate BT = (IBindableTemplate)TF.EditItemTemplate;  //抓取「編輯樣板」
 
 
        System.Collections.Specialized.IOrderedDictionary IODict = BT.ExtractValues(GridView1.Rows[e.RowIndex]);
        // 將樣板化內容中以 "雙向"資料繫結語法 (Bind)繫結的值取出,組成一連串的名稱/值組。
 
        Response.Write(IODict["title"].ToString());
 
        Response.End();
    }

 

 

與本範例相同的 "結果",可以用很多不同的「作法」來取得相同的結果

例如,我愛用 .FindControl()方法與 .Controls集合來作

[習題]GridView裡面,樣版(Template)內的控制項,怎麼抓取?使用FindControl就對啦~

 

所以......哪種方法好用,就看自己囉。

 

用到幾個別的東西,您可參閱MSDN網站

TemplateField 類別
 
IBindableTemplate 介面  & .ExtractValues()方法

 

 

 

以前 我其實看不懂 "ASP.NET本質論" 這本書在講些什麼

後來上了OOP的課程以後,突然發現原來他是這樣解說的,有種恍然大悟的感覺

 

您可以參閱一下  OOP課程的說明:

第一,簡單的入門範例

Button_Click事件裡面的 參數 sender,以清單控制項為例

 

第二,透過遠距教學,不是實體上課,我會擔心?

遠距教學(影片教學) -- 寫程式可以這樣學習嗎? 絕對OK啦!

 

第三,如果您學習MVC,卻發現總是聽不懂,跟不上,請看一下(您缺了OOP的觀念與基礎)

[經驗談] 初學者學習ASP.NET MVC該注意哪些基礎? Kevin前輩的經驗談

 

 

推薦課程:

 




 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估