View Full Version : ادغام سطور در dbgrid
rezvan_DP
شنبه 04 اسفند 1386, 23:04 عصر
سلام
برای ادغام داده های یک ستون خاص در سطرهای مختلف باید چه کار کرد؟
مثلا جدول ما دو ستون BوA دارد. حالا در dbgrid که اطلاعات این جدول رو نشون میده میخوام به ازای همه سطرهایی که داده ستون A اونها برابر هست، داده های ستون B ادغام بشه و در نتیجه به ازای یک داده خاص (مثلا A=ali ) فقط یک سطر داشته باشم:
A=ali B=1
A=ali B=2
A=ali B=3
تبدیل به :
A=ali B=1,2,3
شود.(با کار روی dbgrid و نه نوشتن query در sql)
سپاسگزارم.
حمیدرضاصادقیان
یک شنبه 05 اسفند 1386, 09:14 صبح
فکر کنم شما با ایجاد یک فیلد Calculated در adoquery و ایجاد یک ستون جدید در dbgrid بتونی اینکارو انجام بدی.در رویدادر oncalculated مقداری رو که میخوای جستجو کنی و اگر با مقدار خودت برابر بود جمع اون دوتا رو در ستون جدید به شما نمایش بده.
rezvan_DP
سه شنبه 07 اسفند 1386, 20:44 عصر
خوب متوجه نشدم.چرا ستون جدید؟
البته این (http://barnamenevis.org/forum/showthread.php?t=27037&highlight=%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C+%D8 %A8%D9%87+%D8%B3%D8%B7%D8%B1+%D8%AF%D8%B1+dbgrid) رو پیدا کردم. باید بررسی کنم که آیا مشکل من رو هم حل میکنه یا نه!
dkhatibi
چهارشنبه 08 اسفند 1386, 08:02 صبح
خوب متوجه نشدم.چرا ستون جدید؟
یک فیلد از نوع Calculated تعریف می کنید.
به جای اون دو فیلد که در گرید نمایش می دید. این فیلد را نشون بدید.
منظور از ستون جدید اینه!
rezvan_DP
چهارشنبه 08 اسفند 1386, 20:10 عصر
ببینید تا اونجا که من میدونم از calculated field وقتی استفاده میکنیم که مثلا میخواهیم اطلاعات دو ستون را ادغام کنیم:
مثال help دلفی:
CustomersCityStateZip.Value := CustomersCity.Value + ', ' + CustomersState.Value + ' ' + CustomersZip.Value;اما من میخوام اطلاعات یک ستون در سطرهای مختلف رو باهم ادغام کنم:
A=ali B=1
A=ali B=2
A=ali B=3
تبدیل به :
A=ali B=1,2,3
این کار رو انجام دادم:
توضیح:
جدول اطلاعات مربوط به دروس اساتید رو داره.که به ازای هر درس برای هر استاد یک سطر وجود داره.
برای گزارش کلی باید اسم هر استاد و نام همه دروسش در یک سطر بیاد...
reccount:=DBGrid.DataSource.DataSet.RecordCount;
DBGrid.DataSource.DataSet.Edit;
listdoroos:='';
i:=1;
while i<reccount do begin
begin
j:=i+1;
DBGrid.DataSource.DataSet.RecNo:=i;
currentfamil:=DBGrid.Columns[0].Field.Value ;
while DBGrid.Columns[0].Field.Value=currentfamil do
begin
temp:=DBGrid.DataSource.DataSet.RecNo;
if list[21][1]='1' then //کاربر ستون دروس را انتخاب کرده
listdoroos:=DBGrid.Columns[colcount].Field.Value+', '+listdoroos;//شماره ستون مربوط به اسم دروس استcolcount
DBGrid.DataSource.DataSet.Delete;//اما اینجا اجازه حذف رو نمیده؟
DBGrid.DataSource.DataSet.RecNo:=j;
if temp=DBGrid.DataSource.DataSet.RecNo then
Break;//این رو هم به این خاطر گذاشتم که وقتی اطلاعات ای استاد تموم شد از حلقه خارج بشه،چون در غیر این صورت تو حلقه گیر میکنه
j:=j+1;
end;
DBGrid.Columns[colcount].Field.Value:=listdoroos;//اینجا تمام دروس مربوط به اون استاد در اخرین سطر اطلاعاتش در ستون دروس قرار میگیره
listdoroos:='';
i:=i+j;
end;با کد بالا تونستم لیست دروس رو ادغام کنم اما مشکل اینجاست که اطلاعات اضافی (سایر سطرهای مربوطه که هر کدوم فقط یک درس رو داشتند) رو نمیشه پاک کرد.
اطلاعات این dbgrid حاصل از join جداول اطلاعات اساتید و اطلاعات دروسشون است.
حالا با این توضیحات بازهم باید از فیلد calculated استفاده کنم؟
برای حل مشکل delete چه باید کرد؟
سپاسگزارم.
dkhatibi
پنج شنبه 09 اسفند 1386, 11:30 صبح
با dbgrid نمی تونید این کار را به این شکل انجام بدید. می تونید از جداول Master/Detail استفاده کنید که نام هر استاد در یک جدول و نام دروس مربوطه در جدول دیگری نمایش داده شود.
یا اطلاعات مر بوط به هر استاد را خوانده و به همراه نام اون در یک MEMO نشان دهید.
ضمنا در گزارشهای چاپی که می خواهید تهیه کنید ابزار گزارش گیری کار شما را راخت می کند.
کافیست Group Header ها رو تعیین نمایید.(مثالهای Fastreport را ببینید.)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.