Это уже пару раз освещалось без подходящего ответа:
- ObjectDataSource запускается дважды или самостоятельно
- ObjectDataSource создается дважды при изменении элемента управления
Я создал пользовательский класс данных подкачки, который используется с ObjectDataSource. В начальных тестах я обнаружил, что он работает хуже, чем мой старый код SqlDataSource. В ходе исследования я обнаружил, что для каждой загрузки страницы объектDataSource создается и связывается дважды.
Исследование приведенных выше ссылок привело меня к выводу, что это может быть ошибкой (или необъяснимым поведением) в отношении изменения видимости столбца моего GridView в событии OnDataBound, например, так:
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 перестает связываться дважды.
Я не могу придумать, как обойти это поведение.
Кто-нибудь еще видел эту проблему или разработал решение?