PDA

View Full Version : آيا امكان همزمان add كردن و ويرايش كردن ديتا گريدويو وجود دارد؟



bahar2008
چهارشنبه 03 مهر 1387, 09:49 صبح
سلام دوستان خوبم
من ديتا گريدي دارم كه به بانكم bind شده و اطلاعات بانك رو نمايش ميده حالا من مي خوام كاربر بتونه در اين ديتا گريد هم اطلاعاتش رو اضافه كنه و هم بتونه اطلاعات قبلي كه وارد كرده رو ويرايش كنه به طور همزمان
من اول از اين كد استفاده كردم ولي اين كد اجازه ويرايش رو نميداد و پيغام خطاي خيلي بزرگي ميگرفت :ناراحت:


Setande2TableAdapter.Update(ProjectDataSet2.setand e2)

ولي بعدا كه با اين كد كار كردم هم باز هم امكان ويرايش رو نميداد :ناراحت:



cmd.CommandText = "UPDATE setande2 SET namesetande= .....

با اينكه هر دو گزينه اجازه add و ويرايش خود ديتاگريد رو هم تيك زدم ولي باز هم فايده يا نداشت:ناراحت:
لطفا دوستان راهنماييم كنن كه چه كدي بايد بنويسم كه همزمان هم بتونم add كنم و هم بتونم ويرايش رو در ديتا گريد انجام بدم

bahar2008
پنج شنبه 04 مهر 1387, 10:54 صبح
یعنی تا بحال هیچ کسی این 2 کار رو به طور همزمان انجام نداده؟ :ناراحت:
یعنی هیچ کی نمی دونه که چطوری می شه این 2 کار رو همزمان با هم انجام داد؟:ناراحت:

mostafaaa
پنج شنبه 04 مهر 1387, 11:10 صبح
آخه دوست من یه خط کد گزاشتی انتظار داری چی بهت جواب بدن.
کد اتصال به بانکت رو بزار. یا اگه با ویزارد به بانک وصل شدی بگو.
در ضمن در مورد این موضوع بارها بحث شده.

bahar2008
پنج شنبه 04 مهر 1387, 12:03 عصر
این کد اتصال به بانک هست



Me.Setande2TableAdapter.Fill(Me.ProjectDataSet2.se tande2)



من توی سایت زیاد گشتم و مطلبی که در این زمینه باشه پیدا نکردم برای همین تاپیک جدید زدم

می خوام زمانیکه کاربر در زمان add کردن یا ویرایش کردن یکی از فیلدها رو پر نمی کنه به جای اینکه در بانک null نوشته بشه خط تیره (- ) قرار بده که در دیتاگرید هم خط تیره نشون داده بشه

ALI TT
پنج شنبه 04 مهر 1387, 13:23 عصر
تغییر Null به ( - ) در دیتا گرید :

برای اینکه به جای نول در دیتا گرید ( - ) بنویسه ، باید از قسمت پروپرتی وارد > Default Cell Style بشی و سپس مقدار NullValue را به - تغییر بدی.

تغییر Null به ( - ) در بانک اطلاعاتی ( دیتا بیس) :

برای اینکه در بانک خودت به جای خالی ماندن Cellها ( نول ) یه کارکتر رو قرار بدی ، باید مقدار Default Value رو به همون کارکتر قرار بدی .

ali_md110
پنج شنبه 04 مهر 1387, 13: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, 11:51 صبح
ممنونم از راهنامييتون دوست عزيز
ولي من چون با sql كار يم كنم اين دستوراتي كه شما نوشتيد رو بعضي هاشو نداره و من هم كه شبيه دستورات sql نوشتم باز هم پيغام خطا داد :ناراحت:

arashgold
شنبه 06 مهر 1387, 17:47 عصر
من هم ممنون میشم SQL آن را بگین

mostafaaa
شنبه 06 مهر 1387, 21: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, 12: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, 18:32 عصر
خوب معلومه، شما کانکشنت رو دوباره ایجاد کردی، دیتاستت رو دوباره ازنو پر کردی ، طبیعی که هیچ اتفاقی نباید بیفته.
کدی که برات نوشتم باید به همون شکل استفاده کنی.

bahar2008
سه شنبه 09 مهر 1387, 11:58 صبح
آخه دوست عزيز من كدهاي شما رو عينا همون دفعه اول در برنامم گذاشتم ولي به همون خطايي كه هميشه مي ديدم برخوردم و بريا همين به اين صورت نوشتم
خطايي كه مي گيره خيلي عجيبه آخه ديتا گريد من 3 ستون داره و با اينكه من ستون سوم رو ويرايش مي كنم پيغام خطاي error syntax از متن درون ستون دومم مي گيره :اشتباه:
من دوباره هم مثل دفعه اول كدهاي شما رو عينا همونجاهايي كه گذاشتيد قرار دادم ولي بازهم به همين error syntax ها برخوردم :ناراحت:

mostafaaa
سه شنبه 09 مهر 1387, 18:36 عصر
من اون کدها رو قبل از اینکه بزارم تستشون کردم و مشکلی نداشت. ولی اگه دوست داشتین برنامتون رو بزارین تا کدهاتون رو بررسی کنم .

bahar2008
یک شنبه 14 مهر 1387, 10:51 صبح
من خيلي كدهاي ديگه رو هم امتحان كردم ولي باز هم همون پيغام خطاي syntax error رو ميده :ناراحت:
وقتي برانمه رو خط به خط هم اجرا كردم دستور sql رو به راحتي انجام مي ده ولي به محض اينكه به cmd.execute مي رسه اون پيغام خطا رو مي ده .
من در بانكم براي فيلد نام داده ( كه در برنامه خطاي syntax error مي گيره از اين قسمت ) 50 كاراكتر تعريف كردم در حالي كه اون چيزي كه وارد كردم كمتر از 50 كاراكتر هست و به نظر شما احتمال خطاي syntax error به خاطر همين فاصله هايي كه داره نيست؟ به خاطر اينكه من كمتر از 50 كاراكتر وارد كردم اين خطا رو مي گيره؟
البته در هر صورت من كد برنامم رو براتون حتما مي ذارم چون خودم كه به هيچ نتيجه اي نرسيدم :ناراحت: