[ASP.NET]Gridview設定AutoGenerateColumns後如何隱藏特定欄位

[ASP.NET]Gridview設定AutoGenerateColumns後如何隱藏特定欄位

今天在論壇上看到有個人問了這個問題,一開始有人回他說,直接設定Gridview1.Columns[i].Visible = false;就好了,不過原提問人回覆說,這樣做不行,因為Gridview1.Columns[i]是null,且在AutoGenerateColumns = true;的狀態下,在任何地方抓Gridview1.Columns.Count都是0。

不得不承認,我本來心裡正想的是:怎麼可能?在DataBound後Columns如果沒有出現的話,最後資料要怎麼呈現出來呢?

但我還是強忍住先入為主的衝動,還是上MSDN去查了一下這個屬性:

GridView.AutoGenerateColumns 屬性

又在總是藏著秘技的備註區找到這一句:

image

所以提問者說的是沒有錯誤的,為了驗證這一點,我也試著去寫了一小段程式來測試,我在Page_Load指定了AutoGenerateColumns = true;,並做了DataBind(),然後在DataBound事件中嘗試去抓Gridview1.Columns.Count,結果發現它的值真的是0,看來這著注意事項真的沒有騙人:

image

不過如果無法取到Columns,那原發問者的問題該怎麼解決呢?在網路上找到別人的解決方案是在GridView的RowCreated事件中去將某個欄位做隱藏,下圖是我們本來顯示的所有欄位,我希望能將QuantityPerUnit這個欄位給隱藏掉:

image

我在我的網頁上加入GridView1_RowCreated事件,並在後端撰寫,試著將第五個欄位隱藏起來:

{
    e.Row.Cells[4].Visible = false;
}

測試的結果如下,QuantityPerUnit這個欄位確實消失了,打包收工。

image

 

參考資料:

Ways on how to Hide AutoGenerateColumns in GridView.

GridView.AutoGenerateColumns 屬性

GridView.RowCreated 事件

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。