首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

DataGrid互相嵌套的有关问题

2012-03-09 
DataGrid互相嵌套的问题?我用DataGrid嵌套来操作相关联的分类表,现在两层嵌套是基本上会了,也能实现里面一

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(ds, "sanjileibiao");
  DataGrid3.DataSource = ds.Tables["sanjileibiao"].DefaultView;
  conn.Close();
  DataGrid3.DataBind();


  }

恳请大师们达人们帮指点一下,菜鸟小弟我先谢过了。

[解决办法]

C# code
    protected void DataGrid2_ItemDataBound(object sender, DataGridItemEventArgs e)     {         if (e.Item.ItemType == ListItemType.Item  ¦ ¦ e.Item.ItemType == ListItemType.AlternatingItem)         {             //你的代码        }       }
[解决办法]
原理都一样,看控件与数据的生成顺序.

热点排行