Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 4

Добавить на кнопку событие сортировки

13.01.2012, 14:47. Показов 635. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Господа, я на форуме новенький, извините если не так что то оформил

Вообщем ситуевина такая. Я создал форму инфопаф, есть элемент повторяющей таблицы. Мне надо добавить на кнопку событие сортировки.

я нашел статью на мсдн http://msdn.microsoft.com/en-u... e0cf65e687
Там есть код файла,его я вставил в код формы и добавил в обработчик событий который привел ниже:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public void InternalStartup()
        {
 
            ((ButtonEvent)EventManager.ControlEvents["CTRL449_5"]).Clicked += new ClickedEventHandler(CTRL449_5_Clicked);
            ((ButtonEvent)EventManager.ControlEvents["CTRL450_5"]).Clicked += new ClickedEventHandler(CTRL450_5_Clicked);
        }
        //sorts a repeating table.  Takes the parent group node and the index of the coulmn to sort by
        private void SortTable(string xpathToSort, int columnToSortBy)
        {
            //get the values in an array
            string[][] ValuesToSort = GetRepeatingTableValues(xpathToSort);
 
            //sort the array
            Array.Sort(ValuesToSort, new StringArrayComparer(columnToSortBy));
 
            //write the values back to the xml
            SetRepeatingTableValues(xpathToSort, ValuesToSort);
        }
 
 
 
        //Takes an array of arrays and inserts it into a repeating table
        //Assumes that the array and table are the same size
        private void SetRepeatingTableValues(string xpathToSet, string[][] tableValues)
        {
            //Create a navigator on main node supplied in the parameters
            XPathNavigator mainGroup = this.CreateNavigator().SelectSingleNode(xpathToSet, this.NamespaceManager);
 
            //Clone the first child node of the main navigator and populate it with data
            XPathNodeIterator tableRows = mainGroup.SelectChildren(XPathNodeType.Element);
 
            //iterate through the existing XML and update the values from the sorted array
            for (int i = 0; i < tableValues.Length; i++)
            {
                tableRows.MoveNext();
                XPathNodeIterator thisRow = tableRows.Current.SelectChildren(XPathNodeType.Element);
                for (int j = 0; j < tableValues[0].Length; j++)
                {
                    thisRow.MoveNext();
                    thisRow.Current.InnerXml = tableValues[i][j];
                }
            }
        }
 
        //Returns an array of arrays of strings representing the values in a repeating table
        private string[][] GetRepeatingTableValues(string xpathToGet)
        {
 
            XPathNavigator myNav = this.CreateNavigator();
            int rows, cols;
            XPathNodeIterator tableNodes;
 
            //figure out the dimensions of the table
            tableNodes = myNav.SelectSingleNode(xpathToGet, this.NamespaceManager).SelectChildren(XPathNodeType.Element);
            rows = tableNodes.Count;
 
            //move to the first row to count the columns
            tableNodes.MoveNext();
            cols = tableNodes.Current.SelectChildren(XPathNodeType.Element).Count;
 
            //create an array to store the values
            string[][] tableValues = new string[rows][];
 
            //get all the rows in the table
            tableNodes = myNav.SelectSingleNode(xpathToGet, this.NamespaceManager).SelectChildren(XPathNodeType.Element);
 
            //itterate through the rows and write the inner xml of each element in each row to the array
            for (int i = 0; i < rows; i++)
            {
                tableNodes.MoveNext();
                XPathNodeIterator childNodes = tableNodes.Current.SelectChildren(XPathNodeType.Element);
                string[] rowValues = new string[cols];
                for (int j = 0; j <cols; j++)
                {
                    childNodes.MoveNext();
                    rowValues[j] = childNodes.Current.InnerXml;
                }
                tableValues[i] = rowValues;
            }
 
            return tableValues;
        }
 
        //Comparison implementation for array or arrays
        class StringArrayComparer : IComparer
        {
            private int iColumn;
            public StringArrayComparer(int iColumn)
            {
                this.iColumn = iColumn;
            }
 
            int IComparer.Compare(Object x, Object y)
            {
                string[] xAsString = (string[])x;
                string[] yAsString = (string[])y;
 
                return xAsString[iColumn].CompareTo(yAsString[iColumn]);
            }
        }
 
        public void CTRL449_5_Clicked(object sender, ClickedEventArgs e)
        {
            SortTable("/my:моиПоля/my:Материалы/my:Материалы_Таблица", 2);
        }
 
        public void CTRL450_5_Clicked(object sender, ClickedEventArgs e)
        {
            [COLOR="Yellow"]SortTable("/my:моиПоля/my:Материалы/my:Материалы_Таблица", 3);[/COLOR]
        }
    }
}
В выделенном я пишу параметры обработчика таблицу и индекс столбца который хочу отсортировать, и получаю ошибку
return xAsString[iColumn].CompareTo(yAsString[iColumn]);Индекс находился вне границ массива.

Может подскажете что я делаю не так может где массивы надо увеличить или где знаки поменять??

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

Добавлено через 22 часа 47 минут
Так с этой проблемой я разобрался, надо было правильно в infopath указать группу, откуда значения берем. Теперь вроде сортирует. Но он не сортирует если первый столбец пустой говорит что значение не может быт пустым. Не подскажете?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.01.2012, 14:47
Ответы с готовыми решениями:

Создать на форме электронные часы, при нажатии на кнопку они начинают идти с 0 м : 25 с. До 10 м: 33 с. Добавить кнопку
Добрый день, в шараге учебная практика по Deplhi. В задании указано сделать часы, не могу понять как их делать. Понимаю, что нужен таймер и...

При нажатии на кнопку "Всем привет" вывести сообщение `alert("привет")` кнопку удалить и добавить новую кнопку.
как сделать чтобы при нажатие на кнопку всем привет выводилось сообщение alert(&quot;привет&quot;) кнопка всем привет удалялась и...

Событие при изменении сортировки
Подскажите, какой событие сработает в dataGridView при смене сортировки ? (т.е. если сверху нажму например на столбец id, и сортировка...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.01.2012, 14:47
Помогаю со студенческими работами здесь

Нужно добавить кнопку Добавить запись
Подключил бд access уже заполненую. Нужно добавить кнопку, с помощью которой выводится еще одна форма, с помощью которых можно будет...

Событие на кнопку!
Всем привет столкнулся с такой проблемкой. Как сделать так чтобы когда мы нажимали на кнопку консоль делал действие - connect...

Событие на кнопку
Все еще бьюсь со сменой цвета пр клике. Добавила еще один класс ,написала функцию, что не так помогите!!!&lt;div...

Событие на кнопку
уважаемые форумчане! у меня такая маленькая проблемка! я забиваю событие на кнопку F1, но почему-то нехочет работать! вот код того как...

Событие на кнопку
На форме много радиокнопок, простых оконных кнопок и тд. Плоховато срабатывает вот этот код: case key of 38:...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru