Dataset | Form | RDLC |
主要放数据集的文件夹 | 存放窗体的文件夹 | 存放各种报表的文件夹 |
第一部,创建报表结构
首先添加数据集项
添加完成之后我们会看到这个页面
之后我们在上面添加一些数据集
数据源的连接要自己设定
之后我们可以输入要编译的sql语句,因为是报表,主要用来查询,一般情况只用select语句就可以
生成之后是这样的一些模型
中间的灰色部分可以双击,进去之后我们能自定义编写一些方法
//用这个方法查询时可以进行拼sql拼接查询,一般不写这个的话是不可以拼接查询的
//加粗部分要根据你不同数据集下的小的数据模型名字不同进行变换
partial class MemberTransferShopTableAdapter
{
internal int FillWhere(MC.MemberTransferShopDataTable dataTable, string whereSql, params SqlParameter[] commandParameters)
{
string sql = this.CommandCollection[0].CommandText;
sql = sql.Substring(0, sql.LastIndexOf("WHERE"));
sql += " WHERE 1=1 " + whereSql;
this.CommandCollection[0].CommandText = sql;
this.Adapter.SelectCommand = this.CommandCollection[0];
this.CommandCollection[0].Parameters.Clear();
foreach (SqlParameter p in commandParameters)
{
this.CommandCollection[0].Parameters.Add(p);
}
dataTable.Clear();
int returnValue = this.Adapter.Fill(dataTable);
return returnValue;
}
}
下面展示两种Form中的连接数据的方法
this.MemberTransferShopTableAdapter.Fill(this.cashier.MemberTransferShopDtl, A参数, A参数,A参数); //参数是你写语句时的参数,报表普遍用这种方法
以下是Fillwhere拼接的方法,拼接方法省去了在数据库里判断的过程,可以减少where后查询的判断,从而加快一定速度。
当然如果没有where条件限制查询速度反而会变慢。主要是减少 CASE WHEN THEN 的试用。
string strWhere = "";
if (strClubID != "")
{
strWhere += " ";
}
if (strIsChainStore != "")
{
strWhere += " ";
}
if (strIsAdvanceSale != "")
{
strWhere += " ";
}
strWhere += " ";
this.waterBarCashierPaymentDtlTableAdapter.FillWhere(this.cashier.WaterBarCashierPaymentDtl, strWhere
, new SqlParameter("@ClubID", strClubID)
);
点击数据模型中间灰色部分我们可以看到属性 ,
我们点击其下面的白色部分也可以看到属性
相信所有人都看到了上图的Parameters ,点击他就会出来窗体,如果你where后有参数的话,我们可以在这里面设置他的类型等属性
到此数据集DataSet文件夹的一些基本操作就叙述完毕
二.Form文件夹下窗体的设置
这里面DataSet 和 BindingSource比较重要
首先是Dataset
选择你要连接的数据集,然后将 BindingSource拉倒窗体上,设置 BindingSource
DataSource属性用来选择连接的DataSet数据集
DataMember选中数据集下的模型
之后他们会自动生成一下的东西
这是窗体上应该具备的东西
这是一个外部空间需要引用,具体我还没自己引用过,我做项目时都是人家引用好了的
这里主要是你在rdlc报表中还可以设置参数,主要是用来页面显示的
//查询
private void btnSeach_Click(object sender, EventArgs e)
{
strWhereOne += " ";
strWhereOne += " ";
this.memberChangeOverToShopTableAdapter.FillWhere(this.mc.MemberChangeOverToShop, strWhereOne
, new SqlParameter("@p_AreaID", strAreaID)
, new SqlParameter("@p_ClubID", ClubID));
//// TODO: 这行代码将数据加载到表“mc.MemberChangeOverToShop”中。您可以根据需要移动或删除它。
//this.memberChangeOverToShopTableAdapter.Fill(this.mc.MemberChangeOverToShop,
// strAreaID,
// strClubID);
if (strIsAdvanceSale != "")
{
strWhere += " AND MC_1.IsAdvanceSale=@isAdvanceSale";
}
strWhere += " ";
this.memberTransferShopTableAdapter.FillWhere(this.mc.MemberTransferShop, strWhere
, new SqlParameter("@p_AreaID", strAreaID)
, new SqlParameter("@p_ClubID", ClubID)
);
//// TODO: 这行代码将数据加载到表“mc1.MemberTransferShop”中。您可以根据需要移动或删除它。
//this.memberTransferShopTableAdapter.Fill(this.mc.MemberTransferShop,
// strAreaID,
);
}
catch (Exception ex)
{
if (strIsAdvanceSale != "")
{
strWhereOne += " AND MC_1.IsAdvanceSale=@isAdvanceSale";
}
strWhereOne += &q