|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
Заплатка для ASPxComboBox (элемент управления из библиотеки Developer Express, диапазон версий 7.2.x.x ... 7.3.x.x) |
|
Дата:
|
08 February 2008 |
|
Описание: |
Данный патч, написанный на Яваскрипте, решает проблему потери SelectedIndex элементов, содержащих теги Html в своём тексте. |
| |
Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения
следующую строку:
[CODEPOST ID=226]Заплатка для ASPxComboBox (элемент управления из библиотеки Developer Express, диапазон версий 7.2.x.x ... 7.3.x.x)[/CODEPOST] |
| Оценка: |
Проголосовало 2 посетителей, средняя оценка 1.00 |
| Оценить: |
|
1 Эпиграф.
2
3 Любите Яваскрипт - и он полюбит Вас (Андрей Алейкин - малоизвестный учёный).
4
5 Предисловие.
6
7 Всем известно, что в библиотеке DevEx ошибок столько, что хоть топор вешай.
8 К сожалению, пытаться решить их методом тыка - только время терять.
9 Представляю Вашему вниманию научный способ, основанный на описанном мною ранее
10 взломе методом полного анализа объекта. Только Яваскрипт способен помочь
11 программисту ASP.NET в безвыходных ситуациях.
12
13 Симптомы.
14
15 После задания
16 ASPxComboBox1.EncodeHtml = true;
17 вместо текста можно писать Html.
18 Например,
19 ASPxComboBox1.Items.Add("<font color='red'>Остальные</font>", 4);
20 И обозреватель действительно красит тему в красный цвет.
21 Но беда в том, что при выделении такой темы, теряется SelectedIndex.
22
23 Решение (На примере ASPxComboBox9).
24
25 1. В директиву Page добавляем validateRequest="false".
26 2. Пишем функцию на Яваскрипте.
27 // Функция покраски тем в Combo9
28 function fColorCombo9()
29 {
30 //#region var
31 var iCombo9=0;
32 var iMaxCombo9Begin=0;
33 var iMaxCombo9=0;
34 var iSelectedIndexCombo9=0;
35 var sArrayItemsValueCombo9;
36 var sArrayItemsTextCombo9;
37 var sArrayItemsImageUrlCombo9;
38 //#endregion var
39 //#region ini
40 iMaxCombo9Begin=4;//максимальный номер элемента как должно быть
41 iMaxCombo9=ASPxComboBox9.GetItemCount()-1;//максимальный номер элемента
42 sArrayItemsValueCombo9=new Array(iMaxCombo9Begin+1);//массив itemsValue
43 sArrayItemsTextCombo9=new Array(iMaxCombo9Begin+1);//массив itemsText
44 sArrayItemsImageUrlCombo9=new Array(iMaxCombo9Begin+1);//массив ItemsImageUrl
45 for(iCombo9=0;iCombo9<=iMaxCombo9Begin;iCombo9++)
46 {
47 sArrayItemsValueCombo9[iCombo9]=ASPxComboBox9.GetItem(iCombo9).value;//наполнение массива itemsValue
48 sArrayItemsTextCombo9[iCombo9]=ASPxComboBox9.GetItem(iCombo9).text;//наполнение массива itemsText
49 sArrayItemsImageUrlCombo9[iCombo9]=ASPxComboBox9.GetItem(iCombo9).imageUrl;//наполнение массива ItemsImageUrl
50 }
51 iSelectedIndexCombo9=ASPxComboBox9.GetSelectedIndex();//выделенный ключ
52 //#endregion ini
53 //удаление всех
54 for(var iCombo9=iMaxCombo9;iCombo9>=0;iCombo9--)ASPxComboBox9.RemoveItem(iCombo9);
55 //добавление всех
56 for(var iCombo9=0;iCombo9<=iMaxCombo9Begin;iCombo9++)
57 {
58 switch(iCombo9)
59 {
60 case 2:
61 ASPxComboBox9.AddItem('<font color="darkViolet">'+sArrayItemsTextCombo9[iCombo9]+'</font>',sArrayItemsValueCombo9[iCombo9],sArrayItemsImageUrlCombo9[iCombo9]);
62 break;
63 case 3:
64 ASPxComboBox9.AddItem('<font color="darkGoldenrod">'+sArrayItemsTextCombo9[iCombo9]+'</font>',sArrayItemsValueCombo9[iCombo9],sArrayItemsImageUrlCombo9[iCombo9]);
65 break;
66 default:
67 ASPxComboBox9.AddItem(sArrayItemsTextCombo9[iCombo9],sArrayItemsValueCombo9[iCombo9],sArrayItemsImageUrlCombo9[iCombo9]);
68 break;
69 }
70 }
71 ASPxComboBox9.SetSelectedIndex(iSelectedIndexCombo9);
72 }
73 Обратите внимание на строку:
74 iMaxCombo9Begin=4;//максимальный номер элемента как должно быть
75 К сожалению, надо быть в курсе истинного числа элементов, так как их число
76 может возрасти после постбека (по вине DevExp).
77 3. Добавляем fColorCombo9() в функцию fLoad().
78 function fLoad()
79 {
80 if(ASPxComboBox9)fColorCombo9();
81 ...
82 }
83 4. Проверяем есть ли привязка к body.
84 <body onload="fLoad()">
85 5. В раздельном коде нельзя применять теги Html, например вместо
86 ASPxComboBox1.Items.Add("<font color='red'>Остальные</font>", 4);
87 надо написать
88 ASPxComboBox1.Items.Add("Остальные", 4);
89
90 Ну вот и всё. Как всегда желаю приятной работы.
91 |
| Вернуться к списку исходников в категории Общие вопросы программирования на ASP.NET |
|
|
 |
 |
 |
 |
|
|