none
Dategridview 取得欄位 後 傳輸到 Text 與 RadioButton 修改 更新後再寫回資料庫 RRS feed

  • 問題

  • 大家好   我是一個VB的新手 >___<


    目前在寫一個專題   記帳本
    在form 裡 有一個  datagridview   還有8個RadioButton    另有4個button    新增 修改  刪除 關閉

    datagridview 內容

    帳戶      分類

    現金      資產
    郵局      資產
    三餐      支出
    交通費   支出
    .
    .
    .

    新增目前沒有問題

    但在修改 與刪除 有問題

    目前的想法是  click  dategridview 帳戶 的某個欄位  如郵局

    之後  textbox 會出現郵局  且  RadioButton 也點選在 資產

    然後可以修改  或 刪除   Datatable 或 資料庫裡的資料


    拜託各位 善心大德  可以指點一下迷津   >_<!!

                                                                     by  rh






    2009年12月30日 下午 02:24

解答

  •     Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            MessageBox.Show(Me.DataGridView1.CurrentRow.ToString)
            MessageBox.Show(Me.DataGridView1.CurrentCell.Value.ToString)
        End Sub

    DataGridView 成員
    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.datagridview_members.aspx 

    要行還是列呢?參考以上...
    • 已標示為解答 Rhinn 2010年1月2日 下午 03:05
    2010年1月2日 下午 12:41
  • To Rhinn:
    以下是一個採用BindingSource 處理DataGridView,TextBox和RadioButton連動的簡單範例
    畫面配置是一個DataGridView, 一個TextBox, 一個GroupBox , 然後有四個RadionButton放在GroupBox中
    Public Class Form5
        Dim myBindingSource As New BindingSource
        Dim myRadioButtonArray(3) As RadioButton
        Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            myRadioButtonArray(0) = RadioButton1
            myRadioButtonArray(1) = RadioButton2
            myRadioButtonArray(2) = RadioButton3
            myRadioButtonArray(3) = RadioButton4
            Dim myDatatable As New DataTable
            myDatatable.Columns.Add("Col01")
            myDatatable.Columns.Add("Col02")
            BuildDataTable(myDatatable)
            TextBox1.DataBindings.Add("Text", myBindingSource, "Col01")

            AddHandler myBindingSource.CurrentItemChanged, AddressOf BindingSource_Change

        End Sub
        Private Sub BuildDataTable(ByVal myDataTable As DataTable)
            Dim i, j As Integer
            Dim myNewRow As DataRow
            For i = 0 To 9

                For j = 0 To 3
                    myNewRow = myDataTable.NewRow
                    myNewRow.Item(0) = i
                    myNewRow.Item(1) = j
                    myDataTable.Rows.Add(myNewRow)
                Next

            Next
            myBindingSource.DataSource = myDataTable
            DataGridView1.DataSource = myBindingSource
        End Sub
        Private Sub BindingSource_Change(ByVal sender As Object, ByVal e As EventArgs)
            Dim iIndex As Integer
            iIndex = CType(myBindingSource.Current, DataRowView).Item("Col02")
            For Each TheRB_Value As RadioButton In myRadioButtonArray
                TheRB_Value.Checked = False
            Next
            myRadioButtonArray(iIndex).Checked = True
        End Sub
    End Class

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 Rhinn 2010年1月3日 下午 12:25
    2010年1月2日 下午 04:27
    版主

所有回覆

  • Hi,

    看起來你要的應該是BindingSource

    上一筆、下一筆、第一筆、最末筆《BindingSource的應用 (1)》

    BindingNavigator《BindingSource的應用 (2)》

    另外一提~透過VS設定資料來源
    可把資料來源直接拖曳到表單
    VS會自動幫你產生簡易的表單介面
    多半書上都會介紹
    可以翻一下

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年12月30日 下午 04:57
  • hi
    也可以參考該範例,再依你實際需求更改
    DataGridView with Detail Edit Form - VS 2005
    http://www.codeproject.com/KB/vb/DataGridViewEditForm.aspx

    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年12月30日 下午 07:11
  • 順便閱讀一下MSDN文件中與ADO.NET相關章節, 相信你會愛上它
    [.NET Framework 開發人員手冊 ADO.NET <!-- -->]
    [擷取和修改 ADO.NET 中的資料 ]
    [以 DataAdapter 更新資料來源 (ADO.NET) ]
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月31日 上午 02:55
    版主
  • 感謝幫忙的解答   我的元件Datagridview 是用拉的,但資料庫是用手動連接,並不是用內建元件來連接資料庫

    這是老師的要求  >_<


    目前比較需要的是 判別  目前選取 datagridview 上是哪一行     用哪個屬性     下面Bill Chung 大哥的提供的我也去看了

    但我找不要需要用的屬性 

    能否提供一下 看是用哪個屬性   在click datagridview上某一行時  可以判別的方法  .....感謝
    2010年1月2日 上午 11:36
  •     Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            MessageBox.Show(Me.DataGridView1.CurrentRow.ToString)
            MessageBox.Show(Me.DataGridView1.CurrentCell.Value.ToString)
        End Sub

    DataGridView 成員
    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.datagridview_members.aspx 

    要行還是列呢?參考以上...
    • 已標示為解答 Rhinn 2010年1月2日 下午 03:05
    2010年1月2日 下午 12:41
  • 感謝幫忙的解答   我的元件Datagridview 是用拉的,但資料庫是用手動連接,並不是用內建元件來連接資料庫

    這是老師的要求  >_<


    目前比較需要的是 判別  目前選取 datagridview 上是哪一行     用哪個屬性     下面Bill Chung 大哥的提供的我也去看了

    但我找不要需要用的屬性 

    能否提供一下 看是用哪個屬性   在click datagridview上某一行時  可以判別的方法  .....感謝

    如果你用BindingSource的話, BindingSource.Current 屬性 就是了. joe大提供的方法是最直覺, 不過我一向很少那樣寫, 我習慣性是操作資料來源 (如BindingSource或DataTable). 原因是我處理的資料有時會有很多額外的需求, 若我直接操作DataGridVidw會比較麻煩.BindingNavigator《BindingSource的應用 (2)》 其實內容是有提到DataGridView和TextBox的同步化, 直接是靠著Bindingsource類別去做, 事實上不用特別去讀Current Row的值, 因為神秘的黑盒子幫你處裡了. 你應該下載那個Demo Code下來玩看看.

    如果是學校作業, 你們老師的確不賴, 因為連接資料這部份如果你們習慣拖拉, 等到要處理複雜一點的資料來源時根本是應付不了, 早點熟悉基本的ADO.NET是沒錯的.




    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月2日 下午 02:25
    版主
  • 剛剛測試了一下  的確是我要的      只是剛好剛剛也找到另一種解法  與大家分享一下

    用  e.RowIndex 來找行  

    再用 DataGridView1.Rows(e.RowIndex).Cells(0).Value   來顯示資料     


    下面是我剛寫好的程式部分   請大家指教一下          Joe hung 大哥的我也會試試   感謝 ^_______________________^

    Private Sub DataGridView1_CellContentDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentDoubleClick

            If e.RowIndex > -1 Then   '避免使用者點 雙擊 欄位名稱  造成程式錯誤

                RowIndex = e.RowIndex  'RowIndex 是一個全區域變數  有他用
                Txtname.Text = DataGridView1.Rows(e.RowIndex).Cells(0).Value

                If DataGridView1.Rows(e.RowIndex).Cells(1).Value = "資產" Then
                    Radaccount.Checked = True

                ElseIf DataGridView1.Rows(e.RowIndex).Cells(1).Value = "負債" Then
                    RadDebt.Checked = True
                ElseIf DataGridView1.Rows(e.RowIndex).Cells(1).Value = "收入" Then
                    Radincome.Checked = True
                ElseIf DataGridView1.Rows(e.RowIndex).Cells(1).Value = "支出" Then
                    Radpay.Checked = True
                ElseIf DataGridView1.Rows(e.RowIndex).Cells(1).Value = "信用卡" Then
                    RadCard.Checked = True
                ElseIf DataGridView1.Rows(e.RowIndex).Cells(1).Value = "股票基金" Then
                    RadStock.Checked = True
                ElseIf DataGridView1.Rows(e.RowIndex).Cells(1).Value = "外幣" Then
                    RadCurrency.Checked = True
                ElseIf DataGridView1.Rows(e.RowIndex).Cells(1).Value = "其他帳戶" Then
                    Radother.Checked = True
                End If

            End If
        End Sub
    2010年1月2日 下午 03:11

  • 那篇我有去看了     只是 我這邊需要的是比較直覺的功能   也讓使用者簡單化
    才選用  用datagridview 點選的作法


    另外  其實看了  MoneyAssistant  這套軟體的作法  想說是試著寫出來


    感謝您的分享 ^_^
    2010年1月2日 下午 03:29
  • To Rhinn:
    以下是一個採用BindingSource 處理DataGridView,TextBox和RadioButton連動的簡單範例
    畫面配置是一個DataGridView, 一個TextBox, 一個GroupBox , 然後有四個RadionButton放在GroupBox中
    Public Class Form5
        Dim myBindingSource As New BindingSource
        Dim myRadioButtonArray(3) As RadioButton
        Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            myRadioButtonArray(0) = RadioButton1
            myRadioButtonArray(1) = RadioButton2
            myRadioButtonArray(2) = RadioButton3
            myRadioButtonArray(3) = RadioButton4
            Dim myDatatable As New DataTable
            myDatatable.Columns.Add("Col01")
            myDatatable.Columns.Add("Col02")
            BuildDataTable(myDatatable)
            TextBox1.DataBindings.Add("Text", myBindingSource, "Col01")

            AddHandler myBindingSource.CurrentItemChanged, AddressOf BindingSource_Change

        End Sub
        Private Sub BuildDataTable(ByVal myDataTable As DataTable)
            Dim i, j As Integer
            Dim myNewRow As DataRow
            For i = 0 To 9

                For j = 0 To 3
                    myNewRow = myDataTable.NewRow
                    myNewRow.Item(0) = i
                    myNewRow.Item(1) = j
                    myDataTable.Rows.Add(myNewRow)
                Next

            Next
            myBindingSource.DataSource = myDataTable
            DataGridView1.DataSource = myBindingSource
        End Sub
        Private Sub BindingSource_Change(ByVal sender As Object, ByVal e As EventArgs)
            Dim iIndex As Integer
            iIndex = CType(myBindingSource.Current, DataRowView).Item("Col02")
            For Each TheRB_Value As RadioButton In myRadioButtonArray
                TheRB_Value.Checked = False
            Next
            myRadioButtonArray(iIndex).Checked = True
        End Sub
    End Class

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 Rhinn 2010年1月3日 下午 12:25
    2010年1月2日 下午 04:27
    版主
  • To Rhinn:
    以下是一個採用BindingSource 處理DataGridView,TextBox和RadioButton連動的簡單範例
    畫面配置是一個DataGridView, 一個TextBox, 一個GroupBox , 然後有四個RadionButton放在GroupBox中
    ...............
    打工回來  晚上在試試   感溫 ^^
    2010年1月2日 下午 11:56
  • To Rhinn:
    以下是一個採用BindingSource 處理DataGridView,TextBox和RadioButton連動的簡單範例
    畫面配置是一個DataGridView, 一個TextBox, 一個GroupBox , 然後有四個RadionButton放在GroupBox中
    Public Class Form5 
    ........
    剛剛做了一下測試   也是我需要的功能

    只是............小弟學藝不精   蠻多地方不太懂得  ^^!!

    努力消化吸收中    感謝...
    2010年1月3日 下午 12:26