Как экспортировать линию DataGridView в файл txt?

Как я могу выбирать линию DataGridView и экспортировать в файл .txt, у которого было имя колонны DataGridView?

Пока у меня есть кнопка, чтобы экспортировать совсем данные gridview к .txt здесь эта код:

private void button2_Click(object sender, EventArgs e)
        {   
            if (!Directory.Exists(@"D:\Carpeta"))
            {
                Directory.CreateDirectory(@"D:\Carpeta");
            }

            TextWriter sw = new StreamWriter(@"D:\Carpeta\Archivo.txt");
            int rowcount = TablaDatos.Rows.Count;
            for(int i = 0; i < rowcount -1; i++)
            {
                sw.WriteLine(TablaDatos.Rows[i].Cells[0].Value.ToString()+"\t"
                             +TablaDatos.Rows[i].Cells[1].Value.ToString()+"\t"
                              +TablaDatos.Rows[i].Cells[2].Value.ToString()+"\t"
                               +TablaDatos.Rows[i].Cells[3].Value.ToString()+"\t");
            }
            sw.Close();
            MessageBox.Show("Datos Exportados correctamente");    
        }

Я нуждаюсь в том, чтобы экспортировать линию из-за линии создавая txt из-за каждой линии и не всего DataGridView

introducir la descripción de la imagen aquí

9
задан 16.10.2016, 18:31
3 ответа

Что recomendarГ - в es, который ты не экспортировал с контроля но ты перевернешь данные в класс, чтобы потом использовать одну librerГ - в как тебя был

filehelpers

, Тогда ты верил в класс

[DelimitedRecord("\t")]
public class Item
{

    public string Prop1 {get;set;}
    public string Prop2 {get;set;}
    public string Prop3 {get;set;}
}

, и ты экспортируешь переворачивая данные в этот класс

private void button2_Click(object sender, EventArgs e)
{   
    List<Item> Items = new List<Item>();

    foreach(var row in DataGridView1.Rows)
    {
        Item _item = new Item()
        {
            Prop1 = row.Cells[0].Value.ToString(),
            Prop2 = row.Cells[1].Value.ToString(),
            Prop3 = row.Cells[2].Value.ToString(),
        };
        Items.Add(_item);
    }

    var engine = new FileHelperEngine<Item>();
    engine.WriteFile(@"D:\Carpeta\Archivo.txt", Items);

    MessageBox.Show("Datos Exportados correctamente");    
}

ты ощутишься, что класс определяет признак [DelimitedRecord("\t")] показывая каков, это разделитель

2
ответ дан 24.11.2019, 14:49
  • 1
    Привет @AbregoW, если он или любой другой ответ решил Вашу проблему, пожалуйста считай принимать clicando отметка check (в форме V под puntuaci и # 243; n ответа). Это показывает в сообщество, что ты нашел soluci и # 243; n и шага вы давать и # 225; reputaci и # 243; n в оба (в t и # 237; и тот, кто ответил). Конечно, у тебя нет никакого obligaci и # 243; n делания этого. – rnrneverdies 01.03.2016, 02:12

В действительности чтобы экспортировать каждую линию в различный файл у тебя нет больше, что помещать создание и завершение TextWriter внутри цикла for, распределяя ему различное имя в каждом повторении в файл:

    private void button2_Click(object sender, EventArgs e)
    {
        if (!Directory.Exists(@"D:\Carpeta"))
        {
            Directory.CreateDirectory(@"D:\Carpeta");
        }

        int rowcount = TablaDatos.Rows.Count;
        for (int i = 0; i < rowcount - 1; i++)
        {
            TextWriter sw = new StreamWriter($@"D:\Carpeta\Archivo_{i}.txt");
            sw.WriteLine(TablaDatos.Rows[i].Cells[0].Value.ToString() + "\t"
                         + TablaDatos.Rows[i].Cells[1].Value.ToString() + "\t"
                          + TablaDatos.Rows[i].Cells[2].Value.ToString() + "\t"
                           + TablaDatos.Rows[i].Cells[3].Value.ToString() + "\t");
            sw.Close();
        }
        MessageBox.Show(@"Datos Exportados correctamente");
    }
0
ответ дан 24.11.2019, 14:49

Я не вижу, что кто-либо estГ© отвечая прямо на твой вопрос. AГ±ade новый botГіn в Form и сноп, немного сходный с этим:

private void btnExportSelectedRow_Click(object sender, EventArgs e)
{
    // Nos aseguramos de que haya al menos un row seleccionado
    if (TablaDatos.SelectedRows.Count > 0)
    {
        DataGridViewRow selectedRow = TablaDatos.SelectedRows[0];                

        // Obtenemos el nombre del fichero en función del número de fila seleccionado       
        string fileName = "Archivo" + selectedRow.Index + ".txt";

        using (TextWriter writer = new StreamWriter(Path.Combine(@"D:\Carpeta", fileName)))
        {
            // Unimos todos los valores del row que no sean nulos en un string
            string output = string.Join("\t", selectedRow.Cells.Cast<DataGridViewCell>()
                                                               .Where(c => c.Value != null)
                                                               .Select(c => c.Value.ToString())
                                                               .ToArray());
            writer.WriteLine(output);
        }
    }
}

Имей в виду, что для того, чтобы предыдущий пример функционировал, должен быть выбранным row и не sГіlo ячейка. Если ты хочешь получить ее informaciГіn от линии начиная с отборной ячейки, ты можешь делать следующее:

int rowIndex = TablaDatos.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = TablaDatos.Rows[rowIndex];
0
ответ дан 24.11.2019, 14:49