在VB中可以用DataReport控件制作报表,那么,各位VC高手,在VC中怎么制作报表呢,要用到什么控件吗,是什么呢?

解决方案 »

  1.   

    用ActiveX控件是个省事的办法,ActiveX报表控件有很多。
    费事的办法是自己编。自己编的更灵活。
      

  2.   

    http://www.vchelp.net/vchelp/view_article.asp?ft=1&article_id=938
      

  3.   

    我有VC源码。想要的到我站点给我发话!easthot.net
      

  4.   

    风间仓月,你有是吧,能发到我的油箱来吗,感激不尽!!我的油箱是[email protected]谢谢了!!
      

  5.   

    类似EXCEL的报表类库
    作者:supervip
    源代码:类似EXCEL的开发库
    http://www.vckbase.com/document/viewdoc.asp?id=761http://www.vckbase.com/code/downcode.asp?id=2022此代码是一个电子表格类库,还不是很完善,希望大家给多点意见和建议,我会尽快把相应功能丰富进去的。我的信箱:[email protected]
    现在这个sample不是很完整,我也正在完善中,相应的函数接口到时我会整理成一个文档发布给大家。声明:
    对于此代码中可能引用了其他网站上的一些技术,如果侵犯了相关作者的权益请尽快联系我,我会删除其中不合适部分。也请下载此代码的人尊重代码的原作者的意愿。若下载者要使用此代码请自行征求原作者的意见。1.12版本现支持单元格合并,文本对齐方式,字体,字体颜色,表格线定制,单元格读写权控制,列排序,动态增删行列,支持通过剪贴板同其他软件间的数据进行交互,支持单元格图形显示。可根据开发者需要进行二次开发,类库提供比较丰富的开发接口类函数,支持类似EXCEL的所见机所得的打印预览。在下一版本中作者还将加入单元格公式计算,数据库绑定,图表显示,支持HTML文件存储。
    以下为单元格公式解析的部分代码,大家感兴趣可以看一下!CString CGridCtrl::ParserExpression(CString strExpression) 

        CString strSign; //运算符 
        CString strRetu; 
        CString strTmp2; 
        CString strTmp3; 
     
        LPCSTR  lpstr; 
     
        char strTmp[200]; 
        long nTmp;//,nRetu; 
        long i,nLen,nStatus; 
        int nRow,nCol; 
        strExpression.MakeUpper(); 
        nLen = strExpression.GetLength(); 
        strSign = "+,-,*,/,(,)"; 
     
        strRetu = ""; 
        nStatus = 0 ; // 0 初始状态\遇到加减括号等符号  1 字母开始 2 数值开始 
        nTmp = -1; 
        memset(strTmp,0,200); 
        lpstr = strExpression; 
        for ( i=1; i=0 )||(i+1 >=nLen)) //是运算符号 
            { 
                if ((i+1 >= nLen)&&((strExpression.GetAt(i)>=''''0'''') &&  
                    (strExpression.GetAt(i)<=''''9''''))) 
                { 
                    nStatus = 2; 
                    nTmp++; 
                    strTmp[nTmp] = lpstr[i];//strExpression.GetAt(i); 
                } 
                if ((nStatus==2)&&(strExpression.GetAt(i)==''''('''')) nStatus=1; 
                if ( nStatus==1 )    //非单元格和正常计算数,直接拼串返回 
                { 
                    strTmp3 = ""; 
                    strTmp3.Format("%s",strTmp); 
                    strRetu = strRetu + strTmp3; 
                } 
                else if ( nStatus == 2)            //正常单元格对象或者数字 
                { 
                    //项 strRetu = strRetu + "<" + _T(strTmp) + ">"; 
                    if (!IsValidCol(strTmp)) 
                    { 
                        //return "#NAME!"; 
                        strTmp3 = ""; 
                        strTmp3.Format("%s",strTmp); 
                        strRetu = strRetu + "(" + strTmp3 + ")"; 
                    } 
                    else 
                    { 
                        nRow = 0; nCol = 0; 
    //                    strTmp = ParserCell() 递归 
    //                    MessageBox(strTmp,"ooo",1); 
                        strTmp2.Format("%s",strTmp); 
                        CCellID cell; 
                        if (ConvertStrToCellID(strTmp2,cell)) 
                        { 
        //                    MessageBox(strTmp,"ooo1111",1); 
                            strTmp3 = ParserCell(cell.row,cell.col); 
                            sprintf(strTmp,"%s",strTmp3.GetBuffer(strTmp3.GetLength())); 
                            strTmp3 = ""; 
                            strTmp3.Format("%s",strTmp); 
                            strRetu = strRetu + "(" + strTmp3 + ")"; 
                        } 
                        else 
                            return "#INVALID!"; 
                        //strRetu = strRetu + "<" + _T(strTmp) + ">"; 
        //                MessageBox(strTmp,"ooo2222",1); 
                    } 
                } 
     
                nStatus = 0; 
                nTmp = -1 ; 
                memset(strTmp,0,200); 
     
                if (!((i+1 >= nLen)&&((strExpression.GetAt(i)>=''''0'''') &&  
                    (strExpression.GetAt(i)<=''''9'''')))) 
                { 
                    strTmp3 = ""; 
                    strTmp3.Format("%c",lpstr[i]);//strExpression.GetAt(i)); 
                    strRetu = strRetu + strTmp3; 
                } 
            } 
            else if ((strExpression.GetAt(i)>=''''A'''') && (strExpression.GetAt(i)<=''''Z'''')) 
            { 
                nStatus = 1; 
                nTmp++; 
                strTmp[nTmp] = strExpression.GetAt(i); 
     
            } 
            else if ((strExpression.GetAt(i)>=''''0'''') && (strExpression.GetAt(i)<=''''9'''')) 
            { 
                nStatus = 2; 
                nTmp++; 
                strTmp[nTmp] = lpstr[i];//strExpression.GetAt(i); 
            } 
     
        } 
     
        return strRetu; 

    图像1:用类库做的样例