Мой ниже код сначала пишет восклицательный знак (!) С разделителем заголовка в TXT-файл, а затем циклически перебирает каждый элемент и subItem в элементе управления ListView, помещая каждое значение записи в новую строку в моем .txt-файле. Все значения необходимы для просмотра пользователями в ListBox, но при записи в файл мне нужно только написать поля, которые используются на следующем шаге, используя файл .txt в качестве источника данных для документа MS Word MailMerge.Записывать специфические SubItems в .txt во время цикла с помощью элемента управления ListView?
Вместо того, чтобы циклически и добавления каждой записи значение поля моего StringBuilder, мне нужен способ, чтобы получить только те значения, где заголовок ListView столбца является следующее:
memno имя address1 address2 address3 сал fuldate SYS
private void btnMerge_Click(object sender, EventArgs e)
{
try
{
string docLoc = "";
string docSource = "";
StringBuilder sb;
// Change this to the DataSource FilePath
StreamWriter sw = new StreamWriter("C:\\Users\\NAME\\Desktop\\Test2.txt");
string fileHeaderTxt = "memno!name!address1!address2!city!state!zip!old_addr1!old_addr2!old_city!old_state!old_zip!sys!fuldate!sex!lname!sal!address3";
sb = new StringBuilder();
sb.Append(fileHeaderTxt);
sw.WriteLine(sb.ToString());
sb.Clear();
if (lvData.Items.Count > 0)
{
foreach (ListViewItem lvI in lvData.Items)
{
sb = new StringBuilder();
foreach (ListViewItem.ListViewSubItem lvSI in lvI.SubItems)
{
sb.Append(string.Format("{0}!", lvSI.Text));
}
sw.WriteLine(sb.ToString());
}
sw.WriteLine();
}
//sb.Clear();
sw.Close();
MessageBox.Show("Complete");
if (rbPrint.Checked)
{
Print(docLoc, docSource);
}
if (rbCommit.Checked)
{
Commit_NetFYI();
}
}
catch (Exception ex)
{
MessageBox.Show("Source:\t" + ex.Source + "\nMessage: \t" + ex.Message + "\nData:\t" + ex.Data);
}
finally
{
//
}
}
Я стучал в го за последние пару часов, и просто не может показаться, что это получилось. У кого-нибудь есть идеи?
EDIT:
Я изменил свой код, используя решение грамматик, но, кажется, я что-то отсутствует. Каждая итерация цикла записывает строку, содержащую все предыдущие циклические значения, плюс новое значение.
Грубый пример:!!!
Header1 Заголовок 2 Header3 header4
1 2 3 4 5 6 7 8!!!!!!!!!!
1! 2! 3! 4! 5! 6! 7! 8! 9! 10! 11! 12
1! 2! 3! 4! 5! 6! 7! 8! 9! 10 ! 11! 12! 13! 14! 15! 16 и т. Д.
Вот мой текущий код:
private void btnMerge_Click(object sender, EventArgs e)
{
try
{
string docLoc = "";
string docSource = "";
StringBuilder sb;
// Change this to the DataSource FilePath
StreamWriter sw = new StreamWriter("C:\\Users\\NAME\\Desktop\\Test2.txt");
string fileHeaderTxt = "memno!name!address1!address2!city!state!zip!old_addr1!old_addr2!old_city!old_state!old_zip!sys!fuldate!sex!lname!sal!address3";
sb = new StringBuilder();
sb.Append(fileHeaderTxt);
sw.WriteLine(sb.ToString());
sb.Clear();
if (lvData.Items.Count > 0)
{
foreach (ListViewItem lvI in lvData.Items)
{
var indices = new int[] { 0, 1, 2, 3, 12, 13, 16, 17 };
foreach (int i in indices)
{
sb.Append(string.Format("{0}!", lvI.SubItems[i].Text));
}
sw.WriteLine(sb.ToString());
sb.Clear();
}
sw.WriteLine();
}
}
}
EDIT2:
Понял, не убирая мой объект StringBuilder каждый раз после через мой первый цикл. Отредактированный код выше, чтобы отразить рабочий код.
Спасибо Грамматику! :) После использования вашего примера у меня возникла проблема с записью всех предыдущих значений сумм циклов + новое значение, но я понял, что понял. Забыл очистить свой объект stringBuilder после завершения каждой итерации в первом цикле: P –