1.在Gridview_RowDataBound中根据条件创建控件。
2.测试时发现在回发的时候动态创建的控件没有了。
解决:在回发的时候再动态创建控件
{
if (IsPostBack)
CreateGridControl();
}
3.使用过程中发现,绑定二次绑定数据源时,控件没值了
原因:Gridview_RowDataBound绑定时,给控件的赋值都进行了IsPostBack的判断.所以没值
解决:提供绑定时的属性支持
bool ReRowDataBoundFlag
{
get
{
if (ViewState["RowDataBoundFlag"] == null)
{
ViewState["RowDataBoundFlag"] = true;
}
return (bool)ViewState["RowDataBoundFlag"];
}
set
{
ViewState["RowDataBoundFlag"] = value;
}
}
{
get
{
if (ViewState["RowDataBoundFlag"] == null)
{
ViewState["RowDataBoundFlag"] = true;
}
return (bool)ViewState["RowDataBoundFlag"];
}
set
{
ViewState["RowDataBoundFlag"] = value;
}
}
总结:
1.动态绑定的控件的值已经被写入了ViewState了,只要在回发的时候创建控件,就可以正常处理了。
2.动态绑定的控件如果有数据源(例如:DrowDownList),那么数据源需要重新绑定。
3.也许ReRowDataBoundFlag属性可以不要,原因时在DataBind中进行的IsPostBack的判断也许是多余的。(没有经过测试)
4.如果不用的行要根据不同的值创建不同的对象,最好将值用过HiddenField进行保存,这样在创建控件的时候就可以有判断的依据