2010-04-08 6 views
0

У меня есть DataGrid, который динамически связан с запросом базы данных. Пользователь вводит текст поиска в текстовое поле, нажимает на поиск, а код позади создает соответствующий запрос базы данных с помощью LINQ (ищет таблицу на основе строки и возвращает ограниченный набор столбцов).Gridview пуст, когда SelectedIndexChanged называется

Затем он задает источник данных GridView для запроса и вызывает DataBind().

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    var query = from record in DB.Table 
       where record.Name.Contains(txtSearch.Text) //Extra string checking etc. removed. 
       select new 
       { 
        record.ID, 
        record.Name, 
        record.Date 
       }; 

    gvResults.DataSource = query; 
    gvResults.DataBind(); 
} 

Это прекрасно работает.

Когда пользователь выбирает строку в сетке, обработчик события SelectedIndexChanged получает идентификатор из строки в сетке (одно из полей), запрашивает полную запись из БД и затем заполняет набор редакторов/деталей поля с полной информацией о записях.

protected void gvResults_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int id = int.Parse(gvResults.SelectedRow.Cells[1].Text); 
    DisplayDetails(id); 
} 

Это прекрасно работает на моей локальной машине, где я разрабатываю код. Однако на производственном сервере функция вызывается успешно, но число строк и столбцов на gvResults, griview равно 0 - таблица пуста.

Включено в viewstate gridview, и я не вижу очевидных различий. Я сделал некоторые наивные предположения, или я полагаюсь на то, что, вероятно, будет настроено по-разному в отладке?

Локально я запускаю пустой веб-проект asp.net в VS2008, чтобы ускорить разработку. На рабочем сервере работает CMS sitecore, поэтому он настроен по-разному.

Любые мысли или предложения были бы наиболее желанными. Заранее спасибо!

ответ

0

После того, как я выкрикнул вокруг форума sitecore, я наткнулся на это blog post, объяснив одно возможное решение.

Я добавил <type>System.Web.UI.WebControls.GridView</type> в раздел <typesThatShouldNotBeExpanded> раздела Web.config и, похоже, работает на нас.

Похоже, что это касается конвейера рендеринга макета страницы sitecore, где он расширяет подмакеты и внутренние заполнители для генерации полного рендеринга страницы. Он обращается к элементам .Net на странице и немного их замалчивает, что может привести к неправильной работе некоторых элементов управления.

Об этом article. SDN Об этом, хотя вы можете прочитать его только в том случае, если у вас есть учетная запись с достаточными привалами. Надеюсь, что это может помочь другим пользователям Sitecore в будущем.

+0

Ах да, это также может быть причиной. Это связано с тем, как Sitecore подключается к жизненному циклу страницы, что, по моему мнению, не полностью понято очень многим людям и, вероятно, также является одной из их торговых секретов. Я написал статью, но я не знаю ничего подобного. –

+0

Hahah! Я на самом деле не смотрел ваше имя пользователя SO! Приветствует много за блог хедз-ап!В этой статье также есть статья об SDN, но она недоступна, если у вас нет учетной записи. – xan

1

Проверьте свой web.config. Вероятно, для свойства «AutomaticDataBind» установлено значение «false» в одной среде и «true» в вашем блоке dev.

Я не могу быть уверен, что, очевидно, но я был забит аналогичный вопрос в прошлом и симптомы были точно так же как вы описали здесь :-)

P.S. Значение Sitecore по умолчанию для этого значения равно false.

Смежные вопросы