




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章第8节查询统计董久敏本节学习要点1.供应商交易记录查询。2.客户交易记录查询。3.库存查询。4.采购汇总查询本节的任务目标、知识要点
1.实现供应商交易记录查询的设计。2.实现客户交易记录查询的设计。3.实现库存查询的设计。4.实现采购汇总查询的设计,任务目标
1.SQL-Server内联查询基础知识。
2.C#中I/O操作的基础知识。
3.C#中绘图的基础知识。知识要点任务1
—存储过程的设计主要代码说明添加标题文字添加标题文字一、供应商交易记录查询
用的窗体为:frmSupplierBusiReport.cs--功能:为供应商交易记录查询界面中的交易记录列表控件提供数据。数据需要从PurchaseMaster、Supplier、Product、PurchaseDetail这四个数据表中查询:createprocprocSupplierBusinessRecord@fromDatevarchar(10),--查询起始时间
@toDatevarchar(10),--查询结束时间
@classFieldchar(1),--查询类别0:按供应商编号查询--
1:按供应商简称查询
@conditionvarchar(100)--查询条件as任务1
—存储过程的设计主要代码说明添加标题文字添加标题文字declare@queryByvarchar(20)if(@classField='0')--根据类别标识更改查询条件
set@queryBy='pm.SupplierID'elseset@queryBy='s.SupplierSimpleName'declare@sqlvarchar(800)
主要代码说明添加标题文字添加标题文字set@sql='selecta.SupplierID,a.SupplierSimpleName,a.ProductName,a.Quantity,a.Amountfrom(selectSupplierID,SupplierSimpleName,pd.ProductID,ProductName,sum(PurchaseQuantity)asQuantity,sum(PurchaseAmount)asAmountfrom(selectPurchaseID,pm.SupplierID,SupplierSimpleNamefromPurchaseMasterpmjoinSuppliersonpm.SupplierID=s.SupplierIDwhere'+@queryBy+'like''%'+@condition+'%''andPurchaseDatebetween'''+@fromDate+'''and'''+@toDate+'''andpm.PurchaseProperty=1)aspsrjoinPurchaseDetailpdonpsr.PurchaseID=pd.PurchaseIDjoinProductponpd.ProductID=p.ProductIDgroupbypd.ProductID,ProductName,psr.SupplierID,psr.SupplierSimpleName)asaorderbyAmountdesc,Quantitydesc’exec(@sql)任务1
—存储过程的设计主要代码说明添加标题文字添加标题文字说明:1.最内层子查询,实现数据表PurchaseMaster与Supplier的内连接。2.外层子查询,实现将1.的查询结果与数据表PurchaseDetail和Product的内连接。3.最外层的查询,从上述结果中,查询需要的信息。任务1
—存储过程的设计主要代码说明添加标题文字添加标题文字
以下代码请参见文件DataAccessLayer\SupplierBusiReportDAO.cs一、供应商交易记录查询--功能描述:根据供应商编号、供应商简称查询指定期间的供应商交易记录信息。publicIList<IEntity>query(string[]values){stringsql="procSupplierBusinessRecord";SqlParameter[]parameters=newSqlParameter[4];parameters[0]=newSqlParameter("@fromDate",SqlDbType.VarChar,10);parameters[1]=newSqlParameter("@toDate",SqlDbType.VarChar,10);parameters[2]=newSqlParameter("@classField",SqlDbType.Char,1);任务2
—供应商交易记录查询DAO主要代码说明添加标题文字添加标题文字parameters[3]=newSqlParameter("@condition",SqlDbType.VarChar,100);parameters[0].Value=values[0];parameters[1].Value=values[1];parameters[2].Value=values[2];parameters[3].Value=values[3];returnnewDB().GeIEntityList(sql,CommandType.StoredProcedure,parameters,"SuperMarket.Entity.SupplierBusiReport");}
说明:1.查询结果的类型可能是多种类型,为了统一处理,可以采用泛型,也可以采用统一接口,本函数采用IEntity接口。
2.本函数为供应商交易窗体frmSupplierBusiReport.cs中列表提供数据。3.string[]values,包含查询的条件。任务2—供应商交易记录查询DAO主要代码说明添加标题文字添加标题文字
一、将DataGiridView列表中的数据导出到Excel文件中函数(请参见Tools\
CommonUtil.cs文件)
///<summary>///功能:将DataGridView中选中的记录导出到Excel中:///本函数要求DataGridView的第一列须为复选框。///</summary>///<paramname="dgv">DataGridView控件</param>///<paramname="strTitle">导出的Excel标题</param>publicstaticvoidDataGridViewExportToExcel(DataGridViewdgv,stringstrTitle){SaveFileDialogsaveFileDialog=newSaveFileDialog();saveFileDialog.Filter="Excelfiles(*.xls)|*.xls";
任务3—数据导出函数的设计主要代码说明添加标题文字添加标题文字saveFileDialog.FilterIndex=0;saveFileDialog.RestoreDirectory=true;saveFileDialog.CreatePrompt=false;saveFileDialog.FileName=strTitle+".xls";//导出时,点击【取消】按钮
if(saveFileDialog.ShowDialog()==DialogResult.Cancel){return;}//打开用户选定的具有读/写权限的文件。
StreammyStream=saveFileDialog.OpenFile();//-0,使用默认编码。
StreamWritersw=newStreamWriter(myStream,System.Text.Encoding.GetEncoding(-0));stringstrHeaderText="";
任务3—数据导出函数的设计说明添加标题文字添加标题文字try{//写标题
for(inti=1;i<dgv.ColumnCount;i++){//列标题之间空一定的距离
if(i>1){strHeaderText+="\t";}strHeaderText+=dgv.Columns[i].HeaderText;}//将表头写入文件中
sw.WriteLine(strHeaderText);//以下代码将报表主体内容写到文件中
stringstrItemValue="";//依次读取每行的值任务3—数据导出函数的设计说明添加标题文字添加标题文字for(intj=0;j<dgv.RowCount;j++){//如果本行的复选框没有被选中,则忽略此行
if((bool)dgv.Rows[j].Cells[0].EditedFormattedValue!=true){continue;}strItemValue="";//依次读取每列的值
for(intk=1;k<dgv.ColumnCount;k++){if(k>1){strItemValue+="\t";}任务3—数据导出函数的设计说明添加标题文字添加标题文字strItemValue+=dgv.Rows[j].Cells[k].Value.ToString();}//把dgv的每一行的信息写到文件中
sw.WriteLine(strItemValue);}}catch(Exceptionex){MessageBox.Show(ex.Message,"软件提示");throwex;}finally{//关闭流,释放系统资源
sw.Close();myStream.Close();}}任务3—数据导出函数的设计说明添加标题文字添加标题文字
说明:1.功能:将DataGridview中的选中的记录导出到指定的.excel文件中。其中DataGridview控件的第一列须要为DataGridViewCheckBoxColumn类型。2.sw.Close();myStream.Close();
关闭流,释放系统资源。任务3—数据导出函数的设计主要代码说明添加标题文字添加标题文字注意:要引进.NET中的动态库:System.Drawing.DLL、System.Windows.Forms.DLL
(以下代码请参见Print项目中的WinPrinterPageSetting.cs文件一、
实现打印页面设置、打印机设置、打印预览对话框的类的设计。publicclassWinPrinterPageSetting
{//把PrintPage委托声明为类的成员变量
privateSystem.Drawing.Printing.PrintEventHandler_beginPrintValue;privateSystem.Drawing.Printing.PrintPageEventHandler_printPageValue;……}
说明:1.定义两个委托类型的字段,在以后内容,将会讲述。任务4—打印设计类的设计主要代码说明添加标题文字添加标题文字二、构造函数///<summary>///使用printDocument来初始化类的新实例,当printDocument为null时自动创建一个printDocument的实例。///</summary>///<paramname="printDocument">如果为null,则提供一个默认的PrintDocument</param>publicWinPrinterPageSetting(PrintDocumentprintDocument){if(printDocument!=null){_printDocument=printDocument;}任务4—打印设计类的设计主要代码说明添加标题文字添加标题文字else{_printDocument=newPrintDocument();}}
二、BeginPrintValue属性publicSystem.Drawing.Printing.PrintEventHandlerBeginPrintValue{set{//初始委托变量,关联方法
_beginPrintValue=value;//委托调用任务4—打印设计类的设计主要代码说明添加标题文字添加标题文字if(_beginPrintValue!=null){//如果签名一次,则调用一次就增加了一次委托,所以先将以前的委托清掉//如果不这样,有多次签名后,第一次可正确打印预览页面,第二次或其它次可能就是仅偶数页、奇数页等奇怪现象。
_printDocument.BeginPrint-=newSystem.Drawing.Printing.PrintEventHandler(_beginPrintValue);}//BeginPrint事件:在调用Print方法时并且在打印文档的第一页之前发生。_printDocument.BeginPrint+=newSystem.Drawing.Printing.PrintEventHandler(this._beginPrintValue);}get{return_beginPrintValue;}}任务4—打印设计类的设计主要代码说明添加标题文字添加标题文字三、PrintPageValue属性///<summary>///一定要实例化此类后在调用打印/预览之前设置此属性,使之关联一个///方法,目的
是让具体的打印由实例化者来操作。这里当属性使用,
意思就是告诉printerPageSetting打印的具体实现过程是PrintPageEventHandler。///C#调用:/// PrinterPageSetting1.PrintPageValue=///newPrintPageDelegate(this.PrintPageEventHandler);///</summary>publicSystem.Drawing.Printing.PrintPageEventHandlerPrintPageValue{set{ //初始委托变量,关联方法
_printPageValue=value;任务4—打印设计类的设计主要代码说明添加标题文字添加标题文字
//委托调用
if(_printPageValue!=null){//如果签名一次,则调用一次就增加了一次委托,所以先将以前的委//托清掉。如果不这样,有多次签名后,第一次可正确打印预览页面,//第二次或其它次可能就是仅偶数页、奇数页等奇怪现象
_printDocument.Print=newSystem.Drawing.Printing.PrintPageEventHandler(_printPageValue);}//PrintDocument.PrintPage事件:当需要为当前页打印的输出时发生。
_printDocument.PrintPage+=newSystem.Drawing.Printing.PrintPageEventHandler(this._printPageValue);}get{return_printPageValue;} }任务4—打印设计类的设计主要代码说明添加标题文字添加标题文字
说明:以上两个属性的类型都为委托类型,这样可以通过给属性赋值的方法,为有关的事件指定事件过程,方便了以后的开发应用。
本类中的其它属性、方法比较简单明了,不再做详述。任务4—打印设计类的设计主要代码说明添加标题文字添加标题文字
(以下代码请参见Print项目中的PrintOptions.cs窗体)
打印设置窗体如图5-8-1、图5-8-2打印设置界面所示。一、PrintDocument.BeginPrint事件过程的设计privatevoidPrintDoc_BeginPrint(objectsender,System.Drawing.Printing.PrintEventArgse){try{……//计算DataGridView的总宽度
foreach(DataGridViewColumnGridColindgv.Columns){//排除列表中隐藏的列
if(!GridCol.Visible)continue;
任务5
—打印设置界面的设计添加标题文字添加标题文字图5-8-1打印设置界面一任务5
—打印设置界面的设计添加标题文字添加标题文字图5-8-2打印设置界面二任务5
—打印设置界面的设计主要代码说明添加标的题文字添加标题文字
//排除未选中的列
if(!SelectedColumns.Contains(GridCol.HeaderText))continue;TotalWidth+=GridCol.Width;}//获取选中的总行数
foreach(DataGridViewRowgrindgv.Rows){//IsNewRow属性:获取一个指示行是否为用于新记录的行的值。
if(gr.IsNewRow||(!PrintAllRows&&gr.Cells["colSelect"].Value==null)){continue;}selectedRows++;}//初始化变量
PageNo=1;NewPage=true;RowPos=0;}……}任务5
—打印设置界面的设计主要代码说明添加标题文字添加标题文字
说明:1.PrintDocument.BeginPrint事件在调用Print方法时并且在打印文档的第一页之前发生。2.本函数的主要功能:在正式打印之前
(1)统计出DataGridview列表中各列的宽度之和,其中不包括:隐藏的列、未选中的列。
(2)统计出DataGridview列表中的总行数,其中不包括最后一行的空行、未选中的行(如果打印行范围为:选择行)3.gr.Cells[“colSelect”].Value==null,本行未选中;gr.Cells[“colSelect”].Value==true,本行选中。任务5
—打印设置界面的设计主要代码说明添加标题文字添加标题文字二、PrintDocument.PrintPage事件过程的设计privatevoidPrintDoc_PrintPage(objectsender,System.Drawing.Printing.PrintPageEventArgse){……}
说明:1.PrintDocument.PrintPage事件,当需要为当前页打印的输出时发生。即正式从第一页开始打印。2.if(PageNo==1){//计算每列的;列宽、列的left、列的类型
foreach(DataGridViewColumnGridColindgv.Columns){}}任务5
—打印设置界面的设计主要代码说明添加标题文字添加标题文字
以上If语句的作用:在开始打印第一页之前,计算出要打印分每列的列宽、行高、打印时每列的开始位置、DataGridview中每列的类型,并将其保存到对应的变量、集合中。3.逐行打印当前页的内容
while(RowPos<=dgv.Rows.Count-1){……}4.if(tmpTop+CellHeight>=e.MarginBounds.Height+e.MarginBounds.Top){DrawFooter(e,RowsPerPage);NewPage=true;PageNo++;e.HasMorePages=true;return;}任务5
—打印设置界面的设计主要代码说明添加标题文字添加标题文字如果if条件成立,则打印完一页后,需要换页打印;NewPage=true;则意味着在打印新页时,需要先打印标题和表头。否则,不需要打印标题和表头。4.e.HasMorePages=true:换页,继续打印,e.HasMorePages=false:停止打印。5.if(NewPage){……}
如果if语句条件成立,则说明刚开始打印新页,因此需要打印报表的标题和表头及表头部分的背景。6.打印报表的主体部分foreach(DataGridViewCellCelinGridRow.Cells){……}
根据列的类型,逐列打印当前行的内容。7.在打印第一页的过程中,统计出每页打印的行数if(PageNo==1)RowsPerPage++;
任务5
—打印设置界面的设计主要代码说明添加标题文字添加标题文字
三、打印页脚函数privatevoidDrawFooter(System.Drawing.Printing.PrintPageEventArgse,intRowsPerPage){doublecnt=0;if(PrintAllRows){if(dgv.Rows[dgv.Rows.Count-1].IsNewRow)cnt=dgv.Rows.Count-2;elsecnt=dgv.Rows.Count-1;}elsent=selectedRows;
}任务5
—打印设置界面的设计主要代码说明添加标题文字添加标题文字
说明:以上代码的作用确定打印的行数:1.如果用户选择的是打印全部行,则需要判断最后一行是否为空行,如果if(dgv.Rows[dgv.Rows.Count-1].IsNewRow)条件成立,则最后一行为空行,因此此行不包含在打印行中,再去掉DataGridview中表头一行,这样打印的行数为cnt=dgv.Rows.Count–2。2.如果用户选择的是打印选中的行,则打印行数为用户选中的行数,即cnt=selectedRows;
任务5
—打印设置界面的设计主要代码说明添加标题文字添加标题文字
(以下代码请参见frmSupplierBusiReport.cs窗体)
供应商交易记录查询窗体完成的功能:1.完成供应商交易记录的查询。2.将查询结果导出到Excel文件中。3.将查询结果以报表形式打印:可以将查询结果全部打印,也尅将查询结果中的部分行、部分列打印成报表。4窗体设计如下图
图5-8-3供应商交易记录查询窗体所示。
任务6
—供应商交易记录查询窗体的设计图5-8-3供应商交易记录查询窗体任务6
—供应商交易记录查询窗体的设计主要代码说明添加标题文字添加标题文字
一、导出数据(到Excel)按钮的单击事件过程privatevoidbtnExport_Click(objectsender,EventArgse){//如果列表中没有记录,则返回。
if(dgvSupplierBusiReport.Rows.Count<=0)return;boolflag=false;//是否选择了记录的标志
//for循环依次判断列表中是否有选中的
for(inti=0;i<dgvSupplierBusiReport.Rows.Count;i++){//获取该单元格的当前格式化值if((bool)dgvSupplierBusiReport.Rows[i].Cells[0].EditedFormatted
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 品牌形象重塑的必要性与方法计划
- 理论应用于实践的马工学管理学试题及答案
- 掌握马工学的战略眼光试题及答案
- 2024年陪诊师考试难度评估及试题及答案
- 商务活动中的健康与安全礼仪试题及答案
- 2024注册会计师学习理念试题及答案
- 不同文化背景下的马工学管理学试题及答案
- 2024年1月份跨境保健品代理合同中的绿色关税优惠政策适用条款
- 黑龙江省佳木斯市永红区2025届五年级数学第二学期期末学业水平测试试题含答案
- 数据可用性与维护知识试题及答案
- 受限空间安全培训
- 2025-2030中国城市和干线铁路信号设备行业市场发展趋势与前景展望战略研究报告
- 2025上半年贵州成黔企业(集团)有限公司招聘管理人员20人笔试参考题库附带答案详解
- 湖北省武汉市2025届高三下学期二月调研考试数学试卷
- 2025年志愿服务知识竞赛考试题(附答案)
- 上海市徐汇区上海中学2024-2025学年高一下学期3月月考地理试题(含答案)
- 二零二五年度研学旅行基地运营管理合同协议
- 仓储场所消防安全培训
- 大学课件-电路分析基础
- 2025年中国流行成分和原料消费深度洞察白皮书
- 2025年昆明长水机场勤务员招聘笔试参考题库含答案解析
评论
0/150
提交评论