asp.net下动态生成不规则表格

    事件背景:

        当我在做一个公司的绩效考核系统时,发现了一个问题,那就是怎样动态生成一个不规则表格的问题,在网上找了很多,却不是很尽人意。于是自己就做了一个,希望对大家有点儿启发,首先声明做的可能不是太好,请内行人不要见笑哦!

        需要生成的表格如下:

这其中的工作能力和工作态度中的项可能会根据部门的不同而发生变化,可能变的多一个或者是少一个,所以这样就不能用asp.net 中的DataGrid来做了,我想的办法是用Table 对象来动态生成这个表格 ,首先建一个mytable.cs类,代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// mytable 的摘要说明
/// </summary>
public class mytable
{
      private String[] t1;
      private String[] t2;
      private int a,b;

    
      public mytable()
      {
       
      }

      public mytable(String [] t1,String [] t2)
{
          this.t1 = t1;
          this.t2 = t2;
          this.a = t1.Length;
          this.b = t2.Length;
}

      public string[] T1//获取工作能力的参数数组
      {
          get
          {
              return this.t1;
            
          }
          set
          {
              this.t1 = value;
              this.a = value.Length;
          }
      }
      public string[] T2//获取工作态度的参数数组
      {
          get
          {
              return this.t2;
          }
          set
          {
              this.t2 = value;
              this.b = value.Length;
          }
      }

      public Table Cretable()//    生成Table的方法
      {

          Table tb2 = new Table();
          TableRow row1 = new TableRow();
          TableCell td1 = new TableCell();
          td1.Width = 84; td1.RowSpan = 2;
          td1.Text = "姓名";
          td1.Attributes.Add("align", "center");
          row1.Cells.Add(td1);

          TableCell td2 = new TableCell();
          tb2.Attributes.Add("width", "100"); td2.Height = 64; td2.Text = "工作业绩70分";
          td2.Attributes.Add("align", "center");
          row1.Cells.Add(td2);

          TableCell td3 = new TableCell();
          td3.ColumnSpan = a;
          td3.Text = "工作能力10分";
          td3.Attributes.Add("align", "center");
          row1.Cells.Add(td3);

          TableCell td4 = new TableCell();
          td4.ColumnSpan = b;
          td4.Text = "工作态度20分";
          td4.Attributes.Add("align", "center");
          row1.Cells.Add(td4);

          TableCell td5 = new TableCell();
          td5.Text = "总分";
          row1.Cells.Add(td5);

          tb2.Rows.Add(row1);

          TableRow row2 = new TableRow();

          TableCell tdd1 = new TableCell();

          row2.Cells.Add(tdd1);

          for (int i = 0; i < a; i++)
          {
              TableCell tdd2 = new TableCell();
              tdd2.Text = t1[i].ToString();
              tdd2.Width = 25;
              tdd2.Attributes.Add("align", "center");
              row2.Cells.Add(tdd2);
          }

          for (int i = 0; i < b; i++)
          {
              TableCell tdd2 = new TableCell();
              tdd2.Text = t2[i].ToString();
              tdd2.Width = 25;
              tdd2.Attributes.Add("align", "center");
              row2.Cells.Add(tdd2);
          }

          tb2.Rows.Add(row2);

          int t = 0;
          for (int i = 0; i < 6; i++)
          {
              char Sign = 'a';
           
              TextBox box = new TextBox();
              box.ID = "box" + i.ToString();
              box.Width = 80;
              //box.Text = "box" + i.ToString();
              box.Attributes.Add("runat", "server");
            
              TableRow rows = new TableRow();
              TableCell tdd = new TableCell();
              tdd.Controls.Add(box);
              tdd.Width = 90;
              tdd.Attributes.Add("align", "center");
              rows.Cells.Add(tdd);

              TextBox box2 = new TextBox();
              box2.ID = "dd" + i.ToString();
              box2.Width = 100;
              //box2.Text = "dd" + i.ToString();

              TableCell tdd3 = new TableCell();
              tdd3.Controls.Add(box2);
              tdd3.Width = 120;
              tdd3.Attributes.Add("align", "center");
              rows.Cells.Add(tdd3);

              for (int j = 0; j < a + b + 1; j++)
              {

                
                  if (j == a - 2)
                  {
                      TextBox b1 = new TextBox();
                      b1.ID = Sign.ToString() + t.ToString();
                      b1.Width = 27;
                     // b1.Text = Sign.ToString() + t.ToString();
                      b1.Attributes.Add("runat", "server");
                      b1.Attributes.Add("onblur", "sum1("+j+"," + t + ")");
                      TableCell bb = new TableCell();
                      bb.Controls.Add(b1);
                      bb.Attributes.Add("align", "center");
                      rows.Cells.Add(bb);
                  }
                  else if (j == a + b - 2)
                  {
                      TextBox b1 = new TextBox();
                      b1.ID = Sign.ToString() + t.ToString();
                      b1.Width = 27;
                     //b1.Text = Sign.ToString() + t.ToString();
                      b1.Attributes.Add("runat", "server");
                      b1.Attributes.Add("onblur", "sum2("+(j-a+2)+"," + t + ")");
                      TableCell bb = new TableCell();
                      bb.Controls.Add(b1);
                      bb.Attributes.Add("align", "center");
                      rows.Cells.Add(bb);
                  }
                  else if (j == a + b-1)
                  {
                      TextBox b1 = new TextBox();
                      b1.ID = Sign.ToString() + t.ToString();
                      b1.Width = 27;
                      //b1.Text = Sign.ToString() + t.ToString();
                      b1.Attributes.Add("runat", "server");
                      b1.Attributes.Add("onblur", "sum3(" + t + ")");
                      TableCell bb = new TableCell();
                      bb.Controls.Add(b1);
                      bb.Attributes.Add("align", "center");
                      rows.Cells.Add(bb);
                  }
                  else
                  {
                      TextBox b1 = new TextBox();
                      b1.ID = Sign.ToString() + t.ToString();
                      b1.Width = 27;
                      b1.Attributes.Add("runat", "server");
                      //b1.Text = Sign.ToString() + t.ToString();
                      TableCell bb = new TableCell();
                      bb.Controls.Add(b1);
                      bb.Attributes.Add("align", "center");
                      rows.Cells.Add(bb);
                  }

                  Sign++;
                
              }
              t++;
              tb2.Rows.Add(rows);
           

          }

          tb2.Attributes.Add("border", "1");
          tb2.Attributes.Add("bordercolor", "#93bee2");
          tb2.Attributes.Add("cellspacing", "0");
          tb2.Attributes.Add("width", "100%");
          return tb2;
    
      }
   
}

      新建一个test2.aspx页面用来测试该类:

在该页面上放入一个panel , Id为panel1的控件用来放生成的Table

    test2.aspx.cs主要代码如下:

protected void Page_Load(object sender, EventArgs e)
      {
          Table tb1 = new Table();

         String[] t1 ={ "专业知识", "计划能力", "执行能力", "表达能力", "解决问题能力", "创新能力", "合计" };
          String[] t2 ={ "责任感", "忠诚度", "服从精神", "团队精神", "主动性", "纪律性", "合计" };
          mytable table = new mytable();
          table.T1 = t1;
          table.T2 = t2;
          tb1 = table.Cretable();
          this.Panel1.Controls.Add(tb1);

      }

这样就可能根据你传入的数组来动态生成表格,而且下面的每一个单元格中我也给放了一个TextBox控件,这样可以方便地添加数据了。

表格还不太好看,大家用的时候可以在mytable.cs中美化一下。

目前我就想到了这一个方法,希望对大家有所启发,如果大家还有更好的办法,请联系我

posted @ 2010-04-11 18:55  夜色狼  阅读(708)  评论(0编辑  收藏  举报