2015-06-12 5 views
1

Я поддерживаю проект, который использует элементы управления DevExpress ASP.NET v13.2, и внутри него у меня есть ASPxGridView, который отображает все виды информации. Недавно, проделав некоторую работу над компоновкой этой сетки, я заметил, что ширины столбцов вообще не сохраняются. Кажется, что хранится только упорядочение столбцов и видимость столбцов.Сохранение данных ширины столбца ASPxGridView

Вот что у меня есть на стороне клиента:

<dxwgv:ASPxGridView ID="ASPxGridView" runat="server" 
        AutoGenerateColumns="False" 
        ClientInstanceName="grid" 
        KeyFieldName="ClientId" 
        Width="100%" 
        OnHtmlRowPrepared="ASPxGridView_HtmlRowPrepared" 
        OnCustomCallback="ASPxGridView_CustomCallback" 
        OnClientLayout="gridView_ClientLayout"> 
    <SettingsBehavior ColumnResizeMode="NextColumn" AllowFocusedRow="True" /> 
    <SettingsCookies Enabled="True"></SettingsCookies> 
    <SettingsText EmptyDataRow="No queries found for the current criteria." /> 
    <Settings ShowFilterRow="True" ShowGroupPanel="True" ShowFilterRowMenu="True" GridLines="None" /> 
    <ClientSideEvents BeginCallback="OnGridBeginCallback" 
        EndCallback="OnGridEndCallback" 
        ColumnResized="function(s, e) { 
            e.processOnServer = true;}"> 
    </ClientSideEvents> 
      <Columns> 

Таким образом, в соответствии с приведенной выше фрагменте кода, всякий раз, когда столбец изменяется, событие обрабатывается на стороне сервера и передается через методу girdView_ClientLayout (это работает).

Вот что girdView_ClientLayout выглядит следующим образом:

protected void gridView_ClientLayout(object sender, ASPxClientLayoutArgs e) 
{ 
    //if in saving mode continue. 
    //compare GridView's current layout (e.LayoutData) info to that stored on Db for this user. 
    //if different, save new layout to Db. 
    //refresh layout, i.e. read new user layout from Db. 
    //otherwise ignore as to reduce unnecessary extra Db interaction. 
} 

Так, по моему пониманию, е должен содержать свойство LayoutData, который является нечитаемой логической строкой людей, который должен иметь раскладку такой информации, как столбцы видимых, порядок столбцов, группировка, ширина столбцов и т. д., которые может понять только gridview. Однако, переходя через поток, я замечаю, что строка, переданная gridView_ClientLayout, не имеет информации о ширине столбца. Мой вышеописанный метод игнорирует новую информацию о макете, так как технически он не видит изменений в данных макета и поэтому не сохраняет макет! Затем он обновляет сетку (считывает макет пользователя из Db), что означает, что ширина столбцов сбрасывается до значения того, что сохраняется в Db.

Вот пример строки LayoutData прежде, чем ширина изменяется:

"page1|sort1|a20|conditions14|1|3|4|3|6|3|8|3|10|3|12|3|13|3|14|3|15|3|19|3|20|3|21|3|22|3|23|3|visible24|f0|f3|t0|f16|f2|f16|t1|f16|t6|f16|t7|f16|t4|t5|f10|f9|t11|t12|f14|f13|t8|f16|f13|f16|width24|e|e|60px|e|e|e|e|e|e|e|e|e|300px|e|e|e|e|e|e|e|e|e|e|e" 

Вот что LayoutData выглядит как передается в girdView_ClientLayout, когда происходит rezising:

"page1|sort1|a20|conditions14|1|3|4|3|6|3|8|3|10|3|12|3|13|3|14|3|15|3|19|3|20|3|21|3|22|3|23|3|visible24|f0|f3|t0|f16|f2|f16|t1|f16|t6|f16|t7|f16|t4|t5|f10|f9|t11|t12|f14|f13|t8|f16|f13|f16|width24|e|e|60px|e|e|e|e|e|e|e|e|e|300px|e|e|e|e|e|e|e|e|e|e|e" 

Точно так же! Я ожидаю что-то вроде этой строки, но с большим количеством разделов, заканчивающихся на px. Вроде как:

'page1|visible23|f0|f-1|t0|f1|f-1|f2|t1|f3|f4|f4|t3|f5|t2|f6|f6|f6|t4|f7|f11|f7|t5|t6|f8|width23|e|200px|100px|e|e|e|56px|e|e|e|150px|e|200px|e|e|e|200px|e|e|e|120px|128px|e' 

(Обратите внимание на различные случайные секции, оканчивающиеся на рх) Если я вручную редактировать эти секции точек в Дб и запустить приложение, столбцы размера соответственно, так что это, безусловно, проблема сохранения из сетки, не загружая на нее.

Я планирую скорое сохранение/загрузку этой человеческой нечитаемой строки макета gridview, поскольку это давало мне много головных болей, когда клиенты хотят новых столбцов. Я скоро буду внедрять альтернативу XML, но даже тогда она также требует информации ширины столбца, которая не хранится в ASPxClientLayoutArgs.LayoutData, что означает, что мне придется реализовать грязный взломать, чтобы ввести эту информацию ширины столбца в структуру XML. Но это проблема еще на один день.

У кого-нибудь есть предложения? Это не огромная проблема, я имею в виду, что это просто ширина столбца, но мой мастер схватки действительно хотел бы включить его в наше следующее развертывание (которое откладывается этой проблемой). Он очень классный парень, и я действительно ненавижу разочаровывать его чем-то таким маленьким и несущественным.

Спасибо, ребята, Jean-Pierre

ответ

0

мне удалось найти какой-то устаревший код, который был завинчивания с функциональностью создания макета GridView.

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