将DataGrid 中的指定值所在的单元格更改为一个控件
//正确的
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);
}
}
}
最后两种的问题,不只谁能说说为什么会那样?
如果是我代码有问题的话请指正~~!