当前位置:科技动态 > vs2010数据源在哪里_VS2010 rdlc报表 不在依赖 数据源

vs2010数据源在哪里_VS2010 rdlc报表 不在依赖 数据源

  • 发布:2023-09-25 14:13

如果MFC的软件中 使用DataGrid控件后,在别的电脑上不能运行行,需要拷贝一个 MSDATGRD.ocx

和msstdfmt.dll? 文件在软件的目录中,并写一个批处理文件

reg.dat

文件内容如下

regsvr32 msdatgrd.ocx

regsvr32 msstdfmt.dll

?

详细介绍如何在MFC中使用DataGrid控件实现数据绑定。

1:新建一个MFC应用程序:DataGridDemo

  

2:选择基于对话框,然后一直下一步,直到完成。

  

?

3:为了简单,清除多于的东西。

  

?

4:现在要插入一个DataGrid控件,前提是你已经将控件添加到工具箱了。

  VS2010默认没有这个控件。添加办法如下:

  在工具栏空白处右键,选中选择项,弹出一个选择工具项的对话框,选中“COM组件”选 项卡

  点击“选择”按钮,因为我是win7 64位的系统,所以路径为SysWOW64,如果为32位请找system32。如下图:

  

?

5:选择MSDATGRD.OCX。选择后,确定。工具箱中应该有了DataGrid控件了。

?

  

6:现在要注册这个组件。

  这一步非常重要!

  需要下载文件:MSDATGRD.OCX

  下载地址:http://www.sychzs.cn/detail/shijiufeng/3198530

  注册方法:命令行? regsvr32.exe C:\Windows\System32\MSDATGRD.OCX

  注意:如果出现"can not initialize data binding“的错误,则还需要注册MSSTDFMT.DLL文件

7:成功注册后现在就来添加DataGrid控件了。

? ? ?在DataGridDemo界面右键选择:"插入Acitve控件"然后选择DataGrid,或者直接从工具箱上拖上来。

?

  

8:将DataGrid的ID和Caption的属性修改为IDC_DATAGRID_TEST ?如图:

  

?

  9:关键的一步:在解决方案上右键,添加-类-ActiveX控件中的MFC类

?

  

10:点击“添加”按钮后在选择“文件”找到刚才的控件的位置,这里选择Column和Columns两个接口,其它的也可以选择,但是不要选择IDataGrid接口:

  因为IDataGrid接口选择后生成的类CDataGrid继承的是COleDispatchDriver类,我们需要的是CDataGrid继承CWnd类。

  至于类CDataGrid的文件CDataGrid.h我们想其它办法解决。

  

?

11:我们从另外的地方将DataGrid.h、DataGrid.cpp复制到项目中。

? ? ? ?其它 的设置如在DataGridDemoDlg.h : 头文件中添加引用与代码

// DataGridDemoDlg.h : 头文件

  #include "DataGrid.h"

  #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

  CDataGrid m_dbTest;

  //数据库连接与数据集

  ConnectionPtr m_pConnection;

  _RecordsetPtr m_pRecordset;

?

?  在?DataGridDemoDlg.cpp : 实现文件中添加引用与代码

#include "CColumn.h"

#include "CColumns0.h"

#include "DataGrid.h"

// TODO: 在此添加额外的初始化代码

//------初始化数据库------//

//AfxOleInit();

m_pConnection.CreateInstance("ADODB.Connection");

//------------------------//

try

{

m_pConnection->ConnectionTimeout = 8;

m_pConnection->PutCursorLocation(adUseClient);

m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\DataBase\\LoginDemo.accdb;","","",adModeUnknown);

}

catch(_com_error e)

{

AfxMessageBox("数据库连接失败");

return FALSE;

}

//---------初始化记录集对象---------------//

try

{

m_pRecordset.CreateInstance("ADODB.Recordset");

//打开记录集

m_pRecordset->Open("SELECT * FROM BALANCE",_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);

}

catch(_com_error e)///捕捉异常

{

CString temp;

temp.Format("aaa连接数据库错误信息:%s",e.ErrorMessage());

AfxMessageBox(temp);

return 0;

}

m_dbTest.SetRefDataSource(NULL);

m_dbTest.SetRefDataSource((LPUNKNOWN)m_pRecordset);

m_dbTest.Refresh();

//另外要注意如下方法内红色部分。

void CData_Disp2Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX,IDC_DATAGRID_TEST,m_dbTest);

}

?

?

最后结果如下:

?

12:可能出错的地方:

  m_dbTest.SetRefDataSource(NULL);?  m_dbTest.SetRefDataSource((LPUNKNOWN)m_pRecordset);

  如果用生成的CDataGrid.h,里面的方法为putref_DataSource

  DDX_Control(pDX,IDC_DATAGRID_TEST,m_dbTest); 这句话可能也会报错,

  因为VS2010生成的类CDataGrid继承的是COleDispatchDriver类,我们需要的是CDataGrid继承CWnd类。

所以最好还是用其它地方的DataGrid.h和DataGrid.cpp文件来替换Vs2010生成的。

最后提供这个例子的代码下载:

在我的下载资源里面:http://www.sychzs.cn/detail/fddqfddq/4505306

首先,新建一个网站,接着添加数据集,并且命名为student,如下图所示:

在该数据集对象上面添加datatable,并且设置列名,如下图所示:

添加一张报表,命名为student,如下图所示:

向报表中添加“表”这一项,如下图所示:

这时就弹出一个选择数据源的对话框,如下图所示,自己选择要添加的数据源并命名:

将对应的datatable项添加到表中,如下图所示:

创建一个aspx页面,拖动reportviewer控件到页面上面,并拖动scriptmanager控件,接下来是简单的代码编写过程:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using www.sychzs.cn;

using Microsoft.Reporting.WebForms;

public partial class _Default : www.sychzs.cn

{

//页面加载的时候绑定数据源

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

FillDataToReport();

}

}

public void FillDataToReport()

{

DataTable dt = new DataTable(); //创建一个datatable

dt.Columns.Add("studentID", typeof(int));

dt.Columns.Add("studentName", typeof(string));

dt.Columns.Add("password", typeof(string));

dt.Rows.Add(1, "王伯仙", "001");

dt.Rows.Add(2, "白云飘飘", "002");

dt.Rows.Add(3, "小神仙", "003");

www.sychzs.cnPath = "student.rdlc"; //查找要绑定的报表

this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("T_Student", dt)); //绑定数据源

}

}

页面运行之后是这样的:

在传统的VS2005与VS2008中,RDLC报表是必须依赖外在的数据集的, 但是VS2010 RDLC 报表不在需要外在数据集,关键是因为RDLC报表 内建了一个数据集,把RDLC报表 用XML方式打开,自己可以按照XML的方式 设定一个数据集如下方式,其中红色的部分为多余的部分,可以去掉.

????????????????????????????stcode??????????System.String??????????????????????????rowno??????????System.String??????????????????????????cinvcode??????????System.String??????????????????????????cinvcname??????????System.String??????????????????????????cinvstd??????????System.String??????????????????????????intb??????????System.String??????????????????????????st01??????????System.String??????????????????????????lotnumber1??????????System.String??????????????????????????st02??????????System.String??????????????????????????lotnumber2??????????System.String??????????????????????????remark1??????????System.String????????????????????????????FDataSet1????????/*?Local?Query?*/????????????????????FDataSet1????????D:\ERP编程\海纳管理软件\KAIERP\FDataSet1.xsd????????Ftransfer??????????????????????????????????

?

在衬托rdlc报表,命名空间如下

using www.sychzs.cn;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Microsoft.Reporting.WinForms;

?

代码如下

?private void Ftranreport_Load(object sender, EventArgs e)??????? {??????????? sqlDataset.Class1 sdc = new sqlDataset.Class1();??????????? DataSet ds = www.sychzs.cn(sqlreport);//生产dataset??????????? ??????????? ReportDataSource rds1 = new ReportDataSource("Ftransfer", ds.Tables[0]);??????????? ReportDataSource rds2 = new ReportDataSource("Ftransferson", ds.Tables[1]);??????????? reportViewer1.LocalReport.DataSources.Clear();??????????? reportViewer1.LocalReport.DataSources.Add(rds1);??????????? reportViewer1.LocalReport.DataSources.Add(rds2);??????????? this.reportViewer1.RefreshReport();//处理呈现当前报表??????? }

其中"Ftransfer" 就是你内建在rdlc报表的数据集

转载于:https://www.sychzs.cn/zhengyingcan/archive/2013/04/13/3017738.html

相关文章

最新资讯