这已被覆盖了几次,没有合适的答案:
我创建了一个与ObjectDataSource一起使用的自定义分页数据类。在初始测试中,我发现它的性能比旧的SqlDataSource代码差。在调查时,我发现对于每个页面加载,都会创建ObjectDataSource并绑定两次。
调查上面的链接让我相信这可能是一个错误(或无法解释的行为)关于在OnDataBound事件中更改我的GridView的列可见性,如下所示:
protected void gvContacts_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.Pager && e.Row.Cells[0].Text != gvContacts.EmptyDataText)
{
e.Row.Cells[0].Visible = false;
if (Convert.ToInt16(lstSearchType.SelectedValue) == ADDRESS)
{
gvContacts.Columns[2].ItemStyle.Width = Unit.Percentage(30);
gvContacts.Columns[3].Visible = true;
gvContacts.Columns[3].ItemStyle.Width = Unit.Percentage(20);
}
else
{
gvContacts.Columns[2].ItemStyle.Width = Unit.Percentage(50);
gvContacts.Columns[3].Visible = false;
}
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["ID"] = "contact_" + e.Row.Cells[0].Text;
e.Row.Attributes["onclick"] = "javascript:selectRow($(this).attr('id').replace('contact_',''),2);";
e.Row.Attributes["ondblclick"] = "javascript:openContact($(this).attr('id').replace('contact_',''),''); selectRow($(this).attr('id').replace('contact_',''),2);";
//E-mail link
if (e.Row.Cells[4].Text != " ")
{
e.Row.Cells[4].Text = "<a href=\"mailto:" + e.Row.Cells[4].Text + "\">" + e.Row.Cells[4].Text + "</a>";
}
//Birthday highlight
if (e.Row.Cells[6].Text != " ")
{
DateTime dt = Convert.ToDateTime(e.Row.Cells[6].Text);
DateTime now = DateTime.Now;
if (dt.Day == now.Day && dt.Month == now.Month)
{
e.Row.Cells[6].BackColor = System.Drawing.Color.FromArgb(255, 230, 160);
}
}
}
}
我使用此事件来自定义某些字段的显示,以及隐藏在某些搜索类型中不适用的列。
当我禁用该事件时,ODS会停止绑定两次。
我真的不能想办法绕过这种行为。
有没有其他人看到这个问题或开展了一项工作?
答案 0 :(得分:2)
为什么要更改RowDataBound事件中列的可见性?将为您绑定的每个项目调用此事件。
在GridView上实际执行DataBind()调用之前隐藏列。
如果这对您没有帮助,则需要提供用于数据绑定的代码。