PDA

View Full Version : سوال: تغییر نمایش اطلاعات خوانده شده جدول ( اطلاعات به صورت 1,2 هستش) و نمایش به صورت بله خیر؟



Mosafers
سه شنبه 12 دی 1391, 23:23 عصر
سلام

نفهمیدم چی باید سرچ کنم

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

مثال :

توی گرید اینجور نمایش میده
1
2
2
3
1
1
1
...

خوب یه جدول دیگه دارم که اینجوره
1 = خوب
2 = متوسط
3 = بد

حالا یک کوری گرفتم و اطلاعات رو برابر کردم با جدول اما نمیدونم توی گرید چجور نمایشش بدم یا اعمالش کنم؟

ordebehesht
سه شنبه 12 دی 1391, 23:46 عصر
چرا از عدد برای اینکار استفاده میکنی چرا اینارو ذخیره نمیکنی اینکه بهتره

Mosafers
سه شنبه 12 دی 1391, 23:53 عصر
چون نیازم میشه از دیتابیس گزارش یا آمار بگیرم بعد نمیتونم تشخیص بدم این فیلد محتویاتش چیه . مثلا : افراد خوب.

کدم رو باید در کدوم رویداد گرید بنویسم که روی تمامی سطون های گرید تاثیر داشته باشه؟

plus
چهارشنبه 13 دی 1391, 00:43 صبح
شما بهتره، جدول اصلی رو با جدول دوم (که حاوی متن هست) JOIN کنی. http://www.w3schools.com/sql/sql_join.asp
یا اینکه متوی سمت DataGridView، موقع Format کردن، متن رو جایگزین عدد کنی.البته راه اول بهتره.

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)

{

if (e.ColumnIndex == /** Specfied Column Index **/)

{

switch ((int)e.Value)

{

case 1:

e.Value = "one";

e.FormattingApplied = true;

break;

case 2:

e.Value = "trow";

e.FormattingApplied = true;

break;

}

}

}

Mosafers
چهارشنبه 13 دی 1391, 01:19 صبح
سلام ممنونم از توضیحاتتون حالا join کردم برای اینکه روی تمامی فیلد ها ی یک ستوی اعمال باشه کدم رو توی کدوم رویداد بنویسم؟

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1)
{
switch ((int)e.Value)
{
case 1:
e.Value = "one";
e.FormattingApplied = true;
break;
case 2:
e.Value = "trow";
e.FormattingApplied = true;
break;
}
}
}

این دستور هم که خطای زیر رو میده ؟؟؟

plus
چهارشنبه 13 دی 1391, 16:30 عصر
اگه Join کردید که دیگه نیازی به این کد ندارید، کافیه DataPropertyName ستون رو درست تعیین کنید.
--
این کد یک بررسی کم داره:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1 && e.Value is int)
{
switch ((int)e.Value)
{
case 1:
e.Value = "one";
e.FormattingApplied = true;
break;
case 2:
e.Value = "trow";
e.FormattingApplied = true;
break;
}
}
}

user6627
چهارشنبه 13 دی 1391, 17:53 عصر
سلام
یک راه حل ساده!
از یک ستون اضافی در جدولت استفاده کن یعنی در کنار ذخیره مقادیر 1و2و3 ، مقادیر معادلش را هم در ستون دیگری ذخیره کن و موقع نمایش فقط ستون عددها را نمایش نده
اگر هم نیاز به گزارشسازی نداری میتونی این پراپرتی را فقط به کلاست اضافه کنی و موقع لود اطلاعات به این پراپرتی مقدار بدی با هر کدام از این دو روش دیگه نیازی به join کردن نیست چون باعث کند شدن برنامه میشه!

Mosafers
چهارشنبه 13 دی 1391, 19:10 عصر
اگه Join کردید که دیگه نیازی به این کد ندارید، کافیه DataPropertyName ستون رو درست تعیین کنید.
--
این کد یک بررسی کم داره:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1 && e.Value is int)
{
switch ((int)e.Value)
{
case 1:
e.Value = "one";
e.FormattingApplied = true;
break;
case 2:
e.Value = "trow";
e.FormattingApplied = true;
break;
}
}
}


سلام واووووووووو ببخشید من نمیخوام روی ستون تاثیر بذاره (DataPropertyName این برای تغییر text یک ستون هست من سوالم سر فیلد های ستون است)میخوام روی فیلد های یک ستون باشه؟؟؟

نمیشه باور کنید نمیشه.....

لطفا در قالب یه پروژه برام پیوست کنید خیلی بهش نیاز دارم...... :گریه:



سلام
یک راه حل ساده!
از یک ستون اضافی در جدولت استفاده کن یعنی در کنار ذخیره مقادیر 1و2و3 ، مقادیر معادلش را هم در ستون دیگری ذخیره کن و موقع نمایش فقط ستون عددها را نمایش نده
اگر هم نیاز به گزارشسازی نداری میتونی این پراپرتی را فقط به کلاست اضافه کنی و موقع لود اطلاعات به این پراپرتی مقدار بدی با هر کدام از این دو روش دیگه نیازی به join کردن نیست چون باعث کند شدن برنامه میشه!


از شما ممنونم اون روش در حال حاضر به من کمکی نمیکنه قبلا خودم از همین روش استفاده میکردم...

Mosafers
پنج شنبه 14 دی 1391, 18:02 عصر
خواهش میکنم یکی منو راهنمایی کنه نیاز دارم..................................

mousa1992
پنج شنبه 14 دی 1391, 23:10 عصر
سلام
نیازی کار کردن با گرید ندارید
به کوئری زیر توجه کن


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";


موفق
یا علی

asghar2008
پنج شنبه 14 دی 1391, 23:40 عصر
سلام
نیازی کار کردن با گرید ندارید
به کوئری زیر توجه کن


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";


موفق
یا علی

سلام
روش خیلی جالبی است نمیدونستم When تو Select است

ممنون دوست عزیز

میشه به جای then از as استفاده کرد؟

mousa1992
جمعه 15 دی 1391, 00:13 صبح
میشه به جای then از as استفاده کرد؟
نه عزیز فک نمیکنم !
امتحانش نکردم اینو

Mosafers
جمعه 15 دی 1391, 01:23 صبح
سلام
نیازی کار کردن با گرید ندارید
به کوئری زیر توجه کن


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";


موفق
یا علی

سلام بازم شما .

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

mousa1992
جمعه 15 دی 1391, 02:08 صبح
سلام بازم شما .
سلام _ عزیزی :لبخند:
نه متاسفانه من با EF کار نکردم
میرم بخوابم شب خوش :P
موفق باشی دوست خوبم

Mahmoud.Afrad
جمعه 15 دی 1391, 07:19 صبح
فرض کنید جدولی که نام های "خوب و متوسط و بد" ذخیره شده به نام ScoreTable باشه با فیلدهای id و ScoreName. جدول داده ها(tbl) هم یک فیلد به نام score داشته باشه به عنوان کلید خارجی. حالا دو جدول را بر حسب فیلد مشترک (score در جدول tbl و id در ScoreTable) باید join کرد. البته در قسمت select ستونهایی که لازم دارید را نام ببرید:

from record in context.tbl
join item in context.ScoreTable on record.score equals item.id
select new { record.id, record.name, item.scorename }

برای اطلاعات بیشتر در ویژوال استادیو روی کلمه join قرار بگیرید و F1 را بزنید.

Mosafers
جمعه 15 دی 1391, 12:40 عصر
فرض کنید جدولی که نام های "خوب و متوسط و بد" ذخیره شده به نام ScoreTable باشه با فیلدهای id و ScoreName. جدول داده ها(tbl) هم یک فیلد به نام score داشته باشه به عنوان کلید خارجی. حالا دو جدول را بر حسب فیلد مشترک (score در جدول tbl و id در ScoreTable) باید join کرد. البته در قسمت select ستونهایی که لازم دارید را نام ببرید:

from record in context.tbl
join item in context.ScoreTable on record.score equals item.id
select new { record.id, record.name, item.scorename }

برای اطلاعات بیشتر در ویژوال استادیو روی کلمه join قرار بگیرید و F1 را بزنید.

ممنونم که زحمت کشیدید ولی این کار برا نوع داده های من مناسب نیست "بله " "خیر" | "هست" "نیست"... پس بهتره از روشی دیگه استفاده کنم ؟؟؟

لطفا ...

asghar2008
جمعه 15 دی 1391, 13:59 عصر
ممنونم که زحمت کشیدید ولی این کار برا نوع داده های من مناسب نیست "بله " "خیر" | "هست" "نیست"... پس بهتره از روشی دیگه استفاده کنم ؟؟؟

لطفا ...

سلام

Mosafers عزیز , متاسفانه بنده با EF کار نکردم و اصلا نمیدونم چیه .:ناراحت:

حتما شما یه جایی از Select برای انتخاب ستون ها استفاده کردین . درسته؟

اگه استفاده کردین همو نجا از روش پست شماره 10 استفاده کن.یا میتونی یه View درست کنی واز اون برای نمایش در دیتاگرید استفاده کنید.

Mahmoud.Afrad
جمعه 15 دی 1391, 16:08 عصر
ممنونم که زحمت کشیدید ولی این کار برا نوع داده های من مناسب نیست "بله " "خیر" | "هست" "نیست"... پس بهتره از روشی دیگه استفاده کنم ؟؟؟

لطفا ...
مگر نگفتید برای داده های "بله و خیر" و "خوب و متوسط و بد" و ... جدول دارید. در اینصورت باید join کنید. که کدشو گذاشتم.
در صورتی که جدول ندارید بگید تا مثال بزنم. (توصیه میکنم یک جدول برای این داده ها داشته باشید و join کنید. اینطوری حداقل داده ها در دیتابیس ثبت شدن)
یک دیاگرام از دیتابیس بزارید تا بهتر بشه کمک کرد.

Mosafers
جمعه 15 دی 1391, 17:14 عصر
سلام

Mosafers عزیز , متاسفانه بنده با EF کار نکردم و اصلا نمیدونم چیه .

حتما شما یه جایی از Select برای انتخاب ستون ها استفاده کردین . درسته؟

اگه استفاده کردین همو نجا از روش پست شماره 10 استفاده کن.یا میتونی یه View درست کنی واز اون برای نمایش در دیتاگرید استفاده کنید.
سلام خواهش میکنم آره من از EF استفاده میکنم روش Entity SQL هم هست که باهاش میشه دستورات SQL رو اجرا کرد اما هنوز جای کار دارم...


مگر نگفتید برای داده های "بله و خیر" و "خوب و متوسط و بد" و ... جدول دارید. در اینصورت باید join کنید. که کدشو گذاشتم.
در صورتی که جدول ندارید بگید تا مثال بزنم. (توصیه میکنم یک جدول برای این داده ها داشته باشید و join کنید. اینطوری حداقل داده ها در دیتابیس ثبت شدن)
یک دیاگرام از دیتابیس بزارید تا بهتر بشه کمک کرد.
نمیتونم برای بله و خیر هم جدول درست کنم چون واقعا جالب نیست... . ولی این کدی که قرار دادید برای موارد دیگه رو حتما به خاطر می سپرم...

تصاویر پیوستی رو مشاهده کنید میخوام این اطلاعات رو به صورت بله و خیر نمایش دهم از هر روشی به جز جدول دوم...
یا از View یا از طریق Grid و یا Query های دیگه......... :افسرده:

Mahmoud.Afrad
جمعه 15 دی 1391, 17:36 عصر
برای تبدیل id1 به "بله و خیر"(1بله و 2خیر) کد زیر رو ببینید:
dataGridView1.DataSource = from item in context.tbl
select new
{
item.name,
choice = item.id1 == 1 ? "بله" :
item.id1 == 2 ? "خیر" :
null
};
در قسمت Select فیلدهای دیگری که نیاز دارید را به همین صورت اضافه کنید.

plus
جمعه 15 دی 1391, 17:44 عصر
سلام خواهش میکنم آره من از EF استفاده میکنم روش Entity SQL هم هست که باهاش میشه دستورات SQL رو اجرا کرد اما هنوز جای کار دارم...


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

تصاویر پیوستی رو مشاهده کنید میخوام این اطلاعات رو به صورت بله و خیر نمایش دهم از هر روشی به جز جدول دوم...
یا از View یا از طریق Grid و یا Query های دیگه......... :افسرده:
دوست عزیز اگه از طریق گرید مشکلی ندارین همون پست 4 که دادم پاسخ شما بود.نمیدونم مشکلی داشتین باهاش؟


public Form1()
{
InitializeComponents();
dataGridView1.CellFormatting += dataGridView1_CellFormatting;
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
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;
}
}
}

Mosafers
جمعه 15 دی 1391, 17:58 عصر
ممنونم دوست خوبم بله این جواب داد... واقعا دستتون درد نکنه خیلی خوب بود !

یه سوال دیگه آیا از این روش هم میشد یا این برای برچسپ ستون بود؟

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1 && e.Value is int)
{
switch ((int)e.Value)
{
case 1:
e.Value = "one";
e.FormattingApplied = true;
break;
case 2:
e.Value = "trow";
e.FormattingApplied = true;
break;
}
}
}

plus
جمعه 15 دی 1391, 18:00 عصر
ممنونم دوست خوبم بله این جواب داد... واقعا دستتون درد نکنه خیلی خوب بود !

یه سوال دیگه آیا از این روش هم میشد یا این برای برچسپ ستون بود؟

این کد همون کد هست، فقط من توی کد جدید، شماره ستون های بیشتری رو برای فرمت مشخص کردم (شرط if) و متن های انگلیسی رو با "بله" و "خیر" جایگزین کردم.

Mosafers
جمعه 15 دی 1391, 18:02 عصر
ااااا درست شد آره مشکل از این بود !!!!

dataGridView1.CellFormatting += dataGridView1_CellFormatting;

نزدیک به 5 روز هر چی پست میزنم جساجو میکنم به نتیجه نمیرسیدم برای اینجور مواردی هم نمیتونم از سایت های خارجی استفاده کنم چون حاشیه داره نمیدونم چی باید جستجو میکردیم............

ممنونم واقعا نمیدونم چجور تشکر کنم گیر این نقطه بودم :خجالت: