< назад

RAD GRID

Интерфейс ПО для управления жизненным циклом продукта содержит таблицы. В системе YuniquePLM многие таблицы "интерактивны", то есть пользователь может добавлять/убирать столбцы, сортировать данные в таблицах, подсчитывать сумму по столбцам/ строкам (если столбцы/строки содержат числовые значения). Для реализации этого функционала используется Rad Grid. С помощью Rad Grid-а строятся таблицы по XML-схеме в разных разделах системы (в стилях, изображениях, материалах и т.д.).

Функционал Rad Grid-а в стилях ( Подробнее о стилях см. Style Folder )

Пользователь может группировать данные используя механизм "drag & drop". Так, если "перетянуть" название/column header Division в область "Drag a column header and drop it here to group by that column", то стили будут сгруппированы по подразделениям.
При нажатии правой кнопкой на column header - появляется контекстное меню для фильтрации данных.
Кнопка "excel export" (1) - экспортирует список стилей в файл Excel. При чем, если пользователь "отфильтрует" данные (например, уберет столбец Division), то в файл Excel экспортируются отфильтрованные данные.


* данные возможности доступны не только в стилях, но и в других разделах системы (Material Folder, Image Folder, Color Folder : Color Palette)

Все действия пользователя сохраняются на сервере: после фильтрации/группировки данных в одном разделе, можно перейти в другой раздел без потери результатов фильтрации/группировки (например: происходит группировка в Style Folder, а затем переход в Material Folder > при возврате в Style Folder видно сгруппированные ранее стили).

Функционал Rad Grid-а в Planning Folder ( Подробнее см. Planning Folder )

Стандартные средства Rad Grid-а позволяют сделать функции для подсчета значений по колонкам. Так, например, в Planning Folder происходит подсчет данных по столбцам.



Функционал Rad Grid-а в BoM-ах ( Подробнее см. Style Folder: Bill of Material )

В некоторых областях системы пользователь может работать с редактируемыми grid-ами (например, в workflow BoM ).



Техническая часть

Схема XML :

Rad Grid строит "интерактивные" таблицы в системе по XML-схеме.

  • главный тег Table
    • для работы Data Grid-а используются атрибуты:
      • UseRadGrid
      • AllowGrouping
      • AllowSorting
      • AllowPaging
      • AddCheckboxRowSelectColumnEditMode
      • DataKeyField
      • SortOrder


XML - схема


В коде:

  • LoadSaveRadGrid - основной метод который, создаёт Grid на основе xml-схемы, а так же загружает сохранённый вид для каждого пользователя из таблицы
  • метод GroupsChanging - записывает группировку на сервер
  • метод NeedDataSource - получает данные для Grid-а
  • метод SortCommand - записывает сортировку на сервер
  • BiffExporting - отвечает за экспорт данных в Excel формат
  • SaveHiddenColumns - записывает те колонки на сервер, которые не нужно отображать

Создание Rad Grid-a

 '#' Region "Rad grid"

Private Sub LoadSaveRadGrid(ByVal blnLoadGrid As Boolean, _
  Optional ByVal blnWholeGrid As Boolean = True, _
  Optional ByVal blnJustSettings As Boolean = False, _
  Optional ByVal blnTransformCardView2ListView As Boolean = False,
  Optional ByVal blnFixGroupHeaderTexts As Boolean = False)   If m_objRadGridHandler Is Nothing Then
m_objRadGridHandler = New Yunique.Core.UI.RadGridHandler()
  End If   Using dstXmlData As New DataSet()
  dstXmlData.ReadXml(String.Format("{0}\{1}", strXMLPath, strGridSchema))
  m_objRadGridHandler.ClientCulture = Me.strClientCulture " задание языковых настроек
  m_objRadGridHandler.ServerCulture = Me.strServerCulture
  m_objRadGridHandler.ServerTimeZone = Me.strServerTimeZone " задание временной зоны
  m_objRadGridHandler.FormName = "Change_Main"
  m_objRadGridHandler.XMLSchemaName = Me.strGridSchema " XML-схема, которая предназначена для этого grid-а
  m_objRadGridHandler.GridReadOnly = True " read only (поля будут только для чтения)
  m_objRadGridHandler.DatabaseConnectionString = Me.strConnection " строка подключения к БД
  m_objRadGridHandler.XmlData = dstXmlData " dataset, который строится на основании XML
  m_objRadGridHandler.XmlSearchData = dstXmlData
  m_objRadGridHandler.IsPostBack = Page.IsPostBack
  m_objRadGridHandler.IsCallBack = Page.IsCallback " значение, указывающее, является ли запрос страницы результатом обратного вызова
  m_objRadGridHandler.PreferredLanguage = Me.UserProperties.PrefLang " язык grid-а
  m_objRadGridHandler.CellImageHeight = "050" " высота ячейки с картинками
  End Using If blnLoadGrid Then
  If blnWholeGrid Then

  ' ''''''''''''''''''''''''''''''
  ' ' Set the search parameters. '
  ' ''''''''''''''''''''''''''''''
  m_objRadGridHandler.RowFilter = ""

  ' ''''''''''''''''''''''''''''''
  ' 'Load the Grid. '
  ' ''''''''''''''''''''''''''''''
  m_RadGridStyles = New Telerik.Web.UI.RadGrid() " создается объект класса RadGrid
  m_RadGridStyles.ID = "RadGridStyles" " ID - уникальное имя грида на странице
  m_RadGridStyles.PagerStyle.Visible = False " отображение стандартного пейджинга в стиле Telerik.Web.UI(False - отключить)
  m_RadGridStyles.MasterTableView.EnableColumnsViewState = False " задаём, что столбцы могут изменяться на каком то этапе
  m_RadGridStyles.ClientSettings.ClientEvents.OnColumnHidden = "ColumnHidden" " имя javascript функции для скрытия колонок
  m_RadGridStyles.ClientSettings.ClientEvents.OnColumnShown = "ColumnShown" " имя javascript функции для отображения колонок
  m_RadGridStyles.MasterTableView.ClientDataKeyNames = New String() {"Image", "StyleNo"} " задание ключей для каждого элемента(строки) в гриде
  m_RadGridStyles.HeaderContextMenu.EnableEmbeddedSkins = False " отображать контекстное меню в стиле Telerik.Web.UI(False - не отображать)
  AddHandler m_RadGridStyles.HeaderContextMenu.ItemClick, AddressOf HeaderContextMenu_ItemClick " создание контекстного меню для грида   m_objRadGridHandler.SetupGrid(m_RadGridStyles) " загрузка настроек для грида
  m_objRadGridHandler.AddMainGridColumns(m_RadGridStyles) " добавление колонок
  m_RadGridStyles.AllowCustomPaging = True " включить Database пейджинг   If Page.IsPostBack And Request.Form(chbThumbnail.UniqueID) IsNot Nothing Then " отображаем или скрываем колонку предпросмотра изображения(Thumbnail)
  Dim thumbnailColumn As GridColumn = m_RadGridStyles.MasterTableView.GetColumnSafe("Image")
  If thumbnailColumn IsNot Nothing Then
  thumbnailColumn.Visible = True
  'm_RadGridStyles.DataSource = Nothing
'm_RadGridStyles.Rebind()
  End If
  End If For Each column As GridColumn In m_RadGridStyles.MasterTableView.Columns " подготовка данных для сохранения настроек
If String.IsNullOrEmpty(column.GroupByExpression) Then
Dim strName As String = column.UniqueName
Dim strAlias As String = column.HeaderText
column.GroupByExpression = String.Format("{0} [{1}] Group By {0}", strName, strAlias)
column.SortExpression = strName
column.SortedBackColor = System.Drawing.Color.FromArgb(152, 251, 152)
End If
Next If m_RadGridStyles.MasterTableView.GetColumnSafe("LineFolderItemDrop") IsNot Nothing Then " создание дополнительных колонок, которых нет в XML-схеме
m_RadGridStyles.MasterTableView.GetColumn("LineFolderItemDrop").HeaderText = "<img src='../System/Icons/icon_drop.gif' alt='" & GetSystemText("Dropped") & "' />"
m_RadGridStyles.MasterTableView.GetColumn("LineFolderItemDrop").GroupByExpression = "LineFolderItemDrop [" & "<img src='../System/Icons/icon_drop.gif' alt='" & GetSystemText("Dropped") & "' />" & "] Group By LineFolderItemDrop"
End If Dim dsSettings As DataSet ' load group and group sorting
Dim objUserPreferenceAPI As New Yunique.BOL.UserPreference()

'загрузка пользовательской группировки с сервера

dsSettings = objUserPreferenceAPI.LoadUserPreference(Me.ClientID & "_" & "RadGridStyles", aspxPageName, "GridGroupSort", UserProperties.TeamID, UserProperties.Username)
Dim strColumnUniqueName As String = Nothing
Dim strColumnGroupByOrder As String = Nothing
Dim strGroupByExpression As String = Nothing If dsSettings IsNot Nothing AndAlso dsSettings.Tables(0).Rows.Count > 0 Then
Dim arrColumns As Array = Split(dsSettings.Tables(0).Rows(0)("UserPreferenceValue").ToString, ",")

For Each strColumnNameAndOrder As String In arrColumns
If Not String.IsNullOrEmpty(strColumnNameAndOrder) Then
strColumnUniqueName = Left(strColumnNameAndOrder, strColumnNameAndOrder.IndexOf(" "))
strColumnGroupByOrder = Right(strColumnNameAndOrder, strColumnNameAndOrder.Length - strColumnNameAndOrder.IndexOf(" ") - 1)
If m_RadGridStyles.MasterTableView.Columns.FindByUniqueNameSafe(strColumnUniqueName) IsNot Nothing Then
strGroupByExpression = m_RadGridStyles.MasterTableView.Columns.FindByUniqueName(strColumnUniqueName).GroupByExpression
strGroupByExpression = strGroupByExpression.Replace(" ASC", "").Replace(" DESC", "").Trim()
strGroupByExpression &= " " & strColumnGroupByOrder m_RadGridStyles.MasterTableView.GroupByExpressions.Add(strGroupByExpression)
End If
End If
Next
End If

' загрузка пользовательской сортировки с сервера
'load sorting

dsSettings = objUserPreferenceAPI.LoadUserPreference(Me.ClientID & "_" & "RadGridStyles", aspxPageName, "GridSort", UserProperties.TeamID, UserProperties.Username)
If dsSettings IsNot Nothing AndAlso dsSettings.Tables(0).Rows.Count > 0 Then
Dim arrColumns As Array = Split(dsSettings.Tables(0).Rows(0)("UserPreferenceValue").ToString, ",")

Dim expression As New GridSortExpression()
For Each strColumnNameAndOrder As String In arrColumns
If Not String.IsNullOrEmpty(strColumnNameAndOrder) Then
strColumnUniqueName = Left(strColumnNameAndOrder, strColumnNameAndOrder.IndexOf(" "))
strColumnGroupByOrder = Right(strColumnNameAndOrder, strColumnNameAndOrder.Length - strColumnNameAndOrder.IndexOf(" ") - 1)
If m_RadGridStyles.MasterTableView.Columns.FindByUniqueNameSafe(strColumnUniqueName) IsNot Nothing Then
Select Case strColumnGroupByOrder
Case "ASC"
strColumnGroupByOrder = "Ascending" Case "DESC" strColumnGroupByOrder = "Descending"
Case Else
strColumnGroupByOrder = "None"
End Select expression.FieldName = strColumnUniqueName
expression.SetSortOrder(strColumnGroupByOrder) m_RadGridStyles.MasterTableView.SortExpressions.AddSortExpression(expression)
End If
End If
Next
End If

'загрузка пользовательских настроек отображаемых колонок с сервера
'load hidden columns

dsSettings = objUserPreferenceAPI.LoadUserPreference(Me.ClientID & "_" & "RadGridStyles", aspxPageName, "HiddenColumns", UserProperties.TeamID, UserProperties.Username)
If dsSettings IsNot Nothing AndAlso dsSettings.Tables(0).Rows.Count > 0 Then
Dim arrColumns As Array = Split(dsSettings.Tables(0).Rows(0)("UserPreferenceValue").ToString, ",") For Each strHiddenColumnName As String In arrColumns
Dim hiddenGridColumn As Telerik.Web.UI.GridColumn = m_RadGridStyles.MasterTableView.Columns.FindByUniqueNameSafe(strHiddenColumnName)
If hiddenGridColumn IsNot Nothing Then
hiddenGridColumn.Display = False
End If
Next
End If

Me.plhStylesGrid.Controls.Clear()
Me.plhStylesGrid.Controls.Add(m_RadGridStyles) End If 'If blnJustSettings Then ' ''''''''''''''''''''''''''''''''''''
' Restore grid persisted settings. '
'''''''''''''''''''''''''''''''''''''
m_objRadGridHandler.LoadPersistedGridSettings(m_RadGridTplData, Me.UserProperties.TeamID) 'End If If blnTransformCardView2ListView Then
'''''''''''''''''''''''''''''''''''''''''''''''''''
' Transform the grid from Card View to List View. '
''''''''''''''''''''''''''''''''''''''''''''''''''' m_objRadGridHandler.TransformCardView2ListView(m_RadGridStyles)
End If If blnFixGroupHeaderTexts Then
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Fix the text used in the group headers for dropdownlists. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
m_objRadGridHandler.FixGroupHeaderTexts(m_RadGridStyles)
End If Else If blnWholeGrid Then ''''''''''''''''''
' Save the Grid. '
''''''''''''''''''
m_objRadGridHandler.SaveGrid(m_RadGridStyles, Request, Me.strXMLPath, Me.strGridSchema, "RadGridChangeLog", "ChangeLogItemID", Me.UserProperties.Fullname) End If 'If blnJustSettings Then ' ''''''''''''''''''''''''''''''
' ' Persist the grid settings. '
' ''''''''''''''''''''''''''''''
' m_objRadGridHandler.PersistGridSettings(m_RadGridTplData, Me.UserProperties.TeamID) 'End If
End If
End Sub