将DataGrid 中的指定值所在的单元格更改为一个控件

DataGrid事件代码问题及疑惑
博客围绕DataGrid控件展开,给出了DataGrid1_ItemDataBound事件的正确代码,还列举了DataGrid1_ItemCreated和Page_Load事件下类似代码的不同运行结果,如在不同位置添加Input控件出现数量异常等情况,最后作者对后两种情况的问题原因表示疑惑并希望得到指正。

//正确的
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
   System.Web.UI.HtmlControls.HtmlInputFile updatefile = new HtmlInputFile();
    if (e.Item.Cells[0].Text=="12")
    {
     e.Item.Cells[0].Controls.Add(updatefile);     
    }
  }

之前我也在其他事件下也写了如上的代码但结果有点难以琢磨~~~
第一种:
//这个是比较好理解的
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
//如果代码如下,此时不会发生任何变化,因为这个时候DataGrid 的值还没有binding,所以这个时候的e.item.Cells[0]都还是“”;
     System.Web.UI.HtmlControls.HtmlInputFile updatefile = new HtmlInputFile();
    if (e.Item.Cells[0].Text=="12")
    {
     e.Item.Cells[0].Controls.Add(updatefile);     
    }

  }
第二种:
//莫名
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
//当DataGrid的绑定显示结果为
//       12,12,13,13
//   那么第一个12所在的位置正确的被替换为Input控件。
//   可第二个12所在的位置出现的是3个Input控件。
//  也就是说如果符合条件的单元格不是在最后一条记录那么它所在的单元格添加的控件为其后不符合条件的记录数+1;
//  如果如果符合条件的纪录为最后一条那么就不会出现上面情况。
//  如果符合条件的情况为不连续的话,那么断点所在位置的控件数位其后纪录数+1;
   System.Web.UI.HtmlControls.HtmlInputFile updatefile = new HtmlInputFile();

foreach(DataGridItem _item in DataGrid1.Items)
{
     System.Web.UI.HtmlControls.HtmlInputFile updatefile = new HtmlInputFile();
    if (_item.Cells[0].Text=="12")
    {
     _item.Cells[0].Controls.Add(updatefile);     
    }
}

  }
第三种
//不解!
private void Page_Load(object sender, System.EventArgs e)
  {
   
   string strsql ="select b.component_no,b.attach_no, c.attach_name  from ce_attached_component b, ce_component_history a, ce_attached_file c " +
    " where b.component_no = a.component_no and  b.attach_no(+) = c.attach_no";
   DataTable dt = new DataTable();
   using (OracleData OD = new OracleData(DataCommon.ConnectionString()))
   {
    dt = OD.SelectTable(strsql,"upload");
   }
   this.DataGrid1.DataSource = dt;
   this.DataGrid1.DataBind();

//如果代码写在这里
//那么就只有最后一个符合条件的单元格会被替换为Input 控件!   

      System.Web.UI.HtmlControls.HtmlInputFile updatefile = new HtmlInputFile();

foreach(DataGridItem _item in DataGrid1.Items)
{
     System.Web.UI.HtmlControls.HtmlInputFile updatefile = new HtmlInputFile();
    if (_item.Cells[0].Text=="12")
    {
     _item.Cells[0].Controls.Add(updatefile);     
    }
}
   
  }
最后两种的问题,不只谁能说说为什么会那样?
如果是我代码有问题的话请指正~~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值