Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > dataGridView сортировка


Автор: rthsobakas 23.9.2010, 14:20
кто-нибудь в курсе как сделать сортировку(настроить вернее) по числам. То есть вот вы скинули грид  на форму ,заполнили его и в 1 колонке у вас  числа от 1 до 1000 например . Но он отсортирует не верно, так как он по символам сортирует строк.

Автор: CYBERDREAM 23.9.2010, 14:35
Column1.ValueType = typeof (Int32);

ну и значение тоже должны быть числовыми

Автор: rthsobakas 23.9.2010, 14:52
я как бы не программно делаю таблицу, я программно её заполняю только и очищаю. А все остальное делаю  в настройках грида.  

Это куда писать в  форм_лоад?
Код

Column1.ValueType = typeof (Int32);

ничего не измениться. 

Автор: CYBERDREAM 23.9.2010, 14:55
http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/72f8ba5a-0a93-4d2a-b054-a75e919f1b3d

тут подробно сие дело описывают

Автор: A5uKa 23.9.2010, 14:56
ну там есть метод конечно ...
Код

    private dataGridView1_SortCompare (_ : object,  e : System.Windows.Forms.DataGridViewSortCompareEventArgs) : void
    {
        e.SortResult = 
            if (Convert.ToInt32(e.CellValue1) > Convert.ToInt32(e.CellValue2)) 0
            else 1;
        e.Handled = true;

но это в одну сторону  smile  и плохо пахнет.

Автор: rthsobakas 23.9.2010, 15:04
A5uKa,  совсем плохо как-то. 
хмм... подскажите хоть как в гугле правильно сформулировать тогда? 


Смысл в том что как бы надо чтобы строка ,которая добавляется должна становиться первой ,смещая остальные вниз. 

Автор: A5uKa 23.9.2010, 15:06
Цитата(rthsobakas @ 23.9.2010,  15:04)
Смысл в том что как бы надо чтобы строка ,которая добавляется должна становиться первой ,смещая остальные вниз.

Так можно обработать добавление.

Автор: CYBERDREAM 23.9.2010, 15:08
если датагрид биндится к таблице, то в таблицу вставляй новую запись в начало.

http://www.google.ru/search?client=opera&rls=ru&q=DataGridView+sort+numeric&sourceid=opera&ie=utf-8&oe=utf-8

Автор: rthsobakas 23.9.2010, 15:09
добавление выглядит так
Код

dgvDump.Rows.Add(d,f,g);

и оно вставляет строку в самый конец.

Добавлено через 1 минуту и 41 секунду
Цитата

если датагрид биндится к таблице, то в таблицу вставляй новую запись в начало.

он биндится к XMl  smile 


Автор: CYBERDREAM 23.9.2010, 15:12
опля  smile 
Код

dataGridView1.Rows.Insert(0,d,f,g);

Автор: A5uKa 23.9.2010, 15:13
А вариант работать с XML и Grid через DataSource - неа ?

Автор: CYBERDREAM 23.9.2010, 15:14
не кошерно это)  smile 

Автор: rthsobakas 23.9.2010, 15:18
Цитата

dataGridView1.Rows.Insert(0,d,f,g);


хмм спасибо, возьму на заметку.

Цитата

А вариант работать с XML и Grid через DataSource - неа ?

последнего нет в экспресс версии. Я как бы  бесплатку использую  smile 

Автор: SergeyN7 22.7.2011, 21:54
Можно реализовать заполнение нулями начала строк ячеек до определенной длины строки, затем сортировать, а потом снова удалить нули:

//Добавляем нули в столбец, по которому надо сортировать

            string str2;
            for (int kt1 = 0; kt1 < (dataGridView1.RowCount - 1); kt1++)
            {
                if (dataGridView1.Rows[kt1].Cells[2].Value != null)
                {
                    str2 = dataGridView1.Rows[kt1].Cells[2].Value.ToString();
                    while (str2.Length != 5)
                    {
                        str2 = str2.Insert(0, "0");
                    }
                    dataGridView1.Rows[kt1].Cells[2].Value = str2;
                }
            }

//Сортируем

this.dataGridView1.Sort(dataGridView1.Columns["Column3"], ListSortDirection.Descending);

//Удаляем нули в столбце

            string str2;
           for (int kt1 = 0; kt1 < (dataGridView1.RowCount - 1); kt1++)
           {
               if (dataGridView1.Rows[kt1].Cells[2].Value != null)
               {
                   str2 = dataGridView1.Rows[kt1].Cells[2].Value.ToString();
                   while (str2.Substring(0, 1) == "0")
                   {
                       str2 = str2.Remove(0, 1);
                   }
                   dataGridView1.Rows[kt1].Cells[2].Value = str2;
               }
           }

В итоге числа корректно будут отсортированы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)