要求由客户动态的调整需要打印的数据列.这就要求activereport的控件最好能够动态的增减.谁有这方面的经验?

解决方案 »

  1.   

    我只有动态增加label的,
    for (int i = 0;i < nTotals;i++)
    {//Get the Panel Size
    int width = pictureBox1.Size.Width;
    int height = pictureBox1.Size.Height;Label lb=new Label();
    lb.Location=new Point(i*20,i*30);
    lb.Size= new Size(158,30);
    lb.BorderStyle = BorderStyle.FixedSingle;
    //lb.AutoSize = true;
    lb.Name = "lbName"+i;
    lb.Text = ChannelName;
    this.panel1.Controls.Add(lb);
    lb.BackColor = System.Drawing.Color.Transparent;
    lb.DoubleClick += new System.EventHandler(this.label_DoubleClick);
    lb.MouseHover += new System.EventHandler(this.label_MouseHover);
    lb.MouseLeave += new System.EventHandler(this.label_MouseLeave);
    lb.MouseDown +=new MouseEventHandler(this.label_MouseDown);
    lb.Tag = ***;
    lb.BringToFront();
    lb.BackColor = System.Drawing.Color.LemonChiffon;this.panel1.Invalidate();
    }
      

  2.   

    谢谢 akeen(出没熊) 
      

  3.   

    楼上的楼上能在Winform里用,在Ar里用还是不行
    动态创建控件很麻烦,主要是排版的问题,这是我以前写的打印工资条的代码,工资项目是不固定的,故我只能用动态的加列,
    private void constructReport()
    {
    this.Detail.CanGrow=true;
    this.Detail.CanShrink=true;
    this.Detail.KeepTogether=true;
    for(int i=0;i<dt.Columns.Count;i++)
    {
    if(i>8 && i%9==0)
    {
    this.m_currentY=this.m_currentY+this.m_defaultHeight*2;
    this.m_currentX=0;
    count++;
    } TextBox txt=new TextBox();
    txt.Location=new PointF(this.m_currentX,this.m_currentY);
    this.m_currentX=this.m_currentX+this.m_defaultWidth;
    txt.Width=this.m_defaultWidth;
    txt.Height=this.m_defaultHeight;
    txt.Border.BottomStyle=BorderLineStyle.Solid;
    txt.Border.TopStyle=BorderLineStyle.Solid;
    txt.Border.LeftStyle=BorderLineStyle.Solid;
    txt.Border.RightStyle=BorderLineStyle.Solid;
    txt.Text=dt.Columns[i].ColumnName.Trim();
    txt.Alignment=TextAlignment.Center;
    txt.VerticalAlignment=VerticalTextAlignment.Middle;
    this.Detail.Controls.Add(txt);      }
    this.m_currentX=0f;
    this.m_currentY=0.2f;
    for(int i=0;i<dt.Columns.Count;i++)
    {
    if(i>8 && i%9==0)
    {
    this.m_currentY=this.m_currentY+this.m_defaultHeight*2;
    this.m_currentX=0;
    count++;
    }
    TextBox txt=new TextBox();
    txt.Location=new PointF(this.m_currentX,this.m_currentY);
    this.m_currentX=this.m_currentX+this.m_defaultWidth;
    txt.Width=this.m_defaultWidth;
    txt.Height=this.m_defaultHeight;
    txt.Border.BottomStyle=BorderLineStyle.Solid;
    txt.Border.TopStyle=BorderLineStyle.Solid;
    txt.Border.LeftStyle=BorderLineStyle.Solid;
    txt.Border.RightStyle=BorderLineStyle.Solid;
    txt.Alignment=TextAlignment.Center;
    txt.VerticalAlignment=VerticalTextAlignment.Middle;
    txt.DataField=dt.Columns[i].ColumnName;
    if(dt.Columns[i].DataType.ToString()=="System.Decimal")
    txt.OutputFormat="#,##0.00";
    this.Detail.Controls.Add(txt);
         }
    TextBox txt1=new TextBox();
    txt1.Location=new PointF(0f,this.m_currentY+0.2f);
    this.m_currentX=this.m_currentX+this.m_defaultWidth;
    txt1.Width=this.m_defaultWidth;
    txt1.Height=this.m_defaultHeight;
    this.Detail.Controls.Add(txt1);
    this.Detail.Height=this.m_defaultHeight*count+1f;

    }
      

  4.   

    非常感谢whmjw(明年今日十年之后),我试试!其他高人还有好的方法吗?