2013歲次癸巳,癸巳者,長流水。對應卦象為地風升。
癸者黑水,陰水,活水,柔水,在天為雨露,在地為水脈。
巳者蛇也。
癸巳者,黑水蛇也。
癸者,種子萌發。
巳者,萬物已成;巳有停止之意,因此亦指草木的增長達到了極限的狀態。
癸巳者,種子萌發到成熟。
巽者風也,木也。
坤者地也,土也。
癸巳者,地下有木,萌芽而生,有上升之義,故為地風升。
--
地風升者。
有生長,晉升之意,草木生長需循序漸進,非一天能成,所以必須步步為營,才能更上層樓。
上位者須有德,才能得吉祥,若盲目冒進,終獲災殃。
2013歲次癸巳,癸巳者,長流水。對應卦象為地風升。
癸者黑水,陰水,活水,柔水,在天為雨露,在地為水脈。
巳者蛇也。
癸巳者,黑水蛇也。
癸者,種子萌發。
巳者,萬物已成;巳有停止之意,因此亦指草木的增長達到了極限的狀態。
癸巳者,種子萌發到成熟。
巽者風也,木也。
坤者地也,土也。
癸巳者,地下有木,萌芽而生,有上升之義,故為地風升。
--
地風升者。
有生長,晉升之意,草木生長需循序漸進,非一天能成,所以必須步步為營,才能更上層樓。
上位者須有德,才能得吉祥,若盲目冒進,終獲災殃。
條碼產生的方法有許多種,常見的方法有:
範例:
private string GetBarcodeImage(string CODE,int BarHeight)
{
try
{
BarcodeSymbology b = BarcodeSymbology.CodeEan13;
Image img = BarcodeDrawFactory.GetSymbology(b).Draw(CODE, BarHeight,1);
return Convert.ToBase64String(UtilityUI.ImageToBuffer(img, System.Drawing.Imaging.ImageFormat.Jpeg));
}
catch (Exception ex)
{
return ex.ToString();
}
}
/// <summary>
/// 將 Image 轉換為 Byte 陣列。
/// </summary>
/// <param name="Image">Image 。</param>
/// <param name="imageFormat">指定影像格式。</param>
public static byte[] ImageToBuffer(Image Image, System.Drawing.Imaging.ImageFormat imageFormat)
{
if (Image == null) { return null; }
byte[] data = null;
using (MemoryStream oMemoryStream = new MemoryStream())
{
//建立副本
using (Bitmap oBitmap = new Bitmap(Image))
{
//儲存圖片到 MemoryStream 物件,並且指定儲存影像之格式
oBitmap.Save(oMemoryStream, imageFormat);
//設定資料流位置
oMemoryStream.Position = 0;
//設定 buffer 長度
data = new byte[oMemoryStream.Length];
//將資料寫入 buffer
oMemoryStream.Read(data, 0, Convert.ToInt32(oMemoryStream.Length));
//將所有緩衝區的資料寫入資料流
oMemoryStream.Flush();
}
}
return data;
}
//====
<Image Name="ImgCode">
<Source>Database</Source>
<Value>=System.Convert.FromBase64String(Fields!CODEIMG.Value)</Value>
<MIMEType>image/png</MIMEType>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</Image>
/// <summary>
/// 報表繫結
/// </summary>
/// <param name="rpt">報表檢視器</param>
/// <param name="dsName">資料集名稱</param>
/// <param name="RptPath">報表路徑</param>
/// <param name="dt">繫結之資料表</param>
public static void ReportBind(
ReportViewer rpt,
string dsName,
string RptPath,
DataTable dt)
{
//Report存放路徑,EX:~/bin/Report
string Path = ConfigurationManager.AppSettings["RptPath"].ToString();
rpt.LocalReport.DataSources.Clear();
rpt.ProcessingMode = ProcessingMode.Local;
rpt.LocalReport.ReportPath =
HttpContext.Current.Server.MapPath(
string.Format("{0}\\{1}", Path, RptPath));
rpt.LocalReport.DataSources.Add(new ReportDataSource(dsName, dt));
rpt.LocalReport.Refresh();
}
/// <summary>
/// 報表繫結
/// </summary>
/// <param name="rpt">報表檢視器</param>
/// <param name="dsName">資料集名稱</param>
/// <param name="RptPath">報表路徑</param>
/// <param name="dt">繫結之資料表</param>
/// <param name="PType">PDF,Excel,Word,Image</param>
public static void ReportExport(
ReportViewer rpt,
string dsName,
string RptPath,
DataTable dt,
string PType)
{
ReportBind(rpt, dsName, RptPath, dt);
//
Microsoft.Reporting.WebForms.Warning[] tWarnings;
string[] tStreamids;
string tMimeType;
string tEncoding;
string tExtension;
//呼叫ReportViewer.LoadReport的Render function,將資料轉成想要轉換的格式,並產生成Byte資料
byte[] tBytes =
rpt.LocalReport.Render(
PType, null, out tMimeType,
out tEncoding, out tExtension,
out tStreamids, out tWarnings);
//將Byte內容寫到Client
string DisplayName =
rpt.LocalReport.DisplayName == "" ?
"report" : rpt.LocalReport.DisplayName;
if (HttpContext.Current.Request.Browser.Browser == "IE")
{
DisplayName =
HttpContext.Current.Server.UrlPathEncode(
DisplayName);
}
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = tMimeType;
HttpContext.Current.Response.
AppendHeader("Content-Disposition",
String.Format("attachment; filename={0}.{1}",
DisplayName, tExtension));
HttpContext.Current.Response.BinaryWrite(tBytes);
HttpContext.Current.Response.End();
} 顯示報表與下載程式碼如下:
protected void btnShowReport_Click(object sender, EventArgs e)
{
UtilityUI.ReportBind(
this.ReportViewer1
,"TB1"
,"rpt110.rdlc"
, GetReportData()
);
} protected void btnDownload_Click(object sender, EventArgs e)
{
this.ReportViewer1.LocalReport.DisplayName = "訂單明細";
UtilityUI.ReportExport(
this.ReportViewer1
, "TB1"
, "rpt110.rdlc"
, GetReportData()
,"PDF"
);
}
開始建立報表,在Report專案中,加入新項目,選擇 Reporting > 報表
加入TypeDataSet(資料集),選擇 資料 > 資料集
在資料集編輯畫面,可以透過伺服器總管新增資料庫table或是自訂table,以下範例為自訂
在TB中按右鍵,加入資料行,以下使用者就可自行定義。
接著就可以開始進行報表設計
在報表編輯畫面上面,使用資料表元件,之後會要求使用者選擇資料集。在此選擇剛剛建立的資料集
設定完成之後畫面如下,資料列即可選到要顯示的欄位
建立專案架構如下:
參考完成後,Web層的參考如下
以上設定WinForm雷同,不同處在參考Microsofrt.ReportViewer.WinForms。
在開發報表時,WebForm與WinForm需要ReportViewer才可瀏覽製作完成的報表檔。
專案部屬後,要正常瀏覽Report,部署主機需要安裝
如今我們參考了
就可避免掉在部署的主機上安裝套件。
點選 檔案>新增專案
進入後在左方選擇 其他專案類型 > Visual Studio 方案
建立完方案即可建立其他專案
再來分別建立兩個類別庫專案,選擇Visual C# > 類別庫。
再來新增Web專案,選擇 Visual C# > ASP .NET Web 應用程式
建立完成後,整個專案架構如下
接著Web專案需參考Data與Report專案,選擇 [加入參考]
在專案的部分,點選Data與Report兩個專案
建立完成後 Web專案參考的部分會多出Data與Report兩個參考
以上簡介方案建立與各個專案之間的相互參考。
想要在報表中插入圖片,有幾種模式,在此介紹使用來源為資料庫的模式
C#:
Byte[] img = GetImageContent();
datatable.rows[0][“IMAGECODE2”]=Convert.ToBase64String(img);
不同於嵌入影像的方式,可以嘗試使用此方式,較有彈性。