Как закрепить представление внутри XtraGrid.GridControl?

У меня есть DevExpress XtraGrid.GridControl в проекте Winforms, который я использую с настройкой Master/Detail с несколькими таблицами в наборе данных, привязанном во время выполнения. Визуальное поведение сетки несколько неустойчиво, поскольку в нижней части видимого раздела сетки в GridControl есть перетаскиваемая полоса, которая не расширяется до размера элемента управления при изменении размера данных.

В моей реализации GridControl закреплен, чтобы заполнить вкладку, которую он занимает, и с этим единственным исключением работает, как и ожидалось. Однако сама сетка использует только половину видимой области, доступной в форме. Это проблема, поскольку данные занимают весь экран строк и строк сведений, но пользователь должен вручную изменить размер представления, перетащив полосу размера в нижнюю часть экрана.

Я вручную расширяю каждое представление по мере его регистрации, хотя эта проблема сохраняется, даже если я не выполняю это автоматически и разрешаю пользователю расширять их, щелкая знак «плюс». Вот часть кода, которая программно расширяет представление:

For x As Integer = 0 to v.RowCount - 1
  For y as integer = 0 to v.GetRelationCount(x) - 1
    v.ExpandMasterRow(x, y)
  Next
Next

Я искал способ установить объект GridView для «закрепления» внутри GridControl, но не нашел способа. Есть ли способ заставить данные автоматически заполнять GridControl/View? Спасибо за любую помощь в этом вопросе.


person JSM    schedule 20.05.2013    source источник
comment
Было бы неплохо, если бы вы могли сделать принтскрин, может быть, я могу помочь   -  person Gabriel Vonlanten C. Lopes    schedule 21.05.2013
comment
Я загрузил изображение сетки до и после изменения размера сетки по следующему URL-адресу: ссылка   -  person JSM    schedule 22.05.2013
comment
У меня есть дополнительная информация. В сетке отображается больше строк, если в самой верхней таблице набора данных есть дополнительная строка. Например, если моя родительская таблица имеет 1 строку, то сетка будет показывать 50%, но если есть две строки, то она показывает высоту всего экрана. Кажется, что даже несмотря на то, что есть много дочерних строк для заполнения экрана, размер сетки зависит от количества родительских строк.   -  person JSM    schedule 22.05.2013


Ответы (3)


Обычно вам нужно иметь GridView для каждой таблицы данных, которую вы хотите отобразить в GridControl, но когда вы делаете все во время выполнения, вам нужно будет инициализировать одно и то же представление Gridview для каждого источника данных/таблицы данных, которую вы хотите показать.

//GridView view;
view.PopulateColumns();
view.OptionsView.ColumnAutoWidth = true;
view.BestFitMaxRowCount = 10000;   // or less ? depends on your data vs preformance
view.BestFitColumns();
// you may want to limit some of the columns width
foreach (GridColumn item in view.Columns)
{
    item.Width = (item.Width > 1000) ? 1000 : item.Width;
}
//GridControl ctrl;    // if you do this in form load you  need to do a force initialize afterwards.
ctrl.ForceInitialize();
person Stig    schedule 21.05.2013
comment
Я ценю вашу помощь, однако я уже сгенерировал и прикрепил представления по мере необходимости. Сетка просто неправильно расширяет свой внутренний размер, чтобы соответствовать внешним границам. - person JSM; 22.05.2013

По вашему экрану печати кажется, что вы стыкуете все внутри одной панели или вкладки. Но эта панель не прикреплена к самой форме, не в этом ли проблема?

Вы всегда должны делать:

GridControl1.DockStyle = DockStyle.Fill;

а также состыковать контейнер:

Panel1.DockStyle = DockStyle.Fill
person Gabriel Vonlanten C. Lopes    schedule 21.05.2013
comment
В форме есть элемент управления вкладками, в котором есть вкладка для этой сетки. Страница, по сути, представляет собой панель, которая правильно расширяется и сжимается вместе с формой. Сетка закрепляется внутри страницы, а также соответствующим образом расширяется и сжимается. Линия, которую вы видите на снимке экрана, находится внутри элемента управления XtraGrid и может перемещаться в пределах границ элемента управления. Представления генерируются внутри пространства элемента управления, и поэтому я не могу их закрепить. - person JSM; 22.05.2013
comment
Честно говоря, довольно трудно помочь вам с такой конкретной проблемой, если бы вы могли воспроизвести это в более простом коде, а затем отредактировать свой квест с кодом дизайнера вашего образца, который мы можем воспроизвести, а затем действительно понять проблему, что для меня до сих пор неясно. Я просто пытаюсь помочь :) - person Gabriel Vonlanten C. Lopes; 22.05.2013

Кажется, что когда XtraGrid создает подчиненное представление, оно игнорирует DetailHeight родительского представления в пользу DetailHeight дочернего представления. Установка DetailHeight представления при его регистрации устранила проблему.

Private Sub grdMaster_ViewRegistered(sender As System.Object, e As DevExpress.XtraGrid.ViewOperationEventArgs) Handles grdMaster.ViewRegistered
  Try
    Select Case e.View.GetViewCaption()
      Case "parent_child"
        Dim view As Grid.GridView = e.View
        view.DetailHeight = 10000
    End Select
  Catch ex As Exception
    'handle error.
  End Try
End Sub

Спасибо всем за вашу помощь и помощь.

person JSM    schedule 22.05.2013