if you are creating those controls dynamically, you have to always recreate them upon postbackthis.Controls.Add( Table对象); //or YourFormID.Controls.Add( Table对象);TableRow obj = new TableRow();TableCell oc = new TableCell();
oc.Controls.Add (this.DataGrid1);//把datagrid1作为1列
obj.Cells.Add(oc);oc = new TableCell();
oc.Controls.Add (this.DataGrid2);
obj.Cells.Add(oc);oc = new TableCell();
oc.Controls.Add (this.DataGrid3);
obj.Cells.Add(oc);Table对象.Rows.Add(obj);
oc.Controls.Add (this.DataGrid1);//把datagrid1作为1列
obj.Cells.Add(oc);oc = new TableCell();
oc.Controls.Add (this.DataGrid2);
obj.Cells.Add(oc);oc = new TableCell();
oc.Controls.Add (this.DataGrid3);
obj.Cells.Add(oc);Table对象.Rows.Add(obj);
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %><form id="form1" runat="server">
<asp:Button id=btn1 runat=server text="create" OnClick="CreateGrid"/>
<asp:Button id=btn2 runat=server text="submit" />
</form>
<script runat="server">
bool HasDynamicControl
{
get
{
object o = ViewState["HasDynamicControl"];
if (o==null)
return false;
else
return (bool)o;
}
set
{
ViewState["HasDynamicControl"] = value;
}
}protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
if (HasDynamicControl)
CreateControls();
}Table CreateControls()
{
Table t = new Table();
t.GridLines = GridLines.Both; TableRow tr = new TableRow(); TableCell tc = new TableCell();
tc.Controls.Add (new DataGrid());
tr.Cells.Add(tc); tc = new TableCell();
tc.Controls.Add (new DataGrid());
tr.Cells.Add(tc); tc = new TableCell();
tc.Controls.Add (new DataGrid());
tr.Cells.Add(tc); t.Rows.Add(tr);
form1.Controls.Add(t); return t;
}void CreateGrid(Object sender, EventArgs e)
{
Table t = CreateControls();
SqlDataAdapter da = new SqlDataAdapter("select * from authors; select * from sales; select * from titles;",
"server=localhost;database=pubs;uid=sa;pwd=;");
DataSet ds = new DataSet();
da.Fill(ds);
for (int i=0; i < t.Rows[0].Cells.Count; i++)
{
DataGrid dg = (DataGrid) t.Rows[0].Cells[i].Controls[0];
dg.DataSource = ds.Tables[i].DefaultView;
dg.DataBind();
}
HasDynamicControl = true;
}
</script>
thank you for all help
by the way,"DataGrid dg = (DataGrid) t.Rows[0].Cells[i].Controls[0];"这里的dg跟t里面的datagrid应该是同1个对象吧,只是2个不同的引用,所以对dg的datasource操作也就是对table中的datagrid的操作,是吗?