none
vb2008 Datagridview 儲存格變動問題 RRS feed

  • 問題

  • 親愛的各位大大:

            有關儲存格動態變動問題不知該怎麼做才能像Excel一樣?程式碼及問題如下

    問題一: 我從Datagridview1將資料拷貝到Datagridview2中,但Datagridview1中並沒有數量這個欄位,我用新增的方式加
               了一個"數量"欄位在datagridview2中,我想在數量這個儲存格中填入數字後立即觸發得到數量乘上售價放置在
               單一合計上
    ,如果要達成這種功能該如何做?請各位大大指教。

            RowCopy(DataGridView1, DataGridView2)
            For Each DVGRow As DataGridViewRow In DataGridView2.Rows
                DVGRow.Cells(0).Value = TxtSerinal.Text
                DVGRow.Cells(1).Value = TextBox2.Text
                DVGRow.Cells(2).Value = ""
                DVGRow.Cells(3).Value = TextBox3.Text
                DVGRow.Cells(4).Value = TextBox5.Text
                DVGRow.Cells(5).Value = TextBox6.Text
                DVGRow.Cells(6).Value = TextBox4.Text
                DVGRow.Cells(7).Value = TextBox7.Text
                DVGRow.Cells(8).Value = TextBox8.Text
                DVGRow.Cells(9).Value = TextBox9.Text
                DVGRow.Cells(10).Value = ""
                DVGRow.Cells(11).Value = ""
                DVGRow.Cells(12).Value = ""
                DVGRow.Cells(13).Value = ComboBox2.Text
                DVGRow.Cells(14).Value = DataGridView1.Rows(0).Cells(0).Value.ToString
                DVGRow.Cells(15).Value = DataGridView1.Rows(0).Cells(1).Value.ToString
                DVGRow.Cells(16).Value = "" '數量
                DVGRow.Cells(17).Value = DataGridView1.Rows(0).Cells(27).Value.ToString '售價
                DVGRow.Cells(18).Value = DataGridView1.Rows(0).Cells(28).Value.ToString '特惠價
                DVGRow.Cells(19).Value = ""  '單一合計
                DVGRow.Cells(20).Value = TextBox1.Text
                DVGRow.Cells(21).Value = DataGridView1.Rows(0).Cells(3).Value.ToString
                DVGRow.Cells(22).Value = DataGridView1.Rows(0).Cells(4).Value.ToString
                DVGRow.Cells(23).Value = DataGridView1.Rows(0).Cells(5).Value.ToString
                DVGRow.Cells(24).Value = DataGridView1.Rows(0).Cells(6).Value.ToString
                DVGRow.Cells(25).Value = DataGridView1.Rows(0).Cells(7).Value.ToString
                DVGRow.Cells(26).Value = DataGridView1.Rows(0).Cells(8).Value.ToString
                DVGRow.Cells(27).Value = DataGridView1.Rows(0).Cells(9).Value.ToString '主圖
                DVGRow.Cells(28).Value = DataGridView1.Rows(0).Cells(10).Value.ToString
                DVGRow.Cells(29).Value = DataGridView1.Rows(0).Cells(11).Value.ToString
                DVGRow.Cells(30).Value = DataGridView1.Rows(0).Cells(12).Value.ToString
                DVGRow.Cells(31).Value = DataGridView1.Rows(0).Cells(13).Value.ToString
                DVGRow.Cells(32).Value = DataGridView1.Rows(0).Cells(14).Value.ToString
                DVGRow.Cells(33).Value = DataGridView1.Rows(0).Cells(15).Value.ToString
                DVGRow.Cells(34).Value = DataGridView1.Rows(0).Cells(16).Value.ToString
                DVGRow.Cells(35).Value = DataGridView1.Rows(0).Cells(17).Value.ToString
                DVGRow.Cells(36).Value = DataGridView1.Rows(0).Cells(18).Value.ToString
                DVGRow.Cells(37).Value = DataGridView1.Rows(0).Cells(19).Value.ToString
                DVGRow.Cells(38).Value = DataGridView1.Rows(0).Cells(20).Value.ToString
                DVGRow.Cells(39).Value = DataGridView1.Rows(0).Cells(21).Value.ToString
                DVGRow.Cells(40).Value = DataGridView1.Rows(0).Cells(22).Value.ToString
                DVGRow.Cells(41).Value = DataGridView1.Rows(0).Cells(23).Value.ToString
                DVGRow.Cells(42).Value = DataGridView1.Rows(0).Cells(24).Value.ToString
                DVGRow.Cells(43).Value = DataGridView1.Rows(0).Cells(25).Value.ToString
                DVGRow.Cells(44).Value = DataGridView1.Rows(0).Cells(26).Value.ToString
            Next
    2010年2月2日 上午 09:49

解答

  • 1. DataGridView的Copy 可以有更快的方法 , 用DataTable.Copy就好了, 我個人是不習慣直接操作DataGridView, 而是操作資料來源
        請參閱
       http://www.dotblogs.com.tw/billchung/archive/2009/04/12/7990.aspx

    2. 如果你採用上述以DataTable為對象的處理方法, 對新的DataTable再增加一個具有Expression的DataColumn應該就行了
       這部份請參閱
       [DataColumn. Expression 屬性 ]
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    • 已標示為解答 Lolota Lee 2010年2月9日 上午 06:11
    2010年2月2日 下午 01:40
    版主

所有回覆

  • Hi!

    參考看看 章立民老師的文章 如何於 DataGridView 中使用計算欄位
    我的Blog .NET菜鳥自救會
    2010年2月2日 上午 11:42
    版主
  • 1. DataGridView的Copy 可以有更快的方法 , 用DataTable.Copy就好了, 我個人是不習慣直接操作DataGridView, 而是操作資料來源
        請參閱
       http://www.dotblogs.com.tw/billchung/archive/2009/04/12/7990.aspx

    2. 如果你採用上述以DataTable為對象的處理方法, 對新的DataTable再增加一個具有Expression的DataColumn應該就行了
       這部份請參閱
       [DataColumn. Expression 屬性 ]
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    • 已標示為解答 Lolota Lee 2010年2月9日 上午 06:11
    2010年2月2日 下午 01:40
    版主
  • 1. DataGridView的Copy 可以有更快的方法 , 用DataTable.Copy就好了, 我個人是不習慣直接操作DataGridView, 而是操作資料來源
        請參閱
       http://www.dotblogs.com.tw/billchung/archive/2009/04/12/7990.aspx

    2. 如果你採用上述以DataTable為對象的處理方法, 對新的DataTable再增加一個具有Expression的DataColumn應該就行了
       這部份請參閱
       [DataColumn. Expression 屬性 ]
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情

    親愛的大大:

          關於你所提到的 "對新的DataTable再增加一個具有Expression的DataColumn應該就行了" 這一部份我不是很瞭解可否請你舉例具體說明一下。謝謝。


    2010年2月3日 上午 08:52
  • 像  Bill 大大說的  直接引用 資料來源比較簡單一點
    我之前做的  是用  table join 的方法來做


    如 select table1.欄位1, table1.欄位2, table2.欄位1 from table1 left join table2 on table1.欄位1 = table2.欄位1


    看需求 有不同的 join 方式  有興趣的話可以查一下 sql join 語法
    2010年2月3日 下午 02:31

  •       關於你所提到的 "對新的DataTable再增加一個具有Expression的DataColumn應該就行了" 這一部份我不是很瞭解可否請你舉例具體說明一下。謝謝。


     假設, 你已經建立了一個 DataTable執行個體叫  DT2
     1.  使用  DataColumn 建構函式 (String, Type, String) 建立一個新的DataColumn
      ex:
        Dim column As DataColumn  <--宣告一個名為column的 DataColumn的物件
        Dim decimalType As System.Type <--宣告一個System.Type物件

        decimalType = System.Type.GetType("System.Decimal") <--指派它的值為 System.Type.GetType("System.Decimal") , 下一行要給建構函式用的
        column = New DataColumn("Tax", decimalType, "UnitPrice * .0862") <--產生執行個體, 參數1:欄位名稱 Tax, 參數二: 資料型別 System.Decimal, 參數三就是Expression , 此例為將 Tax欄位的值設定為UnitPrice這個欄位的值*0.862

      
    2. 把這個column物件加入到DT2中

       DT2.Columns.Add(column)

    這個是我從MSDN文件直接Copy過來的範例, 所以給你的link要仔細看, 花點心思研究, 事實上我認為那個link的說明很具體而且還有範例程式

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月3日 下午 03:07
    版主