Запись и чтение из xml в dataGridView

209
19 июня 2018, 10:00

На форме (c# winforms vs2010) есть dataGridView1 и dataGridView2. При запуске формы dataGridView1 заполняется из файла mdb. В dataGridView2 строки переносятся с помощью метода drag & drop из dataGridView1. Подскажите пожалуйста, можно ли с помощью класса "Props" (пример кода ниже) аналогично записывать (по кнопке) и считывать при запуске формы данные из dataGridView2? Другими словами, запоминать и считывать как настройку таблицу dataGridView2.

Создаем класс Props и прописываем туда следующий код
using System;
using System.Xml.Serialization;
using System.IO;
namespace XMLFileSettings
{
    //Класс определяющий какие настройки есть в программе
    public class PropsFields
    {
        //Путь до файла настроек
        public String XMLFileName = System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("PROGRAM_NAME.exe", "") + "settings.xml";
        //Чтобы добавить настройку в программу просто добавьте суда строку вида - 
        //public ТИП ИМЯ_ПЕРЕМЕННОЙ = значение_переменной_по_умолчанию;
        public String TextValue = @"Testing XML File Settings";
        public DateTime DateValue = new DateTime(2011, 1, 1);        
        public Decimal DecimalValue = 555;
        public Boolean BoolValue = true;
    }
    //Класс работы с настройками
    public class Props
    {
        public PropsFields Fields;
        public Props()
        {
            Fields = new PropsFields();
        }
        //Запист настроек в файл
        public void WriteXml()
        {
            XmlSerializer ser = new XmlSerializer(typeof(PropsFields));
            TextWriter writer = new StreamWriter(Fields.XMLFileName);
             ser.Serialize(writer, Fields);
            writer.Close();
        }
        //Чтение настроек из файла
        public void ReadXml()
        {
            if (File.Exists(Fields.XMLFileName)){
                XmlSerializer ser = new XmlSerializer(typeof(PropsFields));
                TextReader reader = new StreamReader(Fields.XMLFileName);
                 Fields = ser.Deserialize(reader) as PropsFields;
                reader.Close();
            }
            else{}
        }
    }
}

Теперь, чтобы использовать настройки в своей программе сделаем следующее -
using System;
using System.Windows.Forms;
namespace XMLFileSettings
{
    public partial class Form1 : Form
    {
        #region Settings action
        Props props = new Props();
        //Запись настроек
        private void writeSetting()
        {
            props.Fields.TextValue = textBox1.Text;
            props.Fields.DateValue = dateTimePicker1.Value;
            props.Fields.DecimalValue = numericUpDown1.Value;
            props.Fields.BoolValue = checkBox1.Checked;
            props.WriteXml();
        }
        //Чтение настроек
        private void readSetting()
        {
            props.ReadXml();
            textBox1.Text = props.Fields.TextValue;
            dateTimePicker1.Value = props.Fields.DateValue;
            numericUpDown1.Value = props.Fields.DecimalValue;
            checkBox1.Checked = props.Fields.BoolValue;
        }
        #endregion
        #region Form Action
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            readSetting();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            writeSetting();
        }
        #endregion
    }
}

//Код формы:
namespace test
    {
        public partial class Form1 : Form
        {
            private OleDbConnection conn;
            private OleDbConnectionStringBuilder sb;
            DataTable table;
            DataTable table2;
            public Form1()
            {
                InitializeComponent();
                sb = new OleDbConnectionStringBuilder();
                sb.Provider = "Microsoft.Jet.OLEDB.4.0";
                sb.DataSource = @"c:\base.mdb";
                conn = new OleDbConnection(sb.ConnectionString);
                this.dataGridView1.DataSource = FillTable("SELECT * FROM СПИСОК");
            }
            private DataTable FillTable(String sql)
            {
                table = new DataTable();
                using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
                {
                    da.Fill(table);
                }
                table2 = table.Clone();
                this.dataGridView2.DataSource = table2;
                return table;
            }
        private void dataGridView2_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(DataRow)))
            {
                var row = (DataRow)e.Data.GetData(typeof(DataRow));
                table2.ImportRow(row);
            }
        }
        private void dataGridView2_DragOver(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(DataRow)))
            {
                e.Effect = DragDropEffects.Copy;
            }
        }
        private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && e.RowIndex >= 0 && e.RowIndex < table.Rows.Count)
            {
                dataGridView1.DoDragDrop(table.DefaultView[e.RowIndex].Row, DragDropEffects.Copy);
            }
        }
        }
    }
READ ALSO
Построение TreeView в ASP.NET MVC

Построение TreeView в ASP.NET MVC

Подскажите пожалуйста что здесь не так: Это работает:

191
как записать в массив числа textbox?

как записать в массив числа textbox?

как записать в массив числа из textbox разделенных пробелом? Допустим, пользователь ввел 12 12 4 6 7 9 - получилось 6 элементов массива, b[0] = 12, b[1] = 12,

194
tabControl сделать вкладку неактивной

tabControl сделать вкладку неактивной

На форме есть tabControl, возможно ли в зависимости от переданного условия сделать одну из вкладок элемента не активной?

194