• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 6347
  • Last Modified:

C# DataGridView export to a text file

Hi im just brand new here and already im highly impressed with the site.

Just a simple question (hopefully), i am trying to do something exactly the same as shown here http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_23263374.html?sfQueryTermInfo=1+c+datagridview+export

But my DataGridView is made up of all text. So how would i modify this function to work accordingly?

And then how would i call it?   ExportGridData(List<string>);     ???


I have included the code snipits used to populate the datagridview if that heklps explain what i am trying to do.

Basically i want to export the data once modified to comma separated file.
private void ImportCSV()
{
    List<string[]> testParse =
          parseCSV(txtInputPath.Text);
    
    DataTable newTable = new DataTable();
            foreach (string column in testParse[0])
            {
                newTable.Columns.Add();
            }
  
    foreach (string[] row in testParse)
    {
        newTable.Rows.Add(row);
    }
        DataGrid.DataSource = newTable;
}
 
public List<string[]> parseCSV(string path)
        {
            List<string[]> parsedData = new List<string[]>();
            using (StreamReader readFile = new StreamReader(path))
            {
                string line;
                string[] row;
 
                while ((line = readFile.ReadLine()) != null)
                {
                    row = line.Split(',');
                    parsedData.Add(row);
                }
            }
 
            return parsedData;
 
        }

Open in new window

0
A_Kardas
Asked:
A_Kardas
1 Solution
 
Priest04Commented:
The code should work fine with your datagridview. What confuses you is the parameter List<int>. As I understood at a quick view at code, its an array of RowIndeces that you want to avoid exporting to txt file. for example, if your datagridview contains 10 rows, and you want to avoid exporting rows with index 2, 4 and 7, then you would do this

List<int> list = new List<int>();
list.Add(2);
list.Add(4);
list.Add(7);

// and then call the function
ExportGridData(list);

What I dont like about this function is that it is hardcoded to a particular datagridview name. DataGRidView should be passed as a parameter to this function, so I would rewrite it in the bellow way

to call the function
ExportGridData(MyDataGridView, null, @"C:\test.txt");
private void ExportGridData(DataGridView dgv, List<int> omitIndices, string filePath)
{
    StreamWriter writer = new StreamWriter(filePath);
 
    if (dgv.Rows.Count > 0)
    {
        foreach (DataGridViewColumn col in dgv.Columns)
        {
            if (col.Index == dgv.Columns.Count - 1)
            {
                writer.WriteLine(col.HeaderText);
            }
            else
            {
                writer.Write(string.Concat(col.HeaderText, ","));
            }
        }
 
        foreach (DataGridViewRow row in dgv.Rows)
        {
            if (omitIndices == null || !omitIndices.Contains(row.Index))
            {
                foreach (DataGridViewCell cell in row.Cells)
                {
                    if (cell.OwningColumn.Index == dgv.Columns.Count - 1)
                    {
                        if (cell.Value != null)
                            writer.WriteLine(cell.Value.ToString());
                        else
                            writer.WriteLine("");
                    }
                    else
                    {
                        if (cell.Value != null)
                            writer.Write(string.Concat(cell.Value.ToString(), ","));
                        else
                            writer.Write(string.Concat("", ","));
                    }
                }
            }
        }
    }
 
    writer.Close();
}

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Tackle projects and never again get stuck behind a technical roadblock.
Join Now