PDA

View Full Version : راهنمایی برای update سرهای datagridview



khz-web1
شنبه 30 شهریور 1387, 03:41 صبح
سلام

از دوستان خواهش می کنم که یه نمونه کد برای Update سطرهای datagridview بزارند ...(جستجو هم کردم چیزی یافت نکردم)
در واقع من یه دکمه و یک ابزار datagridview بر روی فرم خودم دارم که میخوام کاربر سطر خودشو ویرایش کنه و با زدن روی دکمه، سطر کاملا ویرایش بشود...

با تشکر

khz-web1
شنبه 30 شهریور 1387, 05:21 صبح
این کد رو خودم نوشتم ....


Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Chr(34) & "D:\te1st\WindowsApplication1-test\bin\Debug\person.mdb" & Chr(34))
Dim sql As String = "UPDATE register SET firstname = @firstname, lastname = @lastname,namefather=@namefather WHERE codperson = @codperson"
Dim ds As New DataSet



Dim da As OleDbDataAdapter = New OleDbDataAdapter()
da.UpdateCommand = New OleDbCommand(sql, con)
da.UpdateCommand.Parameters.AddWithValue("@firstname", GetType(String)).SourceColumn = "firstname"
da.UpdateCommand.Parameters.AddWithValue("@lastname", GetType(String)).SourceColumn = "lastname"
da.UpdateCommand.Parameters.AddWithValue("@namefather", GetType(String)).SourceColumn = "namefather"
da.UpdateCommand.Parameters.AddWithValue("@codperson", GetType(Integer)).SourceColumn = "codperson"

con.Open()
da.Update(ds, "register")
con.Close()
DataGridView1.DataSource = ds
DataGridView1.DataMember = "register"
End Sub


ولی از خط فوق ارور میگیره


da.Update(ds, "register")

عکس ارور
http://i35.tinypic.com/sgimxi.gif

می خواستم بدونم دلیل اومدن این ارور از چیه .... دوستان راه حل دیگه ای هم دارن ...
با تشکر

Behrooz_CS
شنبه 30 شهریور 1387, 23:44 عصر
دوست عزیز کد شما ایراد اساسی داره و با راهنمایی کسی به جایی نمیرسی چون مفاهیم اساسی و پایه برنامه نویسی پایگاه داده را نمی دانی مثلاً اینطور که پیداست اصلاً از ساختار DataSet اطلاعی نداری :لبخندساده:

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

موفق باشی

khz-web1
یک شنبه 31 شهریور 1387, 00:30 صبح
دوست عزیز 1- من ADO.NET رو تا حدودی کار کردم .... 2- کد من رو دوستان تست کردن و روی سیستم اونا جواب داد ، ولی روی سیستم من با این ارور مواجه شد...
حالا از دوستان اگه کسی باشه که بتونه بگه ایراد از کجاست ممنون میشم ....

Behrooz_CS
یک شنبه 31 شهریور 1387, 00:41 صبح
ببینید برای این میگم از ساختار DataSet اطلاعی ندارید چون این مشکل مال اینه که شما می خواهید جدولی را در دیتاست آپدیت کنید که اصلاً وجود ندارد ، پس اول جدول register را در دیتا ست Add کنید بعد ادامه کار

ds.Tables.Add

khz-web1
یک شنبه 31 شهریور 1387, 12:54 عصر
اینکارو کردم... اینبار از این خط ارور میگیره


DataGridView1.DataMember = "table1"

متن ارورش
Child list for field table1 cannot be created.
اگه یکم بیشتر کمکم کنی ممنون میشم

shafi21
یک شنبه 31 شهریور 1387, 13:58 عصر
به جای خط 4 بنویس: dim da as new oledbdataadapter(sql,con)

khz-web1
یک شنبه 31 شهریور 1387, 20:33 عصر
از دوستان اگه کسی یه نمونه پروژه داره لطفا بزاره ... اینجوری فایده نداره ....
به زبان vb.NET باشه که چه بهتر...
با تشکر

EbiPenMan
یک شنبه 31 شهریور 1387, 23:25 عصر
از دوستان اگه کسی یه نمونه پروژه داره لطفا بزاره ... اینجوری فایده نداره ....
به زبان vb.NET باشه که چه بهتر...
با تشکر

سلام دوست عزيز

اين كدايي كه من مي زارم خودم دارم استفاده مي كنم و حتما جواب ميده


'اضافه كردن كلاس مورد نياز براي كار با ديتابيس اكسس
Imports System.Data.OleDb

'شروع كلاس فرم
Public Class frm_Show

'تعريف يك ديتاست براي نگه داري اطلاعات ديتابيس
Dim objDs_frmDiskShow As New DataSet

'تعريف يك متغيير رشته اي و مقدار دهي آن (Val_Database_Path=آدرس ديتابيست هست) براي استفاده كانكشنت
Dim strCon_frmDiskShow As String = "provider=microsoft.jet.oledb.4.0;data source=" & Val_Database_Path

'تعريف كانكشن و مقدار دهي آن با همان متغييري كه تعريف كرده بودي(نوع ديتابيس با آدرس آن) براي اتصال به بانك اطلاعاتي(ديتابيس)
Dim objConn_frmDiskShow As New OleDbConnection(strCon_frmDiskShow)

'تعريف يك ديتا آداپتر براي (مبادله اطلاعات بين ديتاست و ديتابيس)
Dim objAdapter_frmDiskShow As New OleDbDataAdapter

'براي استفاده از ديتا آداپتر شما به يك كامند جهت دادن كد هاي SQL نياز داريد
Dim Comm_frmDiskShow As New OleDbCommand

'ست كردن كامند
Comm_frmDiskShow.Connection = objConn_frmDiskShow
Comm_frmDiskShow.CommandText = strCon_frmDiskShow

'ست كردن كامند به ديتاآداپتر
objAdapter_frmDiskShow.SelectCommand = Comm_frmDiskShow
Dim custCB As OleDbCommandBuilder = New OleDbCommandBuilder(objAdapter_frmDiskShow)

'باز كردن كانكشن و اتصال آن به ديتابيس
objConn_frmDiskShow.Open()

'دراين جا به جاي tbl_Programs بايد نام جدولي كه مي خواهيد در ديتاگريد پرشود را بنويسيد
objAdapter_frmDiskShow.SelectCommand.CommandText = "Select * from tbl_Programs"

'حال پر كردن ديتاست با جدول مورد نظر
objAdapter_frmDiskShow.Fill(objDs_frmDiskShow, "tbl_Programs")

'ست كردن ديتاست به ديتاگريد
DataGridView1.DataSource = objDs_frmDiskShow.Tables("tbl_Programs").DefaultView

'در آخر هم بستن كانكشن
objConn_frmDiskShow.Close()

نكته: در اين روش شما دائم به ديتابيستون وصل نيستيد و فقط در موقع پر كردن ديتاست و آپديت اون

حالا اين كد براي ذخيره تغييراتي هست كه در ديتاگريدت دادي( در روال كليك دكمت بزارش)
objAdapter_frmDiskShow.Update(objDs_frmDiskShow, "tbl_Programs")

در ضمن اگر جدولت داراي پرايمري كي (Primary key) نباشه خطا ميگيره موقع ذخيره تغييرات


اميدوارم مشكلت حل شده باشه و بشه

khz-web1
دوشنبه 01 مهر 1387, 05:46 صبح
سلام

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