針對初學者,談談關於GridView中的FindControl問題

    最近在用GridView的時候用到FindControl()在TemplateField中發現總是Find不到,在網上搜索了一下,發現很多朋友跟我遇到的問題一樣,而且網上很多人的解決方法不是很好,我自己總結了一下:
    對於在RowDataBound中Find,可以用if (e.Row.RowType == DataControlRowType.DataRow)來限制Find的範圍,因爲Find默認是在HeaderTemplate中找,如果不限定範圍,在HeaderTemplate中找不到,自然就返回null,然後就出錯了,DataControlRowType枚舉中的DataRow確定是數據行.
    另一個是在RowCommand中,我發現遇到這個問題的朋友貌似比上一個要多,在RowCommand中,如果使用GridView默認的模式,e.CommandArgument自動棒定爲該行的Index,這時候只要指定gridview1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("xxx")就可以了,但是如果轉化爲Template,e.CommandArgument並不會自動綁定任何值,需要手動綁定,可以在<ItemTemplate></ItemTemplate>手動寫CommandArgument="<%# ((GridViewRow) Container).RowIndex %>",把這個行的 Index綁定綁定到該e.CommandArgument就可以了.很多初學者在這裏不明白爲什麼要這麼做,其實我也是初學者,簡單的說一下,就是行是根據數據循環的,每一行都有同樣的控件,如果不指定行的Index,簡單的寫gridview1.findcontrol("xxx"),IDE並不知道要找哪個控件所以要指定行號.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章