CSV DataGridView Преобразование в XML Winforms - PullRequest
0 голосов
/ 30 ноября 2018

, поэтому я работаю над своим проектом и хочу записать представление данных из файла CSV в файл XML, и я достиг этого, но я хочу знать, есть ли способ сортировки представления заказа или изменения результатаXML я хочу отсортировать в алфавитном порядке из определенного столбца.это мой код для сохранения XML-файла.

    if (saveFileDialogXml.ShowDialog() == DialogResult.OK)
        {
            //Xml Alphabetical order code goes here

            DataTable dst = new DataTable();
            dst = (DataTable)Datagridview1.DataSource;
            dst.TableName = "Data";
            dst.WriteXml(saveFileDialogXml.FileName);

        }

        }

, но на выходе получается

<?xml version="1.0" standalone="yes"?>

<Item_x0020_Code>Item Code</Item_x0020_Code>
<Item_x0020_Description>Item Description</Item_x0020_Description>
<Current_x0020_Count>Current Count</Current_x0020_Count>
<On_x0020_Order>On Order</On_x0020_Order>

какВы можете видеть, что он даже помещает шестнадцатеричный код, и он просто выбрасывает туда все, так что мне было интересно, смогу ли я переформатировать его так, как я хочу, чтобы оно отображалось, как удаление x0020 .Поэтому я попытался использовать LINQ, чтобы увидеть, была ли проблема с файлом, но я продолжаю получать другую ошибку, которая говорит

System.Xml.XmlException: символ '' ', шестнадцатеричное значение 0x20, не может бытьвключены в имя. '

Это код LINQ:

var xmlFile = new XElement("root",
                from line in File.ReadAllLines(@"C:\\StockFile\stocklist.csv")
                .Where(n => !string.IsNullOrWhiteSpace(n))
                where !line.StartsWith(",") && line.Length > 0
                let parts = line.Split(',')
                select new XElement("Item Code",
                                    new XElement("Test1", parts[0]),
                                    new XElement("Test2", parts[1])

                                    )

             );

Кроме того, я новичок в C # и мой первый пост здесь, поэтому, пожалуйста, извините за беспорядочные записи или размещения.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Извините за поздний ответ Я вроде понял, так что забыл закрыть или пометить ответ в любом случае, если кто-то из вас столкнулся с тем же самым, все, что я сделал, это

    // Save file dialogue XML file.
        if (saveFileDialogXml.ShowDialog() == DialogResult.OK)
        {

           //try block to catch exception and handle it.
            try
            {
               //Changing Data Table name to stock.
                string Stock = ((DataTable)Datagridview1.DataSource).TableName;
            }

            //Catching the exception and handling it.
            catch (Exception)
            {
                string es = "Please Open The File Before Saving it";
                string title = "Error";
                MessageBox.Show(es, title);


            }

// instatiate new DataTable.
            DataTable dt = new DataTable
            {
                TableName = "Stock"
            };

            for (int i = 0; i < Datagridview1.Columns.Count; i++)
            {
                //if (dataGridView1.Columns[i].Visible) // Add's only Visible columns.
                //{
                string headerText = Datagridview1.Columns[i].HeaderText;
                headerText = Regex.Replace(headerText, "[-/, ]", "_");

                DataColumn column = new DataColumn(headerText);
                dt.Columns.Add(column);
                //}
            }

            foreach (DataGridViewRow DataGVRow in Datagridview1.Rows)
            {
                DataRow dataRow = dt.NewRow();
                // Add's only the columns that I need
                dataRow[0] = DataGVRow.Cells["Item Code"].Value;
                dataRow[1] = DataGVRow.Cells["Item Description"].Value;
                dataRow[2] = DataGVRow.Cells["Current Count"].Value;
                dataRow[3] = DataGVRow.Cells["On Order"].Value;

                dt.Rows.Add(dataRow); //dt.Columns.Add();
            }
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);

           //Finally the save part:
            XmlTextWriter xmlSave = new XmlTextWriter(saveFileDialogXml.FileName, Encoding.UTF8)
            {
                Formatting = Formatting.Indented
            };
            ds.DataSetName = "Data";
            ds.WriteXml(xmlSave);
            xmlSave.Close();
0 голосов
/ 30 ноября 2018

Попробуйте следующее:

            DataTable dst = new DataTable();
            int startColumn = 5;
            for(int i = dst.Columns.Count - 1; i >= startColumn; i--)
            {
                dst = dst.AsEnumerable().OrderBy(x => dst.Columns[i]).CopyToDataTable();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...