ورود

View Full Version : جدا کردن سه رقمی اعداد در هنگام ورود در DBGrid؟



SYNDROME
سه شنبه 22 آبان 1386, 22:52 عصر
DisplayFormat یکی از فیلدهای عددی را جوری تنظیم می کنیم که سه رقم سه رقم جدا کند و سپس فیلد مورد نظر را به Grid اضافه کرده و در زمان اجرا برنامه در خود سلول عدد وارد می کنیم و زمانی که Enter می زنیم عدد مورد نظر سه رقم سه رقم جدا می شود.
حالا راهی است که همزمان با ورود اطلاعات سه رقم سه رقم جدا شود.
با تشکر از دوستان

Valadi
سه شنبه 22 آبان 1386, 23:23 عصر
با سلام
علی جان اینو ببین

موفق وموید باشی

SYNDROME
چهارشنبه 23 آبان 1386, 04:46 صبح
با تشکر از شما دوست گرامی
ولی در این روش اگر شما یک رقم هم وارد کنید باز هم جدا کننده ها وجود دارد و طول رشته ها باید مشخص باشد.
من می خواهم هر چند رقم خواست وارد کند و همون موقه جدا کننده ها با توجه به طول رشته قرار گیرد.
موفق باشید

daffy_duck376
چهارشنبه 23 آبان 1386, 06:26 صبح
دوست عزیز به این یه نگاهی بنداز

dkhatibi
چهارشنبه 23 آبان 1386, 06:38 صبح
سلام
این همون چیزی بود که در پست اول کفته شد. بعد از ورود به این شکل نمایش داده می شود.

شاید لازم باشد از رویداد OnChamge استفاده کنید و به طور دستس این کار را انجام دهید. اما یک مشکلی هست اگر فیلد شما عددی باشد با خطا مواجه می شید که در رویدادهای OnSetText و OnGetText فیلد مربوط باید خطا را رفع کنید یا موقع درج دوباره جداکننده ها را جذف کنید.

mortezakiaee
چهارشنبه 23 آبان 1386, 15:48 عصر
سلام
من یه مشکل مشابه داشتم با این کلک که یه edit روی اون cell ، ایجاد بشه حل شد. اگه خواستید بگید بیشتر توضیح بدم

SYNDROME
جمعه 25 آبان 1386, 07:49 صبح
با تشکر از همه دوستان که تجربیاتشان را در اختیار بنده قرار داده اند.
کسی نظر دیگری ندارد؟
موفق باشید

Mahmood_M
جمعه 25 آبان 1386, 11:43 صبح
اگه فیلدتون از نوع String هست ، بهتره خودتون این کار رو انجام بدید ...
طول رشته ها رو بدست بیارید ، از اول رشته برید تا آخرش و بعد از سه حرفی که جدا کردید ، یک " , " یا ... بزارید ...

موفق باشید ...

SYNDROME
جمعه 25 آبان 1386, 18:06 عصر
اگه فیلدتون از نوع String هست ، بهتره خودتون این کار رو انجام بدید ...
طول رشته ها رو بدست بیارید ، از اول رشته برید تا آخرش و بعد از سه حرفی که جدا کردید ، یک " , " یا ... بزارید ...

موفق باشید ...
دقیقاً مشکل همینجاست.
چون تا قبل از اینکه مقدار Post بشه نمی توانم آن را به دست بیاورم.
اگر روشی وجود دارد که هنگام مورد عدد بتوان مقدار Cell خاص را به دست آورد ممنون می شوم من را راهنمایی کنید.
موفق باشید

Mahmood_M
جمعه 25 آبان 1386, 21:47 عصر
چون تا قبل از اینکه مقدار Post بشه نمی توانم آن را به دست بیاورم.
چرا نمی تونید بدست بیارید ؟ اطلاعات چطور ذخیره میشن ؟ مگه شما اطلاعات رو از کاربر نمی گیرید ؟

...

SYNDROME
شنبه 26 آبان 1386, 05:58 صبح
چرا نمی تونید بدست بیارید ؟ اطلاعات چطور ذخیره میشن ؟ مگه شما اطلاعات رو از کاربر نمی گیرید ؟

من الان بر روی فیلد X ایستاده ام و دارم عدد 123 را وارد می کنم هنوز چون Scroll نکرده ام پس اطلاعات Post نشده است.
حالا شما بگویید من می خواهم مقدار فیلد X را که کاربر در حال وارد کردن در DBGrid است چطور به دست بیاورم.(شما چطور مقدار رابه دست می آورید.کد مورد نظر را بنویسید)
با تشکر از شما
موفق باشید

Mahmood_M
شنبه 26 آبان 1386, 23:57 عصر
یه راهش اینه که وقتی اطلاعات پست شد ، بعد این کار رو انجام بدید ( در واقع اون فیلد رو Edit کنید ...


procedure TForm1.ADOTable1AfterPost(DataSet: TDataSet);
var
S1 : String;
begin
if Check = False then
Exit;
S1 := DataSet.FieldByName('Name').AsString;
S1 := Split(S1);
DataSet.Edit;
DataSet.FieldByName('Name').AsString := S1;
Check := False;
DataSet.Post;
Check := True;
end;

فرض میکنیم در کد بالا تابع Splite وظیفه جدا کردن ارقام رو بر عهده داره ...

موفق باشید ...

SYNDROME
یک شنبه 27 آبان 1386, 08:17 صبح
آقا محمود گل دستت درد نکنه.
مشکل من این است که قبل از Post کردن اطلاعات و زمانی که داخل Grid دارم تایپ می کنم می خواهم قبل از زدن دکمه Enter و یا Post شدن اطلاعات مقدار یک سلول را به دست بیاورم.
با تشکر از شما
موفق باشید

JAFO_IRAN
یک شنبه 27 آبان 1386, 18:29 عصر
با سلام - اگر درست تعقیب کرده باشم،

1. مشکل شما با DBGrid به عنوان یک editor است و ربطی به data aware بودن اون نداره.
2. یک متد به نام SetEditText داره که کاملا مناسب کار شما است - متاسفانه event مناسب اینکار یعنی OnSetEditText در DBGrid به ارث نرسیده. پس اگه بخوای کاری کنی باید خودت یک DBGrid دیرایو کنی (که تقریبا مطمئنم اینکار رو قبلا کردی - چون با اینی که هست نمیشه زندگی کرد).
3. متاسفانه FEditText که حاصل کار را میپذیره private تعریف شده و من راه دیگری جز اینکه source رو دستکاری کنیم و این فیلد رو protected کنیم به نظرم نمیرسه.

امیدوارم مفید باشه
ارادت

mortezakiaee
یک شنبه 27 آبان 1386, 20:11 عصر
ی باید خودت یک DBGrid دیرایو کنی

میشه یکم توضیح بدی؟

Mahmood_M
یک شنبه 27 آبان 1386, 21:15 عصر
آقا محمود گل دستت درد نکنه.
مشکل من این است که قبل از Post کردن اطلاعات و زمانی که داخل Grid دارم تایپ می کنم می خواهم قبل از زدن دکمه Enter و یا Post شدن اطلاعات مقدار یک سلول را به دست بیاورم.
با تشکر از شما
موفق باشید
DBGrid دو Event به نامهای OnColEnter و OnColExit داره که به ترتیب در زمانهای ورود به یک Cell و خروج از یک Cell اجرا میشن ...
برای این که بتونید متنی که در حال تایپ شدن هست رو بگیرید ابتدا یک متغیر ( مثلا با نام S ) از نوع String تعریف کنید ، توجه کنید که متغیر رو به صورت عمومی تعریف کنید ( در قسمت Public یا در قسمت Var اصلی فرم ، تا بتونید در Event های مختلف تغییرش بدید )
بعد در OnKeyPress مربوط به DBGrid کد زیر رو بنویسید :

S := S+Key;
در کد بالا مقدار کلید فشرده شده به مقدار S اضافه میشه ...
حالا در OnColEnter مربوط به DBGrid کد زیر رو بنویسید تا وقتی که کاربر به یک Cell وارد میشه ، مقدار S خالی بشه تا بتونه کلیدهای جدید رو بگیره :

S := '';

البته کد اول رو باید کامل کنید ، مثلا کلیدهایی که زده میشن رو چک کنید و اگر کلید مورد نظر بود ( مثلا چیزی غیر از حرف و عدد نبود ) اون موقع ، مقدار رو به S اضافه کنید یا ...
...
در این صورت وقتی که کاربر وارد یک Cell در DBGrid میشه و چیزی رو تایپ میکنه ، مقدار S برابر با اون میشه و میتویند S رو ویرایش کنید ...

نکته دیگه این که با متدهای SelectedField و ... مربوط به DBGrid می تونید فیلد در حال ویرایش رو مشخص کنید ، بعد در هنگام پست یا بعد از پست اطلاعات میتونید مقدار S رو با حرف تایپ شده توسط کاربر جایگزین کنید ...

موفق باشید ...

SYNDROME
دوشنبه 28 آبان 1386, 08:02 صبح
با تشکر فراوان از همه دوستان مخصوصاً آقا محمود گل.
مشکل خودم را جور دیگری حل کردم.
واقعاً دستتان درد نکند.
موفق باشید

Valadi
دوشنبه 28 آبان 1386, 08:26 صبح
جناب SYNDROME
اگر امکان داره سورس برنامه را اینجا قرار بده تا دیگران هم استفاده کنند