PDA

View Full Version : یک سوال در مورد ورود داده ها در dbgrid



reza5
دوشنبه 26 اردیبهشت 1384, 12:58 عصر
سلام
من میخوام در یک dbgrid مانند شکل با نوشتن شماره دانشجویی در فیلد stu_noکه در جدول
master وجود دارد نام و نام خانوادگی در صورت وجود در فیلد های name و famil ظاهر شوند و فوکوس به فیلد nomre _avalih منتقل شود.
لطفا راهنمایی بفرمایید.
با تشکر.

حمیدرضاصادقیان
دوشنبه 26 اردیبهشت 1384, 13:02 عصر
دوست عزیز میتونی با یک locate دنبال شماره دانشجویی بگردی اگر وجود داشت مقدار بقیه فیلدهاتو بهش اختصاص بدی. :flower:

reza5
دوشنبه 26 اردیبهشت 1384, 20:50 عصر
دوست عزیزمن این کار رو در جاهای دیگه انجام دادم مشکل من کار کردن با dbgrid هستش.
اینکه کد رو کجا بنویسم آخه چیزی که من دیدم اینه برای مثلا فیلد stu_no رویدادی وجود نداره فقط فکر کنم یه دونه بود که اونم مال منو بود.

hr110
سه شنبه 27 اردیبهشت 1384, 07:15 صبح
اینکار عملی است ولی معمولاً کسی به این شکل عمل نمیکنه و بهتر است که یک edit برای این منظور در خارج از گرید قرار دهید.
در هر حال فکر کنم متدهای onBeforPost و یا onBeforeInsert دیتاست که به گرید متصل شده است میتواند به شکلی برای نوع استفاده شما مفید قرار بگیرد.

javidtaheri
سه شنبه 27 اردیبهشت 1384, 18:43 عصر
در رویداد DBGrid1.OnExitcell بنویس
if DBGrid1.SelectedField.FieldName = stu_no then چون این رویداد در هنگام خروج از هر سلول اجرا شده
{
مقادیر را اینجا در جدول جایگزین کن
}
با دستور SetFocus فیلد نهایی را انتخای کن

V60
چهارشنبه 28 اردیبهشت 1384, 01:20 صبح
جناب جاوید
من این رویداری را که فرموده بودید در رویدادهای گرید ندیدم , من دلفی 6 کار می کنم شاید ماله 7 به بالا باشد
ولی همان طور که مدیر سایت گفته بود من هم فکر کنم از رویدادهای مربوط به table و یا کوری استفاده شود بهتر است , من یک زمانی این مشکل را داشتم و با اینها یکجوری خودم را راحت کردم البته قبلش از KEYDOWN و ONCLICK مربوط به گرید استفاده می کردم.

ebnsina
چهارشنبه 28 اردیبهشت 1384, 10:28 صبح
من با این روش زیاد کار کردم و هر کمکی که ازم بربیاد حاضرم.

ببین وقتی شماره دانشجویی وارد شد مثلا اگر کاربر enter کرد میتونی این رویداد رو توی اونت OnKeDown گرید به دام بندازی. در این وقت باید هم بدونی که کاربر توی کدوم ستون (منظورم همین سلول شماره دانجویی یا سلول مثلا نمره است) این کلید رو زده که با ستفاده از DBGrid.SelectedIndex میتونی بفهمی الان توی کدوم ستونه.
بعدش هم برای دادن فوکوس به ستون مورد نظرت کافی همین پراپرتی DBGrid.SelectedIndex رو به شماره ستون دلخواهت ست کنی .
فقط بیاد داشته باش که شماره ستون های گرید از صفر شروع میشه.
حالا وقتی تونستی ضرب کلید Enter رو بفهمی یا موقع خروج از این سلول(ستون) رویداد رو متوجه بشی اونموقع میتونی بری با هر روشی که دوست داری و دوستان هم اشاره کردن مشخصات فیلدهای بعدی رو استخراج کنی . و برای اینکه بریزیشون توی گرید اونها رو داخل مقدار فیلد مربوطه بریز که توی گرید هم نمایش داده میشه.

اگر مشکل دیگه ای داشتی مطرح کن تا سعی کنیم حل بشه.
اما من هم به تبعیت و تکمیل حرف استادمون آقای ربیعی اینو بگم که این روش ورود اطلاعات سنتی ما ایرانی هستش . سعی کن از روش ورود اطلاعات استاندارد استفاده کنی که توی مثالهای دلفی زیاده و قابل اطمینان تره.
موفق باشید.
:موفق:

reza5
چهارشنبه 28 اردیبهشت 1384, 13:49 عصر
با عرض سلام خدمت دوستان و با تشکر از راهنمایی همگی :flower:
کاری که من نهایتا با استفاده از راهنمایی دوستان انجام دادم و جواب هم داده اینه:

procedure TForm1.DBGrid1ColExit(Sender: TObject);
var
t1:boolean;
begin

if DBGrid1.SelectedField.FieldName = 'st_no' then
begin

t1:=dm1.ADOTable1.Locate('st_no',dbgrid1.SelectedF ield.Value,[]);
if t1 then
begin
dm1.ADOTable4.Edit;
DBGrid1.Fields[1].Value:=dm1.ADOTable1.Fields[1].V alue ;
DBGrid1.Fields[2].Value:=dm1.ADOTable1.Fields[2].V alue ;
dBGrid1.Fields[4].FocusControl ;
end;
end;
end;

اما حالا که بحث به اینجا کشید باید بگم که من تو برنامه های تحت داس و فاکس پرو دیدم بیشتر از این روش استفاده میکنن ولی حدود 2-3 سال برنامه نویسی بانک اطلاعاتی انجام میدم ولی هنوز نتونستم یه روش درست و حسابی و مطمئن برای ورود داده رو برای خودم استاندارد کنم. :embr:
چون همونطور که دوستان میدونن تو ورود اطلاعات به بانک چند تا عامل باید در نظر گرفته بشه که طراحی اینترفیس ورود داده ها رو یه مقدار مهم میکنه و حیاتی.
1- حتی الامکان کمتر از موس استفاده بشه تا سرعت بالا بره و کاربر راحت تر باشه
2- اجازه ورود اطلاعات نادرست داده نشه و اگه همچین اتفاقی افتاد به بهترین نحوی کنترل بشه.
3-اگه اطلاعات وارد شده درست بودن ولی مقادیر غلطی وارد شد بشه به بهترین نحو تصحیحش کرد.

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