PDA

View Full Version : سوال: تغییر رنگ سطر انتخاب شده در گریدویو



veniz2008
چهارشنبه 07 تیر 1391, 18:16 عصر
سلام،من کلی جستجو کردم جوابهایی رو هم دیدم ولی به نتیجه نرسیدم.
من توی گریدم یه چک باکس دارم که میخوام هر رکورد رو که تیک زدم اون سطر رنگی بشه و اگه تیک رو برداشتم رنگش به حالت اولیه برگرده،من توی رویداد CellFormatting کدهای زیر رو امتحان میکنم ولی درست کار نمیکنه، اینم کدی که نوشتم:

int count = dataGridView1.Rows.Count;
for (int i = 0; i < count; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[4].Value) == true)
dataGridView1.AlternatingRowsDefaultCellStyle.Back Color = Color.Green;
}


همچنین از کد زیر نیز استفاده کردم،اینم جواب نمیده:

dataGridView1.DefaultCellStyle.BackColor = Color.Green;

samadblaj
چهارشنبه 07 تیر 1391, 20:26 عصر
سلام بفرما :

dataGridView1 .CurrentRow.DefaultCellStyle.BackColor = Color.Aqua;

veniz2008
چهارشنبه 07 تیر 1391, 22:06 عصر
ممنون از جوابتون ولی اینم مشکل داره،اولین سطر رو که تیک میزنم رنگی نمیشه،وقتی هم تیک رو بر میدارم همچنان رنگی باقی میمونه.

samadblaj
چهارشنبه 07 تیر 1391, 22:27 عصر
ممنون از جوابتون ولی اینم مشکل داره،اولین سطر رو که تیک میزنم رنگی نمیشه،وقتی هم تیک رو بر میدارم همچنان رنگی باقی میمونه.

این سوالتون نگارشش اشتباست دوباره توضیح دهید.

veniz2008
چهارشنبه 07 تیر 1391, 22:37 عصر
اولین رکورد رو که تیک میزنم رکورد رنگی نمیشه، از دومین رکورد که تیک میزنم رنگی میشه(یعنی رکورد دوم رو که تیک میزنم رنگی میشه، رکورد سوم هم رنگی میشه و ...)،حالا وقتی تیک هر رکورد رو برمیدارم همونطور رنگی باقی میمونه، پس 2 مشکل وجود داره : 1. اولین رکورد رو که تیک میزنم رنگی نمیشه 2. هر رکوردی که رنگی میشه وقتی تیکش رو برمیدارم همچنان رنگی میمونه. دو تا عکس میزارم تا کامل متوجه منظورم بشید.تشکر از توجهتون.
عکس1:
88854
عکس2:
88855

samadblaj
چهارشنبه 07 تیر 1391, 22:48 عصر
خوب ببینید index از 0 شروع میشه row بابر بشه باصفر.

خوب سوال دومتونم با یه شرط if میشه (سعی کنید از for ech استفاده کنید) درستش کرد اگه selected.true بود خصیصه از بین بره... .

veniz2008
چهارشنبه 07 تیر 1391, 23:13 عصر
خوب منم تعداد سطرهای گرید رو بدست آوردم و حلقه for رو هم از صفر شروع کردم،من کدها رو توی پست اول گذاشتم،لطف کنید کدها رو تصحیح کنید واسم،ممنون

Mahmoud.Afrad
چهارشنبه 07 تیر 1391, 23:16 عصر
selectionmode را روی fullRowselect بذارید تا کاربر متوجه اینکه ابتدا تغییر رنگ صورت نمیگیره نشه
نیازی به حلقه نیست چون اگر تعداد سطرها زیاد باشه با هر تغییر کل سطرها پیمایش میشه. بهتره فقط همون سطر دستکاری بشه
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 1 && Convert.ToBoolean(dataGridView1.CurrentCell.Value) == true)
dataGridView1.CurrentRow.DefaultCellStyle.BackColo r = Color.Yellow;
else if (e.ColumnIndex ==1 && Convert.ToBoolean(dataGridView1.CurrentCell.Value) == false)
dataGridView1.CurrentRow.DefaultCellStyle.BackColo r = Color.White;
}

veniz2008
پنج شنبه 08 تیر 1391, 09:42 صبح
این کد اونی نیست که من میخوام،این کد ربطی به انتخاب با چک باکس نداره، درواقع اگر با کیبورد هم روی هر رکورد بریم بازم رنگی میشه (حتی اگه تیک چک باکس هم زده نشه)،من کدی رو میخوام که فقط زمانیکه رکورد تیک خورد اون سطر رنگی بشه و تازمانیکه تیکش برداشته نشه همونطور رنگی باقی بمونه.

lanser
پنج شنبه 08 تیر 1391, 09:53 صبح
سلام دوستان من یه برنامه با vb نوشتم که در یک ردیف چند کادر دارم و در ان کادرها اعدادی را میزنم و پرینت میگیرم اما وقتی طول این اعداد زیاد میشود جای پرینت انها هم عوض میشود و از کادر مورد نظر بیرون میزند حالا کسی میدونه من باید چیکار کنم ضمن اینکه میخوام از اطلاعاتی رو که میزنم در کادرها با زدن یک دکمه ثبت و پرینت شود و در اخر گزارش گیری کنم از انها گزارشگیریو اصلا بلد نیستم ممنون میشم اگر کسی بتونه کمکم کنه با نهایت تشکر.

Mahmoud.Afrad
پنج شنبه 08 تیر 1391, 09:56 صبح
خوب تکه کد رو من تا تست نکنم این جا نمیزارم. اشکال کار هم اینه که شما کد رو عینا کپی کردی و احتمالا تغییر ندادید. باید به جای اون 1 ها اندیس ستونی که چک باکس هست رو قرار بدید و اگر هم اندیس رو نمیدونید میتونید از نام ستون استفاده کنید به صورت زیر
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["نام ستون"].Index && Convert.ToBoolean(dataGridView1.CurrentCell.Value) == true)
dataGridView1.CurrentRow.DefaultCellStyle.BackColo r = Color.Yellow;
else if (e.ColumnIndex == dataGridView1.Columns["نام ستون"].Index && Convert.ToBoolean(dataGridView1.CurrentCell.Value) == false)
dataGridView1.CurrentRow.DefaultCellStyle.BackColo r = Color.White;
}

veniz2008
پنج شنبه 08 تیر 1391, 11:20 صبح
سلام دوستان من یه برنامه با vb نوشتم که در یک ردیف چند کادر دارم و در ان کادرها اعدادی را میزنم و پرینت میگیرم اما وقتی طول این اعداد زیاد میشود جای پرینت انها هم عوض میشود و از کادر مورد نظر بیرون میزند حالا کسی میدونه من باید چیکار کنم ضمن اینکه میخوام از اطلاعاتی رو که میزنم در کادرها با زدن یک دکمه ثبت و پرینت شود و در اخر گزارش گیری کنم از انها گزارشگیریو اصلا بلد نیستم ممنون میشم اگر کسی بتونه کمکم کنه با نهایت تشکر.
دوست عزیز اولا: اینجا تالاره #C هست نه VB ثانیا: اگر سوال متفاوتی دارید باید اول جستجو کنید اگر جوابتون پیدا نشد اونوقت "ایجاد تاپیک جدید" رو بزنی و یک تاپیک جدید بزنی نه اینکه ...
موفق باشی.

veniz2008
پنج شنبه 08 تیر 1391, 11:31 صبح
دوست عزیز مشکل تا حدودی حل شده ولی هنوز یه ایرادی داره،من میخوام به محض تیک زدن یک رکورد اون رکورد رنگی بشه (مثلا میخوام که رنگ قرمز داشته باشن)،مشکل اینجاست من هر رکورد رو که تیک میزنم اولش رنگش آبی هست(مثل حالتی که انتخاب شده باشه) وقتی رکورد بعدی رو تیک میزنم اونوقت رکورد قبلی رنگش قرمز میشه و رکورد فعلی آبی هستش،اینطوری بگم که در واقع رنگی شدن رکوردها یه مرحله عقب تر از تیک زدن رکوردها هست،اینم یه عکس تا منظورمو بهتر برسونم:
88865

Mahmoud.Afrad
پنج شنبه 08 تیر 1391, 12:31 عصر
خوب اون رنگ آبی مشخص میکنه که الان در چه سطری هستید. اگر از رنگش خوشت نمیاد به defaultcellstyle از پنجره پراپرتیز برید و selectionbackcolor رو تغییر بدید.

lanser
پنج شنبه 08 تیر 1391, 16:37 عصر
دوست عزیز اولا: اینجا تالاره #C هست نه VB ثانیا: اگر سوال متفاوتی دارید باید اول جستجو کنید اگر جوابتون پیدا نشد اونوقت "ایجاد تاپیک جدید" رو بزنی و یک تاپیک جدید بزنی نه اینکه ...
موفق باشی.

ببخشید اما نه این جواب پیدا کردم و نمیدونستم کجا باید بپرسم اگه شما میدونین کجا باید بپرسم بگین؟
بعد اینکه شما نمیدونین این مشکل چه جوری حل میشه؟

veniz2008
پنج شنبه 08 تیر 1391, 17:28 عصر
ببخشید اما نه این جواب پیدا کردم و نمیدونستم کجا باید بپرسم اگه شما میدونین کجا باید بپرسم بگین؟
بعد اینکه شما نمیدونین این مشکل چه جوری حل میشه؟
شما چون با vb نوشتید به تالار vb برید و سوالتون رو اونجا بپرسید(با نام کاربری خودتون که وارد شدید به آدرس زیر برید و "ایجاد تاپیک جدید" رو بزنید و سوالتون رو بپرسید)، موفق باشید
http://barnamenevis.org/forumdisplay.php?20-VB.NET