2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191

Cортировка конфликтует с выводом данных из таблицы в ListView

28.11.2016, 09:41. Показов 1940. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private void ShowDB()
        {
            SqlCeEngine engine = new SqlCeEngine("Data Source='base.sdf';");
            SqlCeConnection connection = new SqlCeConnection(engine.LocalConnectionString);
            connection.Open();
            SqlCeCommand command = connection.CreateCommand();
            command.CommandText = "SELECT * FROM contacts ORDER BY name";
            SqlCeDataReader dataReader = command.ExecuteReader();
 
            string st; 
            int itemIndex = 0;
 
            listView1.Items.Clear();
 
            while (dataReader.Read())
            {
                for (int i = 0; i < dataReader.FieldCount; i++)
                {
                    st = dataReader.GetValue(i).ToString();
                    switch (i)
                    {
                        case 0:  
                            listView1.Items.Add(st);
                            break;
                        case 1:  
                            listView1.Items[itemIndex].SubItems.Add(st);
                            //listView1.Items.Add(st);
                            break;
                        case 2: 
                            listView1.Items[itemIndex].SubItems.Add(st);
                            break;
                        case 3:  
                            listView1.Items[itemIndex].SubItems.Add(st);
                            break;
                        case 4: 
                            listView1.Items[itemIndex].SubItems.Add(st);
                            break;
                    };
                }
                itemIndex++;
            }
            connection.Close();
        }
ColumnClick
C#
1
2
3
4
5
private void ColumnClick1(object o, ColumnClickEventArgs e)
        {
           
            this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column);
        }

КЛАСС
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 class ListViewItemComparer : IComparer
    {
        private int col;
        public ListViewItemComparer()
        {
            col = 0;
        }
        public ListViewItemComparer(int column)
        {
            col = column;
        }
        public int Compare(object x, object y)
        {
            return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
        }
    }
сортировка конфликтует с выводам данных из таблицы в listview


При обновлении listview
ShowDB();

Ошибка вот в этой строчке
return String.Compare(((ListViewItem)x).SubItem s[col].Text, ((ListViewItem)y).SubItems[col].Text);

Помогите пожалуйста решить эту проблемму

Добавлено через 15 часов 29 минут
Кто нибудь помогите(((((((((((
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2016, 09:41
Ответы с готовыми решениями:

Cортировка в ListView как в проводнике (папки и файлы)
Если кто не понял, в проводнике папки никогда не перемешиваются с файлами и сортируются особняком, по дате по имени, они все держаться...

Трудности с выводом данных из таблицы
Добрый день,требуется помощь в объяснении следующего вывода: p.s.скриншот таблицы прилагаю 0 приве name приве 1 0 na2 0 2 0 ...

Проблемы с выводом данных из Таблицы
SELECT `Band`.`name` , `Categories`.`name` , `Band`.`picture` , `Band`.`descr` FROM `Categories` LEFT JOIN ...

38
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
29.11.2016, 18:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Lord_J Посмотреть сообщение
Спасибо вам за помощь вы мне очень помогли
Пожалуйста Я сам как-то не додумался добавить стрелку в заголовке, взял это на заметку и перенёс это в один из своих проектов)
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
29.11.2016, 20:16  [ТС]
Rameron, у меня в таблице много столбцов и при нажатие на нужный столбец сортировки таблица обновляется и нужно обратно возвращаться в нужный столбец, можно ли как то сделать так чтобы при нажатие на столбец происходила сортировка но столбец не убегал?
1
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
29.11.2016, 20:43
Цитата Сообщение от Lord_Jesus_ Посмотреть сообщение
как то сделать так чтобы при нажатие на столбец происходила сортировка но столбец не убегал?
Как у вас с английским? Чтобы не перепечатывать код, вот вам ссылка, посмотрите как это делается.
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
29.11.2016, 22:20  [ТС]
СпасибоRameron,
0
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
30.11.2016, 15:53  [ТС]
Rameron
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 const Int32 LVM_FIRST = 0x1000;
        const Int32 LVM_SCROLL = LVM_FIRST + 20;
 
        [DllImport("user32")]
        static extern IntPtr SendMessage(IntPtr Handle, Int32 msg, IntPtr wParam,
        IntPtr lParam);
 
        private void ScrollHorizontal(int pixelsToScroll)
        {
            SendMessage(this.Handle, LVM_SCROLL, (IntPtr)pixelsToScroll,
            IntPtr.Zero);
        }
        public void EnsureVisible(ListViewItem item, int subItemIndex)
        {
            if (item == null || subItemIndex > item.SubItems.Count - 1)
            {
                throw new ArgumentException();
            }
 
            // scroll to the item row.
            item.EnsureVisible();
            System.Drawing.Rectangle bounds = item.SubItems[subItemIndex].Bounds;
 
            // need to set width from columnheader, first subitem includes
            // all subitems.
          
 
            ScrollToRectangle(bounds);
        }
 
      
 
        /// <span class="code-SummaryComment"><summary></span>
        /// Scrolls the listview.
        /// <span class="code-SummaryComment"></summary></span>
        /// <span class="code-SummaryComment"><param name="bounds"></param></span>
        private void ScrollToRectangle(System.Drawing.Rectangle bounds)
        {
            int MARGIN = 0;
            int scrollToLeft = bounds.X + bounds.Width + MARGIN;
            if (scrollToLeft > this.Bounds.Width)
            {
                this.ScrollHorizontal(scrollToLeft - this.Bounds.Width);
            }
            else
            {
                int scrollToRight = bounds.X - MARGIN;
                if (scrollToRight < 0)
                {
                    this.ScrollHorizontal(scrollToRight);
                }
            }
        }
Если вам не сложно проверите пожалуйста правильно ли я прописал код который вы порекомендовали и как вызывать этот метод?

Добавлено через 35 минут
Rameron, Скачал проект исправил ошибки, добавил класс...теперь как применить его?
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
30.11.2016, 16:28
Цитата Сообщение от Lord_J Посмотреть сообщение
теперь как применить его?
После сортировки вызывайте метод класса EnsureVisible, передавая ему нужный ListViewItem и колонку, на которую должно возвращать.
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
30.11.2016, 16:48  [ТС]
Rameron,
а можете на примере показать
0
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
30.11.2016, 18:38  [ТС]
Rameron,
а можете на примере показать

Добавлено через 1 час 47 минут
Rameron, Чтото пробовал не получается,,,опыта маловата)

Добавлено через 2 минуты
Rameron, я скачал этот класс подключил его как отдельный файл а как правильно к нему обртится и как правильно передать ему нужный ListViewItem и колонку, на которую должно возвращать незнаю
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 00:37
Lord_J, посмотрите проект, что я прикрепил.
P.S. Оно то, конечно, работает, но как-то мигает неприятно при сортировке, когда возвращает в предыдущую позицию.
Вложения
Тип файла: zip SortTest.zip (98.4 Кб, 3 просмотров)
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
01.12.2016, 11:40  [ТС]
Rameron, Спасибо буду пробовать,мне не удобно у вас уже спрашивать но если вам не сложно помогите решить следующую проблему, я вроде искал но конкретно найти чтото подходящее не удалось быть может плохо искал...
Проблема следующая,,
Работая с базой данных SQL Server Compact Edition нужно сделать выборку из combobox в texbox
например
есть столбы name pass mail
как сделать чтобы столбец name выводился в combobox а при выборе из combobox столбцы pass и mail выводились в texbox1 и texbox2

combobox скорее всего если я не ошибаюсь нужно будет вывести в цикле
чтото вроде этого
C#
1
2
3
4
5
  while (DR.Read())
            {
                combobox1.Items.Add(DR[0]);
 
            }
а как вывод сделать в textbox незнаю
но это лишь догадки сможете помочь разобраться с этим??
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 11:52
Цитата Сообщение от Lord_Jesus_ Посмотреть сообщение
столбцы pass и mail выводились в texbox1 и texbox2
Lord_Jesus_, если я вас правильно понял:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }
 
        private void frmMain_Load(object sender, EventArgs e)
        {
            fillViewWithRandom();
            fillComboBox();
        }
 
        private void fillViewWithRandom()
        {
            List<char> allowedSymbols = new List<char>();
            for (int i = 48; i <= 57; i++)
                allowedSymbols.Add((char)i);
            for (int i = 65; i <= 90; i++)
                allowedSymbols.Add((char)i);
            Random generator = new Random();
 
            for (int itemIndex = 0; itemIndex < 100; itemIndex++)
            {
                ListViewItem currentListView = new ListViewItem();
                for (int columnIndex = 0; columnIndex < lstView.Columns.Count; columnIndex++)
                {
                    string subItemText = "";
                    for (int charIndex = 0; charIndex < 5; charIndex++)
                        subItemText += allowedSymbols[generator.Next(0, allowedSymbols.Count - 1)];
                    if (columnIndex == 0)
                        currentListView.Text = subItemText;
                    else
                        currentListView.SubItems.Add(subItemText);
                }
                lstView.Items.Add(currentListView);
            }
        }
        private void fillComboBox()
        {
            foreach(ListViewItem item in lstView.Items)
                cmbNames.Items.Add(item.Text);
            cmbNames.SelectedIndex = 0;
        }
 
        private void cmbNames_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtPassword.Text = lstView.Items[cmbNames.SelectedIndex].SubItems[1].Text;
            txtMail.Text = lstView.Items[cmbNames.SelectedIndex].SubItems[2].Text;
        }
    }
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
01.12.2016, 13:20  [ТС]
Rameron, несовсем)

объясню поподробнее
есть база данных на SQL Server Compact Edition,,,мое приложение предстовляет собой некую базу данных функциональность этого приложения добавление изменение удаление данных из базы данных, экспортирование таблице в excel в прочем ничего особенного, отоброжением таблицы является listview, таблица большая, теперь я хочу создать в приложении новое окно для создании спецификации, идея такова:
подключение к базе данных
вывести столбец "наименование" в combobox
при выборе наименования из combobox данное поле выходит в текст боксы

Добавлено через 8 минут
Цитата Сообщение от Rameron Посмотреть сообщение
Lord_J, посмотрите проект, что я прикрепил.
P.S. Оно то, конечно, работает, но как-то мигает неприятно при сортировке, когда возвращает в предыдущую позицию.
проблема была в этом
Code
1
2
      lstView.AutoResizeColumn(columnNumber, ColumnHeaderAutoResizeStyle.ColumnContent);
            lstView.AutoResizeColumn(columnNumber, ColumnHeaderAutoResizeStyle.HeaderSize);
Спасибо большое
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 15:59
Цитата Сообщение от Lord_J Посмотреть сообщение
проблема была в этом
хм, ладно тогда, учту..

Добавлено через 11 минут
Цитата Сообщение от Lord_J Посмотреть сообщение
несовсем)
Опять не понимаю, у вас в ListView выводится таблица из базы данных. Соответственно, получая данные колонки name из ListView в ComboBox, я как-бы получаю данные из базы, аналогично, считывая значения других колонок в ListView по выбранному элементу ComboBox'а, я также получаю сопоставляемые значения колонок pass и mail.
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
01.12.2016, 16:58  [ТС]
Rameron, открывается вторая форма, в ней будет пустой listview подключенный к другой базе данных
а combobox ,будет подключаться к другой базе которая подключена к первой форме

Вопросы:
1 - как подключить combobox к базе и вывести в него столбец
2 - как при выборе из combobox вывести в textboxы остальные поля

вот приблизительно то что я хочу
https://www.youtube.com/watch?v=dwG6eg5UofI

но работая с базой данных SQL Server Compact Edition
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 17:03
Цитата Сообщение от Lord_J Посмотреть сообщение
базой данных SQL Server Compact Edition
Я не работал с этой базой, по этому ничего сказать не могу.
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
01.12.2016, 17:28  [ТС]
Rameron,
А сможете ответить на этот?
есть 5 texbox
Нужно выполнить математическое действие

((пошлина +акциз) * ндс%) +пошлина + акциз + ндс + таможенные сборы
например
пошлина 30%
акциз 20%
ндс 20%
таможенные сборы 0,2%
((30+20)*20%)+30+20+20+0,2=80,2%
Первое действие (пошлина +акциз)
второе действие, полученную суму умножаем ндс%
третье действие, прибовляем+пошлина + акциз + ндс + таможенные сборы

Пробовал так

C#
1
2
3
4
5
6
7
 double a, s, d, f, result;
            double.TryParse(textBox5.Text, out a);
            double.TryParse(textBox10.Text, out s);
            double.TryParse(textBox11.Text, out d);
            double.TryParse(textBox13.Text, out f);
            result = (s + d) * f% + s + d + f + a;
            textBox4.Text = result.ToString("n");
Но чтото не получилось,,,,,

И второй вопрос, куда нужна вписать код чтобы суммировалось textBox4.Text автоматический, если я не ошибаюсь код нужно прописывать в каждый textbox в событие Validated
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 17:31
Цитата Сообщение от Lord_J Посмотреть сообщение
Пробовал так
C#
1
result.ToString("n");
Зачем там n?

Попробуйте проценты выразить в дробном виде, в C# ваша запись может не работать, так как % - это оператор деления по модулю, а не сами проценты.
1
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
01.12.2016, 17:55  [ТС]
Rameron, Чтобы было так, например 20% -> 20,00%

Добавлено через 1 минуту
Цитата Сообщение от Rameron Посмотреть сообщение
Попробуйте проценты выразить в дробном виде
А как это сделать?

Добавлено через 18 минут
Rameron, сделал))


Больное спс все получилось)
0
2 / 2 / 2
Регистрация: 24.04.2016
Сообщений: 191
03.12.2016, 08:06  [ТС]
Rameron,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
            SqlCeEngine engine = new SqlCeEngine(db);
            SqlCeConnection connection = new SqlCeConnection(engine.LocalConnectionString);
            connection.Open();
            SqlCeCommand command = connection.CreateCommand();
            command.CommandText = "SELECT * FROM listing ORDER BY id DESC";
            SqlCeDataReader dataReader = command.ExecuteReader();
 
            string st;
            int itemIndex = 0;
 
            listView1.Items.Clear();
            listView1.CheckBoxes = true;
            
            while (dataReader.Read())
            {
                for (int i = 0; i < dataReader.FieldCount; i++)
                {
                    st = dataReader.GetValue(i).ToString();
                    switch (i)
                    {
                        case 0:  // поле id           
                            listView1.Items.Add(st);
                            break;
                        case 1:  // поле name
                            listView1.Items[itemIndex].SubItems.Add(st);
                            listView1.Items[itemIndex].Checked = false;
                            //listView1.Items.Add(st);
                            break;
                        case 2:  // поле kod
                            listView1.Items[itemIndex].SubItems.Add(st);
                            break;
                        case 3: 
                             listView1.Items[itemIndex].SubItems.Add(st);
                            break;
**************************************** *****
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            
            if (e.IsSelected)
            {
              
                textBoxid.Text = listView1.Items[e.ItemIndex].Text;
 
                for (int i = 1; i < listView1.Items[e.ItemIndex].SubItems.Count; i++)
                {
                    switch (i)
                    {
                        case 1:
                            textBox3.Text = listView1.Items[e.ItemIndex].SubItems[i].Text;
                            break;
                        case 2:
                            textBox7.Text = listView1.Items[e.ItemIndex].SubItems[i].Text;
                            break;
                        case 3:
                            comboBox1.Text = listView1.Items[e.ItemIndex].SubItems[i].Text;
*************************************************
например в таблице есть список данных
этот список номеруется,,,,
1
2
3
4
5
6
7
и тд,
при удалении строки список получается таким,допустим удаляем строку под номером 3,то список будет иметь вид:
1
2
4
5
6
7
и т,д
возможно ли сделать так чтобы столбец id постоянно обновлялся и был пронумерован попорядку,,,?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.12.2016, 08:06

Проблема с выводом таблицы из базы данных
Я создаю проект для универа, где выводится таблица предметов и напротив них посещаемость. Когда вывожу таблицу предметов из базы данных,...

Выгрузка из таблицы ListView в базу данных
Имеется ListView с 4 столбцами. В нее по нажатию кнопки загружается определенное кол-во значений (Около 5). Вопрос 1) Можно ли как то...

Вывести имена таблицы базы данных в listView
Добрый день всем! Начал осваивать Java и возникла такая задачка: Вывести имена таблицы базы данных в listView. В консоль получилось вывести...

Cортировка данных
Здравствуйте всем! Подскажите, как отсортировать данные из таблицы по &quot;наименованию&quot; ($forms_naim), если: &lt;? $ath =...

Cортировка данных из файла
Например у нас есть несколько файлов и из этих файлов я вывожу определенные числа. Вопрос: как мне эти числа упорядочить? P.S. Что уже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Опции темы

Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru