這幾天魚魚被一個問題搞得焦頭爛額,就是我想要將gridview每列某欄撈出來作其他應用,但是遭遇了"索引超出範圍"的問題,就這樣為了這個想破頭都不明所以。
一開始是想用這種方式逐列把各欄的資料取出....
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As _
System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
Response.Write(GridView1.Rows(e.row.rowindex).Cells(0).Text & "<BR>") '方法1
Response.Write(GridView1.Rows(GridView1.Rows.Count - 1).Cells(0).Text & "<BR>") '方法2
End Sub
但是都會出現超出索引的錯誤,後來我觀察了一下rowindex的值,發現跳了13列,有三列的值是-1
Response.Write(e.Row.RowIndex & " ")
輸出 -1 0 1 2 3 4 5 6 7 8 9 -1 -1
想了一下,就算包含標題和分頁的兩列,也不可能有三個-1,所以這問題想了一下覺得無解就打算用判斷式e.row.rowindex <> -1跳過。之後加上判斷改寫如下:
If e.Row.RowIndex <> -1 Then
Response.Write(e.Row.RowIndex & " ")
End If
輸 出 0 1 2 3 4 5 6 7 8 9
到了這邊打算再加入GridView1.Rows(e.Row.RowIndex).Cells(0).Text這行,來撈出第一欄的資料,但是依舊出現索引錯誤。
後來嘗試了很多類似的寫法,都沒辦法撈出資料。
就這樣奮鬥幾天以後,想說用e.row.findcontrol看看:首先建立樣版,把預設的label1給改成lb_tag以免取到其他樣版上相同名稱的標籤,然後用try寫了一段code如下:
Dim x As New Label
x = e.Row.FindControl("lb_tag")
Try
Response.Write(x.Text & "<BR>")
Catch ex As Exception
Response.Write("null<BR>")
End Try
才取到我要的資料,就這樣......我想我的問題在於一直撈到"看似"不存在的那一列,所以一直出現索引錯誤的問題。使用Findcontrol來避免取到空氣才解決我的困擾。
今天用了一個新解法
string ToolTipString = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "欄位名稱"));
//重點在上面 給有需要的人參考XD
if (ToolTipString == "7")
e.Row.BackColor = System.Drawing.Color.FromArgb(239, 255, 44);
else if (ToolTipString == "30")
e.Row.BackColor = System.Drawing.Color.FromArgb(9, 197, 249);