动态生成表格及控件

 public class Research_Z : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Button btSave;
  protected System.Web.UI.WebControls.Button btClose;
  protected System.Web.UI.WebControls.PlaceHolder PlaceHolder2;
  protected System.Web.UI.WebControls.Label lbSubject;

  protected  static Table tb;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   string str ="select a.subject,b.Project,b.showorder,b.butttype,b.ResprojectId,c.content,c.Ballot,(select count(distinct showorder)";
   str = str+" from infresproject where researchid=a.researchid) as shownumber";
   str = str+" from InfResearch as a";
   str = str+" left outer join";
   str = str+" (select ResprojectId,ResearchId,ShowOrder,ButtType,Project from InfResProject ) as b on b.ResearchId=a.ResearchId";
   str = str+" left outer join";
   str = str+" (select ResProjectId,content,Ballot from InfResOption) as c on c.ResprojectId=b.ResprojectId";
   //str = str+" where a.state='1' and a.subject='7月份服务调查' and isnull(b.project,'0')<>'0'";
   str = str+" where a.state='2' and isnull(b.project,'0')<>'0'";
   str = str+" group by a.subject,b.Project,b.showorder,b.butttype,b.ResprojectId,c.content,c.Ballot,a.researchid";
   str = str+" order by b.showorder";


   // 在此处放置用户代码以初始化页面

   tb = new Table();//创建一个表格
   tb.BorderWidth=Unit.Parse("1");

   tb.Width = Unit.Parse("100%");


   //首先计算需要多少生成多少行
   LocalDBDealer iv = new LocalDBDealer();
   DataTable dtb = iv.ExeSelectDT(str,true);
   lbSubject.Text = dtb.Rows[0][0].ToString();
   int pNo = System.Convert.ToInt32(dtb.Rows[0][7].ToString());//获取需要生成多少行
   int p =0; //记录了获取值的指针

   for (int j=1;j<=pNo;j++)

   {
    //获取该行的所有选项
    DataView view=dtb.DefaultView;
    view.RowFilter="showorder = '"+System.Convert.ToString(j)+"'";
    string btnType = view.Table.Rows[p][3].ToString();//存放按钮类型
    //计算共有多少个选项
    TableRow tr = new TableRow();//创建一行
    int pi =System.Convert.ToInt32(view.Count.ToString());

    //创建一列,放项目
    TableCell cellProject =  new TableCell();//创建单元格,也就是第一列
    cellProject.Text=view.Table.Rows[p][1].ToString();//设置单元格内的文本
    tr.Cells.Add(cellProject);//添加到行中

    for (int i =0;i<pi;i++)
    {
     if (btnType=="单选")
     {
      //生成按钮
      TableCell cel1 =  new TableCell();
      RadioButton rad = new RadioButton();
      rad.Text = view.Table.Rows[i+p][5].ToString();
      rad.GroupName = System.Convert.ToString(j);//设置GROUPNAME的值,保证单选
      cel1.Controls.Add(rad);
      tr.Cells.Add(cel1);
     }
     else//多选按钮
     {
      TableCell cel1 =  new TableCell();
      tr.Cells.Add(cel1);
      CheckBox chb = new CheckBox();
      chb.Text = view.Table.Rows[i+p][5].ToString();
      cel1.Controls.Add(chb);
     }
//     TableCell cell1 =  new TableCell();//创建单元格,也就是第一列
//     cell1.Text=view.Table.Rows[i+s][5].ToString();//设置单元格内的文本
//     tr.Cells.Add(cell1);//添加到行中
//
 
    }
    p = p+pi; //将指针进行累加
    tb.Rows.Add(tr);//添加到表格中
   }

   this.PlaceHolder2.Controls.Add(tb);
   /////////////////////////////////////////

//   textbox.Text="输入结束后请按TAB键";//程序运行时文本框内的提示文本
//
//   textbox.ID="t";//给文本框起个名字
//
//   textbox.Width=200;//设置宽度
//
//   textbox.Height=20;//设置高度
//
//   textbox.AutoPostBack=true;//响应事件的条件
//
//   textbox.TextChanged+=new EventHandler(textbox_TextChanged);//添加事件,在.net中,按TAB自动生成
//
//   textbox.Attributes.Add("onmouseover","t.value=''");//给文本框添加一个javascript事件,当鼠标从文本框中移过时自动清除文本框内的提示内容

 

//   this.PlaceHolder1.Controls.Add(textbox);//添加

 

   ////////////////////////////////////////

           

//   this.PlaceHolder1.Controls.Add(label);//此处将标签添加到PlaceHolder中
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.btSave.Click += new System.EventHandler(this.btSave_Click);
   this.btClose.Click += new System.EventHandler(this.btClose_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void btSave_Click(object sender, System.EventArgs e)
  {
   //保存事件
   //获取行数
   int rows = System.Convert.ToInt32(tb.Rows.Count.ToString());
   for (int i=0;i<rows;i++)
   {
    //循环读取数据
    //得到第一列的值
    string project = tb.Rows[i].Cells[0].Text.ToString();
    //获取列数
    int coms = System.Convert.ToInt32(tb.Rows[i].Cells.Count.ToString());
    for (int j=1;j<coms;j++)
    {
  
     CheckBox chk = (CheckBox)tb.Rows[i].Cells[j].Controls[0];
     if (chk.Checked)
     {
      //获取被选中的按钮的值
      string content = chk.Text.ToString();
      //根据检查到的值提交到数据库里
      string str;
      str = "update infresoption set ballot=isnull(ballot,0)+1 ";
      str = str+"where content='"+content+"' and resprojectid=(select resprojectid from infresproject where project='"+project+"'";
      str = str+"  and researchid=(select researchid from infresearch where subject='"+lbSubject.Text.ToString()+"')) ";
      LocalDBDealer iv = new LocalDBDealer();
      bool success = iv.ExeCommandBool(str);
      if(success)
      {
       //initialize the textbox and Radiobutton
       //ClearEntryField();
//       Response.Write("<script>alert('您的留言提交成功,稍后我们会回复,谢谢你的支持。');</script>");
//       this.Response.Write("<script>window.close();</script>");
      }
      else
      {
       Response.Write("<script>alert('保存时出错');</script>");
       return;
      }

     }
        //string kk = tb.Rows[i].Cells[j].Controls[0].ToString();//可以获取类型
    }
   
   }
   //保存投票人数
   string strSql;
   strSql = "update infresearch set ballot=isnull(ballot,0)+1 where subject='"+lbSubject.Text.ToString()+"' and state='2'";
   LocalDBDealer siv = new LocalDBDealer();
   bool ssuccess = siv.ExeCommandBool(strSql);
   if(ssuccess)
   {
    //保存完成
    Response.Write("<script>alert('提交完成');</script>");
   }
  }

  private void btClose_Click(object sender, System.EventArgs e)
  {
   this.Response.Write("<script>window.close();</script>");
  }
 }

posted on 2004-09-14 16:53  涂鸦田园  阅读(1066)  评论(0编辑  收藏  举报

导航