# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi >  سه رقم جدا کردن اعداد در DBGrid در هنگام نوشتن عدد

## دنیای دلفی

سلام دوستان
چگونه می توان یک فیلد از نوع Currency را درون یکی از ستونهای DBGrid در هنگام وارد کردن عدد (پول) آن را سه رقم سه رقم جدا کرد می بخشید دوباره تکرار می کنم در هنگام وارد کردن عدد در DBGrid اگر کسی تونسته این موردو حل کنه لطف کنه راهنمایی کنه

----------


## m-khorsandi

فیلدهاتون رو به Table یا ADOTable (با استفاده از FieldEditor) اضافه کنید و فیلد مورد نظر رو انتخاب کن ، DisplayFormat رو با ,# مقداردهی کن.


DisplayFormat = #,

----------


## Mohammad_Mnt

فکر کنم *دنیای دلفی* می خواد موقع Edit سه رقم سه رقم بگیره نه موقع نمایش. البته این مشکل با کامپوننت DBEditCurrency از DevExpress قابل حله ولی توی Grid رو نمی دونم .
ولی معمولا جدا کردن رقم موقع Edit خیلی واجب نیست. کاربر می تونه موقع Edit همون 12345 را وارد کنه و وقتی به Field بعدی رفت عدد رو به صورت 12,345 ببینه ( با همون روش آقای m-khorsandi )

----------


## دنیای دلفی

ممنون از پاسخ شما ولی منظور من در هنگام وارد کردن عدد در DBGrid است  و بسیار هم مهم است چون در برنامه های حسابداری که سرعت عمل نیاز دارند دقت را بسیار بالا می برد من از Ehlib استفاده می کنم و در Edit Box هایی که دارد این مشکل را در هنگام ورود حل کرده است ولی نمی دانم با DBGrid چی کار کنم اگر کسی می دونه راهنمایی کنه

----------


## دنیای دلفی

یعنی هیچ راهی نیست

----------


## vcldeveloper

همون کاری که آقای خورسندی توضیح دادند را انجام بدید، با این تفاوت که بجای DisplayFormat از EditFormat استفاده کنید.



> ولی منظور من در هنگام وارد کردن عدد در DBGrid است


تمام کنترلهای Data-Aware از DisplayFormat و  EditFormat فیلدی که بهش متصل هستند استفاده می کنند، پس با انجام کاری که در بالا گفته شد، DBGrid شما هم از همون فرمت مشخص شده تبعیت خواهد کرد.

----------


## دنیای دلفی

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

----------


## دنیای دلفی

برادران مدیر کسی نمی تونه مشکل من رو حل کنه

----------


## mzjahromi

با استفاده از خاصیت DBGrid1.Columns[2].Field.EditMask یه کارائی میتونی بکنی

----------


## Mohammad_Mnt

editMask یکی از مزخرف ترین property های موجو در دلفی است !!! مخصوصا" برای کار با عددهای ارزی

----------


## SoftDevCo

> editMask یکی از مزخرف ترین property های موجو در دلفی است !!! مخصوصا" برای کار با عددهای ارزی


تایید میشه.

----------


## دنیای دلفی

حالا از این حرفها بگذریم 
آقای کرامتی شما به داد ما برسید چه جوری میشه این کار را انجام داد

----------


## دنیای دلفی

من برای یک Edit حلش کردم ولی برای DBGrid نمی دونم



> uses
>    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
>    Dialogs, StdCtrls, Mask, StrUtils,math;
> 
>  function Bet(S: string; Thousands: Boolean;Sender: TObject): string;
>  var
>    I, MaxSym, MinSym, Group: Integer;
>    IsSign: Boolean;
>  begin
> ...


بیاید با هم کاملش کنیم

----------


## ali_abbasi22145

> فکر کنم *دنیای دلفی* می خواد موقع Edit سه رقم سه رقم بگیره نه موقع نمایش. البته این مشکل با کامپوننت DBEditCurrency از DevExpress قابل حله ولی توی Grid رو نمی دونم .
> ولی معمولا جدا کردن رقم موقع Edit خیلی واجب نیست. کاربر می تونه موقع Edit همون 12345 را وارد کنه و وقتی به Field بعدی رفت عدد رو به صورت 12,345 ببینه ( با همون روش آقای m-khorsandi )


سلام به دوست قدیمی خودمان

اگر DevExpress  کامپوننت DBEditCurrency  و DevExpress  DBgrid را پس احتمال زیاد مشکلت را در DBGrid حل می کند پس به آنها ایمیل بزن.

----------


## jafari1

دوست گرامی
عددی که هنوز تعداد ارقامش مشخص نیست چگونه میخواهی 3 رقم 3 رقم جدا کنی طبیعی است که عدد پس از درج کامل قابل جداکردن است و قبل از ورود کامل عدد جدا کردن آن دردی را دوا نمیکند که بتوان درستی عدد وارد شده را با آن چک کرد

----------


## دنیای دلفی

ممنون از راهنمایی های همه ولی من از Grid مربوط به Ehlib استفاده می کنم و بسیار مهم است که هنگام وارد کردن عدد سه تا سه تا جدا کند البته با کدی که در بالا گذاشته ام به راحتی این کار انجام می شود ولی مشکل این است که در DBGrid رویدادی نیست که در  هنگام تایپ  یک عدد در یک ستون گرید  مرتبا  اجرا شود و فقط حالتی وجود دارد که ابتدای وارد کردن عدد و انتهای وارد کردن  آن چک می شود یعنی یک چیزی مثل OnChange مربوط به Edit یا DbEdit و غیره الان مسئله پیدا کردن الگوریتم این کار نیست بلکه پیدا کردن این رویداد است.

----------


## Mahdi_S_T

اگه بخواهید از Edit استفاده کنید بهترین و زیباترین FloatEdit موجود در  کامپوننت Falad است

----------


## فرزاد دلفی باز

اصلا ربطی به این نداره که عدد شما چند رقمیه فقط باید نوع فیلد از نوع عددی باشده  . با استفاده از FieldEditor در Table یا ADOTable  , DisplayFormat رو با ###,### مقداردهی کنید این حالت برای 16 رقم جواب میده(البته ارقام بیشتر رو هم نشان می ده ولی16 رقم را بطور واضح در گرید نشان می ده) خود این حالت بطور اتوماتیک سه رقم سه رقم را جدا میکنه .......

----------


## babak869

اینم یه نمونه برنامه .البته ایده اون مربوط به جناب آقای خورسندیه!!!
موفق باشید

http://www.barnamenevis.org/sh...219#post259219

----------


## mzjahromi

بهتر نیست جواب سوال رو همین جا بدید؟

----------


## babak869

> بهتر نیست جواب سوال رو همین جا بدید؟


چون نمونه برنامه جواب ایشون بود اونو در تاپیکی که مربوط به نمونه برنامه های دلفی است گذاشتم تا ایشون و بقیه هم استفاده کنند

----------


## jafari1

در نمونه برنامه بالا بایستی عدد را وارونه ( یعنی آز آخر) وارد کرد که به نظر عاقلانه نیست

----------


## فرزاد دلفی باز

این مثال کامله ......

----------


## دنیای دلفی

دوستان توجه کنید گفتیم در هنگام تایپ کردن می خواهیم سه تا سه تا جابجا بشه دوستان این نکته خیلی مهمه برای DBGrid

----------


## فرزاد دلفی باز

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

----------


## mzjahromi

اصلا بحث از ابتدا ورود اطلاعات با استفاده از DBGrid بوده.

*قانون شماره 13*
لطفاً در صورتی که جواب یک سوالی را نمی دانید از ارسال مطالبی که باعث شلوغ کردن آن ارسال ( یا سوال ) شود خودداری فرمایید. در صورتی که بحث خاصی دارید می توانید برای خودتان یک بحث عمومی باز کنید.

----------


## فرزاد دلفی باز

با عرض پوزش ......

----------


## end_of_110

رخسد از بزرگان دلفی
این مشکل که ارقام سه رقم سه رقم جدا شوند ، مشابه هنگامی است که کاربر در گرید تایپ کند و شما بخواهید بر اساس آنچه تایپ می شود select خود را در کوئری دیگر تغییر دهید،برای این کار در رویدادkeypress  گریدی که کاربردر آن تایپ می کند ،باید رشته ورودی را تک کارکتر تک کارکتر گرفته  در نهایت یک رشته عددی دارید ، هر بار چک کنید که در کدام ستون گرید هستید رشته تغییر داده شده خود را که با ویرگول می باشد در همان ستونی که کاربر درج انجام می دهد قرار دهید .
در گرید تا زمانی روی فیلدی هستید که در حال ویرایش آن هستید مقدار جدید آن قابل خواندن نیست ، برای آنکه مقدار را بدست آورید کنترل را به فیلد دیگر برده حالا مقدار فیلد قبلی در سترس است ، و کافیست با ایجاد دو تابع که یکی ویرگولها را از رشته حذف میکند و دیگری ویرگولها را اضافه می کند(سه رقم ، سه رقم)، به نتیجه مورد دلخواه برسید :چشمک:

----------


## aisuda

می دونم که تاپیک مال چند سال پیشه ولی چون در موقع جستجو در گوگل در سطر نتایجه گفتم اینو بگم شاید برای بعضی ها مفید واقع بشه.
حالت اول رو برای مثال با StoreProcedure می گم:
ADOStoreProcedure1.FieldByName('MyField').EditMask  := '###,###,###,###;0; '
و این هم یه راه دیگه برای Table
procedure TForm1.Seprate(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
    Text := FormatFloat('#,##0', Sender.AsFloat );
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
(Table1.FieldByName('MyField') as TField).OnGetText := Seprate;
end;

----------


## hassan p.b

سلام
این قسمت برای من تو دلفی 2010 خطا می گیره لطفا راهنمایی کنید


```
procedure TForm1.Seprate(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
    Text := FormatFloat('#,##0', Sender.AsFloat );
end;
```

----------


## hassan p.b

برنامه الان بدون خطا بالا امد ولی نمایش تو بعد از پست شدن سه رقم نمایش می ده نه تو هینت
و زنده تو تایپ
مرسی

----------


## ابوالفضل عباسی

باسلام.
بنده برای اینکار یک تابع نوشته ام که در dbedit سه رقم را جدا میکند(بیش از میلیارد)و هنگام خروج از dbedit سه رقم،را پاک میکند.
یعنی هنگام تایپ و نمایش سه رقم را جدا میکند،هنگام ذخیره سازی به صورت ساده ذخیره(currency) میشود و تا الان مشکلی ندارد و درست کار میکند، حتی میتوان در hint هم نمایش داد.
دوستانی که با روش هایی که گفته شد به مشکل برخوردند میتوانند یک پیام خصوصی به بنده بدهند تا تابع را برایشان ارسال کنم.

----------

