chaitanya556 Ответов: 2

Практическое руководство дата сортировки не работает


Привет,
У меня есть datagirdiew с одним столбцом даты. в котором, когда я сортирую столбец даты в порядке возрастания, формат даты становится таким, как показано ниже:
27/01/2015
27/01/2016
27/01/2016
27/01/2017
27/01/2018
27/01/2018
27/01/2018
27/02/2018
27/02/2018
27/03/2016
27/04/2015
27/04/2016

смотрите последние 3 даты, здесь он сортировался с датой и месяцем, но не годом.
я хочу его как
27/01/2015
27/04/2015
27/01/2016
27/01/2016
27/03/2016
27/04/2016
27/01/2017
27/01/2018
27/01/2018
27/01/2018
27/02/2018
27/02/2018


Что я уже пробовал:

if (Rb_Date.Checked == true)
            {
                dgv_summary.Columns["Date"].ValueType = typeof(DateTime);
                this.dgv_summary.Sort(this.dgv_summary.Columns["Date"], ListSortDirection.Ascending);
            }


Может ли кто-нибудь предложить код для сортировки столбца datagridview date с помощью DATE/MONTH/YEAR..

заранее спасибо.

2 Ответов

Рейтинг:
1

debasish mishra

dgv_summary.Columns["Date"].DefaultCellStyle.Format = "dd/MM/yyyy";

Попробуйте этот блок кода перед сортировкой строки кода.


[no name]

Дайте мне знать, почему вы голосуете против?

Рейтинг:
0

Karthik_Mahalingam

попробуй вот так

private void Form1_Load(object sender, EventArgs e)
       {
           DataTable dt = new DataTable();
           dt.Columns.Add("Date" );
           dt.Columns.Add("DateObjectHide",typeof(DateTime));
           dt.Rows.Add("27/01/2015");
           dt.Rows.Add("27/01/2016");
           dt.Rows.Add("27/01/2016");
           dt.Rows.Add("27/01/2017");
           dt.Rows.Add("27/01/2018");
           dt.Rows.Add("27/01/2018");
           dt.Rows.Add("27/01/2018");
           dt.Rows.Add("27/02/2018");
           dt.Rows.Add("27/02/2018");
           dt.Rows.Add("27/03/2016");
           dt.Rows.Add("27/04/2015");
           dt.Rows.Add("27/04/2016");
           dataGridView1.DataSource = dt;
           dt.AsEnumerable().ToList().ForEach(k => k["DateObjectHide"] = DateTime.ParseExact(k["Date"].ToString(), "dd/MM/yyyy", CultureInfo.CurrentCulture));
           dataGridView1.Columns["DateObjectHide"].Visible = false;

       }



       bool flag = false;
       private void buttonSort_Click(object sender, EventArgs e)
       {
           if(flag)
               this.dataGridView1.Sort(this.dataGridView1.Columns["DateObjectHide"], ListSortDirection.Ascending);
           else
               this.dataGridView1.Sort(this.dataGridView1.Columns["DateObjectHide"], ListSortDirection.Descending);
           flag = !flag;

       }


chaitanya556

Привет, это не сработало. на самом деле я связываю данные из базы данных.

Karthik_Mahalingam

однако из базы данных вы будете получать datatable rite?
таким образом, вы можете применить приведенную выше логику.

chaitanya556

на самом деле я привязываюсь вот так:
Скрыть   скопировать код

string sqlex="select * from Table";dap=new SqlDataAdapter(sqlex,connectionString);table=new DataTable();table.Columns.Add(new DataColumn(" ",typeof(bool)));dap.fill(table);datagridview1.DataSource=table;

Karthik_Mahalingam

вы должны добавить столбец после привязки данных к таблице.
после метода "заливки".

Karthik_Mahalingam

string sqlex="select * from Table";
dap=new SqlDataAdapter(sqlex,connectionString);
table=new DataTable();
table.Columns.Add(new DataColumn(" ",typeof(bool)));
dap.fill(table);
 table.Columns.Add("DateObjectHide",typeof(DateTime));
datagridview1.DataSource=table;
  table.AsEnumerable().ToList().ForEach(k => k["DateObjectHide"] = DateTime.ParseExact(k["Date"].ToString(), "dd/MM/yyyy", CultureInfo.CurrentCulture));
           dataGridView1.Columns["DateObjectHide"].Visible = false;

chaitanya556

FormatException был необработан

 k["DateObjectHide"] = DateTime.ParseExact(k["Date"].ToString(), "dd/MM/yyyy", CultureInfo.CurrentCulture));

"Строка не была распознана как допустимая Дата-Время."

Karthik_Mahalingam

есть ли какой-нибудь нуль в столбце даты ?

chaitanya556

Нет... формат даты будет выглядеть примерно так: "ДД/ММ/гггг"

Karthik_Mahalingam

попробовать это

 table.AsEnumerable().ToList().ForEach(k => {
                DateTime temp ;
                k["DateObjectHide"] = null;
                if( DateTime.TryParseExact(k["Date"].ToString(), "dd/MM/yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out temp){
                     k["DateObjectHide"] = temp;
                }
            }
            );

chaitanya556

 k["DateObjectHide"]=null

это получение ArgumentException был необработан
Не могу установить DateObjectHide колонка', чтобы быть null. Пожалуйста, используйте вместо этого DBNull.

я использовал DBNull вместо null.
но он получил ошибку
-Система.Значение dbnull' - это "тип", но используется как переменная'

Karthik_Mahalingam

используйте DBNull.Ценность;

chaitanya556

у меня есть пустой столбец "DateObjectHide" в этом datatable

Karthik_Mahalingam

Каково значение в столбце дата?

chaitanya556

27/01/2018
как это...

Karthik_Mahalingam

ладно
попробуйте мой код в отдельной форме и проверьте функциональность.