DataGrid互相嵌套的问题?
我用DataGrid嵌套来操作相关联的分类表,现在两层嵌套是基本上会了,也能实现里面一个DataGrid的增删改事件了。
但我的分类是三层分类,我想再嵌套一个DataGrid,以便对整个分类进行操作。可是如何去找到第三层的DataGrid这个控件呢?
现在三个数据控件的层次结构是:
DataGrid1是最外层,DataGrid2是第二层,DataGrid3是第三层。
在DataGrid1_ItemDataBound里面,用e.Item.FindControl("DataGrid2")是可以找到第二层的。
但是如何去找DataGrid3呢?
在DataGrid2_ItemDataBound里面,用e.Item.FindControl("DataGrid3")找不到啊!报错“
未将对象引用设置到对象的实例”。
我的部分C#代码如下:
//事件注册程序开始(暂时这样理解)
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
this.DataGrid1.ItemCreated += new DataGridItemEventHandler(DataGrid1_ItemCreated);
}
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound += new DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
//事件注册程序结束
//DataSet函数
protected DataSet GetDataSet(string sql)
{
SqlConnection conn = new SqlConnection(MyConnectionString);
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
//DataGrid1的数据绑定方法
protected void BindDataGrid1()
{
string sql = "select * from daleibiao";
DataGrid1.DataSource = GetDataSet(sql).Tables[0].DefaultView;
DataGrid1.DataBind();
}
//DataGrid2的数据绑定方法
protected void BindDataGrid2(DataGrid DataGrid2, string sql)
{
DataSet ds = GetDataSet(sql);
DataGrid2.DataSource = ds.Tables[0].DefaultView;
DataGrid2.DataBind();
}
//DataGrid1绑定事件,把二级类表数据绑定到DataGrid2
protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
string sql = "select * from xiaoleibiao where x_did='" + DataGrid1.DataKeys[e.Item.ItemIndex].ToString() + "'";
DataGrid DataGrid2 = (DataGrid)e.Item.FindControl("DataGrid2");
DataGrid2.DataSource = GetDataSet(sql).Tables[0].DefaultView;
DataGrid2.DataBind();
}
}
//DataGrid1创建事件
protected void DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataGrid DataGrid2 = (DataGrid)e.Item.FindControl("DataGrid2");
DataGrid2.ItemDataBound += new DataGridItemEventHandler(this.DataGrid2_ItemDataBound);
}
}
报错的代码段如下:
//DataGrid2绑定事件,把三级类表数据绑定到DataGrid3
protected void DataGrid2_ItemDataBound(object sender, DataGridItemEventArgs e)
{
DataGrid DataGrid2 = (DataGrid)e.Item.FindControl("DataGrid2");
SqlConnection conn = new SqlConnection(MyConnectionString);
conn.Open();
//查询暂不限条件,先看运行是否报错
SqlDataAdapter da = new SqlDataAdapter("select * from sanjileibiao", conn);
DataSet ds = new DataSet();
da.Fill