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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2014, 19:10   #1
Matwei
Пользователь
 
Регистрация: 13.09.2014
Сообщений: 12
По умолчанию C#. Загрузка в DataGridView определённой строки из txt-файла.

Здравствуйте.
Есть:
Программа в C# (Windows Forms).
Компонент (на форме) DataGridView.
Две кнопки: Загрузить и сохранить.
Вот коды для каждой из кнопок:
Код:
// Сохранение данных
 System.IO.Stream myStream;	
		 SaveFileDialog saveTags = new SaveFileDialog();
         saveTags.Filter = "All file (*.*) | *.*| Text file |*.txt";
         saveTags.FilterIndex = 2;
 
         if (saveTags.ShowDialog() == DialogResult.OK)
        
         {
            if ((myStream = saveTags.OpenFile())!=null)
             {
                StreamWriter myWriter = new StreamWriter(myStream, System.Text.Encoding.Default);                
                   try
                   {
                       for (int i = 0; i < dataGridView1.RowCount - 1; i++)
                       {                        
                           for (int j = 0; j < dataGridView1.ColumnCount; j++)
                           {
                               myWriter.Write(dataGridView1.Rows[i].Cells[j].Value.ToString());
                               if ((dataGridView1.ColumnCount - j) != 1) myWriter.Write(":");
                           }
 
                           if (((dataGridView1.RowCount - 1) -i-1)!=0) myWriter.WriteLine();
                       }
                   }
                   catch (Exception ex)
                   {
                       MessageBox.Show(ex.Message);
                   }
                   finally
                   {
                       myWriter.Close();
                   }
             }
           myStream.Close();
         }
Код:
// Загрузка данных
            System.IO.Stream myStr = null;
            OpenFileDialog OpenTags = new OpenFileDialog();
            OpenTags.Filter = "All file (*.*) | *.*| Text file |*.txt";
            OpenTags.FilterIndex = 2;
            if (OpenTags.ShowDialog() == DialogResult.OK)
            {
                if ((myStr = OpenTags.OpenFile()) != null)
                {   StreamReader myRead = new StreamReader(myStr, System.Text.Encoding.Default);
                    string[] str;  
                    int num = 0;
                    try
                    {
                        
                        string[] str1 = myRead.ReadToEnd().Split('\n');
                        num = str1.Count();
                        dataGridView1.RowCount = num+1;
                        for (int i = 0; i < num; i++)
                        {
                            {
 
                                str = str1[i].Split(':');
                                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                                {
                                    try
                                    {
                                        dataGridView1.Rows[i].Cells[j].Value = str[j];
                                    }
                                   
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.Message);
                                    }
                                }
                            }
                        }
                    }
                    
                  catch (Exception ex)
                  {
                      MessageBox.Show(ex.Message);
                  }
                }
            }
Код для загрузки загружает весь текстовый файл. Как сделать, чтобы он загружал определённую строку, в которой встречается, например "1111 11" ?
Matwei вне форума Ответить с цитированием
Старый 13.09.2014, 22:20   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Код:
...
for (int i = 0; i < num; i++)
{
    {
        if (!str1[i].Contains("111111"))
            Continue;
        str = str1[i].Split(':');
...
Допустим, так.
phomm вне форума Ответить с цитированием
Старый 14.09.2014, 10:52   #3
Matwei
Пользователь
 
Регистрация: 13.09.2014
Сообщений: 12
По умолчанию

Спасибо, работает. Вчера пол дня думал как это сделать))
Ещё один вопрос:
У меня в файле шесть строк, теперь вывелась правильная строка, и 5 пустых строк. Можно ли их как-то удалить ?
Matwei вне форума Ответить с цитированием
Старый 14.09.2014, 12:40   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Код:
string[] str1 = myRead.ReadToEnd().Split('\n');
var rows = str1.Select(s => s.Contains("111111"));
dataGridView1.RowCount = rows.Count();
foreach (string s in rows)
... // вместо str1[i] использовать s, num не использовать вообще
Что-то такое. Писал прямо тут.
phomm вне форума Ответить с цитированием
Старый 14.09.2014, 13:27   #5
Matwei
Пользователь
 
Регистрация: 13.09.2014
Сообщений: 12
По умолчанию

А как не использовать num ? Он в цикле for используется...
Так не правильно ?
Компилятор на строке foreach пишет: Преобразование типа "bool" в "string" невозможно.
Код:
    string[] str1 = myRead.ReadToEnd().Split('\n');
                        var rows = str1.Select(s => s.Contains(textBox1.Text));
                        num = str1.Count();
                        dataGridView1.RowCount = rows.Count();
                        foreach (string s in rows)
                        for (int i = 0; i < num; i++)
                        {
                            {
                        		if (!s.Contains(textBox1.Text))
                        			continue;
                                str = s.Split(':');
                                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                                {
                                    try
                                    {
                                        dataGridView1.Rows[i].Cells[j].Value = str[j];
                                    }
                                   
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.Message);
                                    }
                                }
                            }
                        }
Matwei вне форума Ответить с цитированием
Старый 15.09.2014, 08:28   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Код:
for (int i = 0; i < num; i++)
убрать эту строку вообще, оставить цикл форич.
Я там напутал, не Select а Where надо.
При этой операции не понадобится и
Код:
if (!s.Contains(textBox1.Text))
    continue;
А вообще, если Вам сложны решения, что я предлагаю, то лучше вручную фильтрацию напишите циклом, создать массив, хотя лучше список, т.к. он позволяет добавлять элементы, и если запись в строке соответствует условию, добавить в список, тогда сами будете понимать и не путаться.

Последний раз редактировалось phomm; 15.09.2014 в 08:30.
phomm вне форума Ответить с цитированием
Старый 15.09.2014, 11:07   #7
Matwei
Пользователь
 
Регистрация: 13.09.2014
Сообщений: 12
По умолчанию

Да, надо будет по-другому сделать, самому, когда списки изучу :-)
А всё-таки, как "допилить" этот код ?
Теперь вместо for - foreach
Локальной переменной i нет, что исправить теперь в этой строке:
dataGridView1.Rows[i].Cells[j].Value = str[j]; ?
Код:
     string[] str1 = myRead.ReadToEnd().Split('\n');
                       var rows = str1.Where(s => s.Contains(textBox1.Text));
                       dataGridView1.RowCount = rows.Count();
                       foreach (string s in rows)                       
                        {
                                str = s.Split(':');
                                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                                {
                                    try
                                    {
                                    	dataGridView1.Rows[i].Cells[j].Value = str[j];
                                    }
                                   
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.Message);
                                    }
                                }
                        }
                        
                    }
                    
                  catch (Exception ex)
                  {
                      MessageBox.Show(ex.Message);
                  }
Matwei вне форума Ответить с цитированием
Старый 15.09.2014, 20:47   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Коли нет локальной переменной I - надо её сделать, коли без неё грид не адресовать.
Перед циклом int i = 0; внутри цикла в самом конце i++; и всё.
Можно и через for сделать, тоже несложно, всё от Вас зависит, приложите уже усилия хоть какие-нибудь. Я ведь не даю код который волшебным образом будет решать Вашу задачу, я только показываю возможный вариант решения частного маленького вопроса, который надо обдумать, испробовать и применять уже адаптированную реализацию под вашу задачу.
phomm вне форума Ответить с цитированием
Старый 15.09.2014, 21:26   #9
Matwei
Пользователь
 
Регистрация: 13.09.2014
Сообщений: 12
По умолчанию

Всё получилось, спасибо.
Matwei вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка txt файла в Memo FleXik Общие вопросы Delphi 3 14.12.2012 16:48
Открытие вложенного *.txt файла в DataGridView Ese C# (си шарп) 0 16.12.2011 22:20
вывод последней строки из TXT файла vlad.md PHP 4 01.12.2011 06:08
чтение и отображение из ".txt" файла в dataGridView Leva_89 C# (си шарп) 0 23.03.2011 23:23
Загрузка данных из файла *.txt в TextBox pol1nkaOs Общие вопросы .NET 2 21.03.2010 09:00