PDA

View Full Version : حرفه ای: مقداردهی دستی یک ستون از datagridview با فرمت مشخص



__MAHNAZ__
یک شنبه 15 مهر 1397, 11:29 صبح
باسلام
من تو برنامه ای که نوشتم یک گرید ویو دارم که توسط اطلاعات موجود در دیتا بیس پر میشه. میخوام علاوه بر طلاعات دیتابیس یک ستون به انتهای گرید اضافه کنم که محتویات یکی از ستونهای موجود رو با فرمت مشخص در اون نمایش بدم
برای مثال اگر ستون 0 از گرید عدد 1 رو نمایش میده ستون آخر همین عدد رو به شکل 000001 نمایش بده.
راه حلش چیه ؟؟

کد من برای پر کردن دیتا گرید ویو::

SqlConnection con = new SqlConnection(ConnectionString);
con.Open();


SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = Query Text ;
SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);


DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;

danialafshari
یک شنبه 15 مهر 1397, 20:17 عصر
با سلام
بهتره از تابع Right خود Sql Server استفاده کنید و اصطلاحاً یک Virtual Field بسازید

SELECT
ID,
FirstName,
LastName,
Code,
RIGHT('00000'+CAST([Code] AS VARCHAR(6)),6) AS 'NewCodeColumn'

FROM
Persons

user18
دوشنبه 16 مهر 1397, 11:58 صبح
و یک راه دیگه به صورت کلاس نویسی تو سی شارپ بنویسی و دیتاتیبل رو به صورتی که خودت میخای ایجاد کنی از اون کلاست یعنی ارایه ای از شی برگردونی و اون شی ها رو به دیتاتیبل تبدیل کنی

__MAHNAZ__
سه شنبه 24 مهر 1397, 10:34 صبح
با سلام
بهتره از تابع Right خود Sql Server استفاده کنید و اصطلاحاً یک Virtual Field بسازید

SELECT
ID,
FirstName,
LastName,
Code,
RIGHT('00000'+CAST([Code] AS VARCHAR(6)),6) AS 'NewCodeColumn'

FROM
Persons


ممنون از کمکتون ولی راهی که فرمودید فقط تا زمانی جوابگو هست که عدد مربوطه یک رقمی باشه که با اضافه کردن 5 عدد صفر به قبل از آن مشکل حل میشه ولی وقتی اعداد دو یا سه رقمی شد فرمت بهم خواهد ریخت.

mehdiyahyavi
سه شنبه 24 مهر 1397, 16:03 عصر
سلام.
اگر منظور شمارو درست متوجه شده باشم و بخواید نتیجه ای مثل این عکس داشته باشید:

149083

باید DefaultCellStyle رو در Column مورد نظر به صورت زیر تغییر بدید

dataGridView1.Columns[3].DefaultCellStyle.Format = "0000";

و در خاظیت RowAdded این خط کد رو بزنید. (این کد با توجه به نیاز شما میتونه تغییر کنه

dataGridView1.Rows[e.RowIndex].Cells[3].Value = dataGridView1.Rows[e.RowIndex].Cells[0].Value;

__MAHNAZ__
چهارشنبه 25 مهر 1397, 09:39 صبح
سلام.
اگر منظور شمارو درست متوجه شده باشم و بخواید نتیجه ای مثل این عکس داشته باشید:

149083

باید DefaultCellStyle رو در Column مورد نظر به صورت زیر تغییر بدید

dataGridView1.Columns[3].DefaultCellStyle.Format = "0000";

و در خاظیت RowAdded این خط کد رو بزنید. (این کد با توجه به نیاز شما میتونه تغییر کنه

dataGridView1.Rows[e.RowIndex].Cells[3].Value = dataGridView1.Rows[e.RowIndex].Cells[0].Value;

ممنون از پاسختون فکر میکنم راه حل همین باشه که فرمودید. ولی الان دو تا مشکل هست .اول اینکه کدی که در قسمت خاصیت RowAdded اضافه کردم فقط برای دو خط اول از گریدم اجرا میشه و در بقیه خطوط اجرا نمیشه
و مشکل بعدی اینه که من تنظیم فرمت Column رو بلافاصله بعد از تنظیم DataSource برای دیتا گرید قرار دادم که متاسفانه کار نمیکنه.

cmd.CommandText = SS;
SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);


DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Columns[8].DefaultCellStyle.Format = "000000";

mehdiyahyavi
چهارشنبه 25 مهر 1397, 20:36 عصر
سلام.
تنظیم فرمت ستون رو بعد از InitializeComponent باید انجام بدید.
و اینکه وقتی شما می خواهید همچین عملیاتی رو روی ستون 9 که ایندکس 8 میشه انجام بدید، نباید اون رو با دیتایی که از دیتابیس میگیرید پر کنید.
اینکه در بقیه خطوط اجرا نمیشه، خطا میده یا null و یا چیز دیگه ؟
برای فهمیدن بهتره از Break Point روی همون خط ببینید چه اتفاقی می افته

__MAHNAZ__
دوشنبه 30 مهر 1397, 10:51 صبح
سلام.
تنظیم فرمت ستون رو بعد از InitializeComponent باید انجام بدید.
و اینکه وقتی شما می خواهید همچین عملیاتی رو روی ستون 9 که ایندکس 8 میشه انجام بدید، نباید اون رو با دیتایی که از دیتابیس میگیرید پر کنید.
اینکه در بقیه خطوط اجرا نمیشه، خطا میده یا null و یا چیز دیگه ؟
برای فهمیدن بهتره از Break Point روی همون خط ببینید چه اتفاقی می افته

Break Point رو روی همون خط کد نوشته شده در RowAdded قرار دادم . تو دو خط اول اجرا شد و بعد از اون وارد اون کد نشد. هیچ پیغام خطایی هم نمیده.
در مورد پر نکردن یک ستون از دیتا بیس هم وقتی DataSource در دیتا گرید ویو مقدار دهی میکنیم دیگه اجازه تغییرات و اضافه کردن ستون رو نداریم.