建立報表(Report Viewer) - 自訂資料來源
但如果是要做動態查詢怎麼辦? 也很簡單~來看看吧。
- 上次提到最後的步驟是我們需要三個物件。
a. ScriptManager
b. SqlDataSource
b. ReportViewer
在ReportViewer的右上角,點擊小三角形,並選擇剛剛產生的報表(RDLC檔),
點擊「選擇報表來源」,並指定「資料來源執行個體」。
如果你要自訂查詢SQL語法,請不要指定「資料來源執行個體」,
也就是上圖中的5. 選擇(無)即可。
接著有兩種基本的方式可以將資料指定給報表
- 1. 指定DataTable給報表。
ReportViewer1.LocalReport.DataSources.Clear();
string strConn = WebConfigurationManager.ConnectionStrings["yourName"].ConnectionString;
string strSQL = @"SELECT * from preorder where active = @active";
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(strConn))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(strSQL, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@active", '0');
SqlDataReader dr = cmd.ExecuteReader();
dt.Load(dr);
dr.Close();
}
}
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsPreOrder", dt));
ReportViewer1.LocalReport.Refresh();
- 2. 直接將SqlDataSource指定給報表。
string strSQL = @"SELECT * from preorder where active = @active";
dsRpt01.SelectParameters.Add("active", TypeCode.String, "0");
dsRpt01.SelectCommand = strSQL;
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsPreOrder", dsRpt01));
ReportViewer1.LocalReport.Refresh();
到這邊,提供更活用的方法指定資料給報表。
但進入報表頁面時,若尚未指定資料來源執行個體給報表資料來源,
不想出現這段字,只要在報表的ReportError事件中,加入 e.Handled = true; 即可。
也可以在ReportError事件,顯示自訂訊息。
protected void ReportViewer1_ReportError(object sender, Microsoft.Reporting.WebForms.ReportErrorEventArgs e)
{
if (e.Exception.Message.Contains("rsReportParameterTypeMismatch"))
ReportErrorMessage.Text = e.Exception.ToString();
else
ReportErrorMessage.Text = BuildUnknownErrorMessage(e);
ReportErrorMessage.Visible = true;
e.Handled = true;
}
沒有留言:
張貼留言