最近在使用gridview,添加模板后,网站对于模板按钮操作的代码很多都是在RowDataBound事件中,照抄使用后,本来没有问题。但是在这次做gridview的筛选功能的时候,发现一点小问题,就是我的dropdownlist中有一个是和数据库绑定的,于是在page_load事件中,给这个下拉框添加一个全部的选项。因为我的gridview放在了updatepanel中,每次更新数据后,这个gridview都重新从数据库获取。所以每次这样的时候,这个下拉框的选项又回复到刚开始的时候,少了我添加的自定义选项。于是我在gridview的RowDataBound事件中写:
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList dd = (DropDownList)GridView1.HeaderRow.FindControl("DropDownList1");
ListItem it = new ListItem("all", "all");
dd.Items.Insert(0, it);
}
结果是我的数据行有多少项,这个下拉框就多加了多少个“all”选项。显然是不对的。
仔细看了看,研究了下,终于明白了。每一个数据行绑定后,都调用一次这个函数。
解决办法:很简单,看看gridview的事件中,有一个DataBound事件,就明白了。这个应该是全部数据绑定后调用的函数吧。这样就调用一次了。每次更新gridview的数据,或者说重新绑定,当在updatapanel中把下拉框也更新了的时候,在这里重新添加自定义的选项就可以了。