Приложение C # WinForms: DataGrid и SelectAll - PullRequest
0 голосов
/ 27 ноября 2010

C #, .net 3.5 Приложение WinForm

У меня есть DataGrid в модальной всплывающей (другой) форме.Я добавляю объекты в сетку данных и хочу, чтобы они выбирались при отображении формы.Звучит просто, потому что есть метод «SelectAll».

Однако этот метод работает только тогда, когда сетка данных уже видна.Мой порядок: 1) добавление объектов 2) вызов выбрать все 3) отобразить модальную форму.Но когда он показывает, объекты отображаются, но не выделены.

DialogResult r = myDialogForm.ShowModalDialog(); // objects are added, and SelectAll was called

Кто-то знает, как я могу выполнить SelectAll - даже если DataGrid еще не виден.

-о комментарии HPT (изменение порядка)

Когда я вызываю модальную форму (System.Windows.Forms.ShowDialog), у меня нет возможности [1] вызвать SelectAll после (!) отображения модальной формы - этоименно в этом проблема.

В следующий раз, когда «мой код» будет достигнут, это когда DialogResult будет возвращен обратно.Видимость неявно устанавливается в true с помощью базовых методов (.NET Framework Forms.ShowDialog).

[1] Возможный обходной путь - это событие, когда форма становится видимой, а затем SelectAll.Если я не найду что-то лучшее, я попробую это.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2010

Вы пытались добавить SelectAll к событию Activated () ... Однако я бы создал переменную формы Boolean, чтобы определить, был ли уже обработан SelectAll, поэтому он не делает каждый раз, когда вы можете нажать Alt-Tab для другого приложение и обратно (да, я знаю, некоторые люди делают это между диалоговыми подсказками), и в противном случае снова выбрал бы все заново.

bool WasSelectAllProcessed = false;  && at the form level

Затем в активированном событии, когда все видно, что SelectAll оказывает влияние

if ( ! WasSelectAllProcessed )
   dgv.SelectAll();
0 голосов
/ 01 декабря 2010

Я проверял это:

SelectAll игнорируется, когда сетка невидима.Решение состоит в том, чтобы зарегистрировать событие, когда сетка становится видимой (например, VisibilityChanged), а затем вызвать SelectAll.

. Конечно, флаг того, завершено ли это, поможет избежать избыточных вызовов.Также хорошим подходом будет вызывать SelectAll напрямую, когда сетка уже видна.

Очень похоже на предложение HPT и DRapp.Спасибо за помощь в этом.

0 голосов
/ 27 ноября 2010

Вы должны изменить свой сценарий!

  1. добавление объектов
  2. установить для dgv видимости значение false
  3. отображение модальной формы
  4. звонит dgv.SelectAll()
  5. установить для dgv видимости значение true

EDITED

вы можете просто обработать указанное событие формы. сценарий будет:

DialogForm myDF = new DialogForm();
//here you add data to your dgv in myDF
myDF.ShowDialog();

установите dgv.Visible на false, вы можете обрабатывать событие Shown в DialogForm Cunstructor после InitializeComponent();, как this.Shown += new EventHandler(DialogForm_Shown); и затем

    void DialogForm_Shown(object sender, EventArgs e)
    {
       dgv.SelectAll();
       dgv.Show();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...