PDA

View Full Version : استفاده از cellFormating ابزار datagridview ?



Mosafers
پنج شنبه 13 تیر 1392, 23:22 عصر
سلام قبلا از این روش اعداد سطر های گرید تبدیل به کلمه خاص میکردم اما الان جواب نمیده...

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

if ((e.ColumnIndex == 1 || e.ColumnIndex == 2 || e.ColumnIndex == 3) && e.Value is int)
{
switch ((int)e.Value)
{
case 1:
e.Value = "بله";
e.FormattingApplied = true;
break;
case 2:
e.Value = "خیر";
e.FormattingApplied = true;
break;
}
}

Mahmoud.Afrad
جمعه 14 تیر 1392, 00:32 صبح
این کد اونم در cellFormating هزینه بر هست.
این اعداد اگر از دیتابیس میاد میتونی در همون کوئری این کارو انجام بدی. اگر هم از دیتابیس نمیاد سعی کن از رویداد RowsAdded استفاده کنی.

Mosafers
جمعه 14 تیر 1392, 00:49 صبح
این کد اونم در cellFormating هزینه بر هست.
بله دقیقا از دیتابیس میاد و تعداد فیلد ها هم بسیار زیاد هست که باید تغییر داده شود.
خواهش میکنم کمکم کنید از یه روش اصولی این کار رو انجام بدم از sql express استفاده میکنم.

فکر کنم این نمونه برای مثال من مناسب باشه ؟

string query = "select id, name, number when 1 then N'خوب' when 2 then N'متوسط' when 3 then N'بد' else N'خطا در داده' end as situation from tableName";

ولی روشی غیر از این نمیدونم...

Mahmoud.Afrad
جمعه 14 تیر 1392, 03:37 صبح
خب چرا از همین نوع کوئری استفاده نمیکنی؟

Mosafers
جمعه 14 تیر 1392, 10:59 صبح
خب چرا از همین نوع کوئری استفاده نمیکنی؟
آقای Afrad من طرض استفاده ازش رو بلد نیستم از EF هم استفاده میکنم میشه خواهش کنم راهنماییم کنید...

Mahmoud.Afrad
جمعه 14 تیر 1392, 12:29 عصر
قبلا مثال زدم. باید از شرط استفاده کنی:

var result =
from t in db.tbl
select new
{
NewName = (t.YourProperty == 1) ? "بله" :
(t.YourProperty == 2) ? "خیر" : t.YourProperty.ToString()
};

Mosafers
جمعه 14 تیر 1392, 12:51 عصر
dataGridView1.DataSource = from item in context.tbl
select new
{
item.name,
choice = item.id1 == 1 ? "بله" :
item.id1 == 2 ? "خیر" :
null
};

ببخشید یعنی این روش خیلی از cellFormating بهینه تره ؟ مشکلی نیست بخوام برای تمامی فیلد هام که اطلاعاتی به همین شکل داره استفاده کنم؟

Mahmoud.Afrad
جمعه 14 تیر 1392, 13:05 عصر
CellForamting به ازای هر تغییری که در UI دیتاگرید ایجاد بشه فراخوانی میشه. یعنی حتی با حرکت موس روی سلول ها این رویداد فراخوانی میشه و اصلا برای این کار مناسب نیست. در صورتی که در کوئری فقط یک بار این کار انجام میشه.

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