2015-07-16 4 views
0

У меня есть DevExpress GridView, где я добавить столбец, а затем сохранить макет:Восстановление столбец DevExpress GridControl

private void button1_Click(object sender, EventArgs e) 
{ 
    // This magically creates a column which I don't want, so delete it 
    gridControl1.DataSource = new ObservableCollection<object> { new object() }; 
    var gridView = ((GridView)gridControl1.MainView); 
    gridView.Columns.Clear(); 

    // Create the column I want 
    var myColumn = new GridColumn { Name = "MyColumn", Caption = "MyColumn" }; 
    gridView.Columns.Add(myColumn); 
    // At this point, the column is not displayed yet 
    // And it's not displayed in the column chooser panel 
    gridView.Columns[0].Visible = true; 
    // The column is visible now and available in the column chooser 

    // Awesome layout now, let's save it 
    using (var stream = new MemoryStream()) 
    { 
     gridControl1.MainView.SaveLayoutToStream(stream, GetLayoutOptions()); 
     layoutXml = Encoding.UTF8.GetString(stream.GetBuffer(), 0, (int)stream.Length); 
    } 
} 

Это дает хороший XML, который содержит мою колонку:

<XtraSerializer version="1.0" application="View"> 
... 
    <property name="Columns" iskey="true" value="1"> 
    <property name="Item1" isnull="true" iskey="true"> 
     <property name="Visible">true</property> 
     <property name="VisibleIndex">0</property> 
     <property name="Name">MyColumn</property> 
    </property> 
    </property> 
... 
</XtraSerializer> 

Затем пользователь может сделать что-то еще, например изменить расположение

private void button2_Click(object sender, EventArgs e) 
{ 
    var gridView = ((GridView)gridControl1.MainView); 
    gridView.Columns.Clear(); 
} 

Назад на тему, что он хочет видеть «старый» вид:

private void button3_Click(object sender, EventArgs e) 
{ 
    using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(layoutXml))) 
    { 
     gridControl1.MainView.RestoreLayoutFromStream(stream, GetLayoutOptions()); 
    } 
} 

Но не отображается столбец. Глядя на ((GridView)gridControl1.MainView).Columns в отладчике, отображается количество столбцов 0.

Выполнение небольшого исследования, я обнаружил в DevExpress Forum, что мне нужно задать параметры при сохранении и чтении макета, поэтому я адаптировал свой код для включения предложенный метод (уже использованный в приведенном выше кодексе):

private OptionsLayoutGrid GetLayoutOptions() { 
    OptionsLayoutGrid layoutGrid = new OptionsLayoutGrid(); 
    layoutGrid.StoreAllOptions = true; 
    layoutGrid.StoreAppearance = true; 
    return layoutGrid; 
} 

Все еще не повезло.

Как мне вернуть столбцы макета?

Я знаю, что я мог самостоятельно проанализировать XML и добавить этот код программно, но ... ну ... Я бы ожидал, что это будет встроенная функциональность GridControl/GridView.

Добавление

layoutGrid.Columns.AddNewColumns = true; 

, как предложено в another DevExpress Forum post также не помогает.

ответ

1

Так как столбцы, которые вы хотите получить существуют в сохраненном макете, но не существует в сетке, то необходимо установить OptionsLayoutGrid.Columns.RemoveOldColumns свойство ложно. В этом случае необходимо включить параметр OptionsLayoutGrid.Columns.StoreAllOptions.

Смежные вопросы