Строки¶
Строки данных представляют собой элементы из связанного источника объектов. Когда вы группируете данные, Data Grid создает групповые строки для объединения строк с идентичными групповыми значениями. Строки группы не существуют в источнике объекта.
Высота строки¶
Все строки изначально имеют одинаковую высоту, достаточную для отображения одной линии текста. Data Grid позволяет задать пользовательскую высоту строки, а также включить автоматическое вычисление высоты строки для отображения больших текстовых данных в ячейках.
Настраиваемая высота строки¶
- Свойство
DataControlBase.RowMinHeight
— возвращает или устанавливает минимальную высоту строки.
Если функция автоматической настройки высоты строк отключена, все строки будут иметь одинаковую высоту, указанную в свойстве DataControlBase.RowMinHeight
.
Автоматическое изменение высоты строки¶
Для столбцов, содержащих длинный текст, вы можете включить перенос текста, чтобы динамически регулировать высоту строк и отображать полное содержимое ячеек.
Чтобы включить перенос текста для ячеек столбца, назначьте объекту TextEditorProperties
(или его потомку; например, ButtonEditorProperties
) свойство GridColumn.EditorProperties
и установите для опции TextEditorProperties.TextWrapping
значение Wrap
.
Совет
A TextEditorProperties
object is used to configure an in-place TextEditor
editor for a column. At runtime, the editor is instantiated using these settings. See Data Editing for more information.
Следующий код позволяет переносить текст для столбца сетки.
<mxdg:GridColumn FieldName="Notes" Width="80" MinWidth="80">
<mxdg:GridColumn.EditorProperties>
<mxe:TextEditorProperties TextWrapping="Wrap"/>
</mxdg:GridColumn.EditorProperties>
</mxdg:GridColumn>
Автоматическая регулировка Высоты Строк При Горизонтальной Прокрутке¶
Горизонтальная "виртуализация" DataGrid повышает производительность контрола за счет сокращения времени загрузки.
Если эта функция включена (по умолчанию), высота строк рассчитывается автоматически в соответствии с содержимым видимых в данный момент ячеек. Ячейки за пределами окна просмотра не влияют на расчет высоты строк. При прокрутке до ячеек с разной высотой содержимого высота строк регулируется динамически. Чтобы предотвратить динамическое изменение высоты строк при горизонтальной прокрутке, используйте свойство DataGridControl.AllowHorizontalVirtualization
для отключения горизонтальной виртуализации.
Определение и получение строк¶
Чтобы разрешить идентификацию строк, Data Grid присваивает row indexes строкам данных и групп. Индексы строк идентифицируют строки в элементах API, используемых для извлечения и установки значений ячеек , перемещения фокуса между строками и итерации по строкам.
- Индексы строк отражают порядок данных и группируют строки в Data Grid.
- Строки данных нумеруются с использованием неотрицательных индексов строк, начинающихся с нуля. Верхняя строка данных имеет индекс строки 0, вторая строка данных имеет индекс строки 1 и так далее.
- Строки групп нумеруются с использованием отрицательных индексов строк. Верхняя группирующая строка имеет индекс -1, вторая группирующая строка имеет индекс -2 и так далее
- Индексы строк используются для идентификации как видимых, так и скрытых (внутри свернутых групп) строк.
- Когда порядок строк изменяется (например, когда данные сортируются или группируются), строкам присваиваются новые индексы строк в соответствии с их новыми позициями.
- Индексы строк не присваиваются строкам, которые скрыты из-за фильтрации данных.
Когда данные не сгруппированы, индексы строк совпадают с видимыми индексами строк:
Когда данные группируются, индексы строк и индексы видимых строк не совпадают:
Специальные индексы строк¶
Data Grid резервирует следующие предопределенные индексы строк для идентификации специальных строк:
- Константа
DataControlBase.AutoFilterRowIndex
— идентифицирует Auto Filter Row. Эта строка позволяет пользователю вводить текст в ее ячейки для фильтрации данных по соответствующим столбцам. Смотрите следующий раздел для получения дополнительной информации: Поиск и фильтрация .
Example: Вы можете присвоить значение DataControlBase.AutoFilterRowIndex
свойству DataGridControl.FocusedRowIndex
, чтобы сфокусировать Auto Filter Row.
- Константа
DataGridControl.InvalidRowIndex
— идентифицирует строку, которая не существует в контроле Data Grid. Эта константа может быть возвращена методами DataGrid, используемыми для получения индексов строк.
Example: метод GetParentRowIndex
позволяет возвращать строку родительской группы строки при группировке данных. Этот метод возвращает значение DataGridControl.InvalidRowIndex
для строки, у которой нет строки родительской группы.
Исходные элементы и индексы исходных элементов¶
Строки данных соответствуют элементам (бизнес-объектам) в привязанном источнике объекта (DataControlBase.ItemsSource
). Позиция элемента в источнике объекта называется source item index.
Вы можете использовать следующие методы, чтобы получить исходный элемент строки данных, нижележащий, и индекс исходного элемента.
GetSourceItemByRowIndex
— Возвращает исходный элемент (бизнес-объект) строки, указанный по ее индексу строки.GetSourceItemByVisibleRowIndex
— Возвращает исходный элемент (бизнес-объект) строки, указанной по ее видимому индексу.GetSourceItemIndexByRowIndex
— Возвращает индекс исходного элемента (индекс бизнес-объекта в источнике объекта) строки, указанной его индексом строки.GetSourceItemIndexByVisibleRowIndex
— Возвращает индекс исходного элемента (индекс бизнес-объекта в источнике объекта) строки, указанной его видимым индексом.
Чтобы выполнить обратное преобразование индексов, ознакомьтесь со следующими методами:
GetRowIndexBySourceItemIndex
— Возвращает индекс строки, указанный в индексе исходного элемента.GetVisibleRowIndexBySourceItemIndex
— Возвращает видимый индекс строки, указанный в ее исходном индексе элемента (индекс бизнес-объекта в источнике объекта).
Индексы исходных элементов начинаются с нуля. Когда вы сортируете, группируете или фильтруете строки, индексы исходных элементов строк таблицы не изменяются.
Строки группы не имеют соответствующих элементов в источнике объекта, поэтому к ним нельзя обратиться с помощью исходных элементов и индексов исходных элементов.
Связанный API¶
Data Grid предоставляет элементы API для извлечения строк по индексам и преобразования между индексами строк, видимыми индексами строк и индексами элементов источника данных. В следующем списке приведены краткие сведения об этих элементах API:
FocusedRowIndex
— Возвращает или задает индекс выделенной строки. Это свойство можно использовать для перемещения фокуса на определенную строку.GetRowIndexBySourceItemIndex
— Возвращает индекс строки, указанный в индексе исходного элемента.GetRowIndexByVisibleRowIndex
— Возвращает индекс строки, указанный в ее видимом индексе.GetSourceItemByRowIndex
— Возвращает исходный элемент (бизнес-объект) строки, указанный по ее индексу строки.GetSourceItemByVisibleRowIndex
— Возвращает исходный элемент (бизнес-объект) строки, указанной по ее видимому индексу.GetSourceItemIndexByRowIndex
— Возвращает индекс исходного элемента (индекс бизнес-объекта в источнике объекта) строки, указанной его индексом строки.GetSourceItemIndexByVisibleRowIndex
— Возвращает индекс исходного элемента (индекс бизнес-объекта в источнике объекта) строки, указанной его видимым индексом.GetVisibleRowIndexByRowIndex
— Возвращает видимый индекс строки, указанный в ее индексе строки.GetVisibleRowIndexBySourceItemIndex
— Возвращает видимый индекс строки, указанный в ее исходном индексе элемента (индекс бизнес-объекта в источнике объекта).VisibleRowCount
Методы для перебора строк группы и их дочерних элементов:
Методы получения и установки значений ячеек:
Сфокусированный ряд¶
Используйте свойство DataGridControl.FocusedRowIndex
, чтобы получить индекс сфокусированной строки. Свойство DataGridControl.FocusedItem
позволяет вам извлекать нижележащий объект данных сфокусированной строки.
Чтобы переместить фокус на определенную строку, вы можете присвоить индекс этой строки свойству DataGridControl.FocusedRowIndex
.
Выбор нескольких строк (выделение)¶
Data Grid поддерживает режим выбора нескольких строк, который позволяет вам и вашему пользователю выбирать (выделять) несколько строк одновременно.
Установите для свойства SelectionMode
значение Multiple
, чтобы включить режим выбора нескольких строк.
Выделяйте строки с помощью мыши и клавиатуры¶
Пользователи могут выбирать несколько строк с помощью мыши и клавиатуры. Им нужно щелкать по строкам, удерживая нажатой клавишу CTRL и/или SHIFT.
Работа с выделением строк в коде¶
Следующий API позволяет вам выбирать / отменять выбор строк и определять, выбрана ли строка:
SelectAll
SelectRow
SelectRange
UnselectRow
ClearSelection
IsRowSelected
Чтобы восстановить выбранную строку, используйте следующие элементы:
GetSelectedRowIndexes
— Возвращает коллекцию индексов выбранных в данный момент строк.SelectedItems
— Определяет набор данных (бизнес-объектов), которые соответствуют выбранным строкам.
Обработайте событие SelectionChanged
, чтобы отреагировать на изменения в выборе строки.
Вызов любого метода, который изменяет выбранное состояние строки, вызывает обновление контрола DataGrid и вызывает событие SelectionChanged
.
Чтобы выполнить пакетные изменения в выделенной строке и предотвратить ненужные обновления, вы можете обернуть код, который изменяет выбранные состояния строк, с помощью пары методов BeginSelection
и EndSelection
. В этом случае контрол перерисовывает выделение, и событие SelectionChanged
срабатывает после вызова метода EndSelection
.
dataGrid1.SelectionMode = Eremex.AvaloniaUI.Controls.DataControl.RowSelectionMode.Multiple;
// Start a batch update of the row selection.
dataGrid1.BeginSelection();
dataGrid1.ClearSelection();
dataGrid1.SelectRow(row1);
dataGrid1.SelectRow(row2);
//...
// Finish the batch update.
dataGrid1.EndSelection();
Сфокусированная строка против выбранных строк¶
Выделенная строка - это строка, в которую вводятся данные пользователем. Выделенная строка может не совпадать с выбранной (подсвеченной) строкой в режиме множественного выбора. Подробности о режиме приведены в следующих разделах.
Выделенная строка в режиме одиночного выбора¶
В режиме одиночного выбора сфокусированная строка автоматически получает выбранное состояние. Вы можете использовать свойство FocusedRowIndex
и метод GetSelectedRowIndexes
для извлечения сфокусированной строки.
Выделенная строка в режиме множественного выбора¶
В режиме выбора нескольких строк состояния "сфокусировано" и "выделено" различаются. Выделена строка или нет, можно определить по выделению строки. Выделяются только выбранные строки.
В режиме множественного выбора щелчок по строке фокусирует и выбирает эту строку одновременно. Пользователь, однако, может изменить выбранное состояние сфокусированной строки, выполнив следующие действия:
- Нажмите CTRL+ПРОБЕЛ.
- Щелкните по выделенной строке, удерживая нажатой клавишу CTRL.
Когда вы выбираете строку в коде, эта строка не получает сфокусированного состояния в режиме множественного выбора, и наоборот.
Получение и установка значений строк¶
Data Grid предоставляет следующие методы для извлечения и установки значений в ячейках строк:
DataGridControl.GetCellValue
— Возвращает значение в определенной ячейке, адресуемое строкой и столбцом (или именем поля).DataGridControl.SetCellValue
— Устанавливает значение в определенной ячейке.
Следующий код извлекает значение из сфокусированной строки для столбца, привязанного к полю FirstName:
Вы также можете получить и задать значение строки данных на уровне источника объекта. Получите исходный элемент строки (бизнес-объект), а затем используйте свойства/методы элемента для получения/установки значений элемента. Используйте следующие элементы API для извлечения исходных элементов:
DataControlBase.FocusedItem
- Позволяет извлекать исходный объект элемента из текущей сфокусированной строки.DataGridControl.GetSourceItemByRowIndex
— Возвращает исходный объект элемента по индексу строки.DataGridControl.GetSourceItemByVisibleRowIndex
— Возвращает исходный объект элемента по видимому индексу строки.
Следующий код устанавливает свойство HiredDate для бизнес-объекта сфокусированной строки:
EmployeeInfo emp = dataGrid.FocusedItem as EmployeeInfo;
if (employee != null )
{
employee.HiredDate = DateTime.Today;
}
Обработка щелчков по строкам и двойных щелчков¶
Событие DataGridControl.RowClick
позволяет выполнять действия, когда пользователь щелкает по строке/ячейке один или несколько раз подряд. Параметр события e.ClickCount
возвращает количество последовательных щелчков мыши.
Обратите внимание, что один щелчок по ячейке активирует редактор ячеек по умолчанию. Последующие щелчки внутри этой ячейки перехватываются активным редактором ячеек, и событие DataGridControl.RowClick
для этих щелчков не вызывается. Смотрите следующий раздел, чтобы узнать, как справиться с этим сценарием: Пример - Обработать строку двойным щелчком мыши, когда включено редактирование ячейки
Пример - Обработка строки двойным щелчком мыши, когда редактирование ячеек отключено¶
В следующем примере обрабатывается событие RowClick
для обнаружения двойного щелчка по строке, когда операции редактирования ячеек отключены.
dataGrid.AllowEditing = false;
//...
private void DataGrid_RowClick(object sender, Eremex.AvaloniaUI.Controls.DataGrid.DataGridRowClickEventArgs e)
{
if (e.ClickCount == 2)
{
//Row double-clicked
//...
}
}
Пример - Обработка строки двойным щелчком мыши, когда включено редактирование ячеек¶
В приведенном ниже примере показано, как вы можете обрабатывать двойные щелчки по строкам, когда включены операции редактирования ячеек. В этом примере используется комбинация событий RowClick
и ShowingEditor
для ручного управления активацией редактора ячеек контрола.
Реализуется следующий сценарий:
- Один щелчок мыши активирует редактор ячеек (после небольшой задержки). Редактор активируется с помощью таймера, запущенного в обработчике событий
RowClick
. - Двойной щелчок (и несколько последовательных щелчков) не позволяют активировать редактор ячеек. Выполнение пользовательских действий при двойном щелчке по строке/ячейке в обработчике событий
RowClick
.
<mxdg:DataGridControl x:Name="dataGrid"
RowClick="DataGrid_RowClick"
ShowingEditor="DataGrid_ShowingEditor"
AllowEditing="True"
>
using Avalonia.Input;
public partial class MainView : UserControl
{
public MainView()
{
InitializeComponent();
this.Loaded += MainView_Loaded;
dataGrid.EditorShowMode = Eremex.AvaloniaUI.Controls.DataControl.EditorShowMode.PointerPressed;
}
bool canShowEditor = false;
DispatcherTimer clickTimer;
private void MainView_Loaded(object sender, Avalonia.Interactivity.RoutedEventArgs e)
{
var root = (IInputRoot)this.GetVisualRoot();
var settings = root.PlatformSettings;
var doubleClickTimeSpan = settings.GetDoubleTapTime(PointerType.Mouse);
clickTimer = new DispatcherTimer() { Interval = doubleClickTimeSpan };
clickTimer.Tick += ClickTimer_Tick;
dataGrid.ShowingEditor += DataGrid_ShowingEditor;
}
private void DataGrid_ShowingEditor(object sender, Eremex.AvaloniaUI.Controls.DataGrid.DataGridShowingEditorEventArgs e)
{
e.Cancel = !canShowEditor;
}
private void DataGrid_RowClick(object sender, Eremex.AvaloniaUI.Controls.DataGrid.DataGridRowClickEventArgs e)
{
canShowEditor = false;
if (e.ClickCount > 1)
{
clickTimer.Stop();
if (e.ClickCount == 2)
{
// Do something when a row is double-clicked
}
}
else
{
clickTimer.Start();
}
}
private void ClickTimer_Tick(object sender, EventArgs e)
{
clickTimer.Stop();
canShowEditor = true;
dataGrid.ShowEditor();
}
}
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.