none
關於DataGridView 以程式碼新增資料列。 RRS feed

  • 一般討論

  • 花了很多時間,也上google 查資料,但是仍研究不出來,只好請大大們指點一下。

    DataGridView 在允許新增的模式中,最後一列的資料列會多出一行有 * 號的空的資料列。

    此時,當在 新增的這個資料列欄位上用鍵盤輸入字元,此時,目前的資料列會被承認,然後底下再多出一行有*號新的空白列。

    但是,如果我不想用鍵盤輸入,而希望由程式指定資料的值,但是能夠達到與用鍵盤輸入相同的效果

    我解說一下運作,

    假設DataGridView 有兩個欄位 項次  , 名稱

    目前有三筆資料, 項次 1,2,3

    此時, DagaGridView 上有 4列, 項次1,2,3 跟 有* 號的一列

    如果我用鍵盤 再最後一列輸入資料,是ok的

    但是 我將 項次欄位設為預設值,只要點選,他會自動填入 該數值

    名稱欄位 我另外 用 一個 combobox 提供給使用者選擇,選擇後 直接填 入 目前新增中該列的名稱欄位。

    我希望的效果是, 當在 combobox 選擇 項目時, 程式 把該項目 填入 目前 新增中的 名稱欄位內

    此時 DataGridView 承認 該資料列,並再 下方增加一個新的資料列,相當於 我們用鍵盤再欄位內輸入一樣。

    我嘗試要擷取 該資料列目前的狀態,或去 取得 DataTable 該列的狀態,但仍無法實現

    我也嘗試 從dataTable  去新增一個row , 但是 這樣做似乎會插入在我目前編輯中的該列上方,並且把目前新增中的 列 擠到下一列

    變成一次多出兩列出來

    那麼,有無方法 可以模擬鍵盤輸入 把 值送到 DataGridView 的欄位內, 而不是 指定值或變數給欄位。

    不知道我描述的是否會太亂

     

     

    2011年8月4日 下午 03:00

所有回覆

  • 我用 IsNewRow 來偵測 目前的列是否 在新增中。

     

    If Me.DGDetails.Rows(Me.DGDetails.CurrentRow.Index).IsNewRow Then

    這裏能否加什麼命令,來讓 目前DataGridView 承認新增中的這個列
    例如 endedit 什麼的
     End If
    2011年8月4日 下午 03:39
  • Hi 樓主:

    我的DataGridView是在資料繫結後用按Button Click新增資料的

    請參考是不是您要的?

     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    
       '對資料表新增資料(DB)
      Me.YourTableAdapter.Insert("a", "b") '寫死的,請再自行給值
    
    
    
      'dataGridView1重新撈資料表的資料,目的要在DataGridView下方增加一個新的資料列
      Me.YourTableAdapter.Fill(Me.YourDataSet.Your)
    
     End Sub
    

     


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年8月4日 下午 04:25
  • 謝謝您

    我比較希望耕直覺一點,如果萬不得已,不能解決,也只好用您的方法。

     

    當使用者點選新增的那行資料列時,系統給項目欄位 項目的值,如果此時,滑鼠離開該資料列,此時,該資料列尚未被承認,又回復到預備新增的狀況,

    項目欄位的值 清除,

    可是 當使用者 點選 名稱欄位時,會顯示 名稱的下拉式清單, 我另外 用一個 COMBOBOX 來處裡,當使用者點選後,系統會把 COMBOBOX 選取得值

    指定給 名稱欄位,此時系統認可這列資料

    重點在這裡,因為是用程式 指定给 欄位,所以 他不會認可該欄位,並再下面自動新增一個欄位,但是 如果 這個名稱欄位的值,是用鍵盤打字的,那麼 就會再下方多一個新增的列

    我是希望當用程式 指定值給名稱欄位時,相當於我們在名稱欄位 用鍵盤打字那樣的效果

    我的DataGridview 的資料來源是 datatable 

    我有試過 直接在 dataTable 上增加資料,但是這樣做,這樣會插入在 目前正在編輯的列前面,造成 多兩列出來。

     

     

     

    2011年8月4日 下午 05:46
  • 目前暫時的處理方式是,項次欄位原本是是自動給值的,站時,只能要求使用者 先手動輸入 項次欄位的值。

    只是太不人性化了

     

    2011年8月4日 下午 05:48
  • 最近有個需求很類似,提供您參考

    我的專案資料來源是是DataSet,用DataGridView配合BindingSource進行資料繫結

    需求是要在datagridview的儲存格上double click,帶出查詢視窗,查出代碼之後填入儲存格

    遇到的問題一樣是事件內帶進去的值,無法像手key的一樣讓DataGridView認可之後產生新資料列

    最後的解決方案是

    我在CellMouseDoubleClick事件中呼叫查詢視窗、取得代碼、填值

    在事件的最後呼叫BindingSource的EndEdit,如此可以讓我把目前新增的資料列寫回DataTable

    而DataGridView也會隨之產生一個新資料列

     

    提供參考

    2012年1月21日 上午 11:26