none
並未將物件參考設定為物件的執行個體

    問題

  • 並未將物件參考設定為物件的執行個體

    描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

    例外詳細資訊: System.NullReferenceException: 並未將物件參考設定為物件的執行個體

    原始程式錯誤:

    行 36:        DropDownList DDL5 = GridView1.TemplateControl.FindControl("DropDownList5") as DropDownList;
    行 37:        TextBox TB2 = GridView1.TemplateControl.FindControl("TextBox2") as TextBox;
    行 38:        TB2.Text = DDL5.SelectedValue;
    行 39:     }
    行 40: }

    原始程式檔: d:\Archome Truck WebSite\C101_CarryingAdd.aspx.cs    行: 38

    我是在GridView1的edit樣板新增一個DropDownList去連結資料
    再把選擇的值填入textbox內

    我的語法有錯嗎@@?

    行 36:        DropDownList DDL5 = GridView1.TemplateControl.FindControl("DropDownList5") as DropDownList;
    行 37:        TextBox TB2 = GridView1.TemplateControl.FindControl("TextBox2") as TextBox;
    行 38:        TB2.Text = DDL5.SelectedValue;

    2009年8月20日 下午 02:28

解答

  • hi
    請先確認是否有處理資料繫結及正確事件的選擇

    GridView1進入編輯狀態  你得先處理資料繫結來確保內容正確性
    還有如top_cat大所說的  你不應該在DropDownList5_SelectedIndexChanged事件中處理你的需求
    因為當GridView在執行資料繫結時  cell的控制項就會引發DataBound事件  來統一處理儲存格中控制項的繫結動作


    http://www.dotblogs.com.tw/ricochen/Default.aspx
    • 已標示為解答 Open1008 2009年8月24日 上午 09:29
    2009年8月22日 上午 01:19

所有回覆

  • 你的DropDownList5 有事先Select 某一個Item嗎?

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年8月20日 下午 02:58
  • 你的DropDownList5 有事先Select 某一個Item嗎?

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重

    我是另外一個sqldatasource2去select dropdownlist5 的值

    sqldatasource1去update gridview1

    而顯示錯誤的地方是這造成無法進入畫面
      protected void DropDownList5_SelectedIndexChanged(object sender, EventArgs e)
        {
           DropDownList DDL5 = GridView1.TemplateControl.FindControl("DropDownList5") as DropDownList;
           TextBox TB2 = GridView1.TemplateControl.FindControl("TextBox2") as TextBox;
           TB2.Text = DDL5.SelectedValue;
        }

    我只要點選編輯girdview就會發生錯誤
    2009年8月20日 下午 03:04
  • 小喵猜測
    應該是您的兩個FindControl至少有一個沒有真正找到
    所以該變數還是Nothing

    建議您寫個判斷式,如果是null或Nothing的話...Response.Write一個訊息...
    用Try...Catch包起來

    ^_^
    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/
    2009年8月20日 下午 10:58
  • 小喵猜測
    應該是您的兩個FindControl至少有一個沒有真正找到
    所以該變數還是Nothing

    建議您寫個判斷式,如果是null或Nothing的話...Response.Write一個訊息...
    用Try...Catch包起來

    ^_^
    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/

    我附議小喵的說法,在程式中有用到FindControl時,建議先進行判斷是否有正確的Find到您想Find的Control,要再更嚴謹的話可以進一步判斷
    DDL5.SelectedValue是否有值,如此應該可以避免類似的錯誤訊息,以我個人的習慣是可以預期的情況我會盡量用判斷是進行預期的錯誤處理,
    沒辦法預期的錯誤再使用Try...Catch,供您參考。


    DropDownList DDL5 = GridView1.TemplateControl.FindControl("DropDownList5") as DropDownList;
    TextBox TB2 = GridView1.TemplateControl.FindControl("TextBox2") as TextBox;
    if (DDL5 != null && TB2 != null)
    {
     if (DDL5.SelectedValue != null) TB2.Text = DDL5.SelectedValue;
    }
    
    2009年8月21日 上午 12:45
  • 小喵猜測
    應該是您的兩個FindControl至少有一個沒有真正找到
    所以該變數還是Nothing

    建議您寫個判斷式,如果是null或Nothing的話...Response.Write一個訊息...
    用Try...Catch包起來

    ^_^
    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/

    我附議小喵的說法,在程式中有用到FindControl時,建議先進行判斷是否有正確的Find到您想Find的Control,要再更嚴謹的話可以進一步判斷
    DDL5.SelectedValue是否有值,如此應該可以避免類似的錯誤訊息,以我個人的習慣是可以預期的情況我會盡量用判斷是進行預期的錯誤處理,
    沒辦法預期的錯誤再使用Try...Catch,供您參考。


    DropDownList DDL5 = GridView1.TemplateControl.FindControl("DropDownList5") as DropDownList;
    
    TextBox TB2 = GridView1.TemplateControl.FindControl("TextBox2") as TextBox;
    
    if (DDL5 != null && TB2 != null)
    
    {
    
     if (DDL5.SelectedValue != null) TB2.Text = DDL5.SelectedValue;
    
    }
    除了findcontrol之外還有沒有方法去找我要的元件


    2009年8月21日 上午 01:09
  • 這仍然是一個網頁生命週期的問題... FindControl 如果找不到東西, 請不要問「為什麼找不到」而應該問「該什麼時候去找」。
    ASP.NET 2Share - http://phone.idv.tw/cs2/
    2009年8月21日 上午 01:54
  • 小喵猜測
    應該是您的兩個FindControl至少有一個沒有真正找到
    所以該變數還是Nothing

    建議您寫個判斷式,如果是null或Nothing的話...Response.Write一個訊息...
    用Try...Catch包起來

    ^_^
    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/

    我附議小喵的說法,在程式中有用到FindControl時,建議先進行判斷是否有正確的Find到您想Find的Control,要再更嚴謹的話可以進一步判斷
    DDL5.SelectedValue是否有值,如此應該可以避免類似的錯誤訊息,以我個人的習慣是可以預期的情況我會盡量用判斷是進行預期的錯誤處理,
    沒辦法預期的錯誤再使用Try...Catch,供您參考。


    DropDownList DDL5 = GridView1.TemplateControl.FindControl("DropDownList5") as DropDownList;
    
    
    
    TextBox TB2 = GridView1.TemplateControl.FindControl("TextBox2") as TextBox;
    
    
    
    if (DDL5 != null && TB2 != null)
    
    
    
    {
    
    
    
     if (DDL5.SelectedValue != null) TB2.Text = DDL5.SelectedValue;
    
    
    
    }
    
    除了findcontrol之外還有沒有方法去找我要的元件



    TextBox2是存在於GridView1控制項中的TemplateControl控制項集合,這個控制項類別提供FindControl的方法尋找控制項,至於說有沒有其他方式,
    可參考TemplateControl類別
    2009年8月21日 上午 02:21
  • 一些觀念溝通一下

    不知道您是在哪個事件中要做這樣的事情
    (*學習ASP.NET很重要的是要在對的事件中去執行事情!!)

    以您要把某個Templete中的DropDownList的SelectValue給另外一個Templete中的TextBox來說

    這樣的事件似乎在GridView的RowDataBound事件中比較恰當
    而在RowDataBound事件中您應該去理解這個事件是發生什麼情況
    在發生的當時,他的物件架構是如何

    以GridView的RowDataBound事件來說
    可以用e.Row取得事件運作中的GridViewRow
    而此時的物件架構已經沒有所謂的Templete
    而是GridViewRow的Cells中的某個Cell裡面的控制項
    (所以您所寫 GridView1.TemplateControl似乎不太恰當)

    假設一下,你的TextBox在Cells(1),而你的DropDownList在Cells(2)裡面的話
    那麼會是

    Dim ddl5 as DropDownList = e.Row.Cells(2).FindControl("DropDownList5")
    Dim txt2 as TextBox = e.Row.Cells(1).FindControl("TextBox2")
    
    If ddl5 isnot Nothing And txt2 isnot Nothing Then
        txt2.Text = ddl5.SelectedValue
    End If

    大概如以上這樣
    小喵C#不太熟,不過您可以在網路找到轉成C#的工具

    以上提供您參考看看

    ^_^


    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/
    2009年8月21日 上午 04:15
  • hi
    你描述  我只要點選編輯girdview就會發生錯誤


    不知道你的GridView1_RowEditing事件中
    有無先處理
    GridView1.DataSource=source.Tables[table].DefaultView;
    GridView1.DataBind();
    來確保GridView1的內容
    如果沒有的話這時postback應該就會錯 
    因為GridView1內容 is null

    2009年8月21日 上午 05:03
  • hi
    你描述  我只要點選編輯girdview就會發生錯誤


    不知道你的GridView1_RowEditing事件中
    有無先處理
    GridView1.DataSource=source.Tables[table].DefaultView;
    GridView1.DataBind();
    來確保GridView1的內容
    如果沒有的話這時postback應該就會錯 
    因為GridView1內容 is null


    對耶 但是我把我有轉換成template,我也是在edititemtemplate中多加入一個DropDownList
    可以選擇另外一個資料表的東西填入textbox中
    2009年8月21日 上午 05:06
  • hi
    請先確認是否有處理資料繫結及正確事件的選擇

    GridView1進入編輯狀態  你得先處理資料繫結來確保內容正確性
    還有如top_cat大所說的  你不應該在DropDownList5_SelectedIndexChanged事件中處理你的需求
    因為當GridView在執行資料繫結時  cell的控制項就會引發DataBound事件  來統一處理儲存格中控制項的繫結動作


    http://www.dotblogs.com.tw/ricochen/Default.aspx
    • 已標示為解答 Open1008 2009年8月24日 上午 09:29
    2009年8月22日 上午 01:19