Как выгрузить DataGrid в XML?

166
05 августа 2018, 21:50

Имеется DataGrid. Есть проблемы с выгрузкой содержимого в XML.

Класс для сериализации

[Serializable]
public class Buttons
{
    public bool VisibilityBut { get; set; }
    public string Name { get; set; }
    public string PathImag { get; set; }
    public string PathExe { get; set; }
}

Если делаю сериализацию так

XmlSerializer formatter = new XmlSerializer(typeof(Buttons));
using (FileStream fs = new FileStream(@"XML.XML", FileMode.OpenOrCreate))
    formatter.Serialize(fs, DataGrid1);

то файл создаётся пустым и возникает исключение

System.InvalidOperationException: "Ошибка при создании документа XML." InvalidCastException`: Не удалось привести тип объекта "System.Windows.Controls.DataGrid" к типу "ПанельКнопок.Buttons".

А если так делаю:

if (DataGrid1.ItemsSource == null) return;
var serializer = new XmlSerializer(typeof(List<Buttons>));
var writer = new StreamWriter("XML.xml"); 
serializer.Serialize(writer, DataGrid1.ItemsSource as List<Buttons>); 
writer.Close();

то в файле создается только заголовок XML, и всё остальное пусто, путем подбора типов, решение такое.

ObservableCollection<ButtonEIIS> collection = null;
    private void butSaveXML_Click(object sender, RoutedEventArgs e) // нажали кн. "Сохранить в XML"
    {
        var serializer = new XmlSerializer(typeof(ObservableCollection<Buttons>));
        using (FileStream fs = new FileStream(@"XML.XML", FileMode.OpenOrCreate))
        {
            serializer.Serialize(fs, DataGrid1.ItemsSource as ObservableCollection<Buttons>);
        }
    }

в XAML привязка такая

<DataGrid x:Name="DataGrid1" Margin="10,171,10,52" FontSize="14" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Header="Вид" Binding="{Binding VisBut}"/>
            <DataGridTextColumn Header="Надпись на кнопке (папка подсистемы)" Binding="{Binding NameSubEIIS}"/>
            <DataGridTextColumn Header="Полный путь к картинке" Binding="{Binding PathPNG}"/>
            <DataGridTextColumn Header="Полный путь к запускаемому приложению" Binding="{Binding PathEXE}"/>
        </DataGrid.Columns>
    </DataGrid>
READ ALSO
Не отображается UserControl в конструкторе WinForms

Не отображается UserControl в конструкторе WinForms

Cуть проблемы в том что у меня есть три usercontrol-а для трех фигур, два из них отображаются, а один нет(обведен красным, в контроле должно быть видно...

146
Проблема с комбо-бокс-столбцами таблицы

Проблема с комбо-бокс-столбцами таблицы

В таблице есть две колонки, обе они имеют тип DataGridComboBoxColumnВ первой колонке надо показывать выпадающий список из одной коллекции, во второй...

173
Передача данных в DataGrid

Передача данных в DataGrid

День добрыйИмитирую регистрацию пользователя

150
Защита данных программы

Защита данных программы

Необходимо защитить данные которые используются и генерируются программой в процессе работыЕсть идея использовать запароленную базу данных...

174