PDA

View Full Version : ویرایش رکورد جاری دیتا گرید



sepidehdam
جمعه 16 بهمن 1388, 22:18 عصر
با سلام خدمت همه دوستان عزیز
vb2008
اطلاعات یک جدول در یک دیتاگرید بر روی یک فرم در حال نمایش است
دیتا گرید هم به دیتا ست بایند شده است
حال می خواهیم رکورد جاری دیتا گرید را در فرم دیگری ویرایش کنیم و پس از ثبت اطلاعات و برگشتن به دیتاگرید، اطلاعات دیتاگرید هم بروز شده باشد و بر روی همان رکورد جاری هم قرار داشته باشیم
اگر ممکنه راهنمایید کنید.

sepidehdam
شنبه 17 بهمن 1388, 23:37 عصر
چرا کسی جوابی نداده

davood-ahmadi
یک شنبه 18 بهمن 1388, 00:10 صبح
من معمولا از این روش استفاده می کنم که اول اطلاعات را با کامند Insert می کنم :

Dim MdbCnn As New OleDb.OleDbConnection(GetPathMdb)
Dim StrQ As String = "Insert into Person (IdPer, Lname, Fname, Ghesmat, PerDate, PerDesc) values ( " & Me.txtIdPerson.Text & ", '" & Me.txtLName.Text & "', '" & Me.txtFName.Text & "', '" & Me.cmbGhesmat.Text & "' , " & I & " , '" & Me.txtDesc.Text & "')"
MdbCnn.Open()
Dim Cmd As New OleDb.OleDbCommand(StrQ, MdbCnn)
Cmd.ExecuteNonQuery()
MdbCnn.Close()
و بعد اطلاعات را به فرم قبلی به دیتاست اضافه می کنم :

Dim Dr1 As DataRow
Dr1.Item("IdPer") = Me.txtIdPerson.Text
Dr1.Item("Lname") = Me.txtLName.Text
Dr1.Item("Fname") = Me.txtFName.Text
Dr1.Item("Lname") = Me.txtLName.Text
Dr1.Item("Ghesmat") = Me.cmbGhesmat.Text
FrmMain.Ds.Tables("tbl1").Rows.Add(Dr1)
Dr1.EndEdit()
FrmMain.Ds.Tables("tbl1").AcceptChanges()

sepidehdam
یک شنبه 18 بهمن 1388, 22:00 عصر
با تشکر
جواب شما برای حالتی که رکورد جدیدی را بخواهیم ثبت کنیم درست است
اما اگر بخواهیم رکورد جاری را ویرایش کنیم به چه صورت است

ali_md110
یک شنبه 18 بهمن 1388, 23:48 عصر
برای ارسال داده بین دو فرم از delegate استفاده کنید

sepidehdam
دوشنبه 19 بهمن 1388, 23:37 عصر
با تشکر از تمامی دوستان عزیز که پاسخ می دهند.
من نمی دانم delegate چکار می کند اما خواهشا این راهنمایی رابکنید تا مشکل من حل شود من بخاطر گیر کردن در این مشکل به ظاهر ساده از ادامه راه برنامه نویسی مانده ام.
مشکل من این است:
من در یک فرم یک دیتا گراید قرار داده ام و در زیر آن دو دکمه یکی برای رکورد جدید و دیگری برای ویرایش رکورد جاری. حال می خواهم وقتی کاربر بر روی یک رکورد خاص قرار گرفت با زدن کلید «ویرایش» تمام فیلدهای رکورد جاری را در فرم دیگری ببیند و اطلاعات را ویرایش کرده و پس از تایید فرم ویرایش بسته شده و به فرم اصلی که دیتا گرید نمایش داده میشود برگردد. سوال اول اینکه با توجه به اینکه رکورد ویرایش شده در بانک ذخیره میگردد (با adapter.update) تغییرات اعمال شده بر روی رکورد جاری چگونه در دیتاگرید هم نمایش داده شود. یکی از دوستان گفته بود مجدد دیتاگرید را با دستور select و dataset پر کنید امام مشکل اینجاست که مکان نما دوباره به اولین رکورد دستا گرید می رود نه رکوردی که کاربر درحال ویرایش ان بوده است. سوال دوم اینکه من فیلدهای رکورد جاری را باید از دیتا گرید بخوانم و در فرم دیگر در textbox ها قرار دهم یا دیتا ست. چون تا وقتی دیتا گرید بر اساس یکی از فیلدهایش مرتب نشده باشد اشاره گر دیتاگرید و دیتاست یکی هستند اما وقتی دیتا گرید با کلیک بر روی یکی از فیلدهایش مرتب شده دیگر اشاره گر دیتا گرید و دیتاست یکی نیستند. راه حل چیست.

sepidehdam
دوشنبه 19 بهمن 1388, 23:39 عصر
از دوستان گرامی ممنون میشم اگر مشکل مرا با یک برنامه ساده بصورت عملی آموزش دهند. یعنی برنامه دو فرم داشته باشد.

karim orooji
سه شنبه 20 بهمن 1388, 10:15 صبح
این برنامه رو دانود کن به جوابت خواهی رسید
اطلاعات رو هم در گرید و هم در تکس باکس
بعد هم سریعاً رفرش میشه کارهایی که اعمال کردی

http://barnamenevis.org/forum/showthread.php?t=204149

موفق باشی

sepidehdam
جمعه 23 بهمن 1388, 22:29 عصر
ضمن تشکر از شما دوست عزیز karim orooji
برنامه تان را دیدم
اولا من تا حالا استفاده از bindingsource را نمی دانستم اگه ممکنه توضیح بدهید که نقش ان در برنامه نویسی بانک اطلاعاتی چیست ؟ و منظور از کد زیر چیست
Me.txt_resh.DataBindings.Add("text", bs1, "rashtah", True, DataSourceUpdateMode.OnValidation)

دوما برنامه شما فیلدها را در همان فرمی نشمان می دهد که دیتا گرید وجود دارد. اشکال این روش اینه که کاربر وقتی در حال وارد کردن اطلاعات رکورد جدید هست یا وقتی رکورد جاری را ویرایش می کند اگر بنا به هر دلیلی بر روی دکمه های ویرایش، اضافه کن یا ثبت یاحتی بر روی دیتا گرید، کلیک کند برنامه دچار خطا میشود یا ممکن است تعداد فیلدها زیاد باشند. بنابراین منطقی است که اطلاعات فیلدها برای ویرایش یا جدید در فرم دیگری وارد شود و فرمی که دیتا گرید در آن قرار دارد موقتا غیر فعال گردد تا کاربر از فرم ثبت یا ویرایش برگردد.
حال سوال من اینه که چگونه فیلدهای رکورد جاری را در فرم دیگر نمایش دهیم و پس از ثبت رکورد جدید یا ویرایش رکورد جاری به فرمی که دیتاگرید قرار دارد برگردیم و دیتا گرید همان رکورد جدید یا ویرایش شده را با تغییرات اعمال شده نشان دهد. بدون اینکه دوباره دیتاگرید را پر کنیم چون در این حالت دیتا گرید همیشه اولین رکورد را نشان می دهد.
دوست عزیز ببینید افرادی که در این گونه تاپیکها یا وب سایتها یا ویلاگها توضیحاتی ارائه میدهند، دقیقا همان مطالب کتابها ی برنامه نویسی بانک اطلاعاتی را بصورت مشابه تکرار می کنند که مثلا چگونه اطلاعات جداول را در دیتا گرید نشان دهیم یا کد ثبت رکورد جدید یا کد ویرایش رکورد این است و همه هم تکراری است. اما هیج جا این سوالاتی که میشود و مخصوصا مواردی که در برنامه نویسی حرفه ای بانکهای اطلاعاتی وجود دارد و روابط بین اشیا مختلف و یا ارتباط بین اشیاء موجود در فرمهای مختلف یک برنامه پایگاه داده کسی توضیحی نداده است. بنابر این اگر شما سوالات مرا جواب دهید من حاضرم تمام نتایج را جمع آوری ودر یک تاپیک قرار دهم تا دیگر این همه سوالات تکراری پرسیده نشود.
با همه این حرفها من یک برنامه ساده نوشتم که ضمیمه می باشد. خواهش می کنم این برنامه را ببینید و کدهای مربوط به قسمت مربوط به ویرایش رکورد جاری را بنیوسید و برنامه مرا کامل نمایید.
ممنون

karim orooji
شنبه 24 بهمن 1388, 00:10 صبح
با سلام به دوست گرامی

اولا من تا حالا استفاده از bindingsource را نمی دانستم اگه ممکنه توضیح بدهید که نقش ان در برنامه نویسی بانک اطلاعاتی چیست ؟ و منظور از کد زیر چیست
این ایتم در بانکهای اطلاعاتی برای اتصال اون شی به پایگاه داده به کمک dataset میباشد


دوست عزیز ببینید افرادی که در این گونه تاپیکها یا وب سایتها یا ویلاگها توضیحاتی ارائه میدهند، دقیقا همان مطالب کتابها ی برنامه نویسی بانک اطلاعاتی را بصورت مشابه تکرار می کنند که مثلا چگونه اطلاعات جداول را در دیتا گرید نشان دهیم یا کد ثبت رکورد جدید یا کد ویرایش رکورد این است و همه هم تکراری است. اما هیج جا این سوالاتی که میشود و مخصوصا مواردی که در برنامه نویسی حرفه ای بانکهای اطلاعاتی وجود دارد و روابط بین اشیا مختلف و یا ارتباط بین اشیاء موجود در فرمهای مختلف یک برنامه پایگاه داده کسی توضیحی نداده است. بنابر این اگر شما سوالات مرا جواب دهید من حاضرم تمام نتایج را جمع آوری ودر یک تاپیک قرار دهم تا دیگر این همه سوالات تکراری پرسیده نشود.
مطمئن باشید کسی نمیاد تمام زیروبم اطلاعات مربوط به یه چیزی رو به صورت رایگان در اختیار کسی قرار بده

دوما برنامه شما فیلدها را در همان فرمی نشمان می دهد که دیتا گرید وجود دارد. اشکال این روش اینه که کاربر وقتی در حال وارد کردن اطلاعات رکورد جدید هست یا وقتی رکورد جاری را ویرایش می کند اگر بنا به هر دلیلی بر روی دکمه های ویرایش، اضافه کن یا ثبت یاحتی بر روی دیتا گرید، کلیک کند برنامه دچار خطا میشود یا ممکن است تعداد فیلدها زیاد باشند. بنابراین منطقی است که اطلاعات فیلدها برای ویرایش یا جدید در فرم دیگری وارد شود و فرمی که دیتا گرید در آن قرار دارد موقتا غیر فعال گردد تا کاربر از فرم ثبت یا ویرایش برگردد.
این برنامه ای که من گذاشتم یک نمونه مثالی است فقط برای اشنایی دوستان
در اینده دور یا نزدیک یک برنامه در حال تکمیله درست شد در سایت خواهم گذاشت تا دیگر دوستان هم
استفاده کنند

sepidehdam
یک شنبه 25 بهمن 1388, 23:07 عصر
با تشکر از همه دوستان
جناب آقای داود احمدی ممکنه از طریق ایمیل بتونم سوالاتمو با شما در میان بذارم

sepidehdam
دوشنبه 26 بهمن 1388, 21:23 عصر
با تشکر از دوست عزیز کریم عروجی
اولا اگر قراره کسی اطلاعاتشو مجانی در اختیار دیگران قرار نده خوب لزومی نداره تو این سایتها، مجانی بیاد و جواب سوالاتو بده.
ثانیا برنامه شما رو دیدم باز هم دو مشکل اساسی داره یکی اینکه برنامه تمام رکوردها را یکسان ذخیره میکنه من هم نفهمیدم مشکلش کجاست؟ دوما شما از tetxbox اضافی فرم اول استفاده کرده اید و این کار چون با بایند کردن همراهه هر تغییری در textbox ها باعث میشه بلافاصله در دیتاست ذخیره بشه و اگر کاربر اشتباه کرده باشد غیر قابل برگشت است.
ثالثا من هنوز جواب سوالم را نگرفته ام
ببینید من میخواهم رکورد جاری در فرم دوم در textbox ها نشان داده بشه بدون بایند کردن و پس از برگشت به فرم اول رکورد ویرایش شده نمایش داده شود و همان رکورد هم انتخاب شده باشد.
یک سوال دیگه هم اینه که چطور میتوان در دیتا گراید یک مورد خاص (مثلا فیلد خاصی) را مورد جستجو قرار دهیم (نه فیلتر کردن) و بتوان به موردهای مشابه دیگر آن جستجو نیز پرش کرد.
دو

software engineering
سه شنبه 27 بهمن 1388, 09:46 صبح
من يه برنامه با vb.net نوشتم كه با access ارتباط داره. كد درج رو نوشتم ولي دستور camand.executenonquery خطا داره. خواهشا بهم كمك كنيد. اين پروژه مهندسي نرم افزارمه. خيلی برام مهمه

karim orooji
سه شنبه 27 بهمن 1388, 10:48 صبح
ثانیا برنامه شما رو دیدم باز هم دو مشکل اساسی داره یکی اینکه برنامه تمام رکوردها را یکسان ذخیره میکنه من هم نفهمیدم مشکلش کجاست؟ دوما شما از tetxbox اضافی فرم اول استفاده کرده اید و این کار چون با بایند کردن همراهه هر تغییری در textbox ها باعث میشه بلافاصله در دیتاست ذخیره بشه و اگر کاربر اشتباه کرده باشد غیر قابل برگشت است.
با سلام به دوست گرامی
این ذخیره کردن در بانک اگه دقت کرده باشید
هر چی که تکس ها موجود رو در بانک ذخیره میکنه
تکس باکس هایی که در فرم یک من استفاده کردم برای مقدار های که در فرم اولی موجود در تکس ها رو بریزم در تکس باکس های فرم دومی چطور دیگه میشه که به مستقیم مقدار های ردیفی که در گرید انتخاب شده رو در تکس های فرم ویرایش بریزیم

این کار چون با بایند کردن همراهه هر تغییری در textbox ها باعث میشه بلافاصله در دیتاست ذخیره بشه و اگر کاربر اشتباه کرده باشد غیر قابل برگشت است.[/
مشکلس این نوع ذخیره همینه کاراکتر های موجودیدر تکس های که در تکس باکس هایی که به بانک متصله رو سریعا ذخیره میکنه





من يه برنامه با vb.net نوشتم كه با access ارتباط داره. كد درج رو نوشتم ولي دستور camand.executenonquery خطا داره. خواهشا بهم كمك كنيد. اين پروژه مهندسي نرم افزارمه. خيلی برام مهمه

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

Farzaad
جمعه 30 بهمن 1388, 17:14 عصر
قابل توجه sepidehdam
موقعي كه ديتا گريد رو به يه ديتابيس بايند مي كنيد بلافاصله خود VB يه خط به فرم لود برنامه اضافه ميكنه مثل اين :
Me.MyTblTableAdapter.Fill(Me.MyDataSet.MyTbl)

حالا هر جا كه فكر ميكنيد اون كارو انجام ميديد كه بريد ديتاگريد رو ببينيد براي اون رويداد همين خط رو اضافه كنيد
مثلا كليك روي يكي از تب كنترل ها، يا كليك روي يك دكمه ويا ......
بلافاصله ديتا گريد مقادير جديد رو نشان خواهد داد