PDA

View Full Version : حرفه ای: رنگ کردن یک سلول با چند رنگ متفاوت



araz_pashazadeh
سه شنبه 03 بهمن 1391, 10:37 صبح
با عرض سلام و خسته نباشید خدمت دوستان.
چطوری میشه یک سلول دیتاگرید را بیشتر از یک رنگ، رنگ آمیزی کرد؟
مثلا نصف سلول قرمز و نصف دیگش سبز باشه؟

daneshjo90
سه شنبه 03 بهمن 1391, 10:59 صبح
:لبخند: مگه میخوای مداد رنگی بسازی ؟
والاه من دیدم هر سلول یه رنگ باشه ولی هر سلول چند رنگ رو از شما میشنوم

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

موفق باشی

plus
سه شنبه 03 بهمن 1391, 12:55 عصر
باید رویداد CellPainting مربوط به DataGridView رو هندل کنید و اونجا هر طوری بخواین میتونید سلول رو رسم کنید.

araz_pashazadeh
سه شنبه 03 بهمن 1391, 17:39 عصر
من از رویداد CellPainting استفاده کردم ولی مشکل من اینجاست بیشتر از یک رنگ نمی تونم بدم.
چطوری میشه برای پشت زمینه سلول دو رنگ تخصیص داد؟
از چه ابجکتی میشه استفاده کرد؟

khokhan
سه شنبه 03 بهمن 1391, 19:17 عصر
من از رویداد CellPainting استفاده کردم ولی مشکل من اینجاست بیشتر از یک رنگ نمی تونم بدم.
چطوری میشه برای پشت زمینه سلول دو رنگ تخصیص داد؟
از چه ابجکتی میشه استفاده کرد؟

سلام برهمگی

دقیقا نمی دونم منظورتون چیه ولی من تونستم اینو بسازم :لبخند:

موفق باشین

plus
سه شنبه 03 بهمن 1391, 19:26 عصر
ازین کد هم میتونید ایده بگیرید.البته برای مثال این کد رو نوشتم، وگرنه صد در صد بهینه نیست.

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == 0 && e.ColumnIndex == 0)
{
if ((e.PaintParts & DataGridViewPaintParts.Background) == DataGridViewPaintParts.Background)
{
Rectangle firstPart = new Rectangle(e.CellBounds.Location.X,
e.CellBounds.Location.Y,
e.CellBounds.Width / 2,
e.CellBounds.Height);

Rectangle secondPart = new Rectangle(e.CellBounds.Location.X + e.CellBounds.Width / 2,
e.CellBounds.Location.Y,
e.CellBounds.Width / 2,
e.CellBounds.Height);

e.Graphics.FillRectangle(Brushes.Red, firstPart);
e.Graphics.FillRectangle(Brushes.Blue, secondPart);
e.Paint(e.ClipBounds, e.PaintParts & ~DataGridViewPaintParts.Background);
e.Handled = true;
}
}
}

khokhan
سه شنبه 03 بهمن 1391, 19:37 عصر
ازین کد هم میتونید ایده بگیرید.البته برای مثال این کد رو نوشتم، وگرنه صد در صد بهینه نیست.

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == 0 && e.ColumnIndex == 0)
{
if ((e.PaintParts & DataGridViewPaintParts.Background) == DataGridViewPaintParts.Background)
{
Rectangle firstPart = new Rectangle(e.CellBounds.Location.X,
e.CellBounds.Location.Y,
e.CellBounds.Width / 2,
e.CellBounds.Height);

Rectangle secondPart = new Rectangle(e.CellBounds.Location.X + e.CellBounds.Width / 2,
e.CellBounds.Location.Y,
e.CellBounds.Width / 2,
e.CellBounds.Height);

e.Graphics.FillRectangle(Brushes.Red, firstPart);
e.Graphics.FillRectangle(Brushes.Blue, secondPart);
e.Paint(e.ClipBounds, e.PaintParts & ~DataGridViewPaintParts.Background);
e.Handled = true;
}
}
}


تشکر می کنم از آقای plus

اینم نمونه عملی از کد ایشون والبته از نمونه من خیلی بهتر شد

khokhan
سه شنبه 03 بهمن 1391, 19:44 عصر
با اجازه از دوست خوبمون آقای araz_pashazadeh

منم یه سوالی داشتم

حالا اگه خواستیم سلول دیتاگرید با داشتن شرایط خاص رنگ عوض کنه

مثلا دانش آموزانی که نمره شون پایین تر از 10 است رو بارنگ قرمز نشون بده

چه می کنیم

plus
سه شنبه 03 بهمن 1391, 19:53 عصر
با فرض اینکه نمره از نوع double باشه توی همون هندلر مربوط به CellPainting

if (e.ColumnIndex == 0 && e.RowIndex >= 0 && e.Value != null && e.Value != DBNull.Value && (double)e.Value < 10.0)
{
// Custom Paint
}

البته دو موضوع وجود داره.استفاده از CellPainting بهتره به عنوان آخرین راه انتخاب بشه.مثل این کاری که دوستمون خواستن بکنن.بهتره از ویژگی های Style سلول استفاده بشه (در صورت امکان.
موضوع دیگه اینکه من پیشنهاد میکنم کلا دنبال رنگ کردن سلول ها نرین چون دردسر و پیچیدگی و شرایط خاص زیاد داره...

araz_pashazadeh
چهارشنبه 04 بهمن 1391, 18:49 عصر
اول تشکر می کنم از شما دوست عزیز من خیلی دنبالش گشته بودم ولی به نتیجه نرسیده بودم.
دوست عزیز این همون کاری بود که من میخواستم انجام بدم ولی میشه کاری کرد که تعداد تقسیمات سلول داینامیک باشه؟
یعنی در هنگام اجرای برنامه تعین بشه که سلول چند رنگ باشه یا تک رنگ؟
در واقع می خوام تعداد رنگهای سلول متناسب با تعداد کاربر متفاوت باشه.

plus
چهارشنبه 04 بهمن 1391, 19:55 عصر
اول تشکر می کنم از شما دوست عزیز من خیلی دنبالش گشته بودم ولی به نتیجه نرسیده بودم.
دوست عزیز این همون کاری بود که من میخواستم انجام بدم ولی میشه کاری کرد که تعداد تقسیمات سلول داینامیک باشه؟
یعنی در هنگام اجرای برنامه تعین بشه که سلول چند رنگ باشه یا تک رنگ؟
در واقع می خوام تعداد رنگهای سلول متناسب با تعداد کاربر متفاوت باشه.
بله من فقط یک نمونه گذاشتم که ناحیه سلول رو دو قسمت میکرد و با رنگ مورد نظر پر میکرد.شما باید اون ناحیه رو به n قسمت تقسیم کنید...

araz_pashazadeh
شنبه 07 بهمن 1391, 17:04 عصر
بله من فقط یک نمونه گذاشتم که ناحیه سلول رو دو قسمت میکرد و با رنگ مورد نظر پر میکرد.شما باید اون ناحیه رو به n قسمت تقسیم کنید...
دوست عزیز من در تقسیم کردن ناحیه مشکل ندارم مشکل من کلاس Brushes هستش چون من خودم برای کابرام رنگ مشخص کردم و کد رنگ را دارم ولی نمیشه به کلاس Brushes کد رنگ داد ویا برای تابع FillRectangle از کلاس Color استفاده کرد.
چطوری کد رنگ را به این تابع ارسال کنم؟