Метод CreateDefaultView() не вызывается в devexpress GridControl

Я унаследовал devexpress GridControl, следуя всем шагам здесь.

Есть только одна проблема, метод CreateDefaultView() никогда не вызывается.

Это код:

public partial class gttDXGridControl : GridControl
{
    public gttDXGridControl() : base()
    { }

    protected override void RegisterAvailableViewsCore(InfoCollection collection)
    {
        base.RegisterAvailableViewsCore(collection);
        collection.Add(new gttDXGridViewInfoRegistrator());
    }

    //this event is not called for some reason...
    protected override BaseView CreateDefaultView()
    {
        gttDXGridView gridView = CreateView("gttGridView") as gttDXGridView;
        // would like to initialize stuff here...
        return gridView;
    }
}

public partial class gttDXGridViewInfoRegistrator : DevExpress.XtraGrid.Registrator.GridInfoRegistrator
{
    public override string ViewName { get { return "gttGridView"; } }
    public override BaseView CreateView(GridControl grid) { return new gttDXGridView(grid as GridControl); }
    public override BaseViewInfo CreateViewInfo(BaseView view) { return new gttDXGridViewInfo(view as gttDXGridView); }
    public override BaseViewHandler CreateHandler(BaseView view) { return new gttDXGridHandler(view as gttDXGridView); }

}

public partial class gttDXGridViewInfo : GridViewInfo
{
    public gttDXGridViewInfo(DevExpress.XtraGrid.Views.Grid.GridView gridView) : base(gridView)
    { }

    public override int CalcRowHeight(Graphics graphics, int rowHandle, int min, int level, bool useCache, GridColumnsInfo columns)
    {
        return base.CalcRowHeight(graphics, rowHandle, MinRowHeight, level, useCache, columns);
    }

    public override int MinRowHeight
    {
        get { return base.MinRowHeight - 2; }
    }
}

Это событие подходит для инициализации свойств GridView, но оно никогда не вызывается. Что может быть причиной этого?


person GuidoG    schedule 04.02.2016    source источник


Ответы (1)


Это событие вызывается, когда свойство MainView равно null. Это означает, что это событие будет вызвано, когда вы добавите новый gttGridControl в свою форму во время разработки или во время выполнения.
Вот пример для времени выполнения:

var gridControl = new gttDXGridControl();

gridControl.Width = 100;
gridControl.Height = 100;

Controls.Add(gridControl); // => Here this event will be invoked.
person nempoBu4    schedule 04.02.2016
comment
Итак, когда я помещаю этот элемент управления в форму, должно вызываться это событие? Если да, то почему он не вызывается в моем gttDXGridControl? - person GuidoG; 04.02.2016
comment
@GuidoG Как ты это проверяешь? - person nempoBu4; 04.02.2016
comment
Я установил точку останова во всех своих методах, единственный метод, при котором приложение не останавливается, - это метод. - person GuidoG; 04.02.2016
comment
@GuidoG Точки останова не работают во время разработки. Вы можете проверить это, если поместите что-то вроде System.Windows.Forms.MessageBox.Show("Test"); внутри своего метода CreateDefaultView. - person nempoBu4; 04.02.2016
comment
У меня также была строка кода для инициализации свойства gridview, этого тоже не произошло - person GuidoG; 04.02.2016
comment
в рантайме весь этот код выполняется и при загрузке формы, там брейкпоинты работают, вызывается каждый брейкпойнт, кроме этого - person GuidoG; 04.02.2016
comment
да, как я уже объяснил. Я тестирую все во время выполнения, это единственный способ использовать точки останова. Кроме того, в desinger.cs есть строка кода: this.panelGrid.Controls.Add(this.gttDXGridList); - person GuidoG; 04.02.2016
comment
@GuidoG Я скопировал ваш код в новый проект и использовал свой код в событии Button.Click. Точка останова выполняется. - person nempoBu4; 04.02.2016
comment
Унаследовали ли вы новый GridControl от devexpress GridControl, как это сделал я? - person GuidoG; 04.02.2016
comment
но точка останова выполняется только при нажатии кнопки, а не при выполнении кода из Designer.cs? Это точно такой же код, так почему же один выполняется, а другой нет? - person GuidoG; 04.02.2016
comment
@GuidoG Найдите в своем designer.cs что-то вроде gttDXGridControl1.MainView = gttGridView1;, прокомментируйте это и попробуйте запустить. - person nempoBu4; 04.02.2016
comment
но GridControl во время разработки теперь имеет GridView вместо gttGridView. - person GuidoG; 04.02.2016
comment
хм, после второй сборки GridControl имеет правильный gttGridView вместо стандартного GridView. Итак, теперь, когда это как-то связано с моей проблемой, теперь вопрос в том, как это обойти. Когда я помещаю свой GridControl в форму, эта строка кода генерируется визуальной студией. - person GuidoG; 04.02.2016
comment
@GuidoG Вопрос в том, чего вы действительно пытаетесь достичь? Есть вероятность, что метод CreateDefaultView не то, что вы ищете. - person nempoBu4; 05.02.2016