Question

table3 shown below is built by comparing two table1 & table2 I want to sort this table3(there are -ve values in the table) private static DataTable GetDataTabletFromCSVFile1(string csv_file_path1) { DataTable table2 = new DataTable("Real");

        using (TextFieldParser csvReader1 = new TextFieldParser(csv_file_path1))
        {
            csvReader1.SetDelimiters(new string[] { "," });
            csvReader1.HasFieldsEnclosedInQuotes = true;
            string[] colFields = csvReader1.ReadFields();
            foreach (string column in colFields)
            {
                DataColumn datecolumn2 = new DataColumn(column);
                datecolumn2.AllowDBNull = true;
                table2.Columns.Add(datecolumn2);
            }
            while (!csvReader1.EndOfData)
            {
                string[] fieldData1 = csvReader1.ReadFields();
                //Making empty value as null
                for (int i = 0; i < fieldData1.Length; i++)
                {
                    if (fieldData1[i] == "")
                    {
                        fieldData1[i] = null;
                    }
                }
                table2.Rows.Add(fieldData1);

            }

        }
        return table2;
    }
Was it helpful?

Solution 2

private static DataTable CompareTwoDataTable(DataTable table1, DataTable table2)
{
    DataTable table3 = new DataTable();
    DataRow dr = null;
    string filterExp = string.Empty;
    for (int i = 0; i < table1.Rows.Count; i++)
    {

        string col = table1.Rows[i]["Par Name"].ToString();
        if (table2.Columns.Contains(col))
        {
            if (!table3.Columns.Contains(col))
            {
                table3.Columns.Add(col, typeof(double));
                filterExp = filterExp + col + " asc ,";
            }

            for (int j = 0; j < table2.Rows.Count; j++)
            {
                if (table3.Rows.Count != table2.Rows.Count)
                {
                    dr = table3.NewRow();
                    table3.Rows.Add(dr);
                }
                table3.Rows[j][col] = (table2.Rows[j][col]);
            }


        }


    }

    DataTable resultDt = table3.Clone();
    for (int m = 0; m < table3.Columns.Count; m++)
    {
        DataView dv = new DataView(table3);
        dv.Sort = filterExp.Split(',')[m];
        table3 = dv.ToTable();
        for (int i = 0; i < table3.Rows.Count; i++)
        {
            if (resultDt.Rows.Count != table3.Rows.Count)
            {
                resultDt.Rows.Add();
            }
            resultDt.Rows[i][m] = table3.Rows[i][m];
        }

    }
    return resultDt;
}

OTHER TIPS

you can simply use:

DataView dv = new DataView(dt);
dv.Sort = "Diffusion, Program ,ADCI1_N[1],DCI1_P[1],ADCQ2_N[1]";

or if you want to perform on the same datatable

dt.DefaultView.Sort = "Diffusion, Program ,ADCI1_N[1],DCI1_P[1],ADCQ2_N[1]";

if you use Linq you can do it by

var newDataTable = dt.AsEnumerable()
                   .OrderBy(m=> m.Field<decimal>("Diffusion"))
                   .ThenBy(m=> m.Field<decimal>("Program"))
                   .ThenBy(m=> m.Field<decimal>("ADCI1_N[1]"))
                    ............
                   .CopyToDataTable();

Update for your comment

 string str=string.Empty;
 foreach (DataColumn column in dt.Columns)
  {
           //write the logic so that last record doesnt have comma. leaving it to you.
           str= str+ column.ColumnName +",";
   }

put this str as your column names to the sorting.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top