Jump to content
Sign in to follow this  
DrASAG

Datagridview + Vb.net 2005

Recommended Posts

A'kum.

ada masalah sket la. aku ada satu form. dlm form tu aku letak satu datagridview untuk paparkan rekod dari database. dalam datagridview tu aku ada 4 kolum.

1. NoID (textbox)

2. Nama (textbox)

3. Status (checkbox)

4. Negeri (combobox)

so, untuk paparkan rekod dalam datagridview tu, dah OK. untuk update rekod yang aku ubah dalam datagridview tu pun dan OK. tapi macam mana aku nak simpan rekod tu semua dalam table yang lain. maksud aku, aku retrieve rekod kat datagridview tu dari table1, now aku nak simpan semua rekod yang dipaparkan tu dalam table2. aku dah puas tanya incik google, macam2 solution depa bg tapi aku tak dpt jgk nak buat.

Share this post


Link to post
Share on other sites

A'kum. ni kod yg aku dah buat.

Public Class Form5

    Dim bindingSourceStaf As BindingSource
    Dim dstbl1 As DataSet
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        isigrid()
    End Sub

    Private Sub isigrid()

        dstbl1 = LoadDB()
        If dstbl1 IsNot Nothing Then
            bindingSourceStaf = New BindingSource(dstbl1, "tbl1")
            SetupGrid2()
        End If

    End Sub

    Private Function LoadDB() As DataSet

        Try

            Dim Dset As New DataSet()

            sql = "SELECT * FROM tbl1"

            If ConnectionState.Open Then con.Close()
            con.Open()

            Dim task As New OleDb.OleDbCommand(sql, con)
            Dim rd As OleDb.OleDbDataReader = task.ExecuteReader()

            Dset.Load(rd, LoadOption.OverwriteChanges, New String() {"tbl1"})

            sql2 = "SELECT Negeri FROM tbl3"

            Dim task2 As New OleDb.OleDbCommand(sql2, con)
            Dim rd2 As OleDb.OleDbDataReader = task2.ExecuteReader()

            Dset.Load(rd2, LoadOption.OverwriteChanges, New String() {"tbl3"})

            rd.Close()
            rd2.Close()
            con.Close()

            Return Dset

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
            Return Nothing
        End Try

    End Function

    Private Sub SetupGrid2()

        DG2.AutoGenerateColumns = False
        DG2.DataSource = bindingSourceStaf

        Column1.DataPropertyName = "NoID"
        Column2.DataPropertyName = "Nama"
        Column4.DataPropertyName = "Ada"

        Column3.DataPropertyName = "Negeri"
        Column3.DataSource = dstbl1.Tables("tbl3")
        Column3.ValueMember = "Negeri"
        Column3.DisplayMember = "Negeri"

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        cuba()
    End Sub

    Private Sub cuba()

        If dstbl1.HasChanges() Then
            Dim da As OleDb.OleDbDataAdapter
            Dim cb As OleDb.OleDbCommandBuilder
            da = New OleDb.OleDbDataAdapter("Select * From tbl1", con)
            da.TableMappings.Add("Table", "tbl1")
            Try
                cb = New OleDb.OleDbCommandBuilder(da)
                da.Update(dstbl1)

                MessageBox.Show("Dah kemaskini", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Data Error", MessageBoxButtons.OK)
            Finally
                cb.Dispose()
                da.Dispose()
            End Try
        Else
            Exit Sub
        End If

    End Sub
   
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim intcount As Integer = 0
        For Each Row As DataGridViewRow In DG2.Rows
            If DG2.Rows(intcount).Cells(1).Value = txtcari.Text Then
                DG2.ClearSelection()
                DG2.Rows(intcount).Selected = True
                DG2.FirstDisplayedScrollingRowIndex = intcount

                Exit Sub
            Else
                DG2.ClearSelection()
                intcount += 1
            End If
        Next Row


    End Sub

    Private Sub DG2_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DG2.CellValueChanged

        If DG2.Columns(e.ColumnIndex).Name = "Column4" Then
            DG2.Rows(e.RowIndex).Cells("Column3").ReadOnly = True

            Dim checkcell As DataGridViewCheckBoxCell = _
                CType(DG2.Rows(e.RowIndex).Cells("Column4"), DataGridViewCheckBoxCell)

            DG2.Rows(e.RowIndex).Cells("Column3").ReadOnly = CType(checkcell.Value, Boolean)

            DG2.InvalidateRow(e.RowIndex)

        End If

    End Sub

    Private Sub DG2_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DG2.CurrentCellDirtyStateChanged

        If DG2.IsCurrentCellDirty Then
            DG2.CommitEdit(DataGridViewDataErrorContexts.Commit)
        End If

    End Sub

End Class
tu kod yg aku buat. untuk update rekod2 tu, aku letak dalam
Private Sub cuba()

        If dstbl1.HasChanges() Then
            Dim da As OleDb.OleDbDataAdapter
            Dim cb As OleDb.OleDbCommandBuilder
            da = New OleDb.OleDbDataAdapter("Select * From tbl1", con)
            da.TableMappings.Add("Table", "tbl1")
            Try
                cb = New OleDb.OleDbCommandBuilder(da)
                da.Update(dstbl1)

                MessageBox.Show("Dah kemaskini", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Data Error", MessageBoxButtons.OK)
            Finally
                cb.Dispose()
                da.Dispose()
            End Try
        Else
            Exit Sub
        End If

    End Sub

so, macam mana aku nak dia masukkan rekod2 tu dlm table lain, bukan dalam tbl1 tu? penin2.. tulung aku wahai otai2 .net. jasamu dikenang...

Edited by DrASAG

Share this post


Link to post
Share on other sites

A'kum. aku ada tukar kod untuk save tu cenggini..

Try

            Dim data_adapter As OleDb.OleDbDataAdapter
            Dim command_builder As OleDb.OleDbCommandBuilder
            Dim select_string As String = "Select * From tbl2"

            data_adapter = New OleDb.OleDbDataAdapter(select_string, con)

            data_adapter.TableMappings.Add("Table", "tbl2")

            command_builder = New OleDb.OleDbCommandBuilder(data_adapter)

            data_adapter.Update(ds, "tbl2")
          
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
        End Try

takder error tapi tak berlaku apa2 pun, update tak, insert pun tak... tulun aku....

Share this post


Link to post
Share on other sites

A'kum. camni. ada 2 table

table 1

1. NoID (PK) <-- text

2. Nama <-- text

3. Status <-- yes/no

4. Negeri <-- text

table 2

1. ID (PK) <--autonumber

1. NoID <-- text

2. Nama <-- text

3. Status <-- yes/no

4. Negeri <-- text

so, aku amik rekod dari table 1, papar kat datagridview. then bila nak save, aku nak save dalam table 2 tu... tulun bro... jasamu dikenang...

Edited by DrASAG

Share this post


Link to post
Share on other sites

ok cam niii.

actually ko leh guna dua teknik

1. sqlbulkcopy

tapi yg ni akan sejibik macam table 1 tadi. yg ni ok gakk. aku suka cara yg ni

2. ko cut paste source code aku ni yehaaa. (demon devil bat)

tapi b4 that aku nak tanya satu soalan

hehehe

ko nak buat apa ko save dlm table yg lain sedangkan table tu dah sama

explain sikit

maybe aku ada cadangan yg lain lakk

macam tak practikal lakk ko ni

wahahahahah

Share this post


Link to post
Share on other sites

tah ni msti nk letak kat temp tbl nih huhu..ko letk jela fuction save lps save pertama td pstu kutip balik 11 data ko yg masuk tbl first td ape susah.kan dah siap hehhe

Share this post


Link to post
Share on other sites

A'kum. hehehehe... mmg tak praktikal pon... org soh buat, aku buat jer benda alah ni. kuakuakua... camni citer sebenarnya. pada suatu hari, hehehehe, bos aku yg sgt sombong tu telah soh aku buat sistem kluar masuk, walaupon ini bkn kejer aku, disebabkan kejer tader, dia aim aku la... kuikuikui.. walaupon ramai lg yg goyang kaki kat opis ni. hehehehe dahler sengsorang...sedey tol...

1. pertamanya aku nak staf isi borang untuk rekod peribadi...

2. keduanya borang utk keluar masuk. bos aku nak staf buleh masuk byk kali, kuar pon byk kali. lepas seminggu dia leh check time masuk, time keluar, sapa lambat, sapa kluar byk kali, sapa kluar tak clock out... etc...

3. time masuk ni ada 2. pertama staf yg terlibat dgn senaman pg, satu lg yg tak terlibat. maksudnya staf yg terlibat dengan senaman ni akan ada 2 time masuk. 6.30 - 8.30 dan 9.00 - 5. staf yg tak terlibat ada 1 time masuk, 8.00 - 5.00... gitula adanya... then, senaman ni pulak ada sekali seminggu. maksudnya 4 kali dalam sebulan. dlm 4 kali tu, mungkin staf yg terlibat bertukar2... minggu ni terlibat, maybe minggu depan plak tak terlibat.. gitu ler..

4. sekarang ni, knp aku wat 2 table yg ada field sama? hehehe.. sbb aku tak reti dah nk pk macam mana nak buat staf yg terlibat dgn senaman tu atau tak. aku tnya staf sini pon, cakap taktau.. sumer tanak sumbang idea.. so jadilah table yg 'sumbang' ni. huhuhuhu... padan muka bos aku...

5. maksudnya skang, tbl 1 akan ada maklumat staf yg ada info peribadi yg melambak2 tu. tbl 2 plak akan ada maklumat staf yg terlibat dan tak terlibat ngan senaman tu. dlm tbl 2 ni ada tmbhn field cam status terlibat ke tak, sebab tak terlibat, trkh senaman 1, 2, 3 dan 4. penin dah aku nak citer..

6. cenggini, aku nk buat form yg ada datagridview yg paparkan semua staf berdasarkan trkh senaman. so dlm datagridview tu ada info dia, dan jgk ada checkbox status terlibat ke tak serta sebab tak terlibat. ha ada idea nak buat caner? idea aku, aku amik rekod dari tbl 2 untuk papar kat datagridview tu. then bila aku edit kat datagridview tu, dia update kat tbl 2. korang paham ke tak ni? hehehe susahnya nk bgtau.. kalo aku amik rekod dr tbl 1, nnt takder plak pasal status, sebab , tarikh 1,2,3,4 tu semua...

7. kod yg aku bg kat sini, aku cuba buat yg dummy dulu, aku cuba masuk rekod yg tak byk... itu jer.. bila dah bleh kat sini, baru nk apply kat program sebenar tu... tulun.. aku bukan programmer.. hehehehe... korang dpt tangkap tak apa aku nk ni...

Share this post


Link to post
Share on other sites

Akum. ni aku bg cth form yg aku nk buat..

i5110_pt.JPG

bila user masukkan tahun, bulan dan sama ada PT1, 2 ,3 atau 4, baru rekod keluar kat datagridview tu. rekod NoID, Pangkat, Cawangan, Nama tu dari tblstaf. status, bulan, tahun, trkh PT 1,2,3,4 dan sebab dari tblsenaman dan rekod sebab tu dari tblsebab.

kalo aku retrieve rekod dr tblsenaman, in case tbl tu takder rekod lg, so dia tak paparkan rekod staf, caner aku nak edit dan save kan? kalo aku retrieve dari tblstaf, nnt takder lak rekod pasa status, bulan etc tu semua... ikut logik buleh relate kan? tu lg satu masalah, lg penin aku nk buat. hehehehe.... so apa yg sepatutnya ada dlm tblsenaman selain status, bulan.. etc tu semua? aku tambah field NoID, Nama.. harap korang dpt bg idea.... aku buntu pikir sorang2 ni.

katakan tblsenaman masih kosong. aku masuk tahun 2008, bulan mac, then tarikh PT 1 31-03-2008. kalo aku retrieve dr tblsenaman takan ada rekod dipaparkan. carian aku based on tarikh tu... so, caner aku nk tambah rekod dalam tblsenaman utk data2 kat atas tu kalo rekod tak dipapar? aku rasa macam tetinggal sesuatu, tapi aku tak nmpk apa dia....

Edited by DrASAG

Share this post


Link to post
Share on other sites

oo sian koo.

ni masalah senang jerrr

kalau ko jumpa aku sure terus leh siap.

aku kasik idea n solution sekali

1 table pun dah cukup

kalau nak normalize pun leh.

kalau ko nak aaa

ko duduk mana

aku duk kl

kalau nak leh aa jumpa kat starbuck kerrr

tapi ko banje aku laa

wakakakakakka. heheheeh

amacam

ada beraniii

heheh

siap aku kasik sample sistem lagi

hehehehe

Share this post


Link to post
Share on other sites

A'kum..

uikk.. hang ni banjer sajer... huhuhuhu... cakap tadik nk bg cth kod. hehehehe..

aku dah ubah kod aku tu. aku retrieve rekod dari dua tbl guna JOIN. buleh ler papar. tapi problem nak save rekod tu ler. dia ckp takleh save utk multiple table.. huhuhuhu...

bro kl area mn? aku dok bt cave, sebelah giant tu. hehehehe.. starbuck? aku tak penah masuk tmpt2 cenggitu. kfc giant leh la. hahahaha... serius ni...

Share this post


Link to post
Share on other sites

hahahh

aku duduk depan giant tuu

wakakakka

leh aa no halll. mlm ni pun tak perr

wakakakakaka

. banje minum jerr

murah jerrrr

kat starbuck sebab internet freee

kfc tak der internet

lagipun kfc mahal sikit

heheheheh

kalau ok ok lew

heheheh

Share this post


Link to post
Share on other sites

lor, org bt cave gak ka? kuakuakua... mlm ni? ok jer... bkn masalah mahal ke apa, aku tak penah g tmpt2 gitu.. hehehe lgpon aku takleh kuar lama2, anak aku kecik2 lg, org umah aku kursus... hehehehe... mlm ni kfc giant weii.. kol waper nak turun.. kol 8 bleh ka. sbb 9.30 nk kn blk, kn tidokan anak2 lak. huhuhu...

Share this post


Link to post
Share on other sites

A'kum... hehehe.. wei tak email lagik arr cth kod tu? hehehe... ekcelli aku dah bleh buat. lega sioottt.. tima kasih idea ko semalam. macam ko cakap guna parameter tuh... aku wat tak menjadik lak. aku ubah sket.. tatau la aku guna parameter ke tak.. coba tgk kat bwh ni...

Private Sub btnsimpan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsimpan.Click

        Dim strID, strStatus, strSebab As String

        Dim n As Integer = 0
        For n = 0 To DG.RowCount - 1

            strID = DG.Rows(n).Cells("Column1").Value.ToString
            strStatus = DG.Rows(n).Cells("Column4").Value.ToString
            strSebab = DG.Rows(n).Cells("Column3").Value.ToString

            If CheckUser(strID) = True Then
                updatePT(strID, strStatus, strSebab)
            Else
                insertPT(strID, strStatus, strSebab)
            End If

        Next

    End Sub
Function CheckUser(ByVal strUserID As String) As Boolean

        Dim dsUser As New DataSet
        Dim daUser As OleDbDataAdapter

        sConn.Open()
        Try
            sql = "SELECT * FROM tblPT WHERE Tahun='" & txttahun.Text & "' AND Bulan='" & cbobulan.Text & "'"
            Dim cmd As New OleDbCommand(sql, sConn)
            daUser = New OleDbDataAdapter(cmd)
            daUser.Fill(dsUser, "tblPT")

            For Each Drow In dsUser.Tables(0).Rows
                If Drow("NoID") = strUserID Then
                    sConn.Close()
                    Return True
                Else
                    sConn.Close()
                End If
            Next

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
        End Try

    End Function
Function updatePT(ByVal strID As String, ByVal strStatus As Boolean, ByVal strSebab As String)

        Dim sCmd As String

        If klik = 1 Then
            sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT1=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'"

            Dim cmd As New OleDb.OleDbCommand(sCmd, sConn)
            cmd.Parameters.AddWithValue("Status", CBool(strStatus))
            cmd.Parameters.AddWithValue("Sebab", strSebab)
            cmd.Parameters.AddWithValue("PT1", t1.Text)

            sConn.Open()
            cmd.ExecuteNonQuery()
            sConn.Close()

        ElseIf klik = 2 Then
            sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT2=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'"

            Dim cmd As New OleDb.OleDbCommand(sCmd, sConn)
            cmd.Parameters.AddWithValue("Status", CBool(strStatus))
            cmd.Parameters.AddWithValue("Sebab", strSebab)
            cmd.Parameters.AddWithValue("PT2", t2.Text)

            sConn.Open()
            cmd.ExecuteNonQuery()
            sConn.Close()

        ElseIf klik = 3 Then
            sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT3=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'"

            Dim cmd As New OleDb.OleDbCommand(sCmd, sConn)
            cmd.Parameters.AddWithValue("Status", CBool(strStatus))
            cmd.Parameters.AddWithValue("Sebab", strSebab)
            cmd.Parameters.AddWithValue("PT3", t3.Text)

            sConn.Open()
            cmd.ExecuteNonQuery()
            sConn.Close()

        ElseIf klik = 4 Then
            sCmd = "UPDATE tblPT SET Status=?, Sebab=?, PT4=? WHERE NoID='" & strID & "' AND Bulan='" & cbobulan.Text & "' AND Tahun='" & txttahun.Text & "'"

            Dim cmd As New OleDb.OleDbCommand(sCmd, sConn)
            cmd.Parameters.AddWithValue("Status", CBool(strStatus))
            cmd.Parameters.AddWithValue("Sebab", strSebab)
            cmd.Parameters.AddWithValue("PT4", t4.Text)

            sConn.Open()
            cmd.ExecuteNonQuery()
            sConn.Close()

        End If

    End Function

untuk function insertPT tu sama gak cam update tu, cuma tukar command INSERT jer... aku rasa mcm panjang kod ni, leh pendekkan lg ker? kalo guna parameter cam ko tunjuk semalam caner? thanx 4 da ideas...

Share this post


Link to post
Share on other sites

hehhe aku dah hantar daa

semalam aku tertidooo penat daa

ok leh kurangkan coding nii

tak perr aaa

kalau yg parameter tu aku dah send dahh

tgk aa kang

ok

heheh

anyway thank for the mee goreng mamak n teh o

heheeh

Edited by DevGuy

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...