ورود

View Full Version : سوال: سوال در مورد گروه بندی فیلدهای گزارش



moradian
جمعه 27 فروردین 1389, 12:22 عصر
سلام دوستان من با Fast Report کار می کنم به یه مشکل برخوردم که از اساتید فن راهنمایی می خوام:
برای روشن شدن مطلب به این ساختار دقت کنید:
کلاس -----درس -----نمره
--------------------------------
اول-------ریاضی------14
اول-------علوم---------16
اول-------اجتماعی ----18
دوم -------ریاضی ----15
دوم -------عربی ------14

خوب حالا می خوام ساختار گزارش به شکل زیر باشه(گروه بندی شده):
کلاس -----درس -----نمره
--------------------------------
-----------ریاضی------14
اول-------علوم---------16
-----------اجتماعی ----18
دوم -------ریاضی ----15
-----------عربی ------14

البته از Cross Table هم استفاده کردم ولی مشکل اینه که راست به چپ نمی شه
ممنون اگه راهنمایی بفرمایید

__________________
زکوه العلم نشرها
http://hmsoft.blogfa.com

vcldeveloper
جمعه 27 فروردین 1389, 14:23 عصر
با استفاده از باند Group Header می تونید داده ها را گروه بندی کنید. البته فکر کنم یک گزینه ایی هم برای عدم نمایش داده های تکراری در سطرها در فست ریپورت بود.

در هر حال، استفاده مناسب از Group Header مستلزم این هست که کوئری شما هم با استفاده از Group by گروه بندی شده باشه، یا حداقل بر اساس همون فیلد مرتب شده باشه.

moradian
جمعه 27 فروردین 1389, 16:11 عصر
ممنون جناب کشاورز
ولی استفاده از Group Header شکل مورد نظر فوق را ایجاد نمی کنه بلکه شکلی مثل زیر ایجاد می کنه:
کلاس -----درس -----نمره
--------------------------------
اول----------------------------
-----------ریاضی------14
----------علوم---------16
-----------اجتماعی ----18
دوم----------------------------
-----------ریاضی ----15
-----------عربی ------14

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


private
s: string;
cl: TColor;
//-----------------------------------------------
procedure TForm1.frxDBDataSet1First(Sender: TObject);
var
Memo: TfrxMemoView;
begin
s := frxDBDataSet1.DataSet.FieldByName('ClsName').AsStr ing;
Memo := frxDBDataSet1.FindObject('Memo1') as TfrxMemoView;
Memo.Frame.Typ := [ftTop, ftLeft, ftRight];
cl := Memo.Font.Color;
end;

procedure TForm1.frxDBDataSet1Next(Sender: TObject);
var
Memo: TfrxMemoView;
begin
Memo := frxDBDataSet1.FindObject('Memo1') as TfrxMemoView;
if s <> frxDBDataSet1.DataSet.FieldByName('ClsName').AsStr ing then begin
Memo.Frame.Typ := [ftTop, ftLeft, ftRight];
Memo.Font.Color := cl;
s := frxDBDataSet1.DataSet.FieldByName('ClsName').AsStr ing;
end else begin
if frxDBDataSet1.DataSet.Eof then
Memo.Frame.Typ := [ftLeft, ftRight, ftBottom]
else
Memo.Frame.Typ := [ftLeft, ftRight];
Memo.Font.Color := Memo.Color;
end;
end;



__________________
زکوه العلم نشرها
http://hmsoft.blogfa.com

danesh1351
جمعه 27 فروردین 1389, 20:34 عصر
دوست عزيز
سعي كن جدول يا كوري ارسال شده به فست ريپورت را بر اساس كلاس و درس مرتب كني.
سپس در فست ريپورت master Band را ايجاد كن و درس و نمره را در آن قرار بده .
سپس يك Group Header Band ايجاد كن و آنرا به جدول ارسال شده وصل كن و فيلد كلاس را براي آ‹ انتخاب كن .
اميدوارم جواب بده