PDA

View Full Version : سوال: آپدیت اطلاعات داخل دیتاگریدویو



bahram91
دوشنبه 12 تیر 1391, 19:43 عصر
سلام دوستان،آقایون خانوما به خدا کل نتو زیرو رو کردم یک کد صریح و شفاف برای ثبت تغییرات دیتاگریدویو از طریق یک دکمه روی فرم پیدا نکردم،من برنامه نویس نیستم و فعلا برای پروژه اینو نیاز دارم شماها که شکر خدا اینقدر حرفه ای هستید تورو خدا این کار منو راه بندازید.
یک جدول با چندتا فیلد دارم دارم که اطلاعاتش داخل دیتاگرید ویو نمایش داده شده یک دکمه آپدیت دارم حالا میخوام روش کلیک کنم بعد تغییراتی که تو دیتاگریدویو انجام شده داخل جدولم ذخیره بشه
به خدا خیلی فوریه کمکم کنید.

veniz2008
دوشنبه 12 تیر 1391, 21:54 عصر
سلام مهندس،خیلی ساده است،فلش کوچک بالای گرید رو بزن و مطمئن شو گزینه enable editing فعال باشه،حالا تو رویداد RowLeave مربوط به گرید کدهای زیر رو قرار بده:

SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=testgrid;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("update student set id2 =@id2,name=@name,family=@family where id =@id", con);
cmd.Parameters.AddWithValue("@id",Convert.ToInt32( dataGridView1.CurrentRow.Cells[0].Value));
cmd.Parameters.AddWithValue("@id2", dataGridView1.CurrentRow.Cells[1].Value);
cmd.Parameters.AddWithValue("@name", dataGridView1.CurrentRow.Cells[2].Value);
cmd.Parameters.AddWithValue("@family", dataGridView1.CurrentRow.Cells[3].Value);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("update successfull");
تذکر : در اینجا id واسه جدول من کلید بوده و همونطوری که دیدید توی کدها کلید رو تغییر ندادم(میتونید ستون کلید رو موقع ویرایش مخفی کنید تا مشکلی پیش نیاد ولی اگه نشونش دادی مواظب باش مقدارش رو تغییر ندی)
دستورات بالا کارش اینه که شما تغییرات رو در ستون های گرید انجام میدید( به جز ستون id ) و زمانیکه میخواید به سطر بعدی برید تغییرات انجام شده درون بانک ذخیره میشه.
موفق باشی دوست گرامی.

veniz2008
دوشنبه 12 تیر 1391, 22:11 عصر
اگرم خواستی داخل دکمه به یکباره تمام سطرهای گرید رو آپدیت کنی داخل دکمه کدهای زیر رو بزار:

int t = dataGridView1.Rows.Count;

for (int i = 0; i < t ; i++)
{

SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=testgrid;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("update student set id2 =@id2,name=@name,family=@family where id =@id", con);
cmd.Parameters.AddWithValue("@id",Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value));
cmd.Parameters.AddWithValue("@id2", dataGridView1.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@name", dataGridView1.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@family", dataGridView1.Rows[i].Cells[3].Value);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("update successfull");
}
البته این کدها، کدهای بهینه ای نیستن ولی کار شما رو راه میندازه،حالا دیگه از هر روشی دوست داشتی استفاده کن.
موفق باشی.

bahram91
سه شنبه 13 تیر 1391, 12:26 عصر
ممنونم دوست عزیز خدا خیرت بده،فقط یه جا گیج میزنم اونم اینه که id,id2 یعنی چی؟،من id دارم ولی id2که توفیلدهام ندارم تو گرید ویو هم ندارم
من جدولم فیلدهاش اینه:
publisher_id
publisher_name
publisher_address
حالا داخل گریدویو عنوان ستونهام هم همینه:
publisher_id
publisher_name
publisher_address
حالا اگه لطف کنی مثالی که خودت زدی از طریق button با این فیلدها برام بنویسی تا بفهمم چیکار کردی
ممنونم

veniz2008
سه شنبه 13 تیر 1391, 15:47 عصر
سلام دوست عزیز، من توی جدولم چهارتا فیلد دارم،نام فیلدهام اینا هستن: id,id2,name,family .
id از نوع int هست و بقیه فیلدها از نوع رشته ای هستن. اینا فقط یه اسم هستن ، شما باید به جای فیلدهایی که من در دستورات بالا گذاشتم فیلدهای جدول خودت رو بزاری (همون 3 فیلدی که داری)، جلوی where هم میای فیلد مورد نظرت رو میزاری (معمولا برای اپدیت کلید رو میزارن ، واسه شما میشه publisher_id ).
یادت نره کلید رو یا مخفی کن (این کار خیلی بهتره) اگرم اصرار به نمایشش توی گرید داری نباید مقدارش رو تغییر بدی(میتونی خاصیت read only اونو true کنی تا فقط نمایش داده بشه ولی قابل تغییر نباشه،فکر کنم این راهکار بهتر از مخفی کردنش باشه).
موفق باشی.

bahram91
چهارشنبه 14 تیر 1391, 16:09 عصر
مرسی از شما همه چیز okشد
آپدیت رو انجام میده فقط یه ارور میده که هرچی گشتم نتونستم درستش کنم:
The parameterized query '(@publisher_id nvarchar(50),@publisher_name nvarchar(50),@publis' expects the parameter '@publisher_id', which was not supplied.
نوع فیلدهای جدولمم به این شکله:
id:nvarchar50
name:nvarchar50
address:nvarchar200
ممنونم

veniz2008
چهارشنبه 14 تیر 1391, 16:38 عصر
به نظر میرسه مقدار publisher_id رو ارسال نمیکنی، کدت رو کامل بذار تا دوستان دقیق بگن مشکلش کجاست.

bahram91
پنج شنبه 15 تیر 1391, 16:12 عصر
دوستان من میخوام کدمو بزارم ولی سایت این ارورو میده چیکار کنم؟:
Thank you for posting! Your post will not be visible until a moderator has approved it for posting.

veniz2008
پنج شنبه 15 تیر 1391, 16:34 عصر
دکمه # مربوط به ادیتور رو بزن(منظور از ادیتور همین جاییه که داخلش تایپ میکنیم) و کدهات رو بین اون بزار.

bahram91
جمعه 16 تیر 1391, 14:00 عصر
دوستان سایت نمیزاره من کدمو بزارم حتی با تگ CODE و تگ CSHARP همون ارورو میده من چیکار کنم؟

veniz2008
جمعه 16 تیر 1391, 17:42 عصر
شما کدت رو در قالب یه فایل word ضمیمه کن، دکمه "حالت پیشرفته" رو بزن و بعدش اون دکمه سنجاق مانند رو بزن (همون که کنار undo هستش)، فایلت رو ضمیمه کن تا دوستان ببینن. یا میتونی از کدهات عکس بگیری و دکمه پایین redo رو بزنی و عکس رو آپلود کنی.(عکس بگیری بهتره).

bahram91
جمعه 16 تیر 1391, 19:32 عصر
8930289301دوستان عکس کد و ارور رو گذاشتم،نکته جالب اینه که باوجود ارور دادن عمل آپدیت رو انجام میده
ممنونم اگه کمکم کنید

ali_md110
جمعه 16 تیر 1391, 20:02 عصر
سلام دوست من
ابتدا پارامترهاتون رو بیرون از حلقه یک بار بدون مقدار تعریف و درون حلقه اونها رو مقدار دهی کنید
با این کاری که شما میکنید با هر بار اجرای حلقه یک پارمتر همنام میسازید و این یک خطای اسکیول پرتاب میشود
کد صحیح واشتون ارسال کردم سوال داشتید پیام بگذارید

SqlConnection con = new SqlConnection("رشته اتصال");
SqlCommand cmd = new SqlCommand("دستور اسکیول",con);
con.Open();
cmd.Parameters.Add("@publisher_id", SqlDbType.Int);
//سایر پارامترها را هم ابتدا بدون مقدار تعریف کنید
int t=dataGridView1.RowCount;
for(int i= 0 ;i<=t;i++)
{
cmd.Parameters["@publisher_id"].Value = dataGridView1.Rows[i].Cells[0].Value;
//سایر پارامترها را هم اینجا مقدار دهی کنید
cmd.ExecuteNonQuery();
}

bahram91
شنبه 17 تیر 1391, 15:02 عصر
89344اینم کد جدیدم به همراه ارور
توروخدا کمکم کنید گیر کردم.
89343

veniz2008
شنبه 17 تیر 1391, 15:17 عصر
دوست عزیز اون خط مربوط به sqlconnection و sqlcommand توی سیستمت به همون شکل هستند؟(یعنی زیرش خط قرمز هست؟)

bahram91
شنبه 17 تیر 1391, 17:25 عصر
نه دوست عزیز،اون دو دستور برای اینکه تو عکس جا بشن به 4خط شکوندم، اونا درستند
کمک کنید کمک کنید

veniz2008
شنبه 17 تیر 1391, 17:55 عصر
شرط حلقه for رو اینطوری تغییر بده و دوباره تست کن( وقتی اندیس از 0 شروع میشه دیگه نباید مساوی رو بذاری)

for(int i= 0 ;i<t;i++)

bahram91
شنبه 17 تیر 1391, 20:36 عصر
فرقی نکرد همون ارورو داد،یعنی دوستان دیگه نظری نمیدن؟

veniz2008
شنبه 17 تیر 1391, 21:00 عصر
رو فلش کوچک بالای گرید کلیک کن و مطمئن شو که گزینه Enable Adding تیک نداشته باشه( اگر تیک خورده بود تیکش رو بردار).حلقه for هم به همون صورتی که در بالا گفتم بذار.

bahram91
شنبه 17 تیر 1391, 21:03 عصر
دوستان من این ارورو تو نت سرچ زدم ولی کامل نگرفتم مشکل چیه چون مثالاشون خیلی فرق میکنه
شما که حرفه ای تر هستید یه نگاهی به این بندازید:
http://www.google.com/#hl=en&output=search&sclient=psy-ab&q=the+parameterized+query+expects+the+parameter+wh ich+was+not+supplied&oq=The+parameterized+query+expects+the+parameter+w hich+was+not+supplied.&gs_l=hp.3.0.0i7j0j0i7j0i30l2j0i5i30l3j0i5i10i30j0i 5i30.14346.34387.1.43120.80.33.0.0.0.7.1878.11760. 6-4j1j4.9.0...0.0.9x-C3Hb2VxU&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=3ddc6ee7f452a242&biw=1024&bih=478

bahram91
شنبه 17 تیر 1391, 21:10 عصر
آقا محمد این کارو انجام دادم ارور نداد و برنامه تموم شد ولی اجازه ویرایش فیلدها رو نمیده

aslan
شنبه 17 تیر 1391, 21:18 عصر
Type
Publisher_Id
از نوع
NVarChar هستش ؟

bahram91
شنبه 17 تیر 1391, 21:24 عصر
بله از نوع nvarchar هستش

veniz2008
شنبه 17 تیر 1391, 22:35 عصر
دوست عزیز کد رو واست نوشتم و تست کردم،همونطور که گفتم گزینه Enable Adding باید تیکش رو برداری و گزینه Enable Editing تیکش باید زده شده باشه.خط اول مربوط به کانکشن رو با توجه به سیستم خودت تنظیم کن.

SqlConnection conn = new SqlConnection("Data Source = (local);Initial Catalog = database1;Integrated Security = True");
conn.Open();
int t = dataGridView1.Rows.Count;
for (int i = 0; i < t; i++)
{
SqlCommand cmd = new SqlCommand("update tblpublisher set publisher_name =@publisher_name,publisher_address =@publisher_address where publisher_id =@publisher_id", conn);
cmd.Parameters.AddWithValue("@publisher_id", dataGridView1.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@publisher_name", dataGridView1.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@publisher_address", dataGridView1.Rows[i].Cells[2].Value);
cmd.ExecuteNonQuery();
}
conn.Close();
}

aslan
شنبه 17 تیر 1391, 22:36 عصر
سلام

وقتی
datagridview1.Rows[i].Cells[0].Value
برابر با null میشه این error پیش میاد
میتونی ( مثلا ) به این شکل بنویسیش


for (int i = 0; i <= datagridview1.RowCount - 1; i++)
{
cmd.Parameters["@publisher_id"].Value = datagridview1.Rows[i].Cells[0].Value;
cmd.Parameters["@publisher_Name"].Value = datagridview1.Rows[i].Cells[1].Value;
cmd.Parameters["@publisher_Address"].Value = datagridview1.Rows[i].Cells[2].Value;
if (datagridview1.Rows[i].Cells[0].Value != null)
cmd.ExecuteNonQuery();
}

bahram91
دوشنبه 19 تیر 1391, 22:09 عصر
دوست عزیز آقا محمد با تشکر از شما برنامه کامل اجرا میشه و مشکلی پیش نمیاد ولی با برداشتن تیک adding اجازه ویرایش فیلدها رو نمیده

bahram91
دوشنبه 19 تیر 1391, 22:33 عصر
÷آقا اصلان عزیز از شما هم ممنونم
کد شما رو هم تست کردم
این هم تصویر ارور کد شما
89470
http://barnamenevis.org/images/misc/pencil.png

veniz2008
دوشنبه 19 تیر 1391, 23:34 عصر
برداشتن تیک گزینه Enabel Adding هیچ ربطی به ویرایش نداره،شما باید گریدت به شکل زیر باشه:
89474

bahram91
دوشنبه 19 تیر 1391, 23:54 عصر
قسمت choose data source حتما باید none باشه؟،من جدولم رو انتخاب کردم و فیلدهام بالای دیتا گرید ویو نشان داده میشه وقتی none میزارم عنوان فیلدها نشون داده نمیشه
قسمت های دیگه درستند

veniz2008
سه شنبه 20 تیر 1391, 00:01 صبح
نه عزیز، من عادت دارم با کدنویسی گرید رو پر کنم شما بصورت ویزاردی این کار رو انجام دادی. فرقیبا هم ندارن.

bahram91
سه شنبه 20 تیر 1391, 00:12 صبح
دوستان عزیز از همگی ممنونم مشکلم حل شد
تشکر مخصوص از آقا محمد عزیز

bahram91
سه شنبه 20 تیر 1391, 00:19 صبح
دوستان عزیز از همتون ممنونم مشکلم حل شد.
تشکر مخصوص از آقا محمد عزیز
خیلی زحمت کشیدید