Friday, March 6, 2009

Sample coding crystal report app and web .NET

Sample application and web application code by .NET 2005 Studio

Sample application code

MySqlConnection conn = new MySqlConnection("connection string...");
if (conn.State != ConnectionState.Open)
{conn.Open();}

string sqlSelect = "select statment";
MySqlCommand cmd = new MySqlCommand(sqlSelect, conn);

MySqlDataAdapter ad = new MySqlDataAdapter(cmd);

try
{

//DataTable dt = new DataTable();
//dtMySQL = dt;
//dt.Clear();
//ad.Fill(dt);
//dgvMySQL.DataSource = dt;

DataSet ds = new DataSet();
ds.Clear();
ad.Fill(ds, "bb");
dgvMySQL.DataSource = ds;
dgvMySQL.DataMember = "bb";

ds.WriteXmlSchema(@"D:\schemaFile.xsd");

ReportDocument rpt = new ReportDocument();
rpt.Load(@"D:\report.rpt");

//rpt.Database.Tables[0].SetDataSource(ds); // วางตรงนี้ก็ได้

crystalReportViewer1.ReportSource = rpt;

rpt.Database.Tables[0].SetDataSource(ds);
}
catch (Exception ex)
{}
finally
{

rpt.Dispose();

cmd.Dispose();
ad.Dispose();

conn.Close();
conn.Dispose();
}

# หรือใช้ถ้าเราดึง table ที่อยู่ใน DataTable มาออกรายงานเลยก็ประมาณนี้

string shopSchema = @"\shop_report_XmlSchema.xsd";
string shopReport = @"\shop_report.rpt";

DataTable dt = (DataTable)dgvSearchShop.DataSource;
string pathXsd = shopSchema;
dt.TableName = "SHOPS"; // ตั้งชื่อ table ใน databletable
dt.WriteXmlSchema(pathXsd);

ReportDocument rpt = new ReportDocument();
rpt.Load(shopReport);
rpt.Database.Tables[0].SetDataSource(dt);

ReportForm reportForm = new ReportForm(); // มีฟอร์มออกรายงานต่างหาก
reportForm.setReportDocument(rpt); // ส่งรายงานไปให้ viewer แสดง
reportForm.Show();

public partial class ReportForm
{
ReportDocument rpt;

public void setReportDocument(ReportDocument rpt)
{
this.rpt = rpt;
this.crystalReportViewer1.ReportSource = this.rpt;
}
}

Sample web application code

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["paramWebConfig"].ConnectionString.ToString());

SqlCommand cmd = new SqlCommand();

cmd.CommandText = "select statment.....";

// ถ้าใช้ select statment มีการเรียกตัวแปร กัน injection
//cmd.Parameters.Add("@param", SqlDbType.VarChar).Value = "value";

cmd.Connection = conn;

if (conn.State != ConnectionState.Open)
{
conn.Open();
}

SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ds.Clear();

adapter.Fill(ds);

ds.WriteXmlSchema(Server.MapPath(@"schemaFile.xsd"));

// ถ้าเป็นเว็บจะมีปัญหากับ การปิดและคืนหน่วยความจำ รายงานให้ใช้ statc collection มาช่วยเช่น คิว
ReportDocument rpt = new ReportDocument();

rpt.Load(Server.MapPath(@"Report.rpt"));
rpt.Database.Tables[0].SetDataSource(ds.Tables[0]);

// ส่งค่าจากโปรแกรมให้ report
//rpt.SetParameterValue("Param", "value");
//หรือ
//rpt.ParameterFields["Param"].CurrentValues.AddValue("value");

CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();

// ทำไมใช้ที่นี้ไม่ได้หว่า
//rpt.Close();
//rpt.Dispose();

adapter.Dispose();
ds.Dispose();
conn.Close();

# โค้ดนี้จำไม่ได้เลยอ่ะ จะเขียนทีไรต้องหาโค้ดที่เคยทำเปิดดู เลยต้องเขียนลงที่นี้กันเหนียวไว้ก่อน

No comments:

Post a Comment

Popular Posts