Как экспортировать значения столбца флажка datagridview, сохраненные в списке, в Excel - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть class и Form1.В моем class я создал переменные для сохранения моих данных.

Savestate.cs

public static List<string> plate_list = new List<string>();
public static List<string> checkbox_list = new List<string>();

Затем в моем Form1 я сохранил данные textbox1 и chk в переменные через button1,Обе данные соответствуют друг другу.Затем я экспортирую их в Excel через button2.Ниже приведен мой код:

Form1.cs

private void button1_Click(object sender, EventArgs e)
{
 Savestate.plate_list.Add(textbox1.Text);
 foreach (DataGridViewRow dataGridRow in dataGridView1.Rows)
 {
   DataGridViewCheckBoxCell chk = dataGridRow.Cells[1] as DataGridViewCheckBoxCell;
   if (Convert.ToBoolean(Convert.ToInt32(chk.Value)) == true)
     {
      Savestate. checkbox_list.Add("P");
     }
   else if (Convert.ToBoolean(chk.Value) == false)
     {
      Savestate. checkbox_list.Add("O");
     }
  }
}

//snippet of codes for exporting variables into excel
private void button2_Click(object sender, EventArgs e)
{ 
  int _lastRow1 = oSheet1.Range["C" + oSheet1.Rows.Count].End[Excel.XlDirection.xlUp].Row + 1;
  rng = oSheet1.Range[oSheet1.Cells[_lastRow1, 2], oSheet1.Cells[_lastRow1, 10]];

   foreach (var data in Savestate.plate_list)
        {
          oSheet1.Cells[_lastRow1, 1] = data;
          foreach (var other in Savestate. checkbox_list)
          {
           rng.Value = other;
           (another loop here to read the checkbox list values?)
           }
            _lastRow1++;
        }
 }

С этими кодами я могу корректно проходить по номеру своей таблички, но только для значений своих флажковпоследние значения экспортируются, см. здесь (я сохранил 2 номера пластины, поэтому должно быть 2 набора значений флажков, но экспортируется только 1 набор значений флажков).Я чувствую, что мне нужно сделать еще один цикл специально для значений флажка, но я не знаю, как начать.Надеюсь получить помощь.Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2019

Будет намного проще, если вы сделаете следующее:

  • Щелкните правой кнопкой мыши проект в обозревателе решений

  • Выберите Добавить новый...

  • Добавление нового набора данных в проект

  • Дважды щелкните набор данных, появится что-то похожее на конструктор базы данных

  • Щелкните правой кнопкой мыши область конструктора, выберите New DataTable, назовите его соответствующим образом

  • Несколько раз щелкните правой кнопкой мыши DataTable, выберите Добавить столбец и добавьте все столбцы, которые хотите сохранить.введите данные для каждого столбца, например, String, Int, Boolean и т. д.

  • Сохраните свой DataSet

  • Переключитесь обратно на дизайнер форм,перейдите в соответствующее меню, чтобы отобразить окно «Источники данных» для вашей версии Visual Studio.Google, если вы не знаете, как это показать.Например, для версии 2017: https://docs.microsoft.com/en-us/visualstudio/data-tools/add-new-data-sources?view=vs-2017#data-sources-window

  • В окне источников данных есть дерево, а один из узлов - ваша DataTable.Перетащите его на дизайнер форм.Появится сетка данных со столбцами, подходящими для типов данных.Столбцы Bool являются флажком.Представление datagrid связано с объектом DataSet, который содержит экземпляр вашей таблицы данных.Все, что вы вводите в сетку, сохраняется в таблице данных.Вы можете удалить BindingNavigator, который появляется, если вы не хотите его

  • Щелкните правой кнопкой мыши решение в обозревателе решений, выберите Управление пакетами Nuget для решения

  • В диспетчере пакетов слепков нажмите кнопку Обзор, а затем введите EPPLUS в поле поиска.Установите библиотеку epplus в свой проект.Закройте менеджер пакетов nuget

  • Дважды щелкните кнопку сохранения в форме.Добавьте ~ 3 строки кода, необходимые для того, чтобы epplus создал ваш файл Excel из таблицы DataTable.Дополнительную информацию можно найти здесь: Экспорт DataTable в Excel с EPPlus


по этой ссылке, вам нужно подставить имя вашей DataTable в LoadFromDataTableвызов.Он находится внутри DataSet на вашем устройстве, поэтому будет выглядеть примерно так: yourDataSetName.YourDataTabkeName


Выше представлен вариант концепции, называемой MVC-модель, вид, контроллер.Суть этого в том, что ваши данные живут в специальном контейнере, называемом моделью (в этом примере DataSet / DataTable), и они отображаются на экране представлением (datagridview) и снова контролируются / изменяются чем-то другим (хотя в этомпример и во многих, datagridview также является контроллером, в некоторой степени).Дни создания сложного элемента управления в форме, например вида сетки, и хранения данных внутри него, должны были закончиться с помощью VB6 :).Хотя иногда все же удобнее хранить данные, например, в текстовых полях, и извлекать их с помощью textbox.Text для простых сценариев, все эти элементы управления поддерживают привязку данных, и идея, что если ваша программа обрабатывает несколько записей данных и просматривает их, означает, чтовсе данные должны храниться в модели, все элементы управления, которые их отображают и редактируют, подключаются к модели, и все они понимают концепцию навигации по модели - вы изменяете текущую запись, на которую ссылаетесь в модели, и весь текстполя и т.д. изменяют данные, которые они показывают, автоматически.Вы не заходите в каждый элемент управления и не вставляете туда данные неоднократно, а потом сами копаете их

Как только вы понимаете парадигму MVC, это открывает вам возможность использовать функциональность, на которую другие разработчики нацелены и в этом случае.EPPlus, вы можете просто передать ему модель данных (DataSet / DataTable) и сказать «здесь, запишите это в файл», и он это сделает.Вы не можете передать свое сетевое представление в epplus, поскольку данные не должны храниться в сетевом представлении в соответствии с принципами MVC, поэтому epplus не поддерживает копирование данных из него

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...