منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : اضافة زر امر للداتاجريد
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم.اخواني الهي يكرمكم ان شاء الله.كيف يمكن ان اضيف عمود للداتاجريد ( العمود 3 الاخير ) من نوع button .بارك الله فيكم
جرب هذا


يمكنك إضافة الأعمدة في التصميم بدلا من الكود

أو
كود :
Imports System.Data.OleDb
Public Class Form1

   Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DB.mdb; "

   Dim Conn As New OleDbConnection(ConStr)
   Dim InfoCommand As OleDbCommand
   Dim InfoAdapter As OleDbDataAdapter
   Dim InfoTable As DataTable
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       If Conn.State = ConnectionState.Closed Then
           Conn.Open()
       End If

       InfoCommand = New OleDbCommand("SELECT * FROM Materials ORDER BY Materials_Id", Conn)
       InfoAdapter = New OleDbDataAdapter()
       InfoAdapter.SelectCommand = InfoCommand
       InfoTable = New DataTable()
       InfoAdapter.Fill(InfoTable)
       DataGridView1.DataSource = InfoTable
       DataGridView1.Columns(0).HeaderText = "التّرقيم"
       DataGridView1.Columns(1).HeaderText = "السلعة"
       DataGridView1.Columns(2).HeaderText = "الكمية"

       Dim btn As New DataGridViewButtonColumn
       btn.HeaderText = "العمود"
       btn.DefaultCellStyle.NullValue = "Button"
       btn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
       DataGridView1.Columns.Add(btn)

   End Sub

   Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
       If TypeOf sender.Columns(e.ColumnIndex) Is DataGridViewButtonColumn Then
           MsgBox("RowIndex: " & e.RowIndex)
       End If
   End Sub

End Class
يسلمو اخي rnmr و الله هذا ما ريده بالضبط كثر الف خيرك.فقط لي طلب اخير بعد اذنك كيف لما اضغط على زر الامر على الصف الذي واقف عليه تخبرني رسالة اذا كنت اريد نقل السجل الى الجدول الاخر ( matrials_djerd ) اذا نعم يتم حذف السجل من جدول materials و ينتقل الى جدول matrials_djerd ربنا يبارك فيك اخي
جرب هذا

كود :
Imports System.Data.OleDb
Public Class Form1

   Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DB.mdb; "

   Dim Conn As New OleDbConnection(ConStr)
   Dim InfoAdapter As New OleDbDataAdapter("SELECT * FROM Materials ORDER BY Materials_Id", Conn)
   Dim InfoTable As New DataTable

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

       InfoTable.Clear()
       InfoAdapter.Fill(InfoTable)
       DataGridView1.DataSource = InfoTable

       DataGridView1.Columns(0).HeaderText = "التّرقيم"
       DataGridView1.Columns(1).HeaderText = "السلعة"
       DataGridView1.Columns(2).HeaderText = "الكمية"

       Dim btn As New DataGridViewButtonColumn
       btn.HeaderText = "نقل للجدول الاخر"
       btn.DefaultCellStyle.NullValue = "نقل"
       btn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
       DataGridView1.Columns.Add(btn)
   End Sub

   Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
       If TypeOf sender.Columns(e.ColumnIndex) Is DataGridViewButtonColumn Then
           If MsgBox("هل تريد نقل السجل إالى الجدول الاخر", MsgBoxStyle.YesNo) <> MsgBoxResult.Yes Then Return
           Try

               If Conn.State <> ConnectionState.Open Then Conn.Open()

               Dim row As DataGridViewRow = DataGridView1.CurrentRow
               Dim trans As OleDbTransaction = Conn.BeginTransaction
               Dim cmd As New OleDbCommand
               cmd.Connection = Conn
               cmd.Transaction = trans

               cmd.CommandText = "INSERT INTO [Materials_Djerd] ([Djerd_Id], [Djerd_Name], [Djerd_Quantity]) VALUES(?,?,?)"
               cmd.Parameters.Clear()
               cmd.Parameters.AddWithValue("@Id", row.Cells(0).Value)
               cmd.Parameters.AddWithValue("@Name", row.Cells(1).Value)
               cmd.Parameters.AddWithValue("@Quantity", row.Cells(2).Value)
               If cmd.ExecuteNonQuery > 0 Then ' إذا نجحت الإضافة في الجدول الثاني

                   cmd.CommandText = "DELETE FROM [Materials] WHERE [Materials_Id]=?"
                   cmd.Parameters.Clear()
                   cmd.Parameters.AddWithValue("@Id", row.Cells(0).Value)

                   If cmd.ExecuteNonQuery() > 0 Then ' إذا نجح الحذف من الجدول الأول

                       trans.Commit() ' اتمام العمليتين معا النقل والحذف

                       ' إعادة تعبئة الداتاجريدفيو
                       InfoTable.Clear()
                       InfoAdapter.Fill(InfoTable)

                       MsgBox("تم النقل")

                   Else
                       trans.Rollback() ' التراجع عن العمليتين معا
                   End If

               End If

           Catch ex As Exception
               MsgBox(ex.Message)
           Finally
               Conn.Close()
           End Try
       End If
   End Sub

End Class
الله يبارك فيك و يمتعك بالصحة و الهناء اخي rnmr .كلو مضبوط منيش عارف كيف اشكرك.بقيت لي امسة بسيطة و ان شاء الله اغلق الموضوع .كيف يمكن استبدل هذا الرسالة

كود :
If MsgBox("هل تريد نقل السجل إالى الجدول الاخر", MsgBoxStyle.YesNo) <> MsgBoxResult.Yes Then Return
بحيث اذكر اسم السلعة داخل الرسالة هكذا مثلا لم اعرف كيف ابدل كلمة txtname بسطر الداتاجريد

كود :
           If MsgBox("  هل أنت متأكّد من أنك تريد حذف هذه السلعة و نقلها لجدول الجرد : " & TxtName.Text & " ? ", MsgBoxStyle.YesNo + MsgBoxStyle.Critical, "تنبيه") = MsgBoxResult.No Then
جرب هذا

كود :
Imports System.Data.OleDb

Public Class Form1

   Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DB.mdb; "

   Dim Conn As New OleDbConnection(ConStr)
   Dim InfoAdapter As New OleDbDataAdapter("SELECT * FROM Materials ORDER BY Materials_Id", Conn)
   Dim InfoTable As New DataTable

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
       Me.DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
       Me.DataGridView1.AllowUserToDeleteRows = False
       Me.DataGridView1.AllowUserToAddRows = False
       Me.DataGridView1.ReadOnly = True

       InfoTable.Clear()
       InfoAdapter.Fill(InfoTable)
       DataGridView1.DataSource = InfoTable
       DataGridView1.ClearSelection()

       DataGridView1.Columns(0).HeaderText = "التّرقيم"
       DataGridView1.Columns(1).HeaderText = "السلعة"
       DataGridView1.Columns(2).HeaderText = "الكمية"

       Dim btn As New DataGridViewButtonColumn
       btn.HeaderText = "نقل للجدول الاخر"
       btn.DefaultCellStyle.NullValue = "نقل"
       btn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
       DataGridView1.Columns.Add(btn)
   End Sub

   Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
       If TypeOf sender.Columns(e.ColumnIndex) Is DataGridViewButtonColumn Then

           ' قراءة السطر الحالي في الداتاجريدفيو
           Dim row As DataGridViewRow = sender.CurrentRow

           ' إعدادات رسالة التأكيد
           Dim msgstyle As MsgBoxStyle = &H180000 + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2 + MsgBoxStyle.Exclamation
           Dim msgtext As String = _
               "هل أنت متأكّد من أنك تريد حذف هذه السلعة ونقلها لجدول الجرد: ?" & vbNewLine & _
               "رقم: " & row.Cells(0).Value & ": " & row.Cells(1).Value & " (كمية: " & row.Cells(2).Value & ")"
           ' عندما لا يكون الجواب ب(نعم) فقم بالتراجع
           If MsgBox(msgtext, msgstyle, "تنبيه") <> MsgBoxResult.Yes Then Return

           Try
               If Conn.State <> ConnectionState.Open Then Conn.Open()

               Dim trans As OleDbTransaction = Conn.BeginTransaction
               Dim cmd As New OleDbCommand
               cmd.Connection = Conn
               cmd.Transaction = trans

               cmd.CommandText = "INSERT INTO [Materials_Djerd] ([Djerd_Id], [Djerd_Name], [Djerd_Quantity]) VALUES(?,?,?)"
               cmd.Parameters.Clear()
               cmd.Parameters.AddWithValue("@Id", row.Cells(0).Value)
               cmd.Parameters.AddWithValue("@Name", row.Cells(1).Value)
               cmd.Parameters.AddWithValue("@Quantity", row.Cells(2).Value)
               If cmd.ExecuteNonQuery > 0 Then ' إذا نجحت الإضافة في الجدول الثاني

                   cmd.CommandText = "DELETE FROM [Materials] WHERE [Materials_Id]=?"
                   cmd.Parameters.Clear()
                   cmd.Parameters.AddWithValue("@Id", row.Cells(0).Value)

                   If cmd.ExecuteNonQuery() > 0 Then ' إذا نجح الحذف من الجدول الأول

                       trans.Commit() ' اتمام العمليتين معا النقل والحذف

                       ' إعادة تعبئة الداتاجريدفيو
                       InfoTable.Clear()
                       InfoAdapter.Fill(InfoTable)
                       sender.ClearSelection()

                       MsgBox("تم النقل")

                   Else
                       trans.Rollback() ' التراجع عن العمليتين معا
                   End If

               End If

           Catch ex As Exception
               MsgBox(ex.Message)
           Finally
               Conn.Close()
           End Try
       End If
   End Sub

End Class

أو حسب طلبك

كود :
If MsgBox("  هل أنت متأكّد من أنك تريد حذف هذه السلعة و نقلها لجدول الجرد : " & Me.DataGridView1.CurrentRow.Cells(1).Value & " ? ", MsgBoxStyle.YesNo + MsgBoxStyle.Critical, "تنبيه") = MsgBoxResult.No Then
بجد كثر الف خيرك اخ rnmr كلو مضبوط بارك الله فيك و جزاك كل الخير