Exemple #1
0
        /// <summary>
        /// 根据类型创建报表对象。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="dispText"></param>
        /// <returns></returns>
        public static DIYReport.Interface.IRptSingleObj CreateObj(DIYReport.ReportModel.RptObjType pType, string dispText)
        {
            DIYReport.Interface.IRptSingleObj obj = null;
            switch (pType)
            {
            case DIYReport.ReportModel.RptObjType.Line:
                obj = new DIYReport.ReportModel.RptObj.RptLine(null);
                break;

            case DIYReport.ReportModel.RptObjType.Rect:
                obj = new DIYReport.ReportModel.RptObj.RptRect(null);
                break;

            case DIYReport.ReportModel.RptObjType.Text:
                obj = new DIYReport.ReportModel.RptObj.RptLable(null, dispText);
                break;

            case DIYReport.ReportModel.RptObjType.Express:
                obj = new DIYReport.ReportModel.RptObj.RptExpressBox(null, dispText);
                break;

            case DIYReport.ReportModel.RptObjType.Image:
                obj = new DIYReport.ReportModel.RptObj.RptPictureBox(null);
                break;

            case DIYReport.ReportModel.RptObjType.FieldImage:
                obj = new DIYReport.ReportModel.RptObj.RptDBPictureBox(null);
                break;

            case DIYReport.ReportModel.RptObjType.CheckBox:
                obj = new DIYReport.ReportModel.RptObj.RptCheckBox(null);
                break;

            case DIYReport.ReportModel.RptObjType.BarCode:
                obj = new DIYReport.ReportModel.RptObj.RptBarCode(null);
                break;

            case DIYReport.ReportModel.RptObjType.SubReport:
                obj = new DIYReport.ReportModel.RptObj.RptSubReport(null);
                break;

            case DIYReport.ReportModel.RptObjType.FieldTextBox:
                obj = new DIYReport.ReportModel.RptObj.RptFieldTextBox(null);
                break;

            case DIYReport.ReportModel.RptObjType.HViewSpecField:
                obj = new DIYReport.ReportModel.RptObj.RptHViewSpecFieldBox(null);
                break;

            case DIYReport.ReportModel.RptObjType.RichTextBox:
                obj = new DIYReport.ReportModel.RptObj.RptRichTextBox(null);
                break;

            default:
                Debug.Assert(false, "该控件类型目前还没有处理!", "");
                return(null);
            }
            return(obj);
        }
Exemple #2
0
        //画文本对象
        private void drawTextObj(Graphics g, DIYReport.Interface.IRptSingleObj pObj, DataRow pDRow)
        {
            DIYReport.Interface.IRptTextObj textObj = pObj as DIYReport.Interface.IRptTextObj;
            StringFormat strFormat = new StringFormat();
            SolidBrush   foreBrush = new SolidBrush(pObj.ForeColor);

            if (textObj.WordWrap == false)
            {
                strFormat.Trimming    = StringTrimming.EllipsisCharacter;
                strFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit;
            }
            else
            {
                strFormat.FormatFlags = StringFormatFlags.LineLimit;
            }
            strFormat.Alignment = textObj.Alignment;
            RectangleF strRect    = RealRectangle(textObj);
            SizeF      fontSize   = g.MeasureString("A", textObj.Font);
            float      fontFirstY = strRect.Y + (textObj.Size.Height - fontSize.Height) / 2;

            strRect.Y = fontFirstY;
            if (textObj.Type == DIYReport.ReportModel.RptObjType.Text)
            {
                DIYReport.ReportModel.RptObj.RptLable lab = pObj as DIYReport.ReportModel.RptObj.RptLable;
                if (lab.Text != null)
                {
                    g.DrawString(lab.Text, lab.Font, foreBrush, strRect, strFormat);
                }
            }
            else
            {
                //如果绑定的不是文本而是字段、表达式或者系统参数等,那么就需要对它进行解释并绘制它
                string val = "";
                DIYReport.ReportModel.RptObj.RptExpressBox box = pObj as DIYReport.ReportModel.RptObj.RptExpressBox;
                if (box.DataSource != null && box.DataSource != "" && box.DataSource != "[未绑定]")
                {
                    switch (box.ExpressType)
                    {
                    case ReportModel.ExpressType.Express:
                        int beginIndex = 0, endIndex = 0;
                        if (box.Section.SectionType == DIYReport.SectionType.ReportBottom)                                 //统计的字段在报表脚,那么是统计所有的行
                        {
                            beginIndex = 0;
                            endIndex   = _Rows.Length;
                        }
                        else if (box.Section.SectionType == DIYReport.SectionType.PageFooter)                                //统计的字段在页脚,那么是统计当前页所有的行
                        {
                            beginIndex = _HasDrawRowCount - _RowPoint;
                            endIndex   = _HasDrawRowCount;
                        }
                        else if (box.Section.SectionType == DIYReport.SectionType.GroupFooter)                                //统计的字段在分组的脚,那么统计分组涉及到的行
                        {
                            DIYReport.Print.DrawGroupField groupField = _DrawDetailInfo.GetGroupFieldByName(box.Section.GroupField.FieldName);
                            beginIndex = groupField.PrevFirstRowIndex;
                            endIndex   = _HasDrawRowCount;
                        }
                        else
                        {
                            //g.DrawString("不支持的表达式",box.Font,foreBrush,strRect,strFormat);
                            g.DrawString(string.Empty, box.Font, foreBrush, strRect, strFormat);
                            break;
                        }
                        val = DIYReport.Express.ExStatistical.GetStatisticalValue(beginIndex, endIndex - 1, box.DataSource, box.BingDBFieldName, _Rows);
                        if (val == null)
                        {
                            val = " ";
                        }
                        double dval = DIYReport.PublicFun.ToDouble(val);
                        if (box.FormatStyle != null && box.FormatStyle != "")
                        {
                            try{
                                //val = String.Format(box.FormatStyle,dval);
                                val = DIYReport.PublicFun.FormatString(box.FormatStyle.Trim(), dval);
                            }
                            catch {}
                        }
                        g.DrawString(val, box.Font, foreBrush, strRect, strFormat);
                        break;

                    case ReportModel.ExpressType.SysParam:                               //系统参数
                        Type       clsType = System.Type.GetType("DIYReport.Express.ExSpecial");
                        MethodInfo meth    = clsType.GetMethod(box.DataSource);
                        if (meth != null)
                        {
                            object speTxt = meth.Invoke(clsType, null);
                            val = speTxt.ToString();
                        }
                        g.DrawString(val, box.Font, foreBrush, strRect, strFormat);
                        break;

                    case ReportModel.ExpressType.UserParam:                             //用户外部参数
                        DIYReport.ReportModel.RptParam param = DIYReport.UserDIY.DesignEnviroment.CurrentReport.UserParamList[box.DataSource];
                        if (param != null)
                        {
                            g.DrawString(param.Value.ToString(), box.Font, foreBrush, strRect, strFormat);
                        }
                        break;

                    case ReportModel.ExpressType.Field:                             //用户绑定字段
//							string str = "";
//							if(pDRow!=null)
//								str = pDRow[box.DataSource].ToString();
//							g.DrawString(str,box.Font ,foreBrush,RealRectangle(box) ,strFormat);
                        DrawField(g, pDRow, box, foreBrush, strRect, strFormat);
                        break;

                    default:
                        break;
                    }
                }
            }
            if (textObj.ShowFrame == true)
            {
                drawRect(g, pObj);
            }
        }
        private void fillInfoToRptObj(DIYReport.Interface.IRptSingleObj pRptObj, XmlNode pNode)
        {
            int x = PublicFun.ToInt(pNode.Attributes["Location-X"].Value);
            int y = PublicFun.ToInt(pNode.Attributes["Location-Y"].Value);

            pRptObj.Location = new Point(x, y);
            int width  = PublicFun.ToInt(pNode.Attributes["Size-Width"].Value);
            int height = PublicFun.ToInt(pNode.Attributes["Size-Height"].Value);

            pRptObj.Size      = new Size(width, height);
            pRptObj.LinePound = PublicFun.ToInt(pNode.Attributes["LinePound"].Value);
            if (pNode.Attributes["LineStyle"] != null)
            {
                int lineStyle = PublicFun.ToInt(pNode.Attributes["LineStyle"].Value);
                pRptObj.LineStyle = (System.Drawing.Drawing2D.DashStyle)lineStyle;
            }
            else
            {
                pRptObj.LineStyle = System.Drawing.Drawing2D.DashStyle.Solid;
            }
            pRptObj.BackgroundColor = Color.FromArgb(PublicFun.ToInt(pNode.Attributes["BackgroundColor"].Value));
            pRptObj.ForeColor       = Color.FromArgb(PublicFun.ToInt(pNode.Attributes["ForeColor"].Value));
            switch (pRptObj.Type)
            {
            case DIYReport.ReportModel.RptObjType.Line:
                DIYReport.ReportModel.RptObj.RptLine line = pRptObj as  DIYReport.ReportModel.RptObj.RptLine;
                if (pNode.Attributes["LineType"] != null)
                {
                    line.LineType = (DIYReport.ReportModel.LineType) int.Parse(pNode.Attributes["LineType"].Value);
                }
                break;

            case DIYReport.ReportModel.RptObjType.Text:
            case DIYReport.ReportModel.RptObjType.Express:
                //如果是文本对象,需要加载字体的颜色、形状
                DIYReport.Interface.IRptTextObj txt = pRptObj as DIYReport.Interface.IRptTextObj;
                txt.WordWrap = bool.Parse(pNode.Attributes["WordWrap"].Value);
                string sLimg = pNode.Attributes["Alignment"].Value;
                //得到字符对齐方式  //由于早期的报表是存储字符的,为了保持兼容性,也采取这种存储方式
                if (sLimg == "Near")
                {
                    txt.Alignment = StringAlignment.Near;
                }
                else if (sLimg == "Center")
                {
                    txt.Alignment = StringAlignment.Center;
                }
                else
                {
                    txt.Alignment = StringAlignment.Far;
                }

                txt.ShowFrame = bool.Parse(pNode.Attributes["ShowFrame"].Value);
                if (pNode.Attributes["FormatStyle"] != null)
                {
                    txt.FormatStyle = pNode.Attributes["FormatStyle"].Value;
                }
                string    fontName  = pNode.Attributes["Font-FamilyName"].Value;
                float     fontSize  = PublicFun.ToFloat(pNode.Attributes["Font-Size"].Value);
                bool      bold      = bool.Parse(pNode.Attributes["Font-Bold"].Value);
                bool      underline = bool.Parse(pNode.Attributes["Font-Underline"].Value);
                bool      italic    = bool.Parse(pNode.Attributes["Font-Italic"].Value);
                bool      strikeout = bool.Parse(pNode.Attributes["Font-Strikeout"].Value);
                FontStyle fontType  = FontStyle.Regular;
                //通过位运算得到字符stype 靠!怎么会采取这种存储方式呢,看来晚上是不能写的太晚~~~~~~~~
                if (bold)
                {
                    fontType = fontType | FontStyle.Bold;
                }
                if (underline)
                {
                    fontType = fontType | FontStyle.Underline;
                }
                if (italic)
                {
                    fontType = fontType | FontStyle.Italic;
                }


                Font f    = new Font(fontName, fontSize);
                Font font = new Font(f, fontType);
                txt.Font = font;
                if (txt.Type == DIYReport.ReportModel.RptObjType.Text)
                {
                    if (pNode.Attributes["Text"] != null)
                    {
                        DIYReport.ReportModel.RptObj.RptLable lab = txt as DIYReport.ReportModel.RptObj.RptLable;
                        lab.Text = pNode.Attributes["Text"].Value;
                    }
                }
                else
                {
                    DIYReport.ReportModel.RptObj.RptExpressBox box = txt as DIYReport.ReportModel.RptObj.RptExpressBox;
                    if (pNode.Attributes["ExpressType"] != null)
                    {
                        int exType = int.Parse(pNode.Attributes["ExpressType"].Value);
                        box.ExpressType = (DIYReport.ReportModel.ExpressType)exType;
                    }
                    if (pNode.Attributes["DataSource"] != null)
                    {
                        box.DataSource = pNode.Attributes["DataSource"].Value;
                    }
                    if (pNode.Attributes["FieldName"] != null)
                    {
                        box.FieldName = pNode.Attributes["FieldName"].Value;
                    }
                }
                break;

            case DIYReport.ReportModel.RptObjType.Image:
                DIYReport.ReportModel.RptObj.RptPictureBox pic = pRptObj as DIYReport.ReportModel.RptObj.RptPictureBox;
                //处理图片
                ReadRptImage(pic);
                break;

            default:
                break;
            }
        }
        private string rptObjString(DIYReport.Interface.IRptSingleObj pRptObj)
        {
            StringBuilder xmlSB = new StringBuilder();

            xmlSB.Append("<RptObj Name = '" + pRptObj.Name + "'");
            xmlSB.Append(" Type = '" + ((int)pRptObj.Type).ToString() + "'");
            xmlSB.Append(" Location-X='" + pRptObj.Location.X.ToString() + "'");
            xmlSB.Append(" Location-Y='" + pRptObj.Location.Y.ToString() + "'");
            xmlSB.Append(" Size-Width='" + pRptObj.Size.Width.ToString() + "'");
            xmlSB.Append(" Size-Height='" + pRptObj.Size.Height.ToString() + "'");
            xmlSB.Append(" LinePound ='" + pRptObj.LinePound.ToString() + "'");
            xmlSB.Append(" LineStyle ='" + ((int)pRptObj.LineStyle).ToString() + "'");
            xmlSB.Append(" BackgroundColor ='" + pRptObj.BackgroundColor.ToArgb().ToString() + "'");
            xmlSB.Append(" ForeColor ='" + pRptObj.ForeColor.ToArgb().ToString() + "'");
            switch (pRptObj.Type)
            {
            case DIYReport.ReportModel.RptObjType.Line:
                DIYReport.ReportModel.RptObj.RptLine obj = pRptObj as  DIYReport.ReportModel.RptObj.RptLine;
                xmlSB.Append(" LineType ='" + ((int)obj.LineType).ToString() + "'");
                break;

            case DIYReport.ReportModel.RptObjType.Rect:
                break;

            case DIYReport.ReportModel.RptObjType.Text:
            case DIYReport.ReportModel.RptObjType.Express:
                DIYReport.Interface.IRptTextObj txt = pRptObj as DIYReport.Interface.IRptTextObj;
                xmlSB.Append(" WordWrap ='" + txt.WordWrap.ToString() + "'");
                xmlSB.Append(" Alignment ='" + txt.Alignment.ToString() + "'");
                xmlSB.Append(" ShowFrame ='" + txt.ShowFrame.ToString() + "'");
                xmlSB.Append(" FormatStyle ='" + txt.FormatStyle + "'");

                xmlSB.Append(" Font-Bold='" + txt.Font.Bold.ToString() + "'");
                xmlSB.Append(" Font-FamilyName='" + txt.Font.FontFamily.Name + "'");
                xmlSB.Append(" Font-Underline='" + txt.Font.Underline.ToString() + "'");
                xmlSB.Append(" Font-Italic='" + txt.Font.Italic.ToString() + "'");
                xmlSB.Append(" Font-Strikeout='" + txt.Font.Strikeout.ToString() + "'");
                xmlSB.Append(" Font-Size='" + txt.Font.Size.ToString() + "'");

                if (txt.Type == DIYReport.ReportModel.RptObjType.Text)
                {
                    DIYReport.ReportModel.RptObj.RptLable lab = txt as DIYReport.ReportModel.RptObj.RptLable;
                    if (lab.Text != null && lab.Text.Trim() != "")
                    {
                        xmlSB.Append(" Text ='" + lab.Text + "'");
                    }
                }
                else
                {
                    DIYReport.ReportModel.RptObj.RptExpressBox box = txt as DIYReport.ReportModel.RptObj.RptExpressBox;
                    if (box.DataSource != null && box.DataSource.Trim() != "")
                    {
                        xmlSB.Append(" DataSource ='" + box.DataSource.Trim() + "'");
                    }
                    if (box.FieldName != null && box.FieldName.Trim() != "")
                    {
                        xmlSB.Append(" FieldName ='" + box.FieldName.Trim() + "'");
                    }
                    xmlSB.Append(" ExpressType ='" + ((int)box.ExpressType).ToString() + "'");
                }
                break;

            case DIYReport.ReportModel.RptObjType.Image:
                DIYReport.ReportModel.RptObj.RptPictureBox pic = pRptObj as DIYReport.ReportModel.RptObj.RptPictureBox;
                //等待处理图片
                SaveRptImage(pic);
                break;

            default:
                break;
            }
            xmlSB.Append(">");
            //write end rptObj
            xmlSB.Append("</RptObj>");
            return(xmlSB.ToString());
        }