如果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的方式 设定一个数据集如下方式,其中红色的部分为多余的部分,可以去掉.
?
在衬托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