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;
}
Sorting Columns in DataTable Finding Percentile points and Standard deviation [closed]
题
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;
}
解决方案 2
其他提示
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.
不隶属于 StackOverflow