Вопрос .NET (web) DataGrid with AllowCustomPaging
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Вопрос .NET (web) DataGrid with AllowCustomPaging
Извините, я в WEB.UI совсем не специалист, с код C# лезу только чтобы править SQL запросы, а в UI не силегн
Но специалисты тут тоже не знают что делать
Дело в том что при перемещении по страницам Page_Load вызывается два раза, что приводит к запросу к SQL серверу дважды, и, надо сказать, довольно дорогостоящему запросу
Когда то я это нашел и недолго думая (и не особо разбираясь) вставил в Page_Load
if (!IsPostBack) ЗапросДанных;
Чем ускорил систему в два раза. К сожалению, недавно выяснилось что изза этого лезут баги. К сожадению, никто из французов не может мне объяснить зачем нужна первая перерисовка старой страницы... Они начинают говорить а потом говорят - ну тут ничего не поделать, так устроен .NET, надо вызывать два раза...
Что нибуль посоветуете ?
Спасибо
Но специалисты тут тоже не знают что делать
Дело в том что при перемещении по страницам Page_Load вызывается два раза, что приводит к запросу к SQL серверу дважды, и, надо сказать, довольно дорогостоящему запросу
Когда то я это нашел и недолго думая (и не особо разбираясь) вставил в Page_Load
if (!IsPostBack) ЗапросДанных;
Чем ускорил систему в два раза. К сожалению, недавно выяснилось что изза этого лезут баги. К сожадению, никто из французов не может мне объяснить зачем нужна первая перерисовка старой страницы... Они начинают говорить а потом говорят - ну тут ничего не поделать, так устроен .NET, надо вызывать два раза...
Что нибуль посоветуете ?
Спасибо
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 159
- Joined: 04 Jul 2002 12:39
- Location: Moscow
Re: Вопрос .NET (web) DataGrid with AllowCustomPaging
Dmitry67 wrote:Извините, я в WEB.UI совсем не специалист, с код C# лезу только чтобы править SQL запросы, а в UI не силегн
Но специалисты тут тоже не знают что делать
Дело в том что при перемещении по страницам Page_Load вызывается два раза, что приводит к запросу к SQL серверу дважды, и, надо сказать, довольно дорогостоящему запросу
Когда то я это нашел и недолго думая (и не особо разбираясь) вставил в Page_Load
if (!IsPostBack) ЗапросДанных;
Чем ускорил систему в два раза. К сожалению, недавно выяснилось что изза этого лезут баги. К сожадению, никто из французов не может мне объяснить зачем нужна первая перерисовка старой страницы... Они начинают говорить а потом говорят - ну тут ничего не поделать, так устроен .NET, надо вызывать два раза...
Что нибуль посоветуете ?
Спасибо
Дима,
это вы серьезно про то что они про IsPostBack не знали? как они вообще работают?
а проблема у них дизайне. если актуальность данных после первой выборки не важна, то и за чем второй раз в базу лезть? совет один: переработать дизайн.
Упорство и Труд Все Перетрут
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Ну да, вставил это я туда сам, по наитию
А что именно должно быть переработано в дизайне ?
Дело в том, что если вставить как было у меня то возникает проблема
Есть список документов 3,2,1
Кликаешь на 2, открывается его редактирование
Тем временем вставляешь 4 документ
Возвращаешься из редактирвоания в список документов
Видишь 4,3,2,1
Все правильно
Но кликаешь на 4 (первая строчка), а открывается 3 (тот который там раньше стоял). Хрен его знает... Могу кусок кода дать...
А что именно должно быть переработано в дизайне ?
Дело в том, что если вставить как было у меня то возникает проблема
Есть список документов 3,2,1
Кликаешь на 2, открывается его редактирование
Тем временем вставляешь 4 документ
Возвращаешься из редактирвоания в список документов
Видишь 4,3,2,1
Все правильно
Но кликаешь на 4 (первая строчка), а открывается 3 (тот который там раньше стоял). Хрен его знает... Могу кусок кода дать...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 159
- Joined: 04 Jul 2002 12:39
- Location: Moscow
Dmitry67 wrote:Ну да, вставил это я туда сам, по наитию
А что именно должно быть переработано в дизайне ?
Дело в том, что если вставить как было у меня то возникает проблема
Есть список документов 3,2,1
Кликаешь на 2, открывается его редактирование
Тем временем вставляешь 4 документ
Возвращаешься из редактирвоания в список документов
Видишь 4,3,2,1
Все правильно
Но кликаешь на 4 (первая строчка), а открывается 3 (тот который там раньше стоял). Хрен его знает... Могу кусок кода дать...
непонятно почему так отрабатывает . ведь при перерисовке контрола (который оттображает список докоментов) идет запрос в базу на обновление списка и прописываются правильные ссылки на документы. может быть на клиенте скрипт отображает новый номер, а айди документа в базе оставляет старым?
запости код, посмотрим
Упорство и Труд Все Перетрут
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Вырезал что не по делу
CDC - это сами документы
в Page_Load было if (!IsPostBack) GridDataBind();
Загрузка нужной страницы находится в GetDataView
Когда открывается не тот Cdc, то в OpenCdc передается неверное число из LinkButtonCDC_click, почему, не могу понять
Заранее спасибо если что найдете свежим взглядом
CDC - это сами документы
в Page_Load было if (!IsPostBack) GridDataBind();
Загрузка нужной страницы находится в GetDataView
Когда открывается не тот Cdc, то в OpenCdc передается неверное число из LinkButtonCDC_click, почему, не могу понять
Заранее спасибо если что найдете свежим взглядом
Code: Select all
пока убрал
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Готов более точно сформулировать вопрос
Если стоит if (&IsPostBack) DataBind() то все работает нормально за одним исключением
Когда возвращаешься на эту страницу из другой, то НА ЭКРАНЕ все абсолютно нормально
Но при клике на документ передается не тот номер
Номер формируется так:
Я не могу понять как так может быть на жкране нормально а где то внутри нет
Если стоит if (&IsPostBack) DataBind() то все работает нормально за одним исключением
Когда возвращаешься на эту страницу из другой, то НА ЭКРАНЕ все абсолютно нормально
Но при клике на документ передается не тот номер
Номер формируется так:
Code: Select all
<asp:LinkButton CssClass="lien_noir" id="LinkButtonCDC" runat="server" onclick="LinkButtonCDC_click" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"IDCDC")%>' ToolTip='<%#DataBinder.Eval(Container.DataItem,"CDCREF")%>'>
<%#PAST.Business.CommonLib.InsertWordBreakV2(DataBinder.Eval(Container.DataItem,"CDCNAME"), 15)%>
</asp:LinkButton>
Я не могу понять как так может быть на жкране нормально а где то внутри нет
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Еще раз другими словами
Из списка документов уходу в просмотр одного документа
За это время список документов в базе меняется
Нажимаю кнопку возврата в список
Вызываются Page_Init, Page_Load(IsPostBack=0, честно вызывается SQL), Page_PreRender.
В итоге на экране - новый список, все OK !
Дальше у дного элемента ставлю CheckBox. Отрабатывается
Page_Init, Page_Load(IsPostBack=1), Page_PreRender.
И магия ! на экране возник старый список ! Где блин он хранится ?????
Из списка документов уходу в просмотр одного документа
За это время список документов в базе меняется
Нажимаю кнопку возврата в список
Вызываются Page_Init, Page_Load(IsPostBack=0, честно вызывается SQL), Page_PreRender.
В итоге на экране - новый список, все OK !
Дальше у дного элемента ставлю CheckBox. Отрабатывается
Page_Init, Page_Load(IsPostBack=1), Page_PreRender.
И магия ! на экране возник старый список ! Где блин он хранится ?????
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Ник закрыт как дубликат.
- Posts: 6238
- Joined: 14 Mar 2001 10:01
- Location: .MD -> .SI -> .SE -> .AR.US -> .MD
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
-
- Уже с Приветом
- Posts: 550
- Joined: 31 Mar 2000 10:01
- Location: Moscow --> Baltimore, MD
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU
Dmitry67 wrote:Еще раз другими словами
Из списка документов уходу в просмотр одного документа
За это время список документов в базе меняется
Нажимаю кнопку возврата в список
Вызываются Page_Init, Page_Load(IsPostBack=0, честно вызывается SQL), Page_PreRender.
В итоге на экране - новый список, все OK !
Дальше у дного элемента ставлю CheckBox. Отрабатывается
Page_Init, Page_Load(IsPostBack=1), Page_PreRender.
И магия ! на экране возник старый список ! Где блин он хранится ?????
Проблема скорее всего в том, что откуда-то происходит замещение данных в State. Может там в коде что-то в Session хранят или даже в Cash? А по поводу двойной отработки Initialize и Page_Load - это да. Первая стадия считывание, вторая отработка хендлов событий, типа вашего button_click.
На самом деле заполнение датасета, если вы его испльзуете, лучше всего выносить в другую функцию класса вашего пейджа, а сам вызов контролировать постбэком и как вариант самим фактом заполнения той переменной/массива/иного объекта который вы используете на форме.
Кстати, как именно вы получаете инфу в DataGrid? Через DataReader/DataSet/CustomFunction? Просто интересно.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU
Dmitry67 wrote:Vitaliy wrote:Кстати, как именно вы получаете инфу в DataGrid? Через DataReader/DataSet/CustomFunction? Просто интересно.
Спасибо
Буду смотреть
Заполняется через DataAdapter.Fill
Т.е. все таки через датасет. А сама строка с DA.Fill(DS) где стоит? Кстати, если ее ставить с проверкой на постбэк, что как я понял вы и сделали, то естественно что будет отрабатывать только один раз, до - следующего входа в этот класс(SomeApp.SomePage) без сохранения стейта. Но, вот чего я не могу понять, так это того как может быть откат датасета? Может вы таки не проапдейтили в базу тот датаадаптер через который вы залили ту таблицу, в которой произошли изменения, и соответственно, перезашли на этот же класс без сохраниения стейта (изпостбэк == ложь)???
Конечно, может я невнимательно что то прочитал, бывает со мной такое иногда + болею сейчас, поправьте меня - если это так.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Vitaliy wrote:1 А сама строка с DA.Fill(DS) где стоит?
2 Кстати, если ее ставить с проверкой на постбэк, что как я понял вы и сделали, то естественно что будет отрабатывать только один раз, до - следующего входа в этот класс(SomeApp.SomePage) без сохранения стейта.
3 Но, вот чего я не могу понять, так это того как может быть откат датасета?
4 Может вы таки не проапдейтили в базу тот датаадаптер через который вы залили ту таблицу, в которой произошли изменения, и соответственно, перезашли на этот же класс без сохраниения стейта (изпостбэк == ложь)???
Конечно, может я невнимательно что то прочитал, бывает со мной такое иногда + болею сейчас, поправьте меня - если это так.
1 Page_Load
2 так оно и сделано
3 Я тоже
4 Он точно проапдейтился... Все это очень странно
Интересно что есть еще 4 списка с точно такой же структурой и логикой работы
В них все работает как часы !
Буду рыть дальше
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Есть прогресс
Если закомжентировать в конце Page_PreRender эту фигню то все работает
Что эта хренотень делает ?
Если закомжентировать в конце Page_PreRender эту фигню то все работает
Что эта хренотень делает ?
Code: Select all
string strScript = "<SCRIPT Language=\"JAVASCRIPT\">\n";
strScript += "var cdcIntelligentButtons=" +
((bool)_visite.UserManager.GetPreferences ("IntelligentButtons")).ToString().ToLower()
+ ";\n";
strScript += "strMsgUnseul = 'Vous devez sélectionner UN ET UN SEUL Cdc';\n";
strScript += "strAccentAigu = 'é';\n";
strScript += "LocalLoadForm(" + _nbChecksSelected + ");\n";
strScript += "</SCRIPT>\n";
Page.RegisterStartupScript ("CdcNavigationStartupScript", strScript);
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU
Dmitry67 wrote:Есть прогресс
Если закомжентировать в конце Page_PreRender эту фигню то все работает
Что эта хренотень делает ?
Грубо говоря, при формировании документа формы, ДО этапа создания контролов и стейта, ты можешь писать в в HTML рендерер любую хрень что тебе захочется. Скрипты DHTML или DOM как раз через него и пихают. Откровенно говоря, за более чем год использования .Net, я PreRender ни разу не использовал, как то все и так замечательно и беспроблемно решалось, зато отошел очень далеко от проблемы реализации разными брендами JavaScript/JScript.
Нижы ссылки на то - что почитать.
http://msdn.microsoft.com/library/defau ... Stages.asp
Общее описание сценария исполнения и формарования Веб Форм.
http://support.microsoft.com/default.as ... -us;305141
весьма хорошее определение дано для Page_PreRender, а так же суть исполнения Формы и использования IsPostBack.
http://www.google.com/custom?cof=LW%3A4 ... _PreRender
Тут вообще кладезь народная.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Рыл, рыл. ВОт что нашлось
На самом деле JAVASCRIPT не виноват
Похоже виновато вот ето
И вообще нормально так в файл все время фигачить Ь
На самом деле JAVASCRIPT не виноват
Похоже виновато вот ето
И вообще нормально так в файл все время фигачить Ь
Code: Select all
protected override object LoadPageStateFromPersistenceMedium()
{
string m_viewState;
LosFormatter m_formatter;
object viewStateBag=null;
string file = GetFileName();
StreamReader sr = new StreamReader(file);
m_viewState = sr.ReadToEnd();
sr.Close();
m_formatter = new LosFormatter();
try
{
viewStateBag = m_formatter.Deserialize(m_viewState);
}
catch
{
PASTLog.Write("navigation.aspx (line 626) : The View State is invalid or corrupted", null, PAST.Business.LogLevel.Fatal);
}
return viewStateBag;
}
protected override void SavePageStateToPersistenceMedium(object viewStateBag)
{
string file = GetFileName();
StreamWriter sw = new StreamWriter(file);
LosFormatter m_formatter = new LosFormatter();
m_formatter.Serialize(sw, viewStateBag);
sw.Close();
return;
}
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Vitaliy wrote:Вопрос, а зачем в файле хранить? Не лучше уж тогда в SQL сервере? Тем более что вы на нем сидите, как я понял, а так же возможность сохранять стейт в MS SQL практически прозрачно и напрямую.
Кстати, LosFormatter - это ваш кастом форматтер?
LosFormatter
"This type supports the .NET Framework infrastructure and is not intended to be used directly from your code."
Это становится все интереснее
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU
Посмотрел я этот LosFormatter, честно говоря мое недопонимание стало еще больше. Почему вы его используете, а не связку BinaryWriter/BinaryReader + BinaryFormatter, если уж так охото писать в файлы, вместо более удобной сериализации в сиквел?
В общем если это возможно (не раскрывается комм. тайна) я бы был очень польщен, услышав ответы на мой вопросы.
В общем если это возможно (не раскрывается комм. тайна) я бы был очень польщен, услышав ответы на мой вопросы.
Last edited by Vitaliy on 01 Sep 2003 20:45, edited 1 time in total.
-
- Новичок
- Posts: 81
- Joined: 04 Oct 1999 09:01
- Location: AL.KZ -> CA.US -> NY.US -> MSK.RU