PDA

View Full Version : Dynamic Reporting



M.GhanaatPisheh
دوشنبه 09 آبان 1384, 15:27 عصر
DataTable زمان اجرا ساخته میشه.
Column های این Table زمان اجرا مشخص میشن.
حالا Web Based قراره از این DataTable گزارش قابل چاپ گرفته بشه.
راه حل + کد نمونه ؟

titbasoft
سه شنبه 10 آبان 1384, 18:12 عصر
یه کم بیشتر در مورد هدفتون توضیح بدید. یعنی حتما باید جداول به صورت فیزیکی ساخته بشن؟ نمیشه مجازی باشن ؟ منظورم یه چیزی شبیه به اینه:

CREATE TABLE myTables(
tableID int,
name nvarchar(50) ,
userID varchar(20),
constarint pk_myTble PRIMARY KEY (tableID)
)

CREATE TABLE myColumns(
columnID int,
tableID int,
CONSTRAINT pk_myColumns PRIMARY KEY (columnID),
CONSTRAINT fk_myColumns_myTables FOREGIN KEY (tableID) REFERENCES myTables(tableID)
)

M.GhanaatPisheh
چهارشنبه 11 آبان 1384, 10:10 صبح
DataTable توی محیط NET. ساخته میشه که حاصل یه Query هست که Query به صورت RunTime ساخته میشه.
بطور خلاصه من دنبال یه Component یا Solution ی می گردم که بتونه یه DataTable دات نت رو نشون بده.

DataGrid برای من مناسب نیست
چون امکان Printing یا ذخیره گزارش بصورت Client Side یا ... نداره.

M.GhanaatPisheh
شنبه 14 آبان 1384, 15:42 عصر
یه پروژه Open Source روی http://sourcesorce.net هست که DataTable رو به عنوان پارامتر می گیره و PDF از روی DataTable
Generate می کنه.
ایده جالبی داره.

http://sourceforge.net/projects/npdf/

Behrouz_Rad
شنبه 14 آبان 1384, 17:32 عصر
تنها یک روش عملی و خاص برای اینکار وجود داره و اون هم استفاده از متد RenderControl کنترل DataGrid هست.
تمامی کنترل های وب در ASP.NET دارای این متد هستند.
این متد از کلاس Controls به ارث می بره.
این متد، خروجی HTML کنترل ایجاد شده (خروجی ای که از پردازش موتور ASP.NET ایجاد میشه) رو در متغیری از نوع کلاس HtmlTextWriter قرار میده.
کلاس htmlTextWriter نیز محتویاتش رو به کلاس StringWriter پاس میده و این کلاس نیز کلاس StringBuilder رو ایجاد می کنه.
بعد از اتمام Render، یک خروجی از نوع String از کلاس StringBuilder به دست میاد که باید در یک متغیر رشته ای قرارش بدی و در آخر، برای آنکه به مرورگر بفهمونی که این یک متن HTML هست نه یک متن معمولی، باید با استفاده از متد HtmlEncode کلاس httpUtility یا Server، اون رو به اچ تی ام ال، Encode کنی و در پایان چاپش کنی.
با سلسله مراتبی پدر-فرزندی که توضیح دادم، به راحتی می تونی جواب سوالت رو پیاده سازی کنی:


Dim SB as New StringBuilder()
Dim SW as New StringWriter(SB)
Dim htmlTW as New HtmlTextWriter(SW)
DataGrid1.RenderControl(htmlTW)

Dim dataGridHTML as String = SB.ToString()

myLiteralControl.Text = Server.HtmlEncode(dataGridHTML)

M.GhanaatPisheh
شنبه 14 آبان 1384, 17:47 عصر
یه راه هم برای Print کردن DataGrid وجود داره :

Ever tried to print a data grid in ASP.NET? If you have you would have come up with the problem of the data filtering over onto the next page. The result of which are cut-off words and a grid on the next page without any column headers.

When I came up with this problem I had to find a solution that would give me the flexibility to determine exactly what went on each printed page.

I haven't provided the source code to this article simply because the code is too tailored to my particular application and would be confusing. But bear with the article because what I have done is try provide you with the basic framework for implementing your own solution to this problem.

http://www.codeproject.com/aspnet/RussprintTemplates.asp