Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2014, 18:07   #1
b3rr
Пользователь
 
Регистрация: 13.03.2013
Сообщений: 16
По умолчанию Выгрузка в Excel c сохранением порядка столбцов из DataGridView

Добрый день, при данном коде слетает порядок столбцов в Excel. Подскажите в чем ошибка?

Export в Excel
Код:
 Dictionary<int, int> TempGrid = new Dictionary<int, int>();
              
        public void exportExcel()
        {
            TempGrid.Clear();
            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                TempGrid.Add(column.Index, column.DisplayIndex);
            }
            var dataTable = ToDataTable(dataGridView1, "Export",TempGrid) as DataTable;
                      
             foreach (DataRow row in dataTable.Rows)
            {
                row["Код"] = "'" + row["Код"];
                row["Старый номер"] = "'" + row["Старый номер"];
                row["Новый номер"] = "'" + row["Новый номер"];
                row["Альтернативный код"] = "'" + row["Альтернативный код"];
                row["Номер последней приходной"] = "'" + row["Номер последней приходной"];
                
            }

            if (dataTable != null)
            {
                var fileName = dataTable.ExportToExcel((ws) =>
                {
                    ws.UsedRange.AutofitColumns();
                    ws.AutoFilters.FilterRange = ws.Range["A1:BH1"];
                    ws.Range["A1:BH1"].CellStyle.Font.Bold = true;

                });
                Process.Start(fileName);
            }
            foreach (DataRow row in dataTable.Rows)
            {
                row["Код"] = row["Код"].ToString().Replace("'", ""); ;
                row["Старый номер"] = row["Старый номер"].ToString().Replace("'", "");
                row["Новый номер"] = row["Новый номер"].ToString().Replace("'", "");
                row["Альтернативный код"] = row["Альтернативный код"].ToString().Replace("'", "");
                row["Номер последней приходной"] = row["Номер последней приходной"].ToString().Replace("'", "");
            }
            
        }
функция по превращению dataGridView в DataTable
Код:

     public static DataTable ToDataTable(DataGridView dataGridView, string tableName, IDictionary<int , int> Temp)
        {

            DataGridView dgv = dataGridView;
            DataTable table = new DataTable(tableName);

            for (int iCol = 0; iCol < dgv.Columns.Count; iCol++)
            {
                foreach (var pair in Temp)
                {
                    if (pair.Key == iCol)
                    {
                        table.Columns.Add(dgv.Columns[pair.Value].Name);
                    }
                }
                
            }

            foreach (DataGridViewRow row in dgv.Rows)
            {

                DataRow datarw = table.NewRow();

                for (int iCol = 0; iCol < dgv.Columns.Count; iCol++)
                {
                    foreach (var pair in Temp)
                    {
                        if (iCol == pair.Key)
                        {
                            datarw[iCol] = row.Cells[pair.Value].Value;
                        }
                    }
  
                }

                table.Rows.Add(datarw);
            }

            return table;
        }
b3rr вне форума Ответить с цитированием
Старый 20.11.2014, 18:14   #2
b3rr
Пользователь
 
Регистрация: 13.03.2013
Сообщений: 16
По умолчанию

TempGrid.Add(column.DisplayIndex, column.Index); - решение проблемы
b3rr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# WinForms DataGridView (диапазон столбцов) Matwei Помощь студентам 2 03.10.2014 17:59
Для действительной матрицы порядка 4x5 найти сумму наибольших значений столбцов alexeykrivulin Помощь студентам 0 27.12.2013 11:18
DataGridView. Создание столбцов? Ruslan Koh C# (си шарп) 0 14.10.2013 12:57
Файлы(PascalABC). Дан символьный файл f. Записать в файл g с сохранением порядка следования символы файла f после символа 'a' Артемdgty Помощь студентам 0 09.10.2013 00:39
Даны символьные файлы f1 и f2.Переписать с сохранением порядка ... Tiny Помощь студентам 1 18.03.2010 08:14