none
怎樣讓DateGirdView裡不同列的Combobox有不同的Rows?(VB.NET) RRS feed

  • 一般討論

  • 假設我有一個DGV,DGV裡有2個combobox(Combobox1跟Combobox2),分別繫結到2個DataTable

    但Combobox2要根據Combobox1改變它的清單內容,且改變後原先已輸入的值不能清空

    也就是假設有2列,第1列的Combobox1選了台北市,Combobox2的清單就是松山區中山區等,

    第2列的Combobox1選了新北市,Combobox2的清單就是板橋區三重區等

    可是當我改了第2列的Combobox2的清單後,第1列的Combobox2 的值還會保留

     

    我現在已經知道怎麼改變清單內容,但我沒辦法保留combobox2的值,一定會全部被清單

    請問該怎麼辦?

    2011年5月31日 上午 07:06

所有回覆

  • 請問你是在哪個事件中進行combobox的databind?
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年5月31日 上午 08:53
  • 我是在Load事件中進行Binding

    然後在CellEnter事件中改變清單內容的

    以下是我的程式碼:

    Public Class FCataParts
        Public SAdap As Odbc.OdbcDataAdapter
        Public SDataSet As DataSet = New DataSet
       
        Private Sub FCataParts_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Parts分類TableAdapter.Fill(Me.MISDataSet.Parts分類)
            UpdateDataBindings()

        End Sub
      
        Private Sub UpdateDataBindings()
           
            SAdap = New Odbc.OdbcDataAdapter("Select distinct 小分類 from Parts分類 order by 小分類", Cnn)
            SAdap.Fill(SDataSet, "Parts分類")
            SBS.DataMember = "Parts分類"
            SBS.DataSource = QSDataSet
            Me.SType.DataSource = SBS
            Me.SType.DisplayMember = "小分類"
       
        Private Sub List_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles List.DataError

        End Sub
        Private Sub List_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles List.CellEnter
            If Me.List.CurrentCell.ColumnIndex = 3 Then
                SBS.Filter = " 小分類 = '" & Me.List.CurrentRow.Cells(2).Value & "'"
                Me.SType.DataSource = SBS
            End If

        End Sub

    End Class

    2011年6月1日 上午 02:00
  • 請問你貼上來的程式碼是全部了嗎?是否有其他地方呼叫UpdateDataBindings。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年6月1日 上午 03:26
  • 只有在list_cellparsing中還有呼叫而已
    2011年6月1日 上午 03:31
  • 只有在list_cellparsing中還有呼叫而已
    我在你貼上來的程式碼裡面沒看到list_cellparsing,如果程式碼不會太長是不是可以把全部都貼上來,這樣好讓大家幫你找出問題可能的原因。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年6月1日 上午 03:48
  • Public Class FCataParts
        Public SAdap As Odbc.OdbcDataAdapter
        Public SDataSet As DataSet = New DataSet
       
        Private Sub FCataParts_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Parts分類TableAdapter.Fill(Me.MISDataSet.Parts分類)
            UpdateDataBindings()

        End Sub
       
        Private Sub UpdateDataBindings()
            SAdap = New Odbc.OdbcDataAdapter("Select distinct 小分類 from Parts分類 order by 小分類", Cnn)
            SAdap.Fill(SDataSet, "Parts分類")
            SBS.DataMember = "Parts分類"
            SBS.DataSource = QSDataSet
            Me.SType.DataSource = SBS
            Me.SType.DisplayMember = "小分類"
        End Sub
        Private Sub List_CellParsing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellParsingEventArgs) Handles List.CellParsing
            Dim ID As Integer = Me.List.CurrentRow.Cells(0).Value
          
            Select Case Me.List.CurrentCell.ColumnIndex
                Case 3
                 Dim Cmd as odbc.odbccommand("Update Parts分類 set 小分類 = '" & e.Value & "' where ID = " & ID, "Cnn")
                   Cmd.execute
                   SBS.DataSource.Clear()
            End Select

            UpdateDataBindings()
        End Sub
       
        Private Sub List_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles List.CellEnter
            If Me.List.CurrentCell.ColumnIndex = 3 Then
                SBS.Filter = " 小分類 = '" & Me.List.CurrentRow.Cells(2).Value & "'"
                Me.SType.DataSource = SBS
            End If
        End Sub

    End Class

    2011年6月1日 上午 05:42
  • 假設我有一個DGV,DGV裡有2個combobox(Combobox1跟Combobox2),分別繫結到2個DataTable

    但Combobox2要根據Combobox1改變它的清單內容,且改變後原先已輸入的值不能清空

    也就是假設有2列,第1列的Combobox1選了台北市,Combobox2的清單就是松山區中山區等,

    第2列的Combobox1選了新北市,Combobox2的清單就是板橋區三重區等

    可是當我改了第2列的Combobox2的清單後,第1列的Combobox2 的值還會保留

     

    我現在已經知道怎麼改變清單內容,但我沒辦法保留combobox2的值,一定會全部被清單

    請問該怎麼辦?

    不知道是不是打錯字,上面你說一定會全部"被清單",我猜是不是全部會被清除,如果是的話你可以把SBS.DataSource.Clear()拿掉,並且在list_cellparsing不要呼叫UpdateDataBindings試試看。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年6月1日 上午 06:02
  • 假設我有一個DGV,DGV裡有2個combobox(Combobox1跟Combobox2),分別繫結到2個DataTable

    但Combobox2要根據Combobox1改變它的清單內容,且改變後原先已輸入的值不能清空

    也就是假設有2列,第1列的Combobox1選了台北市,Combobox2的清單就是松山區中山區等,

    第2列的Combobox1選了新北市,Combobox2的清單就是板橋區三重區等

    可是當我改了第2列的Combobox2的清單後,第1列的Combobox2 的值還會保留

     

    我現在已經知道怎麼改變清單內容,但我沒辦法保留combobox2的值,一定會全部被清單

    請問該怎麼辦?

    不知道是不是打錯字,上面你說一定會全部"被清單",我猜是不是全部會被清除,如果是的話你可以把SBS.DataSource.Clear()拿掉,並且在list_cellparsing不要呼叫UpdateDataBindings試試看。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    還是一樣不行耶
    2011年6月7日 上午 07:19
  • 2011年6月8日 上午 02:30