我想在table控件里嵌套2个GridView,2个都是用BUTTON点开,但是点开第二个gridview会把第一个顶掉,不能把table分2格,一格或者一行放1个吗..
GridView.DataBind();
TabelRow row = new TableRow();   
  TableCell cell = new TableCell();    
  cell.Controls.Add(GridView1);   
  row.Controls.Add(cell);   
  this.Table1.Controls.Add(row);那么另外一个GridView2我怎么放进Table1哦?..点BUTTON1就出GridView1,点BUTTON2就出GridView2。2个可以同时显示出来,而不是显示第二个就不显示第一个,我不知道如何动态分行,而且我还想判断有数据的GridView出现在第一行,假如没数据的就往后排(就好象排顺序一样,是否可以在取出时从DataSet里判断?)

解决方案 »

  1.   

    TableCell cell = new TableCell();    
      cell.Controls.Add(GridView1);   
      row.Controls.Add(cell); 
     cell = new TableCell();    
      cell.Controls.Add(GridView2);   
      row.Controls.Add(cell);
      

  2.   

    如果要GridView1套GridView2,需要使用模板列
    参考
    http://dotnet.aspx.cc/
    http://blog.csdn.net/net_lover
      

  3.   

    你的话不清楚,瞎猜着看下来的。首先,在page_load结束之前,至少曾经执行以下代码:TabelRow row = new TableRow();   
    this.Table1.Controls.Add(row);
    TableCell cell = new TableCell(); 
    row.Controls.Add(cell);   
    if(ViewState["第一个gridview存在"]!=null) && (bool)ViewState["第一个gridview存在"])
    {
      GridView g=createGridView1(); //一个函数返回GridView
      cell.Controls.Add(g);   
    }
    cell = new TableCell(); 
    row.Controls.Add(cell);   //增加第一行第二列。如果你想放到第二行,先增加新的row即可。
    if(ViewState["第二个gridview存在"]!=null) && (bool)ViewState["第二个gridview存在"])
    {
      GridView g=createGridView2(); //一个函数返回GridView
      cell.Controls.Add(g);   
    }
    其次,在相关的“按钮”事件中,在创建GridView的时候还要将其存在标志记录入页面ViewState。以上就全部逻辑。
      

  4.   

    上面“this.Table1.Controls.Add(row);”是什么呀,我照抄你的代码,没有仔细看。应该写为:
      this.Table1.rows.Add(row);
    再说一下“按钮”事件的写法,按照上面的逻辑,在按钮1的事件中可以写:
      if(ViewState["第一个gridview存在"]!=null) && (bool)ViewState["第一个gridview存在"])
      {
        ViewState["第一个gridview存在"]=false;
        this.Table1.Rows[0].Cells[0].Controls.Clear();
      }
      else
      {
        ViewState["第一个gridview存在"]=true;
        this.Table1.Rows[0].Cells[0].Controls.Add(createGridView1()); 
      }
      

  5.   

    row  -->  Row分为多行、多格、单个格等是一样的。你应该把这里的GridView看作任何控件,例如ascx(从而隐藏细节),这样你这个问题实际上应该算作最基本的asp.net控件装载原理的入门知识。我的标准是“不会动态装载控件的程序员不用”的,我分配给程序员承包的任务全都有需要动态装载的的控件。
      

  6.   

    sorry,昨天帖子是回家顺手写的..我再把我的思路理一下... 把代码思路贴下来.
    protected void Page_Load(object sender, EventArgs e)
        {  }
     protected void Button1_Click(object sender, EventArgs e)
        {
          OracleConnection conn = new OracleConnection("Data Source=**;Persist Security Info=True;User ID=**;Password=**;Unicode=True");
            conn.Open();
            OracleCommand cmd = new OracleCommand("select * from kk", conn);
            OracleDataAdapter da = new OracleDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            conn.Close();
            GridView1.DataSource = ds;
            GridView1.DataBind();
          TableRow row = new TableRow();
          TableCell cell = new TableCell();
          cell.Controls.Add(GridView1); 
          row.Cells.Add(cell);
          this.Table1.Rows.Add(row);       
        }
    protected void Button2_Click(object sender, EventArgs e)
        {     
           OracleConnection conn = new OracleConnection("Data Source=**;Persist Security Info=True;User ID=**;Password=**;Unicode=True");
            conn.Open();
            OracleCommand cmd = new OracleCommand("select * from gg", conn);
            OracleDataAdapter da = new OracleDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            conn.Close();
            GridView2.DataSource = ds;
            GridView2.DataBind();
            //如何动态填加新行,把GridView2 放在里面?
         }
      //我的格言是"不能做的最好的程序员,是不负责的程序员".
       谢谢sp1234和孟大的指教.
      

  7.   

    项目都验收完了,不过做的不好确实有点对不起客户对不起自己..我刚入行经验浅好多功能实现都是通过把GRIDVIEW里的东西全部拆分了用的(貌似模板的东东互相拆了再合起来效果满好),想在正式测试之前做成动态装载,用AJAX或者XML把以前做的都改完..要学的太多了,动态装载确实第一次做,有些机制比较模糊
      

  8.   

    net_lover(【孟子E章】) 的足够了!这就是控件添加子控件最典型也是最好的方法!