Рейтинг:
5
Karthik_Mahalingam
использовать значение datetime.Метод ParseExact [^]
dt = dt.AsEnumerable().OrderByDescending(r => (DateTime.ParseExact(r["DateColumnName"] + "", "mm/dd/yyyy", CultureInfo.InvariantCulture))).CopyToDataTable();
если вы беспокоитесь о
null
или другие строковые данные тогда
значение datetime.Метод Метод Tryparseexact [
^] было бы лучшим выбором
DataTable dt = new DataTable();
dt.Columns.Add("DateColumnName");
dt.Rows.Add("11/14/2017");
dt.Rows.Add("11/13/2017");
dt.Rows.Add("11/16/2017");
dt.Columns.Add("NewColumnTemp");
dt.AsEnumerable().ToList().ForEach(row =>
{
string date = row["DateColumnName"] + "";
DateTime dateTemp;
DateTime? dateTempNull = null;
bool isValid = DateTime.TryParseExact(date, "mm/dd/yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out dateTemp);
row["NewColumnTemp"] = isValid ? dateTemp : dateTempNull;
});
DataView dv = dt.DefaultView;
dv.Sort = "NewColumnTemp desc";
dt = dv.ToTable();
dt.Columns.Remove("NewColumnTemp");
IamWsk
Спасибо @Картик Бангалор. Будет ли он обрабатывать нулевые значения?Столбец также имеет некоторые нулевые или пустые значения.
Karthik_Mahalingam
обновили решение
IamWsk
Хорошо, позвольте мне применить решение.
IamWsk
Теперь он сортируется вот так
NewColumnTemp
31-01-2015
31-01-2014
30-01-2015
Karthik_Mahalingam
ММ/ДД/гггг
IamWsk
это происходит независимо от года, если вы видите.
Это должно быть как:
31-01-2015
30-01-2015
31-01-2014
Karthik_Mahalingam
Вы изменили формат на ДД-ММ-гггг ?
Karthik_Mahalingam
это прекрасно работает
DataTable dt = new DataTable();
dt.Columns.Add("DateColumnName");
dt.Rows.Add("31-01-2015");
dt.Rows.Add("31-01-2014");
dt.Rows.Add("30-01-2015");
dt.Columns.Add("NewColumnTemp");
dt.AsEnumerable().ToList().ForEach(row =>
{
string date = row["DateColumnName"] + "";
DateTime dateTemp;
DateTime? dateTempNull = null;
bool isValid = DateTime.TryParseExact(date, "mm-dd-yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out dateTemp);
row["NewColumnTemp"] = isValid ? dateTemp : dateTempNull;
});
DataView dv = dt.DefaultView;
dv.Sort = "NewColumnTemp desc";
dt = dv.ToTable();
dt.Columns.Remove("NewColumnTemp");
/*
* 31-01-2015
* 30-01-2015
* 31-01-2014
*/
IamWsk
Пожалуйста, добавьте строки данных в нижеприведенном формате и попробуйте, это не сработает.
ДТ.Строк.Добавить("1/31/2015");
ДТ.Строк.Добавить("1/31/2014");
ДТ.Строк.Добавить("1/30/2015");
Как ваши данные в формате ММ/ДД/гггг, так и измените формат тоже.
Karthik_Mahalingam
DataTable dt = new DataTable();
dt.Columns.Add("DateColumnName");
dt.Rows.Add("1/31/2015");
dt.Rows.Add("1/31/2014");
dt.Rows.Add("1/30/2015");
dt.Columns.Add("NewColumnTemp",typeof(DateTime));
dt.AsEnumerable().ToList().ForEach(row =>
{
string date = row["DateColumnName"] + "";
DateTime dateTemp;
DateTime? dateTempNull = null;
bool isValid = DateTime.TryParseExact(date, new string[] { "M/dd/yyyy", "MM/dd/yyyy", "M/d/yyyy", "MM/d/yyyy" }, CultureInfo.CurrentCulture, DateTimeStyles.None, out dateTemp);
row["NewColumnTemp"] = isValid ? dateTemp : dateTempNull;
});
DataView dv = dt.DefaultView;
dv.Sort = "NewColumnTemp desc";
dt = dv.ToTable();
dt.Columns.Remove("NewColumnTemp");
IamWsk
Он все еще делал строковый столбец, поэтому я сделал его Datetime, и наконец он работает.
ДТ.колонны.Добавить("DateColumnName",typeof(DateTime));
объект dateTempNull = DBNull.Ценность;
Спасибо, Картик, пожалуйста, дай звезды на мой вопрос.
Karthik_Mahalingam
крутой