看板 Web_Design 關於我們 聯絡資訊
大大的程式碼小弟認為重點差不多有以下兩點: 1.SELECT出的欄位 2.GridView各個Field的順序安排 從程式碼中可看出,大大的GridView有三個欄位, 從左至右分別是CommandField,BoundField和HyperLinkField。 雖然所用資料庫不同,但小弟至少前三欄會盡量按照此安排去做。 原則上正如前面幾位大大所述, 要做到這點的重點在於GridView的RowDataBound事件。 從字面的意思可約略看出這個事件是在GridView每一列資料進行資料繫結時所觸發, 參數有object sender和GridViewRowEventArgs e兩個, 而這段程式重點在於e的運用。 (新增事件小弟就不贅述了,在屬性視窗切換到事件頁次,雙擊RowDataBound兩下) 雖然原理相同,但小弟想得到的兩種方法分別為: I.在RowDataBound時判斷每筆資料的檔案下載是否有檔案 II.在資料庫多新增一個欄位專責紀錄是否有檔案 底下為第一種的寫法, C#程式碼如下(命名空間煩請自行using): //Protected Sub GridView1_RowDataBound(ByVal sender As Object, _ // ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _ // Handles GridView1.RowDataBound protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //e.Row.DataItem可取得當前進行資料繫結的紀錄(列) //但要注意的是e.Row是指GridViewRow     //e.Row.DataItem才是繫結的資料列本身 //VB.NET:Dim drv As DataRowView = CType(e.Row.DataItem, DataRowView) DataRowView drv = (DataRowView)e.Row.DataItem; //GridView頁首顯示欄位名稱的部分也算是Rows的其中之一 //但實際上e.Row.DataItem在這列會傳回null(Nothing) //所以利用if來避免程式擲回NullReferenceException //VB.NET:If Not (drv Is Nothing) Then if (drv != null) { //這邊也可使用IsDBNull()來判定 //判定該筆資料的該欄位是否為null值或空白 //VB.NET:If String.IsNullOrEmpty(drv("檔案下載").ToString()) Then if (string.IsNullOrEmpty(drv["檔案下載"].ToString())) { //取得GridView中該筆資料的第三欄(0, 1, 2) //這邊用GetType可以知道是HyperLink而不是HtmlAnchor //Row是指在GridView中的這一列(這筆資料) //Cells[2]是取得該列的第三欄 //Controls[0]是取得該欄位中第一個控制項 //VB.NET:Dim hl As HyperLink = _ //CType(e.Row.Cells(5).Controls(0), HyperLink) HyperLink hl = (HyperLink)e.Row.Cells[2].Controls[0]; //設定連結為null值,即沒有連結位址 //VB.NET:hl.NavigateUrl = Nothing hl.NavigateUrl = null; } //End If /* 到這邊原則上GridView就會呈現出大大想要的樣子了, 但由於為了說明底下的第二種方法, 所以先不把if結尾(因為第二種方法也需要避免NullReferenceException)。 在這裡假設SqlDataSource SELECT出的專門記錄有無檔案的欄位叫fileExists, 其值為bool(Boolean)。 */ //VB.NET:If CBool(drv("fileExists")) = False Then if (((bool)drv["fileExists"]) == false) { //在這邊進行與上面相同的動作 } } } 以上兩種方法大致上就是小弟想得到的解決方法了, 另外GridViewRowEventArgs e, 除了上述的e.Row.DataItem可取得當前進行資料繫結的列外, 在轉成DataRowView後還可以透過drv.DataView取得其所屬的DataView, drv.DataView.Table取得整個SELECT出的DataTable, drv.DataView.Table.DataSet取得DataTable所屬的DataSet。 若有錯煩請不吝指教:)。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.231.208 ※ 編輯: Deadshot465 來自: 219.70.231.208 (10/25 06:16) ※ 編輯: Deadshot465 來自: 219.70.231.208 (10/25 06:17) ※ 編輯: Deadshot465 來自: 219.70.231.208 (10/25 06:21)
KenZ:專業 10/25 09:54
nbhd0815:已經試成功了感謝大大 10/28 01:13