PDA

View Full Version : کمبوباکس در دیتاگریدویو



raziyehbazargan
دوشنبه 16 مرداد 1391, 12:21 عصر
سلام

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

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

میخوام با زدن دکمه "ثبت" Id گزینه های انتخابی هر کدوم از کمبوها و همینطور چک باکسم در جدول واسطم ذخیره بشه...

این د رو نشوتم اما درست کار نمیکنه و پیغام خطا میده
#
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["cmb_Position"].DisplayIndex)
{
objDamageCntr.DamagePosition_Id = int.Parse(cmb_Position.DisplayIndex.ToString());
}
if (e.ColumnIndex == dataGridView1.Columns["cmb_Damage"].DisplayIndex)
{
objDamageCntr.Damage_Id = int.Parse(cmb_Damage.DisplayIndex.ToString());
}
if (e.ColumnIndex == dataGridView1.Columns["Is_Services"].DisplayIndex)
{
objDamageCntr.Is_Services = true;
}
}
#

کجای کارم اشتباه است؟؟؟ ممنو نمیشم راهنمایی کنید

raziyehbazargan
دوشنبه 16 مرداد 1391, 12:43 عصر
90870 اینم دیتاگرید من

raziyehbazargan
دوشنبه 16 مرداد 1391, 13:29 عصر
کسی نیست راهنمایی کنه؟؟

homayon_azizi
دوشنبه 16 مرداد 1391, 14:20 عصر
سلام دوست عزیز
اولا کدت رو تو رخداد CellContentClick بنویس. سپس if هاتو به این تغییر بده ببین جواب میگیری؟



if (e.ColumnIndex == dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString().Trim())

برای بعدیا هم یکی به cell[] اضافه کن. موفق باشی

raziyehbazargan
سه شنبه 17 مرداد 1391, 08:44 صبح
سلام دوست عزیز
اولا کدت رو تو رخداد CellContentClick بنویس. سپس if هاتو به این تغییر بده ببین جواب میگیری؟
برای بعدیا هم یکی به cell[] اضافه کن. موفق باشی

ممنون از پاسختون دوست عزیز

تفاوت CellClick , CellContentClick چیه؟
و اینکه
if (e.ColumnIndex == dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString().Trim())



columnIndex یه مقدار int داره اما قسمت دوم String و این تیکه کد اصلا کار نمیکنه

raziyehbazargan
سه شنبه 17 مرداد 1391, 12:47 عصر
من این قطعه کد رو نو شتم و درست جواب میده البته فقط برای اندیس 0 اما اگه بخوام با زدن باتن در سطر دوم دوباره درج صورت بگیره باید جیکار کنم یه جلقه گذاشتم و اما ارور میده ودرست کار نمیکنه


private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if(e.RowIndex<0)
return;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
objDamageCntr.DamagePosition_Id = Convert.ToInt32(dataGridView1.Rows[0].Cells["cmb_Position"].Value);
objDamageCntr.Damage_Id = Convert.ToInt32(dataGridView1.Rows[0].Cells["cmb_Damage"].Value);
objDamageCntr.Is_Services = Convert.ToBoolean(dataGridView1.Rows[0].Cells["Is_Services"].Value);
objDamageCntr.DamageEvent_Id = 13;
}

و برای ذخیره هم یه کلاس نوشتم و در صورتیکه روی باتن کلیک بشه اون اجرا میشه


private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["btn_Add"].Index && e.Button == MouseButtons.Left)
{
objDamageCntr.Save();
}

}

اگه به این صورت بنویسم پیغام خطا میده


private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if(e.RowIndex<0)
return;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
objDamageCntr.DamagePosition_Id = Convert.ToInt32(dataGridView1.Rows[i].Cells["cmb_Position"].Value);
objDamageCntr.Damage_Id = Convert.ToInt32(dataGridView1.Rows[i].Cells["cmb_Damage"].Value);
objDamageCntr.Is_Services = Convert.ToBoolean(dataGridView1.Rows[i].Cells["Is_Services"].Value);
objDamageCntr.DamageEvent_Id = 13;
}


دوستان اگه ممکنه کمک کنید کارم واقعا گیره این مضووع هست

homayon_azizi
سه شنبه 17 مرداد 1391, 12:51 عصر
ممنون از پاسختون دوست عزیز

تفاوت CellClick , CellContentClick چیه؟
و اینکه
if (e.ColumnIndex == dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString().Trim())



columnIndex یه مقدار int داره اما قسمت دوم String و این تیکه کد اصلا کار نمیکنه


فرقشون تو اینه که وقتی شما یه دکمه ثبت رو تو دیتاگردید درست کردین پس یکی از مقادیر دیتاگرید محسوب میشه. پس وقتی شما CellContentClick رو انتخاب میکنی یعنی برنامه رو تو مقدار سلول دیتاگرید می نویسی.

homayon_azizi
سه شنبه 17 مرداد 1391, 12:56 عصر
میشه error برنامتو بذاری ببینم اررورش چیه؟

homayon_azizi
سه شنبه 17 مرداد 1391, 13:04 عصر
دوست عزیز من خودم دکمه Delete رو تو CellContentClick نوشتم هیچ مشکلی هم نداشت. شما وقتی یه بار بنویسی دیگه لازم نیست بندازیش تو for.

کدت رو به تغییر بده ببین جواب میده؟ البته تو CellContentClick بنویس.




objDamageCntr.DamagePosition_Id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["cmb_Position"].Value);
objDamageCntr.Damage_Id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["cmb_Damage"].Value);
objDamageCntr.Is_Services = Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["Is_Services"].Value);
objDamageCntr.DamageEvent_Id = 13;
objDamageCntr.Save();

raziyehbazargan
سه شنبه 17 مرداد 1391, 13:08 عصر
میشه error برنامتو بذاری ببینم اررورش چیه؟

90903
این پیغام خطاش هست

homayon_azizi
سه شنبه 17 مرداد 1391, 13:14 عصر
90903
این پیغام خطاش هست

خوب شما اگه اونو تبدیل میکردین درست میشد.
به این صورت :


if (e.ColumnIndex == Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value())

raziyehbazargan
سه شنبه 17 مرداد 1391, 13:15 عصر
دوست عزیز من خودم دکمه Delete رو تو CellContentClick نوشتم هیچ مشکلی هم نداشت. شما وقتی یه بار بنویسی دیگه لازم نیست بندازیش تو for.

کدت رو به تغییر بده ببین جواب میده؟ البته تو CellContentClick بنویس.

مرسی از راهنماییتون دوست عزیز

من کد رو تغییر دادم اما بعد از هر باز زدن دکمه باتن محتویات سطر اول رو در دیتابیسم درح میکنه

برای مشخص کردن باتنی که کلیک میشه آیا کدی که نوشتم درسته؟؟ من روی باتن دوم در سطر دوم هم که کلیک میکنم همون محتویات سطر اول رو در تیبلم درج میکنه


private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["btn_Add"].Index && e.Button == MouseButtons.Left)
{
objDamageCntr.Save();
}

}

raziyehbazargan
سه شنبه 17 مرداد 1391, 13:18 عصر
خوب شما اگه اونو تبدیل میکردین درست میشد.
به این صورت :


if (e.ColumnIndex == Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value())


اینکارو انجام دادم اما باز هم خطا میگیره

homayon_azizi
سه شنبه 17 مرداد 1391, 13:20 عصر
اگه میشه اون قسمت از برنامت رو اینجا ضمیمه کن تا روش کار کنم. موفق باشی

raziyehbazargan
سه شنبه 17 مرداد 1391, 13:26 عصر
دوست عزیز من خودم دکمه Delete رو تو CellContentClick نوشتم هیچ مشکلی هم نداشت. شما وقتی یه بار بنویسی دیگه لازم نیست بندازیش تو for.

کدت رو به تغییر بده ببین جواب میده؟ البته تو CellContentClick بنویس.


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


private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
objDamageCntr.DamagePosition_Id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["cmb_Position"].Value);
objDamageCntr.Damage_Id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["cmb_Damage"].Value);
objDamageCntr.Is_Services = Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["Is_Services"].Value);
objDamageCntr.DamageEvent_Id = 13;
objDamageCntr.Save();
}

homayon_azizi
سه شنبه 17 مرداد 1391, 13:31 عصر
من به این صورت نوشتم و درج ها درست انجام میشه به جز این مورد که سطر اول دوبار در تیبلم درج میشه


privatevoid dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
objDamageCntr.DamagePosition_Id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["cmb_Position"].Value);
objDamageCntr.Damage_Id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["cmb_Damage"].Value);
objDamageCntr.Is_Services = Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["Is_Services"].Value);
objDamageCntr.DamageEvent_Id = 13;
objDamageCntr.Save();
}




فکر کنم دلیلش اینه که شما این کد رو پاک نکردی.




privatevoid dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["btn_Add"].Index && e.Button == MouseButtons.Left)
{
objDamageCntr.Save();
}
}