View Full Version : آيا امكان همزمان  add كردن و ويرايش كردن ديتا گريدويو وجود دارد؟
  
bahar2008
چهارشنبه 03 مهر 1387, 10:49 صبح
سلام دوستان خوبم 
من ديتا گريدي دارم كه به بانكم bind شده و اطلاعات بانك رو نمايش ميده حالا من مي خوام كاربر بتونه در اين ديتا گريد هم اطلاعاتش رو اضافه كنه و هم بتونه اطلاعات قبلي كه وارد كرده رو ويرايش كنه به طور همزمان 
من اول از اين كد استفاده كردم ولي اين كد اجازه ويرايش رو نميداد و پيغام خطاي خيلي بزرگي ميگرفت :ناراحت:
Setande2TableAdapter.Update(ProjectDataSet2.setand e2)
ولي بعدا كه با اين كد كار كردم هم باز هم امكان ويرايش رو نميداد :ناراحت:
 
  cmd.CommandText = "UPDATE setande2 SET namesetande= .....
با اينكه هر دو گزينه اجازه add و ويرايش خود ديتاگريد رو هم تيك زدم ولي باز هم فايده يا نداشت:ناراحت:
لطفا دوستان راهنماييم كنن كه چه كدي بايد بنويسم كه همزمان هم بتونم add كنم و هم بتونم ويرايش رو در ديتا گريد انجام بدم
bahar2008
پنج شنبه 04 مهر 1387, 11:54 صبح
یعنی تا بحال هیچ کسی این 2 کار رو به طور همزمان انجام نداده؟ :ناراحت:
یعنی هیچ کی نمی دونه که چطوری می شه این 2 کار رو همزمان با هم انجام داد؟:ناراحت:
mostafaaa
پنج شنبه 04 مهر 1387, 12:10 عصر
آخه دوست من یه خط کد گزاشتی انتظار داری چی بهت جواب بدن.
کد اتصال به بانکت رو بزار. یا اگه با ویزارد به بانک وصل شدی بگو.
در ضمن در مورد این موضوع بارها بحث شده.
bahar2008
پنج شنبه 04 مهر 1387, 13:03 عصر
این کد اتصال به بانک هست 
 
 Me.Setande2TableAdapter.Fill(Me.ProjectDataSet2.se tande2)
 
 
من توی سایت زیاد گشتم و مطلبی که در این زمینه باشه پیدا نکردم برای همین تاپیک جدید زدم 
 
می خوام زمانیکه کاربر در زمان add کردن یا ویرایش کردن یکی از فیلدها رو پر نمی کنه به جای اینکه در بانک null نوشته بشه خط تیره (- ) قرار بده که در دیتاگرید هم خط تیره نشون داده بشه
ALI TT
پنج شنبه 04 مهر 1387, 14:23 عصر
تغییر Null به ( - ) در دیتا گرید :
برای اینکه به جای نول در دیتا گرید ( - ) بنویسه ، باید از قسمت پروپرتی وارد > Default Cell Style بشی و سپس مقدار NullValue را به      -      تغییر بدی.
تغییر Null به ( - ) در بانک اطلاعاتی ( دیتا بیس) :
برای اینکه در بانک خودت به جای خالی ماندن Cellها ( نول ) یه کارکتر رو قرار بدی ، باید مقدار Default Value رو به همون کارکتر قرار بدی .
ali_md110
پنج شنبه 04 مهر 1387, 14:35 عصر
از این روش استفاده کنی همزمان هم اضافه اپدیت و حذف میشه
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Data.OleDb
Public Class Form1
    Private dataTable1 As New DataTable()
    Private oleDbConnection1 As New OleDbConnection()
    Private oleDbDataAdapter1 As New OleDbDataAdapter()
    Private Sub Action()
        Me.oleDbConnection1.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = |DataDirectory|\db.mdb; Persist Security Info = True"
        Me.oleDbDataAdapter1.SelectCommand = New OleDbCommand("SELECT ID, Field1, Field2 FROM Table1", Me.oleDbConnection1)
        Me.oleDbDataAdapter1.Fill(Me.dataTable1)
        Me.dataGridView1.DataSource = dataTable1
      
       
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.oleDbDataAdapter1.UpdateCommand = New OleDbCommand("UPDATE Table1 SET Field1 = @field1, Field2 = @field2 WHERE ID = @id", Me.oleDbConnection1)
        Me.oleDbDataAdapter1.UpdateCommand.Parameters.AddW ithValue("@field1", GetType(String)).SourceColumn = "Field1"
        Me.oleDbDataAdapter1.UpdateCommand.Parameters.AddW ithValue("@field2", GetType(String)).SourceColumn = "Field2"
        Me.oleDbDataAdapter1.UpdateCommand.Parameters.AddW ithValue("@id", GetType(Integer)).SourceColumn = "ID"
      
        Me.oleDbDataAdapter1.InsertCommand = New OleDbCommand("INSERT INTO Table1 (Field1, Field2) VALUES (@field1, @field2)", Me.oleDbConnection1)
        Me.oleDbDataAdapter1.InsertCommand.Parameters.AddW ithValue("@field1", GetType(String)).SourceColumn = "Field1"
        Me.oleDbDataAdapter1.InsertCommand.Parameters.AddW ithValue("@field2", GetType(String)).SourceColumn = "Field2"
      
        Me.oleDbDataAdapter1.DeleteCommand = New OleDbCommand("DELETE FROM Table1 WHERE ID = @id", Me.oleDbConnection1)
        Me.oleDbDataAdapter1.DeleteCommand.Parameters.AddW ithValue("@id", GetType(Integer)).SourceColumn = "ID"
        Me.oleDbDataAdapter1.Update(dataTable1)
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Action()
    End Sub
End Class
bahar2008
شنبه 06 مهر 1387, 12:51 عصر
ممنونم از راهنامييتون دوست عزيز
ولي من چون با sql كار يم كنم اين دستوراتي كه شما نوشتيد رو بعضي هاشو نداره و من هم كه شبيه دستورات sql نوشتم باز هم پيغام خطا داد :ناراحت:
arashgold
شنبه 06 مهر 1387, 18:47 عصر
من هم ممنون میشم SQL آن را بگین
mostafaaa
شنبه 06 مهر 1387, 22:06 عصر
امیدوارم با این مشکلت حل بشه.
Imports System.Data.SqlClient
Public Class Form1
    Dim ConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\MyDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
    Dim Connection As SqlConnection
    Dim Command As SqlCommand
    Dim DataAdapter As SqlDataAdapter
    Dim DataTable As DataTable
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Connection = New SqlConnection(ConnectionString)
        Connection.Open()
        Command = New SqlCommand("SELECT * FROM MyTable", Connection)
        Command.ExecuteNonQuery()
        DataAdapter = New SqlDataAdapter(Command)
        DataTable = New DataTable
        DataAdapter.Fill(DataTable)
        Me.DataGridView1.DataSource = DataTable
        Connection.Close()
    End Sub
    Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
        Connection.Open()
        'Insert
        DataAdapter.InsertCommand = New SqlCommand("INSERT INTO MyTable VALUES(@IF1,@IF2,@IF3)", Connection)
        DataAdapter.InsertCommand.Parameters.AddWithValue("@IF1", GetType(Integer)).SourceColumn = "F1"
        DataAdapter.InsertCommand.Parameters.AddWithValue("@IF2", GetType(String)).SourceColumn = "F2"
        DataAdapter.InsertCommand.Parameters.AddWithValue("@IF3", GetType(String)).SourceColumn = "F3"
        'Delete
        DataAdapter.DeleteCommand = New SqlCommand("DELET FROM MyTable WHERE F1=@DF1", Connection)
        DataAdapter.InsertCommand.Parameters.AddWithValue("@DF1", SqlDbType.Int).SourceColumn = "F1"
        'Update
        DataAdapter.UpdateCommand = New SqlCommand("UPDATE MyTable SET F1=@UF1,F2=@UF2,F3=@UF3", Connection)
        DataAdapter.UpdateCommand.Parameters.AddWithValue("@UF1", SqlDbType.Int).SourceColumn = "F1"
        DataAdapter.UpdateCommand.Parameters.AddWithValue("@UF2", SqlDbType.Text).SourceColumn = "F2"
        DataAdapter.UpdateCommand.Parameters.AddWithValue("@UF3", SqlDbType.Text).SourceColumn = "F3"
        DataAdapter.Update(DataTable)
        Connection.Close()
    End Sub
End Class
bahar2008
دوشنبه 08 مهر 1387, 13:03 عصر
ممنونم از راهنماييتون مصطفي جان :قلب::قلب:
من به صورت زير تمام كدها رو در button گذاشتم  كه البته مثل دفعه قبل موقع ويرايش پيغام خطايي نداد ولي وقتي يك خونه از ديتا گريد رو ويرايش ميكردم دوباره به همون حالت قبلش بر مي گشت :ناراحت: 
مشكل از كجاست؟ :متفکر:
 Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        Dim cn As New SqlClient.SqlConnection
        Dim dr As SqlDataReader
        cn.ConnectionString = "Data Source=(local);Initial Catalog=project;Integrated Security=True"
        Dim cmd As New SqlClient.SqlCommand
        Dim DataAdapter As SqlDataAdapter
        Dim DataTable As DataTable
        cn.Open()
        cmd.Connection = cn
        cmd.CommandType = Data.CommandType.Text
        cmd.CommandText = "select * from dade2"
        dr = cmd.ExecuteReader()
        dr.Close()
        DataAdapter = New SqlDataAdapter(cmd)
        DataTable = New DataTable
        DataAdapter.Fill(DataTable)
        Me.DataGridView2.DataSource = DataTable
        cn.Close()
        Dim i As Integer
        Dim j As Integer
        Dim k As Boolean
        k = False
        For i = 0 To DataGridView2.RowCount - 2
            For j = i + 1 To DataGridView2.RowCount - 1
                If DataGridView2.Rows.Item(i).Cells.Item(0).Value = DataGridView2.Rows.Item(j).Cells.Item(0).Value Then
                    MessageBox.Show("شماره داده تكراري است ")
                    k = True
                End If
            Next
        Next
        If k = False Then
            cn.Open()
            'Insert
            DataAdapter.InsertCommand = New SqlCommand("INSERT INTO dade2 VALUES(@iddade,@namedade,@vahedeandazegiri)", cn)
            DataAdapter.InsertCommand.Parameters.AddWithValue("@iddade", GetType(Integer)).SourceColumn = DataGridView2.Rows(0).Cells(0).Value
            DataAdapter.InsertCommand.Parameters.AddWithValue("@namedade", GetType(String)).SourceColumn = DataGridView2.Rows(0).Cells(1).Value
            DataAdapter.InsertCommand.Parameters.AddWithValue("@vahedeandazegiri", GetType(String)).SourceColumn = DataGridView2.Rows(0).Cells(2).Value
            'Update
            DataAdapter.UpdateCommand = New SqlCommand("UPDATE dade2 SET iddade=" & DataGridView2.Rows(0).Cells(0).Value & ", namedade = " & DataGridView2.Rows(0).Cells(1).Value & ", vahedeandazegiri = " & DataGridView2.Rows(0).Cells(1).Value & " WHERE iddade = " & DataGridView2.Rows.Item(i).Cells.Item(0).Value, cn)
            DataAdapter.UpdateCommand.Parameters.AddWithValue( DataGridView2.Rows(0).Cells(0).Value, SqlDbType.Int).SourceColumn = "iddade"
            DataAdapter.UpdateCommand.Parameters.AddWithValue( DataGridView2.Rows(0).Cells(1).Value, SqlDbType.Text).SourceColumn = "namedade"
            DataAdapter.UpdateCommand.Parameters.AddWithValue( DataGridView2.Rows(0).Cells(2).Value, SqlDbType.Text).SourceColumn = "vahedeandazegiri"
            DataAdapter.Update(DataTable)
            cn.Close()
            'Dade2TableAdapter.Update(ProjectDataSet2.dade2)
            MessageBox.Show("اطلاعات با موفقيت به ثبت رسيد ")
            Button9.Enabled = True
        End If
    End Sub
mostafaaa
دوشنبه 08 مهر 1387, 19:32 عصر
خوب معلومه، شما کانکشنت رو دوباره ایجاد کردی، دیتاستت رو دوباره ازنو پر کردی ، طبیعی که هیچ اتفاقی نباید بیفته.
کدی که برات نوشتم باید به همون شکل استفاده کنی.
bahar2008
سه شنبه 09 مهر 1387, 12:58 عصر
آخه دوست عزيز من كدهاي شما رو عينا همون دفعه اول در برنامم گذاشتم ولي به همون خطايي كه هميشه مي ديدم برخوردم و بريا همين به اين صورت نوشتم 
خطايي كه مي گيره خيلي عجيبه آخه ديتا گريد من 3 ستون داره و با اينكه من ستون سوم رو ويرايش مي كنم پيغام خطاي error syntax از متن درون ستون دومم مي گيره :اشتباه: 
من دوباره هم مثل دفعه اول كدهاي شما رو عينا همونجاهايي كه گذاشتيد قرار دادم ولي بازهم به همين error syntax ها برخوردم :ناراحت:
mostafaaa
سه شنبه 09 مهر 1387, 19:36 عصر
من اون کدها رو قبل از اینکه بزارم تستشون کردم و مشکلی نداشت. ولی اگه دوست داشتین برنامتون رو بزارین تا کدهاتون رو بررسی کنم .
bahar2008
یک شنبه 14 مهر 1387, 11:51 صبح
من خيلي كدهاي ديگه رو هم امتحان كردم ولي باز هم همون پيغام خطاي syntax error رو ميده :ناراحت: 
وقتي برانمه رو خط به خط هم اجرا كردم دستور sql رو به راحتي انجام مي ده ولي به محض اينكه به cmd.execute مي رسه اون پيغام خطا رو مي ده . 
من در بانكم براي فيلد نام داده ( كه در برنامه خطاي syntax error مي گيره از اين قسمت ) 50 كاراكتر تعريف كردم در حالي كه اون چيزي كه وارد كردم كمتر از 50 كاراكتر هست و به نظر شما احتمال خطاي syntax error به خاطر همين فاصله هايي كه داره نيست؟ به خاطر اينكه من كمتر از 50 كاراكتر وارد كردم اين خطا رو مي گيره؟
البته در هر صورت من كد برنامم رو براتون حتما مي ذارم چون خودم كه به هيچ نتيجه اي نرسيدم :ناراحت:
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.