ورود

View Full Version : اضافه کردن ستون جدید به گرید



mohammad-j
سه شنبه 21 خرداد 1387, 19:44 عصر
سلام بر دوستان
من یک جدول دارم که توی برنامه به گرید وصله .
حالا مشکل این هست که توی جدول کد کالا خورده
حالا می خواهم به ستون به گرید اضافه کنم و وصل کنم به یه جدول دیگه و هر سطر بر اساس کدی که تو ستون هست نام کالا را تو ستون جدید بزنه ؟

اصغر (پآچ)
سه شنبه 21 خرداد 1387, 21:09 عصر
سلام دوست من

برای این کارت باید دو تا جدول را با یه جوین ببنذی بعد که کد کالاهات رو نشون بده مثلا:


SELECT field1.table1 [, field2.table2, ...] FROM teble1 INNER JOIN table2 ON table1.key=table2.field

در قسمت field1 فیلدهای رو توی گریدت نمایش داده بشه رو بنویس (به همون ترتیبی که می خوای توی گرید نمایش داده بشه!).

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

delphiprog3000
چهارشنبه 22 خرداد 1387, 08:42 صبح
با سلام.
در کامل کردن پاسخ دوستمان اینم بگم. که در field های دیبی گریدتون اسامی فیلدهای هر دو جدول خود را بنویسید که هنگام جوین تمامی فیلدهایی که از حاصل جوین است در dbgrid به طور کامل نمایش داده شود.

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

mohammad-j
چهارشنبه 22 خرداد 1387, 10:14 صبح
سلام
ممنون از پاسختون
ولی مد نمایش گرید من مد ویرایش هست و کاربر اطلاعات رو وارد می کنه و بعد ذخیره . نمی توانم از Query استفاده کنم ؟ :ناراحت:

delphiprog3000
چهارشنبه 22 خرداد 1387, 10:28 صبح
سلام.
منظورتون رو درست متوجه نشدم. چه مشکلی دارید؟

mohammad-j
چهارشنبه 22 خرداد 1387, 18:22 عصر
سلام
من یه مثال دیگه می زنم :
ببینید ما 2 تا جدول با مشخصات زیر داریم :
1 - جدول کالا : کد کالا، نام ، قیمت
2 - جدول موجودی : کد کالا ، موجودی

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

گرید اولی :

کد کالا //////////// موجودی
------------------------------
1001/////////////// 5
1002 /////////////// 8

گریدی که من می خواهم داشته باشم :


نام کالا کد کالا موجودی
-------------------------------------------------
موس 1001 5
مانیتور 1002 8

چیزی که مهم هست این هست که چون من می خواهم اطلاعات رو مستقیم وارد گرید کنم و باید وصل بشه مستقیم به جدول ، نمی توانم ار Query استفاده کنم .

delphiprog3000
چهارشنبه 22 خرداد 1387, 18:35 عصر
با سلام.

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

به این صورت:


select name from tbl1 inner join on tbl2.code=tbl1.code
که در این صورت اون رو باید در کوری پاس بدید. که میتوانید آن را در AfterScroll, After insert بنویسید.

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

SYNDROME
چهارشنبه 22 خرداد 1387, 21:20 عصر
می توانید در رویداد OnkeyPress مربوط به DBGrid هر وقت کاربر کد کالا را وارد کرد و کلید Enter را زد شما مقدار را برگردانید.
البته می توانید از رویدا OnColExit هم کمک بگیرید.
موفق باشید

اصغر (پآچ)
چهارشنبه 22 خرداد 1387, 23:36 عصر
سلام دوست من

ببین با این توضیح تو باید از این روش استفاده کنی:
توی فرمت یه ADOQuery با یه DataSource و یه گرید بذار حالا این دستور رو توی Sql مربوط به ADOQuery بنویس :
SELECT * FROM tablekala INNER JOIN tablemojodi ON tablekala.Id = tablemojodi.Id بعد بیا توی گریدت فیلدهایی رو که لازم داری اضافه کن و در رویداد AfterPost مربوط به ADOQuery بنویس :
ADOQuery.Close;
ADOQuery.Open;
ADOQuery.Last; حالا اگه کد به جدول موجودیت اضافه کنی میاد از توی جدول کالاهات اسمش رو برات میاره به همین سادگی و به همین خوشمزگی!

در ضمن اگه هم خواسته باشی می تونی یه AdoTable هم بذاری و به جدول کالاهات وصلش کنی و در رویداد OnShow فرمت بنویسی

ADOTable.Open;
While not(ADOTable.Eof) do Begin
DBGrid.Colums[شماره ستونی که قرار کد کالا در اون وارد بشه].Add(ADOTable.FieldByName('IDKala').AsString);
ADOTable.Next;
end;

تا وقتی کاربر خواست کد کالا رو وارد کنه یه ComboBox توی اون سلول از گریدت باز بشه و کاربر بتونه از میان کدهای جدول کالاهات یه کد رو انتخاب کنه!
موفق و موید باشی