2011年12月14日 星期三
Crystal Report常用程式碼段
//列印份數屬性
printerSettings.Copies = 2;
//橫印
printerSettings.DefaultPageSettings.Landscape = true;
//設定印表紙張為A5
System.Drawing.Printing.PrintDocument PDSize = new System.Drawing.Printing.PrintDocument();
for (int i = 0; i < PDSize.PrinterSettings.PaperSizes.Count; i++)
{
if (PDSize.PrinterSettings.PaperSizes[i].PaperName=="A5")
{
System.Drawing.Printing.PaperSize size = PDSize.PrinterSettings.PaperSizes[i];
//選紙張A5
printerSettings.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Paper", size.Width, size.Height);
}
}
//完整印表範例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
namespace CrystalReportsApplication1
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
//Crystal Report for VS2010 Viewer 測試
private void button1_Click(object sender, EventArgs e)
{
// ReportPreview1是CrystalReport1.rpt報表檔的預覽畫面
ReportPreview1 rv1 = new ReportPreview1();
rv1.Show();
}
//Crystal Report for VS2010 直接列印二份報表到預設印表機測試
private void button2_Click(object sender, EventArgs e)
{
CrystalReport1 report1 = new CrystalReport1();
report1.PrintToPrinter(2, false, 0, 0);
}
//Crystal Report for VS2010 選擇印表機後列印測試
private void button3_Click(object sender, EventArgs e)
{
CrystalReport1 report1 = new CrystalReport1();
PrinterSettings printerSettings = new PrinterSettings();
PrintDialog printDialog = new PrintDialog();
printDialog.PrinterSettings = printerSettings;
printDialog.AllowPrintToFile = false;
printDialog.AllowSomePages = true;
printDialog.UseEXDialog = true;
//顯示Print Dialog讓User挑選印表機
DialogResult result = printDialog.ShowDialog();
if (result == DialogResult.Cancel)
{
return;
}
//設定印表機後, 印出報表
report1.PrintOptions.PrinterName = printerSettings.PrinterName;
report1.PrintToPrinter(printerSettings.Copies, false, 0, 0);
}
}
}
---
Welly Lin
2011年12月2日 星期五
ADO.NET Command 及 DataReader 配合 DB Server Stored Procedure 作法
Q : 如何取得資料表的記錄總筆數,並傳回資料表記錄內容?
--------------------------
如果你想要取得DataReader,又要馬上知道所有的列數,
建議你可以利用Stored Procedure的方式達成。
以下為範例:
Create PROCEDURE MyJob_sp_ReturnMyData
(
@UserName varchar(20),
@TotalRecs int output
)
AS
Select * From MyTableName Where UserName = @UserName
Select @TotalRecs = Count(0) From MyTaleName Where UserName = @UserName
然後我們在前端可以這樣做:
//建立Command物件
OleDbCommand cmd = new ("MyJob_sp_ReturnMyData", DBConnstr);
cmd.CommandType = CommandType.StoredProcedure; // 這邊請注意要設定
//加入參數
OleDbParameter paUserName = new OleDbParameter("@UserName", OleDbType.VarChar, 20);
OleDbParameter paTotalCount = new OleDbParameter("@TotalRecs" , OleDbType.integer);
paTotalCount.Direction = ParameterDirection.Output; //這邊請注意要設定
paUserName.Value = "David";
cmd.Parameters.Add(paUserName);
cmd.Parameters.Add(paTotalCount);
//執行
int TotalCount = 0;
try
{
OleDbDataReader dr = cmd.ExecuteRader();
TotalCount = paTotalCount.Value; //取得輸出的列數
}
catch
{
// do something
}
finally
{
//do something like closing conntion and datareader
}
--------------------------
或者 全改用 DataReader 在前端處理:
因為 DataReader 是順向游標 , 無法回到最前面 .
你要把 DataReader 關掉再 ExecuteReader() 一次 .
以下是我的程式內容,需ExecuteReader()兩次,Close()兩次,
第一次取得筆數,第二次將資料(書本名稱)傳入字串陣列
'取得所有書名資料'
Dim myReader As SqlDataReader = sqlCmd.ExecuteReader()
'取得所有列數'
Dim i As Integer = 0
While myReader.Read()
i += 1
End While
myReader.Close()
'將資料(書本名稱)傳入字串陣列'
myReader = sqlCmd.ExecuteReader()
Dim jj(i - 1) As String
i = 0
While myReader.Read()
jj(i) = myReader.GetString(1)
i += 1
End While
myReader.Close()
sqlCN.Close()
--------------------------
節錄來源:http://www.programmer-club.com.tw/showSameTitleN/aspdotnet/9608.html
2011年11月29日 星期二
C# Convert.ToDouble() 與 double.TryParse() 使用比較
- static void Main(string[] args)
- {
- try
- {
- string str = "";
- // 如果str為空字串,則會跳到異常處理:輸入字串格式不正確
- Console.WriteLine(Convert.ToDouble(str));
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- Console.ReadLine();
- }
以上程式碼出現的結果為:輸入字串格式不正確。因為傳入的字串為空,轉換成 double 類型不成功。
- static void Main(string[] args)
- {
- try
- {
- string str = "123.123";
- // 如果str為空字串,則會跳到異常處理:輸入字串格式不正確
- Console.WriteLine(Convert.ToDouble(str));
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- Console.ReadLine();
- }
隨便對 str 給予一個合適的值,程式不會出現錯誤,也可得到結果為:123.123
下面改用另外一種 double.TryParse() 方式處理:
第一種情況仍是將 str 設為空字串,
- static void Main(string[] args)
- {
- try
- {
- string str = "";
- double rst = 0.0;
- Console.WriteLine("转换结果为:" + double.TryParse(str, out rst));
- Console.WriteLine(rst);
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- Console.ReadLine();
- }
程式碼執行不會出現錯誤,得到的結果為:
傳回結果:false
rst :0
第二種情況隨便對 str 給予一個合適的值:
- static void Main(string[] args)
- {
- try
- {
- string str = "123.123";
- double rst = 0.0;
- Console.WriteLine("转换结果为:" + double.TryParse(str, out rst));
- Console.WriteLine(rst);
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- Console.ReadLine();
- }
程式碼執行不會出現錯誤,得到的結果為:
傳回結果:true
rst :123.123
由以上的測試結果可以看出。使用 double.TryParse() 做類型轉換更安全,
可以對傳回值進行判斷,也可以設置預設的傳回值 0 。
注意事項:
傳入的字串即便已是包含數字字元,但當您使用 TryParse 方法轉換某些數值的型別而言,仍然有可能是無效的。
例如,"256" 不是 byte 的有效值,但卻是 int 的有效值。
" "98.6" 不是 int 的有效值,但卻是 decimal 的有效值。
下列範例顯示如何使用 TryParse 與 long、byte 及 decimal 值的字串表示。
string numString = "1287543"; //"1287543.0" will return false for a long long number1 = 0; bool canConvert = long.TryParse(numString, out number1); if (canConvert == true) Console.WriteLine("number1 now = {0}", number1); else Console.WriteLine("numString is not a valid long"); byte number2 = 0; numString = "255"; // A value of 256 will return false canConvert = byte.TryParse(numString, out number2); if (canConvert == true) Console.WriteLine("number2 now = {0}", number2); else Console.WriteLine("numString is not a valid byte"); decimal number3 = 0; numString = "27.3"; //"27" is also a valid decimal canConvert = decimal.TryParse(numString, out number3); if (canConvert == true) Console.WriteLine("number3 now = {0}", number3); else Console.WriteLine("number3 is not a valid decimal");
節錄來源:http://msdn.microsoft.com/zh-tw/library/bb384043.aspx
Double.TryParse 方法 (String, NumberStyles, IFormatProvider, Double%) 文化特性格式說明。
節錄來源:http://msdn.microsoft.com/zh-tw/library/3s27fasw.aspx
---
Welly Lin
訂閱:
文章 (Atom)