PDA

View Full Version : masked cell in datagridview



tnoohi
چهارشنبه 05 اردیبهشت 1386, 09:28 صبح
دوستان سلام
من میخوام توی یک datagridview اطلاعات یک سلول رو به صورت ماسک نشون بدم
مثلا یک مقدار عددی هنگام نمایش سه قم سه رقم با کاما جدا بشه به صورت زیر
123,456,789,000

آیا راهی برای این کار وجود داره؟

MH2538
چهارشنبه 05 اردیبهشت 1386, 10:58 صبح
سلام
برای اینکار کافی است DataSet رو قبل از اتصال به Datagridview پیمایش کنی و ستون مورد ننظرت رو تغییر بدید اما برای حالت هایی که رکورد های زیادی توی Dataset باشه اینکار می تونه برنامه رو در اون لحظه که این تبدیل رو انجام می دی کند کنه.
اما برای دسترسی به فیلد خاص می تونی از روش کلی زیر کمک بگیری


foreach (DataRow DR in DS1.Tables[0].Rows)
{
DR["فیلد مورد نظر"] = YourFunction(DR["فیلد مورد نظر"].ToString());
}

YourFunction هم تابعی است که کاری رو که شما می خواهید روی این اطلاعات انجام بدهید براتون انجام میدهد مثلا همین سه رقم سه رقم جدا کردن
موفق باشی

Alireza_Salehi
چهارشنبه 05 اردیبهشت 1386, 14:13 عصر
اصلا احتیاجی به این کار نیست ، کافیه طبق عکس زیر ستون مورد نظر رو فرمت کنید ، در مرحله پنجم فقط Currency رو انتخاب کنید ، این طوری به صورت اتوماتیک مقدار عددی سه رقم سه رقم جدا شده و علامت واحد پول در کنار اون قرار میگیره (مثلا علامت $)
حالا اگر بخواهید این علامت قرار نگیره یا مثلا به جای اون ریال نمایش داده بشه در Form_Load کد زیر را بنویسید ، این طوری کاراکتر جدا کننده و خیلی موارد دیگه رو می تونید فرمت کنید :


System.Globalization.NumberFormatInfo nf = new System.Globalization.NumberFormatInfo();
nf.CurrencyDecimalDigits = 0;
nf.CurrencySymbol = "ریال";
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
ci.NumberFormat = nf;
System.Threading.Thread.CurrentThread.CurrentCultu re = ci;

اسم Culture مورد نظر در اینجا مهم نیست (en-US) ، مهم تنظیمات nf برای نمایش مقادیر پولی است.

در صورتی که خواستید خودتون از طریق کد فرمت رو انجام بدید لازم نیست از حلقه استفاده کنید کافیه در رویداد CellFormatting کنترل گریدویو کارهای مورد نظر رو انجام بدید.


privatevoid dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1)
{
//Formatting Code ...
}
}


کار های خیلی بیشتری از طریق پنجره FormatString میشه انجام داد، تو MSDN در باره NumberFormatInfo ، Format String ،Numeric Format String جستجو کنید چیزهای جالبی پیدا خواهید کرد.

MH2538
چهارشنبه 05 اردیبهشت 1386, 15:04 عصر
سلام
دوست عزیز arsp_2004 ، با این که این مورد مشکل من نبود ولی لذت بردم از راه حلی که ارائه کردی.
چیز جدیدی یاد گرفتم

linux
چهارشنبه 05 اردیبهشت 1386, 17:24 عصر
اصلا احتیاجی به این کار نیست ، کافیه طبق عکس زیر ستون مورد نظر رو فرمت کنید ، در مرحله پنجم فقط Currency رو انتخاب کنید ، این طوری به صورت اتوماتیک مقدار عددی سه رقم سه رقم جدا شده و علامت واحد پول در کنار اون قرار میگیره (مثلا علامت $)
حالا اگر بخواهید این علامت قرار نگیره یا مثلا به جار اون ریال نمایش داده بشه در Form_Load کد زیر را بنویسید ، این طوری کاراکتر جدا کننده و خیلی موارد دیگه رو می تونید فرمت کنید :


Dim nf AsNew System.Globalization.NumberFormatInfo()
nf.CurrencyDecimalDigits = 0
nf.CurrencySymbol = "ریال"
Dim ci AsNew System.Globalization.CultureInfo("en-US")
ci.NumberFormat = nf
Thread.CurrentThread.CurrentCulture = ci

اسم Culture مورد نظر در اینجا مهم نیست (en-US) ، مهم تنظیمات nf برای نمایش مقادیر پولی است.

در صورتی که خواستید خودتون از طریق کد فرمت رو انجام بدید لازم نیست از حلقه استفاده کنید کافیه در رویداد CellFormatting کنترل گریدویو کارهای مورد نظر رو انجام بدید.


PrivateSub DataGridView1_CellFormatting(ByVal sender AsObject, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEve ntArgs) Handles DataGridView1.CellFormatting
If e.ColumnIndex = 1 Then
'formmatting code ....
EndIf
EndSub


کار های خیلی بیشتری از طریق پنجره FormatString میشه انجام داد، تو MSDN در باره NumberFormatInfo ، Format String ،Numeric Format String جستجو کنید چیزهای جالبی پیدا خواهید کرد.


همون جایی که نوشتی کد0 بنویس N0 حرف N و عدد صفر چسبیده به هم این یعنی فرمت نامبر با 0 رقم بعد از ممیز

tnoohi
یک شنبه 16 اردیبهشت 1386, 10:36 صبح
دوستان عزیزarsp_2004,linux
خیلی عالی بود متشکرم