none
FormView的 ItemCreated事件,為何分頁之後,會出現兩次DataRow ? RRS feed

  • 問題

  • MSDN的範例 --
    第一次正常  分頁(跳去其他頁)就會錯

    我檢查 FormView的 ItemCreated事件
    發現有趣狀況

    第一次執行,結果是 DataRow
    跳去其他頁,出現 "兩次" DataRow

    我想:如果能釐清這觀念,應該就能知道錯誤在哪裡?

            <asp:FormView ID="FormView1" runat="server" AllowPaging="True"
                DataKeyNames="id" DataSourceID="SqlDataSource1"
                Width="640px">
                <ItemTemplate>
                    id:
                    <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
                    <br />
                    title_A:
                    <asp:Label ID="titleLabel" runat="server" Text='<%# Bind("A") %>' />
                    <br />
                </ItemTemplate>
            </asp:FormView>

            <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                ConnectionString="<%$ ConnectionStrings:myTABLEConnectionString %>"
                SelectCommand="SELECT top 10 [id], [A] FROM [myTABLE]">
            </asp:SqlDataSource>
     
     
     
        Protected Sub FormView1_ItemCreated(sender As Object, e As System.EventArgs) Handles FormView1.ItemCreated
            Dim FVrow As FormViewRow = FormView1.Row
            Response.Write(FVrow.RowType.ToString() & "<br>")
            ' 第一次執行,結果是 DataRow
            ' 跳去其他頁,出現 "兩次" DataRow  ???  WHY ???

        End Sub

    Thanks for your kind supports.

     

    2011年8月26日 上午 09:26

解答

  • 第一次進到網頁的事後因為你用的是SQLDataSource所以自動做了一次DataBind,因而觸發了FormView的 ItemCreated,所以印了一次"DataRow"。

    當你換頁的時候,因為POSTBACK,會自動觸發FormView的ItemCreated會先印出一次"DataRow"接著因為DataBind再多觸發一次ItemCreated,所以又印了一次"DataRow"。

    不過你說MSDN的範例會有錯誤訊息,可能就得麻煩你把錯在哪一行或是錯誤訊息貼上來,大家會比較容易找到問題點。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    • 已提議為解答 MIS2000 Lab. _ 2011年8月26日 上午 10:17
    • 已標示為解答 A.W. _ 2011年8月26日 上午 10:49
    2011年8月26日 上午 09:56
  • 跟只有一個ItemTEmplate沒關係

    當您點選分頁按鈕再postback時

    事件執行順序

    FormView1_ItemCreated→Page_Load→FormView1_ItemCreated

    所以才會出現兩次DataRow

    您可以自行下中斷點用偵錯模式(按F5)看看就知道了


    Shadowと愉快なコード達



    • 已標示為解答 A.W. _ 2011年8月26日 上午 10:49
    2011年8月26日 上午 09:42
  • 我沒能力回答您其他疑問,

     

    但是針對MSDN網站 FormView的 Row屬性

    這個範例我做過。

     

    MSDN的範例 --

    把事件改成 DataBound就沒有問題了。

     

    也不會出現您說的「點選其他頁,會出現 "兩次" DataRow」

     

    試試看。


    我的書 與 ASP.NET教學網站 http://www.dotblogs.com.tw/mis2000lab/
    • 已標示為解答 A.W. _ 2011年8月26日 上午 10:50
    2011年8月26日 上午 10:09

所有回覆

  • 依照 FormView的  Row屬性來說
    我只有一個 <ItemTemplate>


            Response.Write(FVrow.RowType.ToString() & "<br>")

    實在不能理解為何第一次執行,結果是 DataRow

    跳去其他頁,出現 "兩次" DataRow  ???  WHY ???

    2011年8月26日 上午 09:31
  • 那個是列舉,出現DataRow會很奇怪嗎?

    http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.formviewrow.rowtype.aspx

     

    跳去其它頁  <--  這個是什麼意思?

    2011年8月26日 上午 09:38
    版主
  • 跟只有一個ItemTEmplate沒關係

    當您點選分頁按鈕再postback時

    事件執行順序

    FormView1_ItemCreated→Page_Load→FormView1_ItemCreated

    所以才會出現兩次DataRow

    您可以自行下中斷點用偵錯模式(按F5)看看就知道了


    Shadowと愉快なコード達



    • 已標示為解答 A.W. _ 2011年8月26日 上午 10:49
    2011年8月26日 上午 09:42
  •  那個是列舉,出現DataRow會很奇怪嗎?

    http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.formviewrow.rowtype.aspx

     跳去其它頁  <--  這個是什麼意思?


    謝謝您的回答

    我的意思是:按下 FormView底下的頁數
    跳去其他頁
    MSDN這個範例就會報錯

    我不能理解:為何第一頁會出現一次 DataRow
    而跳去其他頁數,就會出現兩個  DataRow呢?

    畫面上只有一個 ItemTemplate樣板,理論上只會出現一次 DataRow

    2011年8月26日 上午 09:42
  • 跟只有一個ItemTEmplate沒關係

    當您點選分頁按鈕再postback時

    事件執行順序

    FormView1_ItemCreated→Page_Load→FormView1_ItemCreated

    所以才會出現兩次DataRow

    您可以自行下中斷點用偵錯模式(按F5)看看就知道了


    Shadowと愉快なコード達


    謝謝您的回答

    為什麼 PostBack時,ItemCreated事件會重複執行兩次呢?

    FormView1_ItemCreated→Page_Load→FormView1_ItemCreated

    我以為PostBack時
    應該是Page_Load→FormView1_ItemCreated而已

    Thanks.

    2011年8月26日 上午 09:53
  • 第一次進到網頁的事後因為你用的是SQLDataSource所以自動做了一次DataBind,因而觸發了FormView的 ItemCreated,所以印了一次"DataRow"。

    當你換頁的時候,因為POSTBACK,會自動觸發FormView的ItemCreated會先印出一次"DataRow"接著因為DataBind再多觸發一次ItemCreated,所以又印了一次"DataRow"。

    不過你說MSDN的範例會有錯誤訊息,可能就得麻煩你把錯在哪一行或是錯誤訊息貼上來,大家會比較容易找到問題點。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    • 已提議為解答 MIS2000 Lab. _ 2011年8月26日 上午 10:17
    • 已標示為解答 A.W. _ 2011年8月26日 上午 10:49
    2011年8月26日 上午 09:56
  • MSDN的範例 --
    第一次正常 
    分頁(跳去其他頁)就會錯
    錯誤訊息
       並未將物件參考設定為物件的執行個體

    錯誤發生在這裡

        ' Set the ToolTip property of the data row.
        row.ToolTip = rowView("FirstName").ToString() & " " &  rowView("LastName").ToString()

    Thanks.
    2011年8月26日 上午 10:00
  • 我沒能力回答您其他疑問,

     

    但是針對MSDN網站 FormView的 Row屬性

    這個範例我做過。

     

    MSDN的範例 --

    把事件改成 DataBound就沒有問題了。

     

    也不會出現您說的「點選其他頁,會出現 "兩次" DataRow」

     

    試試看。


    我的書 與 ASP.NET教學網站 http://www.dotblogs.com.tw/mis2000lab/
    • 已標示為解答 A.W. _ 2011年8月26日 上午 10:50
    2011年8月26日 上午 10:09
  • Thanks everyone!!  Very Useful
    2011年8月26日 上午 10:50