Как сохранить выбранную строку элемента управления XtraGrid - PullRequest
1 голос
/ 02 апреля 2011

Я разрабатываю приложение элемента управления xtragridview в этом приложении, когда дважды щелкну по строке в xtragridview, когда откроется одна всплывающая форма. затем фокус родительского окна изменяется, и фокус назначается другой всплывающей форме. и тогда моя выбранная строка меняет свое состояние, и она фокусируется / выбирает 1-ую строку по умолчанию из xtrgridview. но я хочу сохранить выделенную / выделенную строку такой, какая она есть, если пользователь меняет фокус с одной формы на другую всплывающую форму.

Есть ли какое-либо решение по этому решению? Какие свойства элемента управления xtragridview я должен установить для этой проблемы?

спасибо .....

Ответы [ 3 ]

2 голосов
/ 03 апреля 2011

Как правило, используемый вами подход не требует написания дополнительного кода.XtraGrid не сбрасывает свой FocusedRow, если вы открываете форму двойным щелчком строки сетки.Итак, я бы посоветовал вам определить причину такого поведения.Это можно сделать, используя следующий подход:

1) обработать событие FridsedRowChanged GridView и установить в нем точку останова.

2) воспроизвести проблему и проверить, какой код заставляет gridView фокусироватьсяпервая строка.

Это должно дать представление о том, почему это происходит.

Кроме того, я бы посоветовал вам рассмотреть Как создать PopupForm для редактирования строк в GridView иавтоматически создавать редакторы на основе редакторов столбцов. пример, где реализована необходимая функциональность.

Мне кажется, я знаю причину этой проблемы.Это происходит потому, что вы меняете свойство RowFilter объекта DataView.Я думаю, вы хотите, чтобы ваши редакторы указывали на запись, на которую нажали.Лучшее решение - не фильтровать DataView, а назначить BindingContext, как это сделано в примере выше.Вот код из него:

public EditForm(Point location, GridColumnCollection columns, object dataSource, BindingContext context)
            : this() {
            StartPosition = FormStartPosition.Manual;
            Location = location;
            BindingContext = context;  // <<<<<<
            allowTrackValueChanges = false;
            this.dataSource = dataSource;
...
}
0 голосов
/ 02 июня 2013

Я использую

 GridView view = (GridView) sender;
 Point pt = view.GridControl.PointToClient(Control.MousePosition);
 var info = DoRowDoubleClick(view, pt);

когда DoRowDoubleClick равно:

 private static GridHitInfo DoRowDoubleClick(GridView view, Point pt) {

            GridHitInfo info = view.CalcHitInfo(pt);

            if (info.InRow || info.InRowCell){

                string colCaption = info.Column == null ? "N/A" : info.Column.GetCaption();

                MessageBox.Show(string.Format("DoubleClick on row: {0}, column: {1}.", info.RowHandle, colCaption));
                return info;
            }
            return null;
        }
0 голосов
/ 02 апреля 2011

Метод 1:

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

return;

после всех процессов (открытие другой формы и т. Д.).

После лучшего понимания вашего вопроса, я предлагаю попробовать метод 2 Надеюсь, он обязательно сработает.

Метод 2:

Сначала запишите текущий выбранный индекс, прежде чем он откроет другую форму или диалоговое окно.

int index = datagridview.SelectedRows[0].Index;  //or xdatagrid.SelectedRows[0].Index;**

Затем после завершения открытия формы или другой процедуры добавить следующую строку

datagridview.Rows[index].Selected = true; //or xdatagrid.Rows[index].Selected = true;**

** N.B .: Я никогда не использовал xdatagrid, но предлагал решения в зависимости от моего опыта просмотра данных.

...