這幾天魚魚被一個問題搞得焦頭爛額,就是我想要將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);

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 魚魚 的頭像
    魚魚

    夏‧獵

    魚魚 發表在 痞客邦 留言(3) 人氣()