none
DataGridView 一個效果的製作 RRS feed

  • 問題

  • Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    Me.DataGridView1.CurrentCell.ReadOnly = True
    If Me.DataGridView1.CurrentCell.Style.BackColor.ToArgb = Color.FromArgb(224, 224, 224).ToArgb Then Exit Sub
    Me.DataGridView1.CurrentCell.ReadOnly = False
    End Sub
    
    我有一個DataGridView有些儲存格會視情況變成灰色(224,224,224),變灰色時要不給使用者編輯。目前我測試的時候,採用智慧標籤將某個欄位的DefaultCellBackColor改成灰色(224,224,244),顯示時也的確是灰色,不過使用上面的程式碼,就無法順利阻擋,使用者還是可以編輯,想請問是那麼錯誤了?
    2011年9月28日 上午 11:57

解答

  • 你這樣應該是設定某個Column的DefaultCellStyle

    而且是在Design time就給定了 不算"視情況"吧

    DataGridView1.Columns("A").DefaultCellStyle.BackColor.ToArgb() = Color.FromArgb(224,224,224).ToArgb() 才會成立


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 小見光二 2011年9月29日 上午 01:06
    2011年9月28日 下午 08:18
  • 選擇某個欄,例如A,到[外觀]在點選[DefaultCellStyle]進去設定的。

    我教你一個更簡單的方法,根本不需要檢測某個 column 的底色。

    在「編輯資料行」的視窗中, 在右邊「繫結的資料行屬性」視窗捲到最下方,找到「設計」區域裡的 "(Name)" 屬性,給它一個值,例如 "colFirstName",如下圖:

    接著,把你原來的程式改成這樣:

    
    Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            Dim cell As DataGridViewCell = DataGridView1.CurrentCell
            Dim i As Integer = cell.ColumnIndex
            If DataGridView1.Columns(i).Name = "colFirstName" Then
    cell.ReadOnly = True End If End Sub

    如果你堅持一定要檢測底色的話,那麼你恐怕必須寫程式去指定 Style.BackColor 的值。

     


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny
    • 已標示為解答 小見光二 2011年9月29日 上午 01:06
    2011年9月29日 上午 12:28

所有回覆

  • 你在這個 Sub 裡面設中斷點,看看程式有沒有跑到這裡?

     


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny
    2011年9月28日 下午 12:51
  • 有跑到這,也試著印出 Me.DataGridView1.CurrentCell.Style.BackColor.ToArgb

     

    結果等於0 , 所以不相等跳到 ReadOnly=False
    2011年9月28日 下午 01:00
  • 檢查 Me.DataGridView1.CurrentCell.Style.BackColor.ToArgb 值是多少, 再檢查 Color.FromArgb(224, 224, 224).ToArgb 值是多少

    你應該知道怎麼設定快速監看式吧?


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny 
    • 已編輯 Johnny.Net 2011年9月28日 下午 02:26
    2011年9月28日 下午 02:24
  • Me.DataGridView1.CurrentCell.Style.BackColor.ToArgb 無論我點有設定灰色或沒有設定的欄位,都顯示是0,

    就是這裡讓我覺得很納悶

    Me.DataGridView1.CurrentCell.Style.BackColor.ToString 卻顯示Color[empty]


    2011年9月28日 下午 02:55
  • 你在什麼地方、什麼時候設定 BackColor 為灰色的?把程式碼列出來看看(要包括你是在哪個事件處理函式中下指令的)。

    如果你不方便貼上來的話,那麼你可以自已在那段程式碼也設一個中斷點,然後和原來的中斷點比較看看發生的先後順序。



    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny
    • 已編輯 Johnny.Net 2011年9月28日 下午 03:12
    2011年9月28日 下午 03:08
  • 選擇某個欄,例如A,到[外觀]在點選[DefaultCellStyle]進去設定的。

    至於讀取值是在CellClick事件內。

    2011年9月28日 下午 03:13
  • 你這樣應該是設定某個Column的DefaultCellStyle

    而且是在Design time就給定了 不算"視情況"吧

    DataGridView1.Columns("A").DefaultCellStyle.BackColor.ToArgb() = Color.FromArgb(224,224,224).ToArgb() 才會成立


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 小見光二 2011年9月29日 上午 01:06
    2011年9月28日 下午 08:18
  • 選擇某個欄,例如A,到[外觀]在點選[DefaultCellStyle]進去設定的。

    我教你一個更簡單的方法,根本不需要檢測某個 column 的底色。

    在「編輯資料行」的視窗中, 在右邊「繫結的資料行屬性」視窗捲到最下方,找到「設計」區域裡的 "(Name)" 屬性,給它一個值,例如 "colFirstName",如下圖:

    接著,把你原來的程式改成這樣:

    
    Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            Dim cell As DataGridViewCell = DataGridView1.CurrentCell
            Dim i As Integer = cell.ColumnIndex
            If DataGridView1.Columns(i).Name = "colFirstName" Then
    cell.ReadOnly = True End If End Sub

    如果你堅持一定要檢測底色的話,那麼你恐怕必須寫程式去指定 Style.BackColor 的值。

     


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny
    • 已標示為解答 小見光二 2011年9月29日 上午 01:06
    2011年9月29日 上午 12:28