none
請問vb.net 2005中DataGridView控制項的問題 RRS feed

  • 問題

  • 請問各位前輩

    我在程式中放一個DataGridView

    於程式中才指定其DataSource

    DataSource是datatable由db中取回的資料

    我想請問的是

    這些資料中的一個Columns裡的值必需要再經過程程式的運算

    例如 Columns "資料類別"由資料庫取出時是數字1、2......等

    我想讓這個Columns裡的值先經過一些運算後再顯示出來

    請問要如何做??

    另外再請問要如何更改DataGridView中標題列的樣式

    我修改ColumnHeadersDefaultCellStyle這個屬性

    可是沒啥用耶

    還是還要再做啥??

    謝謝大家幫忙

     

    2006年10月14日 上午 03:42

解答

  • :::試試看

            Dim h As New DataGridViewCellStyle
            h.ForeColor = Color.Red
            h.BackColor = Color.Green
            DataGridView1.ColumnHeadersDefaultCellStyle = h

    2006年10月14日 上午 06:32

所有回覆

  • :::試試看

            Dim h As New DataGridViewCellStyle
            h.ForeColor = Color.Red
            h.BackColor = Color.Green
            DataGridView1.ColumnHeadersDefaultCellStyle = h

    2006年10月14日 上午 06:32
  • 你想讓Columns裡的值先根據程式的運算後在顯示的話

    應該是對於你資料來源的DataTable著手

    也就是說 你再將DataTable指定給你的DataGridView之前 先進行運算

    得到新的DataTable後  在指定給 DataGridView

    這樣應該就可以了

    2006年10月14日 上午 08:02
  • 謝謝您的回答

    但是我試過了

    設定後我的DataGridView的標題還是一樣沒有變化

    不知是不是哪個不能變的屬性值被我改了.....>///<

    2006年10月14日 上午 10:53
  • 綜和上面兩位的說法,但是這裡有一點要注意到,當去改變資料的值時,由於跟原來一開始從資料庫抓回來的值不一樣,所以萬一被觸發Celledit事件時可能會有問題產生,所以我設定不能作編輯的動作。

    Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.EmployeesTableAdapter.Fill(Me.DataSet1.Employees)
        End Sub

        Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
            e.Cancel = True
        End Sub

        Private Sub DataGridView1_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DataGridView1.DataBindingComplete
            For index As Integer = 0 To DataGridView1.Rows.Count - 2
                Me.DataSet1.Employees.Rows(index).Item(1) = "這是:" & Me.DataSet1.Employees.Rows(index).Item(1).ToString 
            Next
            DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Blue
            DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Yellow
        End Sub

    2006年10月14日 上午 11:34
    版主
  •  庫洛洛 寫信:

    你想讓Columns裡的值先根據程式的運算後在顯示的話

    應該是對於你資料來源的DataTable著手

    也就是說 你再將DataTable指定給你的DataGridView之前 先進行運算

    得到新的DataTable後  在指定給 DataGridView

    這樣應該就可以了

    謝謝您的回答

    因為以我的程式的架構而言

    透過更動DataGridView來變動會比變動DataTable來得方便簡單多(>///<...本人比較懶)

    所以才想說有沒有辦法直接在DataGridView中動手腳

    (因為我的DataGridView是純粹用來show資料的)

    不過還是謝謝您的回答

     

    2006年10月14日 下午 12:09
  • :::重新拖一個DataGridView試試看!!!
    2006年10月14日 下午 01:34
  •  LOLOTA 寫信:

    綜和上面兩位的說法,但是這裡有一點要注意到,當去改變資料的值時,由於跟原來一開始從資料庫抓回來的值不一樣,所以萬一被觸發Celledit事件時可能會有問題產生,所以我設定不能作編輯的動作。

    Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.EmployeesTableAdapter.Fill(Me.DataSet1.Employees)
        End Sub

        Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
            e.Cancel = True
        End Sub

        Private Sub DataGridView1_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DataGridView1.DataBindingComplete
            For index As Integer = 0 To DataGridView1.Rows.Count - 2
                Me.DataSet1.Employees.Rows(index).Item(1) = "這是:" & Me.DataSet1.Employees.Rows(index).Item(1).ToString 
            Next
            DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Blue
            DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Yellow
        End Sub

     

    對於上述不甚了解,想請教一下。

    是否代表若想直接修改DataTable\DataSet的資料後才DataBinding進DataGridVeiw時,
    可能會因此造成觸發Celledit事件而被恢復為原來從資料庫抓取出來時的資料?
    所以才必須將CellBeginEdit事件設定為Cancel嗎?

     

    2007年11月21日 下午 04:01