关于Microsoft DataGrid Control数据的打印

nichulas 2003-03-25 10:37:58
在单文档中Microsoft ADO Data Control与Microsoft DataGrid Control关联,就可以从数据库中取到想要打印的数据,请问如何将生成的数据打印或者生成*.xls或者*.csv文件!!如果你不吝赐教,并且问题解决,最少给你200分
...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mountai 2003-08-07
  • 打赏
  • 举报
回复
Good Question
CharmDream 2003-05-24
  • 打赏
  • 举报
回复
可以使用MFC GridCtrl代替MS DataGrid
GridCtrl 在www.codeproject.com中找到,很多中文网站也可以找到
这个类支持直接打印,当然,它不能使用绑定的方法从数据库中读数
不过还是在www.codeproject.com中有人用它派生了一个新类,支持
绑定,郁闷的是类名也叫CDataGrid,跟MS DataGird的类名冲突。
如果要用MS DataGrid,把数据导到Excel打印也是一个好办法
,而且还是比较方便的,不过最好使用动态绑定的办法:
m_DataGrid.SetRefDatasource(NULL);
m_DataGrid.SetRefDatasource((LPUNKNOWN)m_pRecordset);
m_DataGrid.Refresh();

这样,要导数据到EXCEL,就可以直接用m_pRecordset了
具体可以参考www.vckbase.com上的一个例子ADOSource
yangzhb2003 2003-05-19
  • 打赏
  • 举报
回复
up
Tasehouny 2003-03-26
  • 打赏
  • 举报
回复
生成 .xls 和 .csv是很容易的,用Microsoft DataGrid Control打印,我没有做过。

用CListCtrl 打印,我做过。

给你一段代码做参考,如果生成.CSV则不用使用OLE,直接写文本即可。tabtpl.tpl是一个xls格式的文件,我把后缀名改了,实际上是把它当作模板,我在里边设置好了字体,字号,行距等参数,生成表格的时候就自动套用它的格式了。

BOOL CAlloltCalCuPage3::ExportCsvFile(LPCTSTR lzFileName)
{
CAlloltCalCuSheet * psheet = (CAlloltCalCuSheet*) GetParent();
CListCtrl &cList = psheet->m_Page2.GetListCtrl();

if(!cList.GetSafeHwnd())
return FALSE;

int i,j,m_iColCount,m_iLineCount;

CHeaderCtrl *pHeadCtlr = (CHeaderCtrl *)cList.GetDlgItem(0);
m_iColCount = pHeadCtlr->GetItemCount();
m_iLineCount = cList.GetItemCount();
//////////////////////////////////////////////////////////////////////////
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
//创建Excel 2000服务器(启动Excel)

COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CString tplFile = SYSTEM_PATH;
tplFile += "\\tabtpl.tpl";
if(!gFileExist(tplFile))
{
tplFile = "缺少导入文件:"+tplFile;
AfxMessageBox(tplFile,MB_ICONHAND);
return FALSE;
}
if (!ExcelApp.CreateDispatch("Excel.Application") )
{
AfxMessageBox("创建Excel服务失败!");
return FALSE;
}


wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
wbMyBook.AttachDispatch(wbsMyBooks.Open((LPCTSTR)tplFile,vOptional,
vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,
vOptional,vOptional,vOptional,vOptional,vOptional));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);

//////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------
HDITEM hdi;
TCHAR lpBuffer[256];
hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = 256;
CString str;
int row=0,col=0;
//------------------------------------------------------------------------
//设置1行1列的单元的值
for (i=0;i < m_iColCount;i++)
{
pHeadCtlr->GetItem(i, &hdi);
col = i+1;

rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)col),_variant_t(hdi.pszText));
}

for(i= 0;i<m_iLineCount;i++)
{
for(j=0;j<m_iColCount;j++)
{
str = cList.GetItemText(i,j);
row = i+2;
col = j+1;
rgMyRge.SetItem(_variant_t((long)row),_variant_t((long)col),_variant_t((LPCTSTR)str));
}
}

//////////////////////////////////////////////////////////////////////////
wbMyBook.SaveAs(_variant_t(lzFileName),vOptional,vOptional,
vOptional,vOptional,vOptional,2,vOptional,vOptional,
vOptional,vOptional);

rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
wbMyBook.Close(vFalse,vOptional,vOptional);
wbsMyBooks.Close();
ExcelApp.Quit();

return TRUE;


}

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧