Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
 
GhoSTi4eG
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
#1

Вывод из Datagridview сортировки в Word - C#

01.11.2016, 10:38. Просмотров 1422. Ответов 37
Метки нет (Все метки)

Задача состоит в том что бы сделать вывод в разные документы по секциям, в gdv есть секции, их как-то нужно разделить, что бы потом создались разные документы word с названием секций.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 10:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывод из Datagridview сортировки в Word (C#):

Сохранение сортировки DataGridView - C#
Вот если запоминаю вот так private void DaGridView_Sorted(object sender, EventArgs e) { DataGridViewColumn...

Настройка сортировки в столбце DataGridView - C#
Имеется программа, которая выводит массив элементов класса в DataGridView. Есть столбец с данными даты. Режим сортировки стоит в...

DataGridView и раскраска ячеек после сортировки - C#
Всем привет! Есть база данных. Считываем из нее данные в DataSet. Привязываем DataGridView к DataSet. odbcDataAdapter1.Fill(dataSet1,...

Datagridview: запрет сортировки при нажатию на ColumnHeader - C#
всем привет, кто знает, подскажите пожалуйста как сделать так, чтобы при нажатии на ColumnHead таблица не меняла ряды местами?? Это как-то...

Как правильно удалить записи из DataGridView после сортировки? - C#
foreach(DataGridViewRow row in dataGridView1.SelectedRows) table.Rows.Delete(); Источник данных для грида - DataTable, если не...

Экспорт DataGridView в word - C#
Доброе время! Помогите пожалуйста кто может. Экспортирую данные в Word, все срабатывает до строки экспорта из datagridview. Выдает ошибку:...

37
ViterAlex
6276 / 3480 / 1065
Регистрация: 11.02.2013
Сообщений: 7,665
Завершенные тесты: 3
04.11.2016, 23:44 #31
Цитата Сообщение от GhoSTi4eG Посмотреть сообщение
таблица с 6 столбцами
Немного изменим, указав нужные номера:
C#
1
2
3
4
5
6
7
8
9
private static void AddRow(dynamic wdDoc, DataGridViewRow row)
{
    var colIndices = new[]{1,2,4,5,7};//Индексы столбцов, которые нужно экспортировать
    dynamic wdRow = wdDoc.Tables[1].Rows.Add();
    foreach (var index in colIndices)
    {
        wdRow.Cells[index].Range.Text = row.Cells[index-1].Value.ToString();
    }
}
0
ViterAlex
6276 / 3480 / 1065
Регистрация: 11.02.2013
Сообщений: 7,665
Завершенные тесты: 3
05.11.2016, 00:49 #32
Цитата Сообщение от GhoSTi4eG Посмотреть сообщение
Я не совсем вьезжаю что происходит в коде
Создаётся экземпляр приложения Word (wdApp). Затем начинается перебор строк в dgv. Значение второго поля (столбца) проверяется на совпадение со следующей строкой того же столбца. Если значение секции не изменилось, то в таблицу в документе добавляется новая строка. Если документ ещё не создан, то он создаётся и при создании в него добавляется таблица.
Если значение во втором столбце поменялось, значит началась другая секция. Старый документ закрывается, создаётся новый с таблицей в него добавляется строка. И так для каждой строки dgv.
В конце закрывается приложение Word и вызывается делегат ExportCompleted.
Блок-схему как мог нарисовал
1
Миниатюры
Вывод из Datagridview сортировки в Word  
GhoSTi4eG
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
07.11.2016, 08:28  [ТС] #33
Так и не разобрался с этой ошибкой, не выводит в файл 3 секцию
0
Миниатюры
Вывод из Datagridview сортировки в Word  
GhoSTi4eG
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
07.11.2016, 08:43  [ТС] #34
Даже если там более одной строки или одна строка, ничего не меняется.
Я походу понял в чем причина, он пытается сравнить строку с следующей, но её нет

Добавлено через 7 минут
Но чет у меня не вышло эту ошибку уделать :C
0
ViterAlex
6276 / 3480 / 1065
Регистрация: 11.02.2013
Сообщений: 7,665
Завершенные тесты: 3
07.11.2016, 08:51 #35
Чему при этом равен colIndex?
0
GhoSTi4eG
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
07.11.2016, 09:03  [ТС] #36
colindex равен 1
0
GhoSTi4eG
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
08.11.2016, 12:32  [ТС] #37
Цитата Сообщение от GhoSTi4eG Посмотреть сообщение
colindex равен 1
Ну colindex же у нас фиксирован, он же ищет эквивалент по столбцу с секциями, значит там что т другое
0
ViterAlex
6276 / 3480 / 1065
Регистрация: 11.02.2013
Сообщений: 7,665
Завершенные тесты: 3
09.11.2016, 00:12 #38
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как выяснилось, проблема была в наличии пустой строки в конце dgv. Эта строка появляется, если AllowUserToAddRows == true. Поскольку в таблицу не предусматривается пользовательский ввод данных, то это свойство было отключено.
Кроме того не экспортировалась последняя строка, если в этой строке начиналась новая секция. Это было вызвано преждевременным заданием имени файла. Корректный код принял такой вид:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/// <summary>
/// Экспорт содержимого DataGridView в Word с разделением на документы по содержимому столбца
/// </summary>
/// <param name="dgv">Экспортируемый DataGridView</param>
/// <param name="colIndex">Индекс столбца, по которому разделять документы</param>
public static async void Export(DataGridView dgv, int colIndex)
{
    string path = string.Empty;
    using (var dialog = new FolderBrowserDialog())
    {
        dialog.SelectedPath = AppDomain.CurrentDomain.BaseDirectory;
        if (dialog.ShowDialog() != DialogResult.OK)
        {
            ExportCompleted.Invoke();
            return;
        }
        path = dialog.SelectedPath;
    }
    dynamic wdApp = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
    //wdApp.Visible = true;
    var result = await Task<bool>.Factory.StartNew(() =>
    {
        string section = string.Empty;
        dynamic wdDoc = null;
        string fileName = string.Empty;
        foreach (DataGridViewRow row in dgv.Rows)
        {
            if (!section.Equals(row.Cells[colIndex].Value.ToString()))
            {
                if (wdDoc != null)
                {
                    try
                    {
                        SaveDoc(wdDoc, fileName);
                    }
                    catch (Exception ex)
                    {
                        throw new Exception($"Ошибка при сохранении документа {fileName}.", ex);
                    }
                    finally
                    {
                        wdDoc.Close(false);
                    }
                }
                fileName = Path.Combine(path, $"{row.Cells[colIndex].Value}.doc");
                try
                {
                    wdDoc = wdApp.Documents.Add();
                }
                catch (Exception ex)
                {
                    throw new Exception($"Ошибка при создании документа{fileName}.", ex);
                }
                CreateWordTable(wdDoc, dgv);
            }
            AddRow(wdDoc, row);
            section = row.Cells[colIndex].Value.ToString();
        }
        if (wdDoc == null) return false;
        SaveDoc(wdDoc, fileName);
        wdDoc.Close(false);
        return true;
    });
    wdApp.Quit();
    wdApp = null;
    if (ExportCompleted != null)
    {
        ExportCompleted.Invoke();
    }
}
0
09.11.2016, 00:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2016, 00:12
Привет! Вот еще темы с ответами:

Импорт из MS Word в DataGridView - C#
Доброго времени суток! Надеюсь на вашу помощь. Нужно из MS Word перенести данные в DataGridView. Может кто сталкивался с этим?

.NET 4.x Перенос данных из DataGridView в Word - C#
НЕ могу разобраться, как мне перенести данные из DateGrigView в Word Вот код int row_count = dataGridView1.RowCount; int...

Экспорт данных из DataGridView в Word - C#
Добрый день! У меня возник вопрос как экспортировать данные из таблицы dataGridView в Word. В данной таблице у меня 15 столбцов и их...

Импорт таблицы из Word'а в dataGridView - C#
Доброго времени суток. Подскажите как можно открыть\импортировать таблицу из Word'а в dataGridView.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru