PDA

View Full Version : مشکلی عجیب در دیتا گرید



mohammad-gh
شنبه 04 آبان 1387, 11:40 صبح
با سلام
مشکل من کمی ساده است اما جالبه بدونم که از چه چیزی ناشی میشه؟
من دیتا گریدم رو با یک دیتا ست از اطلاعات پر می کنم، وقتی یک سطر از اطلاعات رو به صورت دستی ویرایش می کنم و بانک رو آپدیت می کنم همه چیز درست است.
مشکل وقتی است که من توسط برنامه و کد می خواهم سطری را ویرایش کنم ، در این موقع است که با آپدیت بانک(دیتا ست) هیچ تغییری ذخیره نمیشود.
مد ویرایش را هم program کردم ولی درست نشد.

mostafaaa
شنبه 04 آبان 1387, 12:17 عصر
دوست من به جای اینکه شما مشکلت رو اینجوری توضیح بدی و ما هم واسه جواب دادن حدث بزنیم ، کدت رو بزار تا بتونیم جواب قطعی بهت بدیم.
موفق باشی

mohammad-gh
شنبه 04 آبان 1387, 12:21 عصر
این کد ریختن اطلاعات به دیتا گرید


dsdg1.Clear()
Dim objCommand1 As SqlCommand = New SqlCommand()
dg1DataAdapter = New SqlDataAdapter()
dg1DataAdapter.SelectCommand = objCommand1
dg1DataAdapter.SelectCommand.Connection = objConnection
dg1DataAdapter.SelectCommand.CommandText = "select * from accdoc where idac=@idval"
objCommand1.Parameters.AddWithValue("@idval", Val(id.Text))
objConnection.Open()
dg1DataAdapter.Fill(dsdg1, "accdoc")
objConnection.Close()
dg1.AutoGenerateColumns = False
dg1.DataSource = dsdg1
dg1.DataMember = "accdoc"

این هم کد ویرایش


dg1.CurrentRow.Cells.Item(2).Value = Val(id.Text.Trim)
dg1.CurrentRow.Cells.Item(2).Value = Val(acccode.Text.Trim)
dg1.CurrentRow.Cells.Item(3).Value = acctitle.Text.Trim


این هم کد آپدیت


Dim cb1 As New SqlCommandBuilder(dg1DataAdapter)
objConnection.Open()
dg1DataAdapter.Update(dsdg1, "accdoc")
objConnection.Close()
CMessageBox.Show("ویرایش سند با موفقیت انجام شد")

mostafaaa
شنبه 04 آبان 1387, 18:23 عصر
بازم کدت رو کامل نزاشتی ، ولی خوب بگذریم ، من با این کدی که برات میزارم این کار رو به راحتی انجام میدم و هیچ مشکلی هم ندارم.

Imports System.Data.SqlClient
Public Class Form1
Const ConnectionString As String = _
"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|" _
& "\TestDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim Connection As SqlConnection
Dim Command As SqlCommand
Dim DataAtapter As SqlDataAdapter
Dim DataSet As New DataSet
Dim CommandBuilder As SqlCommandBuilder
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Connection = New SqlConnection(ConnectionString)
Me.Command = New SqlCommand("SELECT * FROM Table1", Connection)
Me.DataAtapter = New SqlDataAdapter(Command)
Me.CommandBuilder = New SqlCommandBuilder(DataAtapter)
Me.DataAtapter.Fill(DataSet, "Table1")
Me.DataGridView1.DataSource = DataSet
Me.DataGridView1.DataMember = "Table1"
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
Me.DataGridView1.Rows(1).Cells(1).Value = "Test"
End Sub
Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
Me.DataAtapter.Update(Me.DataSet, "Table1")
End Sub
End Class

odiseh
یک شنبه 05 آبان 1387, 09:02 صبح
mostafaaa
وقتی از DataSet استفاده می کنی، تا حالا توی سیستم هات به DirtyRead برخورد نکردی. چرا Connected کار نمی کنی؟ اگه تو فاصله ای که اطلاعات رو ریختی داخل DataSet و توی Grid داری یه رکورد رو ویرایش می کنی، یه کاربر دیگه اصلا اون رکورد رو حذف کرده باشه چی؟ میشه راهکارتو برای این موردا عنوان کنی؟
ممنون

mostafaaa
یک شنبه 05 آبان 1387, 09:19 صبح
من توی این کد دیتابیس رو StandAlone در نظر گرفتم. در مورد اینکه یه کاربر دیگه همزمان از DB استفاده کنه هم قبلا مفصلا توی همین سایت بحث شده.
ولی ساده ترین راهش اینه که قبل از Update محتویات DB رو چک کنیم تا از آخرین تغییراتش با خبر بشیم.

mohammad-gh
یک شنبه 05 آبان 1387, 11:17 صبح
آقا مصطفی من مشکلم حل نشد .
البته اشکال فکر نکنم در کدی باشه که نوشتم چون کد شما هم نوع دیگری ریختن اطلاعات و سپس آپدیت است . (با این همه من اون رو هم امتحان کردم)

بازم کدت رو کامل نزاشتی
نمی دونم منظورتون دیگه چه کدی است.
امامن مشکلم رو اینطور توضیح می دم تا اگر کسی باهاش مواجه شده بهتر درک کنه:
وقتی اطلاعات سطری رو از دیتا گرید به وسیله کد و از درون برنامه عوض کنم و سپس دکمه ویرایش رو بزنم چیزی ویرایش نمی شود(ثبت نمی شود)، اما اگر همین کار را بکنم و قبل از زدن دکمه ویرایش روی همان سطری که ویرایش انجام شده کلیک کنم این سطر آپدیت و با زدن دکمه ویرایش اطلاعات ثبت میشود.کمی عجیب نیست.
منتظر نطرات شما هستم.

mostafaaa
یک شنبه 05 آبان 1387, 11:26 صبح
دوست من ،
من هم میگم با کد بالا من این کار کردم و مشکلی هم نبود.
با این کد دیتا گرید رو ادیت کردم

Me.DataGridView1.Rows(1).Cells(1).Value = "Test"
و با این هم آپدیتش کردم.

Me.DataAtapter.Update(Me.DataSet, "Table1")

odiseh
یک شنبه 05 آبان 1387, 15:01 عصر
در مورد اینکه یه کاربر دیگه همزمان از DB استفاده کنه هم قبلا مفصلا توی همین سایت بحث شده.


اگه لطف کنی و آدرس تاپیکو بدین ممنون میشم.

mostafaaa
یک شنبه 05 آبان 1387, 17:49 عصر
http://barnamenevis.org/forum/showthread.php?p=289966#post289966
http://barnamenevis.org/forum/showthread.php?p=307739#post307739
http://barnamenevis.org/forum/showthread.php?p=322020#post322020
http://barnamenevis.org/forum/showthread.php?p=386549#post386549
http://barnamenevis.org/forum/showthread.php?t=97767
http://barnamenevis.org/forum/showthread.php?p=427954
http://barnamenevis.org/forum/showthread.php?p=518694#post518694
http://barnamenevis.org/forum/showthread.php?p=525739#post525739
http://barnamenevis.org/forum/showthread.php?p=544767#post544767
و در آخر این رو هم بخونید بد نیست.
http://www.code-magazine.com/article.aspx?quickid=0605031&page=3

mohammad-gh
پنج شنبه 09 آبان 1387, 10:27 صبح
متاسفانه مشکل من حل نشد.
بازهم احتمال تغییراتی در دیتا گرید رو میدم!
به هر حال مشکل از هر کجاست از طریق کد تنها زمانی اطلاعات آپدیت میشه که یک بار هم دستی به سطر ویرایش شده اشاره وانتخابش کنی؟