Question

I am confused on DataTable.DefaultView.Sort. Here is the segment of the code I want to use it in.

actionLogDT.DefaultView.Sort = "StartDate";

foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
  // code here
}

The samples I have seen don't use the foreach loop and thus is confusing me on how to process this. It isn't sorting as I thought it should be.

I see that .DefaultView returns a view, and .Table gives a compile error.

Was it helpful?

Solution 3

I had to take a slightly different approach. This post was the closest I could find to get my code to work. Here is the working result:

actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;

foreach (DataRowView logRow in dv) { . . . }

From there I just have to cast the value back into it's proper type.

(string)logRow["Status"].ToString()

OTHER TIPS

actionLogDT.DefaultView.Sort = "StartDate";

actionLogDT = actionLogDT.DefaultView.ToTable();

Sorting the view won't change the sort order of the data in the table, just the order in the view. It should work if you do your foreach on the view instead, casting the row from the DataRowView back to your strongly typed row.

foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
    CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
    // code here
}
foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }

Additionally, Since it seemed like you wanted to loop through records, you can just loop through the dataRowView objects in the DefaultView.

foreach (DataRowView drv in table.DefaultView)
{
    string strValue = drv["ColumnName"].ToString();
    // its also worth mentioning that a DataRowView has a Row
    strValue = drv.Row["ColumnName"].ToString();
}

Please try this:

actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";

Just curious: Why are you using the DataRowView?

i.e.

foreach (DataRow row in actionLogDT.Rows)
{
  Console.WriteLine(row["Status"]);
}

If you need a datatable back then you can do something like:

var dv = actionLogDT.DefaultView;
dv.Sort = "StartDate";

actionLogDT = dv.ToTable();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top