رنگی کردن سطر های datagrid بر اساس شرط خاص
دوستان سلام
می دونم سوالم تکراریه ولی لینکشو پیدا نکردم
می خواستم تو دیتا گریدم هر سطر با توجه به شرط خاصی دارای یه رنگ خاص! بشه
مثلاً بر اساس مقدار یه فیلد، اگر به فرض مقدار اون فیلد کمتر از 5 باشه سطر گرید آبی بشه اگر بین 5 تا 10 باشه اون سطر زرد واگه بیشتر از 10 باشه آبی بشه .
اگه ممکنه راهنماییم کنید. ممنون
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
سلام دوست من
کد
for (int index = 0; index < this.dataGrd.RowCount; index++)
{
if (this.dataGrd.Rows[index].Cells["name Field"].Value.ToString() == "مقدار")
this.dataGrd.Rows[indexer].DefaultCellStyle.BackColor = Color.Red;
}
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
براي اينكار ميتوني از حلقه استفاده كني تا بگرده و شرط مورد نظر رو پيدا كنه و در صورت درست بودن شرط رنگ رو عوض كنه
dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.Red;
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
با سلام
پاسخ دوستان دیگر هم کاملا درسته ولی من برای اینکه راحتر باشید پیشنهاد میکنم از foreach استفاده کنید که شما را از کنترل حلقه آسوده میکنه:
void set_color()
{
foreach (DataGridViewRow r in dataGridView2.Rows)
{
if (r.Cells[0].Value.ToString() == "A" || r.Cells[0].Value.ToString() == "a")
{
foreach (DataGridViewCell c in r.Cells)
{
c.Style.BackColor = System.Drawing.Color.MediumAquamarine;
}
}
else if (r.Cells[0].Value.ToString() == "B" || r.Cells[0].Value.ToString() == "b")
{
foreach (DataGridViewCell c in r.Cells)
{
c.Style.BackColor = System.Drawing.Color.LightSteelBlue;
}
}
}
}
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
نقل قول:
نوشته شده توسط
shahin_sharifi
با سلام
پاسخ دوستان دیگر هم کاملا درسته ولی من برای اینکه راحتر باشید پیشنهاد میکنم از foreach استفاده کنید که شما را از کنترل حلقه آسوده میکنه:
void set_color()
{
foreach (DataGridViewRow r in dataGridView2.Rows)
{
if (r.Cells[0].Value.ToString() == "A" || r.Cells[0].Value.ToString() == "a")
{
foreach (DataGridViewCell c in r.Cells)
{
c.Style.BackColor = System.Drawing.Color.MediumAquamarine;
}
}
else if (r.Cells[0].Value.ToString() == "B" || r.Cells[0].Value.ToString() == "b")
{
foreach (DataGridViewCell c in r.Cells)
{
c.Style.BackColor = System.Drawing.Color.LightSteelBlue;
}
}
}
}
خیلی ممنون فقط من این تابع رو بعد از بایند شدن دیتا به گرید باید فراخوانی کنم دیگه؟
در این صورت در مورد تعداد رکورد های بالا برنامه هنگ نمی کنه؟راهی نیست که همزمان با بایند کردن اطلاعات این اعمال انجام بشه؟
مثلاً بیایم سطر های دیتا ست یا دیتا تیبل رو دونه دونه تو یه حلقه بخونیم و بعد در اونجا شرایط رو بررسی کنیم و سطر ها رو رنگ کنیم؟
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
راهی برای اینکه همزمان با بایند کردن این کار رو انجام بدیم نیست؟
کلاً روش بهینه تری وجود نداره؟ برای جدولی با 5 میلیون رکورد خیلی از زمان صرف این کار میشه
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
ميتوني اول ديتا گريد رو پر كني و بعد يك PROGRESS BAR بزاري زير گريد تا اين كار را انجام بده و برنامه هنگ نكنه
و بعد VALUE شي PROGRESS BA برابر با مقدار ركوردها قرار بدي تا در زمان مناسب پر بشه
بعد از خوندن هر ركورد يك واحد به PROGRESS BA اضافه بشه
دوست عزيز راه ديگري نيست چون ديتا ست يك جدول مجازي است و خاصيت BACK COLOR نداره
مجبوري اينكار را بكني مگر اينكه ركوردها را خط به خط داخل گريد بريزي
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
نقل قول:
نوشته شده توسط
iman_lovely666
ميتوني اول ديتا گريد رو پر كني و بعد يك PROGRESS BAR بزاري زير گريد تا اين كار را انجام بده و برنامه هنگ نكنه
و بعد VALUE شي PROGRESS BA برابر با مقدار ركوردها قرار بدي تا در زمان مناسب پر بشه
بعد از خوندن هر ركورد يك واحد به PROGRESS BA اضافه بشه
دوست عزيز راه ديگري نيست چون ديتا ست يك جدول مجازي است و خاصيت BACK COLOR نداره
مجبوري اينكار را بكني مگر اينكه ركوردها را خط به خط داخل گريد بريزي
خیلی ممنونم
با BackgroundWorker این کارو انجام بدم دیگه؟
فقط دستوری که تعداد رکوردهای دیتا گرید رو بر می گردوند رو بهم میگید:بامزه::خجالت:
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
والا من با BackgroundWorker كار نكردم
ولي دستوري كه من براي برگرداندن ركوردها استفاده ميكنم اينه
DataGridView1.Row.Count;
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
نقل قول:
نوشته شده توسط
ozzy_mra
خیلی ممنونم
با BackgroundWorker این کارو انجام بدم دیگه؟
فقط دستوری که تعداد رکوردهای دیتا گرید رو بر می گردوند رو بهم میگید:بامزه::خجالت:
دوست عزیز اگر شما دیتا گرید رو به سورس بایند کنید دیتا یکباره در داخل گرید ریخته میشه ولی اگر بخواهید دونه دونه اینکار رو انجام بدید سربار بیشتری رو به سیستم تحمیل میکنید.
در مورد background worker باید بگم که شما نمی تونید استفاده کنید.چون این ابزار فقط توابع و عملیات محاسباتی رو پشتیبانی میکنه و اگر در داخل این عملیات کنترلی همچون گرید حضور داشته باشه خطا خواهد داد. شما میتونید قبل و بعد از تابع رنگی کردن یک progress bar رو نمایش و سپس مخفی کنید که کاربر در جریان عملیات قرار بگیره.
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
نقل قول:
ميتوني اول ديتا گريد رو پر كني و بعد يك PROGRESS BAR بزاري زير گريد تا اين كار را انجام بده و برنامه هنگ نكنه
progressbar فقط مامور نمایش پیشرفت یک عملیات هست و ربطی به هنگ کردن یا نکردن پروسس نداره .
اگر تعداد رکورد هاتون زیاده باید از thread ها استفاده کنید .
اما اگر تعداد کم هست :
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() == "a")
dataGridView1.Rows[e.RowIndex].Cells[0].Style.BackColor = Color.Red;
}
(البته کد بالا هم بعد از بایند شدن گرید به صورت اتوماتیک و به تعداد رکورد های دیتاسورس شما فایر میشه)
شاید ایونت بهتری برای اینکار وجود داشته باشه .
موفق باشید .
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
نقل قول:
نوشته شده توسط
shahin_sharifi
دوست عزیز اگر شما دیتا گرید رو به سورس بایند کنید دیتا یکباره در داخل گرید ریخته میشه ولی اگر بخواهید دونه دونه اینکار رو انجام بدید سربار بیشتری رو به سیستم تحمیل میکنید.
در مورد background worker باید بگم که شما نمی تونید استفاده کنید.چون این ابزار فقط توابع و عملیات محاسباتی رو پشتیبانی میکنه و اگر در داخل این عملیات کنترلی همچون گرید حضور داشته باشه خطا خواهد داد. شما میتونید قبل و بعد از تابع رنگی کردن یک progress bar رو نمایش و سپس مخفی کنید که کاربر در جریان عملیات قرار بگیره.
پس با این حساب از یه progress bar تو background worker نمی تونم استفاده کنم دیگه؟
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
نقل قول:
نوشته شده توسط
M.YasPro
progressbar فقط مامور نمایش پیشرفت یک عملیات هست و ربطی به هنگ کردن یا نکردن پروسس نداره .
اگر تعداد رکورد هاتون زیاده باید از thread ها استفاده کنید .
اما اگر تعداد کم هست :
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() == "a")
dataGridView1.Rows[e.RowIndex].Cells[0].Style.BackColor = Color.Red;
}
(البته کد بالا هم بعد از بایند شدن گرید به صورت اتوماتیک و به تعداد رکورد های دیتاسورس شما فایر میشه)
شاید ایونت بهتری برای اینکار وجود داشته باشه .
موفق باشید .
ممنون برای تعداد رکورد زیاد چطور باید انجام بدم؟
اگه ممکنه یه مثال هم از thread برای بزنید ممنون
من خودم اینجوری انجام دادم
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//progressBar1.Maximum = dataGridView1.Rows.Count;
foreach (DataGridViewRow r in dataGridView1.Rows)
{
// progressBar1.Value += 1;
if (Convert.ToInt32(r.Cells[6].Value) == 1)
{
foreach (DataGridViewCell c in r.Cells)
{
c.Style.BackColor = System.Drawing.Color.MediumAquamarine;
}
}
else if (Convert.ToInt32(r.Cells[6].Value) == 2)
{
foreach (DataGridViewCell c in r.Cells)
{
c.Style.BackColor = System.Drawing.Color.LightSteelBlue;
}
}
else if (Convert.ToInt32(r.Cells[6].Value) == 3)
{
foreach (DataGridViewCell c in r.Cells)
{
c.Style.BackColor = System.Drawing.Color.YellowGreen;
}
}
}
backgroundWorker1.CancelAsync();
}
که بعد از بایند کردن دیتا ست به دیتا گرید بک گراند ورکرو صدا میزنم
خواستم از progressBar هم تو BackGroundWorker استفاده کنم که خطای اینکه دو تا ترد تو هم نمی تونن کار کنن رو داد
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
مدیریت کردن تردها کار آسونی نیست .
شما نمیتونی از آبجکتی که یه ترد دیگه ساخته تو یه ترد دیگه استفاده کنی .
اینجا و اینجا و اینجا رو ببینید .
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
برای اینکه این رنگی شدن سطرها تا اتمام اجرای قبرنامه باقی بمونه باید چکار کنم چون وقتی روی یکی از ستونهای دیتا گرید کلیک می کنم که مثلاً بر اساس همون ستون مرتب کنه رنگ های نا پدید می شوند و یه گرید با سطر های غیر رنگی نمایش داده می شود
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
سلام
private void dataGridViewCost_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (this.dataGridViewCost.Columns[e.ColumnIndex].Name.Trim().Equals("ColumnName"))
{
String stringValue = e.Value as string;
if (stringValue == null)
return;
if (stringValue == "hello")
this.dataGridViewCost.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;
}
}
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
نقل قول:
نوشته شده توسط
Sk1900n3
سلام دوست من
کد
for (int index = 0; index < this.dataGrd.RowCount; index++)
{
if (this.dataGrd.Rows[index].Cells["name Field"].Value.ToString() == "مقدار")
this.dataGrd.Rows[indexer].DefaultCellStyle.BackColor = Color.Red;
}
سلام
خط اول داخل حلقه this.dataGrd.RowCount -1 باید باشه چون از صفر شروع میشه -1 باید باشه
و اینکه شمارنده حلفه یک حرفی باشه صحیح تره
نقل قول: رنگی کردن سطر های دیتا گرید بر اساس شرط خاص
اقا کافیه رکورد ها به صورت خط به خط و نه کلی داخل گرید بریزید تا اوکی بشه