Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 28 мар 2024, 20:26

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 29 ноя 2019, 07:41 
Не в сети

Зарегистрирован: 28 ноя 2019, 11:50
Сообщений: 21
При работе с фильтром, некорректно отрабатывается изменение текущей позиции.
Проявляется в следующем случае: При отработке события DataGrid.DataViewBindingSource.CurrentItemChanged пытаемся получить доступ к свойству DataGrid.CurrentRow

записей 10 видных 3

VisibleRows.Count = 3
а CurrentRowIndex = 7 - ОШИБКА при доступе к VisibleRows[CurrentRowIndex];

Вот код в библиотеке
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public DataGridRow CurrentRow
{
get
{
if (VisibleRows.Count == 0 || CurrentRowIndex == -1)
return null;
else
return VisibleRows[CurrentRowIndex];
}
}


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 ноя 2019, 10:02 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Ошибку не удается воспроизвести в EhLib.WinForms 1.0 Build 1.0.075.
Проверьте, что вы используете эту же сборку.
Если номер сборки совпадает, то опишите, пожалуйста, настройку свойств и последовательность действий для воспроизведения ошибки.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 ноя 2019, 11:19 
Не в сети

Зарегистрирован: 28 ноя 2019, 11:50
Сообщений: 21
Тест:
public class Class1
{
public int Id { get; set; }
public string Text { get; set; }
}

На форму кидаем DataGrig с поиском
protected override void OnLoad(EventArgs e)
{
List<Class1> class1s = new List<Class1>();
for (int i = 0; i < 10; i++)
class1s.Add(new Class1 {Id = i+1, Text = $"Запись {i+1}"});
class1BindingSource.DataSource = class1s;
dataGridEh1.DataViewBindingSource.CurrentItemChanged += DataViewBindingSourceOnCurrentChanged;
dataGridEh1.SelectionChanged += DataViewBindingSourceOnCurrentChanged;
base.OnLoad(e);
}

private void DataViewBindingSourceOnCurrentChanged(object sender, EventArgs e)
{
label1.Text = $@"{(dataGridEh1.CurrentRow == null ? "Null" : ((Class1)dataGridEh1.CurrentRow.SourceItem)?.Text)}";
}

набираем в строке поиска 10 потом забиваем 0 - вроде стоит на первой строке в списке, но текущей записи нет.

Непонятен алгоритм что происходит с dataGridEh1.DataViewBindingSource и dataGridEh1.CurrentRow в плане позиционирования

Я добиваюсь ситуации, описанной в теме.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 ноя 2019, 12:35 
Не в сети

Зарегистрирован: 28 ноя 2019, 11:50
Сообщений: 21
На текущий момент вопрос сводиться к следующему:

На какое событие и у какого элемента повесится, чтобы при фильтровки через встроенный механизм поиска и фильтровки определять, что потерян фокус на CurrentRow
Я перепробовал кучу событий, они запаздывают, т.е. у меня CurrentRow имеется (ну чтобы определить активность клавиши), а при нажатии на клавишу, уже потерян фокус на CurrentRow


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB