From 8e116609c68aec33ffea74b3b095ae6e58688a44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E7=94=9F=E7=9F=B3=E4=B8=8A?= Date: Tue, 19 May 2015 14:45:47 +0800 Subject: [PATCH] v4.2.0 --- FineUI.Examples/Code/PageBase.cs | 2038 +- FineUI.Examples/FineUI.Examples.csproj | 5157 +- FineUI.Examples/Global.asax | 1 + FineUI.Examples/Global.asax.cs | 52 + FineUI.Examples/Properties/AssemblyInfo.cs | 70 +- FineUI.Examples/Web.config | 143 +- FineUI.Examples/accordion/accordion.aspx | 91 +- FineUI.Examples/accordion/accordion.aspx.cs | 57 +- .../accordion/accordion.aspx.designer.cs | 219 +- .../accordion/accordion_autopostback.aspx | 44 + .../accordion/accordion_autopostback.aspx.cs | 28 + .../accordion_autopostback.aspx.designer.cs | 105 + .../accordion/accordion_links.aspx | 142 +- .../accordion/accordion_links.aspx.cs | 50 +- .../accordion_links.aspx.designer.cs | 176 +- .../accordion/accordion_links_iframe.htm | 34 +- FineUI.Examples/accordion/accordion_tree.aspx | 102 +- .../accordion/accordion_tree.aspx.cs | 92 +- .../accordion/accordion_tree.aspx.designer.cs | 156 +- .../accordion/accordion_tree_index.htm | 30 +- FineUI.Examples/aspnet/aspnet.aspx | 71 +- FineUI.Examples/aspnet/aspnet.aspx.cs | 96 +- .../aspnet/aspnet.aspx.designer.cs | 192 +- FineUI.Examples/aspnet/aspnet_literal.aspx | 54 +- FineUI.Examples/aspnet/aspnet_literal.aspx.cs | 60 +- .../aspnet/aspnet_literal.aspx.designer.cs | 138 +- FineUI.Examples/basic/Captcha/CaptchaImage.cs | 396 +- FineUI.Examples/basic/Captcha/captcha.ashx | 2 +- FineUI.Examples/basic/Captcha/captcha.ashx.cs | 106 +- FineUI.Examples/basic/hello.aspx | 39 +- FineUI.Examples/basic/hello.aspx.cs | 52 +- FineUI.Examples/basic/hello.aspx.designer.cs | 102 +- FineUI.Examples/basic/hello_aspnet.aspx | 28 +- FineUI.Examples/basic/hello_aspnet.aspx.cs | 42 +- .../basic/hello_aspnet.aspx.designer.cs | 66 +- FineUI.Examples/basic/login.aspx | 89 +- FineUI.Examples/basic/login.aspx.cs | 62 +- FineUI.Examples/basic/login.aspx.designer.cs | 183 +- FineUI.Examples/basic/login_captcha.aspx | 113 +- FineUI.Examples/basic/login_captcha.aspx.cs | 152 +- .../basic/login_captcha.aspx.designer.cs | 237 +- FineUI.Examples/basic/login_enterkey.aspx | 47 + FineUI.Examples/basic/login_enterkey.aspx.cs | 31 + .../basic/login_enterkey.aspx.designer.cs | 96 + FineUI.Examples/bin/FineUI.Examples.dll | Bin 238592 -> 287744 bytes FineUI.Examples/bin/FineUI.dll | Bin 620032 -> 641024 bytes FineUI.Examples/bin/FineUI.xml | 41949 ++++++++-------- FineUI.Examples/bin/Newtonsoft.Json.dll | Bin 389120 -> 440320 bytes FineUI.Examples/button/button.aspx | 80 +- FineUI.Examples/button/button.aspx.cs | 92 +- .../button/button.aspx.designer.cs | 210 +- FineUI.Examples/button/button_click.aspx | 50 +- FineUI.Examples/button/button_click.aspx.cs | 58 +- .../button/button_click.aspx.designer.cs | 120 +- FineUI.Examples/button/button_custom.aspx | 69 +- FineUI.Examples/button/button_custom.aspx.cs | 58 +- .../button/button_custom.aspx.designer.cs | 102 +- FineUI.Examples/button/button_icon.aspx | 66 +- FineUI.Examples/button/button_icon.aspx.cs | 49 +- .../button/button_icon.aspx.designer.cs | 192 +- FineUI.Examples/button/button_linkbutton.aspx | 64 +- .../button/button_linkbutton.aspx.cs | 60 +- .../button/button_linkbutton.aspx.designer.cs | 138 +- FineUI.Examples/button/button_menu.aspx | 76 +- FineUI.Examples/button/button_menu.aspx.cs | 110 +- .../button/button_menu.aspx.designer.cs | 102 +- .../button/button_menu_menuid.aspx | 38 + .../button/button_menu_menuid.aspx.cs | 22 + .../button_menu_menuid.aspx.designer.cs | 96 + FineUI.Examples/common/menu.xml | 1172 +- FineUI.Examples/common/source.aspx | 44 +- FineUI.Examples/common/source.aspx.cs | 256 +- .../common/source.aspx.designer.cs | 84 +- FineUI.Examples/common/source_file.aspx | 73 +- FineUI.Examples/common/source_file.aspx.cs | 83 +- .../common/source_file.aspx.designer.cs | 66 +- FineUI.Examples/config/ajax.aspx | 94 +- FineUI.Examples/config/ajax.aspx.cs | 204 +- FineUI.Examples/config/ajax.aspx.designer.cs | 66 +- FineUI.Examples/config/ajax_properties.txt | 718 +- FineUI.Examples/config/enable_gzip_iis6.htm | 126 +- FineUI.Examples/config/icons.aspx | 50 +- FineUI.Examples/config/icons.aspx.cs | 98 +- FineUI.Examples/config/icons.aspx.designer.cs | 48 +- FineUI.Examples/config/icons.htm | 20 +- FineUI.Examples/config/install_toolbox.htm | 66 +- FineUI.Examples/config/modify_webconfig.htm | 217 +- FineUI.Examples/config/release_time_chart.htm | 382 +- FineUI.Examples/default.aspx | 727 +- FineUI.Examples/default.aspx.cs | 804 +- FineUI.Examples/default.aspx.designer.cs | 669 +- .../databind/dropdownlist_compositelist.aspx | 63 +- .../dropdownlist_compositelist.aspx.cs | 182 +- ...ropdownlist_compositelist.aspx.designer.cs | 156 +- .../databind/dropdownlist_datatable.aspx | 59 +- .../databind/dropdownlist_datatable.aspx.cs | 216 +- .../dropdownlist_datatable.aspx.designer.cs | 138 +- .../databind/dropdownlist_simplelist.aspx | 63 +- .../databind/dropdownlist_simplelist.aspx.cs | 124 +- .../dropdownlist_simplelist.aspx.designer.cs | 156 +- .../dropdownlist/dropdownlist.aspx | 103 +- .../dropdownlist/dropdownlist.aspx.cs | 76 +- .../dropdownlist.aspx.designer.cs | 156 +- .../dropdownlist/dropdownlist_emptyvalue.aspx | 92 +- .../dropdownlist_emptyvalue.aspx.cs | 96 +- .../dropdownlist_emptyvalue.aspx.designer.cs | 156 +- .../dropdownlist/dropdownlist_enableedit.aspx | 89 +- .../dropdownlist_enableedit.aspx.cs | 73 +- .../dropdownlist_enableedit.aspx.designer.cs | 156 +- .../dropdownlist_forceselection.aspx | 89 +- .../dropdownlist_forceselection.aspx.cs | 76 +- ...opdownlist_forceselection.aspx.designer.cs | 156 +- .../dropdownlist_matchfieldwidth.aspx | 54 + .../dropdownlist_matchfieldwidth.aspx.cs | 40 + ...pdownlist_matchfieldwidth.aspx.designer.cs | 78 + .../dropdownlist_simulate_tree.aspx | 63 +- .../dropdownlist_simulate_tree.aspx.cs | 228 +- ...ropdownlist_simulate_tree.aspx.designer.cs | 138 +- FineUI.Examples/dropdownlist/multiselect.aspx | 43 + .../dropdownlist/multiselect.aspx.cs | 51 + .../dropdownlist/multiselect.aspx.designer.cs | 78 + .../multiselect_autopostback.aspx | 43 + .../multiselect_autopostback.aspx.cs | 59 + .../multiselect_autopostback.aspx.designer.cs | 78 + .../dropdownlist/multiselect_enableedit.aspx | 46 + .../multiselect_enableedit.aspx.cs | 51 + .../multiselect_enableedit.aspx.designer.cs | 78 + .../dropdownlist/shengshixian.aspx | 75 +- .../dropdownlist/shengshixian.aspx.cs | 176 +- .../shengshixian.aspx.designer.cs | 174 +- FineUI.Examples/extjs_builder/build.bat | 272 +- .../extjs_builder/build_only_js_css.bat | 248 +- FineUI.Examples/extjs_builder/js/F/F.ajax.js | 522 + .../extjs_builder/js/F/F.format.js | 45 + .../extjs_builder/js/F/F.simulateTree.js | 118 + FineUI.Examples/extjs_builder/js/F/F.util.js | 1307 + FineUI.Examples/extjs_builder/js/F/F.wnd.js | 317 + .../extjs_builder/js/F/extender.js | 1674 + .../extjs_builder/js/lang/f-lang-en.js | 49 + .../extjs_builder/js/lang/f-lang-pt_BR.js | 40 + .../extjs_builder/js/lang/f-lang-ru.js | 30 + .../extjs_builder/js/lang/f-lang-tr.js | 31 + .../extjs_builder/js/lang/f-lang-zh_CN.js | 51 + .../extjs_builder/js/lang/f-lang-zh_TW.js | 50 + .../extjs_builder/js/lib/Base64.js | 282 +- .../extjs_builder/js/ux/FormViewport.js | 179 +- .../js/ux/SimplePagingToolbar.js | 115 +- .../extjs_builder/js/ux/TabCloseMenu.js | 426 +- FineUI.Examples/extjs_builder/res/FineUI.css | 316 +- FineUI.Examples/extjs_builder/res/Grid.css | 196 +- .../extjs_builder/res/PageLoading.css | 102 +- FineUI.Examples/extjs_builder/res/Tree.css | 17 +- FineUI.Examples/extjs_builder/res/access.css | 19 +- FineUI.Examples/extjs_builder/res/classic.css | 7 + .../extjs_builder/res/images/Thumbs.db | Bin 0 -> 28160 bytes FineUI.Examples/extjs_builder/res/neptune.css | 200 + FineUI.Examples/extjs_builder/version.txt | 1 + FineUI.Examples/form/calendar.aspx | 53 +- FineUI.Examples/form/calendar.aspx.cs | 73 +- .../form/calendar.aspx.designer.cs | 138 +- FineUI.Examples/form/checkbox.aspx | 66 +- FineUI.Examples/form/checkbox.aspx.cs | 68 +- .../form/checkbox.aspx.designer.cs | 174 +- FineUI.Examples/form/checkboxlist.aspx | 183 +- FineUI.Examples/form/checkboxlist.aspx.cs | 222 +- .../form/checkboxlist.aspx.designer.cs | 264 +- FineUI.Examples/form/checkboxlist_update.aspx | 148 +- .../form/checkboxlist_update.aspx.cs | 480 +- .../form/checkboxlist_update.aspx.designer.cs | 318 +- FineUI.Examples/form/datepicker.aspx | 64 +- FineUI.Examples/form/datepicker.aspx.cs | 52 +- .../form/datepicker.aspx.designer.cs | 156 +- .../form/datepicker_autopostback.aspx | 140 +- .../form/datepicker_autopostback.aspx.cs | 138 +- .../datepicker_autopostback.aspx.designer.cs | 291 +- FineUI.Examples/form/datepicker_range.aspx | 58 +- FineUI.Examples/form/datepicker_range.aspx.cs | 50 +- .../form/datepicker_range.aspx.designer.cs | 138 +- FineUI.Examples/form/fileupload.aspx | 72 +- FineUI.Examples/form/fileupload.aspx.cs | 98 +- .../form/fileupload.aspx.designer.cs | 156 +- .../form/fileupload_autopostback.aspx | 98 +- .../form/fileupload_autopostback.aspx.cs | 134 +- .../fileupload_autopostback.aspx.designer.cs | 192 +- FineUI.Examples/form/fileupload_toolbar.aspx | 124 +- .../form/fileupload_toolbar.aspx.cs | 134 +- .../form/fileupload_toolbar.aspx.designer.cs | 183 +- FineUI.Examples/form/form.aspx | 220 +- FineUI.Examples/form/form.aspx.cs | 72 +- FineUI.Examples/form/form.aspx.designer.cs | 390 +- FineUI.Examples/form/form_center_button.aspx | 136 +- .../form/form_center_button.aspx.cs | 56 +- .../form/form_center_button.aspx.designer.cs | 210 +- FineUI.Examples/form/form_compare.aspx | 108 +- FineUI.Examples/form/form_compare.aspx.cs | 46 +- .../form/form_compare.aspx.designer.cs | 264 +- FineUI.Examples/form/form_disabled.aspx | 118 + FineUI.Examples/form/form_disabled.aspx.cs | 117 + .../form/form_disabled.aspx.designer.cs | 240 + FineUI.Examples/form/form_dynamic.aspx | 64 +- FineUI.Examples/form/form_dynamic.aspx.cs | 137 +- .../form/form_dynamic.aspx.designer.cs | 120 +- FineUI.Examples/form/form_hide_field.aspx | 176 +- FineUI.Examples/form/form_hide_field.aspx.cs | 74 +- .../form/form_hide_field.aspx.designer.cs | 318 +- FineUI.Examples/form/form_reset.aspx | 239 +- FineUI.Examples/form/form_reset.aspx.cs | 76 +- .../form/form_reset.aspx.designer.cs | 444 +- FineUI.Examples/form/form_validate.aspx | 58 +- FineUI.Examples/form/form_validate.aspx.cs | 58 +- .../form/form_validate.aspx.designer.cs | 138 +- FineUI.Examples/form/htmleditor.aspx | 58 +- FineUI.Examples/form/htmleditor.aspx.cs | 58 +- .../form/htmleditor.aspx.designer.cs | 156 +- FineUI.Examples/form/hyperlink.aspx | 52 +- FineUI.Examples/form/hyperlink.aspx.cs | 50 +- .../form/hyperlink.aspx.designer.cs | 138 +- FineUI.Examples/form/image.aspx | 61 +- FineUI.Examples/form/image.aspx.cs | 70 +- FineUI.Examples/form/image.aspx.designer.cs | 138 +- FineUI.Examples/form/label.aspx | 70 +- FineUI.Examples/form/label.aspx.cs | 46 +- FineUI.Examples/form/label.aspx.designer.cs | 156 +- FineUI.Examples/form/layout_checkout.aspx | 124 + FineUI.Examples/form/layout_checkout.aspx.cs | 25 + .../form/layout_checkout.aspx.designer.cs | 303 + FineUI.Examples/form/layout_contactus.aspx | 48 + FineUI.Examples/form/layout_contactus.aspx.cs | 17 + .../form/layout_contactus.aspx.designer.cs | 123 + FineUI.Examples/form/layout_panel.aspx | 115 +- FineUI.Examples/form/layout_panel.aspx.cs | 32 +- .../form/layout_panel.aspx.designer.cs | 300 +- FineUI.Examples/form/layout_panel2.aspx | 168 +- FineUI.Examples/form/layout_panel2.aspx.cs | 38 +- .../form/layout_panel2.aspx.designer.cs | 408 +- FineUI.Examples/form/numberbox.aspx | 60 +- FineUI.Examples/form/numberbox.aspx.cs | 54 +- .../form/numberbox.aspx.designer.cs | 174 +- FineUI.Examples/form/radiobutton.aspx | 94 +- FineUI.Examples/form/radiobutton.aspx.cs | 140 +- .../form/radiobutton.aspx.designer.cs | 264 +- FineUI.Examples/form/radiobuttonlist.aspx | 173 +- FineUI.Examples/form/radiobuttonlist.aspx.cs | 196 +- .../form/radiobuttonlist.aspx.designer.cs | 282 +- .../form/radiobuttonlist_update.aspx | 146 +- .../form/radiobuttonlist_update.aspx.cs | 468 +- .../radiobuttonlist_update.aspx.designer.cs | 318 +- FineUI.Examples/form/textarea_autogrow.aspx | 51 +- .../form/textarea_autogrow.aspx.cs | 36 +- .../form/textarea_autogrow.aspx.designer.cs | 120 +- FineUI.Examples/form/textbox.aspx | 64 +- FineUI.Examples/form/textbox.aspx.cs | 45 +- FineUI.Examples/form/textbox.aspx.designer.cs | 174 +- .../form/textbox_autopostback.aspx | 73 +- .../form/textbox_autopostback.aspx.cs | 62 +- .../textbox_autopostback.aspx.designer.cs | 174 +- FineUI.Examples/form/timepicker.aspx | 65 +- FineUI.Examples/form/timepicker.aspx.cs | 68 +- .../form/timepicker.aspx.designer.cs | 156 +- FineUI.Examples/form/tooltip.aspx | 60 +- FineUI.Examples/form/tooltip.aspx.cs | 36 +- FineUI.Examples/form/tooltip.aspx.designer.cs | 138 +- FineUI.Examples/form/triggerbox.aspx | 60 +- FineUI.Examples/form/triggerbox.aspx.cs | 62 +- .../form/triggerbox.aspx.designer.cs | 138 +- FineUI.Examples/form/twintriggerbox.aspx | 48 +- FineUI.Examples/form/twintriggerbox.aspx.cs | 90 +- .../form/twintriggerbox.aspx.designer.cs | 102 +- FineUI.Examples/grid/grid.aspx | 81 +- FineUI.Examples/grid/grid.aspx.cs | 80 +- FineUI.Examples/grid/grid.aspx.designer.cs | 111 +- FineUI.Examples/grid/grid_aspnet.aspx | 74 +- FineUI.Examples/grid/grid_aspnet.aspx.cs | 84 +- .../grid/grid_aspnet.aspx.designer.cs | 66 +- .../grid/grid_aspnet_rowdatabound.aspx | 74 +- .../grid/grid_aspnet_rowdatabound.aspx.cs | 110 +- .../grid_aspnet_rowdatabound.aspx.designer.cs | 66 +- FineUI.Examples/grid/grid_centercolumn.aspx | 98 +- .../grid/grid_centercolumn.aspx.cs | 82 +- .../grid/grid_centercolumn.aspx.designer.cs | 120 +- FineUI.Examples/grid/grid_checkall.aspx | 97 +- FineUI.Examples/grid/grid_checkall.aspx.cs | 140 +- .../grid/grid_checkall.aspx.designer.cs | 174 +- FineUI.Examples/grid/grid_checkall_only.aspx | 90 +- .../grid/grid_checkall_only.aspx.cs | 114 +- .../grid/grid_checkall_only.aspx.designer.cs | 138 +- .../grid/grid_checkall_singleselect.aspx | 49 + .../grid/grid_checkall_singleselect.aspx.cs | 70 + ...rid_checkall_singleselect.aspx.designer.cs | 87 + FineUI.Examples/grid/grid_checkboxfield.aspx | 86 +- .../grid/grid_checkboxfield.aspx.cs | 162 +- .../grid/grid_checkboxfield.aspx.designer.cs | 138 +- .../grid/grid_checkboxfield_autopostback.aspx | 86 +- .../grid_checkboxfield_autopostback.aspx.cs | 174 +- ...heckboxfield_autopostback.aspx.designer.cs | 138 +- .../grid/grid_checkboxfield_checkall.aspx | 86 +- .../grid/grid_checkboxfield_checkall.aspx.cs | 162 +- ...id_checkboxfield_checkall.aspx.designer.cs | 138 +- .../grid/grid_checkboxfield_rowcheckall.aspx | 104 +- .../grid_checkboxfield_rowcheckall.aspx.cs | 197 +- ...checkboxfield_rowcheckall.aspx.designer.cs | 174 +- ..._checkboxfield_rowcheckall_clientside.aspx | 102 + ...eckboxfield_rowcheckall_clientside.aspx.cs | 75 + ...ld_rowcheckall_clientside.aspx.designer.cs | 105 + ...checkboxfield_rowcheckall_contextmenu.aspx | 102 + ...ckboxfield_rowcheckall_contextmenu.aspx.cs | 75 + ...d_rowcheckall_contextmenu.aspx.designer.cs | 96 + FineUI.Examples/grid/grid_column_lines.aspx | 86 +- .../grid/grid_column_lines.aspx.cs | 80 +- .../grid/grid_column_lines.aspx.designer.cs | 120 +- .../grid/grid_complex_property.aspx | 68 +- .../grid/grid_complex_property.aspx.cs | 284 +- .../grid_complex_property.aspx.designer.cs | 84 +- .../grid/grid_dynamic_columns.aspx | 48 +- .../grid/grid_dynamic_columns.aspx.cs | 166 +- .../grid_dynamic_columns.aspx.designer.cs | 120 +- .../grid/grid_dynamic_columns2.aspx | 48 +- .../grid/grid_dynamic_columns2.aspx.cs | 213 +- .../grid_dynamic_columns2.aspx.designer.cs | 120 +- FineUI.Examples/grid/grid_edit.aspx | 181 +- FineUI.Examples/grid/grid_edit.aspx.cs | 174 +- .../grid/grid_edit.aspx.designer.cs | 192 +- FineUI.Examples/grid/grid_edit_cart.aspx | 143 + FineUI.Examples/grid/grid_edit_cart.aspx.cs | 125 + .../grid/grid_edit_cart.aspx.designer.cs | 69 + .../grid/grid_edit_checkboxlist.aspx | 132 +- .../grid/grid_edit_checkboxlist.aspx.cs | 236 +- .../grid_edit_checkboxlist.aspx.designer.cs | 174 +- FineUI.Examples/grid/grid_edit_compare.aspx | 269 +- .../grid/grid_edit_compare.aspx.cs | 174 +- .../grid/grid_edit_compare.aspx.designer.cs | 228 +- .../grid/grid_edit_dropdownlist.aspx | 92 +- .../grid/grid_edit_dropdownlist.aspx.cs | 170 +- .../grid_edit_dropdownlist.aspx.designer.cs | 156 +- .../grid/grid_edit_dropdownlist2.aspx | 88 +- .../grid/grid_edit_dropdownlist2.aspx.cs | 186 +- .../grid_edit_dropdownlist2.aspx.designer.cs | 156 +- .../grid/grid_edit_dropdownlist_textbox.aspx | 140 +- .../grid_edit_dropdownlist_textbox.aspx.cs | 180 +- ...edit_dropdownlist_textbox.aspx.designer.cs | 174 +- .../grid/grid_edit_dropdownlist_update.aspx | 133 +- .../grid_edit_dropdownlist_update.aspx.cs | 216 +- ..._edit_dropdownlist_update.aspx.designer.cs | 192 +- .../grid/grid_edit_enterkey_h.aspx | 114 + .../grid/grid_edit_enterkey_h.aspx.cs | 111 + .../grid_edit_enterkey_h.aspx.designer.cs | 114 + .../grid/grid_edit_enterkey_v.aspx | 113 + .../grid/grid_edit_enterkey_v.aspx.cs | 111 + .../grid_edit_enterkey_v.aspx.designer.cs | 114 + .../grid/grid_edit_radiobuttonlist.aspx | 112 +- .../grid/grid_edit_radiobuttonlist.aspx.cs | 172 +- ...grid_edit_radiobuttonlist.aspx.designer.cs | 156 +- FineUI.Examples/grid/grid_edit_save_auto.aspx | 361 +- .../grid/grid_edit_save_auto.aspx.cs | 288 +- .../grid/grid_edit_save_auto.aspx.designer.cs | 381 +- .../grid/grid_edit_save_manual.aspx | 224 +- .../grid/grid_edit_save_manual.aspx.cs | 284 +- .../grid_edit_save_manual.aspx.designer.cs | 372 +- FineUI.Examples/grid/grid_editor_cell.aspx | 165 +- FineUI.Examples/grid/grid_editor_cell.aspx.cs | 252 +- .../grid/grid_editor_cell.aspx.designer.cs | 228 +- FineUI.Examples/grid/grid_editor_cell2.aspx | 169 +- .../grid/grid_editor_cell2.aspx.cs | 174 +- .../grid/grid_editor_cell2.aspx.designer.cs | 210 +- .../grid/grid_editor_cell_afteredit.aspx | 161 +- .../grid/grid_editor_cell_afteredit.aspx.cs | 251 +- ...rid_editor_cell_afteredit.aspx.designer.cs | 219 +- ...rid_editor_cell_afteredit_rowexpander.aspx | 90 + ..._editor_cell_afteredit_rowexpander.aspx.cs | 127 + ...ell_afteredit_rowexpander.aspx.designer.cs | 105 + .../grid/grid_editor_cell_databind.aspx | 80 + .../grid/grid_editor_cell_databind.aspx.cs | 132 + ...grid_editor_cell_databind.aspx.designer.cs | 114 + .../grid/grid_editor_cell_delete.aspx | 190 +- .../grid/grid_editor_cell_delete.aspx.cs | 360 +- .../grid_editor_cell_delete.aspx.designer.cs | 255 +- .../grid/grid_editor_cell_new.aspx | 182 +- .../grid/grid_editor_cell_new.aspx.cs | 361 +- .../grid_editor_cell_new.aspx.designer.cs | 255 +- .../grid/grid_editor_cell_new_delete.aspx | 194 +- .../grid/grid_editor_cell_new_delete.aspx.cs | 458 +- ...id_editor_cell_new_delete.aspx.designer.cs | 282 +- ...id_editor_cell_new_delete_rowexpander.aspx | 111 + ...editor_cell_new_delete_rowexpander.aspx.cs | 238 + ...ll_new_delete_rowexpander.aspx.designer.cs | 141 + .../grid/grid_editor_cell_paging.aspx | 81 + .../grid/grid_editor_cell_paging.aspx.cs | 131 + .../grid_editor_cell_paging.aspx.designer.cs | 114 + .../grid/grid_editor_cell_renderfunction.aspx | 179 +- .../grid_editor_cell_renderfunction.aspx.cs | 232 +- ...ditor_cell_renderfunction.aspx.designer.cs | 228 +- FineUI.Examples/grid/grid_empty_text.aspx | 92 +- FineUI.Examples/grid/grid_empty_text.aspx.cs | 98 +- .../grid/grid_empty_text.aspx.designer.cs | 138 +- FineUI.Examples/grid/grid_excel.aspx | 96 +- FineUI.Examples/grid/grid_excel.aspx.cs | 263 +- .../grid/grid_excel.aspx.designer.cs | 138 +- FineUI.Examples/grid/grid_excel_aspnet.aspx | 90 +- .../grid/grid_excel_aspnet.aspx.cs | 177 +- .../grid/grid_excel_aspnet.aspx.designer.cs | 84 +- .../grid/grid_excel_dynamic_columns.aspx | 24 + .../grid/grid_excel_dynamic_columns.aspx.cs | 256 + ...rid_excel_dynamic_columns.aspx.designer.cs | 60 + .../grid/grid_excel_findcontrol.aspx | 52 + .../grid/grid_excel_findcontrol.aspx.cs | 134 + .../grid_excel_findcontrol.aspx.designer.cs | 78 + .../grid/grid_excel_groupfield.aspx | 58 + .../grid/grid_excel_groupfield.aspx.cs | 334 + .../grid_excel_groupfield.aspx.designer.cs | 78 + .../grid/grid_excel_selectcolumns.aspx | 130 +- .../grid/grid_excel_selectcolumns.aspx.cs | 290 +- .../grid_excel_selectcolumns.aspx.designer.cs | 156 +- ...rid_excel_selectcolumns_iframe_window.aspx | 45 + ..._excel_selectcolumns_iframe_window.aspx.cs | 41 + ...lectcolumns_iframe_window.aspx.designer.cs | 87 + FineUI.Examples/grid/grid_groupheader.aspx | 99 +- FineUI.Examples/grid/grid_groupheader.aspx.cs | 146 +- .../grid/grid_groupheader.aspx.designer.cs | 84 +- .../grid/grid_groupheader_hidden.aspx | 59 + .../grid/grid_groupheader_hidden.aspx.cs | 92 + .../grid_groupheader_hidden.aspx.designer.cs | 42 + .../grid/grid_groupheader_sort.aspx | 115 +- .../grid/grid_groupheader_sort.aspx.cs | 181 +- .../grid_groupheader_sort.aspx.designer.cs | 84 +- .../grid/grid_groupheader_sort_hdmenu.aspx | 117 +- .../grid/grid_groupheader_sort_hdmenu.aspx.cs | 179 +- ...d_groupheader_sort_hdmenu.aspx.designer.cs | 84 +- .../grid/grid_hdmenu_hidecolumn.aspx | 96 +- .../grid/grid_hdmenu_hidecolumn.aspx.cs | 128 +- .../grid_hdmenu_hidecolumn.aspx.designer.cs | 156 +- FineUI.Examples/grid/grid_hdmenu_sorting.aspx | 88 +- .../grid/grid_hdmenu_sorting.aspx.cs | 120 +- .../grid/grid_hdmenu_sorting.aspx.designer.cs | 138 +- .../grid/grid_hide_gridheader.aspx | 27 + .../grid/grid_hide_gridheader.aspx.cs | 49 + .../grid_hide_gridheader.aspx.designer.cs | 60 + FineUI.Examples/grid/grid_hidecolumn.aspx | 84 +- FineUI.Examples/grid/grid_hidecolumn.aspx.cs | 106 +- .../grid/grid_hidecolumn.aspx.designer.cs | 120 +- FineUI.Examples/grid/grid_iframe.aspx | 117 +- FineUI.Examples/grid/grid_iframe.aspx.cs | 136 +- .../grid/grid_iframe.aspx.designer.cs | 174 +- FineUI.Examples/grid/grid_iframe_window.aspx | 141 +- .../grid/grid_iframe_window.aspx.cs | 122 +- .../grid/grid_iframe_window.aspx.designer.cs | 381 +- FineUI.Examples/grid/grid_line_wrap.aspx | 91 +- FineUI.Examples/grid/grid_line_wrap.aspx.cs | 80 +- .../grid/grid_line_wrap.aspx.designer.cs | 111 +- FineUI.Examples/grid/grid_lockcolumn.aspx | 40 + FineUI.Examples/grid/grid_lockcolumn.aspx.cs | 40 + .../grid/grid_lockcolumn.aspx.designer.cs | 51 + .../grid/grid_lockcolumn_editor_cell_new.aspx | 89 + .../grid_lockcolumn_editor_cell_new.aspx.cs | 188 + ...ockcolumn_editor_cell_new.aspx.designer.cs | 123 + .../grid_lockcolumn_groupheader_sort.aspx | 59 + .../grid_lockcolumn_groupheader_sort.aspx.cs | 93 + ...ckcolumn_groupheader_sort.aspx.designer.cs | 42 + .../grid/grid_lockcolumn_line_wrap.aspx | 43 + .../grid/grid_lockcolumn_line_wrap.aspx.cs | 40 + ...grid_lockcolumn_line_wrap.aspx.designer.cs | 51 + .../grid/grid_lockcolumn_many_columns.aspx | 62 + .../grid/grid_lockcolumn_many_columns.aspx.cs | 77 + ...d_lockcolumn_many_columns.aspx.designer.cs | 51 + .../grid/grid_lockcolumn_rowexpander.aspx | 57 + .../grid/grid_lockcolumn_rowexpander.aspx.cs | 52 + ...id_lockcolumn_rowexpander.aspx.designer.cs | 69 + .../grid_lockcolumn_summary_scrollbar.aspx | 57 + .../grid_lockcolumn_summary_scrollbar.aspx.cs | 118 + ...kcolumn_summary_scrollbar.aspx.designer.cs | 78 + FineUI.Examples/grid/grid_pageitems.aspx | 113 +- FineUI.Examples/grid/grid_pageitems.aspx.cs | 158 +- .../grid/grid_pageitems.aspx.designer.cs | 246 +- .../grid/grid_pageitems_pagesize.aspx | 112 +- .../grid/grid_pageitems_pagesize.aspx.cs | 160 +- .../grid_pageitems_pagesize.aspx.designer.cs | 192 +- .../grid_pageitems_pagesize_database.aspx | 108 +- .../grid_pageitems_pagesize_database.aspx.cs | 204 +- ...geitems_pagesize_database.aspx.designer.cs | 174 +- .../grid/grid_pageitems_rowexpander.aspx | 146 +- .../grid/grid_pageitems_rowexpander.aspx.cs | 108 +- ...rid_pageitems_rowexpander.aspx.designer.cs | 192 +- FineUI.Examples/grid/grid_paging.aspx | 83 +- FineUI.Examples/grid/grid_paging.aspx.cs | 94 +- .../grid/grid_paging.aspx.designer.cs | 138 +- .../grid/grid_paging_database.aspx | 87 +- .../grid/grid_paging_database.aspx.cs | 180 +- .../grid_paging_database.aspx.designer.cs | 138 +- .../grid/grid_paging_database_bbar.aspx | 50 + .../grid/grid_paging_database_bbar.aspx.cs | 90 + ...grid_paging_database_bbar.aspx.designer.cs | 69 + .../grid/grid_paging_database_selection.aspx | 88 +- .../grid_paging_database_selection.aspx.cs | 328 +- ...paging_database_selection.aspx.designer.cs | 156 +- .../grid/grid_paging_database_sorting.aspx | 92 +- .../grid/grid_paging_database_sorting.aspx.cs | 218 +- ...d_paging_database_sorting.aspx.designer.cs | 138 +- .../grid/grid_paging_selection.aspx | 87 +- .../grid/grid_paging_selection.aspx.cs | 250 +- .../grid_paging_selection.aspx.designer.cs | 156 +- FineUI.Examples/grid/grid_paging_sorting.aspx | 91 +- .../grid/grid_paging_sorting.aspx.cs | 128 +- .../grid/grid_paging_sorting.aspx.designer.cs | 138 +- .../grid/grid_prerowdatabound.aspx | 88 +- .../grid/grid_prerowdatabound.aspx.cs | 166 +- .../grid_prerowdatabound.aspx.designer.cs | 120 +- .../grid/grid_prerowdatabound_cancelled.aspx | 47 + .../grid_prerowdatabound_cancelled.aspx.cs | 68 + ...prerowdatabound_cancelled.aspx.designer.cs | 60 + FineUI.Examples/grid/grid_rowcheckall.aspx | 84 +- FineUI.Examples/grid/grid_rowcheckall.aspx.cs | 196 +- .../grid/grid_rowcheckall.aspx.designer.cs | 138 +- FineUI.Examples/grid/grid_rowclick.aspx | 72 +- FineUI.Examples/grid/grid_rowclick.aspx.cs | 92 +- .../grid/grid_rowclick.aspx.designer.cs | 102 +- FineUI.Examples/grid/grid_rowcommand.aspx | 88 +- FineUI.Examples/grid/grid_rowcommand.aspx.cs | 118 +- .../grid/grid_rowcommand.aspx.designer.cs | 138 +- .../grid/grid_rowcommand_download.aspx | 43 + .../grid/grid_rowcommand_download.aspx.cs | 74 + .../grid_rowcommand_download.aspx.designer.cs | 69 + .../grid/grid_rowcommand_paging.aspx | 124 +- .../grid/grid_rowcommand_paging.aspx.cs | 128 +- .../grid_rowcommand_paging.aspx.designer.cs | 138 +- .../grid/grid_rowcommand_paging_database.aspx | 121 +- .../grid_rowcommand_paging_database.aspx.cs | 198 +- ...owcommand_paging_database.aspx.designer.cs | 138 +- FineUI.Examples/grid/grid_rowdatabound.aspx | 86 +- .../grid/grid_rowdatabound.aspx.cs | 134 +- .../grid/grid_rowdatabound.aspx.designer.cs | 120 +- FineUI.Examples/grid/grid_rowdoubleclick.aspx | 72 +- .../grid/grid_rowdoubleclick.aspx.cs | 92 +- .../grid/grid_rowdoubleclick.aspx.designer.cs | 102 +- FineUI.Examples/grid/grid_rowexpander.aspx | 112 +- FineUI.Examples/grid/grid_rowexpander.aspx.cs | 90 +- .../grid/grid_rowexpander.aspx.designer.cs | 120 +- .../grid/grid_rowexpander_expandall.aspx | 158 +- .../grid/grid_rowexpander_expandall.aspx.cs | 132 +- ...rid_rowexpander_expandall.aspx.designer.cs | 147 +- .../grid/grid_rowexpander_expandall_js.aspx | 86 + .../grid_rowexpander_expandall_js.aspx.cs | 61 + ..._rowexpander_expandall_js.aspx.designer.cs | 69 + .../grid/grid_rownumber_align.aspx | 30 + .../grid/grid_rownumber_align.aspx.cs | 81 + .../grid_rownumber_align.aspx.designer.cs | 60 + .../grid/grid_rownumber_paging.aspx | 86 +- .../grid/grid_rownumber_paging.aspx.cs | 96 +- .../grid_rownumber_paging.aspx.designer.cs | 138 +- .../grid/grid_rownumber_paging_database.aspx | 82 +- .../grid_rownumber_paging_database.aspx.cs | 180 +- ...rownumber_paging_database.aspx.designer.cs | 138 +- .../grid/grid_rownumber_width.aspx | 60 +- .../grid/grid_rownumber_width.aspx.cs | 162 +- .../grid_rownumber_width.aspx.designer.cs | 120 +- FineUI.Examples/grid/grid_rowselect.aspx | 74 +- FineUI.Examples/grid/grid_rowselect.aspx.cs | 92 +- .../grid/grid_rowselect.aspx.designer.cs | 102 +- FineUI.Examples/grid/grid_simulate_tree.aspx | 50 +- .../grid/grid_simulate_tree.aspx.cs | 200 +- .../grid/grid_simulate_tree.aspx.designer.cs | 84 +- .../grid_simulate_tree_database_paging.aspx | 52 +- ...grid_simulate_tree_database_paging.aspx.cs | 290 +- ...late_tree_database_paging.aspx.designer.cs | 84 +- ...ate_tree_database_paging_dropdownlist.aspx | 60 +- ..._tree_database_paging_dropdownlist.aspx.cs | 384 +- ...abase_paging_dropdownlist.aspx.designer.cs | 102 +- .../grid/grid_simulate_tree_paging.aspx | 50 +- .../grid/grid_simulate_tree_paging.aspx.cs | 234 +- ...grid_simulate_tree_paging.aspx.designer.cs | 84 +- FineUI.Examples/grid/grid_sorting.aspx | 84 +- FineUI.Examples/grid/grid_sorting.aspx.cs | 114 +- .../grid/grid_sorting.aspx.designer.cs | 138 +- .../grid/grid_style_columnclass.aspx | 64 + .../grid/grid_style_columnclass.aspx.cs | 64 + .../grid_style_columnclass.aspx.designer.cs | 78 + FineUI.Examples/grid/grid_style_rowcolor.aspx | 107 + .../grid/grid_style_rowcolor.aspx.cs | 86 + .../grid/grid_style_rowcolor.aspx.designer.cs | 69 + .../grid/grid_style_rowcolor_paging.aspx | 117 + .../grid/grid_style_rowcolor_paging.aspx.cs | 68 + ...rid_style_rowcolor_paging.aspx.designer.cs | 69 + .../grid_style_rowcolor_paging_database.aspx | 104 + ...rid_style_rowcolor_paging_database.aspx.cs | 108 + ..._rowcolor_paging_database.aspx.designer.cs | 60 + FineUI.Examples/grid/grid_summary.aspx | 158 +- FineUI.Examples/grid/grid_summary.aspx.cs | 210 +- .../grid/grid_summary.aspx.designer.cs | 147 +- .../grid/grid_summary_currentpage.aspx | 57 + .../grid/grid_summary_currentpage.aspx.cs | 117 + .../grid_summary_currentpage.aspx.designer.cs | 78 + .../grid/grid_summary_scrollbar.aspx | 55 + .../grid/grid_summary_scrollbar.aspx.cs | 118 + .../grid_summary_scrollbar.aspx.designer.cs | 78 + .../grid/grid_summary_scrollbar_flow.aspx | 55 + .../grid/grid_summary_scrollbar_flow.aspx.cs | 118 + ...id_summary_scrollbar_flow.aspx.designer.cs | 78 + FineUI.Examples/grid/grid_text_middle.aspx | 89 +- FineUI.Examples/grid/grid_text_middle.aspx.cs | 80 +- .../grid/grid_text_middle.aspx.designer.cs | 102 +- FineUI.Examples/grid/grid_text_top.aspx | 80 +- FineUI.Examples/grid/grid_text_top.aspx.cs | 80 +- .../grid/grid_text_top.aspx.designer.cs | 102 +- FineUI.Examples/grid/grid_textselection.aspx | 94 +- .../grid/grid_textselection.aspx.cs | 122 +- .../grid/grid_textselection.aspx.designer.cs | 138 +- FineUI.Examples/grid/grid_twogrid.aspx | 160 +- FineUI.Examples/grid/grid_twogrid.aspx.cs | 172 +- .../grid/grid_twogrid.aspx.designer.cs | 246 +- FineUI.Examples/grid/grid_width.aspx | 86 +- FineUI.Examples/grid/grid_width.aspx.cs | 80 +- .../grid/grid_width.aspx.designer.cs | 111 +- .../grid/grid_width_expandunusedspace.aspx | 90 +- .../grid/grid_width_expandunusedspace.aspx.cs | 80 +- ...d_width_expandunusedspace.aspx.designer.cs | 111 +- FineUI.Examples/grid/grid_width_forcefit.aspx | 42 + .../grid/grid_width_forcefit.aspx.cs | 40 + .../grid/grid_width_forcefit.aspx.designer.cs | 51 + FineUI.Examples/grid/image.ashx | 76 +- FineUI.Examples/iframe/button_iframe.aspx | 73 +- FineUI.Examples/iframe/button_iframe.aspx.cs | 76 +- .../iframe/button_iframe.aspx.designer.cs | 174 +- FineUI.Examples/iframe/grid_iframe.aspx | 184 +- FineUI.Examples/iframe/grid_iframe.aspx.cs | 221 +- .../iframe/grid_iframe.aspx.designer.cs | 291 +- FineUI.Examples/iframe/iframe_iframe.aspx | 68 +- FineUI.Examples/iframe/iframe_iframe.aspx.cs | 58 +- .../iframe/iframe_iframe.aspx.designer.cs | 156 +- .../iframe/iframe_iframe_window1.aspx | 98 +- .../iframe/iframe_iframe_window1.aspx.cs | 56 +- .../iframe_iframe_window1.aspx.designer.cs | 192 +- .../iframe/iframe_iframe_window2.aspx | 102 +- .../iframe/iframe_iframe_window2.aspx.cs | 55 +- .../iframe_iframe_window2.aspx.designer.cs | 237 +- FineUI.Examples/iframe/parent_postback.aspx | 59 +- .../iframe/parent_postback.aspx.cs | 64 +- .../iframe/parent_postback.aspx.designer.cs | 156 +- FineUI.Examples/iframe/parent_postback2.aspx | 54 +- .../iframe/parent_postback2.aspx.cs | 50 +- .../iframe/parent_postback2.aspx.designer.cs | 138 +- FineUI.Examples/iframe/parent_postback3.aspx | 38 +- .../iframe/parent_postback3.aspx.cs | 48 +- .../iframe/parent_postback3.aspx.designer.cs | 102 +- .../iframe/parent_postback_top.aspx | 48 +- .../iframe/parent_postback_top.aspx.cs | 42 +- .../parent_postback_top.aspx.designer.cs | 120 +- .../iframe/parent_postback_top2.aspx | 55 +- .../iframe/parent_postback_top2.aspx.cs | 64 +- .../parent_postback_top2.aspx.designer.cs | 138 +- .../iframe/parent_postback_top3.aspx | 38 +- .../iframe/parent_postback_top3.aspx.cs | 48 +- .../parent_postback_top3.aspx.designer.cs | 102 +- .../iframe/parent_simplepostback.aspx | 48 +- .../iframe/parent_simplepostback.aspx.cs | 56 +- .../parent_simplepostback.aspx.designer.cs | 120 +- .../iframe/parent_simplepostback2.aspx | 42 +- .../iframe/parent_simplepostback2.aspx.cs | 46 +- .../parent_simplepostback2.aspx.designer.cs | 102 +- FineUI.Examples/iframe/passvalue_iframe.aspx | 63 +- .../iframe/passvalue_iframe.aspx.cs | 68 +- .../iframe/passvalue_iframe.aspx.designer.cs | 156 +- .../iframe/passvalue_iframe_iframe.aspx | 61 +- .../iframe/passvalue_iframe_iframe.aspx.cs | 78 +- .../passvalue_iframe_iframe.aspx.designer.cs | 112 +- FineUI.Examples/iframe/selectprovince1.aspx | 77 +- .../iframe/selectprovince1.aspx.cs | 68 +- .../iframe/selectprovince1.aspx.designer.cs | 156 +- .../iframe/selectprovince1_child.aspx | 172 +- .../iframe/selectprovince1_child.aspx.cs | 46 +- .../selectprovince1_child.aspx.designer.cs | 138 +- FineUI.Examples/iframe/selectprovince2.aspx | 77 +- .../iframe/selectprovince2.aspx.cs | 68 +- .../iframe/selectprovince2.aspx.designer.cs | 156 +- .../iframe/selectprovince2_child.aspx | 157 +- .../iframe/selectprovince2_child.aspx.cs | 69 +- .../selectprovince2_child.aspx.designer.cs | 138 +- FineUI.Examples/iframe/selectprovince3.aspx | 64 +- .../iframe/selectprovince3.aspx.cs | 90 +- .../iframe/selectprovince3.aspx.designer.cs | 156 +- .../iframe/selectprovince3_child.aspx | 157 +- .../iframe/selectprovince3_child.aspx.cs | 65 +- .../selectprovince3_child.aspx.designer.cs | 138 +- .../iframe/selectprovince_executescript.aspx | 40 + .../selectprovince_executescript.aspx.cs | 34 + ...ectprovince_executescript.aspx.designer.cs | 78 + .../selectprovince_executescript_child.aspx | 82 + ...selectprovince_executescript_child.aspx.cs | 35 + ...vince_executescript_child.aspx.designer.cs | 69 + .../iframe/topmenu/data/menuMail.xml | 28 +- .../iframe/topmenu/data/menuSMS.xml | 34 +- .../iframe/topmenu/data/menuSYS.xml | 36 +- FineUI.Examples/iframe/topmenu/default.aspx | 182 +- .../iframe/topmenu/default.aspx.cs | 155 +- .../iframe/topmenu/default.aspx.designer.cs | 228 +- .../iframe/topmenu/html/mail-1.html | 20 +- .../iframe/topmenu/html/mail-2.html | 22 +- .../iframe/topmenu/html/mail-3.html | 22 +- .../iframe/topmenu/html/mail-4.html | 22 +- .../iframe/topmenu/html/mail-5.html | 22 +- .../iframe/topmenu/html/sms-1.html | 22 +- .../iframe/topmenu/html/sms-2.html | 22 +- .../iframe/topmenu/html/sms-3.html | 22 +- .../iframe/topmenu/html/sms-4.html | 22 +- .../iframe/topmenu/html/sms-5.html | 22 +- .../iframe/topmenu/html/sys-1.html | 22 +- .../iframe/topmenu/html/sys-2.html | 22 +- .../iframe/topmenu/html/sys-3.html | 22 +- .../iframe/topmenu/html/sys-4.html | 22 +- .../iframe/topmenu/html/sys-5.html | 22 +- FineUI.Examples/iframe/topmenu/res/main.css | 166 +- .../iframe/topmenu2/data/menuMail.xml | 28 +- .../iframe/topmenu2/data/menuSMS.xml | 34 +- .../iframe/topmenu2/data/menuSYS.xml | 36 +- FineUI.Examples/iframe/topmenu2/default.aspx | 139 +- .../iframe/topmenu2/default.aspx.cs | 72 +- .../iframe/topmenu2/default.aspx.designer.cs | 138 +- .../iframe/topmenu2/html/mail-1.html | 20 +- .../iframe/topmenu2/html/mail-2.html | 22 +- .../iframe/topmenu2/html/mail-3.html | 22 +- .../iframe/topmenu2/html/mail-4.html | 22 +- .../iframe/topmenu2/html/mail-5.html | 22 +- .../iframe/topmenu2/html/sms-1.html | 22 +- .../iframe/topmenu2/html/sms-2.html | 22 +- .../iframe/topmenu2/html/sms-3.html | 22 +- .../iframe/topmenu2/html/sms-4.html | 22 +- .../iframe/topmenu2/html/sms-5.html | 22 +- .../iframe/topmenu2/html/sys-1.html | 22 +- .../iframe/topmenu2/html/sys-2.html | 22 +- .../iframe/topmenu2/html/sys-3.html | 22 +- .../iframe/topmenu2/html/sys-4.html | 22 +- .../iframe/topmenu2/html/sys-5.html | 22 +- FineUI.Examples/iframe/topmenu2/leftmenu.aspx | 72 +- .../iframe/topmenu2/leftmenu.aspx.cs | 90 +- .../iframe/topmenu2/leftmenu.aspx.designer.cs | 102 +- FineUI.Examples/iframe/topmenu2/res/main.css | 166 +- .../iframe/topmenu3/data/menuMail.xml | 28 +- .../iframe/topmenu3/data/menuSMS.xml | 34 +- .../iframe/topmenu3/data/menuSYS.xml | 36 +- FineUI.Examples/iframe/topmenu3/default.aspx | 139 +- .../iframe/topmenu3/default.aspx.cs | 72 +- .../iframe/topmenu3/default.aspx.designer.cs | 138 +- .../iframe/topmenu3/html/mail-1.html | 20 +- .../iframe/topmenu3/html/mail-2.html | 22 +- .../iframe/topmenu3/html/mail-3.html | 22 +- .../iframe/topmenu3/html/mail-4.html | 22 +- .../iframe/topmenu3/html/mail-5.html | 22 +- .../iframe/topmenu3/html/sms-1.html | 22 +- .../iframe/topmenu3/html/sms-2.html | 22 +- .../iframe/topmenu3/html/sms-3.html | 22 +- .../iframe/topmenu3/html/sms-4.html | 22 +- .../iframe/topmenu3/html/sms-5.html | 22 +- .../iframe/topmenu3/html/sys-1.html | 22 +- .../iframe/topmenu3/html/sys-2.html | 22 +- .../iframe/topmenu3/html/sys-3.html | 22 +- .../iframe/topmenu3/html/sys-4.html | 22 +- .../iframe/topmenu3/html/sys-5.html | 22 +- FineUI.Examples/iframe/topmenu3/leftmenu.aspx | 67 +- .../iframe/topmenu3/leftmenu.aspx.cs | 169 +- .../iframe/topmenu3/leftmenu.aspx.designer.cs | 102 +- FineUI.Examples/iframe/topmenu3/res/main.css | 166 +- .../iframe/topmenu4/data/menuMail.xml | 15 + .../iframe/topmenu4/data/menuSMS.xml | 17 + .../iframe/topmenu4/data/menuSYS.xml | 19 + FineUI.Examples/iframe/topmenu4/default.aspx | 111 + .../iframe/topmenu4/default.aspx.cs | 37 + .../iframe/topmenu4/default.aspx.designer.cs | 78 + .../iframe/topmenu4/html/mail-1.html | 10 + .../iframe/topmenu4/html/mail-2.html | 11 + .../iframe/topmenu4/html/mail-3.html | 11 + .../iframe/topmenu4/html/mail-4.html | 11 + .../iframe/topmenu4/html/mail-5.html | 11 + .../iframe/topmenu4/html/sms-1.html | 11 + .../iframe/topmenu4/html/sms-2.html | 11 + .../iframe/topmenu4/html/sms-3.html | 11 + .../iframe/topmenu4/html/sms-4.html | 11 + .../iframe/topmenu4/html/sms-5.html | 11 + .../iframe/topmenu4/html/sys-1.html | 11 + .../iframe/topmenu4/html/sys-2.html | 11 + .../iframe/topmenu4/html/sys-3.html | 11 + .../iframe/topmenu4/html/sys-4.html | 11 + .../iframe/topmenu4/html/sys-5.html | 11 + FineUI.Examples/iframe/topmenu4/leftmenu.aspx | 35 + .../iframe/topmenu4/leftmenu.aspx.cs | 46 + .../iframe/topmenu4/leftmenu.aspx.designer.cs | 51 + .../iframe/topmenu4/res/images/admin_tbg.png | Bin 0 -> 759 bytes .../iframe/topmenu4/res/images/menu.png | Bin 0 -> 3338 bytes .../iframe/topmenu4/res/images/p.png | Bin 0 -> 23782 bytes .../iframe/topmenu4/res/images/t.png | Bin 0 -> 810 bytes FineUI.Examples/iframe/topmenu4/res/main.css | 84 + FineUI.Examples/iframe/triggerbox_iframe.aspx | 111 +- .../iframe/triggerbox_iframe.aspx.cs | 106 +- .../iframe/triggerbox_iframe.aspx.designer.cs | 282 +- .../iframe/triggerbox_iframe_iframe.aspx | 91 +- .../iframe/triggerbox_iframe_iframe.aspx.cs | 72 +- .../triggerbox_iframe_iframe.aspx.designer.cs | 210 +- FineUI.Examples/iframe/window.aspx | 25 + FineUI.Examples/iframe/window.aspx.cs | 28 + .../iframe/window.aspx.designer.cs | 60 + FineUI.Examples/iframe/window2.aspx | 36 + FineUI.Examples/iframe/window2.aspx.cs | 31 + .../iframe/window2.aspx.designer.cs | 87 + FineUI.Examples/iframe/window2_iframe.aspx | 45 + FineUI.Examples/iframe/window2_iframe.aspx.cs | 44 + .../iframe/window2_iframe.aspx.designer.cs | 96 + FineUI.Examples/iframe/window_iframe.aspx | 55 + FineUI.Examples/iframe/window_iframe.aspx.cs | 30 + .../iframe/window_iframe.aspx.designer.cs | 114 + FineUI.Examples/layout/absolute.aspx | 74 +- FineUI.Examples/layout/absolute.aspx.cs | 50 +- .../layout/absolute.aspx.designer.cs | 156 +- FineUI.Examples/layout/anchor.aspx | 518 +- FineUI.Examples/layout/anchor.aspx.cs | 78 +- .../layout/anchor.aspx.designer.cs | 930 +- FineUI.Examples/layout/card.aspx | 104 +- FineUI.Examples/layout/card.aspx.cs | 50 +- FineUI.Examples/layout/card.aspx.designer.cs | 228 +- FineUI.Examples/layout/column.aspx | 463 +- FineUI.Examples/layout/column.aspx.cs | 50 +- .../layout/column.aspx.designer.cs | 813 +- FineUI.Examples/layout/fit.aspx | 198 +- FineUI.Examples/layout/fit.aspx.cs | 70 +- FineUI.Examples/layout/fit.aspx.designer.cs | 354 +- FineUI.Examples/layout/hbox.aspx | 324 +- FineUI.Examples/layout/hbox.aspx.cs | 50 +- FineUI.Examples/layout/hbox.aspx.designer.cs | 696 +- FineUI.Examples/layout/region.aspx | 59 + FineUI.Examples/layout/region.aspx.cs | 25 + .../layout/region.aspx.designer.cs | 132 + FineUI.Examples/layout/table.aspx | 150 +- FineUI.Examples/layout/table.aspx.cs | 50 +- FineUI.Examples/layout/table.aspx.designer.cs | 336 +- FineUI.Examples/layout/vbox.aspx | 314 +- FineUI.Examples/layout/vbox.aspx.cs | 50 +- FineUI.Examples/layout/vbox.aspx.designer.cs | 696 +- FineUI.Examples/master/ISingleGridPage.cs | 36 + FineUI.Examples/master/Simple.Master | 41 + FineUI.Examples/master/Simple.Master.cs | 32 + .../master/Simple.Master.designer.cs | 78 + FineUI.Examples/master/SingleGrid.Master | 39 + FineUI.Examples/master/SingleGrid.Master.cs | 230 + .../master/SingleGrid.Master.designer.cs | 69 + FineUI.Examples/master/formlist.aspx | 60 + FineUI.Examples/master/formlist.aspx.cs | 171 + .../master/formlist.aspx.designer.cs | 99 + FineUI.Examples/master/list.aspx | 42 + FineUI.Examples/master/list.aspx.cs | 136 + FineUI.Examples/master/list.aspx.designer.cs | 72 + FineUI.Examples/master/simple.aspx | 14 + FineUI.Examples/master/simple.aspx.cs | 27 + .../master/simple.aspx.designer.cs | 33 + FineUI.Examples/master/simple2.aspx | 14 + FineUI.Examples/master/simple2.aspx.cs | 27 + .../master/simple2.aspx.designer.cs | 33 + FineUI.Examples/other/addtab.aspx | 91 +- FineUI.Examples/other/addtab.aspx.cs | 42 +- FineUI.Examples/other/addtab.aspx.designer.cs | 120 +- FineUI.Examples/other/ajax_loading.aspx | 64 +- FineUI.Examples/other/ajax_loading.aspx.cs | 72 +- .../other/ajax_loading.aspx.designer.cs | 138 +- FineUI.Examples/other/alert.aspx | 39 +- FineUI.Examples/other/alert.aspx.cs | 76 +- FineUI.Examples/other/alert.aspx.designer.cs | 102 +- FineUI.Examples/other/confirm_cancel.aspx | 54 +- FineUI.Examples/other/confirm_cancel.aspx.cs | 92 +- .../other/confirm_cancel.aspx.designer.cs | 120 +- FineUI.Examples/other/confirm_cancel2.aspx | 17 + FineUI.Examples/other/confirm_cancel2.aspx.cs | 37 + .../other/confirm_cancel2.aspx.designer.cs | 42 + FineUI.Examples/other/cssclass.aspx | 102 +- FineUI.Examples/other/cssclass.aspx.cs | 48 +- .../other/cssclass.aspx.designer.cs | 138 +- FineUI.Examples/other/cssstyle.aspx | 86 +- FineUI.Examples/other/cssstyle.aspx.cs | 54 +- .../other/cssstyle.aspx.designer.cs | 102 +- FineUI.Examples/other/custom_postback.aspx | 87 +- FineUI.Examples/other/custom_postback.aspx.cs | 62 +- .../other/custom_postback.aspx.designer.cs | 120 +- FineUI.Examples/other/custom_postback2.aspx | 50 + .../other/custom_postback2.aspx.cs | 32 + .../other/custom_postback2.aspx.designer.cs | 60 + FineUI.Examples/other/global_error.aspx | 49 + FineUI.Examples/other/global_error.aspx.cs | 24 + .../other/global_error.aspx.designer.cs | 51 + FineUI.Examples/other/keydown.aspx | 99 +- FineUI.Examples/other/keydown.aspx.cs | 48 +- .../other/keydown.aspx.designer.cs | 120 +- FineUI.Examples/other/pageloading.aspx | 17 + FineUI.Examples/other/pageloading.aspx.cs | 21 + .../other/pageloading.aspx.designer.cs | 33 + FineUI.Examples/other/timer.aspx | 54 +- FineUI.Examples/other/timer.aspx.cs | 72 +- FineUI.Examples/other/timer.aspx.designer.cs | 138 +- FineUI.Examples/other/toolbar.aspx | 28 +- FineUI.Examples/other/toolbar.aspx.cs | 50 +- .../other/toolbar.aspx.designer.cs | 66 +- FineUI.Examples/res/css/main.css | 44 + .../res/google-code-prettify/lang-apollo.js | 2 + .../res/google-code-prettify/lang-basic.js | 3 + .../res/google-code-prettify/lang-clj.js | 18 + .../res/google-code-prettify/lang-css.js | 2 + .../res/google-code-prettify/lang-dart.js | 3 + .../res/google-code-prettify/lang-erlang.js | 2 + .../res/google-code-prettify/lang-go.js | 1 + .../res/google-code-prettify/lang-hs.js | 2 + .../res/google-code-prettify/lang-lisp.js | 3 + .../res/google-code-prettify/lang-llvm.js | 1 + .../res/google-code-prettify/lang-lua.js | 2 + .../res/google-code-prettify/lang-matlab.js | 6 + .../res/google-code-prettify/lang-ml.js | 2 + .../res/google-code-prettify/lang-mumps.js | 2 + .../res/google-code-prettify/lang-n.js | 4 + .../res/google-code-prettify/lang-pascal.js | 3 + .../res/google-code-prettify/lang-proto.js | 1 + .../res/google-code-prettify/lang-r.js | 2 + .../res/google-code-prettify/lang-rd.js | 1 + .../res/google-code-prettify/lang-scala.js | 2 + .../res/google-code-prettify/lang-sql.js | 2 + .../res/google-code-prettify/lang-tcl.js | 3 + .../res/google-code-prettify/lang-tex.js | 1 + .../res/google-code-prettify/lang-vb.js | 2 + .../res/google-code-prettify/lang-vhdl.js | 3 + .../res/google-code-prettify/lang-wiki.js | 2 + .../res/google-code-prettify/lang-xq.js | 3 + .../res/google-code-prettify/lang-yaml.js | 2 + .../res/google-code-prettify/prettify.css | 1 + .../res/google-code-prettify/prettify.js | 30 + .../res/google-code-prettify/run_prettify.js | 34 + FineUI.Examples/res/icon/Thumbs.db | Bin 0 -> 371712 bytes FineUI.Examples/res/icon/accept.png | Bin 0 -> 781 bytes FineUI.Examples/res/icon/add.png | Bin 0 -> 733 bytes FineUI.Examples/res/icon/anchor.png | Bin 0 -> 523 bytes FineUI.Examples/res/icon/application.png | Bin 0 -> 464 bytes FineUI.Examples/res/icon/application_add.png | Bin 0 -> 619 bytes .../res/icon/application_cascade.png | Bin 0 -> 524 bytes .../res/icon/application_delete.png | Bin 0 -> 610 bytes .../res/icon/application_double.png | Bin 0 -> 533 bytes FineUI.Examples/res/icon/application_edit.png | Bin 0 -> 703 bytes .../res/icon/application_error.png | Bin 0 -> 656 bytes FineUI.Examples/res/icon/application_form.png | Bin 0 -> 467 bytes .../res/icon/application_form_add.png | Bin 0 -> 592 bytes .../res/icon/application_form_delete.png | Bin 0 -> 605 bytes .../res/icon/application_form_edit.png | Bin 0 -> 714 bytes .../res/icon/application_form_magnify.png | Bin 0 -> 612 bytes FineUI.Examples/res/icon/application_get.png | Bin 0 -> 581 bytes FineUI.Examples/res/icon/application_go.png | Bin 0 -> 634 bytes FineUI.Examples/res/icon/application_home.png | Bin 0 -> 685 bytes FineUI.Examples/res/icon/application_key.png | Bin 0 -> 670 bytes .../res/icon/application_lightning.png | Bin 0 -> 656 bytes FineUI.Examples/res/icon/application_link.png | Bin 0 -> 701 bytes FineUI.Examples/res/icon/application_osx.png | Bin 0 -> 487 bytes .../res/icon/application_osx_add.png | Bin 0 -> 645 bytes .../res/icon/application_osx_cascade.png | Bin 0 -> 559 bytes .../res/icon/application_osx_delete.png | Bin 0 -> 639 bytes .../res/icon/application_osx_double.png | Bin 0 -> 573 bytes .../res/icon/application_osx_error.png | Bin 0 -> 713 bytes .../res/icon/application_osx_get.png | Bin 0 -> 623 bytes .../res/icon/application_osx_go.png | Bin 0 -> 697 bytes .../res/icon/application_osx_home.png | Bin 0 -> 761 bytes .../res/icon/application_osx_key.png | Bin 0 -> 714 bytes .../res/icon/application_osx_lightning.png | Bin 0 -> 737 bytes .../res/icon/application_osx_link.png | Bin 0 -> 741 bytes .../res/icon/application_osx_split.png | Bin 0 -> 569 bytes .../res/icon/application_osx_start.png | Bin 0 -> 723 bytes .../res/icon/application_osx_stop.png | Bin 0 -> 690 bytes .../res/icon/application_osx_terminal.png | Bin 0 -> 525 bytes FineUI.Examples/res/icon/application_put.png | Bin 0 -> 585 bytes .../res/icon/application_side_boxes.png | Bin 0 -> 478 bytes .../res/icon/application_side_contract.png | Bin 0 -> 547 bytes .../res/icon/application_side_expand.png | Bin 0 -> 581 bytes .../res/icon/application_side_list.png | Bin 0 -> 510 bytes .../res/icon/application_side_tree.png | Bin 0 -> 483 bytes .../res/icon/application_split.png | Bin 0 -> 520 bytes .../res/icon/application_start.png | Bin 0 -> 685 bytes FineUI.Examples/res/icon/application_stop.png | Bin 0 -> 652 bytes .../res/icon/application_tile_horizontal.png | Bin 0 -> 432 bytes .../res/icon/application_tile_vertical.png | Bin 0 -> 492 bytes .../res/icon/application_view_columns.png | Bin 0 -> 493 bytes .../res/icon/application_view_detail.png | Bin 0 -> 576 bytes .../res/icon/application_view_gallery.png | Bin 0 -> 555 bytes .../res/icon/application_view_icons.png | Bin 0 -> 476 bytes .../res/icon/application_view_list.png | Bin 0 -> 473 bytes .../res/icon/application_view_tile.png | Bin 0 -> 465 bytes FineUI.Examples/res/icon/application_xp.png | Bin 0 -> 426 bytes .../res/icon/application_xp_terminal.png | Bin 0 -> 507 bytes FineUI.Examples/res/icon/arrow_branch.png | Bin 0 -> 582 bytes FineUI.Examples/res/icon/arrow_divide.png | Bin 0 -> 677 bytes FineUI.Examples/res/icon/arrow_down.png | Bin 0 -> 379 bytes FineUI.Examples/res/icon/arrow_ew.png | Bin 0 -> 421 bytes FineUI.Examples/res/icon/arrow_in.png | Bin 0 -> 600 bytes FineUI.Examples/res/icon/arrow_in_longer.png | Bin 0 -> 719 bytes FineUI.Examples/res/icon/arrow_inout.png | Bin 0 -> 551 bytes FineUI.Examples/res/icon/arrow_join.png | Bin 0 -> 626 bytes FineUI.Examples/res/icon/arrow_left.png | Bin 0 -> 345 bytes FineUI.Examples/res/icon/arrow_merge.png | Bin 0 -> 484 bytes FineUI.Examples/res/icon/arrow_ne.png | Bin 0 -> 355 bytes FineUI.Examples/res/icon/arrow_ns.png | Bin 0 -> 464 bytes FineUI.Examples/res/icon/arrow_nsew.png | Bin 0 -> 697 bytes FineUI.Examples/res/icon/arrow_nw.png | Bin 0 -> 361 bytes .../res/icon/arrow_nw_ne_sw_se.png | Bin 0 -> 805 bytes FineUI.Examples/res/icon/arrow_nw_se.png | Bin 0 -> 532 bytes FineUI.Examples/res/icon/arrow_out.png | Bin 0 -> 594 bytes FineUI.Examples/res/icon/arrow_out_longer.png | Bin 0 -> 684 bytes FineUI.Examples/res/icon/arrow_redo.png | Bin 0 -> 625 bytes FineUI.Examples/res/icon/arrow_refresh.png | Bin 0 -> 685 bytes .../res/icon/arrow_refresh_small.png | Bin 0 -> 506 bytes FineUI.Examples/res/icon/arrow_right.png | Bin 0 -> 349 bytes .../res/icon/arrow_rotate_anticlockwise.png | Bin 0 -> 608 bytes .../res/icon/arrow_rotate_clockwise.png | Bin 0 -> 602 bytes FineUI.Examples/res/icon/arrow_se.png | Bin 0 -> 311 bytes FineUI.Examples/res/icon/arrow_sw.png | Bin 0 -> 353 bytes FineUI.Examples/res/icon/arrow_sw_ne.png | Bin 0 -> 508 bytes FineUI.Examples/res/icon/arrow_switch.png | Bin 0 -> 683 bytes .../res/icon/arrow_switch_bluegreen.png | Bin 0 -> 718 bytes FineUI.Examples/res/icon/arrow_turn_left.png | Bin 0 -> 516 bytes FineUI.Examples/res/icon/arrow_turn_right.png | Bin 0 -> 489 bytes FineUI.Examples/res/icon/arrow_undo.png | Bin 0 -> 631 bytes FineUI.Examples/res/icon/arrow_up.png | Bin 0 -> 372 bytes FineUI.Examples/res/icon/asterisk_orange.png | Bin 0 -> 760 bytes FineUI.Examples/res/icon/asterisk_red.png | Bin 0 -> 762 bytes FineUI.Examples/res/icon/asterisk_yellow.png | Bin 0 -> 743 bytes FineUI.Examples/res/icon/attach.png | Bin 0 -> 391 bytes FineUI.Examples/res/icon/award_star_add.png | Bin 0 -> 853 bytes .../res/icon/award_star_bronze_1.png | Bin 0 -> 733 bytes .../res/icon/award_star_bronze_2.png | Bin 0 -> 755 bytes .../res/icon/award_star_bronze_3.png | Bin 0 -> 754 bytes .../res/icon/award_star_delete.png | Bin 0 -> 849 bytes .../res/icon/award_star_gold_1.png | Bin 0 -> 753 bytes .../res/icon/award_star_gold_2.png | Bin 0 -> 770 bytes .../res/icon/award_star_gold_3.png | Bin 0 -> 781 bytes .../res/icon/award_star_silver_1.png | Bin 0 -> 714 bytes .../res/icon/award_star_silver_2.png | Bin 0 -> 734 bytes .../res/icon/award_star_silver_3.png | Bin 0 -> 738 bytes FineUI.Examples/res/icon/basket.png | Bin 0 -> 669 bytes FineUI.Examples/res/icon/basket_add.png | Bin 0 -> 752 bytes FineUI.Examples/res/icon/basket_delete.png | Bin 0 -> 773 bytes FineUI.Examples/res/icon/basket_edit.png | Bin 0 -> 811 bytes FineUI.Examples/res/icon/basket_error.png | Bin 0 -> 794 bytes FineUI.Examples/res/icon/basket_go.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/basket_put.png | Bin 0 -> 733 bytes FineUI.Examples/res/icon/basket_remove.png | Bin 0 -> 738 bytes FineUI.Examples/res/icon/bell.png | Bin 0 -> 789 bytes FineUI.Examples/res/icon/bell_add.png | Bin 0 -> 816 bytes FineUI.Examples/res/icon/bell_delete.png | Bin 0 -> 824 bytes FineUI.Examples/res/icon/bell_error.png | Bin 0 -> 813 bytes FineUI.Examples/res/icon/bell_go.png | Bin 0 -> 836 bytes FineUI.Examples/res/icon/bell_link.png | Bin 0 -> 850 bytes FineUI.Examples/res/icon/bell_silver.png | Bin 0 -> 494 bytes .../res/icon/bell_silver_start.png | Bin 0 -> 833 bytes FineUI.Examples/res/icon/bell_silver_stop.png | Bin 0 -> 813 bytes FineUI.Examples/res/icon/bell_start.png | Bin 0 -> 882 bytes FineUI.Examples/res/icon/bell_stop.png | Bin 0 -> 849 bytes FineUI.Examples/res/icon/bin.png | Bin 0 -> 476 bytes FineUI.Examples/res/icon/bin_closed.png | Bin 0 -> 363 bytes FineUI.Examples/res/icon/bin_empty.png | Bin 0 -> 475 bytes FineUI.Examples/res/icon/blank.png | Bin 0 -> 166 bytes FineUI.Examples/res/icon/bomb.png | Bin 0 -> 793 bytes FineUI.Examples/res/icon/book.png | Bin 0 -> 593 bytes FineUI.Examples/res/icon/book_add.png | Bin 0 -> 714 bytes FineUI.Examples/res/icon/book_addresses.png | Bin 0 -> 770 bytes .../res/icon/book_addresses_add.png | Bin 0 -> 849 bytes .../res/icon/book_addresses_delete.png | Bin 0 -> 840 bytes .../res/icon/book_addresses_edit.png | Bin 0 -> 883 bytes .../res/icon/book_addresses_error.png | Bin 0 -> 852 bytes .../res/icon/book_addresses_key.png | Bin 0 -> 873 bytes FineUI.Examples/res/icon/book_delete.png | Bin 0 -> 719 bytes FineUI.Examples/res/icon/book_edit.png | Bin 0 -> 813 bytes FineUI.Examples/res/icon/book_error.png | Bin 0 -> 734 bytes FineUI.Examples/res/icon/book_go.png | Bin 0 -> 745 bytes FineUI.Examples/res/icon/book_key.png | Bin 0 -> 779 bytes FineUI.Examples/res/icon/book_link.png | Bin 0 -> 789 bytes FineUI.Examples/res/icon/book_magnify.png | Bin 0 -> 740 bytes FineUI.Examples/res/icon/book_next.png | Bin 0 -> 702 bytes FineUI.Examples/res/icon/book_open.png | Bin 0 -> 622 bytes FineUI.Examples/res/icon/book_open_mark.png | Bin 0 -> 658 bytes FineUI.Examples/res/icon/book_previous.png | Bin 0 -> 680 bytes FineUI.Examples/res/icon/book_red.png | Bin 0 -> 638 bytes FineUI.Examples/res/icon/book_tabs.png | Bin 0 -> 707 bytes FineUI.Examples/res/icon/bookmark.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/bookmark_add.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/bookmark_delete.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/bookmark_edit.png | Bin 0 -> 850 bytes FineUI.Examples/res/icon/bookmark_error.png | Bin 0 -> 789 bytes FineUI.Examples/res/icon/bookmark_go.png | Bin 0 -> 800 bytes FineUI.Examples/res/icon/border_all.png | Bin 0 -> 393 bytes FineUI.Examples/res/icon/border_bottom.png | Bin 0 -> 351 bytes FineUI.Examples/res/icon/border_draw.png | Bin 0 -> 684 bytes FineUI.Examples/res/icon/border_inner.png | Bin 0 -> 382 bytes .../res/icon/border_inner_horizontal.png | Bin 0 -> 355 bytes .../res/icon/border_inner_vertical.png | Bin 0 -> 368 bytes FineUI.Examples/res/icon/border_left.png | Bin 0 -> 370 bytes FineUI.Examples/res/icon/border_none.png | Bin 0 -> 338 bytes FineUI.Examples/res/icon/border_outer.png | Bin 0 -> 392 bytes FineUI.Examples/res/icon/border_right.png | Bin 0 -> 356 bytes FineUI.Examples/res/icon/border_top.png | Bin 0 -> 352 bytes FineUI.Examples/res/icon/box.png | Bin 0 -> 555 bytes FineUI.Examples/res/icon/box_error.png | Bin 0 -> 719 bytes FineUI.Examples/res/icon/box_picture.png | Bin 0 -> 674 bytes FineUI.Examples/res/icon/box_world.png | Bin 0 -> 726 bytes FineUI.Examples/res/icon/brick.png | Bin 0 -> 452 bytes FineUI.Examples/res/icon/brick_add.png | Bin 0 -> 729 bytes FineUI.Examples/res/icon/brick_delete.png | Bin 0 -> 745 bytes FineUI.Examples/res/icon/brick_edit.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/brick_error.png | Bin 0 -> 798 bytes FineUI.Examples/res/icon/brick_go.png | Bin 0 -> 790 bytes FineUI.Examples/res/icon/brick_link.png | Bin 0 -> 764 bytes FineUI.Examples/res/icon/brick_magnify.png | Bin 0 -> 794 bytes FineUI.Examples/res/icon/bricks.png | Bin 0 -> 825 bytes FineUI.Examples/res/icon/briefcase.png | Bin 0 -> 793 bytes FineUI.Examples/res/icon/bug.png | Bin 0 -> 774 bytes FineUI.Examples/res/icon/bug_add.png | Bin 0 -> 806 bytes FineUI.Examples/res/icon/bug_delete.png | Bin 0 -> 836 bytes FineUI.Examples/res/icon/bug_edit.png | Bin 0 -> 873 bytes FineUI.Examples/res/icon/bug_error.png | Bin 0 -> 841 bytes FineUI.Examples/res/icon/bug_fix.png | Bin 0 -> 862 bytes FineUI.Examples/res/icon/bug_go.png | Bin 0 -> 831 bytes FineUI.Examples/res/icon/bug_link.png | Bin 0 -> 847 bytes FineUI.Examples/res/icon/bug_magnify.png | Bin 0 -> 852 bytes FineUI.Examples/res/icon/build.png | Bin 0 -> 773 bytes FineUI.Examples/res/icon/build_cancel.png | Bin 0 -> 837 bytes FineUI.Examples/res/icon/building.png | Bin 0 -> 556 bytes FineUI.Examples/res/icon/building_add.png | Bin 0 -> 631 bytes FineUI.Examples/res/icon/building_delete.png | Bin 0 -> 633 bytes FineUI.Examples/res/icon/building_edit.png | Bin 0 -> 731 bytes FineUI.Examples/res/icon/building_error.png | Bin 0 -> 653 bytes FineUI.Examples/res/icon/building_go.png | Bin 0 -> 665 bytes FineUI.Examples/res/icon/building_key.png | Bin 0 -> 705 bytes FineUI.Examples/res/icon/building_link.png | Bin 0 -> 668 bytes FineUI.Examples/res/icon/bullet_add.png | Bin 0 -> 286 bytes .../res/icon/bullet_arrow_bottom.png | Bin 0 -> 229 bytes .../res/icon/bullet_arrow_down.png | Bin 0 -> 201 bytes FineUI.Examples/res/icon/bullet_arrow_top.png | Bin 0 -> 230 bytes FineUI.Examples/res/icon/bullet_arrow_up.png | Bin 0 -> 201 bytes FineUI.Examples/res/icon/bullet_black.png | Bin 0 -> 211 bytes FineUI.Examples/res/icon/bullet_blue.png | Bin 0 -> 289 bytes FineUI.Examples/res/icon/bullet_connect.png | Bin 0 -> 609 bytes FineUI.Examples/res/icon/bullet_cross.png | Bin 0 -> 587 bytes FineUI.Examples/res/icon/bullet_database.png | Bin 0 -> 404 bytes .../res/icon/bullet_database_yellow.png | Bin 0 -> 443 bytes FineUI.Examples/res/icon/bullet_delete.png | Bin 0 -> 308 bytes FineUI.Examples/res/icon/bullet_disk.png | Bin 0 -> 483 bytes FineUI.Examples/res/icon/bullet_earth.png | Bin 0 -> 422 bytes FineUI.Examples/res/icon/bullet_edit.png | Bin 0 -> 592 bytes FineUI.Examples/res/icon/bullet_eject.png | Bin 0 -> 797 bytes FineUI.Examples/res/icon/bullet_error.png | Bin 0 -> 454 bytes FineUI.Examples/res/icon/bullet_feed.png | Bin 0 -> 262 bytes FineUI.Examples/res/icon/bullet_get.png | Bin 0 -> 417 bytes FineUI.Examples/res/icon/bullet_go.png | Bin 0 -> 410 bytes FineUI.Examples/res/icon/bullet_green.png | Bin 0 -> 295 bytes FineUI.Examples/res/icon/bullet_home.png | Bin 0 -> 534 bytes FineUI.Examples/res/icon/bullet_key.png | Bin 0 -> 436 bytes FineUI.Examples/res/icon/bullet_left.png | Bin 0 -> 349 bytes FineUI.Examples/res/icon/bullet_lightning.png | Bin 0 -> 574 bytes FineUI.Examples/res/icon/bullet_magnify.png | Bin 0 -> 409 bytes FineUI.Examples/res/icon/bullet_minus.png | Bin 0 -> 224 bytes FineUI.Examples/res/icon/bullet_orange.png | Bin 0 -> 283 bytes .../res/icon/bullet_page_white.png | Bin 0 -> 258 bytes FineUI.Examples/res/icon/bullet_picture.png | Bin 0 -> 470 bytes FineUI.Examples/res/icon/bullet_pink.png | Bin 0 -> 286 bytes FineUI.Examples/res/icon/bullet_plus.png | Bin 0 -> 305 bytes FineUI.Examples/res/icon/bullet_purple.png | Bin 0 -> 294 bytes FineUI.Examples/res/icon/bullet_red.png | Bin 0 -> 287 bytes FineUI.Examples/res/icon/bullet_right.png | Bin 0 -> 355 bytes FineUI.Examples/res/icon/bullet_shape.png | Bin 0 -> 440 bytes FineUI.Examples/res/icon/bullet_sparkle.png | Bin 0 -> 459 bytes FineUI.Examples/res/icon/bullet_star.png | Bin 0 -> 331 bytes FineUI.Examples/res/icon/bullet_start.png | Bin 0 -> 448 bytes FineUI.Examples/res/icon/bullet_stop.png | Bin 0 -> 449 bytes FineUI.Examples/res/icon/bullet_stop_alt.png | Bin 0 -> 272 bytes FineUI.Examples/res/icon/bullet_tick.png | Bin 0 -> 419 bytes .../res/icon/bullet_toggle_minus.png | Bin 0 -> 207 bytes .../res/icon/bullet_toggle_plus.png | Bin 0 -> 209 bytes FineUI.Examples/res/icon/bullet_white.png | Bin 0 -> 201 bytes FineUI.Examples/res/icon/bullet_wrench.png | Bin 0 -> 448 bytes .../res/icon/bullet_wrench_red.png | Bin 0 -> 471 bytes FineUI.Examples/res/icon/bullet_yellow.png | Bin 0 -> 287 bytes FineUI.Examples/res/icon/button.png | Bin 0 -> 211 bytes FineUI.Examples/res/icon/cake.png | Bin 0 -> 676 bytes FineUI.Examples/res/icon/cake_out.png | Bin 0 -> 720 bytes FineUI.Examples/res/icon/cake_sliced.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/calculator.png | Bin 0 -> 543 bytes FineUI.Examples/res/icon/calculator_add.png | Bin 0 -> 660 bytes .../res/icon/calculator_delete.png | Bin 0 -> 692 bytes FineUI.Examples/res/icon/calculator_edit.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/calculator_error.png | Bin 0 -> 731 bytes FineUI.Examples/res/icon/calculator_link.png | Bin 0 -> 723 bytes FineUI.Examples/res/icon/calendar.png | Bin 0 -> 675 bytes FineUI.Examples/res/icon/calendar_add.png | Bin 0 -> 723 bytes FineUI.Examples/res/icon/calendar_delete.png | Bin 0 -> 742 bytes FineUI.Examples/res/icon/calendar_edit.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/calendar_link.png | Bin 0 -> 795 bytes .../res/icon/calendar_select_day.png | Bin 0 -> 675 bytes .../res/icon/calendar_select_none.png | Bin 0 -> 657 bytes .../res/icon/calendar_select_week.png | Bin 0 -> 656 bytes FineUI.Examples/res/icon/calendar_star.png | Bin 0 -> 751 bytes .../res/icon/calendar_view_day.png | Bin 0 -> 572 bytes .../res/icon/calendar_view_month.png | Bin 0 -> 595 bytes .../res/icon/calendar_view_week.png | Bin 0 -> 480 bytes FineUI.Examples/res/icon/camera.png | Bin 0 -> 665 bytes FineUI.Examples/res/icon/camera_add.png | Bin 0 -> 800 bytes FineUI.Examples/res/icon/camera_connect.png | Bin 0 -> 776 bytes FineUI.Examples/res/icon/camera_delete.png | Bin 0 -> 797 bytes FineUI.Examples/res/icon/camera_edit.png | Bin 0 -> 872 bytes FineUI.Examples/res/icon/camera_error.png | Bin 0 -> 835 bytes FineUI.Examples/res/icon/camera_go.png | Bin 0 -> 809 bytes FineUI.Examples/res/icon/camera_link.png | Bin 0 -> 839 bytes FineUI.Examples/res/icon/camera_magnify.png | Bin 0 -> 768 bytes FineUI.Examples/res/icon/camera_picture.png | Bin 0 -> 797 bytes FineUI.Examples/res/icon/camera_small.png | Bin 0 -> 489 bytes FineUI.Examples/res/icon/camera_start.png | Bin 0 -> 819 bytes FineUI.Examples/res/icon/camera_stop.png | Bin 0 -> 799 bytes FineUI.Examples/res/icon/cancel.png | Bin 0 -> 587 bytes FineUI.Examples/res/icon/car.png | Bin 0 -> 610 bytes FineUI.Examples/res/icon/car_add.png | Bin 0 -> 677 bytes FineUI.Examples/res/icon/car_delete.png | Bin 0 -> 689 bytes FineUI.Examples/res/icon/car_error.png | Bin 0 -> 729 bytes FineUI.Examples/res/icon/car_red.png | Bin 0 -> 605 bytes FineUI.Examples/res/icon/car_start.png | Bin 0 -> 741 bytes FineUI.Examples/res/icon/car_stop.png | Bin 0 -> 724 bytes FineUI.Examples/res/icon/cart.png | Bin 0 -> 421 bytes FineUI.Examples/res/icon/cart_add.png | Bin 0 -> 711 bytes FineUI.Examples/res/icon/cart_delete.png | Bin 0 -> 742 bytes FineUI.Examples/res/icon/cart_edit.png | Bin 0 -> 789 bytes FineUI.Examples/res/icon/cart_error.png | Bin 0 -> 790 bytes FineUI.Examples/res/icon/cart_full.png | Bin 0 -> 725 bytes FineUI.Examples/res/icon/cart_go.png | Bin 0 -> 763 bytes FineUI.Examples/res/icon/cart_magnify.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/cart_put.png | Bin 0 -> 763 bytes FineUI.Examples/res/icon/cart_remove.png | Bin 0 -> 769 bytes FineUI.Examples/res/icon/cd.png | Bin 0 -> 673 bytes FineUI.Examples/res/icon/cd_add.png | Bin 0 -> 758 bytes FineUI.Examples/res/icon/cd_burn.png | Bin 0 -> 756 bytes FineUI.Examples/res/icon/cd_delete.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/cd_edit.png | Bin 0 -> 790 bytes FineUI.Examples/res/icon/cd_eject.png | Bin 0 -> 786 bytes FineUI.Examples/res/icon/cd_go.png | Bin 0 -> 793 bytes FineUI.Examples/res/icon/cd_magnify.png | Bin 0 -> 872 bytes FineUI.Examples/res/icon/cd_play.png | Bin 0 -> 861 bytes FineUI.Examples/res/icon/cd_stop.png | Bin 0 -> 881 bytes FineUI.Examples/res/icon/cd_stop_alt.png | Bin 0 -> 841 bytes FineUI.Examples/res/icon/cd_tick.png | Bin 0 -> 868 bytes FineUI.Examples/res/icon/cdr.png | Bin 0 -> 796 bytes FineUI.Examples/res/icon/cdr_add.png | Bin 0 -> 860 bytes FineUI.Examples/res/icon/cdr_burn.png | Bin 0 -> 869 bytes FineUI.Examples/res/icon/cdr_cross.png | Bin 0 -> 911 bytes FineUI.Examples/res/icon/cdr_delete.png | Bin 0 -> 858 bytes FineUI.Examples/res/icon/cdr_edit.png | Bin 0 -> 893 bytes FineUI.Examples/res/icon/cdr_eject.png | Bin 0 -> 857 bytes FineUI.Examples/res/icon/cdr_error.png | Bin 0 -> 882 bytes FineUI.Examples/res/icon/cdr_go.png | Bin 0 -> 866 bytes FineUI.Examples/res/icon/cdr_magnify.png | Bin 0 -> 879 bytes FineUI.Examples/res/icon/cdr_play.png | Bin 0 -> 842 bytes FineUI.Examples/res/icon/cdr_start.png | Bin 0 -> 891 bytes FineUI.Examples/res/icon/cdr_stop.png | Bin 0 -> 867 bytes FineUI.Examples/res/icon/cdr_stop_alt.png | Bin 0 -> 837 bytes FineUI.Examples/res/icon/cdr_tick.png | Bin 0 -> 857 bytes FineUI.Examples/res/icon/chart_bar.png | Bin 0 -> 541 bytes FineUI.Examples/res/icon/chart_bar_add.png | Bin 0 -> 626 bytes FineUI.Examples/res/icon/chart_bar_delete.png | Bin 0 -> 636 bytes FineUI.Examples/res/icon/chart_bar_edit.png | Bin 0 -> 754 bytes FineUI.Examples/res/icon/chart_bar_error.png | Bin 0 -> 671 bytes FineUI.Examples/res/icon/chart_bar_link.png | Bin 0 -> 712 bytes FineUI.Examples/res/icon/chart_curve.png | Bin 0 -> 710 bytes FineUI.Examples/res/icon/chart_curve_add.png | Bin 0 -> 761 bytes .../res/icon/chart_curve_delete.png | Bin 0 -> 782 bytes FineUI.Examples/res/icon/chart_curve_edit.png | Bin 0 -> 822 bytes .../res/icon/chart_curve_error.png | Bin 0 -> 837 bytes FineUI.Examples/res/icon/chart_curve_go.png | Bin 0 -> 823 bytes FineUI.Examples/res/icon/chart_curve_link.png | Bin 0 -> 829 bytes FineUI.Examples/res/icon/chart_line.png | Bin 0 -> 526 bytes FineUI.Examples/res/icon/chart_line_add.png | Bin 0 -> 655 bytes .../res/icon/chart_line_delete.png | Bin 0 -> 675 bytes FineUI.Examples/res/icon/chart_line_edit.png | Bin 0 -> 718 bytes FineUI.Examples/res/icon/chart_line_error.png | Bin 0 -> 741 bytes FineUI.Examples/res/icon/chart_line_link.png | Bin 0 -> 749 bytes .../res/icon/chart_org_inverted.png | Bin 0 -> 479 bytes .../res/icon/chart_organisation.png | Bin 0 -> 444 bytes .../res/icon/chart_organisation_add.png | Bin 0 -> 551 bytes .../res/icon/chart_organisation_delete.png | Bin 0 -> 563 bytes FineUI.Examples/res/icon/chart_pie.png | Bin 0 -> 918 bytes FineUI.Examples/res/icon/chart_pie_add.png | Bin 0 -> 975 bytes FineUI.Examples/res/icon/chart_pie_delete.png | Bin 0 -> 983 bytes FineUI.Examples/res/icon/chart_pie_edit.png | Bin 0 -> 986 bytes FineUI.Examples/res/icon/chart_pie_error.png | Bin 0 -> 989 bytes .../res/icon/chart_pie_lightning.png | Bin 0 -> 956 bytes FineUI.Examples/res/icon/chart_pie_link.png | Bin 0 -> 1021 bytes FineUI.Examples/res/icon/check_error.png | Bin 0 -> 798 bytes FineUI.Examples/res/icon/clipboard.png | Bin 0 -> 534 bytes FineUI.Examples/res/icon/clock.png | Bin 0 -> 882 bytes FineUI.Examples/res/icon/clock_add.png | Bin 0 -> 925 bytes FineUI.Examples/res/icon/clock_delete.png | Bin 0 -> 952 bytes FineUI.Examples/res/icon/clock_edit.png | Bin 0 -> 967 bytes FineUI.Examples/res/icon/clock_error.png | Bin 0 -> 953 bytes FineUI.Examples/res/icon/clock_go.png | Bin 0 -> 959 bytes FineUI.Examples/res/icon/clock_link.png | Bin 0 -> 961 bytes FineUI.Examples/res/icon/clock_pause.png | Bin 0 -> 927 bytes FineUI.Examples/res/icon/clock_play.png | Bin 0 -> 943 bytes FineUI.Examples/res/icon/clock_red.png | Bin 0 -> 889 bytes FineUI.Examples/res/icon/clock_start.png | Bin 0 -> 1006 bytes FineUI.Examples/res/icon/clock_stop.png | Bin 0 -> 922 bytes FineUI.Examples/res/icon/clock_stop_2.png | Bin 0 -> 980 bytes FineUI.Examples/res/icon/cmy.png | Bin 0 -> 540 bytes FineUI.Examples/res/icon/cog.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/cog_add.png | Bin 0 -> 814 bytes FineUI.Examples/res/icon/cog_delete.png | Bin 0 -> 847 bytes FineUI.Examples/res/icon/cog_edit.png | Bin 0 -> 865 bytes FineUI.Examples/res/icon/cog_error.png | Bin 0 -> 869 bytes FineUI.Examples/res/icon/cog_go.png | Bin 0 -> 859 bytes FineUI.Examples/res/icon/cog_start.png | Bin 0 -> 891 bytes FineUI.Examples/res/icon/cog_stop.png | Bin 0 -> 859 bytes FineUI.Examples/res/icon/coins.png | Bin 0 -> 732 bytes FineUI.Examples/res/icon/coins_add.png | Bin 0 -> 789 bytes FineUI.Examples/res/icon/coins_delete.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/color.png | Bin 0 -> 492 bytes FineUI.Examples/res/icon/color_swatch.png | Bin 0 -> 209 bytes FineUI.Examples/res/icon/color_wheel.png | Bin 0 -> 892 bytes FineUI.Examples/res/icon/comment.png | Bin 0 -> 413 bytes FineUI.Examples/res/icon/comment_add.png | Bin 0 -> 530 bytes FineUI.Examples/res/icon/comment_delete.png | Bin 0 -> 548 bytes FineUI.Examples/res/icon/comment_dull.png | Bin 0 -> 506 bytes FineUI.Examples/res/icon/comment_edit.png | Bin 0 -> 644 bytes FineUI.Examples/res/icon/comment_play.png | Bin 0 -> 613 bytes FineUI.Examples/res/icon/comment_record.png | Bin 0 -> 599 bytes FineUI.Examples/res/icon/comments.png | Bin 0 -> 557 bytes FineUI.Examples/res/icon/comments_add.png | Bin 0 -> 648 bytes FineUI.Examples/res/icon/comments_delete.png | Bin 0 -> 670 bytes FineUI.Examples/res/icon/compass.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/compress.png | Bin 0 -> 766 bytes FineUI.Examples/res/icon/computer.png | Bin 0 -> 667 bytes FineUI.Examples/res/icon/computer_add.png | Bin 0 -> 781 bytes FineUI.Examples/res/icon/computer_connect.png | Bin 0 -> 802 bytes FineUI.Examples/res/icon/computer_delete.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/computer_edit.png | Bin 0 -> 792 bytes FineUI.Examples/res/icon/computer_error.png | Bin 0 -> 784 bytes FineUI.Examples/res/icon/computer_go.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/computer_key.png | Bin 0 -> 771 bytes FineUI.Examples/res/icon/computer_link.png | Bin 0 -> 792 bytes FineUI.Examples/res/icon/computer_magnify.png | Bin 0 -> 766 bytes FineUI.Examples/res/icon/computer_off.png | Bin 0 -> 657 bytes FineUI.Examples/res/icon/computer_start.png | Bin 0 -> 814 bytes FineUI.Examples/res/icon/computer_stop.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/computer_wrench.png | Bin 0 -> 765 bytes FineUI.Examples/res/icon/connect.png | Bin 0 -> 748 bytes FineUI.Examples/res/icon/contrast.png | Bin 0 -> 434 bytes .../res/icon/contrast_decrease.png | Bin 0 -> 695 bytes FineUI.Examples/res/icon/contrast_high.png | Bin 0 -> 435 bytes .../res/icon/contrast_increase.png | Bin 0 -> 717 bytes FineUI.Examples/res/icon/contrast_low.png | Bin 0 -> 421 bytes FineUI.Examples/res/icon/control_add.png | Bin 0 -> 623 bytes FineUI.Examples/res/icon/control_add_blue.png | Bin 0 -> 819 bytes FineUI.Examples/res/icon/control_blank.png | Bin 0 -> 578 bytes .../res/icon/control_blank_blue.png | Bin 0 -> 759 bytes FineUI.Examples/res/icon/control_eject.png | Bin 0 -> 603 bytes .../res/icon/control_eject_blue.png | Bin 0 -> 727 bytes FineUI.Examples/res/icon/control_end.png | Bin 0 -> 621 bytes FineUI.Examples/res/icon/control_end_blue.png | Bin 0 -> 737 bytes .../res/icon/control_equalizer.png | Bin 0 -> 432 bytes .../res/icon/control_equalizer_blue.png | Bin 0 -> 764 bytes .../res/icon/control_fastforward.png | Bin 0 -> 607 bytes .../res/icon/control_fastforward_blue.png | Bin 0 -> 736 bytes FineUI.Examples/res/icon/control_pause.png | Bin 0 -> 598 bytes .../res/icon/control_pause_blue.png | Bin 0 -> 721 bytes FineUI.Examples/res/icon/control_play.png | Bin 0 -> 592 bytes .../res/icon/control_play_blue.png | Bin 0 -> 717 bytes FineUI.Examples/res/icon/control_power.png | Bin 0 -> 679 bytes .../res/icon/control_power_blue.png | Bin 0 -> 831 bytes FineUI.Examples/res/icon/control_record.png | Bin 0 -> 661 bytes .../res/icon/control_record_blue.png | Bin 0 -> 826 bytes FineUI.Examples/res/icon/control_remove.png | Bin 0 -> 597 bytes .../res/icon/control_remove_blue.png | Bin 0 -> 785 bytes FineUI.Examples/res/icon/control_repeat.png | Bin 0 -> 422 bytes .../res/icon/control_repeat_blue.png | Bin 0 -> 750 bytes FineUI.Examples/res/icon/control_rewind.png | Bin 0 -> 614 bytes .../res/icon/control_rewind_blue.png | Bin 0 -> 745 bytes FineUI.Examples/res/icon/control_start.png | Bin 0 -> 604 bytes .../res/icon/control_start_blue.png | Bin 0 -> 720 bytes FineUI.Examples/res/icon/control_stop.png | Bin 0 -> 403 bytes .../res/icon/control_stop_blue.png | Bin 0 -> 695 bytes FineUI.Examples/res/icon/controller.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/controller_add.png | Bin 0 -> 759 bytes .../res/icon/controller_delete.png | Bin 0 -> 770 bytes FineUI.Examples/res/icon/controller_error.png | Bin 0 -> 815 bytes FineUI.Examples/res/icon/creditcards.png | Bin 0 -> 693 bytes FineUI.Examples/res/icon/cross.png | Bin 0 -> 655 bytes FineUI.Examples/res/icon/css.png | Bin 0 -> 524 bytes FineUI.Examples/res/icon/css_add.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/css_delete.png | Bin 0 -> 654 bytes FineUI.Examples/res/icon/css_error.png | Bin 0 -> 668 bytes FineUI.Examples/res/icon/css_go.png | Bin 0 -> 655 bytes FineUI.Examples/res/icon/css_valid.png | Bin 0 -> 661 bytes FineUI.Examples/res/icon/cup.png | Bin 0 -> 633 bytes FineUI.Examples/res/icon/cup_add.png | Bin 0 -> 715 bytes FineUI.Examples/res/icon/cup_black.png | Bin 0 -> 650 bytes FineUI.Examples/res/icon/cup_delete.png | Bin 0 -> 731 bytes FineUI.Examples/res/icon/cup_edit.png | Bin 0 -> 778 bytes FineUI.Examples/res/icon/cup_error.png | Bin 0 -> 790 bytes FineUI.Examples/res/icon/cup_go.png | Bin 0 -> 780 bytes FineUI.Examples/res/icon/cup_green.png | Bin 0 -> 664 bytes FineUI.Examples/res/icon/cup_key.png | Bin 0 -> 776 bytes FineUI.Examples/res/icon/cup_link.png | Bin 0 -> 760 bytes FineUI.Examples/res/icon/cup_tea.png | Bin 0 -> 661 bytes FineUI.Examples/res/icon/cursor.png | Bin 0 -> 354 bytes FineUI.Examples/res/icon/cursor_small.png | Bin 0 -> 331 bytes FineUI.Examples/res/icon/cut.png | Bin 0 -> 648 bytes FineUI.Examples/res/icon/cut_red.png | Bin 0 -> 650 bytes FineUI.Examples/res/icon/database.png | Bin 0 -> 390 bytes FineUI.Examples/res/icon/database_add.png | Bin 0 -> 658 bytes FineUI.Examples/res/icon/database_connect.png | Bin 0 -> 763 bytes FineUI.Examples/res/icon/database_copy.png | Bin 0 -> 759 bytes FineUI.Examples/res/icon/database_delete.png | Bin 0 -> 659 bytes FineUI.Examples/res/icon/database_edit.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/database_error.png | Bin 0 -> 682 bytes FineUI.Examples/res/icon/database_gear.png | Bin 0 -> 468 bytes FineUI.Examples/res/icon/database_go.png | Bin 0 -> 698 bytes FineUI.Examples/res/icon/database_key.png | Bin 0 -> 764 bytes .../res/icon/database_lightning.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/database_link.png | Bin 0 -> 679 bytes FineUI.Examples/res/icon/database_refresh.png | Bin 0 -> 770 bytes FineUI.Examples/res/icon/database_save.png | Bin 0 -> 755 bytes FineUI.Examples/res/icon/database_start.png | Bin 0 -> 721 bytes FineUI.Examples/res/icon/database_stop.png | Bin 0 -> 695 bytes FineUI.Examples/res/icon/database_table.png | Bin 0 -> 726 bytes FineUI.Examples/res/icon/database_wrench.png | Bin 0 -> 690 bytes FineUI.Examples/res/icon/database_yellow.png | Bin 0 -> 642 bytes .../res/icon/database_yellow_start.png | Bin 0 -> 768 bytes .../res/icon/database_yellow_stop.png | Bin 0 -> 748 bytes FineUI.Examples/res/icon/date.png | Bin 0 -> 626 bytes FineUI.Examples/res/icon/date_add.png | Bin 0 -> 703 bytes FineUI.Examples/res/icon/date_delete.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/date_edit.png | Bin 0 -> 799 bytes FineUI.Examples/res/icon/date_error.png | Bin 0 -> 753 bytes FineUI.Examples/res/icon/date_go.png | Bin 0 -> 753 bytes FineUI.Examples/res/icon/date_link.png | Bin 0 -> 764 bytes FineUI.Examples/res/icon/date_magnify.png | Bin 0 -> 711 bytes FineUI.Examples/res/icon/date_next.png | Bin 0 -> 688 bytes FineUI.Examples/res/icon/date_previous.png | Bin 0 -> 720 bytes FineUI.Examples/res/icon/decline.png | Bin 0 -> 781 bytes FineUI.Examples/res/icon/delete.png | Bin 0 -> 715 bytes FineUI.Examples/res/icon/device_stylus.png | Bin 0 -> 580 bytes FineUI.Examples/res/icon/disconnect.png | Bin 0 -> 796 bytes FineUI.Examples/res/icon/disk.png | Bin 0 -> 620 bytes FineUI.Examples/res/icon/disk_black.png | Bin 0 -> 591 bytes FineUI.Examples/res/icon/disk_black_error.png | Bin 0 -> 794 bytes .../res/icon/disk_black_magnify.png | Bin 0 -> 740 bytes FineUI.Examples/res/icon/disk_download.png | Bin 0 -> 636 bytes FineUI.Examples/res/icon/disk_edit.png | Bin 0 -> 857 bytes FineUI.Examples/res/icon/disk_error.png | Bin 0 -> 808 bytes FineUI.Examples/res/icon/disk_magnify.png | Bin 0 -> 771 bytes FineUI.Examples/res/icon/disk_multiple.png | Bin 0 -> 691 bytes FineUI.Examples/res/icon/disk_upload.png | Bin 0 -> 628 bytes FineUI.Examples/res/icon/door.png | Bin 0 -> 412 bytes FineUI.Examples/res/icon/door_error.png | Bin 0 -> 595 bytes FineUI.Examples/res/icon/door_in.png | Bin 0 -> 693 bytes FineUI.Examples/res/icon/door_open.png | Bin 0 -> 508 bytes FineUI.Examples/res/icon/door_out.png | Bin 0 -> 688 bytes FineUI.Examples/res/icon/drink.png | Bin 0 -> 692 bytes FineUI.Examples/res/icon/drink_empty.png | Bin 0 -> 433 bytes FineUI.Examples/res/icon/drink_red.png | Bin 0 -> 733 bytes FineUI.Examples/res/icon/drive.png | Bin 0 -> 346 bytes FineUI.Examples/res/icon/drive_add.png | Bin 0 -> 623 bytes FineUI.Examples/res/icon/drive_burn.png | Bin 0 -> 608 bytes FineUI.Examples/res/icon/drive_cd.png | Bin 0 -> 734 bytes FineUI.Examples/res/icon/drive_cd_empty.png | Bin 0 -> 341 bytes FineUI.Examples/res/icon/drive_cdr.png | Bin 0 -> 751 bytes FineUI.Examples/res/icon/drive_delete.png | Bin 0 -> 628 bytes FineUI.Examples/res/icon/drive_disk.png | Bin 0 -> 695 bytes FineUI.Examples/res/icon/drive_edit.png | Bin 0 -> 714 bytes FineUI.Examples/res/icon/drive_error.png | Bin 0 -> 705 bytes FineUI.Examples/res/icon/drive_go.png | Bin 0 -> 661 bytes FineUI.Examples/res/icon/drive_key.png | Bin 0 -> 681 bytes FineUI.Examples/res/icon/drive_link.png | Bin 0 -> 679 bytes FineUI.Examples/res/icon/drive_magnify.png | Bin 0 -> 641 bytes FineUI.Examples/res/icon/drive_network.png | Bin 0 -> 585 bytes .../res/icon/drive_network_error.png | Bin 0 -> 786 bytes .../res/icon/drive_network_stop.png | Bin 0 -> 723 bytes FineUI.Examples/res/icon/drive_rename.png | Bin 0 -> 494 bytes FineUI.Examples/res/icon/drive_user.png | Bin 0 -> 712 bytes FineUI.Examples/res/icon/drive_web.png | Bin 0 -> 686 bytes FineUI.Examples/res/icon/dvd.png | Bin 0 -> 764 bytes FineUI.Examples/res/icon/dvd_add.png | Bin 0 -> 788 bytes FineUI.Examples/res/icon/dvd_delete.png | Bin 0 -> 800 bytes FineUI.Examples/res/icon/dvd_edit.png | Bin 0 -> 844 bytes FineUI.Examples/res/icon/dvd_error.png | Bin 0 -> 854 bytes FineUI.Examples/res/icon/dvd_go.png | Bin 0 -> 854 bytes FineUI.Examples/res/icon/dvd_key.png | Bin 0 -> 816 bytes FineUI.Examples/res/icon/dvd_link.png | Bin 0 -> 819 bytes FineUI.Examples/res/icon/dvd_start.png | Bin 0 -> 892 bytes FineUI.Examples/res/icon/dvd_stop.png | Bin 0 -> 870 bytes FineUI.Examples/res/icon/eject_blue.png | Bin 0 -> 513 bytes FineUI.Examples/res/icon/eject_green.png | Bin 0 -> 509 bytes FineUI.Examples/res/icon/email.png | Bin 0 -> 641 bytes FineUI.Examples/res/icon/email_add.png | Bin 0 -> 761 bytes FineUI.Examples/res/icon/email_attach.png | Bin 0 -> 793 bytes FineUI.Examples/res/icon/email_delete.png | Bin 0 -> 756 bytes FineUI.Examples/res/icon/email_edit.png | Bin 0 -> 756 bytes FineUI.Examples/res/icon/email_error.png | Bin 0 -> 792 bytes FineUI.Examples/res/icon/email_go.png | Bin 0 -> 754 bytes FineUI.Examples/res/icon/email_link.png | Bin 0 -> 821 bytes FineUI.Examples/res/icon/email_magnify.png | Bin 0 -> 747 bytes FineUI.Examples/res/icon/email_open.png | Bin 0 -> 783 bytes FineUI.Examples/res/icon/email_open_image.png | Bin 0 -> 811 bytes FineUI.Examples/res/icon/email_star.png | Bin 0 -> 739 bytes FineUI.Examples/res/icon/email_start.png | Bin 0 -> 802 bytes FineUI.Examples/res/icon/email_stop.png | Bin 0 -> 778 bytes FineUI.Examples/res/icon/email_transfer.png | Bin 0 -> 817 bytes .../res/icon/emoticon_evilgrin.png | Bin 0 -> 727 bytes FineUI.Examples/res/icon/emoticon_grin.png | Bin 0 -> 714 bytes FineUI.Examples/res/icon/emoticon_happy.png | Bin 0 -> 731 bytes FineUI.Examples/res/icon/emoticon_smile.png | Bin 0 -> 725 bytes .../res/icon/emoticon_surprised.png | Bin 0 -> 741 bytes FineUI.Examples/res/icon/emoticon_tongue.png | Bin 0 -> 727 bytes FineUI.Examples/res/icon/emoticon_unhappy.png | Bin 0 -> 723 bytes FineUI.Examples/res/icon/emoticon_waii.png | Bin 0 -> 737 bytes FineUI.Examples/res/icon/emoticon_wink.png | Bin 0 -> 712 bytes FineUI.Examples/res/icon/erase.png | Bin 0 -> 585 bytes FineUI.Examples/res/icon/error.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/error_add.png | Bin 0 -> 710 bytes FineUI.Examples/res/icon/error_delete.png | Bin 0 -> 729 bytes FineUI.Examples/res/icon/error_go.png | Bin 0 -> 734 bytes FineUI.Examples/res/icon/exclamation.png | Bin 0 -> 701 bytes FineUI.Examples/res/icon/eye.png | Bin 0 -> 750 bytes FineUI.Examples/res/icon/eyes.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/feed.png | Bin 0 -> 691 bytes FineUI.Examples/res/icon/feed_add.png | Bin 0 -> 763 bytes FineUI.Examples/res/icon/feed_delete.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/feed_disk.png | Bin 0 -> 738 bytes FineUI.Examples/res/icon/feed_edit.png | Bin 0 -> 801 bytes FineUI.Examples/res/icon/feed_error.png | Bin 0 -> 770 bytes FineUI.Examples/res/icon/feed_go.png | Bin 0 -> 761 bytes FineUI.Examples/res/icon/feed_key.png | Bin 0 -> 771 bytes FineUI.Examples/res/icon/feed_link.png | Bin 0 -> 806 bytes FineUI.Examples/res/icon/feed_magnify.png | Bin 0 -> 737 bytes FineUI.Examples/res/icon/feed_star.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/female.png | Bin 0 -> 590 bytes FineUI.Examples/res/icon/film.png | Bin 0 -> 653 bytes FineUI.Examples/res/icon/film_add.png | Bin 0 -> 739 bytes FineUI.Examples/res/icon/film_delete.png | Bin 0 -> 730 bytes FineUI.Examples/res/icon/film_edit.png | Bin 0 -> 855 bytes FineUI.Examples/res/icon/film_eject.png | Bin 0 -> 759 bytes FineUI.Examples/res/icon/film_error.png | Bin 0 -> 800 bytes FineUI.Examples/res/icon/film_go.png | Bin 0 -> 813 bytes FineUI.Examples/res/icon/film_key.png | Bin 0 -> 835 bytes FineUI.Examples/res/icon/film_link.png | Bin 0 -> 830 bytes FineUI.Examples/res/icon/film_magnify.png | Bin 0 -> 761 bytes FineUI.Examples/res/icon/film_save.png | Bin 0 -> 806 bytes FineUI.Examples/res/icon/film_star.png | Bin 0 -> 748 bytes FineUI.Examples/res/icon/film_start.png | Bin 0 -> 795 bytes FineUI.Examples/res/icon/film_stop.png | Bin 0 -> 774 bytes FineUI.Examples/res/icon/find.png | Bin 0 -> 659 bytes FineUI.Examples/res/icon/finger_point.png | Bin 0 -> 642 bytes FineUI.Examples/res/icon/flag_ad.png | Bin 0 -> 643 bytes FineUI.Examples/res/icon/flag_ae.png | Bin 0 -> 408 bytes FineUI.Examples/res/icon/flag_af.png | Bin 0 -> 604 bytes FineUI.Examples/res/icon/flag_ag.png | Bin 0 -> 591 bytes FineUI.Examples/res/icon/flag_ai.png | Bin 0 -> 643 bytes FineUI.Examples/res/icon/flag_al.png | Bin 0 -> 600 bytes FineUI.Examples/res/icon/flag_am.png | Bin 0 -> 497 bytes FineUI.Examples/res/icon/flag_an.png | Bin 0 -> 488 bytes FineUI.Examples/res/icon/flag_ao.png | Bin 0 -> 428 bytes FineUI.Examples/res/icon/flag_ar.png | Bin 0 -> 506 bytes FineUI.Examples/res/icon/flag_as.png | Bin 0 -> 647 bytes FineUI.Examples/res/icon/flag_at.png | Bin 0 -> 403 bytes FineUI.Examples/res/icon/flag_au.png | Bin 0 -> 673 bytes FineUI.Examples/res/icon/flag_aw.png | Bin 0 -> 524 bytes FineUI.Examples/res/icon/flag_ax.png | Bin 0 -> 663 bytes FineUI.Examples/res/icon/flag_az.png | Bin 0 -> 589 bytes FineUI.Examples/res/icon/flag_ba.png | Bin 0 -> 593 bytes FineUI.Examples/res/icon/flag_bb.png | Bin 0 -> 585 bytes FineUI.Examples/res/icon/flag_bd.png | Bin 0 -> 504 bytes FineUI.Examples/res/icon/flag_be.png | Bin 0 -> 449 bytes FineUI.Examples/res/icon/flag_bf.png | Bin 0 -> 497 bytes FineUI.Examples/res/icon/flag_bg.png | Bin 0 -> 462 bytes FineUI.Examples/res/icon/flag_bh.png | Bin 0 -> 457 bytes FineUI.Examples/res/icon/flag_bi.png | Bin 0 -> 675 bytes FineUI.Examples/res/icon/flag_bj.png | Bin 0 -> 486 bytes FineUI.Examples/res/icon/flag_black.png | Bin 0 -> 670 bytes FineUI.Examples/res/icon/flag_blue.png | Bin 0 -> 671 bytes FineUI.Examples/res/icon/flag_bm.png | Bin 0 -> 611 bytes FineUI.Examples/res/icon/flag_bn.png | Bin 0 -> 639 bytes FineUI.Examples/res/icon/flag_bo.png | Bin 0 -> 500 bytes FineUI.Examples/res/icon/flag_br.png | Bin 0 -> 593 bytes FineUI.Examples/res/icon/flag_bs.png | Bin 0 -> 526 bytes FineUI.Examples/res/icon/flag_bt.png | Bin 0 -> 631 bytes FineUI.Examples/res/icon/flag_bv.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/flag_bw.png | Bin 0 -> 443 bytes FineUI.Examples/res/icon/flag_by.png | Bin 0 -> 514 bytes FineUI.Examples/res/icon/flag_bz.png | Bin 0 -> 600 bytes FineUI.Examples/res/icon/flag_ca.png | Bin 0 -> 628 bytes FineUI.Examples/res/icon/flag_catalonia.png | Bin 0 -> 398 bytes FineUI.Examples/res/icon/flag_cc.png | Bin 0 -> 625 bytes FineUI.Examples/res/icon/flag_cd.png | Bin 0 -> 528 bytes FineUI.Examples/res/icon/flag_cf.png | Bin 0 -> 614 bytes FineUI.Examples/res/icon/flag_cg.png | Bin 0 -> 521 bytes FineUI.Examples/res/icon/flag_ch.png | Bin 0 -> 367 bytes FineUI.Examples/res/icon/flag_checked.png | Bin 0 -> 702 bytes FineUI.Examples/res/icon/flag_ci.png | Bin 0 -> 453 bytes FineUI.Examples/res/icon/flag_ck.png | Bin 0 -> 586 bytes FineUI.Examples/res/icon/flag_cl.png | Bin 0 -> 450 bytes FineUI.Examples/res/icon/flag_cm.png | Bin 0 -> 525 bytes FineUI.Examples/res/icon/flag_cn.png | Bin 0 -> 472 bytes FineUI.Examples/res/icon/flag_co.png | Bin 0 -> 483 bytes FineUI.Examples/res/icon/flag_cr.png | Bin 0 -> 477 bytes FineUI.Examples/res/icon/flag_cs.png | Bin 0 -> 439 bytes FineUI.Examples/res/icon/flag_cu.png | Bin 0 -> 563 bytes FineUI.Examples/res/icon/flag_cv.png | Bin 0 -> 529 bytes FineUI.Examples/res/icon/flag_cx.png | Bin 0 -> 608 bytes FineUI.Examples/res/icon/flag_cy.png | Bin 0 -> 428 bytes FineUI.Examples/res/icon/flag_cz.png | Bin 0 -> 476 bytes FineUI.Examples/res/icon/flag_de.png | Bin 0 -> 545 bytes FineUI.Examples/res/icon/flag_dj.png | Bin 0 -> 572 bytes FineUI.Examples/res/icon/flag_dk.png | Bin 0 -> 495 bytes FineUI.Examples/res/icon/flag_dm.png | Bin 0 -> 620 bytes FineUI.Examples/res/icon/flag_do.png | Bin 0 -> 508 bytes FineUI.Examples/res/icon/flag_dz.png | Bin 0 -> 582 bytes FineUI.Examples/res/icon/flag_ec.png | Bin 0 -> 500 bytes FineUI.Examples/res/icon/flag_ee.png | Bin 0 -> 429 bytes FineUI.Examples/res/icon/flag_eg.png | Bin 0 -> 465 bytes FineUI.Examples/res/icon/flag_eh.png | Bin 0 -> 508 bytes FineUI.Examples/res/icon/flag_england.png | Bin 0 -> 496 bytes FineUI.Examples/res/icon/flag_er.png | Bin 0 -> 653 bytes FineUI.Examples/res/icon/flag_es.png | Bin 0 -> 469 bytes FineUI.Examples/res/icon/flag_et.png | Bin 0 -> 592 bytes .../res/icon/flag_europeanunion.png | Bin 0 -> 479 bytes FineUI.Examples/res/icon/flag_fam.png | Bin 0 -> 532 bytes FineUI.Examples/res/icon/flag_fi.png | Bin 0 -> 489 bytes FineUI.Examples/res/icon/flag_fj.png | Bin 0 -> 610 bytes FineUI.Examples/res/icon/flag_fk.png | Bin 0 -> 648 bytes FineUI.Examples/res/icon/flag_fm.png | Bin 0 -> 552 bytes FineUI.Examples/res/icon/flag_fo.png | Bin 0 -> 474 bytes FineUI.Examples/res/icon/flag_fr.png | Bin 0 -> 545 bytes FineUI.Examples/res/icon/flag_france.png | Bin 0 -> 707 bytes FineUI.Examples/res/icon/flag_ga.png | Bin 0 -> 489 bytes FineUI.Examples/res/icon/flag_gb.png | Bin 0 -> 599 bytes FineUI.Examples/res/icon/flag_gd.png | Bin 0 -> 637 bytes FineUI.Examples/res/icon/flag_ge.png | Bin 0 -> 594 bytes FineUI.Examples/res/icon/flag_gf.png | Bin 0 -> 545 bytes FineUI.Examples/res/icon/flag_gg.png | Bin 0 -> 887 bytes FineUI.Examples/res/icon/flag_gh.png | Bin 0 -> 490 bytes FineUI.Examples/res/icon/flag_gi.png | Bin 0 -> 463 bytes FineUI.Examples/res/icon/flag_gl.png | Bin 0 -> 470 bytes FineUI.Examples/res/icon/flag_gm.png | Bin 0 -> 493 bytes FineUI.Examples/res/icon/flag_gn.png | Bin 0 -> 480 bytes FineUI.Examples/res/icon/flag_gp.png | Bin 0 -> 488 bytes FineUI.Examples/res/icon/flag_gq.png | Bin 0 -> 537 bytes FineUI.Examples/res/icon/flag_gr.png | Bin 0 -> 487 bytes FineUI.Examples/res/icon/flag_green.png | Bin 0 -> 672 bytes FineUI.Examples/res/icon/flag_grey.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/flag_gs.png | Bin 0 -> 630 bytes FineUI.Examples/res/icon/flag_gt.png | Bin 0 -> 493 bytes FineUI.Examples/res/icon/flag_gu.png | Bin 0 -> 509 bytes FineUI.Examples/res/icon/flag_gw.png | Bin 0 -> 516 bytes FineUI.Examples/res/icon/flag_gy.png | Bin 0 -> 645 bytes FineUI.Examples/res/icon/flag_hk.png | Bin 0 -> 527 bytes FineUI.Examples/res/icon/flag_hm.png | Bin 0 -> 673 bytes FineUI.Examples/res/icon/flag_hn.png | Bin 0 -> 537 bytes FineUI.Examples/res/icon/flag_hr.png | Bin 0 -> 524 bytes FineUI.Examples/res/icon/flag_ht.png | Bin 0 -> 487 bytes FineUI.Examples/res/icon/flag_hu.png | Bin 0 -> 432 bytes FineUI.Examples/res/icon/flag_id.png | Bin 0 -> 430 bytes FineUI.Examples/res/icon/flag_ie.png | Bin 0 -> 481 bytes FineUI.Examples/res/icon/flag_il.png | Bin 0 -> 431 bytes FineUI.Examples/res/icon/flag_in.png | Bin 0 -> 503 bytes FineUI.Examples/res/icon/flag_io.png | Bin 0 -> 658 bytes FineUI.Examples/res/icon/flag_iq.png | Bin 0 -> 515 bytes FineUI.Examples/res/icon/flag_ir.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/flag_is.png | Bin 0 -> 532 bytes FineUI.Examples/res/icon/flag_it.png | Bin 0 -> 420 bytes FineUI.Examples/res/icon/flag_jm.png | Bin 0 -> 637 bytes FineUI.Examples/res/icon/flag_jo.png | Bin 0 -> 473 bytes FineUI.Examples/res/icon/flag_jp.png | Bin 0 -> 420 bytes FineUI.Examples/res/icon/flag_ke.png | Bin 0 -> 569 bytes FineUI.Examples/res/icon/flag_kg.png | Bin 0 -> 510 bytes FineUI.Examples/res/icon/flag_kh.png | Bin 0 -> 549 bytes FineUI.Examples/res/icon/flag_ki.png | Bin 0 -> 656 bytes FineUI.Examples/res/icon/flag_km.png | Bin 0 -> 577 bytes FineUI.Examples/res/icon/flag_kn.png | Bin 0 -> 604 bytes FineUI.Examples/res/icon/flag_kp.png | Bin 0 -> 561 bytes FineUI.Examples/res/icon/flag_kr.png | Bin 0 -> 592 bytes FineUI.Examples/res/icon/flag_kw.png | Bin 0 -> 486 bytes FineUI.Examples/res/icon/flag_ky.png | Bin 0 -> 643 bytes FineUI.Examples/res/icon/flag_kz.png | Bin 0 -> 616 bytes FineUI.Examples/res/icon/flag_la.png | Bin 0 -> 563 bytes FineUI.Examples/res/icon/flag_lb.png | Bin 0 -> 517 bytes FineUI.Examples/res/icon/flag_lc.png | Bin 0 -> 520 bytes FineUI.Examples/res/icon/flag_li.png | Bin 0 -> 537 bytes FineUI.Examples/res/icon/flag_lk.png | Bin 0 -> 627 bytes FineUI.Examples/res/icon/flag_lr.png | Bin 0 -> 466 bytes FineUI.Examples/res/icon/flag_ls.png | Bin 0 -> 628 bytes FineUI.Examples/res/icon/flag_lt.png | Bin 0 -> 508 bytes FineUI.Examples/res/icon/flag_lu.png | Bin 0 -> 481 bytes FineUI.Examples/res/icon/flag_lv.png | Bin 0 -> 465 bytes FineUI.Examples/res/icon/flag_ly.png | Bin 0 -> 419 bytes FineUI.Examples/res/icon/flag_ma.png | Bin 0 -> 432 bytes FineUI.Examples/res/icon/flag_mc.png | Bin 0 -> 380 bytes FineUI.Examples/res/icon/flag_md.png | Bin 0 -> 566 bytes FineUI.Examples/res/icon/flag_me.png | Bin 0 -> 448 bytes FineUI.Examples/res/icon/flag_mg.png | Bin 0 -> 453 bytes FineUI.Examples/res/icon/flag_mh.png | Bin 0 -> 628 bytes FineUI.Examples/res/icon/flag_mk.png | Bin 0 -> 664 bytes FineUI.Examples/res/icon/flag_ml.png | Bin 0 -> 474 bytes FineUI.Examples/res/icon/flag_mm.png | Bin 0 -> 483 bytes FineUI.Examples/res/icon/flag_mn.png | Bin 0 -> 492 bytes FineUI.Examples/res/icon/flag_mo.png | Bin 0 -> 588 bytes FineUI.Examples/res/icon/flag_mp.png | Bin 0 -> 597 bytes FineUI.Examples/res/icon/flag_mq.png | Bin 0 -> 655 bytes FineUI.Examples/res/icon/flag_mr.png | Bin 0 -> 569 bytes FineUI.Examples/res/icon/flag_ms.png | Bin 0 -> 614 bytes FineUI.Examples/res/icon/flag_mt.png | Bin 0 -> 420 bytes FineUI.Examples/res/icon/flag_mu.png | Bin 0 -> 496 bytes FineUI.Examples/res/icon/flag_mv.png | Bin 0 -> 542 bytes FineUI.Examples/res/icon/flag_mw.png | Bin 0 -> 529 bytes FineUI.Examples/res/icon/flag_mx.png | Bin 0 -> 574 bytes FineUI.Examples/res/icon/flag_my.png | Bin 0 -> 571 bytes FineUI.Examples/res/icon/flag_mz.png | Bin 0 -> 584 bytes FineUI.Examples/res/icon/flag_na.png | Bin 0 -> 647 bytes FineUI.Examples/res/icon/flag_nc.png | Bin 0 -> 591 bytes FineUI.Examples/res/icon/flag_ne.png | Bin 0 -> 537 bytes FineUI.Examples/res/icon/flag_nf.png | Bin 0 -> 602 bytes FineUI.Examples/res/icon/flag_ng.png | Bin 0 -> 482 bytes FineUI.Examples/res/icon/flag_ni.png | Bin 0 -> 508 bytes FineUI.Examples/res/icon/flag_nl.png | Bin 0 -> 453 bytes FineUI.Examples/res/icon/flag_no.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/flag_np.png | Bin 0 -> 443 bytes FineUI.Examples/res/icon/flag_nr.png | Bin 0 -> 527 bytes FineUI.Examples/res/icon/flag_nu.png | Bin 0 -> 572 bytes FineUI.Examples/res/icon/flag_nz.png | Bin 0 -> 639 bytes FineUI.Examples/res/icon/flag_om.png | Bin 0 -> 478 bytes FineUI.Examples/res/icon/flag_orange.png | Bin 0 -> 669 bytes FineUI.Examples/res/icon/flag_pa.png | Bin 0 -> 519 bytes FineUI.Examples/res/icon/flag_pe.png | Bin 0 -> 397 bytes FineUI.Examples/res/icon/flag_pf.png | Bin 0 -> 498 bytes FineUI.Examples/res/icon/flag_pg.png | Bin 0 -> 593 bytes FineUI.Examples/res/icon/flag_ph.png | Bin 0 -> 538 bytes FineUI.Examples/res/icon/flag_pink.png | Bin 0 -> 651 bytes FineUI.Examples/res/icon/flag_pk.png | Bin 0 -> 569 bytes FineUI.Examples/res/icon/flag_pl.png | Bin 0 -> 374 bytes FineUI.Examples/res/icon/flag_pm.png | Bin 0 -> 689 bytes FineUI.Examples/res/icon/flag_pn.png | Bin 0 -> 657 bytes FineUI.Examples/res/icon/flag_pr.png | Bin 0 -> 556 bytes FineUI.Examples/res/icon/flag_ps.png | Bin 0 -> 472 bytes FineUI.Examples/res/icon/flag_pt.png | Bin 0 -> 554 bytes FineUI.Examples/res/icon/flag_purple.png | Bin 0 -> 656 bytes FineUI.Examples/res/icon/flag_pw.png | Bin 0 -> 550 bytes FineUI.Examples/res/icon/flag_py.png | Bin 0 -> 473 bytes FineUI.Examples/res/icon/flag_qa.png | Bin 0 -> 450 bytes FineUI.Examples/res/icon/flag_re.png | Bin 0 -> 545 bytes FineUI.Examples/res/icon/flag_red.png | Bin 0 -> 665 bytes FineUI.Examples/res/icon/flag_ro.png | Bin 0 -> 495 bytes FineUI.Examples/res/icon/flag_rs.png | Bin 0 -> 423 bytes FineUI.Examples/res/icon/flag_ru.png | Bin 0 -> 420 bytes FineUI.Examples/res/icon/flag_rw.png | Bin 0 -> 533 bytes FineUI.Examples/res/icon/flag_sa.png | Bin 0 -> 551 bytes FineUI.Examples/res/icon/flag_sb.png | Bin 0 -> 624 bytes FineUI.Examples/res/icon/flag_sc.png | Bin 0 -> 608 bytes FineUI.Examples/res/icon/flag_scotland.png | Bin 0 -> 649 bytes FineUI.Examples/res/icon/flag_sd.png | Bin 0 -> 492 bytes FineUI.Examples/res/icon/flag_se.png | Bin 0 -> 542 bytes FineUI.Examples/res/icon/flag_sg.png | Bin 0 -> 468 bytes FineUI.Examples/res/icon/flag_sh.png | Bin 0 -> 645 bytes FineUI.Examples/res/icon/flag_si.png | Bin 0 -> 510 bytes FineUI.Examples/res/icon/flag_sj.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/flag_sk.png | Bin 0 -> 562 bytes FineUI.Examples/res/icon/flag_sl.png | Bin 0 -> 436 bytes FineUI.Examples/res/icon/flag_sm.png | Bin 0 -> 502 bytes FineUI.Examples/res/icon/flag_sn.png | Bin 0 -> 532 bytes FineUI.Examples/res/icon/flag_so.png | Bin 0 -> 527 bytes FineUI.Examples/res/icon/flag_sr.png | Bin 0 -> 513 bytes FineUI.Examples/res/icon/flag_st.png | Bin 0 -> 584 bytes FineUI.Examples/res/icon/flag_sv.png | Bin 0 -> 501 bytes FineUI.Examples/res/icon/flag_sy.png | Bin 0 -> 422 bytes FineUI.Examples/res/icon/flag_sz.png | Bin 0 -> 643 bytes FineUI.Examples/res/icon/flag_tc.png | Bin 0 -> 624 bytes FineUI.Examples/res/icon/flag_td.png | Bin 0 -> 570 bytes FineUI.Examples/res/icon/flag_tf.png | Bin 0 -> 527 bytes FineUI.Examples/res/icon/flag_tg.png | Bin 0 -> 562 bytes FineUI.Examples/res/icon/flag_th.png | Bin 0 -> 452 bytes FineUI.Examples/res/icon/flag_tj.png | Bin 0 -> 496 bytes FineUI.Examples/res/icon/flag_tk.png | Bin 0 -> 638 bytes FineUI.Examples/res/icon/flag_tl.png | Bin 0 -> 514 bytes FineUI.Examples/res/icon/flag_tm.png | Bin 0 -> 593 bytes FineUI.Examples/res/icon/flag_tn.png | Bin 0 -> 495 bytes FineUI.Examples/res/icon/flag_to.png | Bin 0 -> 426 bytes FineUI.Examples/res/icon/flag_tr.png | Bin 0 -> 492 bytes FineUI.Examples/res/icon/flag_tt.png | Bin 0 -> 617 bytes FineUI.Examples/res/icon/flag_tv.png | Bin 0 -> 536 bytes FineUI.Examples/res/icon/flag_tw.png | Bin 0 -> 465 bytes FineUI.Examples/res/icon/flag_tz.png | Bin 0 -> 642 bytes FineUI.Examples/res/icon/flag_ua.png | Bin 0 -> 446 bytes FineUI.Examples/res/icon/flag_ug.png | Bin 0 -> 531 bytes FineUI.Examples/res/icon/flag_um.png | Bin 0 -> 571 bytes FineUI.Examples/res/icon/flag_us.png | Bin 0 -> 609 bytes FineUI.Examples/res/icon/flag_uy.png | Bin 0 -> 532 bytes FineUI.Examples/res/icon/flag_uz.png | Bin 0 -> 515 bytes FineUI.Examples/res/icon/flag_va.png | Bin 0 -> 553 bytes FineUI.Examples/res/icon/flag_vc.png | Bin 0 -> 577 bytes FineUI.Examples/res/icon/flag_ve.png | Bin 0 -> 528 bytes FineUI.Examples/res/icon/flag_vg.png | Bin 0 -> 630 bytes FineUI.Examples/res/icon/flag_vi.png | Bin 0 -> 616 bytes FineUI.Examples/res/icon/flag_vn.png | Bin 0 -> 474 bytes FineUI.Examples/res/icon/flag_vu.png | Bin 0 -> 604 bytes FineUI.Examples/res/icon/flag_wales.png | Bin 0 -> 652 bytes FineUI.Examples/res/icon/flag_wf.png | Bin 0 -> 554 bytes FineUI.Examples/res/icon/flag_white.png | Bin 0 -> 671 bytes FineUI.Examples/res/icon/flag_ws.png | Bin 0 -> 476 bytes FineUI.Examples/res/icon/flag_ye.png | Bin 0 -> 413 bytes FineUI.Examples/res/icon/flag_yellow.png | Bin 0 -> 671 bytes FineUI.Examples/res/icon/flag_yt.png | Bin 0 -> 593 bytes FineUI.Examples/res/icon/flag_za.png | Bin 0 -> 642 bytes FineUI.Examples/res/icon/flag_zm.png | Bin 0 -> 500 bytes FineUI.Examples/res/icon/flag_zw.png | Bin 0 -> 574 bytes FineUI.Examples/res/icon/flower_daisy.png | Bin 0 -> 756 bytes FineUI.Examples/res/icon/folder.png | Bin 0 -> 537 bytes FineUI.Examples/res/icon/folder_add.png | Bin 0 -> 668 bytes FineUI.Examples/res/icon/folder_bell.png | Bin 0 -> 781 bytes FineUI.Examples/res/icon/folder_bookmark.png | Bin 0 -> 773 bytes FineUI.Examples/res/icon/folder_brick.png | Bin 0 -> 735 bytes FineUI.Examples/res/icon/folder_bug.png | Bin 0 -> 829 bytes FineUI.Examples/res/icon/folder_camera.png | Bin 0 -> 729 bytes FineUI.Examples/res/icon/folder_connect.png | Bin 0 -> 732 bytes FineUI.Examples/res/icon/folder_database.png | Bin 0 -> 687 bytes FineUI.Examples/res/icon/folder_delete.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/folder_edit.png | Bin 0 -> 733 bytes FineUI.Examples/res/icon/folder_error.png | Bin 0 -> 727 bytes FineUI.Examples/res/icon/folder_explore.png | Bin 0 -> 679 bytes FineUI.Examples/res/icon/folder_feed.png | Bin 0 -> 691 bytes FineUI.Examples/res/icon/folder_film.png | Bin 0 -> 792 bytes FineUI.Examples/res/icon/folder_find.png | Bin 0 -> 795 bytes FineUI.Examples/res/icon/folder_font.png | Bin 0 -> 768 bytes FineUI.Examples/res/icon/folder_go.png | Bin 0 -> 694 bytes FineUI.Examples/res/icon/folder_heart.png | Bin 0 -> 741 bytes FineUI.Examples/res/icon/folder_home.png | Bin 0 -> 750 bytes FineUI.Examples/res/icon/folder_image.png | Bin 0 -> 677 bytes FineUI.Examples/res/icon/folder_key.png | Bin 0 -> 720 bytes FineUI.Examples/res/icon/folder_lightbulb.png | Bin 0 -> 741 bytes FineUI.Examples/res/icon/folder_link.png | Bin 0 -> 785 bytes FineUI.Examples/res/icon/folder_magnify.png | Bin 0 -> 686 bytes FineUI.Examples/res/icon/folder_page.png | Bin 0 -> 688 bytes .../res/icon/folder_page_white.png | Bin 0 -> 639 bytes FineUI.Examples/res/icon/folder_palette.png | Bin 0 -> 822 bytes FineUI.Examples/res/icon/folder_picture.png | Bin 0 -> 713 bytes FineUI.Examples/res/icon/folder_star.png | Bin 0 -> 755 bytes FineUI.Examples/res/icon/folder_table.png | Bin 0 -> 675 bytes FineUI.Examples/res/icon/folder_up.png | Bin 0 -> 653 bytes FineUI.Examples/res/icon/folder_user.png | Bin 0 -> 730 bytes FineUI.Examples/res/icon/folder_wrench.png | Bin 0 -> 740 bytes FineUI.Examples/res/icon/font.png | Bin 0 -> 567 bytes FineUI.Examples/res/icon/font_add.png | Bin 0 -> 634 bytes FineUI.Examples/res/icon/font_color.png | Bin 0 -> 647 bytes FineUI.Examples/res/icon/font_delete.png | Bin 0 -> 661 bytes FineUI.Examples/res/icon/font_go.png | Bin 0 -> 700 bytes FineUI.Examples/res/icon/font_larger.png | Bin 0 -> 688 bytes FineUI.Examples/res/icon/font_smaller.png | Bin 0 -> 678 bytes FineUI.Examples/res/icon/forward_blue.png | Bin 0 -> 425 bytes FineUI.Examples/res/icon/forward_green.png | Bin 0 -> 433 bytes FineUI.Examples/res/icon/group.png | Bin 0 -> 753 bytes FineUI.Examples/res/icon/group_add.png | Bin 0 -> 807 bytes FineUI.Examples/res/icon/group_delete.png | Bin 0 -> 827 bytes FineUI.Examples/res/icon/group_edit.png | Bin 0 -> 785 bytes FineUI.Examples/res/icon/group_error.png | Bin 0 -> 842 bytes FineUI.Examples/res/icon/group_gear.png | Bin 0 -> 824 bytes FineUI.Examples/res/icon/group_go.png | Bin 0 -> 842 bytes FineUI.Examples/res/icon/group_key.png | Bin 0 -> 813 bytes FineUI.Examples/res/icon/group_link.png | Bin 0 -> 858 bytes FineUI.Examples/res/icon/heart.png | Bin 0 -> 749 bytes FineUI.Examples/res/icon/heart_add.png | Bin 0 -> 820 bytes FineUI.Examples/res/icon/heart_broken.png | Bin 0 -> 838 bytes FineUI.Examples/res/icon/heart_connect.png | Bin 0 -> 869 bytes FineUI.Examples/res/icon/heart_delete.png | Bin 0 -> 823 bytes FineUI.Examples/res/icon/help.png | Bin 0 -> 786 bytes FineUI.Examples/res/icon/hourglass.png | Bin 0 -> 744 bytes FineUI.Examples/res/icon/hourglass_add.png | Bin 0 -> 814 bytes FineUI.Examples/res/icon/hourglass_delete.png | Bin 0 -> 829 bytes FineUI.Examples/res/icon/hourglass_go.png | Bin 0 -> 866 bytes FineUI.Examples/res/icon/hourglass_link.png | Bin 0 -> 871 bytes FineUI.Examples/res/icon/house.png | Bin 0 -> 806 bytes FineUI.Examples/res/icon/house_connect.png | Bin 0 -> 896 bytes FineUI.Examples/res/icon/house_go.png | Bin 0 -> 861 bytes FineUI.Examples/res/icon/house_key.png | Bin 0 -> 897 bytes FineUI.Examples/res/icon/house_link.png | Bin 0 -> 868 bytes FineUI.Examples/res/icon/house_star.png | Bin 0 -> 884 bytes FineUI.Examples/res/icon/html.png | Bin 0 -> 578 bytes FineUI.Examples/res/icon/html_add.png | Bin 0 -> 698 bytes FineUI.Examples/res/icon/html_delete.png | Bin 0 -> 688 bytes FineUI.Examples/res/icon/html_error.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/html_go.png | Bin 0 -> 692 bytes FineUI.Examples/res/icon/html_valid.png | Bin 0 -> 704 bytes FineUI.Examples/res/icon/image.png | Bin 0 -> 516 bytes FineUI.Examples/res/icon/image_add.png | Bin 0 -> 653 bytes FineUI.Examples/res/icon/image_delete.png | Bin 0 -> 653 bytes FineUI.Examples/res/icon/image_edit.png | Bin 0 -> 783 bytes FineUI.Examples/res/icon/image_link.png | Bin 0 -> 773 bytes FineUI.Examples/res/icon/image_magnify.png | Bin 0 -> 665 bytes FineUI.Examples/res/icon/image_star.png | Bin 0 -> 671 bytes FineUI.Examples/res/icon/images.png | Bin 0 -> 661 bytes FineUI.Examples/res/icon/information.png | Bin 0 -> 778 bytes FineUI.Examples/res/icon/ipod.png | Bin 0 -> 463 bytes FineUI.Examples/res/icon/ipod_cast.png | Bin 0 -> 711 bytes FineUI.Examples/res/icon/ipod_cast_add.png | Bin 0 -> 796 bytes FineUI.Examples/res/icon/ipod_cast_delete.png | Bin 0 -> 809 bytes FineUI.Examples/res/icon/ipod_connect.png | Bin 0 -> 697 bytes FineUI.Examples/res/icon/ipod_nano.png | Bin 0 -> 463 bytes .../res/icon/ipod_nano_connect.png | Bin 0 -> 664 bytes FineUI.Examples/res/icon/ipod_sound.png | Bin 0 -> 678 bytes FineUI.Examples/res/icon/joystick.png | Bin 0 -> 559 bytes FineUI.Examples/res/icon/joystick_add.png | Bin 0 -> 669 bytes FineUI.Examples/res/icon/joystick_connect.png | Bin 0 -> 738 bytes FineUI.Examples/res/icon/joystick_delete.png | Bin 0 -> 671 bytes FineUI.Examples/res/icon/joystick_error.png | Bin 0 -> 711 bytes FineUI.Examples/res/icon/key.png | Bin 0 -> 612 bytes FineUI.Examples/res/icon/key_add.png | Bin 0 -> 703 bytes FineUI.Examples/res/icon/key_delete.png | Bin 0 -> 724 bytes FineUI.Examples/res/icon/key_go.png | Bin 0 -> 744 bytes FineUI.Examples/res/icon/key_start.png | Bin 0 -> 833 bytes FineUI.Examples/res/icon/key_stop.png | Bin 0 -> 811 bytes FineUI.Examples/res/icon/keyboard.png | Bin 0 -> 570 bytes FineUI.Examples/res/icon/keyboard_add.png | Bin 0 -> 683 bytes FineUI.Examples/res/icon/keyboard_connect.png | Bin 0 -> 735 bytes FineUI.Examples/res/icon/keyboard_delete.png | Bin 0 -> 681 bytes FineUI.Examples/res/icon/keyboard_magnify.png | Bin 0 -> 651 bytes FineUI.Examples/res/icon/laptop.png | Bin 0 -> 626 bytes FineUI.Examples/res/icon/laptop_add.png | Bin 0 -> 706 bytes FineUI.Examples/res/icon/laptop_connect.png | Bin 0 -> 758 bytes FineUI.Examples/res/icon/laptop_delete.png | Bin 0 -> 706 bytes FineUI.Examples/res/icon/laptop_disk.png | Bin 0 -> 744 bytes FineUI.Examples/res/icon/laptop_edit.png | Bin 0 -> 800 bytes FineUI.Examples/res/icon/laptop_error.png | Bin 0 -> 743 bytes FineUI.Examples/res/icon/laptop_go.png | Bin 0 -> 735 bytes FineUI.Examples/res/icon/laptop_key.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/laptop_link.png | Bin 0 -> 697 bytes FineUI.Examples/res/icon/laptop_magnify.png | Bin 0 -> 707 bytes FineUI.Examples/res/icon/laptop_start.png | Bin 0 -> 753 bytes FineUI.Examples/res/icon/laptop_stop.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/laptop_wrench.png | Bin 0 -> 737 bytes FineUI.Examples/res/icon/layers.png | Bin 0 -> 597 bytes FineUI.Examples/res/icon/layout.png | Bin 0 -> 480 bytes FineUI.Examples/res/icon/layout_add.png | Bin 0 -> 577 bytes FineUI.Examples/res/icon/layout_content.png | Bin 0 -> 519 bytes FineUI.Examples/res/icon/layout_delete.png | Bin 0 -> 608 bytes FineUI.Examples/res/icon/layout_edit.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/layout_error.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/layout_header.png | Bin 0 -> 500 bytes FineUI.Examples/res/icon/layout_key.png | Bin 0 -> 693 bytes FineUI.Examples/res/icon/layout_lightning.png | Bin 0 -> 719 bytes FineUI.Examples/res/icon/layout_link.png | Bin 0 -> 660 bytes FineUI.Examples/res/icon/layout_sidebar.png | Bin 0 -> 479 bytes FineUI.Examples/res/icon/lightbulb.png | Bin 0 -> 782 bytes FineUI.Examples/res/icon/lightbulb_add.png | Bin 0 -> 839 bytes FineUI.Examples/res/icon/lightbulb_delete.png | Bin 0 -> 857 bytes FineUI.Examples/res/icon/lightbulb_off.png | Bin 0 -> 700 bytes FineUI.Examples/res/icon/lightning.png | Bin 0 -> 634 bytes FineUI.Examples/res/icon/lightning_add.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/lightning_delete.png | Bin 0 -> 745 bytes FineUI.Examples/res/icon/lightning_go.png | Bin 0 -> 739 bytes FineUI.Examples/res/icon/link.png | Bin 0 -> 343 bytes FineUI.Examples/res/icon/link_add.png | Bin 0 -> 570 bytes FineUI.Examples/res/icon/link_break.png | Bin 0 -> 657 bytes FineUI.Examples/res/icon/link_delete.png | Bin 0 -> 600 bytes FineUI.Examples/res/icon/link_edit.png | Bin 0 -> 703 bytes FineUI.Examples/res/icon/link_error.png | Bin 0 -> 698 bytes FineUI.Examples/res/icon/link_go.png | Bin 0 -> 655 bytes FineUI.Examples/res/icon/lock.png | Bin 0 -> 749 bytes FineUI.Examples/res/icon/lock_add.png | Bin 0 -> 824 bytes FineUI.Examples/res/icon/lock_break.png | Bin 0 -> 771 bytes FineUI.Examples/res/icon/lock_delete.png | Bin 0 -> 815 bytes FineUI.Examples/res/icon/lock_edit.png | Bin 0 -> 861 bytes FineUI.Examples/res/icon/lock_go.png | Bin 0 -> 829 bytes FineUI.Examples/res/icon/lock_key.png | Bin 0 -> 837 bytes FineUI.Examples/res/icon/lock_open.png | Bin 0 -> 727 bytes FineUI.Examples/res/icon/lock_start.png | Bin 0 -> 844 bytes FineUI.Examples/res/icon/lock_stop.png | Bin 0 -> 815 bytes FineUI.Examples/res/icon/lorry.png | Bin 0 -> 582 bytes FineUI.Examples/res/icon/lorry_add.png | Bin 0 -> 689 bytes FineUI.Examples/res/icon/lorry_delete.png | Bin 0 -> 683 bytes FineUI.Examples/res/icon/lorry_error.png | Bin 0 -> 739 bytes FineUI.Examples/res/icon/lorry_flatbed.png | Bin 0 -> 450 bytes FineUI.Examples/res/icon/lorry_go.png | Bin 0 -> 699 bytes FineUI.Examples/res/icon/lorry_link.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/lorry_start.png | Bin 0 -> 752 bytes FineUI.Examples/res/icon/lorry_stop.png | Bin 0 -> 720 bytes .../res/icon/magifier_zoom_out.png | Bin 0 -> 657 bytes FineUI.Examples/res/icon/magnifier.png | Bin 0 -> 615 bytes .../res/icon/magnifier_zoom_in.png | Bin 0 -> 680 bytes FineUI.Examples/res/icon/mail.png | Bin 0 -> 552 bytes FineUI.Examples/res/icon/male.png | Bin 0 -> 629 bytes FineUI.Examples/res/icon/map.png | Bin 0 -> 804 bytes FineUI.Examples/res/icon/map_add.png | Bin 0 -> 836 bytes FineUI.Examples/res/icon/map_clipboard.png | Bin 0 -> 724 bytes FineUI.Examples/res/icon/map_cursor.png | Bin 0 -> 835 bytes FineUI.Examples/res/icon/map_delete.png | Bin 0 -> 835 bytes FineUI.Examples/res/icon/map_edit.png | Bin 0 -> 876 bytes FineUI.Examples/res/icon/map_error.png | Bin 0 -> 862 bytes FineUI.Examples/res/icon/map_go.png | Bin 0 -> 842 bytes FineUI.Examples/res/icon/map_link.png | Bin 0 -> 898 bytes FineUI.Examples/res/icon/map_magnify.png | Bin 0 -> 797 bytes FineUI.Examples/res/icon/map_start.png | Bin 0 -> 872 bytes FineUI.Examples/res/icon/map_stop.png | Bin 0 -> 841 bytes FineUI.Examples/res/icon/medal_bronze_1.png | Bin 0 -> 640 bytes FineUI.Examples/res/icon/medal_bronze_2.png | Bin 0 -> 654 bytes FineUI.Examples/res/icon/medal_bronze_3.png | Bin 0 -> 646 bytes FineUI.Examples/res/icon/medal_bronze_add.png | Bin 0 -> 747 bytes .../res/icon/medal_bronze_delete.png | Bin 0 -> 730 bytes FineUI.Examples/res/icon/medal_gold_1.png | Bin 0 -> 629 bytes FineUI.Examples/res/icon/medal_gold_2.png | Bin 0 -> 641 bytes FineUI.Examples/res/icon/medal_gold_3.png | Bin 0 -> 634 bytes FineUI.Examples/res/icon/medal_gold_add.png | Bin 0 -> 733 bytes .../res/icon/medal_gold_delete.png | Bin 0 -> 724 bytes FineUI.Examples/res/icon/medal_silver_1.png | Bin 0 -> 589 bytes FineUI.Examples/res/icon/medal_silver_2.png | Bin 0 -> 600 bytes FineUI.Examples/res/icon/medal_silver_3.png | Bin 0 -> 597 bytes FineUI.Examples/res/icon/medal_silver_add.png | Bin 0 -> 727 bytes .../res/icon/medal_silver_delete.png | Bin 0 -> 714 bytes FineUI.Examples/res/icon/money.png | Bin 0 -> 738 bytes FineUI.Examples/res/icon/money_add.png | Bin 0 -> 784 bytes FineUI.Examples/res/icon/money_delete.png | Bin 0 -> 806 bytes FineUI.Examples/res/icon/money_dollar.png | Bin 0 -> 630 bytes FineUI.Examples/res/icon/money_euro.png | Bin 0 -> 605 bytes FineUI.Examples/res/icon/money_pound.png | Bin 0 -> 565 bytes FineUI.Examples/res/icon/money_yen.png | Bin 0 -> 562 bytes FineUI.Examples/res/icon/monitor.png | Bin 0 -> 612 bytes FineUI.Examples/res/icon/monitor_add.png | Bin 0 -> 692 bytes FineUI.Examples/res/icon/monitor_delete.png | Bin 0 -> 691 bytes FineUI.Examples/res/icon/monitor_edit.png | Bin 0 -> 769 bytes FineUI.Examples/res/icon/monitor_error.png | Bin 0 -> 714 bytes FineUI.Examples/res/icon/monitor_go.png | Bin 0 -> 696 bytes FineUI.Examples/res/icon/monitor_key.png | Bin 0 -> 758 bytes .../res/icon/monitor_lightning.png | Bin 0 -> 768 bytes FineUI.Examples/res/icon/monitor_link.png | Bin 0 -> 736 bytes FineUI.Examples/res/icon/moon_full.png | Bin 0 -> 561 bytes FineUI.Examples/res/icon/mouse.png | Bin 0 -> 634 bytes FineUI.Examples/res/icon/mouse_add.png | Bin 0 -> 729 bytes FineUI.Examples/res/icon/mouse_delete.png | Bin 0 -> 741 bytes FineUI.Examples/res/icon/mouse_error.png | Bin 0 -> 790 bytes FineUI.Examples/res/icon/music.png | Bin 0 -> 385 bytes FineUI.Examples/res/icon/music_note.png | Bin 0 -> 284 bytes FineUI.Examples/res/icon/neighbourhood.png | Bin 0 -> 695 bytes FineUI.Examples/res/icon/new.png | Bin 0 -> 378 bytes FineUI.Examples/res/icon/new_blue.png | Bin 0 -> 446 bytes FineUI.Examples/res/icon/new_red.png | Bin 0 -> 428 bytes FineUI.Examples/res/icon/newspaper.png | Bin 0 -> 658 bytes FineUI.Examples/res/icon/newspaper_add.png | Bin 0 -> 750 bytes FineUI.Examples/res/icon/newspaper_delete.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/newspaper_go.png | Bin 0 -> 779 bytes FineUI.Examples/res/icon/newspaper_link.png | Bin 0 -> 787 bytes FineUI.Examples/res/icon/next_blue.png | Bin 0 -> 530 bytes FineUI.Examples/res/icon/next_green.png | Bin 0 -> 519 bytes FineUI.Examples/res/icon/note.png | Bin 0 -> 500 bytes FineUI.Examples/res/icon/note_add.png | Bin 0 -> 641 bytes FineUI.Examples/res/icon/note_delete.png | Bin 0 -> 631 bytes FineUI.Examples/res/icon/note_edit.png | Bin 0 -> 731 bytes FineUI.Examples/res/icon/note_error.png | Bin 0 -> 680 bytes FineUI.Examples/res/icon/note_go.png | Bin 0 -> 661 bytes FineUI.Examples/res/icon/outline.png | Bin 0 -> 398 bytes FineUI.Examples/res/icon/overlays.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/package.png | Bin 0 -> 853 bytes FineUI.Examples/res/icon/package_add.png | Bin 0 -> 899 bytes FineUI.Examples/res/icon/package_delete.png | Bin 0 -> 891 bytes FineUI.Examples/res/icon/package_down.png | Bin 0 -> 870 bytes FineUI.Examples/res/icon/package_go.png | Bin 0 -> 898 bytes FineUI.Examples/res/icon/package_green.png | Bin 0 -> 896 bytes FineUI.Examples/res/icon/package_in.png | Bin 0 -> 915 bytes FineUI.Examples/res/icon/package_link.png | Bin 0 -> 939 bytes FineUI.Examples/res/icon/package_se.png | Bin 0 -> 898 bytes FineUI.Examples/res/icon/package_start.png | Bin 0 -> 926 bytes FineUI.Examples/res/icon/package_stop.png | Bin 0 -> 899 bytes FineUI.Examples/res/icon/package_white.png | Bin 0 -> 501 bytes FineUI.Examples/res/icon/page.png | Bin 0 -> 635 bytes FineUI.Examples/res/icon/page_add.png | Bin 0 -> 739 bytes FineUI.Examples/res/icon/page_attach.png | Bin 0 -> 794 bytes FineUI.Examples/res/icon/page_back.png | Bin 0 -> 796 bytes FineUI.Examples/res/icon/page_break.png | Bin 0 -> 696 bytes .../res/icon/page_break_insert.png | Bin 0 -> 789 bytes FineUI.Examples/res/icon/page_cancel.png | Bin 0 -> 858 bytes FineUI.Examples/res/icon/page_code.png | Bin 0 -> 818 bytes FineUI.Examples/res/icon/page_copy.png | Bin 0 -> 663 bytes FineUI.Examples/res/icon/page_delete.png | Bin 0 -> 740 bytes FineUI.Examples/res/icon/page_edit.png | Bin 0 -> 807 bytes FineUI.Examples/res/icon/page_error.png | Bin 0 -> 793 bytes FineUI.Examples/res/icon/page_excel.png | Bin 0 -> 817 bytes FineUI.Examples/res/icon/page_find.png | Bin 0 -> 879 bytes FineUI.Examples/res/icon/page_forward.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/page_gear.png | Bin 0 -> 833 bytes FineUI.Examples/res/icon/page_go.png | Bin 0 -> 779 bytes FineUI.Examples/res/icon/page_green.png | Bin 0 -> 621 bytes .../res/icon/page_header_footer.png | Bin 0 -> 676 bytes FineUI.Examples/res/icon/page_key.png | Bin 0 -> 801 bytes FineUI.Examples/res/icon/page_landscape.png | Bin 0 -> 656 bytes .../res/icon/page_landscape_shot.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/page_lightning.png | Bin 0 -> 839 bytes FineUI.Examples/res/icon/page_link.png | Bin 0 -> 830 bytes FineUI.Examples/res/icon/page_magnify.png | Bin 0 -> 788 bytes FineUI.Examples/res/icon/page_paintbrush.png | Bin 0 -> 813 bytes FineUI.Examples/res/icon/page_paste.png | Bin 0 -> 703 bytes FineUI.Examples/res/icon/page_portrait.png | Bin 0 -> 685 bytes .../res/icon/page_portrait_shot.png | Bin 0 -> 856 bytes FineUI.Examples/res/icon/page_red.png | Bin 0 -> 641 bytes FineUI.Examples/res/icon/page_refresh.png | Bin 0 -> 858 bytes FineUI.Examples/res/icon/page_save.png | Bin 0 -> 774 bytes FineUI.Examples/res/icon/page_white.png | Bin 0 -> 294 bytes .../res/icon/page_white_acrobat.png | Bin 0 -> 591 bytes .../res/icon/page_white_actionscript.png | Bin 0 -> 664 bytes FineUI.Examples/res/icon/page_white_add.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/page_white_break.png | Bin 0 -> 322 bytes FineUI.Examples/res/icon/page_white_c.png | Bin 0 -> 587 bytes .../res/icon/page_white_camera.png | Bin 0 -> 656 bytes FineUI.Examples/res/icon/page_white_cd.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/page_white_cdr.png | Bin 0 -> 720 bytes FineUI.Examples/res/icon/page_white_code.png | Bin 0 -> 603 bytes .../res/icon/page_white_code_red.png | Bin 0 -> 587 bytes .../res/icon/page_white_coldfusion.png | Bin 0 -> 592 bytes .../res/icon/page_white_compressed.png | Bin 0 -> 724 bytes .../res/icon/page_white_connect.png | Bin 0 -> 725 bytes FineUI.Examples/res/icon/page_white_copy.png | Bin 0 -> 309 bytes .../res/icon/page_white_cplusplus.png | Bin 0 -> 621 bytes .../res/icon/page_white_csharp.png | Bin 0 -> 700 bytes FineUI.Examples/res/icon/page_white_cup.png | Bin 0 -> 639 bytes .../res/icon/page_white_database.png | Bin 0 -> 579 bytes .../res/icon/page_white_database_yellow.png | Bin 0 -> 672 bytes .../res/icon/page_white_delete.png | Bin 0 -> 536 bytes FineUI.Examples/res/icon/page_white_dvd.png | Bin 0 -> 638 bytes FineUI.Examples/res/icon/page_white_edit.png | Bin 0 -> 618 bytes FineUI.Examples/res/icon/page_white_error.png | Bin 0 -> 623 bytes FineUI.Examples/res/icon/page_white_excel.png | Bin 0 -> 663 bytes FineUI.Examples/res/icon/page_white_find.png | Bin 0 -> 676 bytes FineUI.Examples/res/icon/page_white_flash.png | Bin 0 -> 582 bytes FineUI.Examples/res/icon/page_white_font.png | Bin 0 -> 633 bytes .../res/icon/page_white_freehand.png | Bin 0 -> 639 bytes FineUI.Examples/res/icon/page_white_gear.png | Bin 0 -> 402 bytes FineUI.Examples/res/icon/page_white_get.png | Bin 0 -> 516 bytes FineUI.Examples/res/icon/page_white_go.png | Bin 0 -> 612 bytes FineUI.Examples/res/icon/page_white_h.png | Bin 0 -> 603 bytes .../res/icon/page_white_horizontal.png | Bin 0 -> 296 bytes FineUI.Examples/res/icon/page_white_key.png | Bin 0 -> 616 bytes .../res/icon/page_white_lightning.png | Bin 0 -> 669 bytes FineUI.Examples/res/icon/page_white_link.png | Bin 0 -> 614 bytes .../res/icon/page_white_magnify.png | Bin 0 -> 554 bytes FineUI.Examples/res/icon/page_white_medal.png | Bin 0 -> 706 bytes .../res/icon/page_white_office.png | Bin 0 -> 779 bytes FineUI.Examples/res/icon/page_white_paint.png | Bin 0 -> 688 bytes .../res/icon/page_white_paint_2.png | Bin 0 -> 742 bytes .../res/icon/page_white_paintbrush.png | Bin 0 -> 618 bytes FineUI.Examples/res/icon/page_white_paste.png | Bin 0 -> 620 bytes .../res/icon/page_white_paste_table.png | Bin 0 -> 690 bytes FineUI.Examples/res/icon/page_white_php.png | Bin 0 -> 538 bytes .../res/icon/page_white_picture.png | Bin 0 -> 650 bytes .../res/icon/page_white_powerpoint.png | Bin 0 -> 588 bytes FineUI.Examples/res/icon/page_white_put.png | Bin 0 -> 523 bytes .../res/icon/page_white_refresh.png | Bin 0 -> 708 bytes FineUI.Examples/res/icon/page_white_ruby.png | Bin 0 -> 626 bytes .../res/icon/page_white_side_by_side.png | Bin 0 -> 273 bytes FineUI.Examples/res/icon/page_white_stack.png | Bin 0 -> 317 bytes FineUI.Examples/res/icon/page_white_star.png | Bin 0 -> 565 bytes .../res/icon/page_white_swoosh.png | Bin 0 -> 634 bytes FineUI.Examples/res/icon/page_white_text.png | Bin 0 -> 342 bytes .../res/icon/page_white_text_width.png | Bin 0 -> 315 bytes FineUI.Examples/res/icon/page_white_tux.png | Bin 0 -> 668 bytes .../res/icon/page_white_vector.png | Bin 0 -> 644 bytes .../res/icon/page_white_visualstudio.png | Bin 0 -> 702 bytes FineUI.Examples/res/icon/page_white_width.png | Bin 0 -> 309 bytes FineUI.Examples/res/icon/page_white_word.png | Bin 0 -> 651 bytes FineUI.Examples/res/icon/page_white_world.png | Bin 0 -> 734 bytes .../res/icon/page_white_wrench.png | Bin 0 -> 613 bytes FineUI.Examples/res/icon/page_white_zip.png | Bin 0 -> 386 bytes FineUI.Examples/res/icon/page_word.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/page_world.png | Bin 0 -> 903 bytes FineUI.Examples/res/icon/paint.png | Bin 0 -> 973 bytes FineUI.Examples/res/icon/paint_can_brush.png | Bin 0 -> 866 bytes FineUI.Examples/res/icon/paintbrush.png | Bin 0 -> 548 bytes FineUI.Examples/res/icon/paintbrush_color.png | Bin 0 -> 726 bytes FineUI.Examples/res/icon/paintcan.png | Bin 0 -> 707 bytes FineUI.Examples/res/icon/paintcan_red.png | Bin 0 -> 737 bytes FineUI.Examples/res/icon/palette.png | Bin 0 -> 856 bytes FineUI.Examples/res/icon/paste_plain.png | Bin 0 -> 605 bytes FineUI.Examples/res/icon/paste_word.png | Bin 0 -> 701 bytes FineUI.Examples/res/icon/pause_blue.png | Bin 0 -> 336 bytes FineUI.Examples/res/icon/pause_green.png | Bin 0 -> 323 bytes FineUI.Examples/res/icon/pause_record.png | Bin 0 -> 439 bytes FineUI.Examples/res/icon/pencil.png | Bin 0 -> 450 bytes FineUI.Examples/res/icon/pencil_add.png | Bin 0 -> 589 bytes FineUI.Examples/res/icon/pencil_delete.png | Bin 0 -> 603 bytes FineUI.Examples/res/icon/pencil_go.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/phone.png | Bin 0 -> 488 bytes FineUI.Examples/res/icon/phone_add.png | Bin 0 -> 621 bytes FineUI.Examples/res/icon/phone_delete.png | Bin 0 -> 615 bytes FineUI.Examples/res/icon/phone_edit.png | Bin 0 -> 702 bytes FineUI.Examples/res/icon/phone_error.png | Bin 0 -> 659 bytes FineUI.Examples/res/icon/phone_go.png | Bin 0 -> 651 bytes FineUI.Examples/res/icon/phone_key.png | Bin 0 -> 696 bytes FineUI.Examples/res/icon/phone_link.png | Bin 0 -> 663 bytes FineUI.Examples/res/icon/phone_sound.png | Bin 0 -> 703 bytes FineUI.Examples/res/icon/phone_start.png | Bin 0 -> 686 bytes FineUI.Examples/res/icon/phone_stop.png | Bin 0 -> 657 bytes FineUI.Examples/res/icon/photo.png | Bin 0 -> 589 bytes FineUI.Examples/res/icon/photo_add.png | Bin 0 -> 707 bytes FineUI.Examples/res/icon/photo_delete.png | Bin 0 -> 703 bytes FineUI.Examples/res/icon/photo_edit.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/photo_link.png | Bin 0 -> 784 bytes FineUI.Examples/res/icon/photo_paint.png | Bin 0 -> 773 bytes FineUI.Examples/res/icon/photos.png | Bin 0 -> 647 bytes FineUI.Examples/res/icon/picture.png | Bin 0 -> 606 bytes FineUI.Examples/res/icon/picture_add.png | Bin 0 -> 745 bytes .../res/icon/picture_clipboard.png | Bin 0 -> 723 bytes FineUI.Examples/res/icon/picture_delete.png | Bin 0 -> 744 bytes FineUI.Examples/res/icon/picture_edit.png | Bin 0 -> 826 bytes FineUI.Examples/res/icon/picture_empty.png | Bin 0 -> 463 bytes FineUI.Examples/res/icon/picture_error.png | Bin 0 -> 755 bytes FineUI.Examples/res/icon/picture_go.png | Bin 0 -> 758 bytes FineUI.Examples/res/icon/picture_key.png | Bin 0 -> 794 bytes FineUI.Examples/res/icon/picture_link.png | Bin 0 -> 835 bytes FineUI.Examples/res/icon/picture_save.png | Bin 0 -> 755 bytes FineUI.Examples/res/icon/pictures.png | Bin 0 -> 704 bytes FineUI.Examples/res/icon/pictures_thumbs.png | Bin 0 -> 512 bytes FineUI.Examples/res/icon/pilcrow.png | Bin 0 -> 361 bytes FineUI.Examples/res/icon/pill.png | Bin 0 -> 719 bytes FineUI.Examples/res/icon/pill_add.png | Bin 0 -> 797 bytes FineUI.Examples/res/icon/pill_delete.png | Bin 0 -> 805 bytes FineUI.Examples/res/icon/pill_error.png | Bin 0 -> 805 bytes FineUI.Examples/res/icon/pill_go.png | Bin 0 -> 817 bytes FineUI.Examples/res/icon/play_blue.png | Bin 0 -> 407 bytes FineUI.Examples/res/icon/play_green.png | Bin 0 -> 414 bytes FineUI.Examples/res/icon/plugin.png | Bin 0 -> 591 bytes FineUI.Examples/res/icon/plugin_add.png | Bin 0 -> 691 bytes FineUI.Examples/res/icon/plugin_delete.png | Bin 0 -> 692 bytes FineUI.Examples/res/icon/plugin_disabled.png | Bin 0 -> 347 bytes FineUI.Examples/res/icon/plugin_edit.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/plugin_error.png | Bin 0 -> 702 bytes FineUI.Examples/res/icon/plugin_go.png | Bin 0 -> 694 bytes FineUI.Examples/res/icon/plugin_key.png | Bin 0 -> 748 bytes FineUI.Examples/res/icon/plugin_link.png | Bin 0 -> 759 bytes FineUI.Examples/res/icon/previous_green.png | Bin 0 -> 524 bytes FineUI.Examples/res/icon/printer.png | Bin 0 -> 731 bytes FineUI.Examples/res/icon/printer_add.png | Bin 0 -> 782 bytes FineUI.Examples/res/icon/printer_cancel.png | Bin 0 -> 879 bytes FineUI.Examples/res/icon/printer_color.png | Bin 0 -> 756 bytes FineUI.Examples/res/icon/printer_connect.png | Bin 0 -> 883 bytes FineUI.Examples/res/icon/printer_delete.png | Bin 0 -> 792 bytes FineUI.Examples/res/icon/printer_empty.png | Bin 0 -> 350 bytes FineUI.Examples/res/icon/printer_error.png | Bin 0 -> 854 bytes FineUI.Examples/res/icon/printer_go.png | Bin 0 -> 844 bytes FineUI.Examples/res/icon/printer_key.png | Bin 0 -> 846 bytes FineUI.Examples/res/icon/printer_mono.png | Bin 0 -> 754 bytes FineUI.Examples/res/icon/printer_start.png | Bin 0 -> 853 bytes FineUI.Examples/res/icon/printer_stop.png | Bin 0 -> 831 bytes FineUI.Examples/res/icon/rainbow.png | Bin 0 -> 655 bytes FineUI.Examples/res/icon/rainbow_star.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/record_blue.png | Bin 0 -> 411 bytes FineUI.Examples/res/icon/record_green.png | Bin 0 -> 423 bytes FineUI.Examples/res/icon/record_red.png | Bin 0 -> 383 bytes FineUI.Examples/res/icon/reload.png | Bin 0 -> 643 bytes FineUI.Examples/res/icon/report.png | Bin 0 -> 649 bytes FineUI.Examples/res/icon/report_add.png | Bin 0 -> 714 bytes FineUI.Examples/res/icon/report_delete.png | Bin 0 -> 729 bytes FineUI.Examples/res/icon/report_disk.png | Bin 0 -> 760 bytes FineUI.Examples/res/icon/report_edit.png | Bin 0 -> 762 bytes FineUI.Examples/res/icon/report_go.png | Bin 0 -> 756 bytes FineUI.Examples/res/icon/report_key.png | Bin 0 -> 760 bytes FineUI.Examples/res/icon/report_link.png | Bin 0 -> 754 bytes FineUI.Examples/res/icon/report_magnify.png | Bin 0 -> 738 bytes FineUI.Examples/res/icon/report_picture.png | Bin 0 -> 733 bytes FineUI.Examples/res/icon/report_start.png | Bin 0 -> 812 bytes FineUI.Examples/res/icon/report_stop.png | Bin 0 -> 779 bytes FineUI.Examples/res/icon/report_user.png | Bin 0 -> 785 bytes FineUI.Examples/res/icon/report_word.png | Bin 0 -> 731 bytes FineUI.Examples/res/icon/resultset_first.png | Bin 0 -> 522 bytes FineUI.Examples/res/icon/resultset_last.png | Bin 0 -> 524 bytes FineUI.Examples/res/icon/resultset_next.png | Bin 0 -> 395 bytes .../res/icon/resultset_previous.png | Bin 0 -> 389 bytes FineUI.Examples/res/icon/reverse_blue.png | Bin 0 -> 402 bytes FineUI.Examples/res/icon/reverse_green.png | Bin 0 -> 406 bytes FineUI.Examples/res/icon/rewind_blue.png | Bin 0 -> 410 bytes FineUI.Examples/res/icon/rewind_green.png | Bin 0 -> 415 bytes FineUI.Examples/res/icon/rgb.png | Bin 0 -> 547 bytes FineUI.Examples/res/icon/rosette.png | Bin 0 -> 673 bytes FineUI.Examples/res/icon/rosette_blue.png | Bin 0 -> 715 bytes FineUI.Examples/res/icon/rss.png | Bin 0 -> 530 bytes FineUI.Examples/res/icon/rss_add.png | Bin 0 -> 649 bytes FineUI.Examples/res/icon/rss_delete.png | Bin 0 -> 633 bytes FineUI.Examples/res/icon/rss_error.png | Bin 0 -> 675 bytes FineUI.Examples/res/icon/rss_go.png | Bin 0 -> 635 bytes FineUI.Examples/res/icon/rss_valid.png | Bin 0 -> 660 bytes FineUI.Examples/res/icon/ruby.png | Bin 0 -> 592 bytes FineUI.Examples/res/icon/ruby_add.png | Bin 0 -> 691 bytes FineUI.Examples/res/icon/ruby_delete.png | Bin 0 -> 704 bytes FineUI.Examples/res/icon/ruby_gear.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/ruby_get.png | Bin 0 -> 692 bytes FineUI.Examples/res/icon/ruby_go.png | Bin 0 -> 720 bytes FineUI.Examples/res/icon/ruby_key.png | Bin 0 -> 732 bytes FineUI.Examples/res/icon/ruby_link.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/ruby_put.png | Bin 0 -> 694 bytes FineUI.Examples/res/icon/script.png | Bin 0 -> 748 bytes FineUI.Examples/res/icon/script_add.png | Bin 0 -> 811 bytes FineUI.Examples/res/icon/script_code.png | Bin 0 -> 859 bytes .../res/icon/script_code_original.png | Bin 0 -> 859 bytes FineUI.Examples/res/icon/script_code_red.png | Bin 0 -> 868 bytes FineUI.Examples/res/icon/script_delete.png | Bin 0 -> 811 bytes FineUI.Examples/res/icon/script_edit.png | Bin 0 -> 880 bytes FineUI.Examples/res/icon/script_error.png | Bin 0 -> 861 bytes FineUI.Examples/res/icon/script_gear.png | Bin 0 -> 861 bytes FineUI.Examples/res/icon/script_go.png | Bin 0 -> 839 bytes FineUI.Examples/res/icon/script_key.png | Bin 0 -> 853 bytes FineUI.Examples/res/icon/script_lightning.png | Bin 0 -> 879 bytes FineUI.Examples/res/icon/script_link.png | Bin 0 -> 876 bytes FineUI.Examples/res/icon/script_palette.png | Bin 0 -> 917 bytes FineUI.Examples/res/icon/script_save.png | Bin 0 -> 804 bytes FineUI.Examples/res/icon/script_start.png | Bin 0 -> 887 bytes FineUI.Examples/res/icon/script_stop.png | Bin 0 -> 862 bytes FineUI.Examples/res/icon/seasons.png | Bin 0 -> 748 bytes .../res/icon/section_collapsed.png | Bin 0 -> 292 bytes FineUI.Examples/res/icon/section_expanded.png | Bin 0 -> 308 bytes FineUI.Examples/res/icon/server.png | Bin 0 -> 530 bytes FineUI.Examples/res/icon/server_add.png | Bin 0 -> 676 bytes FineUI.Examples/res/icon/server_chart.png | Bin 0 -> 673 bytes .../res/icon/server_compressed.png | Bin 0 -> 721 bytes FineUI.Examples/res/icon/server_connect.png | Bin 0 -> 755 bytes FineUI.Examples/res/icon/server_database.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/server_delete.png | Bin 0 -> 668 bytes FineUI.Examples/res/icon/server_edit.png | Bin 0 -> 749 bytes FineUI.Examples/res/icon/server_error.png | Bin 0 -> 678 bytes FineUI.Examples/res/icon/server_go.png | Bin 0 -> 706 bytes FineUI.Examples/res/icon/server_key.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/server_lightning.png | Bin 0 -> 729 bytes FineUI.Examples/res/icon/server_link.png | Bin 0 -> 706 bytes FineUI.Examples/res/icon/server_start.png | Bin 0 -> 727 bytes FineUI.Examples/res/icon/server_stop.png | Bin 0 -> 702 bytes .../res/icon/server_uncompressed.png | Bin 0 -> 669 bytes FineUI.Examples/res/icon/server_wrench.png | Bin 0 -> 665 bytes FineUI.Examples/res/icon/shading.png | Bin 0 -> 225 bytes FineUI.Examples/res/icon/shape_3d.png | Bin 0 -> 601 bytes .../res/icon/shape_align_bottom.png | Bin 0 -> 398 bytes .../res/icon/shape_align_center.png | Bin 0 -> 384 bytes FineUI.Examples/res/icon/shape_align_left.png | Bin 0 -> 402 bytes .../res/icon/shape_align_middle.png | Bin 0 -> 414 bytes .../res/icon/shape_align_right.png | Bin 0 -> 401 bytes FineUI.Examples/res/icon/shape_align_top.png | Bin 0 -> 406 bytes .../res/icon/shape_flip_horizontal.png | Bin 0 -> 403 bytes .../res/icon/shape_flip_vertical.png | Bin 0 -> 418 bytes FineUI.Examples/res/icon/shape_group.png | Bin 0 -> 553 bytes FineUI.Examples/res/icon/shape_handles.png | Bin 0 -> 538 bytes FineUI.Examples/res/icon/shape_move_back.png | Bin 0 -> 395 bytes .../res/icon/shape_move_backwards.png | Bin 0 -> 358 bytes .../res/icon/shape_move_forwards.png | Bin 0 -> 381 bytes FineUI.Examples/res/icon/shape_move_front.png | Bin 0 -> 435 bytes .../res/icon/shape_rotate_anticlockwise.png | Bin 0 -> 657 bytes .../res/icon/shape_rotate_clockwise.png | Bin 0 -> 673 bytes FineUI.Examples/res/icon/shape_shade_a.png | Bin 0 -> 462 bytes FineUI.Examples/res/icon/shape_shade_b.png | Bin 0 -> 460 bytes FineUI.Examples/res/icon/shape_shade_c.png | Bin 0 -> 468 bytes FineUI.Examples/res/icon/shape_shadow.png | Bin 0 -> 416 bytes .../res/icon/shape_shadow_toggle.png | Bin 0 -> 461 bytes FineUI.Examples/res/icon/shape_square.png | Bin 0 -> 353 bytes FineUI.Examples/res/icon/shape_square_add.png | Bin 0 -> 539 bytes .../res/icon/shape_square_delete.png | Bin 0 -> 537 bytes .../res/icon/shape_square_edit.png | Bin 0 -> 660 bytes .../res/icon/shape_square_error.png | Bin 0 -> 570 bytes FineUI.Examples/res/icon/shape_square_go.png | Bin 0 -> 566 bytes FineUI.Examples/res/icon/shape_square_key.png | Bin 0 -> 607 bytes .../res/icon/shape_square_link.png | Bin 0 -> 642 bytes .../res/icon/shape_square_select.png | Bin 0 -> 589 bytes FineUI.Examples/res/icon/shape_ungroup.png | Bin 0 -> 666 bytes FineUI.Examples/res/icon/shapes_many.png | Bin 0 -> 371 bytes .../res/icon/shapes_many_select.png | Bin 0 -> 626 bytes FineUI.Examples/res/icon/share.png | Bin 0 -> 654 bytes FineUI.Examples/res/icon/shield.png | Bin 0 -> 702 bytes FineUI.Examples/res/icon/shield_add.png | Bin 0 -> 758 bytes FineUI.Examples/res/icon/shield_delete.png | Bin 0 -> 768 bytes FineUI.Examples/res/icon/shield_error.png | Bin 0 -> 765 bytes FineUI.Examples/res/icon/shield_go.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/shield_rainbow.png | Bin 0 -> 820 bytes FineUI.Examples/res/icon/shield_silver.png | Bin 0 -> 448 bytes FineUI.Examples/res/icon/shield_start.png | Bin 0 -> 806 bytes FineUI.Examples/res/icon/shield_stop.png | Bin 0 -> 779 bytes FineUI.Examples/res/icon/sitemap.png | Bin 0 -> 278 bytes FineUI.Examples/res/icon/sitemap_color.png | Bin 0 -> 406 bytes FineUI.Examples/res/icon/smartphone.png | Bin 0 -> 544 bytes FineUI.Examples/res/icon/smartphone_add.png | Bin 0 -> 679 bytes .../res/icon/smartphone_connect.png | Bin 0 -> 692 bytes .../res/icon/smartphone_delete.png | Bin 0 -> 677 bytes FineUI.Examples/res/icon/smartphone_disk.png | Bin 0 -> 705 bytes FineUI.Examples/res/icon/smartphone_edit.png | Bin 0 -> 755 bytes FineUI.Examples/res/icon/smartphone_error.png | Bin 0 -> 693 bytes FineUI.Examples/res/icon/smartphone_go.png | Bin 0 -> 700 bytes FineUI.Examples/res/icon/smartphone_key.png | Bin 0 -> 732 bytes .../res/icon/smartphone_wrench.png | Bin 0 -> 658 bytes FineUI.Examples/res/icon/sort_ascending.png | Bin 0 -> 506 bytes FineUI.Examples/res/icon/sort_descending.png | Bin 0 -> 509 bytes FineUI.Examples/res/icon/sound.png | Bin 0 -> 610 bytes FineUI.Examples/res/icon/sound_add.png | Bin 0 -> 684 bytes FineUI.Examples/res/icon/sound_delete.png | Bin 0 -> 711 bytes FineUI.Examples/res/icon/sound_high.png | Bin 0 -> 716 bytes FineUI.Examples/res/icon/sound_in.png | Bin 0 -> 573 bytes FineUI.Examples/res/icon/sound_low.png | Bin 0 -> 524 bytes FineUI.Examples/res/icon/sound_mute.png | Bin 0 -> 474 bytes FineUI.Examples/res/icon/sound_none.png | Bin 0 -> 417 bytes FineUI.Examples/res/icon/sound_out.png | Bin 0 -> 584 bytes FineUI.Examples/res/icon/spellcheck.png | Bin 0 -> 603 bytes FineUI.Examples/res/icon/sport_8ball.png | Bin 0 -> 490 bytes FineUI.Examples/res/icon/sport_basketball.png | Bin 0 -> 977 bytes FineUI.Examples/res/icon/sport_football.png | Bin 0 -> 875 bytes FineUI.Examples/res/icon/sport_golf.png | Bin 0 -> 504 bytes .../res/icon/sport_golf_practice.png | Bin 0 -> 871 bytes FineUI.Examples/res/icon/sport_raquet.png | Bin 0 -> 719 bytes .../res/icon/sport_shuttlecock.png | Bin 0 -> 683 bytes FineUI.Examples/res/icon/sport_soccer.png | Bin 0 -> 517 bytes FineUI.Examples/res/icon/sport_tennis.png | Bin 0 -> 884 bytes FineUI.Examples/res/icon/star.png | Bin 0 -> 670 bytes FineUI.Examples/res/icon/star_bronze.png | Bin 0 -> 674 bytes .../res/icon/star_bronze_half_grey.png | Bin 0 -> 654 bytes FineUI.Examples/res/icon/star_gold.png | Bin 0 -> 709 bytes .../res/icon/star_gold_half_grey.png | Bin 0 -> 676 bytes .../res/icon/star_gold_half_silver.png | Bin 0 -> 695 bytes FineUI.Examples/res/icon/star_grey.png | Bin 0 -> 435 bytes FineUI.Examples/res/icon/star_half_grey.png | Bin 0 -> 657 bytes FineUI.Examples/res/icon/star_silver.png | Bin 0 -> 454 bytes FineUI.Examples/res/icon/status_away.png | Bin 0 -> 794 bytes .../res/icon/status_be_right_back.png | Bin 0 -> 795 bytes FineUI.Examples/res/icon/status_busy.png | Bin 0 -> 751 bytes FineUI.Examples/res/icon/status_invisible.png | Bin 0 -> 704 bytes FineUI.Examples/res/icon/status_offline.png | Bin 0 -> 422 bytes FineUI.Examples/res/icon/status_online.png | Bin 0 -> 722 bytes FineUI.Examples/res/icon/stop.png | Bin 0 -> 700 bytes FineUI.Examples/res/icon/stop_blue.png | Bin 0 -> 391 bytes FineUI.Examples/res/icon/stop_green.png | Bin 0 -> 402 bytes FineUI.Examples/res/icon/stop_red.png | Bin 0 -> 390 bytes FineUI.Examples/res/icon/style.png | Bin 0 -> 813 bytes FineUI.Examples/res/icon/style_add.png | Bin 0 -> 844 bytes FineUI.Examples/res/icon/style_delete.png | Bin 0 -> 865 bytes FineUI.Examples/res/icon/style_edit.png | Bin 0 -> 927 bytes FineUI.Examples/res/icon/style_go.png | Bin 0 -> 862 bytes FineUI.Examples/res/icon/sum.png | Bin 0 -> 289 bytes FineUI.Examples/res/icon/system_close.gif | Bin 0 -> 634 bytes FineUI.Examples/res/icon/system_new.gif | Bin 0 -> 619 bytes FineUI.Examples/res/icon/system_save.gif | Bin 0 -> 621 bytes FineUI.Examples/res/icon/system_saveclose.gif | Bin 0 -> 631 bytes FineUI.Examples/res/icon/system_savenew.gif | Bin 0 -> 636 bytes FineUI.Examples/res/icon/system_search.gif | Bin 0 -> 567 bytes FineUI.Examples/res/icon/tab.png | Bin 0 -> 323 bytes FineUI.Examples/res/icon/tab_add.png | Bin 0 -> 488 bytes FineUI.Examples/res/icon/tab_blue.png | Bin 0 -> 338 bytes FineUI.Examples/res/icon/tab_delete.png | Bin 0 -> 493 bytes FineUI.Examples/res/icon/tab_edit.png | Bin 0 -> 580 bytes FineUI.Examples/res/icon/tab_go.png | Bin 0 -> 552 bytes FineUI.Examples/res/icon/tab_green.png | Bin 0 -> 371 bytes FineUI.Examples/res/icon/tab_red.png | Bin 0 -> 324 bytes FineUI.Examples/res/icon/table.png | Bin 0 -> 566 bytes FineUI.Examples/res/icon/table_add.png | Bin 0 -> 663 bytes FineUI.Examples/res/icon/table_cell.png | Bin 0 -> 595 bytes FineUI.Examples/res/icon/table_column.png | Bin 0 -> 592 bytes FineUI.Examples/res/icon/table_column_add.png | Bin 0 -> 628 bytes .../res/icon/table_column_delete.png | Bin 0 -> 629 bytes FineUI.Examples/res/icon/table_connect.png | Bin 0 -> 725 bytes FineUI.Examples/res/icon/table_delete.png | Bin 0 -> 660 bytes FineUI.Examples/res/icon/table_edit.png | Bin 0 -> 744 bytes FineUI.Examples/res/icon/table_error.png | Bin 0 -> 687 bytes FineUI.Examples/res/icon/table_gear.png | Bin 0 -> 714 bytes FineUI.Examples/res/icon/table_go.png | Bin 0 -> 683 bytes FineUI.Examples/res/icon/table_key.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/table_lightning.png | Bin 0 -> 736 bytes FineUI.Examples/res/icon/table_link.png | Bin 0 -> 728 bytes FineUI.Examples/res/icon/table_multiple.png | Bin 0 -> 612 bytes FineUI.Examples/res/icon/table_refresh.png | Bin 0 -> 795 bytes .../res/icon/table_relationship.png | Bin 0 -> 663 bytes FineUI.Examples/res/icon/table_row.png | Bin 0 -> 582 bytes FineUI.Examples/res/icon/table_row_delete.png | Bin 0 -> 629 bytes FineUI.Examples/res/icon/table_row_insert.png | Bin 0 -> 641 bytes FineUI.Examples/res/icon/table_save.png | Bin 0 -> 723 bytes FineUI.Examples/res/icon/table_sort.png | Bin 0 -> 678 bytes FineUI.Examples/res/icon/tag.png | Bin 0 -> 389 bytes FineUI.Examples/res/icon/tag_blue.png | Bin 0 -> 586 bytes FineUI.Examples/res/icon/tag_blue_add.png | Bin 0 -> 671 bytes FineUI.Examples/res/icon/tag_blue_delete.png | Bin 0 -> 701 bytes FineUI.Examples/res/icon/tag_blue_edit.png | Bin 0 -> 748 bytes FineUI.Examples/res/icon/tag_green.png | Bin 0 -> 613 bytes FineUI.Examples/res/icon/tag_orange.png | Bin 0 -> 586 bytes FineUI.Examples/res/icon/tag_pink.png | Bin 0 -> 579 bytes FineUI.Examples/res/icon/tag_purple.png | Bin 0 -> 599 bytes FineUI.Examples/res/icon/tag_red.png | Bin 0 -> 592 bytes FineUI.Examples/res/icon/tag_yellow.png | Bin 0 -> 586 bytes FineUI.Examples/res/icon/tags_grey.png | Bin 0 -> 312 bytes FineUI.Examples/res/icon/tags_red.png | Bin 0 -> 455 bytes FineUI.Examples/res/icon/telephone.png | Bin 0 -> 791 bytes FineUI.Examples/res/icon/telephone_add.png | Bin 0 -> 860 bytes FineUI.Examples/res/icon/telephone_delete.png | Bin 0 -> 856 bytes FineUI.Examples/res/icon/telephone_edit.png | Bin 0 -> 893 bytes FineUI.Examples/res/icon/telephone_error.png | Bin 0 -> 884 bytes FineUI.Examples/res/icon/telephone_go.png | Bin 0 -> 865 bytes FineUI.Examples/res/icon/telephone_key.png | Bin 0 -> 881 bytes FineUI.Examples/res/icon/telephone_link.png | Bin 0 -> 909 bytes FineUI.Examples/res/icon/telephone_red.png | Bin 0 -> 754 bytes FineUI.Examples/res/icon/television.png | Bin 0 -> 696 bytes FineUI.Examples/res/icon/television_add.png | Bin 0 -> 809 bytes .../res/icon/television_delete.png | Bin 0 -> 810 bytes FineUI.Examples/res/icon/television_in.png | Bin 0 -> 819 bytes FineUI.Examples/res/icon/television_off.png | Bin 0 -> 623 bytes FineUI.Examples/res/icon/television_out.png | Bin 0 -> 825 bytes FineUI.Examples/res/icon/television_star.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/text_ab.png | Bin 0 -> 553 bytes .../res/icon/text_align_center.png | Bin 0 -> 234 bytes .../res/icon/text_align_justify.png | Bin 0 -> 209 bytes FineUI.Examples/res/icon/text_align_left.png | Bin 0 -> 209 bytes FineUI.Examples/res/icon/text_align_right.png | Bin 0 -> 209 bytes FineUI.Examples/res/icon/text_allcaps.png | Bin 0 -> 284 bytes FineUI.Examples/res/icon/text_bold.png | Bin 0 -> 304 bytes FineUI.Examples/res/icon/text_columns.png | Bin 0 -> 246 bytes FineUI.Examples/res/icon/text_complete.png | Bin 0 -> 355 bytes FineUI.Examples/res/icon/text_direction.png | Bin 0 -> 369 bytes .../res/icon/text_double_underline.png | Bin 0 -> 276 bytes FineUI.Examples/res/icon/text_dropcaps.png | Bin 0 -> 314 bytes FineUI.Examples/res/icon/text_fit.png | Bin 0 -> 444 bytes FineUI.Examples/res/icon/text_flip.png | Bin 0 -> 323 bytes .../res/icon/text_font_default.png | Bin 0 -> 551 bytes FineUI.Examples/res/icon/text_heading_1.png | Bin 0 -> 276 bytes FineUI.Examples/res/icon/text_heading_2.png | Bin 0 -> 304 bytes FineUI.Examples/res/icon/text_heading_3.png | Bin 0 -> 306 bytes FineUI.Examples/res/icon/text_heading_4.png | Bin 0 -> 293 bytes FineUI.Examples/res/icon/text_heading_5.png | Bin 0 -> 304 bytes FineUI.Examples/res/icon/text_heading_6.png | Bin 0 -> 310 bytes .../res/icon/text_horizontalrule.png | Bin 0 -> 317 bytes FineUI.Examples/res/icon/text_indent.png | Bin 0 -> 353 bytes .../res/icon/text_indent_remove.png | Bin 0 -> 351 bytes FineUI.Examples/res/icon/text_inverse.png | Bin 0 -> 338 bytes FineUI.Examples/res/icon/text_italic.png | Bin 0 -> 223 bytes FineUI.Examples/res/icon/text_kerning.png | Bin 0 -> 495 bytes .../res/icon/text_left_to_right.png | Bin 0 -> 485 bytes .../res/icon/text_letter_omega.png | Bin 0 -> 541 bytes .../res/icon/text_letterspacing.png | Bin 0 -> 503 bytes FineUI.Examples/res/icon/text_linespacing.png | Bin 0 -> 363 bytes .../res/icon/text_list_bullets.png | Bin 0 -> 344 bytes .../res/icon/text_list_numbers.png | Bin 0 -> 357 bytes FineUI.Examples/res/icon/text_lowercase.png | Bin 0 -> 709 bytes FineUI.Examples/res/icon/text_lowercase_a.png | Bin 0 -> 520 bytes FineUI.Examples/res/icon/text_mirror.png | Bin 0 -> 326 bytes .../res/icon/text_padding_bottom.png | Bin 0 -> 237 bytes .../res/icon/text_padding_left.png | Bin 0 -> 271 bytes .../res/icon/text_padding_right.png | Bin 0 -> 271 bytes FineUI.Examples/res/icon/text_padding_top.png | Bin 0 -> 236 bytes FineUI.Examples/res/icon/text_replace.png | Bin 0 -> 691 bytes .../res/icon/text_right_to_left.png | Bin 0 -> 478 bytes FineUI.Examples/res/icon/text_rotate_0.png | Bin 0 -> 326 bytes FineUI.Examples/res/icon/text_rotate_180.png | Bin 0 -> 318 bytes FineUI.Examples/res/icon/text_rotate_270.png | Bin 0 -> 323 bytes FineUI.Examples/res/icon/text_rotate_90.png | Bin 0 -> 320 bytes FineUI.Examples/res/icon/text_ruler.png | Bin 0 -> 459 bytes FineUI.Examples/res/icon/text_shading.png | Bin 0 -> 674 bytes FineUI.Examples/res/icon/text_signature.png | Bin 0 -> 524 bytes FineUI.Examples/res/icon/text_smallcaps.png | Bin 0 -> 260 bytes FineUI.Examples/res/icon/text_spelling.png | Bin 0 -> 583 bytes .../res/icon/text_strikethrough.png | Bin 0 -> 269 bytes FineUI.Examples/res/icon/text_subscript.png | Bin 0 -> 422 bytes FineUI.Examples/res/icon/text_superscript.png | Bin 0 -> 421 bytes FineUI.Examples/res/icon/text_tab.png | Bin 0 -> 283 bytes FineUI.Examples/res/icon/text_underline.png | Bin 0 -> 273 bytes FineUI.Examples/res/icon/text_uppercase.png | Bin 0 -> 747 bytes FineUI.Examples/res/icon/textfield.png | Bin 0 -> 153 bytes FineUI.Examples/res/icon/textfield_add.png | Bin 0 -> 321 bytes FineUI.Examples/res/icon/textfield_delete.png | Bin 0 -> 335 bytes FineUI.Examples/res/icon/textfield_key.png | Bin 0 -> 455 bytes FineUI.Examples/res/icon/textfield_rename.png | Bin 0 -> 273 bytes FineUI.Examples/res/icon/theme.png | Bin 0 -> 756 bytes FineUI.Examples/res/icon/thumb_down.png | Bin 0 -> 601 bytes FineUI.Examples/res/icon/thumb_up.png | Bin 0 -> 619 bytes FineUI.Examples/res/icon/tick.png | Bin 0 -> 537 bytes FineUI.Examples/res/icon/time.png | Bin 0 -> 793 bytes FineUI.Examples/res/icon/time_add.png | Bin 0 -> 827 bytes FineUI.Examples/res/icon/time_delete.png | Bin 0 -> 853 bytes FineUI.Examples/res/icon/time_go.png | Bin 0 -> 882 bytes FineUI.Examples/res/icon/time_green.png | Bin 0 -> 854 bytes FineUI.Examples/res/icon/time_red.png | Bin 0 -> 838 bytes FineUI.Examples/res/icon/timeline_marker.png | Bin 0 -> 327 bytes FineUI.Examples/res/icon/transmit.png | Bin 0 -> 749 bytes FineUI.Examples/res/icon/transmit_add.png | Bin 0 -> 803 bytes FineUI.Examples/res/icon/transmit_blue.png | Bin 0 -> 814 bytes FineUI.Examples/res/icon/transmit_delete.png | Bin 0 -> 827 bytes FineUI.Examples/res/icon/transmit_edit.png | Bin 0 -> 848 bytes FineUI.Examples/res/icon/transmit_error.png | Bin 0 -> 883 bytes FineUI.Examples/res/icon/transmit_go.png | Bin 0 -> 842 bytes FineUI.Examples/res/icon/transmit_red.png | Bin 0 -> 838 bytes FineUI.Examples/res/icon/tux.png | Bin 0 -> 696 bytes FineUI.Examples/res/icon/user.png | Bin 0 -> 741 bytes FineUI.Examples/res/icon/user_add.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/user_alert.png | Bin 0 -> 822 bytes FineUI.Examples/res/icon/user_b.png | Bin 0 -> 777 bytes FineUI.Examples/res/icon/user_brown.png | Bin 0 -> 779 bytes FineUI.Examples/res/icon/user_comment.png | Bin 0 -> 743 bytes FineUI.Examples/res/icon/user_cross.png | Bin 0 -> 856 bytes FineUI.Examples/res/icon/user_delete.png | Bin 0 -> 767 bytes FineUI.Examples/res/icon/user_earth.png | Bin 0 -> 853 bytes FineUI.Examples/res/icon/user_edit.png | Bin 0 -> 833 bytes FineUI.Examples/res/icon/user_female.png | Bin 0 -> 663 bytes FineUI.Examples/res/icon/user_go.png | Bin 0 -> 793 bytes FineUI.Examples/res/icon/user_gray.png | Bin 0 -> 706 bytes FineUI.Examples/res/icon/user_gray_cool.png | Bin 0 -> 761 bytes FineUI.Examples/res/icon/user_green.png | Bin 0 -> 722 bytes FineUI.Examples/res/icon/user_home.png | Bin 0 -> 865 bytes FineUI.Examples/res/icon/user_key.png | Bin 0 -> 834 bytes FineUI.Examples/res/icon/user_magnify.png | Bin 0 -> 808 bytes FineUI.Examples/res/icon/user_mature.png | Bin 0 -> 773 bytes FineUI.Examples/res/icon/user_orange.png | Bin 0 -> 723 bytes FineUI.Examples/res/icon/user_red.png | Bin 0 -> 717 bytes FineUI.Examples/res/icon/user_star.png | Bin 0 -> 816 bytes FineUI.Examples/res/icon/user_suit.png | Bin 0 -> 748 bytes FineUI.Examples/res/icon/user_suit_black.png | Bin 0 -> 784 bytes FineUI.Examples/res/icon/user_tick.png | Bin 0 -> 827 bytes FineUI.Examples/res/icon/vcard.png | Bin 0 -> 533 bytes FineUI.Examples/res/icon/vcard_add.png | Bin 0 -> 661 bytes FineUI.Examples/res/icon/vcard_delete.png | Bin 0 -> 651 bytes FineUI.Examples/res/icon/vcard_edit.png | Bin 0 -> 775 bytes FineUI.Examples/res/icon/vcard_key.png | Bin 0 -> 695 bytes FineUI.Examples/res/icon/vector.png | Bin 0 -> 481 bytes FineUI.Examples/res/icon/vector_add.png | Bin 0 -> 616 bytes FineUI.Examples/res/icon/vector_delete.png | Bin 0 -> 635 bytes FineUI.Examples/res/icon/vector_key.png | Bin 0 -> 746 bytes FineUI.Examples/res/icon/wand.png | Bin 0 -> 570 bytes FineUI.Examples/res/icon/weather_cloud.png | Bin 0 -> 595 bytes FineUI.Examples/res/icon/weather_clouds.png | Bin 0 -> 581 bytes FineUI.Examples/res/icon/weather_cloudy.png | Bin 0 -> 694 bytes .../res/icon/weather_cloudy_rain.png | Bin 0 -> 835 bytes .../res/icon/weather_lightning.png | Bin 0 -> 641 bytes FineUI.Examples/res/icon/weather_rain.png | Bin 0 -> 626 bytes FineUI.Examples/res/icon/weather_snow.png | Bin 0 -> 341 bytes FineUI.Examples/res/icon/weather_sun.png | Bin 0 -> 623 bytes FineUI.Examples/res/icon/webcam.png | Bin 0 -> 728 bytes FineUI.Examples/res/icon/webcam_add.png | Bin 0 -> 786 bytes FineUI.Examples/res/icon/webcam_connect.png | Bin 0 -> 825 bytes FineUI.Examples/res/icon/webcam_delete.png | Bin 0 -> 805 bytes FineUI.Examples/res/icon/webcam_error.png | Bin 0 -> 821 bytes FineUI.Examples/res/icon/webcam_start.png | Bin 0 -> 857 bytes FineUI.Examples/res/icon/webcam_stop.png | Bin 0 -> 814 bytes FineUI.Examples/res/icon/world.png | Bin 0 -> 923 bytes FineUI.Examples/res/icon/world_add.png | Bin 0 -> 940 bytes FineUI.Examples/res/icon/world_connect.png | Bin 0 -> 963 bytes FineUI.Examples/res/icon/world_dawn.png | Bin 0 -> 821 bytes FineUI.Examples/res/icon/world_delete.png | Bin 0 -> 945 bytes FineUI.Examples/res/icon/world_edit.png | Bin 0 -> 945 bytes FineUI.Examples/res/icon/world_go.png | Bin 0 -> 944 bytes FineUI.Examples/res/icon/world_key.png | Bin 0 -> 965 bytes FineUI.Examples/res/icon/world_link.png | Bin 0 -> 957 bytes FineUI.Examples/res/icon/world_night.png | Bin 0 -> 514 bytes FineUI.Examples/res/icon/world_orbit.png | Bin 0 -> 967 bytes FineUI.Examples/res/icon/wrench.png | Bin 0 -> 610 bytes FineUI.Examples/res/icon/wrench_orange.png | Bin 0 -> 584 bytes FineUI.Examples/res/icon/xhtml.png | Bin 0 -> 595 bytes FineUI.Examples/res/icon/xhtml_add.png | Bin 0 -> 703 bytes FineUI.Examples/res/icon/xhtml_delete.png | Bin 0 -> 696 bytes FineUI.Examples/res/icon/xhtml_error.png | Bin 0 -> 736 bytes FineUI.Examples/res/icon/xhtml_go.png | Bin 0 -> 697 bytes FineUI.Examples/res/icon/xhtml_valid.png | Bin 0 -> 718 bytes FineUI.Examples/res/icon/zoom.png | Bin 0 -> 692 bytes FineUI.Examples/res/icon/zoom_in.png | Bin 0 -> 725 bytes FineUI.Examples/res/icon/zoom_out.png | Bin 0 -> 708 bytes FineUI.Examples/res/images/16/1.png | Bin 0 -> 586 bytes FineUI.Examples/res/images/16/10.png | Bin 0 -> 779 bytes FineUI.Examples/res/images/16/11.png | Bin 0 -> 663 bytes FineUI.Examples/res/images/16/12.png | Bin 0 -> 706 bytes FineUI.Examples/res/images/16/13.png | Bin 0 -> 761 bytes FineUI.Examples/res/images/16/14.png | Bin 0 -> 722 bytes FineUI.Examples/res/images/16/15.png | Bin 0 -> 773 bytes FineUI.Examples/res/images/16/16.png | Bin 0 -> 723 bytes FineUI.Examples/res/images/16/17.png | Bin 0 -> 717 bytes FineUI.Examples/res/images/16/18.png | Bin 0 -> 748 bytes FineUI.Examples/res/images/16/19.png | Bin 0 -> 784 bytes FineUI.Examples/res/images/16/2.png | Bin 0 -> 613 bytes FineUI.Examples/res/images/16/20.png | Bin 0 -> 793 bytes FineUI.Examples/res/images/16/21.png | Bin 0 -> 865 bytes FineUI.Examples/res/images/16/23.png | Bin 0 -> 834 bytes FineUI.Examples/res/images/16/24.png | Bin 0 -> 808 bytes FineUI.Examples/res/images/16/25.png | Bin 0 -> 816 bytes FineUI.Examples/res/images/16/3.png | Bin 0 -> 586 bytes FineUI.Examples/res/images/16/4.png | Bin 0 -> 579 bytes FineUI.Examples/res/images/16/5.png | Bin 0 -> 599 bytes FineUI.Examples/res/images/16/6.png | Bin 0 -> 592 bytes FineUI.Examples/res/images/16/7.png | Bin 0 -> 586 bytes FineUI.Examples/res/images/16/8.png | Bin 0 -> 741 bytes FineUI.Examples/res/images/16/9.png | Bin 0 -> 777 bytes FineUI.Examples/res/images/16/Thumbs.db | Bin 0 -> 3584 bytes FineUI.Examples/res/images/Thumbs.db | Bin 0 -> 280064 bytes FineUI.Examples/res/images/blank.png | Bin 0 -> 3430 bytes .../res/images/bs-docs-masthead-pattern.png | Bin 0 -> 6450 bytes FineUI.Examples/res/images/china.gif | Bin 0 -> 82978 bytes FineUI.Examples/res/images/class.gif | Bin 0 -> 925 bytes FineUI.Examples/res/images/cmp.gif | Bin 0 -> 988 bytes FineUI.Examples/res/images/code.gif | Bin 0 -> 988 bytes FineUI.Examples/res/images/collapse-all.gif | Bin 0 -> 983 bytes FineUI.Examples/res/images/comment.gif | Bin 0 -> 595 bytes FineUI.Examples/res/images/delete.png | Bin 0 -> 715 bytes .../res/images/delete_disabled.png | Bin 0 -> 563 bytes FineUI.Examples/res/images/demo_pro.png | Bin 0 -> 16847 bytes FineUI.Examples/res/images/diamond-black.gif | Bin 0 -> 49 bytes .../res/images/enable_gzip_iis6_1.png | Bin 0 -> 15221 bytes .../res/images/enable_gzip_iis6_2.png | Bin 0 -> 9671 bytes .../res/images/enable_gzip_iis6_3.png | Bin 0 -> 14752 bytes .../res/images/enable_gzip_iis6_4.png | Bin 0 -> 28953 bytes .../res/images/enable_gzip_iis6_5.png | Bin 0 -> 5493 bytes FineUI.Examples/res/images/expand-all.gif | Bin 0 -> 1009 bytes FineUI.Examples/res/images/filetype/Thumbs.db | Bin 0 -> 14848 bytes .../res/images/filetype/vs_ascx.png | Bin 0 -> 3007 bytes .../res/images/filetype/vs_ashx.png | Bin 0 -> 3294 bytes .../res/images/filetype/vs_aspx.png | Bin 0 -> 3290 bytes .../res/images/filetype/vs_config.png | Bin 0 -> 3361 bytes FineUI.Examples/res/images/filetype/vs_cs.png | Bin 0 -> 3326 bytes .../res/images/filetype/vs_css.png | Bin 0 -> 3272 bytes .../res/images/filetype/vs_htm.png | Bin 0 -> 3253 bytes .../res/images/filetype/vs_html.png | Bin 0 -> 3253 bytes .../res/images/filetype/vs_img.png | Bin 0 -> 3365 bytes FineUI.Examples/res/images/filetype/vs_js.png | Bin 0 -> 3430 bytes .../res/images/filetype/vs_master.png | Bin 0 -> 3007 bytes .../res/images/filetype/vs_sitemap.png | Bin 0 -> 3274 bytes .../res/images/filetype/vs_txt.png | Bin 0 -> 3157 bytes .../res/images/filetype/vs_unknow.png | Bin 0 -> 3017 bytes .../res/images/filetype/vs_usercontrol.png | Bin 0 -> 3007 bytes FineUI.Examples/res/images/filetype/vs_vb.png | Bin 0 -> 3255 bytes .../res/images/filetype/vs_xml.png | Bin 0 -> 3195 bytes .../res/images/formchangeconfirm.png | Bin 0 -> 99770 bytes FineUI.Examples/res/images/ico_24_grsz.gif | Bin 0 -> 1274 bytes FineUI.Examples/res/images/icons.gif | Bin 0 -> 495937 bytes FineUI.Examples/res/images/loading/Thumbs.db | Bin 0 -> 4096 bytes .../res/images/loading/loading_24.gif | Bin 0 -> 2545 bytes .../res/images/loading/loading_25.gif | Bin 0 -> 3494 bytes .../res/images/loading/loading_32.gif | Bin 0 -> 4176 bytes .../res/images/loading/loading_32_2.gif | Bin 0 -> 4178 bytes .../res/images/loading/loading_42.gif | Bin 0 -> 3992 bytes .../res/images/loading/loading_50.gif | Bin 0 -> 6494 bytes FineUI.Examples/res/images/login.png | Bin 0 -> 6387 bytes FineUI.Examples/res/images/logo/Thumbs.db | Bin 0 -> 22528 bytes FineUI.Examples/res/images/logo/favicon.gif | Bin 0 -> 865 bytes FineUI.Examples/res/images/logo/favicon.ico | Bin 0 -> 17542 bytes FineUI.Examples/res/images/logo/favicon.png | Bin 0 -> 4116 bytes FineUI.Examples/res/images/logo/logo.png | Bin 0 -> 2590 bytes FineUI.Examples/res/images/logo/logo.psd | Bin 0 -> 24578 bytes FineUI.Examples/res/images/logo/logo2.gif | Bin 0 -> 769 bytes FineUI.Examples/res/images/logo/logo3.png | Bin 0 -> 2676 bytes FineUI.Examples/res/images/logo/logo3_old.gif | Bin 0 -> 2099 bytes FineUI.Examples/res/images/logo/logo_127.psd | Bin 0 -> 23378 bytes FineUI.Examples/res/images/logo/logo_old.gif | Bin 0 -> 2054 bytes FineUI.Examples/res/images/love.jpg | Bin 0 -> 1008 bytes .../res/images/nav_hover_highlight_2.gif | Bin 0 -> 147 bytes FineUI.Examples/res/images/no_data_found.jpg | Bin 0 -> 2964 bytes .../res/images/pagemenu-separator.gif | Bin 0 -> 55 bytes .../images/pagemenu_toolbar_background.gif | Bin 0 -> 153 bytes FineUI.Examples/res/images/pkg.gif | Bin 0 -> 936 bytes FineUI.Examples/res/images/snapshot/Thumbs.db | Bin 0 -> 8704 bytes .../res/images/snapshot/cascade_window.jpg | Bin 0 -> 220186 bytes FineUI.Examples/res/images/square.gif | Bin 0 -> 71 bytes FineUI.Examples/res/images/success.png | Bin 0 -> 4447 bytes .../images/themeroller-ready-black-200px.png | Bin 0 -> 6099 bytes .../images/themeroller-ready-white-200px.png | Bin 0 -> 5578 bytes FineUI.Examples/res/images/toolbox.png | Bin 0 -> 38973 bytes .../res/images/ui-anim_basic_16x16.gif | Bin 0 -> 1459 bytes FineUI.Examples/res/js/jquery.js | 10308 ++++ FineUI.Examples/res/js/jquery.min.js | 4 + FineUI.Examples/tabstrip/tabstrip.aspx | 125 +- FineUI.Examples/tabstrip/tabstrip.aspx.cs | 72 +- .../tabstrip/tabstrip.aspx.designer.cs | 264 +- FineUI.Examples/tabstrip/tabstrip_addtab.aspx | 114 +- .../tabstrip/tabstrip_addtab.aspx.cs | 91 +- .../tabstrip/tabstrip_addtab.aspx.designer.cs | 228 +- .../tabstrip/tabstrip_autopostback.aspx | 126 +- .../tabstrip/tabstrip_autopostback.aspx.cs | 102 +- .../tabstrip_autopostback.aspx.designer.cs | 264 +- .../tabstrip/tabstrip_enableclose.aspx | 123 +- .../tabstrip/tabstrip_enableclose.aspx.cs | 68 +- .../tabstrip_enableclose.aspx.designer.cs | 336 +- FineUI.Examples/tabstrip/tabstrip_iframe.aspx | 72 +- .../tabstrip/tabstrip_iframe.aspx.cs | 46 +- .../tabstrip/tabstrip_iframe.aspx.designer.cs | 174 +- .../tabstrip/tabstrip_iframe_disabled.aspx | 57 +- .../tabstrip/tabstrip_iframe_disabled.aspx.cs | 84 +- .../tabstrip_iframe_disabled.aspx.designer.cs | 138 +- .../tabstrip_iframe_disabled_tab1.aspx | 41 +- .../tabstrip_iframe_disabled_tab1.aspx.cs | 72 +- ...trip_iframe_disabled_tab1.aspx.designer.cs | 102 +- .../tabstrip/tabstrip_position.aspx | 102 + .../tabstrip/tabstrip_position.aspx.cs | 20 + .../tabstrip_position.aspx.designer.cs | 258 + FineUI.Examples/test/start.aspx | 122 +- FineUI.Examples/test/start.aspx.cs | 56 +- FineUI.Examples/test/start.aspx.designer.cs | 210 +- FineUI.Examples/test/test.aspx | 78 +- FineUI.Examples/test/test.aspx.cs | 54 +- FineUI.Examples/test/test.aspx.designer.cs | 147 +- FineUI.Examples/test/test.htm | 481 +- FineUI.Examples/test/test2.aspx | 93 +- FineUI.Examples/test/test2.aspx.cs | 131 +- FineUI.Examples/test/test2.aspx.designer.cs | 201 +- FineUI.Examples/test/test2.htm | 18 +- FineUI.Examples/test/test3.aspx | 61 +- FineUI.Examples/test/test3.aspx.cs | 84 +- FineUI.Examples/test/test3.aspx.designer.cs | 129 +- FineUI.Examples/test/test4.aspx | 174 +- FineUI.Examples/test/test4.aspx.cs | 196 +- FineUI.Examples/test/test4.aspx.designer.cs | 264 +- FineUI.Examples/test/textbox.aspx | 64 +- FineUI.Examples/test/textbox.aspx.cs | 126 +- FineUI.Examples/test/textbox.aspx.designer.cs | 120 +- FineUI.Examples/test/timer.aspx | 47 +- FineUI.Examples/test/timer.aspx.cs | 40 +- FineUI.Examples/test/timer.aspx.designer.cs | 129 +- .../autocomplete/custom_display.aspx | 82 + .../autocomplete/custom_display.aspx.cs | 24 + .../custom_display.aspx.designer.cs | 69 + .../third-party/autocomplete/email.aspx | 63 + .../third-party/autocomplete/email.aspx.cs | 24 + .../autocomplete/email.aspx.designer.cs | 51 + .../third-party/autocomplete/inline.aspx | 61 + .../third-party/autocomplete/inline.aspx.cs | 24 + .../autocomplete/inline.aspx.designer.cs | 51 + .../autocomplete/inline_window.aspx | 77 + .../autocomplete/inline_window.aspx.cs | 29 + .../inline_window.aspx.designer.cs | 69 + .../autocomplete/multi_values.aspx | 101 + .../autocomplete/multi_values.aspx.cs | 24 + .../multi_values.aspx.designer.cs | 51 + .../autocomplete/multi_values_remote.aspx | 89 + .../autocomplete/multi_values_remote.aspx.cs | 24 + .../multi_values_remote.aspx.designer.cs | 51 + .../autocomplete/remote_with_cache.aspx | 59 + .../autocomplete/remote_with_cache.aspx.cs | 24 + .../remote_with_cache.aspx.designer.cs | 51 + .../third-party/autocomplete/search.ashx | 1 + .../third-party/autocomplete/search.ashx.cs | 72 + .../third-party/ckeditor/ckeditor.aspx | 78 + .../third-party/ckeditor/ckeditor.aspx.cs | 46 + .../ckeditor/ckeditor.aspx.designer.cs | 60 + FineUI.Examples/third-party/my97/my97.aspx | 52 + FineUI.Examples/third-party/my97/my97.aspx.cs | 24 + .../third-party/my97/my97.aspx.designer.cs | 78 + .../res/My97DatePicker_4.8beta4.zip | Bin 0 -> 38223 bytes .../third-party/res/ckeditor_4.4.2_full.zip | Bin 0 -> 1389795 bytes .../third-party/res/tinymce_4.1.1.zip | Bin 0 -> 316789 bytes .../third-party/res/ueditor1_4_3-utf8-net.zip | Bin 0 -> 3518597 bytes .../res/umeditor1_2_2-utf8-net.zip | Bin 0 -> 5834975 bytes FineUI.Examples/third-party/res/授权说明.txt | 19 + .../third-party/tinymce/tinymce.aspx | 79 + .../third-party/tinymce/tinymce.aspx.cs | 46 + .../tinymce/tinymce.aspx.designer.cs | 60 + .../third-party/ueditor/ueditor.aspx | 83 + .../third-party/ueditor/ueditor.aspx.cs | 46 + .../ueditor/ueditor.aspx.designer.cs | 60 + .../third-party/ueditor/ueditor_two.aspx | 139 + .../third-party/ueditor/ueditor_two.aspx.cs | 56 + .../ueditor/ueditor_two.aspx.designer.cs | 132 + .../third-party/umeditor/umeditor.aspx | 74 + .../third-party/umeditor/umeditor.aspx.cs | 49 + .../umeditor/umeditor.aspx.designer.cs | 69 + FineUI.Examples/toolbar/form.aspx | 101 + FineUI.Examples/toolbar/form.aspx.cs | 42 + FineUI.Examples/toolbar/form.aspx.designer.cs | 150 + FineUI.Examples/toolbar/menu.aspx | 99 +- FineUI.Examples/toolbar/menu.aspx.cs | 44 +- FineUI.Examples/toolbar/menu.aspx.designer.cs | 138 +- FineUI.Examples/toolbar/menu.xml | 20 +- FineUI.Examples/toolbar/menu_dynamic.aspx | 42 +- FineUI.Examples/toolbar/menu_dynamic.aspx.cs | 212 +- .../toolbar/menu_dynamic.aspx.designer.cs | 84 +- FineUI.Examples/toolbar/menu_dynamic2.aspx | 54 +- FineUI.Examples/toolbar/menu_dynamic2.aspx.cs | 70 +- .../toolbar/menu_dynamic2.aspx.designer.cs | 102 +- FineUI.Examples/toolbar/menu_hideonclick.aspx | 54 + .../toolbar/menu_hideonclick.aspx.cs | 22 + .../toolbar/menu_hideonclick.aspx.designer.cs | 69 + FineUI.Examples/toolbar/menucheckbox.aspx | 110 +- FineUI.Examples/toolbar/menucheckbox.aspx.cs | 142 +- .../toolbar/menucheckbox.aspx.designer.cs | 246 +- FineUI.Examples/toolbar/multi_toolbars.aspx | 69 + .../toolbar/multi_toolbars.aspx.cs | 22 + .../toolbar/multi_toolbars.aspx.designer.cs | 150 + FineUI.Examples/toolbar/toolbar_iframe.aspx | 77 +- .../toolbar/toolbar_iframe.aspx.cs | 43 +- .../toolbar/toolbar_iframe.aspx.designer.cs | 129 +- FineUI.Examples/toolbar/toolbar_images.aspx | 75 + .../toolbar/toolbar_images.aspx.cs | 21 + .../toolbar/toolbar_images.aspx.designer.cs | 105 + .../toolbar/toolbar_images_fixedwidth.aspx | 47 + .../toolbar/toolbar_images_fixedwidth.aspx.cs | 21 + ...toolbar_images_fixedwidth.aspx.designer.cs | 96 + .../tree/checkbox/tree_checkall.aspx | 76 +- .../tree/checkbox/tree_checkall.aspx.cs | 118 +- .../checkbox/tree_checkall.aspx.designer.cs | 84 +- .../tree/checkbox/tree_checked.aspx | 84 +- .../tree/checkbox/tree_checked.aspx.cs | 78 +- .../checkbox/tree_checked.aspx.designer.cs | 120 +- FineUI.Examples/tree/databind/Web.sitemap | 30 +- .../tree/databind/tree_datasource.aspx | 43 +- .../tree/databind/tree_datasource.aspx.cs | 68 +- .../databind/tree_datasource.aspx.designer.cs | 102 +- .../tree/databind/tree_datatable.aspx | 36 +- .../tree/databind/tree_datatable.aspx.cs | 256 +- .../databind/tree_datatable.aspx.designer.cs | 84 +- .../tree/databind/tree_document.aspx | 40 +- .../tree/databind/tree_document.aspx.cs | 97 +- .../databind/tree_document.aspx.designer.cs | 102 +- .../tree/databind/tree_sitemap.aspx | 49 +- .../tree/databind/tree_sitemap.aspx.cs | 66 +- .../databind/tree_sitemap.aspx.designer.cs | 102 +- FineUI.Examples/tree/databind/website.xml | 28 +- .../tree/select/tree_multi_select.aspx | 104 +- .../tree/select/tree_multi_select.aspx.cs | 126 +- .../select/tree_multi_select.aspx.designer.cs | 138 +- .../select/tree_multi_select_selectable.aspx | 49 + .../tree_multi_select_selectable.aspx.cs | 63 + ...e_multi_select_selectable.aspx.designer.cs | 69 + .../tree/select/tree_nodecommand.aspx | 84 +- .../tree/select/tree_nodecommand.aspx.cs | 56 +- .../select/tree_nodecommand.aspx.designer.cs | 102 +- FineUI.Examples/tree/select/tree_select.aspx | 92 +- .../tree/select/tree_select.aspx.cs | 84 +- .../tree/select/tree_select.aspx.designer.cs | 138 +- FineUI.Examples/tree/tree.aspx | 80 +- FineUI.Examples/tree/tree.aspx.cs | 45 +- FineUI.Examples/tree/tree.aspx.designer.cs | 84 +- FineUI.Examples/tree/tree_ajax.aspx | 74 +- FineUI.Examples/tree/tree_ajax.aspx.cs | 124 +- .../tree/tree_ajax.aspx.designer.cs | 84 +- .../tree/tree_auto_leaf_identification.aspx | 42 +- .../tree_auto_leaf_identification.aspx.cs | 290 +- ..._auto_leaf_identification.aspx.designer.cs | 102 +- FineUI.Examples/tree/tree_expand.aspx | 42 + FineUI.Examples/tree/tree_expand.aspx.cs | 34 + .../tree/tree_expand.aspx.designer.cs | 51 + FineUI.Examples/tree/tree_icon.aspx | 82 +- FineUI.Examples/tree/tree_icon.aspx.cs | 42 +- .../tree/tree_icon.aspx.designer.cs | 84 +- FineUI.Examples/tree/tree_nodedatabound.aspx | 29 + .../tree/tree_nodedatabound.aspx.cs | 43 + .../tree/tree_nodedatabound.aspx.designer.cs | 51 + FineUI.Examples/upload/web.config | 12 +- .../usercontrol/UserInfoControl.ascx | 16 +- .../usercontrol/UserInfoControl.ascx.cs | 122 +- .../UserInfoControl.ascx.designer.cs | 66 +- FineUI.Examples/usercontrol/userinfo.aspx | 81 +- FineUI.Examples/usercontrol/userinfo.aspx.cs | 32 +- .../usercontrol/userinfo.aspx.designer.cs | 174 +- FineUI.Examples/usercontrol/userinfo2.aspx | 121 +- FineUI.Examples/usercontrol/userinfo2.aspx.cs | 62 +- .../usercontrol/userinfo2.aspx.designer.cs | 300 +- .../usercontrol/userinfo_dynamic.aspx | 53 +- .../usercontrol/userinfo_dynamic.aspx.cs | 84 +- .../userinfo_dynamic.aspx.designer.cs | 120 +- FineUI.Examples/window/group_panel.aspx | 116 +- FineUI.Examples/window/group_panel.aspx.cs | 54 +- .../window/group_panel.aspx.designer.cs | 246 +- FineUI.Examples/window/panel.aspx | 115 +- FineUI.Examples/window/panel.aspx.cs | 94 +- FineUI.Examples/window/panel.aspx.designer.cs | 318 +- FineUI.Examples/window/panel_collapse.aspx | 28 + FineUI.Examples/window/panel_collapse.aspx.cs | 32 + .../window/panel_collapse.aspx.designer.cs | 51 + FineUI.Examples/window/window.aspx | 94 +- FineUI.Examples/window/window.aspx.cs | 92 +- .../window/window.aspx.designer.cs | 183 +- FineUI.Examples/window/window_form.aspx | 78 + FineUI.Examples/window/window_form.aspx.cs | 35 + .../window/window_form.aspx.designer.cs | 168 + FineUI.Examples/window/window_multi.aspx | 141 + FineUI.Examples/window/window_multi.aspx.cs | 34 + .../window/window_multi.aspx.designer.cs | 213 + FineUI.Examples/window/window_toolbar.aspx | 89 +- FineUI.Examples/window/window_toolbar.aspx.cs | 65 +- .../window/window_toolbar.aspx.designer.cs | 219 +- FineUI.sln | 52 +- .../FormBase.cs | 685 +- .../CollapsablePanel.cs | 1033 +- .../PanelBase.cs | 2245 +- .../BoxComponent.Container/Container.cs | 352 +- .../RealTextField.cs | 813 +- .../BoxComponent.Field.TextField/TextField.cs | 1115 +- .../BoxComponent.Field/Field.cs | 1084 +- .../BoxComponent.Field/TooltipField.cs | 330 +- .../BoxComponent.cs | 1073 +- .../ControlBase.Component/Component.cs | 792 +- .../ControlBase/BaseCollection.cs | 274 +- .../ControlBase/ControlBase.cs | 4256 +- .../ControlBase/ControlBaseCollection.cs | 156 +- .../ControlBase/Listener/Listener.cs | 120 + .../Listener/ListenerCollection.cs | 60 + FineUI/Business/Config/ConfigSection.cs | 684 +- FineUI/Business/Config/Constants.cs | 391 +- FineUI/Business/Config/GlobalConfig.cs | 743 +- .../ControlBuilder/ContentPanelBuilder.cs | 150 +- .../NotAllowWhitespaceLiteralsBuilder.cs | 134 +- .../Business/Editor/ControlBaseItemsEditor.cs | 191 +- .../Business/Editor/GridColumnEditorEditor.cs | 160 +- FineUI/Business/Editor/GridColumnsEditor.cs | 134 +- FineUI/Business/Editor/MenuItemsEditor.cs | 130 +- FineUI/Business/Editor/ToolbarItemsEditor.cs | 166 +- FineUI/Business/Enums/AjaxLoadingType.cs | 138 +- FineUI/Business/Enums/BoxLayoutAlign.cs | 212 +- FineUI/Business/Enums/BoxLayoutPosition.cs | 169 +- FineUI/Business/Enums/ButtonAlign.cs | 88 +- FineUI/Business/Enums/ButtonSize.cs | 100 +- FineUI/Business/Enums/ButtonType.cs | 100 +- FineUI/Business/Enums/CloseAction.cs | 150 +- FineUI/Business/Enums/CollapseMode.cs | 138 +- FineUI/Business/Enums/CompareType.cs | 166 +- FineUI/Business/Enums/FooterBarAlign.cs | 100 +- FineUI/Business/Enums/Grid/FieldType.cs | 142 +- FineUI/Business/Enums/Grid/Renderer.cs | 304 +- FineUI/Business/Enums/HideMode.cs | 148 +- FineUI/Business/Enums/Icon.cs | 27638 +++++----- FineUI/Business/Enums/IconAlign.cs | 168 +- FineUI/Business/Enums/IconHelper.cs | 240 +- FineUI/Business/Enums/LabelAlign.cs | 100 +- FineUI/Business/Enums/Language.cs | 528 +- FineUI/Business/Enums/Layout.cs | 284 +- FineUI/Business/Enums/MessageBoxIcon.cs | 218 +- FineUI/Business/Enums/MessageTarget.cs | 176 +- FineUI/Business/Enums/Operator.cs | 190 +- FineUI/Business/Enums/Position.cs | 178 +- FineUI/Business/Enums/RegexPattern.cs | 320 +- FineUI/Business/Enums/SummaryPosition.cs | 76 + FineUI/Business/Enums/TabPosition.cs | 116 +- FineUI/Business/Enums/Target.cs | 198 +- FineUI/Business/Enums/TextAlign.cs | 100 +- FineUI/Business/Enums/TextMode.cs | 134 +- FineUI/Business/Enums/Theme.cs | 162 +- FineUI/Business/Enums/ToolTipType.cs | 134 +- FineUI/Business/Enums/ToolbarAlign.cs | 74 + FineUI/Business/Enums/ToolbarPosition.cs | 218 +- FineUI/Business/Enums/TriggerIcon.cs | 160 +- FineUI/Business/Enums/VerticalAlign.cs | 100 +- FineUI/Business/Enums/WindowPosition.cs | 90 +- FineUI/Business/JsHelper/JsArrayBuilder.cs | 365 +- FineUI/Business/JsHelper/JsHelper.cs | 613 +- FineUI/Business/JsHelper/JsObjectBuilder.cs | 422 +- FineUI/Business/JsHelper/OptionBuilder.cs | 254 +- .../ResourceManager/AbsoluteScriptBlock.cs | 114 +- .../ClientJavascriptIDManager.cs | 162 +- .../ResourceManager/CommonResourceHelper.cs | 668 +- .../DesignTimeResourceHelper.cs | 404 +- .../ResourceManager/ResourceHandler.cs | 380 +- .../ResourceManager/ResourceHelper.cs | 466 +- .../ResourceManager/ResourceManager.cs | 2159 +- .../ResourceManager/ResponseFilter.cs | 1060 +- .../Business/ResourceManager/ScriptBlock.cs | 147 +- .../Business/ResourceManager/ScriptModule.cs | 134 +- .../ResourceManager/TreeNodeIDManager.cs | 162 +- .../SimulateTree/SimulateTreeHeper.cs | 526 +- .../Business/SimulateTree/SimulateTreeNode.cs | 224 +- FineUI/Business/Util/ControlUtil.cs | 420 +- FineUI/Business/Util/DateUtil.cs | 165 + FineUI/Business/Util/FState.cs | 312 + FineUI/Business/Util/HtmlNodeBuilder.cs | 246 +- FineUI/Business/Util/JSONUtil.cs | 190 +- FineUI/Business/Util/ObjectUtil.cs | 236 +- FineUI/Business/Util/StringUtil.cs | 920 +- FineUI/Business/Util/StyleUtil.cs | 192 +- FineUI/FineUI.csproj | 816 +- FineUI/Properties/AssemblyInfo.cs | 98 +- FineUI/StaticClass/ActiveWindow.cs | 396 +- FineUI/StaticClass/Alert.cs | 1384 +- FineUI/StaticClass/Confirm.cs | 404 +- FineUI/StaticClass/PageContext.cs | 603 +- .../Component.ToolbarFill/ToolbarFill.cs | 208 +- .../ToolbarSeparator.cs | 208 +- .../Component.ToolbarText/ToolbarText.cs | 288 +- .../BoxComponent.Toolbar/Toolbar.cs | 520 +- .../BoxComponent.Toolbar/ToolbarCollection.cs | 188 +- FineUI/WebControls/Component.Button/Button.cs | 2008 +- .../Component.Calendar/Calendar.cs | 722 +- FineUI/WebControls/Component.Menu/Menu.cs | 408 +- .../Component.Menu/MenuItem/BaseMenuItem.cs | 176 +- .../Component.Menu/MenuItem/MenuButton.cs | 800 +- .../Component.Menu/MenuItem/MenuCheckBox.cs | 544 +- .../Component.Menu/MenuItem/MenuHyperLink.cs | 298 +- .../Component.Menu/MenuItem/MenuItem.cs | 580 +- .../MenuItem/MenuItemCollection.cs | 140 +- .../Component.Menu/MenuItem/MenuSeparator.cs | 190 +- .../Component.Menu/MenuItem/MenuText.cs | 235 +- .../Component.SplitButton/SplitButton.cs | 194 +- .../ControlBase.CPHConnector/CPHConnector.cs | 215 + .../ControlBase.PageLoading/PageLoading.cs | 416 +- .../CustomEventArgs.cs | 58 + .../ControlBase.PageManager/PageManager.cs | 2571 +- FineUI/WebControls/ControlBase.Timer/Timer.cs | 402 +- .../UserControlConnector.cs | 468 +- FineUI/WebControls/Field.CheckBox/CheckBox.cs | 535 +- .../EventArgs/CheckedEventArgs.cs | 130 +- .../Field.CheckBoxList/CheckBoxList.cs | 2115 +- .../Field.CheckBoxList/CheckItem/CheckItem.cs | 293 +- .../CheckItem/CheckItemCollection.cs | 234 +- .../Field.HtmlEditor/HtmlEditor.cs | 946 +- .../Field.Label.HyperLink/HyperLink.cs | 558 +- FineUI/WebControls/Field.Label.Image/Image.cs | 692 +- .../Field.Label.LinkButton/LinkButton.cs | 880 +- FineUI/WebControls/Field.Label/Label.cs | 448 +- .../Field.RadioButton/RadioButton.cs | 725 +- .../Field.RadioButtonList/RadioButtonList.cs | 1944 +- .../RadioItem/RadioItem.cs | 295 +- .../RadioItem/RadioItemCollection.cs | 238 +- .../DropDownList.cs | 3543 +- .../ListItem/ListItem.cs | 377 +- .../ListItem/ListItemCollection.cs | 236 +- .../DatePicker.cs | 813 +- .../FileUpload.cs | 784 +- .../HiddenField.cs | 146 +- .../NumberBox.cs | 386 +- .../TextArea.cs | 459 +- .../TextBox.cs | 278 +- .../TimePicker.cs | 913 +- .../TriggerBox.cs | 704 +- .../TwinTriggerBox.cs | 1108 +- .../Accordion.cs | 985 +- .../AccordionPane/AccordionPane.cs | 663 +- .../AccordionPane/AccordionPaneCollection.cs | 140 +- .../ContentPanel.cs | 538 +- .../PanelBase.CollapsablePanel.Form/Form.cs | 1221 +- .../FormRow/FormRow.cs | 1010 +- .../FormRow/FormRowCollection.cs | 228 +- .../GroupPanel.cs | 381 +- .../PanelBase.CollapsablePanel.Panel/Panel.cs | 352 +- .../SimpleForm.cs | 569 +- .../EventArgs/TreeCheckEventArgs.cs | 178 +- .../EventArgs/TreeCommandEventArgs.cs | 210 +- .../EventArgs/TreeNodeEventArgs.cs | 101 + .../EventArgs/TreePreNodeEventArgs.cs | 77 + .../PanelBase.CollapsablePanel.Tree/Tree.cs | 4901 +- .../TreeNode/TreeNode.cs | 1451 +- .../TreeNode/TreeNodeCollection.cs | 222 +- .../XmlAttributeMapping.cs | 190 +- .../XmlAttributeMappingCollection.cs | 90 +- .../EventArgs/WindowCloseEventArgs.cs | 130 +- .../Window.cs | 3733 +- .../Editor/GridColumnEditorCollection.cs | 100 +- .../PanelBase.Grid/Editor/ModifiedCell.cs | 106 +- .../EventArgs/GridAfterEditEventArgs.cs | 154 +- .../EventArgs/GridCommandEventArgs.cs | 212 +- .../EventArgs/GridPageEventArgs.cs | 130 +- .../EventArgs/GridPreRowEventArgs.cs | 167 +- .../EventArgs/GridRowClickEventArgs.cs | 128 +- .../EventArgs/GridRowEventArgs.cs | 186 +- .../EventArgs/GridRowSelectEventArgs.cs | 128 +- .../EventArgs/GridSortEventArgs.cs | 170 +- FineUI/WebControls/PanelBase.Grid/Grid.cs | 9288 ++-- .../PanelBase.Grid/GridColumn/BaseField.cs | 420 +- .../PanelBase.Grid/GridColumn/BoundField.cs | 531 +- .../GridColumn/CheckBoxField.cs | 883 +- .../GridColumn/GridColumn/GridColumn.cs | 1320 +- .../GridColumn/GridColumnCollection.cs | 162 +- .../PanelBase.Grid/GridColumn/GroupField.cs | 206 +- .../GridColumn/HyperLinkField.cs | 927 +- .../PanelBase.Grid/GridColumn/ImageField.cs | 455 +- .../GridColumn/LinkButtonField.cs | 1360 +- .../GridColumn/RenderField/RenderBaseField.cs | 158 +- .../RenderField/RenderCheckField.cs | 222 +- .../GridColumn/RenderField/RenderField.cs | 762 +- .../GridColumn/RowNumberField.cs | 289 +- .../GridColumn/TemplateField.cs | 361 +- .../PanelBase.Grid/GridColumn/WindowField.cs | 1313 +- .../GridGroupColumn/GridGroupColumn.cs | 294 +- .../GridGroupColumnCollection.cs | 208 +- .../PanelBase.Grid/GridRow/GridRow.cs | 980 +- .../GridRow/GridRowCollection.cs | 92 +- .../GridRow/GridTemplateContainer.cs | 138 + .../PanelBase.RegionPanel/Region/Region.cs | 1107 +- .../Region/RegionCollection.cs | 138 +- .../PanelBase.RegionPanel/RegionPanel.cs | 499 +- .../WebControls/PanelBase.TabStrip/Tab/Tab.cs | 933 +- .../PanelBase.TabStrip/Tab/TabCollection.cs | 176 +- .../PanelBase.TabStrip/TabStrip.cs | 1646 +- FineUI/bin/Release/FineUI.dll | Bin 620032 -> 641024 bytes FineUI/bin/Release/FineUI.xml | 41949 ++++++++-------- FineUI/bin/Release/Newtonsoft.Json.dll | Bin 389120 -> 440320 bytes FineUI/bin/Release/Newtonsoft.Json.xml | 17149 ++++--- .../HtmlAgilityPack/EncodingFoundException.cs | 48 +- FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs | 364 +- .../HtmlAttributeCollection.cs | 586 +- FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs | 254 +- FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs | 146 +- .../HtmlAgilityPack/HtmlConsoleListener.cs | 60 +- FineUI/lib/HtmlAgilityPack/HtmlDocument.cs | 3872 +- FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs | 64 +- FineUI/lib/HtmlAgilityPack/HtmlEntity.cs | 1604 +- FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs | 92 +- FineUI/lib/HtmlAgilityPack/HtmlNode.cs | 3520 +- .../lib/HtmlAgilityPack/HtmlNodeCollection.cs | 652 +- .../lib/HtmlAgilityPack/HtmlNodeNavigator.cs | 1534 +- FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs | 64 +- FineUI/lib/HtmlAgilityPack/HtmlParseError.cs | 202 +- .../lib/HtmlAgilityPack/HtmlParseErrorCode.cs | 76 +- FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs | 138 +- FineUI/lib/HtmlAgilityPack/HtmlWeb.cs | 1614 +- .../lib/HtmlAgilityPack/HtmlWebException.cs | 40 +- FineUI/lib/HtmlAgilityPack/IOLibrary.cs | 52 +- .../lib/HtmlAgilityPack/MixedCodeDocument.cs | 880 +- .../MixedCodeDocumentCodeFragment.cs | 86 +- .../MixedCodeDocumentFragment.cs | 190 +- .../MixedCodeDocumentFragmentList.cs | 392 +- .../MixedCodeDocumentFragmentType.cs | 44 +- .../MixedCodeDocumentTextFragment.cs | 64 +- FineUI/lib/HtmlAgilityPack/NameValuePair.cs | 60 +- .../lib/HtmlAgilityPack/NameValuePairList.cs | 178 +- FineUI/lib/HtmlAgilityPack/crc32.cs | 280 +- FineUI/lib/JSBeautifyLib/JSBeautify.cs | 1942 +- FineUI/lib/JSBeautifyLib/JSBeautify.txt | 8 + FineUI/lib/extjs.txt | 41 + FineUI/release_history.txt | 4067 +- FineUI/release_history_en.txt | 805 +- Newtonsoft.Json/Net20/Newtonsoft.Json.dll | Bin 0 -> 440320 bytes Newtonsoft.Json/Net20/Newtonsoft.Json.xml | 8968 ++++ Newtonsoft.Json/Net35/Newtonsoft.Json.dll | Bin 0 -> 401920 bytes Newtonsoft.Json/Net35/Newtonsoft.Json.xml | 8105 +++ Newtonsoft.Json/Net40/Newtonsoft.Json.dll | Bin 0 -> 456192 bytes Newtonsoft.Json/Net40/Newtonsoft.Json.xml | 8380 +++ Newtonsoft.Json/Net45/Newtonsoft.Json.dll | Bin 0 -> 465408 bytes Newtonsoft.Json/Net45/Newtonsoft.Json.xml | 8380 +++ 3200 files changed, 260408 insertions(+), 181990 deletions(-) create mode 100644 FineUI.Examples/Global.asax create mode 100644 FineUI.Examples/Global.asax.cs create mode 100644 FineUI.Examples/accordion/accordion_autopostback.aspx create mode 100644 FineUI.Examples/accordion/accordion_autopostback.aspx.cs create mode 100644 FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs create mode 100644 FineUI.Examples/basic/login_enterkey.aspx create mode 100644 FineUI.Examples/basic/login_enterkey.aspx.cs create mode 100644 FineUI.Examples/basic/login_enterkey.aspx.designer.cs create mode 100644 FineUI.Examples/button/button_menu_menuid.aspx create mode 100644 FineUI.Examples/button/button_menu_menuid.aspx.cs create mode 100644 FineUI.Examples/button/button_menu_menuid.aspx.designer.cs create mode 100644 FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx create mode 100644 FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs create mode 100644 FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs create mode 100644 FineUI.Examples/dropdownlist/multiselect.aspx create mode 100644 FineUI.Examples/dropdownlist/multiselect.aspx.cs create mode 100644 FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs create mode 100644 FineUI.Examples/dropdownlist/multiselect_autopostback.aspx create mode 100644 FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs create mode 100644 FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs create mode 100644 FineUI.Examples/dropdownlist/multiselect_enableedit.aspx create mode 100644 FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs create mode 100644 FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs create mode 100644 FineUI.Examples/extjs_builder/js/F/F.ajax.js create mode 100644 FineUI.Examples/extjs_builder/js/F/F.format.js create mode 100644 FineUI.Examples/extjs_builder/js/F/F.simulateTree.js create mode 100644 FineUI.Examples/extjs_builder/js/F/F.util.js create mode 100644 FineUI.Examples/extjs_builder/js/F/F.wnd.js create mode 100644 FineUI.Examples/extjs_builder/js/F/extender.js create mode 100644 FineUI.Examples/extjs_builder/js/lang/f-lang-en.js create mode 100644 FineUI.Examples/extjs_builder/js/lang/f-lang-pt_BR.js create mode 100644 FineUI.Examples/extjs_builder/js/lang/f-lang-ru.js create mode 100644 FineUI.Examples/extjs_builder/js/lang/f-lang-tr.js create mode 100644 FineUI.Examples/extjs_builder/js/lang/f-lang-zh_CN.js create mode 100644 FineUI.Examples/extjs_builder/js/lang/f-lang-zh_TW.js create mode 100644 FineUI.Examples/extjs_builder/res/images/Thumbs.db create mode 100644 FineUI.Examples/extjs_builder/version.txt create mode 100644 FineUI.Examples/form/form_disabled.aspx create mode 100644 FineUI.Examples/form/form_disabled.aspx.cs create mode 100644 FineUI.Examples/form/form_disabled.aspx.designer.cs create mode 100644 FineUI.Examples/form/layout_checkout.aspx create mode 100644 FineUI.Examples/form/layout_checkout.aspx.cs create mode 100644 FineUI.Examples/form/layout_checkout.aspx.designer.cs create mode 100644 FineUI.Examples/form/layout_contactus.aspx create mode 100644 FineUI.Examples/form/layout_contactus.aspx.cs create mode 100644 FineUI.Examples/form/layout_contactus.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_checkall_singleselect.aspx create mode 100644 FineUI.Examples/grid/grid_checkall_singleselect.aspx.cs create mode 100644 FineUI.Examples/grid/grid_checkall_singleselect.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_checkboxfield_rowcheckall_clientside.aspx create mode 100644 FineUI.Examples/grid/grid_checkboxfield_rowcheckall_clientside.aspx.cs create mode 100644 FineUI.Examples/grid/grid_checkboxfield_rowcheckall_clientside.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_checkboxfield_rowcheckall_contextmenu.aspx create mode 100644 FineUI.Examples/grid/grid_checkboxfield_rowcheckall_contextmenu.aspx.cs create mode 100644 FineUI.Examples/grid/grid_checkboxfield_rowcheckall_contextmenu.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_edit_cart.aspx create mode 100644 FineUI.Examples/grid/grid_edit_cart.aspx.cs create mode 100644 FineUI.Examples/grid/grid_edit_cart.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_edit_enterkey_h.aspx create mode 100644 FineUI.Examples/grid/grid_edit_enterkey_h.aspx.cs create mode 100644 FineUI.Examples/grid/grid_edit_enterkey_h.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_edit_enterkey_v.aspx create mode 100644 FineUI.Examples/grid/grid_edit_enterkey_v.aspx.cs create mode 100644 FineUI.Examples/grid/grid_edit_enterkey_v.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_afteredit_rowexpander.aspx create mode 100644 FineUI.Examples/grid/grid_editor_cell_afteredit_rowexpander.aspx.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_afteredit_rowexpander.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_databind.aspx create mode 100644 FineUI.Examples/grid/grid_editor_cell_databind.aspx.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_databind.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_new_delete_rowexpander.aspx create mode 100644 FineUI.Examples/grid/grid_editor_cell_new_delete_rowexpander.aspx.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_new_delete_rowexpander.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_paging.aspx create mode 100644 FineUI.Examples/grid/grid_editor_cell_paging.aspx.cs create mode 100644 FineUI.Examples/grid/grid_editor_cell_paging.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_excel_dynamic_columns.aspx create mode 100644 FineUI.Examples/grid/grid_excel_dynamic_columns.aspx.cs create mode 100644 FineUI.Examples/grid/grid_excel_dynamic_columns.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_excel_findcontrol.aspx create mode 100644 FineUI.Examples/grid/grid_excel_findcontrol.aspx.cs create mode 100644 FineUI.Examples/grid/grid_excel_findcontrol.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_excel_groupfield.aspx create mode 100644 FineUI.Examples/grid/grid_excel_groupfield.aspx.cs create mode 100644 FineUI.Examples/grid/grid_excel_groupfield.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_excel_selectcolumns_iframe_window.aspx create mode 100644 FineUI.Examples/grid/grid_excel_selectcolumns_iframe_window.aspx.cs create mode 100644 FineUI.Examples/grid/grid_excel_selectcolumns_iframe_window.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_groupheader_hidden.aspx create mode 100644 FineUI.Examples/grid/grid_groupheader_hidden.aspx.cs create mode 100644 FineUI.Examples/grid/grid_groupheader_hidden.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_hide_gridheader.aspx create mode 100644 FineUI.Examples/grid/grid_hide_gridheader.aspx.cs create mode 100644 FineUI.Examples/grid/grid_hide_gridheader.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn.aspx create mode 100644 FineUI.Examples/grid/grid_lockcolumn.aspx.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_editor_cell_new.aspx create mode 100644 FineUI.Examples/grid/grid_lockcolumn_editor_cell_new.aspx.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_editor_cell_new.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_groupheader_sort.aspx create mode 100644 FineUI.Examples/grid/grid_lockcolumn_groupheader_sort.aspx.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_groupheader_sort.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_line_wrap.aspx create mode 100644 FineUI.Examples/grid/grid_lockcolumn_line_wrap.aspx.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_line_wrap.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_many_columns.aspx create mode 100644 FineUI.Examples/grid/grid_lockcolumn_many_columns.aspx.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_many_columns.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_rowexpander.aspx create mode 100644 FineUI.Examples/grid/grid_lockcolumn_rowexpander.aspx.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_rowexpander.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_summary_scrollbar.aspx create mode 100644 FineUI.Examples/grid/grid_lockcolumn_summary_scrollbar.aspx.cs create mode 100644 FineUI.Examples/grid/grid_lockcolumn_summary_scrollbar.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_paging_database_bbar.aspx create mode 100644 FineUI.Examples/grid/grid_paging_database_bbar.aspx.cs create mode 100644 FineUI.Examples/grid/grid_paging_database_bbar.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_prerowdatabound_cancelled.aspx create mode 100644 FineUI.Examples/grid/grid_prerowdatabound_cancelled.aspx.cs create mode 100644 FineUI.Examples/grid/grid_prerowdatabound_cancelled.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_rowcommand_download.aspx create mode 100644 FineUI.Examples/grid/grid_rowcommand_download.aspx.cs create mode 100644 FineUI.Examples/grid/grid_rowcommand_download.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_rowexpander_expandall_js.aspx create mode 100644 FineUI.Examples/grid/grid_rowexpander_expandall_js.aspx.cs create mode 100644 FineUI.Examples/grid/grid_rowexpander_expandall_js.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_rownumber_align.aspx create mode 100644 FineUI.Examples/grid/grid_rownumber_align.aspx.cs create mode 100644 FineUI.Examples/grid/grid_rownumber_align.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_style_columnclass.aspx create mode 100644 FineUI.Examples/grid/grid_style_columnclass.aspx.cs create mode 100644 FineUI.Examples/grid/grid_style_columnclass.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_style_rowcolor.aspx create mode 100644 FineUI.Examples/grid/grid_style_rowcolor.aspx.cs create mode 100644 FineUI.Examples/grid/grid_style_rowcolor.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_style_rowcolor_paging.aspx create mode 100644 FineUI.Examples/grid/grid_style_rowcolor_paging.aspx.cs create mode 100644 FineUI.Examples/grid/grid_style_rowcolor_paging.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_style_rowcolor_paging_database.aspx create mode 100644 FineUI.Examples/grid/grid_style_rowcolor_paging_database.aspx.cs create mode 100644 FineUI.Examples/grid/grid_style_rowcolor_paging_database.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_summary_currentpage.aspx create mode 100644 FineUI.Examples/grid/grid_summary_currentpage.aspx.cs create mode 100644 FineUI.Examples/grid/grid_summary_currentpage.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_summary_scrollbar.aspx create mode 100644 FineUI.Examples/grid/grid_summary_scrollbar.aspx.cs create mode 100644 FineUI.Examples/grid/grid_summary_scrollbar.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_summary_scrollbar_flow.aspx create mode 100644 FineUI.Examples/grid/grid_summary_scrollbar_flow.aspx.cs create mode 100644 FineUI.Examples/grid/grid_summary_scrollbar_flow.aspx.designer.cs create mode 100644 FineUI.Examples/grid/grid_width_forcefit.aspx create mode 100644 FineUI.Examples/grid/grid_width_forcefit.aspx.cs create mode 100644 FineUI.Examples/grid/grid_width_forcefit.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/selectprovince_executescript.aspx create mode 100644 FineUI.Examples/iframe/selectprovince_executescript.aspx.cs create mode 100644 FineUI.Examples/iframe/selectprovince_executescript.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/selectprovince_executescript_child.aspx create mode 100644 FineUI.Examples/iframe/selectprovince_executescript_child.aspx.cs create mode 100644 FineUI.Examples/iframe/selectprovince_executescript_child.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/topmenu4/data/menuMail.xml create mode 100644 FineUI.Examples/iframe/topmenu4/data/menuSMS.xml create mode 100644 FineUI.Examples/iframe/topmenu4/data/menuSYS.xml create mode 100644 FineUI.Examples/iframe/topmenu4/default.aspx create mode 100644 FineUI.Examples/iframe/topmenu4/default.aspx.cs create mode 100644 FineUI.Examples/iframe/topmenu4/default.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/topmenu4/html/mail-1.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/mail-2.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/mail-3.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/mail-4.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/mail-5.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sms-1.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sms-2.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sms-3.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sms-4.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sms-5.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sys-1.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sys-2.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sys-3.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sys-4.html create mode 100644 FineUI.Examples/iframe/topmenu4/html/sys-5.html create mode 100644 FineUI.Examples/iframe/topmenu4/leftmenu.aspx create mode 100644 FineUI.Examples/iframe/topmenu4/leftmenu.aspx.cs create mode 100644 FineUI.Examples/iframe/topmenu4/leftmenu.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/topmenu4/res/images/admin_tbg.png create mode 100644 FineUI.Examples/iframe/topmenu4/res/images/menu.png create mode 100644 FineUI.Examples/iframe/topmenu4/res/images/p.png create mode 100644 FineUI.Examples/iframe/topmenu4/res/images/t.png create mode 100644 FineUI.Examples/iframe/topmenu4/res/main.css create mode 100644 FineUI.Examples/iframe/window.aspx create mode 100644 FineUI.Examples/iframe/window.aspx.cs create mode 100644 FineUI.Examples/iframe/window.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/window2.aspx create mode 100644 FineUI.Examples/iframe/window2.aspx.cs create mode 100644 FineUI.Examples/iframe/window2.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/window2_iframe.aspx create mode 100644 FineUI.Examples/iframe/window2_iframe.aspx.cs create mode 100644 FineUI.Examples/iframe/window2_iframe.aspx.designer.cs create mode 100644 FineUI.Examples/iframe/window_iframe.aspx create mode 100644 FineUI.Examples/iframe/window_iframe.aspx.cs create mode 100644 FineUI.Examples/iframe/window_iframe.aspx.designer.cs create mode 100644 FineUI.Examples/layout/region.aspx create mode 100644 FineUI.Examples/layout/region.aspx.cs create mode 100644 FineUI.Examples/layout/region.aspx.designer.cs create mode 100644 FineUI.Examples/master/ISingleGridPage.cs create mode 100644 FineUI.Examples/master/Simple.Master create mode 100644 FineUI.Examples/master/Simple.Master.cs create mode 100644 FineUI.Examples/master/Simple.Master.designer.cs create mode 100644 FineUI.Examples/master/SingleGrid.Master create mode 100644 FineUI.Examples/master/SingleGrid.Master.cs create mode 100644 FineUI.Examples/master/SingleGrid.Master.designer.cs create mode 100644 FineUI.Examples/master/formlist.aspx create mode 100644 FineUI.Examples/master/formlist.aspx.cs create mode 100644 FineUI.Examples/master/formlist.aspx.designer.cs create mode 100644 FineUI.Examples/master/list.aspx create mode 100644 FineUI.Examples/master/list.aspx.cs create mode 100644 FineUI.Examples/master/list.aspx.designer.cs create mode 100644 FineUI.Examples/master/simple.aspx create mode 100644 FineUI.Examples/master/simple.aspx.cs create mode 100644 FineUI.Examples/master/simple.aspx.designer.cs create mode 100644 FineUI.Examples/master/simple2.aspx create mode 100644 FineUI.Examples/master/simple2.aspx.cs create mode 100644 FineUI.Examples/master/simple2.aspx.designer.cs create mode 100644 FineUI.Examples/other/confirm_cancel2.aspx create mode 100644 FineUI.Examples/other/confirm_cancel2.aspx.cs create mode 100644 FineUI.Examples/other/confirm_cancel2.aspx.designer.cs create mode 100644 FineUI.Examples/other/custom_postback2.aspx create mode 100644 FineUI.Examples/other/custom_postback2.aspx.cs create mode 100644 FineUI.Examples/other/custom_postback2.aspx.designer.cs create mode 100644 FineUI.Examples/other/global_error.aspx create mode 100644 FineUI.Examples/other/global_error.aspx.cs create mode 100644 FineUI.Examples/other/global_error.aspx.designer.cs create mode 100644 FineUI.Examples/other/pageloading.aspx create mode 100644 FineUI.Examples/other/pageloading.aspx.cs create mode 100644 FineUI.Examples/other/pageloading.aspx.designer.cs create mode 100644 FineUI.Examples/res/css/main.css create mode 100644 FineUI.Examples/res/google-code-prettify/lang-apollo.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-basic.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-clj.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-css.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-dart.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-erlang.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-go.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-hs.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-lisp.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-llvm.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-lua.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-matlab.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-ml.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-mumps.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-n.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-pascal.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-proto.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-r.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-rd.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-scala.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-sql.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-tcl.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-tex.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-vb.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-vhdl.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-wiki.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-xq.js create mode 100644 FineUI.Examples/res/google-code-prettify/lang-yaml.js create mode 100644 FineUI.Examples/res/google-code-prettify/prettify.css create mode 100644 FineUI.Examples/res/google-code-prettify/prettify.js create mode 100644 FineUI.Examples/res/google-code-prettify/run_prettify.js create mode 100644 FineUI.Examples/res/icon/Thumbs.db create mode 100644 FineUI.Examples/res/icon/accept.png create mode 100644 FineUI.Examples/res/icon/add.png create mode 100644 FineUI.Examples/res/icon/anchor.png create mode 100644 FineUI.Examples/res/icon/application.png create mode 100644 FineUI.Examples/res/icon/application_add.png create mode 100644 FineUI.Examples/res/icon/application_cascade.png create mode 100644 FineUI.Examples/res/icon/application_delete.png create mode 100644 FineUI.Examples/res/icon/application_double.png create mode 100644 FineUI.Examples/res/icon/application_edit.png create mode 100644 FineUI.Examples/res/icon/application_error.png create mode 100644 FineUI.Examples/res/icon/application_form.png create mode 100644 FineUI.Examples/res/icon/application_form_add.png create mode 100644 FineUI.Examples/res/icon/application_form_delete.png create mode 100644 FineUI.Examples/res/icon/application_form_edit.png create mode 100644 FineUI.Examples/res/icon/application_form_magnify.png create mode 100644 FineUI.Examples/res/icon/application_get.png create mode 100644 FineUI.Examples/res/icon/application_go.png create mode 100644 FineUI.Examples/res/icon/application_home.png create mode 100644 FineUI.Examples/res/icon/application_key.png create mode 100644 FineUI.Examples/res/icon/application_lightning.png create mode 100644 FineUI.Examples/res/icon/application_link.png create mode 100644 FineUI.Examples/res/icon/application_osx.png create mode 100644 FineUI.Examples/res/icon/application_osx_add.png create mode 100644 FineUI.Examples/res/icon/application_osx_cascade.png create mode 100644 FineUI.Examples/res/icon/application_osx_delete.png create mode 100644 FineUI.Examples/res/icon/application_osx_double.png create mode 100644 FineUI.Examples/res/icon/application_osx_error.png create mode 100644 FineUI.Examples/res/icon/application_osx_get.png create mode 100644 FineUI.Examples/res/icon/application_osx_go.png create mode 100644 FineUI.Examples/res/icon/application_osx_home.png create mode 100644 FineUI.Examples/res/icon/application_osx_key.png create mode 100644 FineUI.Examples/res/icon/application_osx_lightning.png create mode 100644 FineUI.Examples/res/icon/application_osx_link.png create mode 100644 FineUI.Examples/res/icon/application_osx_split.png create mode 100644 FineUI.Examples/res/icon/application_osx_start.png create mode 100644 FineUI.Examples/res/icon/application_osx_stop.png create mode 100644 FineUI.Examples/res/icon/application_osx_terminal.png create mode 100644 FineUI.Examples/res/icon/application_put.png create mode 100644 FineUI.Examples/res/icon/application_side_boxes.png create mode 100644 FineUI.Examples/res/icon/application_side_contract.png create mode 100644 FineUI.Examples/res/icon/application_side_expand.png create mode 100644 FineUI.Examples/res/icon/application_side_list.png create mode 100644 FineUI.Examples/res/icon/application_side_tree.png create mode 100644 FineUI.Examples/res/icon/application_split.png create mode 100644 FineUI.Examples/res/icon/application_start.png create mode 100644 FineUI.Examples/res/icon/application_stop.png create mode 100644 FineUI.Examples/res/icon/application_tile_horizontal.png create mode 100644 FineUI.Examples/res/icon/application_tile_vertical.png create mode 100644 FineUI.Examples/res/icon/application_view_columns.png create mode 100644 FineUI.Examples/res/icon/application_view_detail.png create mode 100644 FineUI.Examples/res/icon/application_view_gallery.png create mode 100644 FineUI.Examples/res/icon/application_view_icons.png create mode 100644 FineUI.Examples/res/icon/application_view_list.png create mode 100644 FineUI.Examples/res/icon/application_view_tile.png create mode 100644 FineUI.Examples/res/icon/application_xp.png create mode 100644 FineUI.Examples/res/icon/application_xp_terminal.png create mode 100644 FineUI.Examples/res/icon/arrow_branch.png create mode 100644 FineUI.Examples/res/icon/arrow_divide.png create mode 100644 FineUI.Examples/res/icon/arrow_down.png create mode 100644 FineUI.Examples/res/icon/arrow_ew.png create mode 100644 FineUI.Examples/res/icon/arrow_in.png create mode 100644 FineUI.Examples/res/icon/arrow_in_longer.png create mode 100644 FineUI.Examples/res/icon/arrow_inout.png create mode 100644 FineUI.Examples/res/icon/arrow_join.png create mode 100644 FineUI.Examples/res/icon/arrow_left.png create mode 100644 FineUI.Examples/res/icon/arrow_merge.png create mode 100644 FineUI.Examples/res/icon/arrow_ne.png create mode 100644 FineUI.Examples/res/icon/arrow_ns.png create mode 100644 FineUI.Examples/res/icon/arrow_nsew.png create mode 100644 FineUI.Examples/res/icon/arrow_nw.png create mode 100644 FineUI.Examples/res/icon/arrow_nw_ne_sw_se.png create mode 100644 FineUI.Examples/res/icon/arrow_nw_se.png create mode 100644 FineUI.Examples/res/icon/arrow_out.png create mode 100644 FineUI.Examples/res/icon/arrow_out_longer.png create mode 100644 FineUI.Examples/res/icon/arrow_redo.png create mode 100644 FineUI.Examples/res/icon/arrow_refresh.png create mode 100644 FineUI.Examples/res/icon/arrow_refresh_small.png create mode 100644 FineUI.Examples/res/icon/arrow_right.png create mode 100644 FineUI.Examples/res/icon/arrow_rotate_anticlockwise.png create mode 100644 FineUI.Examples/res/icon/arrow_rotate_clockwise.png create mode 100644 FineUI.Examples/res/icon/arrow_se.png create mode 100644 FineUI.Examples/res/icon/arrow_sw.png create mode 100644 FineUI.Examples/res/icon/arrow_sw_ne.png create mode 100644 FineUI.Examples/res/icon/arrow_switch.png create mode 100644 FineUI.Examples/res/icon/arrow_switch_bluegreen.png create mode 100644 FineUI.Examples/res/icon/arrow_turn_left.png create mode 100644 FineUI.Examples/res/icon/arrow_turn_right.png create mode 100644 FineUI.Examples/res/icon/arrow_undo.png create mode 100644 FineUI.Examples/res/icon/arrow_up.png create mode 100644 FineUI.Examples/res/icon/asterisk_orange.png create mode 100644 FineUI.Examples/res/icon/asterisk_red.png create mode 100644 FineUI.Examples/res/icon/asterisk_yellow.png create mode 100644 FineUI.Examples/res/icon/attach.png create mode 100644 FineUI.Examples/res/icon/award_star_add.png create mode 100644 FineUI.Examples/res/icon/award_star_bronze_1.png create mode 100644 FineUI.Examples/res/icon/award_star_bronze_2.png create mode 100644 FineUI.Examples/res/icon/award_star_bronze_3.png create mode 100644 FineUI.Examples/res/icon/award_star_delete.png create mode 100644 FineUI.Examples/res/icon/award_star_gold_1.png create mode 100644 FineUI.Examples/res/icon/award_star_gold_2.png create mode 100644 FineUI.Examples/res/icon/award_star_gold_3.png create mode 100644 FineUI.Examples/res/icon/award_star_silver_1.png create mode 100644 FineUI.Examples/res/icon/award_star_silver_2.png create mode 100644 FineUI.Examples/res/icon/award_star_silver_3.png create mode 100644 FineUI.Examples/res/icon/basket.png create mode 100644 FineUI.Examples/res/icon/basket_add.png create mode 100644 FineUI.Examples/res/icon/basket_delete.png create mode 100644 FineUI.Examples/res/icon/basket_edit.png create mode 100644 FineUI.Examples/res/icon/basket_error.png create mode 100644 FineUI.Examples/res/icon/basket_go.png create mode 100644 FineUI.Examples/res/icon/basket_put.png create mode 100644 FineUI.Examples/res/icon/basket_remove.png create mode 100644 FineUI.Examples/res/icon/bell.png create mode 100644 FineUI.Examples/res/icon/bell_add.png create mode 100644 FineUI.Examples/res/icon/bell_delete.png create mode 100644 FineUI.Examples/res/icon/bell_error.png create mode 100644 FineUI.Examples/res/icon/bell_go.png create mode 100644 FineUI.Examples/res/icon/bell_link.png create mode 100644 FineUI.Examples/res/icon/bell_silver.png create mode 100644 FineUI.Examples/res/icon/bell_silver_start.png create mode 100644 FineUI.Examples/res/icon/bell_silver_stop.png create mode 100644 FineUI.Examples/res/icon/bell_start.png create mode 100644 FineUI.Examples/res/icon/bell_stop.png create mode 100644 FineUI.Examples/res/icon/bin.png create mode 100644 FineUI.Examples/res/icon/bin_closed.png create mode 100644 FineUI.Examples/res/icon/bin_empty.png create mode 100644 FineUI.Examples/res/icon/blank.png create mode 100644 FineUI.Examples/res/icon/bomb.png create mode 100644 FineUI.Examples/res/icon/book.png create mode 100644 FineUI.Examples/res/icon/book_add.png create mode 100644 FineUI.Examples/res/icon/book_addresses.png create mode 100644 FineUI.Examples/res/icon/book_addresses_add.png create mode 100644 FineUI.Examples/res/icon/book_addresses_delete.png create mode 100644 FineUI.Examples/res/icon/book_addresses_edit.png create mode 100644 FineUI.Examples/res/icon/book_addresses_error.png create mode 100644 FineUI.Examples/res/icon/book_addresses_key.png create mode 100644 FineUI.Examples/res/icon/book_delete.png create mode 100644 FineUI.Examples/res/icon/book_edit.png create mode 100644 FineUI.Examples/res/icon/book_error.png create mode 100644 FineUI.Examples/res/icon/book_go.png create mode 100644 FineUI.Examples/res/icon/book_key.png create mode 100644 FineUI.Examples/res/icon/book_link.png create mode 100644 FineUI.Examples/res/icon/book_magnify.png create mode 100644 FineUI.Examples/res/icon/book_next.png create mode 100644 FineUI.Examples/res/icon/book_open.png create mode 100644 FineUI.Examples/res/icon/book_open_mark.png create mode 100644 FineUI.Examples/res/icon/book_previous.png create mode 100644 FineUI.Examples/res/icon/book_red.png create mode 100644 FineUI.Examples/res/icon/book_tabs.png create mode 100644 FineUI.Examples/res/icon/bookmark.png create mode 100644 FineUI.Examples/res/icon/bookmark_add.png create mode 100644 FineUI.Examples/res/icon/bookmark_delete.png create mode 100644 FineUI.Examples/res/icon/bookmark_edit.png create mode 100644 FineUI.Examples/res/icon/bookmark_error.png create mode 100644 FineUI.Examples/res/icon/bookmark_go.png create mode 100644 FineUI.Examples/res/icon/border_all.png create mode 100644 FineUI.Examples/res/icon/border_bottom.png create mode 100644 FineUI.Examples/res/icon/border_draw.png create mode 100644 FineUI.Examples/res/icon/border_inner.png create mode 100644 FineUI.Examples/res/icon/border_inner_horizontal.png create mode 100644 FineUI.Examples/res/icon/border_inner_vertical.png create mode 100644 FineUI.Examples/res/icon/border_left.png create mode 100644 FineUI.Examples/res/icon/border_none.png create mode 100644 FineUI.Examples/res/icon/border_outer.png create mode 100644 FineUI.Examples/res/icon/border_right.png create mode 100644 FineUI.Examples/res/icon/border_top.png create mode 100644 FineUI.Examples/res/icon/box.png create mode 100644 FineUI.Examples/res/icon/box_error.png create mode 100644 FineUI.Examples/res/icon/box_picture.png create mode 100644 FineUI.Examples/res/icon/box_world.png create mode 100644 FineUI.Examples/res/icon/brick.png create mode 100644 FineUI.Examples/res/icon/brick_add.png create mode 100644 FineUI.Examples/res/icon/brick_delete.png create mode 100644 FineUI.Examples/res/icon/brick_edit.png create mode 100644 FineUI.Examples/res/icon/brick_error.png create mode 100644 FineUI.Examples/res/icon/brick_go.png create mode 100644 FineUI.Examples/res/icon/brick_link.png create mode 100644 FineUI.Examples/res/icon/brick_magnify.png create mode 100644 FineUI.Examples/res/icon/bricks.png create mode 100644 FineUI.Examples/res/icon/briefcase.png create mode 100644 FineUI.Examples/res/icon/bug.png create mode 100644 FineUI.Examples/res/icon/bug_add.png create mode 100644 FineUI.Examples/res/icon/bug_delete.png create mode 100644 FineUI.Examples/res/icon/bug_edit.png create mode 100644 FineUI.Examples/res/icon/bug_error.png create mode 100644 FineUI.Examples/res/icon/bug_fix.png create mode 100644 FineUI.Examples/res/icon/bug_go.png create mode 100644 FineUI.Examples/res/icon/bug_link.png create mode 100644 FineUI.Examples/res/icon/bug_magnify.png create mode 100644 FineUI.Examples/res/icon/build.png create mode 100644 FineUI.Examples/res/icon/build_cancel.png create mode 100644 FineUI.Examples/res/icon/building.png create mode 100644 FineUI.Examples/res/icon/building_add.png create mode 100644 FineUI.Examples/res/icon/building_delete.png create mode 100644 FineUI.Examples/res/icon/building_edit.png create mode 100644 FineUI.Examples/res/icon/building_error.png create mode 100644 FineUI.Examples/res/icon/building_go.png create mode 100644 FineUI.Examples/res/icon/building_key.png create mode 100644 FineUI.Examples/res/icon/building_link.png create mode 100644 FineUI.Examples/res/icon/bullet_add.png create mode 100644 FineUI.Examples/res/icon/bullet_arrow_bottom.png create mode 100644 FineUI.Examples/res/icon/bullet_arrow_down.png create mode 100644 FineUI.Examples/res/icon/bullet_arrow_top.png create mode 100644 FineUI.Examples/res/icon/bullet_arrow_up.png create mode 100644 FineUI.Examples/res/icon/bullet_black.png create mode 100644 FineUI.Examples/res/icon/bullet_blue.png create mode 100644 FineUI.Examples/res/icon/bullet_connect.png create mode 100644 FineUI.Examples/res/icon/bullet_cross.png create mode 100644 FineUI.Examples/res/icon/bullet_database.png create mode 100644 FineUI.Examples/res/icon/bullet_database_yellow.png create mode 100644 FineUI.Examples/res/icon/bullet_delete.png create mode 100644 FineUI.Examples/res/icon/bullet_disk.png create mode 100644 FineUI.Examples/res/icon/bullet_earth.png create mode 100644 FineUI.Examples/res/icon/bullet_edit.png create mode 100644 FineUI.Examples/res/icon/bullet_eject.png create mode 100644 FineUI.Examples/res/icon/bullet_error.png create mode 100644 FineUI.Examples/res/icon/bullet_feed.png create mode 100644 FineUI.Examples/res/icon/bullet_get.png create mode 100644 FineUI.Examples/res/icon/bullet_go.png create mode 100644 FineUI.Examples/res/icon/bullet_green.png create mode 100644 FineUI.Examples/res/icon/bullet_home.png create mode 100644 FineUI.Examples/res/icon/bullet_key.png create mode 100644 FineUI.Examples/res/icon/bullet_left.png create mode 100644 FineUI.Examples/res/icon/bullet_lightning.png create mode 100644 FineUI.Examples/res/icon/bullet_magnify.png create mode 100644 FineUI.Examples/res/icon/bullet_minus.png create mode 100644 FineUI.Examples/res/icon/bullet_orange.png create mode 100644 FineUI.Examples/res/icon/bullet_page_white.png create mode 100644 FineUI.Examples/res/icon/bullet_picture.png create mode 100644 FineUI.Examples/res/icon/bullet_pink.png create mode 100644 FineUI.Examples/res/icon/bullet_plus.png create mode 100644 FineUI.Examples/res/icon/bullet_purple.png create mode 100644 FineUI.Examples/res/icon/bullet_red.png create mode 100644 FineUI.Examples/res/icon/bullet_right.png create mode 100644 FineUI.Examples/res/icon/bullet_shape.png create mode 100644 FineUI.Examples/res/icon/bullet_sparkle.png create mode 100644 FineUI.Examples/res/icon/bullet_star.png create mode 100644 FineUI.Examples/res/icon/bullet_start.png create mode 100644 FineUI.Examples/res/icon/bullet_stop.png create mode 100644 FineUI.Examples/res/icon/bullet_stop_alt.png create mode 100644 FineUI.Examples/res/icon/bullet_tick.png create mode 100644 FineUI.Examples/res/icon/bullet_toggle_minus.png create mode 100644 FineUI.Examples/res/icon/bullet_toggle_plus.png create mode 100644 FineUI.Examples/res/icon/bullet_white.png create mode 100644 FineUI.Examples/res/icon/bullet_wrench.png create mode 100644 FineUI.Examples/res/icon/bullet_wrench_red.png create mode 100644 FineUI.Examples/res/icon/bullet_yellow.png create mode 100644 FineUI.Examples/res/icon/button.png create mode 100644 FineUI.Examples/res/icon/cake.png create mode 100644 FineUI.Examples/res/icon/cake_out.png create mode 100644 FineUI.Examples/res/icon/cake_sliced.png create mode 100644 FineUI.Examples/res/icon/calculator.png create mode 100644 FineUI.Examples/res/icon/calculator_add.png create mode 100644 FineUI.Examples/res/icon/calculator_delete.png create mode 100644 FineUI.Examples/res/icon/calculator_edit.png create mode 100644 FineUI.Examples/res/icon/calculator_error.png create mode 100644 FineUI.Examples/res/icon/calculator_link.png create mode 100644 FineUI.Examples/res/icon/calendar.png create mode 100644 FineUI.Examples/res/icon/calendar_add.png create mode 100644 FineUI.Examples/res/icon/calendar_delete.png create mode 100644 FineUI.Examples/res/icon/calendar_edit.png create mode 100644 FineUI.Examples/res/icon/calendar_link.png create mode 100644 FineUI.Examples/res/icon/calendar_select_day.png create mode 100644 FineUI.Examples/res/icon/calendar_select_none.png create mode 100644 FineUI.Examples/res/icon/calendar_select_week.png create mode 100644 FineUI.Examples/res/icon/calendar_star.png create mode 100644 FineUI.Examples/res/icon/calendar_view_day.png create mode 100644 FineUI.Examples/res/icon/calendar_view_month.png create mode 100644 FineUI.Examples/res/icon/calendar_view_week.png create mode 100644 FineUI.Examples/res/icon/camera.png create mode 100644 FineUI.Examples/res/icon/camera_add.png create mode 100644 FineUI.Examples/res/icon/camera_connect.png create mode 100644 FineUI.Examples/res/icon/camera_delete.png create mode 100644 FineUI.Examples/res/icon/camera_edit.png create mode 100644 FineUI.Examples/res/icon/camera_error.png create mode 100644 FineUI.Examples/res/icon/camera_go.png create mode 100644 FineUI.Examples/res/icon/camera_link.png create mode 100644 FineUI.Examples/res/icon/camera_magnify.png create mode 100644 FineUI.Examples/res/icon/camera_picture.png create mode 100644 FineUI.Examples/res/icon/camera_small.png create mode 100644 FineUI.Examples/res/icon/camera_start.png create mode 100644 FineUI.Examples/res/icon/camera_stop.png create mode 100644 FineUI.Examples/res/icon/cancel.png create mode 100644 FineUI.Examples/res/icon/car.png create mode 100644 FineUI.Examples/res/icon/car_add.png create mode 100644 FineUI.Examples/res/icon/car_delete.png create mode 100644 FineUI.Examples/res/icon/car_error.png create mode 100644 FineUI.Examples/res/icon/car_red.png create mode 100644 FineUI.Examples/res/icon/car_start.png create mode 100644 FineUI.Examples/res/icon/car_stop.png create mode 100644 FineUI.Examples/res/icon/cart.png create mode 100644 FineUI.Examples/res/icon/cart_add.png create mode 100644 FineUI.Examples/res/icon/cart_delete.png create mode 100644 FineUI.Examples/res/icon/cart_edit.png create mode 100644 FineUI.Examples/res/icon/cart_error.png create mode 100644 FineUI.Examples/res/icon/cart_full.png create mode 100644 FineUI.Examples/res/icon/cart_go.png create mode 100644 FineUI.Examples/res/icon/cart_magnify.png create mode 100644 FineUI.Examples/res/icon/cart_put.png create mode 100644 FineUI.Examples/res/icon/cart_remove.png create mode 100644 FineUI.Examples/res/icon/cd.png create mode 100644 FineUI.Examples/res/icon/cd_add.png create mode 100644 FineUI.Examples/res/icon/cd_burn.png create mode 100644 FineUI.Examples/res/icon/cd_delete.png create mode 100644 FineUI.Examples/res/icon/cd_edit.png create mode 100644 FineUI.Examples/res/icon/cd_eject.png create mode 100644 FineUI.Examples/res/icon/cd_go.png create mode 100644 FineUI.Examples/res/icon/cd_magnify.png create mode 100644 FineUI.Examples/res/icon/cd_play.png create mode 100644 FineUI.Examples/res/icon/cd_stop.png create mode 100644 FineUI.Examples/res/icon/cd_stop_alt.png create mode 100644 FineUI.Examples/res/icon/cd_tick.png create mode 100644 FineUI.Examples/res/icon/cdr.png create mode 100644 FineUI.Examples/res/icon/cdr_add.png create mode 100644 FineUI.Examples/res/icon/cdr_burn.png create mode 100644 FineUI.Examples/res/icon/cdr_cross.png create mode 100644 FineUI.Examples/res/icon/cdr_delete.png create mode 100644 FineUI.Examples/res/icon/cdr_edit.png create mode 100644 FineUI.Examples/res/icon/cdr_eject.png create mode 100644 FineUI.Examples/res/icon/cdr_error.png create mode 100644 FineUI.Examples/res/icon/cdr_go.png create mode 100644 FineUI.Examples/res/icon/cdr_magnify.png create mode 100644 FineUI.Examples/res/icon/cdr_play.png create mode 100644 FineUI.Examples/res/icon/cdr_start.png create mode 100644 FineUI.Examples/res/icon/cdr_stop.png create mode 100644 FineUI.Examples/res/icon/cdr_stop_alt.png create mode 100644 FineUI.Examples/res/icon/cdr_tick.png create mode 100644 FineUI.Examples/res/icon/chart_bar.png create mode 100644 FineUI.Examples/res/icon/chart_bar_add.png create mode 100644 FineUI.Examples/res/icon/chart_bar_delete.png create mode 100644 FineUI.Examples/res/icon/chart_bar_edit.png create mode 100644 FineUI.Examples/res/icon/chart_bar_error.png create mode 100644 FineUI.Examples/res/icon/chart_bar_link.png create mode 100644 FineUI.Examples/res/icon/chart_curve.png create mode 100644 FineUI.Examples/res/icon/chart_curve_add.png create mode 100644 FineUI.Examples/res/icon/chart_curve_delete.png create mode 100644 FineUI.Examples/res/icon/chart_curve_edit.png create mode 100644 FineUI.Examples/res/icon/chart_curve_error.png create mode 100644 FineUI.Examples/res/icon/chart_curve_go.png create mode 100644 FineUI.Examples/res/icon/chart_curve_link.png create mode 100644 FineUI.Examples/res/icon/chart_line.png create mode 100644 FineUI.Examples/res/icon/chart_line_add.png create mode 100644 FineUI.Examples/res/icon/chart_line_delete.png create mode 100644 FineUI.Examples/res/icon/chart_line_edit.png create mode 100644 FineUI.Examples/res/icon/chart_line_error.png create mode 100644 FineUI.Examples/res/icon/chart_line_link.png create mode 100644 FineUI.Examples/res/icon/chart_org_inverted.png create mode 100644 FineUI.Examples/res/icon/chart_organisation.png create mode 100644 FineUI.Examples/res/icon/chart_organisation_add.png create mode 100644 FineUI.Examples/res/icon/chart_organisation_delete.png create mode 100644 FineUI.Examples/res/icon/chart_pie.png create mode 100644 FineUI.Examples/res/icon/chart_pie_add.png create mode 100644 FineUI.Examples/res/icon/chart_pie_delete.png create mode 100644 FineUI.Examples/res/icon/chart_pie_edit.png create mode 100644 FineUI.Examples/res/icon/chart_pie_error.png create mode 100644 FineUI.Examples/res/icon/chart_pie_lightning.png create mode 100644 FineUI.Examples/res/icon/chart_pie_link.png create mode 100644 FineUI.Examples/res/icon/check_error.png create mode 100644 FineUI.Examples/res/icon/clipboard.png create mode 100644 FineUI.Examples/res/icon/clock.png create mode 100644 FineUI.Examples/res/icon/clock_add.png create mode 100644 FineUI.Examples/res/icon/clock_delete.png create mode 100644 FineUI.Examples/res/icon/clock_edit.png create mode 100644 FineUI.Examples/res/icon/clock_error.png create mode 100644 FineUI.Examples/res/icon/clock_go.png create mode 100644 FineUI.Examples/res/icon/clock_link.png create mode 100644 FineUI.Examples/res/icon/clock_pause.png create mode 100644 FineUI.Examples/res/icon/clock_play.png create mode 100644 FineUI.Examples/res/icon/clock_red.png create mode 100644 FineUI.Examples/res/icon/clock_start.png create mode 100644 FineUI.Examples/res/icon/clock_stop.png create mode 100644 FineUI.Examples/res/icon/clock_stop_2.png create mode 100644 FineUI.Examples/res/icon/cmy.png create mode 100644 FineUI.Examples/res/icon/cog.png create mode 100644 FineUI.Examples/res/icon/cog_add.png create mode 100644 FineUI.Examples/res/icon/cog_delete.png create mode 100644 FineUI.Examples/res/icon/cog_edit.png create mode 100644 FineUI.Examples/res/icon/cog_error.png create mode 100644 FineUI.Examples/res/icon/cog_go.png create mode 100644 FineUI.Examples/res/icon/cog_start.png create mode 100644 FineUI.Examples/res/icon/cog_stop.png create mode 100644 FineUI.Examples/res/icon/coins.png create mode 100644 FineUI.Examples/res/icon/coins_add.png create mode 100644 FineUI.Examples/res/icon/coins_delete.png create mode 100644 FineUI.Examples/res/icon/color.png create mode 100644 FineUI.Examples/res/icon/color_swatch.png create mode 100644 FineUI.Examples/res/icon/color_wheel.png create mode 100644 FineUI.Examples/res/icon/comment.png create mode 100644 FineUI.Examples/res/icon/comment_add.png create mode 100644 FineUI.Examples/res/icon/comment_delete.png create mode 100644 FineUI.Examples/res/icon/comment_dull.png create mode 100644 FineUI.Examples/res/icon/comment_edit.png create mode 100644 FineUI.Examples/res/icon/comment_play.png create mode 100644 FineUI.Examples/res/icon/comment_record.png create mode 100644 FineUI.Examples/res/icon/comments.png create mode 100644 FineUI.Examples/res/icon/comments_add.png create mode 100644 FineUI.Examples/res/icon/comments_delete.png create mode 100644 FineUI.Examples/res/icon/compass.png create mode 100644 FineUI.Examples/res/icon/compress.png create mode 100644 FineUI.Examples/res/icon/computer.png create mode 100644 FineUI.Examples/res/icon/computer_add.png create mode 100644 FineUI.Examples/res/icon/computer_connect.png create mode 100644 FineUI.Examples/res/icon/computer_delete.png create mode 100644 FineUI.Examples/res/icon/computer_edit.png create mode 100644 FineUI.Examples/res/icon/computer_error.png create mode 100644 FineUI.Examples/res/icon/computer_go.png create mode 100644 FineUI.Examples/res/icon/computer_key.png create mode 100644 FineUI.Examples/res/icon/computer_link.png create mode 100644 FineUI.Examples/res/icon/computer_magnify.png create mode 100644 FineUI.Examples/res/icon/computer_off.png create mode 100644 FineUI.Examples/res/icon/computer_start.png create mode 100644 FineUI.Examples/res/icon/computer_stop.png create mode 100644 FineUI.Examples/res/icon/computer_wrench.png create mode 100644 FineUI.Examples/res/icon/connect.png create mode 100644 FineUI.Examples/res/icon/contrast.png create mode 100644 FineUI.Examples/res/icon/contrast_decrease.png create mode 100644 FineUI.Examples/res/icon/contrast_high.png create mode 100644 FineUI.Examples/res/icon/contrast_increase.png create mode 100644 FineUI.Examples/res/icon/contrast_low.png create mode 100644 FineUI.Examples/res/icon/control_add.png create mode 100644 FineUI.Examples/res/icon/control_add_blue.png create mode 100644 FineUI.Examples/res/icon/control_blank.png create mode 100644 FineUI.Examples/res/icon/control_blank_blue.png create mode 100644 FineUI.Examples/res/icon/control_eject.png create mode 100644 FineUI.Examples/res/icon/control_eject_blue.png create mode 100644 FineUI.Examples/res/icon/control_end.png create mode 100644 FineUI.Examples/res/icon/control_end_blue.png create mode 100644 FineUI.Examples/res/icon/control_equalizer.png create mode 100644 FineUI.Examples/res/icon/control_equalizer_blue.png create mode 100644 FineUI.Examples/res/icon/control_fastforward.png create mode 100644 FineUI.Examples/res/icon/control_fastforward_blue.png create mode 100644 FineUI.Examples/res/icon/control_pause.png create mode 100644 FineUI.Examples/res/icon/control_pause_blue.png create mode 100644 FineUI.Examples/res/icon/control_play.png create mode 100644 FineUI.Examples/res/icon/control_play_blue.png create mode 100644 FineUI.Examples/res/icon/control_power.png create mode 100644 FineUI.Examples/res/icon/control_power_blue.png create mode 100644 FineUI.Examples/res/icon/control_record.png create mode 100644 FineUI.Examples/res/icon/control_record_blue.png create mode 100644 FineUI.Examples/res/icon/control_remove.png create mode 100644 FineUI.Examples/res/icon/control_remove_blue.png create mode 100644 FineUI.Examples/res/icon/control_repeat.png create mode 100644 FineUI.Examples/res/icon/control_repeat_blue.png create mode 100644 FineUI.Examples/res/icon/control_rewind.png create mode 100644 FineUI.Examples/res/icon/control_rewind_blue.png create mode 100644 FineUI.Examples/res/icon/control_start.png create mode 100644 FineUI.Examples/res/icon/control_start_blue.png create mode 100644 FineUI.Examples/res/icon/control_stop.png create mode 100644 FineUI.Examples/res/icon/control_stop_blue.png create mode 100644 FineUI.Examples/res/icon/controller.png create mode 100644 FineUI.Examples/res/icon/controller_add.png create mode 100644 FineUI.Examples/res/icon/controller_delete.png create mode 100644 FineUI.Examples/res/icon/controller_error.png create mode 100644 FineUI.Examples/res/icon/creditcards.png create mode 100644 FineUI.Examples/res/icon/cross.png create mode 100644 FineUI.Examples/res/icon/css.png create mode 100644 FineUI.Examples/res/icon/css_add.png create mode 100644 FineUI.Examples/res/icon/css_delete.png create mode 100644 FineUI.Examples/res/icon/css_error.png create mode 100644 FineUI.Examples/res/icon/css_go.png create mode 100644 FineUI.Examples/res/icon/css_valid.png create mode 100644 FineUI.Examples/res/icon/cup.png create mode 100644 FineUI.Examples/res/icon/cup_add.png create mode 100644 FineUI.Examples/res/icon/cup_black.png create mode 100644 FineUI.Examples/res/icon/cup_delete.png create mode 100644 FineUI.Examples/res/icon/cup_edit.png create mode 100644 FineUI.Examples/res/icon/cup_error.png create mode 100644 FineUI.Examples/res/icon/cup_go.png create mode 100644 FineUI.Examples/res/icon/cup_green.png create mode 100644 FineUI.Examples/res/icon/cup_key.png create mode 100644 FineUI.Examples/res/icon/cup_link.png create mode 100644 FineUI.Examples/res/icon/cup_tea.png create mode 100644 FineUI.Examples/res/icon/cursor.png create mode 100644 FineUI.Examples/res/icon/cursor_small.png create mode 100644 FineUI.Examples/res/icon/cut.png create mode 100644 FineUI.Examples/res/icon/cut_red.png create mode 100644 FineUI.Examples/res/icon/database.png create mode 100644 FineUI.Examples/res/icon/database_add.png create mode 100644 FineUI.Examples/res/icon/database_connect.png create mode 100644 FineUI.Examples/res/icon/database_copy.png create mode 100644 FineUI.Examples/res/icon/database_delete.png create mode 100644 FineUI.Examples/res/icon/database_edit.png create mode 100644 FineUI.Examples/res/icon/database_error.png create mode 100644 FineUI.Examples/res/icon/database_gear.png create mode 100644 FineUI.Examples/res/icon/database_go.png create mode 100644 FineUI.Examples/res/icon/database_key.png create mode 100644 FineUI.Examples/res/icon/database_lightning.png create mode 100644 FineUI.Examples/res/icon/database_link.png create mode 100644 FineUI.Examples/res/icon/database_refresh.png create mode 100644 FineUI.Examples/res/icon/database_save.png create mode 100644 FineUI.Examples/res/icon/database_start.png create mode 100644 FineUI.Examples/res/icon/database_stop.png create mode 100644 FineUI.Examples/res/icon/database_table.png create mode 100644 FineUI.Examples/res/icon/database_wrench.png create mode 100644 FineUI.Examples/res/icon/database_yellow.png create mode 100644 FineUI.Examples/res/icon/database_yellow_start.png create mode 100644 FineUI.Examples/res/icon/database_yellow_stop.png create mode 100644 FineUI.Examples/res/icon/date.png create mode 100644 FineUI.Examples/res/icon/date_add.png create mode 100644 FineUI.Examples/res/icon/date_delete.png create mode 100644 FineUI.Examples/res/icon/date_edit.png create mode 100644 FineUI.Examples/res/icon/date_error.png create mode 100644 FineUI.Examples/res/icon/date_go.png create mode 100644 FineUI.Examples/res/icon/date_link.png create mode 100644 FineUI.Examples/res/icon/date_magnify.png create mode 100644 FineUI.Examples/res/icon/date_next.png create mode 100644 FineUI.Examples/res/icon/date_previous.png create mode 100644 FineUI.Examples/res/icon/decline.png create mode 100644 FineUI.Examples/res/icon/delete.png create mode 100644 FineUI.Examples/res/icon/device_stylus.png create mode 100644 FineUI.Examples/res/icon/disconnect.png create mode 100644 FineUI.Examples/res/icon/disk.png create mode 100644 FineUI.Examples/res/icon/disk_black.png create mode 100644 FineUI.Examples/res/icon/disk_black_error.png create mode 100644 FineUI.Examples/res/icon/disk_black_magnify.png create mode 100644 FineUI.Examples/res/icon/disk_download.png create mode 100644 FineUI.Examples/res/icon/disk_edit.png create mode 100644 FineUI.Examples/res/icon/disk_error.png create mode 100644 FineUI.Examples/res/icon/disk_magnify.png create mode 100644 FineUI.Examples/res/icon/disk_multiple.png create mode 100644 FineUI.Examples/res/icon/disk_upload.png create mode 100644 FineUI.Examples/res/icon/door.png create mode 100644 FineUI.Examples/res/icon/door_error.png create mode 100644 FineUI.Examples/res/icon/door_in.png create mode 100644 FineUI.Examples/res/icon/door_open.png create mode 100644 FineUI.Examples/res/icon/door_out.png create mode 100644 FineUI.Examples/res/icon/drink.png create mode 100644 FineUI.Examples/res/icon/drink_empty.png create mode 100644 FineUI.Examples/res/icon/drink_red.png create mode 100644 FineUI.Examples/res/icon/drive.png create mode 100644 FineUI.Examples/res/icon/drive_add.png create mode 100644 FineUI.Examples/res/icon/drive_burn.png create mode 100644 FineUI.Examples/res/icon/drive_cd.png create mode 100644 FineUI.Examples/res/icon/drive_cd_empty.png create mode 100644 FineUI.Examples/res/icon/drive_cdr.png create mode 100644 FineUI.Examples/res/icon/drive_delete.png create mode 100644 FineUI.Examples/res/icon/drive_disk.png create mode 100644 FineUI.Examples/res/icon/drive_edit.png create mode 100644 FineUI.Examples/res/icon/drive_error.png create mode 100644 FineUI.Examples/res/icon/drive_go.png create mode 100644 FineUI.Examples/res/icon/drive_key.png create mode 100644 FineUI.Examples/res/icon/drive_link.png create mode 100644 FineUI.Examples/res/icon/drive_magnify.png create mode 100644 FineUI.Examples/res/icon/drive_network.png create mode 100644 FineUI.Examples/res/icon/drive_network_error.png create mode 100644 FineUI.Examples/res/icon/drive_network_stop.png create mode 100644 FineUI.Examples/res/icon/drive_rename.png create mode 100644 FineUI.Examples/res/icon/drive_user.png create mode 100644 FineUI.Examples/res/icon/drive_web.png create mode 100644 FineUI.Examples/res/icon/dvd.png create mode 100644 FineUI.Examples/res/icon/dvd_add.png create mode 100644 FineUI.Examples/res/icon/dvd_delete.png create mode 100644 FineUI.Examples/res/icon/dvd_edit.png create mode 100644 FineUI.Examples/res/icon/dvd_error.png create mode 100644 FineUI.Examples/res/icon/dvd_go.png create mode 100644 FineUI.Examples/res/icon/dvd_key.png create mode 100644 FineUI.Examples/res/icon/dvd_link.png create mode 100644 FineUI.Examples/res/icon/dvd_start.png create mode 100644 FineUI.Examples/res/icon/dvd_stop.png create mode 100644 FineUI.Examples/res/icon/eject_blue.png create mode 100644 FineUI.Examples/res/icon/eject_green.png create mode 100644 FineUI.Examples/res/icon/email.png create mode 100644 FineUI.Examples/res/icon/email_add.png create mode 100644 FineUI.Examples/res/icon/email_attach.png create mode 100644 FineUI.Examples/res/icon/email_delete.png create mode 100644 FineUI.Examples/res/icon/email_edit.png create mode 100644 FineUI.Examples/res/icon/email_error.png create mode 100644 FineUI.Examples/res/icon/email_go.png create mode 100644 FineUI.Examples/res/icon/email_link.png create mode 100644 FineUI.Examples/res/icon/email_magnify.png create mode 100644 FineUI.Examples/res/icon/email_open.png create mode 100644 FineUI.Examples/res/icon/email_open_image.png create mode 100644 FineUI.Examples/res/icon/email_star.png create mode 100644 FineUI.Examples/res/icon/email_start.png create mode 100644 FineUI.Examples/res/icon/email_stop.png create mode 100644 FineUI.Examples/res/icon/email_transfer.png create mode 100644 FineUI.Examples/res/icon/emoticon_evilgrin.png create mode 100644 FineUI.Examples/res/icon/emoticon_grin.png create mode 100644 FineUI.Examples/res/icon/emoticon_happy.png create mode 100644 FineUI.Examples/res/icon/emoticon_smile.png create mode 100644 FineUI.Examples/res/icon/emoticon_surprised.png create mode 100644 FineUI.Examples/res/icon/emoticon_tongue.png create mode 100644 FineUI.Examples/res/icon/emoticon_unhappy.png create mode 100644 FineUI.Examples/res/icon/emoticon_waii.png create mode 100644 FineUI.Examples/res/icon/emoticon_wink.png create mode 100644 FineUI.Examples/res/icon/erase.png create mode 100644 FineUI.Examples/res/icon/error.png create mode 100644 FineUI.Examples/res/icon/error_add.png create mode 100644 FineUI.Examples/res/icon/error_delete.png create mode 100644 FineUI.Examples/res/icon/error_go.png create mode 100644 FineUI.Examples/res/icon/exclamation.png create mode 100644 FineUI.Examples/res/icon/eye.png create mode 100644 FineUI.Examples/res/icon/eyes.png create mode 100644 FineUI.Examples/res/icon/feed.png create mode 100644 FineUI.Examples/res/icon/feed_add.png create mode 100644 FineUI.Examples/res/icon/feed_delete.png create mode 100644 FineUI.Examples/res/icon/feed_disk.png create mode 100644 FineUI.Examples/res/icon/feed_edit.png create mode 100644 FineUI.Examples/res/icon/feed_error.png create mode 100644 FineUI.Examples/res/icon/feed_go.png create mode 100644 FineUI.Examples/res/icon/feed_key.png create mode 100644 FineUI.Examples/res/icon/feed_link.png create mode 100644 FineUI.Examples/res/icon/feed_magnify.png create mode 100644 FineUI.Examples/res/icon/feed_star.png create mode 100644 FineUI.Examples/res/icon/female.png create mode 100644 FineUI.Examples/res/icon/film.png create mode 100644 FineUI.Examples/res/icon/film_add.png create mode 100644 FineUI.Examples/res/icon/film_delete.png create mode 100644 FineUI.Examples/res/icon/film_edit.png create mode 100644 FineUI.Examples/res/icon/film_eject.png create mode 100644 FineUI.Examples/res/icon/film_error.png create mode 100644 FineUI.Examples/res/icon/film_go.png create mode 100644 FineUI.Examples/res/icon/film_key.png create mode 100644 FineUI.Examples/res/icon/film_link.png create mode 100644 FineUI.Examples/res/icon/film_magnify.png create mode 100644 FineUI.Examples/res/icon/film_save.png create mode 100644 FineUI.Examples/res/icon/film_star.png create mode 100644 FineUI.Examples/res/icon/film_start.png create mode 100644 FineUI.Examples/res/icon/film_stop.png create mode 100644 FineUI.Examples/res/icon/find.png create mode 100644 FineUI.Examples/res/icon/finger_point.png create mode 100644 FineUI.Examples/res/icon/flag_ad.png create mode 100644 FineUI.Examples/res/icon/flag_ae.png create mode 100644 FineUI.Examples/res/icon/flag_af.png create mode 100644 FineUI.Examples/res/icon/flag_ag.png create mode 100644 FineUI.Examples/res/icon/flag_ai.png create mode 100644 FineUI.Examples/res/icon/flag_al.png create mode 100644 FineUI.Examples/res/icon/flag_am.png create mode 100644 FineUI.Examples/res/icon/flag_an.png create mode 100644 FineUI.Examples/res/icon/flag_ao.png create mode 100644 FineUI.Examples/res/icon/flag_ar.png create mode 100644 FineUI.Examples/res/icon/flag_as.png create mode 100644 FineUI.Examples/res/icon/flag_at.png create mode 100644 FineUI.Examples/res/icon/flag_au.png create mode 100644 FineUI.Examples/res/icon/flag_aw.png create mode 100644 FineUI.Examples/res/icon/flag_ax.png create mode 100644 FineUI.Examples/res/icon/flag_az.png create mode 100644 FineUI.Examples/res/icon/flag_ba.png create mode 100644 FineUI.Examples/res/icon/flag_bb.png create mode 100644 FineUI.Examples/res/icon/flag_bd.png create mode 100644 FineUI.Examples/res/icon/flag_be.png create mode 100644 FineUI.Examples/res/icon/flag_bf.png create mode 100644 FineUI.Examples/res/icon/flag_bg.png create mode 100644 FineUI.Examples/res/icon/flag_bh.png create mode 100644 FineUI.Examples/res/icon/flag_bi.png create mode 100644 FineUI.Examples/res/icon/flag_bj.png create mode 100644 FineUI.Examples/res/icon/flag_black.png create mode 100644 FineUI.Examples/res/icon/flag_blue.png create mode 100644 FineUI.Examples/res/icon/flag_bm.png create mode 100644 FineUI.Examples/res/icon/flag_bn.png create mode 100644 FineUI.Examples/res/icon/flag_bo.png create mode 100644 FineUI.Examples/res/icon/flag_br.png create mode 100644 FineUI.Examples/res/icon/flag_bs.png create mode 100644 FineUI.Examples/res/icon/flag_bt.png create mode 100644 FineUI.Examples/res/icon/flag_bv.png create mode 100644 FineUI.Examples/res/icon/flag_bw.png create mode 100644 FineUI.Examples/res/icon/flag_by.png create mode 100644 FineUI.Examples/res/icon/flag_bz.png create mode 100644 FineUI.Examples/res/icon/flag_ca.png create mode 100644 FineUI.Examples/res/icon/flag_catalonia.png create mode 100644 FineUI.Examples/res/icon/flag_cc.png create mode 100644 FineUI.Examples/res/icon/flag_cd.png create mode 100644 FineUI.Examples/res/icon/flag_cf.png create mode 100644 FineUI.Examples/res/icon/flag_cg.png create mode 100644 FineUI.Examples/res/icon/flag_ch.png create mode 100644 FineUI.Examples/res/icon/flag_checked.png create mode 100644 FineUI.Examples/res/icon/flag_ci.png create mode 100644 FineUI.Examples/res/icon/flag_ck.png create mode 100644 FineUI.Examples/res/icon/flag_cl.png create mode 100644 FineUI.Examples/res/icon/flag_cm.png create mode 100644 FineUI.Examples/res/icon/flag_cn.png create mode 100644 FineUI.Examples/res/icon/flag_co.png create mode 100644 FineUI.Examples/res/icon/flag_cr.png create mode 100644 FineUI.Examples/res/icon/flag_cs.png create mode 100644 FineUI.Examples/res/icon/flag_cu.png create mode 100644 FineUI.Examples/res/icon/flag_cv.png create mode 100644 FineUI.Examples/res/icon/flag_cx.png create mode 100644 FineUI.Examples/res/icon/flag_cy.png create mode 100644 FineUI.Examples/res/icon/flag_cz.png create mode 100644 FineUI.Examples/res/icon/flag_de.png create mode 100644 FineUI.Examples/res/icon/flag_dj.png create mode 100644 FineUI.Examples/res/icon/flag_dk.png create mode 100644 FineUI.Examples/res/icon/flag_dm.png create mode 100644 FineUI.Examples/res/icon/flag_do.png create mode 100644 FineUI.Examples/res/icon/flag_dz.png create mode 100644 FineUI.Examples/res/icon/flag_ec.png create mode 100644 FineUI.Examples/res/icon/flag_ee.png create mode 100644 FineUI.Examples/res/icon/flag_eg.png create mode 100644 FineUI.Examples/res/icon/flag_eh.png create mode 100644 FineUI.Examples/res/icon/flag_england.png create mode 100644 FineUI.Examples/res/icon/flag_er.png create mode 100644 FineUI.Examples/res/icon/flag_es.png create mode 100644 FineUI.Examples/res/icon/flag_et.png create mode 100644 FineUI.Examples/res/icon/flag_europeanunion.png create mode 100644 FineUI.Examples/res/icon/flag_fam.png create mode 100644 FineUI.Examples/res/icon/flag_fi.png create mode 100644 FineUI.Examples/res/icon/flag_fj.png create mode 100644 FineUI.Examples/res/icon/flag_fk.png create mode 100644 FineUI.Examples/res/icon/flag_fm.png create mode 100644 FineUI.Examples/res/icon/flag_fo.png create mode 100644 FineUI.Examples/res/icon/flag_fr.png create mode 100644 FineUI.Examples/res/icon/flag_france.png create mode 100644 FineUI.Examples/res/icon/flag_ga.png create mode 100644 FineUI.Examples/res/icon/flag_gb.png create mode 100644 FineUI.Examples/res/icon/flag_gd.png create mode 100644 FineUI.Examples/res/icon/flag_ge.png create mode 100644 FineUI.Examples/res/icon/flag_gf.png create mode 100644 FineUI.Examples/res/icon/flag_gg.png create mode 100644 FineUI.Examples/res/icon/flag_gh.png create mode 100644 FineUI.Examples/res/icon/flag_gi.png create mode 100644 FineUI.Examples/res/icon/flag_gl.png create mode 100644 FineUI.Examples/res/icon/flag_gm.png create mode 100644 FineUI.Examples/res/icon/flag_gn.png create mode 100644 FineUI.Examples/res/icon/flag_gp.png create mode 100644 FineUI.Examples/res/icon/flag_gq.png create mode 100644 FineUI.Examples/res/icon/flag_gr.png create mode 100644 FineUI.Examples/res/icon/flag_green.png create mode 100644 FineUI.Examples/res/icon/flag_grey.png create mode 100644 FineUI.Examples/res/icon/flag_gs.png create mode 100644 FineUI.Examples/res/icon/flag_gt.png create mode 100644 FineUI.Examples/res/icon/flag_gu.png create mode 100644 FineUI.Examples/res/icon/flag_gw.png create mode 100644 FineUI.Examples/res/icon/flag_gy.png create mode 100644 FineUI.Examples/res/icon/flag_hk.png create mode 100644 FineUI.Examples/res/icon/flag_hm.png create mode 100644 FineUI.Examples/res/icon/flag_hn.png create mode 100644 FineUI.Examples/res/icon/flag_hr.png create mode 100644 FineUI.Examples/res/icon/flag_ht.png create mode 100644 FineUI.Examples/res/icon/flag_hu.png create mode 100644 FineUI.Examples/res/icon/flag_id.png create mode 100644 FineUI.Examples/res/icon/flag_ie.png create mode 100644 FineUI.Examples/res/icon/flag_il.png create mode 100644 FineUI.Examples/res/icon/flag_in.png create mode 100644 FineUI.Examples/res/icon/flag_io.png create mode 100644 FineUI.Examples/res/icon/flag_iq.png create mode 100644 FineUI.Examples/res/icon/flag_ir.png create mode 100644 FineUI.Examples/res/icon/flag_is.png create mode 100644 FineUI.Examples/res/icon/flag_it.png create mode 100644 FineUI.Examples/res/icon/flag_jm.png create mode 100644 FineUI.Examples/res/icon/flag_jo.png create mode 100644 FineUI.Examples/res/icon/flag_jp.png create mode 100644 FineUI.Examples/res/icon/flag_ke.png create mode 100644 FineUI.Examples/res/icon/flag_kg.png create mode 100644 FineUI.Examples/res/icon/flag_kh.png create mode 100644 FineUI.Examples/res/icon/flag_ki.png create mode 100644 FineUI.Examples/res/icon/flag_km.png create mode 100644 FineUI.Examples/res/icon/flag_kn.png create mode 100644 FineUI.Examples/res/icon/flag_kp.png create mode 100644 FineUI.Examples/res/icon/flag_kr.png create mode 100644 FineUI.Examples/res/icon/flag_kw.png create mode 100644 FineUI.Examples/res/icon/flag_ky.png create mode 100644 FineUI.Examples/res/icon/flag_kz.png create mode 100644 FineUI.Examples/res/icon/flag_la.png create mode 100644 FineUI.Examples/res/icon/flag_lb.png create mode 100644 FineUI.Examples/res/icon/flag_lc.png create mode 100644 FineUI.Examples/res/icon/flag_li.png create mode 100644 FineUI.Examples/res/icon/flag_lk.png create mode 100644 FineUI.Examples/res/icon/flag_lr.png create mode 100644 FineUI.Examples/res/icon/flag_ls.png create mode 100644 FineUI.Examples/res/icon/flag_lt.png create mode 100644 FineUI.Examples/res/icon/flag_lu.png create mode 100644 FineUI.Examples/res/icon/flag_lv.png create mode 100644 FineUI.Examples/res/icon/flag_ly.png create mode 100644 FineUI.Examples/res/icon/flag_ma.png create mode 100644 FineUI.Examples/res/icon/flag_mc.png create mode 100644 FineUI.Examples/res/icon/flag_md.png create mode 100644 FineUI.Examples/res/icon/flag_me.png create mode 100644 FineUI.Examples/res/icon/flag_mg.png create mode 100644 FineUI.Examples/res/icon/flag_mh.png create mode 100644 FineUI.Examples/res/icon/flag_mk.png create mode 100644 FineUI.Examples/res/icon/flag_ml.png create mode 100644 FineUI.Examples/res/icon/flag_mm.png create mode 100644 FineUI.Examples/res/icon/flag_mn.png create mode 100644 FineUI.Examples/res/icon/flag_mo.png create mode 100644 FineUI.Examples/res/icon/flag_mp.png create mode 100644 FineUI.Examples/res/icon/flag_mq.png create mode 100644 FineUI.Examples/res/icon/flag_mr.png create mode 100644 FineUI.Examples/res/icon/flag_ms.png create mode 100644 FineUI.Examples/res/icon/flag_mt.png create mode 100644 FineUI.Examples/res/icon/flag_mu.png create mode 100644 FineUI.Examples/res/icon/flag_mv.png create mode 100644 FineUI.Examples/res/icon/flag_mw.png create mode 100644 FineUI.Examples/res/icon/flag_mx.png create mode 100644 FineUI.Examples/res/icon/flag_my.png create mode 100644 FineUI.Examples/res/icon/flag_mz.png create mode 100644 FineUI.Examples/res/icon/flag_na.png create mode 100644 FineUI.Examples/res/icon/flag_nc.png create mode 100644 FineUI.Examples/res/icon/flag_ne.png create mode 100644 FineUI.Examples/res/icon/flag_nf.png create mode 100644 FineUI.Examples/res/icon/flag_ng.png create mode 100644 FineUI.Examples/res/icon/flag_ni.png create mode 100644 FineUI.Examples/res/icon/flag_nl.png create mode 100644 FineUI.Examples/res/icon/flag_no.png create mode 100644 FineUI.Examples/res/icon/flag_np.png create mode 100644 FineUI.Examples/res/icon/flag_nr.png create mode 100644 FineUI.Examples/res/icon/flag_nu.png create mode 100644 FineUI.Examples/res/icon/flag_nz.png create mode 100644 FineUI.Examples/res/icon/flag_om.png create mode 100644 FineUI.Examples/res/icon/flag_orange.png create mode 100644 FineUI.Examples/res/icon/flag_pa.png create mode 100644 FineUI.Examples/res/icon/flag_pe.png create mode 100644 FineUI.Examples/res/icon/flag_pf.png create mode 100644 FineUI.Examples/res/icon/flag_pg.png create mode 100644 FineUI.Examples/res/icon/flag_ph.png create mode 100644 FineUI.Examples/res/icon/flag_pink.png create mode 100644 FineUI.Examples/res/icon/flag_pk.png create mode 100644 FineUI.Examples/res/icon/flag_pl.png create mode 100644 FineUI.Examples/res/icon/flag_pm.png create mode 100644 FineUI.Examples/res/icon/flag_pn.png create mode 100644 FineUI.Examples/res/icon/flag_pr.png create mode 100644 FineUI.Examples/res/icon/flag_ps.png create mode 100644 FineUI.Examples/res/icon/flag_pt.png create mode 100644 FineUI.Examples/res/icon/flag_purple.png create mode 100644 FineUI.Examples/res/icon/flag_pw.png create mode 100644 FineUI.Examples/res/icon/flag_py.png create mode 100644 FineUI.Examples/res/icon/flag_qa.png create mode 100644 FineUI.Examples/res/icon/flag_re.png create mode 100644 FineUI.Examples/res/icon/flag_red.png create mode 100644 FineUI.Examples/res/icon/flag_ro.png create mode 100644 FineUI.Examples/res/icon/flag_rs.png create mode 100644 FineUI.Examples/res/icon/flag_ru.png create mode 100644 FineUI.Examples/res/icon/flag_rw.png create mode 100644 FineUI.Examples/res/icon/flag_sa.png create mode 100644 FineUI.Examples/res/icon/flag_sb.png create mode 100644 FineUI.Examples/res/icon/flag_sc.png create mode 100644 FineUI.Examples/res/icon/flag_scotland.png create mode 100644 FineUI.Examples/res/icon/flag_sd.png create mode 100644 FineUI.Examples/res/icon/flag_se.png create mode 100644 FineUI.Examples/res/icon/flag_sg.png create mode 100644 FineUI.Examples/res/icon/flag_sh.png create mode 100644 FineUI.Examples/res/icon/flag_si.png create mode 100644 FineUI.Examples/res/icon/flag_sj.png create mode 100644 FineUI.Examples/res/icon/flag_sk.png create mode 100644 FineUI.Examples/res/icon/flag_sl.png create mode 100644 FineUI.Examples/res/icon/flag_sm.png create mode 100644 FineUI.Examples/res/icon/flag_sn.png create mode 100644 FineUI.Examples/res/icon/flag_so.png create mode 100644 FineUI.Examples/res/icon/flag_sr.png create mode 100644 FineUI.Examples/res/icon/flag_st.png create mode 100644 FineUI.Examples/res/icon/flag_sv.png create mode 100644 FineUI.Examples/res/icon/flag_sy.png create mode 100644 FineUI.Examples/res/icon/flag_sz.png create mode 100644 FineUI.Examples/res/icon/flag_tc.png create mode 100644 FineUI.Examples/res/icon/flag_td.png create mode 100644 FineUI.Examples/res/icon/flag_tf.png create mode 100644 FineUI.Examples/res/icon/flag_tg.png create mode 100644 FineUI.Examples/res/icon/flag_th.png create mode 100644 FineUI.Examples/res/icon/flag_tj.png create mode 100644 FineUI.Examples/res/icon/flag_tk.png create mode 100644 FineUI.Examples/res/icon/flag_tl.png create mode 100644 FineUI.Examples/res/icon/flag_tm.png create mode 100644 FineUI.Examples/res/icon/flag_tn.png create mode 100644 FineUI.Examples/res/icon/flag_to.png create mode 100644 FineUI.Examples/res/icon/flag_tr.png create mode 100644 FineUI.Examples/res/icon/flag_tt.png create mode 100644 FineUI.Examples/res/icon/flag_tv.png create mode 100644 FineUI.Examples/res/icon/flag_tw.png create mode 100644 FineUI.Examples/res/icon/flag_tz.png create mode 100644 FineUI.Examples/res/icon/flag_ua.png create mode 100644 FineUI.Examples/res/icon/flag_ug.png create mode 100644 FineUI.Examples/res/icon/flag_um.png create mode 100644 FineUI.Examples/res/icon/flag_us.png create mode 100644 FineUI.Examples/res/icon/flag_uy.png create mode 100644 FineUI.Examples/res/icon/flag_uz.png create mode 100644 FineUI.Examples/res/icon/flag_va.png create mode 100644 FineUI.Examples/res/icon/flag_vc.png create mode 100644 FineUI.Examples/res/icon/flag_ve.png create mode 100644 FineUI.Examples/res/icon/flag_vg.png create mode 100644 FineUI.Examples/res/icon/flag_vi.png create mode 100644 FineUI.Examples/res/icon/flag_vn.png create mode 100644 FineUI.Examples/res/icon/flag_vu.png create mode 100644 FineUI.Examples/res/icon/flag_wales.png create mode 100644 FineUI.Examples/res/icon/flag_wf.png create mode 100644 FineUI.Examples/res/icon/flag_white.png create mode 100644 FineUI.Examples/res/icon/flag_ws.png create mode 100644 FineUI.Examples/res/icon/flag_ye.png create mode 100644 FineUI.Examples/res/icon/flag_yellow.png create mode 100644 FineUI.Examples/res/icon/flag_yt.png create mode 100644 FineUI.Examples/res/icon/flag_za.png create mode 100644 FineUI.Examples/res/icon/flag_zm.png create mode 100644 FineUI.Examples/res/icon/flag_zw.png create mode 100644 FineUI.Examples/res/icon/flower_daisy.png create mode 100644 FineUI.Examples/res/icon/folder.png create mode 100644 FineUI.Examples/res/icon/folder_add.png create mode 100644 FineUI.Examples/res/icon/folder_bell.png create mode 100644 FineUI.Examples/res/icon/folder_bookmark.png create mode 100644 FineUI.Examples/res/icon/folder_brick.png create mode 100644 FineUI.Examples/res/icon/folder_bug.png create mode 100644 FineUI.Examples/res/icon/folder_camera.png create mode 100644 FineUI.Examples/res/icon/folder_connect.png create mode 100644 FineUI.Examples/res/icon/folder_database.png create mode 100644 FineUI.Examples/res/icon/folder_delete.png create mode 100644 FineUI.Examples/res/icon/folder_edit.png create mode 100644 FineUI.Examples/res/icon/folder_error.png create mode 100644 FineUI.Examples/res/icon/folder_explore.png create mode 100644 FineUI.Examples/res/icon/folder_feed.png create mode 100644 FineUI.Examples/res/icon/folder_film.png create mode 100644 FineUI.Examples/res/icon/folder_find.png create mode 100644 FineUI.Examples/res/icon/folder_font.png create mode 100644 FineUI.Examples/res/icon/folder_go.png create mode 100644 FineUI.Examples/res/icon/folder_heart.png create mode 100644 FineUI.Examples/res/icon/folder_home.png create mode 100644 FineUI.Examples/res/icon/folder_image.png create mode 100644 FineUI.Examples/res/icon/folder_key.png create mode 100644 FineUI.Examples/res/icon/folder_lightbulb.png create mode 100644 FineUI.Examples/res/icon/folder_link.png create mode 100644 FineUI.Examples/res/icon/folder_magnify.png create mode 100644 FineUI.Examples/res/icon/folder_page.png create mode 100644 FineUI.Examples/res/icon/folder_page_white.png create mode 100644 FineUI.Examples/res/icon/folder_palette.png create mode 100644 FineUI.Examples/res/icon/folder_picture.png create mode 100644 FineUI.Examples/res/icon/folder_star.png create mode 100644 FineUI.Examples/res/icon/folder_table.png create mode 100644 FineUI.Examples/res/icon/folder_up.png create mode 100644 FineUI.Examples/res/icon/folder_user.png create mode 100644 FineUI.Examples/res/icon/folder_wrench.png create mode 100644 FineUI.Examples/res/icon/font.png create mode 100644 FineUI.Examples/res/icon/font_add.png create mode 100644 FineUI.Examples/res/icon/font_color.png create mode 100644 FineUI.Examples/res/icon/font_delete.png create mode 100644 FineUI.Examples/res/icon/font_go.png create mode 100644 FineUI.Examples/res/icon/font_larger.png create mode 100644 FineUI.Examples/res/icon/font_smaller.png create mode 100644 FineUI.Examples/res/icon/forward_blue.png create mode 100644 FineUI.Examples/res/icon/forward_green.png create mode 100644 FineUI.Examples/res/icon/group.png create mode 100644 FineUI.Examples/res/icon/group_add.png create mode 100644 FineUI.Examples/res/icon/group_delete.png create mode 100644 FineUI.Examples/res/icon/group_edit.png create mode 100644 FineUI.Examples/res/icon/group_error.png create mode 100644 FineUI.Examples/res/icon/group_gear.png create mode 100644 FineUI.Examples/res/icon/group_go.png create mode 100644 FineUI.Examples/res/icon/group_key.png create mode 100644 FineUI.Examples/res/icon/group_link.png create mode 100644 FineUI.Examples/res/icon/heart.png create mode 100644 FineUI.Examples/res/icon/heart_add.png create mode 100644 FineUI.Examples/res/icon/heart_broken.png create mode 100644 FineUI.Examples/res/icon/heart_connect.png create mode 100644 FineUI.Examples/res/icon/heart_delete.png create mode 100644 FineUI.Examples/res/icon/help.png create mode 100644 FineUI.Examples/res/icon/hourglass.png create mode 100644 FineUI.Examples/res/icon/hourglass_add.png create mode 100644 FineUI.Examples/res/icon/hourglass_delete.png create mode 100644 FineUI.Examples/res/icon/hourglass_go.png create mode 100644 FineUI.Examples/res/icon/hourglass_link.png create mode 100644 FineUI.Examples/res/icon/house.png create mode 100644 FineUI.Examples/res/icon/house_connect.png create mode 100644 FineUI.Examples/res/icon/house_go.png create mode 100644 FineUI.Examples/res/icon/house_key.png create mode 100644 FineUI.Examples/res/icon/house_link.png create mode 100644 FineUI.Examples/res/icon/house_star.png create mode 100644 FineUI.Examples/res/icon/html.png create mode 100644 FineUI.Examples/res/icon/html_add.png create mode 100644 FineUI.Examples/res/icon/html_delete.png create mode 100644 FineUI.Examples/res/icon/html_error.png create mode 100644 FineUI.Examples/res/icon/html_go.png create mode 100644 FineUI.Examples/res/icon/html_valid.png create mode 100644 FineUI.Examples/res/icon/image.png create mode 100644 FineUI.Examples/res/icon/image_add.png create mode 100644 FineUI.Examples/res/icon/image_delete.png create mode 100644 FineUI.Examples/res/icon/image_edit.png create mode 100644 FineUI.Examples/res/icon/image_link.png create mode 100644 FineUI.Examples/res/icon/image_magnify.png create mode 100644 FineUI.Examples/res/icon/image_star.png create mode 100644 FineUI.Examples/res/icon/images.png create mode 100644 FineUI.Examples/res/icon/information.png create mode 100644 FineUI.Examples/res/icon/ipod.png create mode 100644 FineUI.Examples/res/icon/ipod_cast.png create mode 100644 FineUI.Examples/res/icon/ipod_cast_add.png create mode 100644 FineUI.Examples/res/icon/ipod_cast_delete.png create mode 100644 FineUI.Examples/res/icon/ipod_connect.png create mode 100644 FineUI.Examples/res/icon/ipod_nano.png create mode 100644 FineUI.Examples/res/icon/ipod_nano_connect.png create mode 100644 FineUI.Examples/res/icon/ipod_sound.png create mode 100644 FineUI.Examples/res/icon/joystick.png create mode 100644 FineUI.Examples/res/icon/joystick_add.png create mode 100644 FineUI.Examples/res/icon/joystick_connect.png create mode 100644 FineUI.Examples/res/icon/joystick_delete.png create mode 100644 FineUI.Examples/res/icon/joystick_error.png create mode 100644 FineUI.Examples/res/icon/key.png create mode 100644 FineUI.Examples/res/icon/key_add.png create mode 100644 FineUI.Examples/res/icon/key_delete.png create mode 100644 FineUI.Examples/res/icon/key_go.png create mode 100644 FineUI.Examples/res/icon/key_start.png create mode 100644 FineUI.Examples/res/icon/key_stop.png create mode 100644 FineUI.Examples/res/icon/keyboard.png create mode 100644 FineUI.Examples/res/icon/keyboard_add.png create mode 100644 FineUI.Examples/res/icon/keyboard_connect.png create mode 100644 FineUI.Examples/res/icon/keyboard_delete.png create mode 100644 FineUI.Examples/res/icon/keyboard_magnify.png create mode 100644 FineUI.Examples/res/icon/laptop.png create mode 100644 FineUI.Examples/res/icon/laptop_add.png create mode 100644 FineUI.Examples/res/icon/laptop_connect.png create mode 100644 FineUI.Examples/res/icon/laptop_delete.png create mode 100644 FineUI.Examples/res/icon/laptop_disk.png create mode 100644 FineUI.Examples/res/icon/laptop_edit.png create mode 100644 FineUI.Examples/res/icon/laptop_error.png create mode 100644 FineUI.Examples/res/icon/laptop_go.png create mode 100644 FineUI.Examples/res/icon/laptop_key.png create mode 100644 FineUI.Examples/res/icon/laptop_link.png create mode 100644 FineUI.Examples/res/icon/laptop_magnify.png create mode 100644 FineUI.Examples/res/icon/laptop_start.png create mode 100644 FineUI.Examples/res/icon/laptop_stop.png create mode 100644 FineUI.Examples/res/icon/laptop_wrench.png create mode 100644 FineUI.Examples/res/icon/layers.png create mode 100644 FineUI.Examples/res/icon/layout.png create mode 100644 FineUI.Examples/res/icon/layout_add.png create mode 100644 FineUI.Examples/res/icon/layout_content.png create mode 100644 FineUI.Examples/res/icon/layout_delete.png create mode 100644 FineUI.Examples/res/icon/layout_edit.png create mode 100644 FineUI.Examples/res/icon/layout_error.png create mode 100644 FineUI.Examples/res/icon/layout_header.png create mode 100644 FineUI.Examples/res/icon/layout_key.png create mode 100644 FineUI.Examples/res/icon/layout_lightning.png create mode 100644 FineUI.Examples/res/icon/layout_link.png create mode 100644 FineUI.Examples/res/icon/layout_sidebar.png create mode 100644 FineUI.Examples/res/icon/lightbulb.png create mode 100644 FineUI.Examples/res/icon/lightbulb_add.png create mode 100644 FineUI.Examples/res/icon/lightbulb_delete.png create mode 100644 FineUI.Examples/res/icon/lightbulb_off.png create mode 100644 FineUI.Examples/res/icon/lightning.png create mode 100644 FineUI.Examples/res/icon/lightning_add.png create mode 100644 FineUI.Examples/res/icon/lightning_delete.png create mode 100644 FineUI.Examples/res/icon/lightning_go.png create mode 100644 FineUI.Examples/res/icon/link.png create mode 100644 FineUI.Examples/res/icon/link_add.png create mode 100644 FineUI.Examples/res/icon/link_break.png create mode 100644 FineUI.Examples/res/icon/link_delete.png create mode 100644 FineUI.Examples/res/icon/link_edit.png create mode 100644 FineUI.Examples/res/icon/link_error.png create mode 100644 FineUI.Examples/res/icon/link_go.png create mode 100644 FineUI.Examples/res/icon/lock.png create mode 100644 FineUI.Examples/res/icon/lock_add.png create mode 100644 FineUI.Examples/res/icon/lock_break.png create mode 100644 FineUI.Examples/res/icon/lock_delete.png create mode 100644 FineUI.Examples/res/icon/lock_edit.png create mode 100644 FineUI.Examples/res/icon/lock_go.png create mode 100644 FineUI.Examples/res/icon/lock_key.png create mode 100644 FineUI.Examples/res/icon/lock_open.png create mode 100644 FineUI.Examples/res/icon/lock_start.png create mode 100644 FineUI.Examples/res/icon/lock_stop.png create mode 100644 FineUI.Examples/res/icon/lorry.png create mode 100644 FineUI.Examples/res/icon/lorry_add.png create mode 100644 FineUI.Examples/res/icon/lorry_delete.png create mode 100644 FineUI.Examples/res/icon/lorry_error.png create mode 100644 FineUI.Examples/res/icon/lorry_flatbed.png create mode 100644 FineUI.Examples/res/icon/lorry_go.png create mode 100644 FineUI.Examples/res/icon/lorry_link.png create mode 100644 FineUI.Examples/res/icon/lorry_start.png create mode 100644 FineUI.Examples/res/icon/lorry_stop.png create mode 100644 FineUI.Examples/res/icon/magifier_zoom_out.png create mode 100644 FineUI.Examples/res/icon/magnifier.png create mode 100644 FineUI.Examples/res/icon/magnifier_zoom_in.png create mode 100644 FineUI.Examples/res/icon/mail.png create mode 100644 FineUI.Examples/res/icon/male.png create mode 100644 FineUI.Examples/res/icon/map.png create mode 100644 FineUI.Examples/res/icon/map_add.png create mode 100644 FineUI.Examples/res/icon/map_clipboard.png create mode 100644 FineUI.Examples/res/icon/map_cursor.png create mode 100644 FineUI.Examples/res/icon/map_delete.png create mode 100644 FineUI.Examples/res/icon/map_edit.png create mode 100644 FineUI.Examples/res/icon/map_error.png create mode 100644 FineUI.Examples/res/icon/map_go.png create mode 100644 FineUI.Examples/res/icon/map_link.png create mode 100644 FineUI.Examples/res/icon/map_magnify.png create mode 100644 FineUI.Examples/res/icon/map_start.png create mode 100644 FineUI.Examples/res/icon/map_stop.png create mode 100644 FineUI.Examples/res/icon/medal_bronze_1.png create mode 100644 FineUI.Examples/res/icon/medal_bronze_2.png create mode 100644 FineUI.Examples/res/icon/medal_bronze_3.png create mode 100644 FineUI.Examples/res/icon/medal_bronze_add.png create mode 100644 FineUI.Examples/res/icon/medal_bronze_delete.png create mode 100644 FineUI.Examples/res/icon/medal_gold_1.png create mode 100644 FineUI.Examples/res/icon/medal_gold_2.png create mode 100644 FineUI.Examples/res/icon/medal_gold_3.png create mode 100644 FineUI.Examples/res/icon/medal_gold_add.png create mode 100644 FineUI.Examples/res/icon/medal_gold_delete.png create mode 100644 FineUI.Examples/res/icon/medal_silver_1.png create mode 100644 FineUI.Examples/res/icon/medal_silver_2.png create mode 100644 FineUI.Examples/res/icon/medal_silver_3.png create mode 100644 FineUI.Examples/res/icon/medal_silver_add.png create mode 100644 FineUI.Examples/res/icon/medal_silver_delete.png create mode 100644 FineUI.Examples/res/icon/money.png create mode 100644 FineUI.Examples/res/icon/money_add.png create mode 100644 FineUI.Examples/res/icon/money_delete.png create mode 100644 FineUI.Examples/res/icon/money_dollar.png create mode 100644 FineUI.Examples/res/icon/money_euro.png create mode 100644 FineUI.Examples/res/icon/money_pound.png create mode 100644 FineUI.Examples/res/icon/money_yen.png create mode 100644 FineUI.Examples/res/icon/monitor.png create mode 100644 FineUI.Examples/res/icon/monitor_add.png create mode 100644 FineUI.Examples/res/icon/monitor_delete.png create mode 100644 FineUI.Examples/res/icon/monitor_edit.png create mode 100644 FineUI.Examples/res/icon/monitor_error.png create mode 100644 FineUI.Examples/res/icon/monitor_go.png create mode 100644 FineUI.Examples/res/icon/monitor_key.png create mode 100644 FineUI.Examples/res/icon/monitor_lightning.png create mode 100644 FineUI.Examples/res/icon/monitor_link.png create mode 100644 FineUI.Examples/res/icon/moon_full.png create mode 100644 FineUI.Examples/res/icon/mouse.png create mode 100644 FineUI.Examples/res/icon/mouse_add.png create mode 100644 FineUI.Examples/res/icon/mouse_delete.png create mode 100644 FineUI.Examples/res/icon/mouse_error.png create mode 100644 FineUI.Examples/res/icon/music.png create mode 100644 FineUI.Examples/res/icon/music_note.png create mode 100644 FineUI.Examples/res/icon/neighbourhood.png create mode 100644 FineUI.Examples/res/icon/new.png create mode 100644 FineUI.Examples/res/icon/new_blue.png create mode 100644 FineUI.Examples/res/icon/new_red.png create mode 100644 FineUI.Examples/res/icon/newspaper.png create mode 100644 FineUI.Examples/res/icon/newspaper_add.png create mode 100644 FineUI.Examples/res/icon/newspaper_delete.png create mode 100644 FineUI.Examples/res/icon/newspaper_go.png create mode 100644 FineUI.Examples/res/icon/newspaper_link.png create mode 100644 FineUI.Examples/res/icon/next_blue.png create mode 100644 FineUI.Examples/res/icon/next_green.png create mode 100644 FineUI.Examples/res/icon/note.png create mode 100644 FineUI.Examples/res/icon/note_add.png create mode 100644 FineUI.Examples/res/icon/note_delete.png create mode 100644 FineUI.Examples/res/icon/note_edit.png create mode 100644 FineUI.Examples/res/icon/note_error.png create mode 100644 FineUI.Examples/res/icon/note_go.png create mode 100644 FineUI.Examples/res/icon/outline.png create mode 100644 FineUI.Examples/res/icon/overlays.png create mode 100644 FineUI.Examples/res/icon/package.png create mode 100644 FineUI.Examples/res/icon/package_add.png create mode 100644 FineUI.Examples/res/icon/package_delete.png create mode 100644 FineUI.Examples/res/icon/package_down.png create mode 100644 FineUI.Examples/res/icon/package_go.png create mode 100644 FineUI.Examples/res/icon/package_green.png create mode 100644 FineUI.Examples/res/icon/package_in.png create mode 100644 FineUI.Examples/res/icon/package_link.png create mode 100644 FineUI.Examples/res/icon/package_se.png create mode 100644 FineUI.Examples/res/icon/package_start.png create mode 100644 FineUI.Examples/res/icon/package_stop.png create mode 100644 FineUI.Examples/res/icon/package_white.png create mode 100644 FineUI.Examples/res/icon/page.png create mode 100644 FineUI.Examples/res/icon/page_add.png create mode 100644 FineUI.Examples/res/icon/page_attach.png create mode 100644 FineUI.Examples/res/icon/page_back.png create mode 100644 FineUI.Examples/res/icon/page_break.png create mode 100644 FineUI.Examples/res/icon/page_break_insert.png create mode 100644 FineUI.Examples/res/icon/page_cancel.png create mode 100644 FineUI.Examples/res/icon/page_code.png create mode 100644 FineUI.Examples/res/icon/page_copy.png create mode 100644 FineUI.Examples/res/icon/page_delete.png create mode 100644 FineUI.Examples/res/icon/page_edit.png create mode 100644 FineUI.Examples/res/icon/page_error.png create mode 100644 FineUI.Examples/res/icon/page_excel.png create mode 100644 FineUI.Examples/res/icon/page_find.png create mode 100644 FineUI.Examples/res/icon/page_forward.png create mode 100644 FineUI.Examples/res/icon/page_gear.png create mode 100644 FineUI.Examples/res/icon/page_go.png create mode 100644 FineUI.Examples/res/icon/page_green.png create mode 100644 FineUI.Examples/res/icon/page_header_footer.png create mode 100644 FineUI.Examples/res/icon/page_key.png create mode 100644 FineUI.Examples/res/icon/page_landscape.png create mode 100644 FineUI.Examples/res/icon/page_landscape_shot.png create mode 100644 FineUI.Examples/res/icon/page_lightning.png create mode 100644 FineUI.Examples/res/icon/page_link.png create mode 100644 FineUI.Examples/res/icon/page_magnify.png create mode 100644 FineUI.Examples/res/icon/page_paintbrush.png create mode 100644 FineUI.Examples/res/icon/page_paste.png create mode 100644 FineUI.Examples/res/icon/page_portrait.png create mode 100644 FineUI.Examples/res/icon/page_portrait_shot.png create mode 100644 FineUI.Examples/res/icon/page_red.png create mode 100644 FineUI.Examples/res/icon/page_refresh.png create mode 100644 FineUI.Examples/res/icon/page_save.png create mode 100644 FineUI.Examples/res/icon/page_white.png create mode 100644 FineUI.Examples/res/icon/page_white_acrobat.png create mode 100644 FineUI.Examples/res/icon/page_white_actionscript.png create mode 100644 FineUI.Examples/res/icon/page_white_add.png create mode 100644 FineUI.Examples/res/icon/page_white_break.png create mode 100644 FineUI.Examples/res/icon/page_white_c.png create mode 100644 FineUI.Examples/res/icon/page_white_camera.png create mode 100644 FineUI.Examples/res/icon/page_white_cd.png create mode 100644 FineUI.Examples/res/icon/page_white_cdr.png create mode 100644 FineUI.Examples/res/icon/page_white_code.png create mode 100644 FineUI.Examples/res/icon/page_white_code_red.png create mode 100644 FineUI.Examples/res/icon/page_white_coldfusion.png create mode 100644 FineUI.Examples/res/icon/page_white_compressed.png create mode 100644 FineUI.Examples/res/icon/page_white_connect.png create mode 100644 FineUI.Examples/res/icon/page_white_copy.png create mode 100644 FineUI.Examples/res/icon/page_white_cplusplus.png create mode 100644 FineUI.Examples/res/icon/page_white_csharp.png create mode 100644 FineUI.Examples/res/icon/page_white_cup.png create mode 100644 FineUI.Examples/res/icon/page_white_database.png create mode 100644 FineUI.Examples/res/icon/page_white_database_yellow.png create mode 100644 FineUI.Examples/res/icon/page_white_delete.png create mode 100644 FineUI.Examples/res/icon/page_white_dvd.png create mode 100644 FineUI.Examples/res/icon/page_white_edit.png create mode 100644 FineUI.Examples/res/icon/page_white_error.png create mode 100644 FineUI.Examples/res/icon/page_white_excel.png create mode 100644 FineUI.Examples/res/icon/page_white_find.png create mode 100644 FineUI.Examples/res/icon/page_white_flash.png create mode 100644 FineUI.Examples/res/icon/page_white_font.png create mode 100644 FineUI.Examples/res/icon/page_white_freehand.png create mode 100644 FineUI.Examples/res/icon/page_white_gear.png create mode 100644 FineUI.Examples/res/icon/page_white_get.png create mode 100644 FineUI.Examples/res/icon/page_white_go.png create mode 100644 FineUI.Examples/res/icon/page_white_h.png create mode 100644 FineUI.Examples/res/icon/page_white_horizontal.png create mode 100644 FineUI.Examples/res/icon/page_white_key.png create mode 100644 FineUI.Examples/res/icon/page_white_lightning.png create mode 100644 FineUI.Examples/res/icon/page_white_link.png create mode 100644 FineUI.Examples/res/icon/page_white_magnify.png create mode 100644 FineUI.Examples/res/icon/page_white_medal.png create mode 100644 FineUI.Examples/res/icon/page_white_office.png create mode 100644 FineUI.Examples/res/icon/page_white_paint.png create mode 100644 FineUI.Examples/res/icon/page_white_paint_2.png create mode 100644 FineUI.Examples/res/icon/page_white_paintbrush.png create mode 100644 FineUI.Examples/res/icon/page_white_paste.png create mode 100644 FineUI.Examples/res/icon/page_white_paste_table.png create mode 100644 FineUI.Examples/res/icon/page_white_php.png create mode 100644 FineUI.Examples/res/icon/page_white_picture.png create mode 100644 FineUI.Examples/res/icon/page_white_powerpoint.png create mode 100644 FineUI.Examples/res/icon/page_white_put.png create mode 100644 FineUI.Examples/res/icon/page_white_refresh.png create mode 100644 FineUI.Examples/res/icon/page_white_ruby.png create mode 100644 FineUI.Examples/res/icon/page_white_side_by_side.png create mode 100644 FineUI.Examples/res/icon/page_white_stack.png create mode 100644 FineUI.Examples/res/icon/page_white_star.png create mode 100644 FineUI.Examples/res/icon/page_white_swoosh.png create mode 100644 FineUI.Examples/res/icon/page_white_text.png create mode 100644 FineUI.Examples/res/icon/page_white_text_width.png create mode 100644 FineUI.Examples/res/icon/page_white_tux.png create mode 100644 FineUI.Examples/res/icon/page_white_vector.png create mode 100644 FineUI.Examples/res/icon/page_white_visualstudio.png create mode 100644 FineUI.Examples/res/icon/page_white_width.png create mode 100644 FineUI.Examples/res/icon/page_white_word.png create mode 100644 FineUI.Examples/res/icon/page_white_world.png create mode 100644 FineUI.Examples/res/icon/page_white_wrench.png create mode 100644 FineUI.Examples/res/icon/page_white_zip.png create mode 100644 FineUI.Examples/res/icon/page_word.png create mode 100644 FineUI.Examples/res/icon/page_world.png create mode 100644 FineUI.Examples/res/icon/paint.png create mode 100644 FineUI.Examples/res/icon/paint_can_brush.png create mode 100644 FineUI.Examples/res/icon/paintbrush.png create mode 100644 FineUI.Examples/res/icon/paintbrush_color.png create mode 100644 FineUI.Examples/res/icon/paintcan.png create mode 100644 FineUI.Examples/res/icon/paintcan_red.png create mode 100644 FineUI.Examples/res/icon/palette.png create mode 100644 FineUI.Examples/res/icon/paste_plain.png create mode 100644 FineUI.Examples/res/icon/paste_word.png create mode 100644 FineUI.Examples/res/icon/pause_blue.png create mode 100644 FineUI.Examples/res/icon/pause_green.png create mode 100644 FineUI.Examples/res/icon/pause_record.png create mode 100644 FineUI.Examples/res/icon/pencil.png create mode 100644 FineUI.Examples/res/icon/pencil_add.png create mode 100644 FineUI.Examples/res/icon/pencil_delete.png create mode 100644 FineUI.Examples/res/icon/pencil_go.png create mode 100644 FineUI.Examples/res/icon/phone.png create mode 100644 FineUI.Examples/res/icon/phone_add.png create mode 100644 FineUI.Examples/res/icon/phone_delete.png create mode 100644 FineUI.Examples/res/icon/phone_edit.png create mode 100644 FineUI.Examples/res/icon/phone_error.png create mode 100644 FineUI.Examples/res/icon/phone_go.png create mode 100644 FineUI.Examples/res/icon/phone_key.png create mode 100644 FineUI.Examples/res/icon/phone_link.png create mode 100644 FineUI.Examples/res/icon/phone_sound.png create mode 100644 FineUI.Examples/res/icon/phone_start.png create mode 100644 FineUI.Examples/res/icon/phone_stop.png create mode 100644 FineUI.Examples/res/icon/photo.png create mode 100644 FineUI.Examples/res/icon/photo_add.png create mode 100644 FineUI.Examples/res/icon/photo_delete.png create mode 100644 FineUI.Examples/res/icon/photo_edit.png create mode 100644 FineUI.Examples/res/icon/photo_link.png create mode 100644 FineUI.Examples/res/icon/photo_paint.png create mode 100644 FineUI.Examples/res/icon/photos.png create mode 100644 FineUI.Examples/res/icon/picture.png create mode 100644 FineUI.Examples/res/icon/picture_add.png create mode 100644 FineUI.Examples/res/icon/picture_clipboard.png create mode 100644 FineUI.Examples/res/icon/picture_delete.png create mode 100644 FineUI.Examples/res/icon/picture_edit.png create mode 100644 FineUI.Examples/res/icon/picture_empty.png create mode 100644 FineUI.Examples/res/icon/picture_error.png create mode 100644 FineUI.Examples/res/icon/picture_go.png create mode 100644 FineUI.Examples/res/icon/picture_key.png create mode 100644 FineUI.Examples/res/icon/picture_link.png create mode 100644 FineUI.Examples/res/icon/picture_save.png create mode 100644 FineUI.Examples/res/icon/pictures.png create mode 100644 FineUI.Examples/res/icon/pictures_thumbs.png create mode 100644 FineUI.Examples/res/icon/pilcrow.png create mode 100644 FineUI.Examples/res/icon/pill.png create mode 100644 FineUI.Examples/res/icon/pill_add.png create mode 100644 FineUI.Examples/res/icon/pill_delete.png create mode 100644 FineUI.Examples/res/icon/pill_error.png create mode 100644 FineUI.Examples/res/icon/pill_go.png create mode 100644 FineUI.Examples/res/icon/play_blue.png create mode 100644 FineUI.Examples/res/icon/play_green.png create mode 100644 FineUI.Examples/res/icon/plugin.png create mode 100644 FineUI.Examples/res/icon/plugin_add.png create mode 100644 FineUI.Examples/res/icon/plugin_delete.png create mode 100644 FineUI.Examples/res/icon/plugin_disabled.png create mode 100644 FineUI.Examples/res/icon/plugin_edit.png create mode 100644 FineUI.Examples/res/icon/plugin_error.png create mode 100644 FineUI.Examples/res/icon/plugin_go.png create mode 100644 FineUI.Examples/res/icon/plugin_key.png create mode 100644 FineUI.Examples/res/icon/plugin_link.png create mode 100644 FineUI.Examples/res/icon/previous_green.png create mode 100644 FineUI.Examples/res/icon/printer.png create mode 100644 FineUI.Examples/res/icon/printer_add.png create mode 100644 FineUI.Examples/res/icon/printer_cancel.png create mode 100644 FineUI.Examples/res/icon/printer_color.png create mode 100644 FineUI.Examples/res/icon/printer_connect.png create mode 100644 FineUI.Examples/res/icon/printer_delete.png create mode 100644 FineUI.Examples/res/icon/printer_empty.png create mode 100644 FineUI.Examples/res/icon/printer_error.png create mode 100644 FineUI.Examples/res/icon/printer_go.png create mode 100644 FineUI.Examples/res/icon/printer_key.png create mode 100644 FineUI.Examples/res/icon/printer_mono.png create mode 100644 FineUI.Examples/res/icon/printer_start.png create mode 100644 FineUI.Examples/res/icon/printer_stop.png create mode 100644 FineUI.Examples/res/icon/rainbow.png create mode 100644 FineUI.Examples/res/icon/rainbow_star.png create mode 100644 FineUI.Examples/res/icon/record_blue.png create mode 100644 FineUI.Examples/res/icon/record_green.png create mode 100644 FineUI.Examples/res/icon/record_red.png create mode 100644 FineUI.Examples/res/icon/reload.png create mode 100644 FineUI.Examples/res/icon/report.png create mode 100644 FineUI.Examples/res/icon/report_add.png create mode 100644 FineUI.Examples/res/icon/report_delete.png create mode 100644 FineUI.Examples/res/icon/report_disk.png create mode 100644 FineUI.Examples/res/icon/report_edit.png create mode 100644 FineUI.Examples/res/icon/report_go.png create mode 100644 FineUI.Examples/res/icon/report_key.png create mode 100644 FineUI.Examples/res/icon/report_link.png create mode 100644 FineUI.Examples/res/icon/report_magnify.png create mode 100644 FineUI.Examples/res/icon/report_picture.png create mode 100644 FineUI.Examples/res/icon/report_start.png create mode 100644 FineUI.Examples/res/icon/report_stop.png create mode 100644 FineUI.Examples/res/icon/report_user.png create mode 100644 FineUI.Examples/res/icon/report_word.png create mode 100644 FineUI.Examples/res/icon/resultset_first.png create mode 100644 FineUI.Examples/res/icon/resultset_last.png create mode 100644 FineUI.Examples/res/icon/resultset_next.png create mode 100644 FineUI.Examples/res/icon/resultset_previous.png create mode 100644 FineUI.Examples/res/icon/reverse_blue.png create mode 100644 FineUI.Examples/res/icon/reverse_green.png create mode 100644 FineUI.Examples/res/icon/rewind_blue.png create mode 100644 FineUI.Examples/res/icon/rewind_green.png create mode 100644 FineUI.Examples/res/icon/rgb.png create mode 100644 FineUI.Examples/res/icon/rosette.png create mode 100644 FineUI.Examples/res/icon/rosette_blue.png create mode 100644 FineUI.Examples/res/icon/rss.png create mode 100644 FineUI.Examples/res/icon/rss_add.png create mode 100644 FineUI.Examples/res/icon/rss_delete.png create mode 100644 FineUI.Examples/res/icon/rss_error.png create mode 100644 FineUI.Examples/res/icon/rss_go.png create mode 100644 FineUI.Examples/res/icon/rss_valid.png create mode 100644 FineUI.Examples/res/icon/ruby.png create mode 100644 FineUI.Examples/res/icon/ruby_add.png create mode 100644 FineUI.Examples/res/icon/ruby_delete.png create mode 100644 FineUI.Examples/res/icon/ruby_gear.png create mode 100644 FineUI.Examples/res/icon/ruby_get.png create mode 100644 FineUI.Examples/res/icon/ruby_go.png create mode 100644 FineUI.Examples/res/icon/ruby_key.png create mode 100644 FineUI.Examples/res/icon/ruby_link.png create mode 100644 FineUI.Examples/res/icon/ruby_put.png create mode 100644 FineUI.Examples/res/icon/script.png create mode 100644 FineUI.Examples/res/icon/script_add.png create mode 100644 FineUI.Examples/res/icon/script_code.png create mode 100644 FineUI.Examples/res/icon/script_code_original.png create mode 100644 FineUI.Examples/res/icon/script_code_red.png create mode 100644 FineUI.Examples/res/icon/script_delete.png create mode 100644 FineUI.Examples/res/icon/script_edit.png create mode 100644 FineUI.Examples/res/icon/script_error.png create mode 100644 FineUI.Examples/res/icon/script_gear.png create mode 100644 FineUI.Examples/res/icon/script_go.png create mode 100644 FineUI.Examples/res/icon/script_key.png create mode 100644 FineUI.Examples/res/icon/script_lightning.png create mode 100644 FineUI.Examples/res/icon/script_link.png create mode 100644 FineUI.Examples/res/icon/script_palette.png create mode 100644 FineUI.Examples/res/icon/script_save.png create mode 100644 FineUI.Examples/res/icon/script_start.png create mode 100644 FineUI.Examples/res/icon/script_stop.png create mode 100644 FineUI.Examples/res/icon/seasons.png create mode 100644 FineUI.Examples/res/icon/section_collapsed.png create mode 100644 FineUI.Examples/res/icon/section_expanded.png create mode 100644 FineUI.Examples/res/icon/server.png create mode 100644 FineUI.Examples/res/icon/server_add.png create mode 100644 FineUI.Examples/res/icon/server_chart.png create mode 100644 FineUI.Examples/res/icon/server_compressed.png create mode 100644 FineUI.Examples/res/icon/server_connect.png create mode 100644 FineUI.Examples/res/icon/server_database.png create mode 100644 FineUI.Examples/res/icon/server_delete.png create mode 100644 FineUI.Examples/res/icon/server_edit.png create mode 100644 FineUI.Examples/res/icon/server_error.png create mode 100644 FineUI.Examples/res/icon/server_go.png create mode 100644 FineUI.Examples/res/icon/server_key.png create mode 100644 FineUI.Examples/res/icon/server_lightning.png create mode 100644 FineUI.Examples/res/icon/server_link.png create mode 100644 FineUI.Examples/res/icon/server_start.png create mode 100644 FineUI.Examples/res/icon/server_stop.png create mode 100644 FineUI.Examples/res/icon/server_uncompressed.png create mode 100644 FineUI.Examples/res/icon/server_wrench.png create mode 100644 FineUI.Examples/res/icon/shading.png create mode 100644 FineUI.Examples/res/icon/shape_3d.png create mode 100644 FineUI.Examples/res/icon/shape_align_bottom.png create mode 100644 FineUI.Examples/res/icon/shape_align_center.png create mode 100644 FineUI.Examples/res/icon/shape_align_left.png create mode 100644 FineUI.Examples/res/icon/shape_align_middle.png create mode 100644 FineUI.Examples/res/icon/shape_align_right.png create mode 100644 FineUI.Examples/res/icon/shape_align_top.png create mode 100644 FineUI.Examples/res/icon/shape_flip_horizontal.png create mode 100644 FineUI.Examples/res/icon/shape_flip_vertical.png create mode 100644 FineUI.Examples/res/icon/shape_group.png create mode 100644 FineUI.Examples/res/icon/shape_handles.png create mode 100644 FineUI.Examples/res/icon/shape_move_back.png create mode 100644 FineUI.Examples/res/icon/shape_move_backwards.png create mode 100644 FineUI.Examples/res/icon/shape_move_forwards.png create mode 100644 FineUI.Examples/res/icon/shape_move_front.png create mode 100644 FineUI.Examples/res/icon/shape_rotate_anticlockwise.png create mode 100644 FineUI.Examples/res/icon/shape_rotate_clockwise.png create mode 100644 FineUI.Examples/res/icon/shape_shade_a.png create mode 100644 FineUI.Examples/res/icon/shape_shade_b.png create mode 100644 FineUI.Examples/res/icon/shape_shade_c.png create mode 100644 FineUI.Examples/res/icon/shape_shadow.png create mode 100644 FineUI.Examples/res/icon/shape_shadow_toggle.png create mode 100644 FineUI.Examples/res/icon/shape_square.png create mode 100644 FineUI.Examples/res/icon/shape_square_add.png create mode 100644 FineUI.Examples/res/icon/shape_square_delete.png create mode 100644 FineUI.Examples/res/icon/shape_square_edit.png create mode 100644 FineUI.Examples/res/icon/shape_square_error.png create mode 100644 FineUI.Examples/res/icon/shape_square_go.png create mode 100644 FineUI.Examples/res/icon/shape_square_key.png create mode 100644 FineUI.Examples/res/icon/shape_square_link.png create mode 100644 FineUI.Examples/res/icon/shape_square_select.png create mode 100644 FineUI.Examples/res/icon/shape_ungroup.png create mode 100644 FineUI.Examples/res/icon/shapes_many.png create mode 100644 FineUI.Examples/res/icon/shapes_many_select.png create mode 100644 FineUI.Examples/res/icon/share.png create mode 100644 FineUI.Examples/res/icon/shield.png create mode 100644 FineUI.Examples/res/icon/shield_add.png create mode 100644 FineUI.Examples/res/icon/shield_delete.png create mode 100644 FineUI.Examples/res/icon/shield_error.png create mode 100644 FineUI.Examples/res/icon/shield_go.png create mode 100644 FineUI.Examples/res/icon/shield_rainbow.png create mode 100644 FineUI.Examples/res/icon/shield_silver.png create mode 100644 FineUI.Examples/res/icon/shield_start.png create mode 100644 FineUI.Examples/res/icon/shield_stop.png create mode 100644 FineUI.Examples/res/icon/sitemap.png create mode 100644 FineUI.Examples/res/icon/sitemap_color.png create mode 100644 FineUI.Examples/res/icon/smartphone.png create mode 100644 FineUI.Examples/res/icon/smartphone_add.png create mode 100644 FineUI.Examples/res/icon/smartphone_connect.png create mode 100644 FineUI.Examples/res/icon/smartphone_delete.png create mode 100644 FineUI.Examples/res/icon/smartphone_disk.png create mode 100644 FineUI.Examples/res/icon/smartphone_edit.png create mode 100644 FineUI.Examples/res/icon/smartphone_error.png create mode 100644 FineUI.Examples/res/icon/smartphone_go.png create mode 100644 FineUI.Examples/res/icon/smartphone_key.png create mode 100644 FineUI.Examples/res/icon/smartphone_wrench.png create mode 100644 FineUI.Examples/res/icon/sort_ascending.png create mode 100644 FineUI.Examples/res/icon/sort_descending.png create mode 100644 FineUI.Examples/res/icon/sound.png create mode 100644 FineUI.Examples/res/icon/sound_add.png create mode 100644 FineUI.Examples/res/icon/sound_delete.png create mode 100644 FineUI.Examples/res/icon/sound_high.png create mode 100644 FineUI.Examples/res/icon/sound_in.png create mode 100644 FineUI.Examples/res/icon/sound_low.png create mode 100644 FineUI.Examples/res/icon/sound_mute.png create mode 100644 FineUI.Examples/res/icon/sound_none.png create mode 100644 FineUI.Examples/res/icon/sound_out.png create mode 100644 FineUI.Examples/res/icon/spellcheck.png create mode 100644 FineUI.Examples/res/icon/sport_8ball.png create mode 100644 FineUI.Examples/res/icon/sport_basketball.png create mode 100644 FineUI.Examples/res/icon/sport_football.png create mode 100644 FineUI.Examples/res/icon/sport_golf.png create mode 100644 FineUI.Examples/res/icon/sport_golf_practice.png create mode 100644 FineUI.Examples/res/icon/sport_raquet.png create mode 100644 FineUI.Examples/res/icon/sport_shuttlecock.png create mode 100644 FineUI.Examples/res/icon/sport_soccer.png create mode 100644 FineUI.Examples/res/icon/sport_tennis.png create mode 100644 FineUI.Examples/res/icon/star.png create mode 100644 FineUI.Examples/res/icon/star_bronze.png create mode 100644 FineUI.Examples/res/icon/star_bronze_half_grey.png create mode 100644 FineUI.Examples/res/icon/star_gold.png create mode 100644 FineUI.Examples/res/icon/star_gold_half_grey.png create mode 100644 FineUI.Examples/res/icon/star_gold_half_silver.png create mode 100644 FineUI.Examples/res/icon/star_grey.png create mode 100644 FineUI.Examples/res/icon/star_half_grey.png create mode 100644 FineUI.Examples/res/icon/star_silver.png create mode 100644 FineUI.Examples/res/icon/status_away.png create mode 100644 FineUI.Examples/res/icon/status_be_right_back.png create mode 100644 FineUI.Examples/res/icon/status_busy.png create mode 100644 FineUI.Examples/res/icon/status_invisible.png create mode 100644 FineUI.Examples/res/icon/status_offline.png create mode 100644 FineUI.Examples/res/icon/status_online.png create mode 100644 FineUI.Examples/res/icon/stop.png create mode 100644 FineUI.Examples/res/icon/stop_blue.png create mode 100644 FineUI.Examples/res/icon/stop_green.png create mode 100644 FineUI.Examples/res/icon/stop_red.png create mode 100644 FineUI.Examples/res/icon/style.png create mode 100644 FineUI.Examples/res/icon/style_add.png create mode 100644 FineUI.Examples/res/icon/style_delete.png create mode 100644 FineUI.Examples/res/icon/style_edit.png create mode 100644 FineUI.Examples/res/icon/style_go.png create mode 100644 FineUI.Examples/res/icon/sum.png create mode 100644 FineUI.Examples/res/icon/system_close.gif create mode 100644 FineUI.Examples/res/icon/system_new.gif create mode 100644 FineUI.Examples/res/icon/system_save.gif create mode 100644 FineUI.Examples/res/icon/system_saveclose.gif create mode 100644 FineUI.Examples/res/icon/system_savenew.gif create mode 100644 FineUI.Examples/res/icon/system_search.gif create mode 100644 FineUI.Examples/res/icon/tab.png create mode 100644 FineUI.Examples/res/icon/tab_add.png create mode 100644 FineUI.Examples/res/icon/tab_blue.png create mode 100644 FineUI.Examples/res/icon/tab_delete.png create mode 100644 FineUI.Examples/res/icon/tab_edit.png create mode 100644 FineUI.Examples/res/icon/tab_go.png create mode 100644 FineUI.Examples/res/icon/tab_green.png create mode 100644 FineUI.Examples/res/icon/tab_red.png create mode 100644 FineUI.Examples/res/icon/table.png create mode 100644 FineUI.Examples/res/icon/table_add.png create mode 100644 FineUI.Examples/res/icon/table_cell.png create mode 100644 FineUI.Examples/res/icon/table_column.png create mode 100644 FineUI.Examples/res/icon/table_column_add.png create mode 100644 FineUI.Examples/res/icon/table_column_delete.png create mode 100644 FineUI.Examples/res/icon/table_connect.png create mode 100644 FineUI.Examples/res/icon/table_delete.png create mode 100644 FineUI.Examples/res/icon/table_edit.png create mode 100644 FineUI.Examples/res/icon/table_error.png create mode 100644 FineUI.Examples/res/icon/table_gear.png create mode 100644 FineUI.Examples/res/icon/table_go.png create mode 100644 FineUI.Examples/res/icon/table_key.png create mode 100644 FineUI.Examples/res/icon/table_lightning.png create mode 100644 FineUI.Examples/res/icon/table_link.png create mode 100644 FineUI.Examples/res/icon/table_multiple.png create mode 100644 FineUI.Examples/res/icon/table_refresh.png create mode 100644 FineUI.Examples/res/icon/table_relationship.png create mode 100644 FineUI.Examples/res/icon/table_row.png create mode 100644 FineUI.Examples/res/icon/table_row_delete.png create mode 100644 FineUI.Examples/res/icon/table_row_insert.png create mode 100644 FineUI.Examples/res/icon/table_save.png create mode 100644 FineUI.Examples/res/icon/table_sort.png create mode 100644 FineUI.Examples/res/icon/tag.png create mode 100644 FineUI.Examples/res/icon/tag_blue.png create mode 100644 FineUI.Examples/res/icon/tag_blue_add.png create mode 100644 FineUI.Examples/res/icon/tag_blue_delete.png create mode 100644 FineUI.Examples/res/icon/tag_blue_edit.png create mode 100644 FineUI.Examples/res/icon/tag_green.png create mode 100644 FineUI.Examples/res/icon/tag_orange.png create mode 100644 FineUI.Examples/res/icon/tag_pink.png create mode 100644 FineUI.Examples/res/icon/tag_purple.png create mode 100644 FineUI.Examples/res/icon/tag_red.png create mode 100644 FineUI.Examples/res/icon/tag_yellow.png create mode 100644 FineUI.Examples/res/icon/tags_grey.png create mode 100644 FineUI.Examples/res/icon/tags_red.png create mode 100644 FineUI.Examples/res/icon/telephone.png create mode 100644 FineUI.Examples/res/icon/telephone_add.png create mode 100644 FineUI.Examples/res/icon/telephone_delete.png create mode 100644 FineUI.Examples/res/icon/telephone_edit.png create mode 100644 FineUI.Examples/res/icon/telephone_error.png create mode 100644 FineUI.Examples/res/icon/telephone_go.png create mode 100644 FineUI.Examples/res/icon/telephone_key.png create mode 100644 FineUI.Examples/res/icon/telephone_link.png create mode 100644 FineUI.Examples/res/icon/telephone_red.png create mode 100644 FineUI.Examples/res/icon/television.png create mode 100644 FineUI.Examples/res/icon/television_add.png create mode 100644 FineUI.Examples/res/icon/television_delete.png create mode 100644 FineUI.Examples/res/icon/television_in.png create mode 100644 FineUI.Examples/res/icon/television_off.png create mode 100644 FineUI.Examples/res/icon/television_out.png create mode 100644 FineUI.Examples/res/icon/television_star.png create mode 100644 FineUI.Examples/res/icon/text_ab.png create mode 100644 FineUI.Examples/res/icon/text_align_center.png create mode 100644 FineUI.Examples/res/icon/text_align_justify.png create mode 100644 FineUI.Examples/res/icon/text_align_left.png create mode 100644 FineUI.Examples/res/icon/text_align_right.png create mode 100644 FineUI.Examples/res/icon/text_allcaps.png create mode 100644 FineUI.Examples/res/icon/text_bold.png create mode 100644 FineUI.Examples/res/icon/text_columns.png create mode 100644 FineUI.Examples/res/icon/text_complete.png create mode 100644 FineUI.Examples/res/icon/text_direction.png create mode 100644 FineUI.Examples/res/icon/text_double_underline.png create mode 100644 FineUI.Examples/res/icon/text_dropcaps.png create mode 100644 FineUI.Examples/res/icon/text_fit.png create mode 100644 FineUI.Examples/res/icon/text_flip.png create mode 100644 FineUI.Examples/res/icon/text_font_default.png create mode 100644 FineUI.Examples/res/icon/text_heading_1.png create mode 100644 FineUI.Examples/res/icon/text_heading_2.png create mode 100644 FineUI.Examples/res/icon/text_heading_3.png create mode 100644 FineUI.Examples/res/icon/text_heading_4.png create mode 100644 FineUI.Examples/res/icon/text_heading_5.png create mode 100644 FineUI.Examples/res/icon/text_heading_6.png create mode 100644 FineUI.Examples/res/icon/text_horizontalrule.png create mode 100644 FineUI.Examples/res/icon/text_indent.png create mode 100644 FineUI.Examples/res/icon/text_indent_remove.png create mode 100644 FineUI.Examples/res/icon/text_inverse.png create mode 100644 FineUI.Examples/res/icon/text_italic.png create mode 100644 FineUI.Examples/res/icon/text_kerning.png create mode 100644 FineUI.Examples/res/icon/text_left_to_right.png create mode 100644 FineUI.Examples/res/icon/text_letter_omega.png create mode 100644 FineUI.Examples/res/icon/text_letterspacing.png create mode 100644 FineUI.Examples/res/icon/text_linespacing.png create mode 100644 FineUI.Examples/res/icon/text_list_bullets.png create mode 100644 FineUI.Examples/res/icon/text_list_numbers.png create mode 100644 FineUI.Examples/res/icon/text_lowercase.png create mode 100644 FineUI.Examples/res/icon/text_lowercase_a.png create mode 100644 FineUI.Examples/res/icon/text_mirror.png create mode 100644 FineUI.Examples/res/icon/text_padding_bottom.png create mode 100644 FineUI.Examples/res/icon/text_padding_left.png create mode 100644 FineUI.Examples/res/icon/text_padding_right.png create mode 100644 FineUI.Examples/res/icon/text_padding_top.png create mode 100644 FineUI.Examples/res/icon/text_replace.png create mode 100644 FineUI.Examples/res/icon/text_right_to_left.png create mode 100644 FineUI.Examples/res/icon/text_rotate_0.png create mode 100644 FineUI.Examples/res/icon/text_rotate_180.png create mode 100644 FineUI.Examples/res/icon/text_rotate_270.png create mode 100644 FineUI.Examples/res/icon/text_rotate_90.png create mode 100644 FineUI.Examples/res/icon/text_ruler.png create mode 100644 FineUI.Examples/res/icon/text_shading.png create mode 100644 FineUI.Examples/res/icon/text_signature.png create mode 100644 FineUI.Examples/res/icon/text_smallcaps.png create mode 100644 FineUI.Examples/res/icon/text_spelling.png create mode 100644 FineUI.Examples/res/icon/text_strikethrough.png create mode 100644 FineUI.Examples/res/icon/text_subscript.png create mode 100644 FineUI.Examples/res/icon/text_superscript.png create mode 100644 FineUI.Examples/res/icon/text_tab.png create mode 100644 FineUI.Examples/res/icon/text_underline.png create mode 100644 FineUI.Examples/res/icon/text_uppercase.png create mode 100644 FineUI.Examples/res/icon/textfield.png create mode 100644 FineUI.Examples/res/icon/textfield_add.png create mode 100644 FineUI.Examples/res/icon/textfield_delete.png create mode 100644 FineUI.Examples/res/icon/textfield_key.png create mode 100644 FineUI.Examples/res/icon/textfield_rename.png create mode 100644 FineUI.Examples/res/icon/theme.png create mode 100644 FineUI.Examples/res/icon/thumb_down.png create mode 100644 FineUI.Examples/res/icon/thumb_up.png create mode 100644 FineUI.Examples/res/icon/tick.png create mode 100644 FineUI.Examples/res/icon/time.png create mode 100644 FineUI.Examples/res/icon/time_add.png create mode 100644 FineUI.Examples/res/icon/time_delete.png create mode 100644 FineUI.Examples/res/icon/time_go.png create mode 100644 FineUI.Examples/res/icon/time_green.png create mode 100644 FineUI.Examples/res/icon/time_red.png create mode 100644 FineUI.Examples/res/icon/timeline_marker.png create mode 100644 FineUI.Examples/res/icon/transmit.png create mode 100644 FineUI.Examples/res/icon/transmit_add.png create mode 100644 FineUI.Examples/res/icon/transmit_blue.png create mode 100644 FineUI.Examples/res/icon/transmit_delete.png create mode 100644 FineUI.Examples/res/icon/transmit_edit.png create mode 100644 FineUI.Examples/res/icon/transmit_error.png create mode 100644 FineUI.Examples/res/icon/transmit_go.png create mode 100644 FineUI.Examples/res/icon/transmit_red.png create mode 100644 FineUI.Examples/res/icon/tux.png create mode 100644 FineUI.Examples/res/icon/user.png create mode 100644 FineUI.Examples/res/icon/user_add.png create mode 100644 FineUI.Examples/res/icon/user_alert.png create mode 100644 FineUI.Examples/res/icon/user_b.png create mode 100644 FineUI.Examples/res/icon/user_brown.png create mode 100644 FineUI.Examples/res/icon/user_comment.png create mode 100644 FineUI.Examples/res/icon/user_cross.png create mode 100644 FineUI.Examples/res/icon/user_delete.png create mode 100644 FineUI.Examples/res/icon/user_earth.png create mode 100644 FineUI.Examples/res/icon/user_edit.png create mode 100644 FineUI.Examples/res/icon/user_female.png create mode 100644 FineUI.Examples/res/icon/user_go.png create mode 100644 FineUI.Examples/res/icon/user_gray.png create mode 100644 FineUI.Examples/res/icon/user_gray_cool.png create mode 100644 FineUI.Examples/res/icon/user_green.png create mode 100644 FineUI.Examples/res/icon/user_home.png create mode 100644 FineUI.Examples/res/icon/user_key.png create mode 100644 FineUI.Examples/res/icon/user_magnify.png create mode 100644 FineUI.Examples/res/icon/user_mature.png create mode 100644 FineUI.Examples/res/icon/user_orange.png create mode 100644 FineUI.Examples/res/icon/user_red.png create mode 100644 FineUI.Examples/res/icon/user_star.png create mode 100644 FineUI.Examples/res/icon/user_suit.png create mode 100644 FineUI.Examples/res/icon/user_suit_black.png create mode 100644 FineUI.Examples/res/icon/user_tick.png create mode 100644 FineUI.Examples/res/icon/vcard.png create mode 100644 FineUI.Examples/res/icon/vcard_add.png create mode 100644 FineUI.Examples/res/icon/vcard_delete.png create mode 100644 FineUI.Examples/res/icon/vcard_edit.png create mode 100644 FineUI.Examples/res/icon/vcard_key.png create mode 100644 FineUI.Examples/res/icon/vector.png create mode 100644 FineUI.Examples/res/icon/vector_add.png create mode 100644 FineUI.Examples/res/icon/vector_delete.png create mode 100644 FineUI.Examples/res/icon/vector_key.png create mode 100644 FineUI.Examples/res/icon/wand.png create mode 100644 FineUI.Examples/res/icon/weather_cloud.png create mode 100644 FineUI.Examples/res/icon/weather_clouds.png create mode 100644 FineUI.Examples/res/icon/weather_cloudy.png create mode 100644 FineUI.Examples/res/icon/weather_cloudy_rain.png create mode 100644 FineUI.Examples/res/icon/weather_lightning.png create mode 100644 FineUI.Examples/res/icon/weather_rain.png create mode 100644 FineUI.Examples/res/icon/weather_snow.png create mode 100644 FineUI.Examples/res/icon/weather_sun.png create mode 100644 FineUI.Examples/res/icon/webcam.png create mode 100644 FineUI.Examples/res/icon/webcam_add.png create mode 100644 FineUI.Examples/res/icon/webcam_connect.png create mode 100644 FineUI.Examples/res/icon/webcam_delete.png create mode 100644 FineUI.Examples/res/icon/webcam_error.png create mode 100644 FineUI.Examples/res/icon/webcam_start.png create mode 100644 FineUI.Examples/res/icon/webcam_stop.png create mode 100644 FineUI.Examples/res/icon/world.png create mode 100644 FineUI.Examples/res/icon/world_add.png create mode 100644 FineUI.Examples/res/icon/world_connect.png create mode 100644 FineUI.Examples/res/icon/world_dawn.png create mode 100644 FineUI.Examples/res/icon/world_delete.png create mode 100644 FineUI.Examples/res/icon/world_edit.png create mode 100644 FineUI.Examples/res/icon/world_go.png create mode 100644 FineUI.Examples/res/icon/world_key.png create mode 100644 FineUI.Examples/res/icon/world_link.png create mode 100644 FineUI.Examples/res/icon/world_night.png create mode 100644 FineUI.Examples/res/icon/world_orbit.png create mode 100644 FineUI.Examples/res/icon/wrench.png create mode 100644 FineUI.Examples/res/icon/wrench_orange.png create mode 100644 FineUI.Examples/res/icon/xhtml.png create mode 100644 FineUI.Examples/res/icon/xhtml_add.png create mode 100644 FineUI.Examples/res/icon/xhtml_delete.png create mode 100644 FineUI.Examples/res/icon/xhtml_error.png create mode 100644 FineUI.Examples/res/icon/xhtml_go.png create mode 100644 FineUI.Examples/res/icon/xhtml_valid.png create mode 100644 FineUI.Examples/res/icon/zoom.png create mode 100644 FineUI.Examples/res/icon/zoom_in.png create mode 100644 FineUI.Examples/res/icon/zoom_out.png create mode 100644 FineUI.Examples/res/images/16/1.png create mode 100644 FineUI.Examples/res/images/16/10.png create mode 100644 FineUI.Examples/res/images/16/11.png create mode 100644 FineUI.Examples/res/images/16/12.png create mode 100644 FineUI.Examples/res/images/16/13.png create mode 100644 FineUI.Examples/res/images/16/14.png create mode 100644 FineUI.Examples/res/images/16/15.png create mode 100644 FineUI.Examples/res/images/16/16.png create mode 100644 FineUI.Examples/res/images/16/17.png create mode 100644 FineUI.Examples/res/images/16/18.png create mode 100644 FineUI.Examples/res/images/16/19.png create mode 100644 FineUI.Examples/res/images/16/2.png create mode 100644 FineUI.Examples/res/images/16/20.png create mode 100644 FineUI.Examples/res/images/16/21.png create mode 100644 FineUI.Examples/res/images/16/23.png create mode 100644 FineUI.Examples/res/images/16/24.png create mode 100644 FineUI.Examples/res/images/16/25.png create mode 100644 FineUI.Examples/res/images/16/3.png create mode 100644 FineUI.Examples/res/images/16/4.png create mode 100644 FineUI.Examples/res/images/16/5.png create mode 100644 FineUI.Examples/res/images/16/6.png create mode 100644 FineUI.Examples/res/images/16/7.png create mode 100644 FineUI.Examples/res/images/16/8.png create mode 100644 FineUI.Examples/res/images/16/9.png create mode 100644 FineUI.Examples/res/images/16/Thumbs.db create mode 100644 FineUI.Examples/res/images/Thumbs.db create mode 100644 FineUI.Examples/res/images/blank.png create mode 100644 FineUI.Examples/res/images/bs-docs-masthead-pattern.png create mode 100644 FineUI.Examples/res/images/china.gif create mode 100644 FineUI.Examples/res/images/class.gif create mode 100644 FineUI.Examples/res/images/cmp.gif create mode 100644 FineUI.Examples/res/images/code.gif create mode 100644 FineUI.Examples/res/images/collapse-all.gif create mode 100644 FineUI.Examples/res/images/comment.gif create mode 100644 FineUI.Examples/res/images/delete.png create mode 100644 FineUI.Examples/res/images/delete_disabled.png create mode 100644 FineUI.Examples/res/images/demo_pro.png create mode 100644 FineUI.Examples/res/images/diamond-black.gif create mode 100644 FineUI.Examples/res/images/enable_gzip_iis6_1.png create mode 100644 FineUI.Examples/res/images/enable_gzip_iis6_2.png create mode 100644 FineUI.Examples/res/images/enable_gzip_iis6_3.png create mode 100644 FineUI.Examples/res/images/enable_gzip_iis6_4.png create mode 100644 FineUI.Examples/res/images/enable_gzip_iis6_5.png create mode 100644 FineUI.Examples/res/images/expand-all.gif create mode 100644 FineUI.Examples/res/images/filetype/Thumbs.db create mode 100644 FineUI.Examples/res/images/filetype/vs_ascx.png create mode 100644 FineUI.Examples/res/images/filetype/vs_ashx.png create mode 100644 FineUI.Examples/res/images/filetype/vs_aspx.png create mode 100644 FineUI.Examples/res/images/filetype/vs_config.png create mode 100644 FineUI.Examples/res/images/filetype/vs_cs.png create mode 100644 FineUI.Examples/res/images/filetype/vs_css.png create mode 100644 FineUI.Examples/res/images/filetype/vs_htm.png create mode 100644 FineUI.Examples/res/images/filetype/vs_html.png create mode 100644 FineUI.Examples/res/images/filetype/vs_img.png create mode 100644 FineUI.Examples/res/images/filetype/vs_js.png create mode 100644 FineUI.Examples/res/images/filetype/vs_master.png create mode 100644 FineUI.Examples/res/images/filetype/vs_sitemap.png create mode 100644 FineUI.Examples/res/images/filetype/vs_txt.png create mode 100644 FineUI.Examples/res/images/filetype/vs_unknow.png create mode 100644 FineUI.Examples/res/images/filetype/vs_usercontrol.png create mode 100644 FineUI.Examples/res/images/filetype/vs_vb.png create mode 100644 FineUI.Examples/res/images/filetype/vs_xml.png create mode 100644 FineUI.Examples/res/images/formchangeconfirm.png create mode 100644 FineUI.Examples/res/images/ico_24_grsz.gif create mode 100644 FineUI.Examples/res/images/icons.gif create mode 100644 FineUI.Examples/res/images/loading/Thumbs.db create mode 100644 FineUI.Examples/res/images/loading/loading_24.gif create mode 100644 FineUI.Examples/res/images/loading/loading_25.gif create mode 100644 FineUI.Examples/res/images/loading/loading_32.gif create mode 100644 FineUI.Examples/res/images/loading/loading_32_2.gif create mode 100644 FineUI.Examples/res/images/loading/loading_42.gif create mode 100644 FineUI.Examples/res/images/loading/loading_50.gif create mode 100644 FineUI.Examples/res/images/login.png create mode 100644 FineUI.Examples/res/images/logo/Thumbs.db create mode 100644 FineUI.Examples/res/images/logo/favicon.gif create mode 100644 FineUI.Examples/res/images/logo/favicon.ico create mode 100644 FineUI.Examples/res/images/logo/favicon.png create mode 100644 FineUI.Examples/res/images/logo/logo.png create mode 100644 FineUI.Examples/res/images/logo/logo.psd create mode 100644 FineUI.Examples/res/images/logo/logo2.gif create mode 100644 FineUI.Examples/res/images/logo/logo3.png create mode 100644 FineUI.Examples/res/images/logo/logo3_old.gif create mode 100644 FineUI.Examples/res/images/logo/logo_127.psd create mode 100644 FineUI.Examples/res/images/logo/logo_old.gif create mode 100644 FineUI.Examples/res/images/love.jpg create mode 100644 FineUI.Examples/res/images/nav_hover_highlight_2.gif create mode 100644 FineUI.Examples/res/images/no_data_found.jpg create mode 100644 FineUI.Examples/res/images/pagemenu-separator.gif create mode 100644 FineUI.Examples/res/images/pagemenu_toolbar_background.gif create mode 100644 FineUI.Examples/res/images/pkg.gif create mode 100644 FineUI.Examples/res/images/snapshot/Thumbs.db create mode 100644 FineUI.Examples/res/images/snapshot/cascade_window.jpg create mode 100644 FineUI.Examples/res/images/square.gif create mode 100644 FineUI.Examples/res/images/success.png create mode 100644 FineUI.Examples/res/images/themeroller-ready-black-200px.png create mode 100644 FineUI.Examples/res/images/themeroller-ready-white-200px.png create mode 100644 FineUI.Examples/res/images/toolbox.png create mode 100644 FineUI.Examples/res/images/ui-anim_basic_16x16.gif create mode 100644 FineUI.Examples/res/js/jquery.js create mode 100644 FineUI.Examples/res/js/jquery.min.js create mode 100644 FineUI.Examples/tabstrip/tabstrip_position.aspx create mode 100644 FineUI.Examples/tabstrip/tabstrip_position.aspx.cs create mode 100644 FineUI.Examples/tabstrip/tabstrip_position.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/custom_display.aspx create mode 100644 FineUI.Examples/third-party/autocomplete/custom_display.aspx.cs create mode 100644 FineUI.Examples/third-party/autocomplete/custom_display.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/email.aspx create mode 100644 FineUI.Examples/third-party/autocomplete/email.aspx.cs create mode 100644 FineUI.Examples/third-party/autocomplete/email.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/inline.aspx create mode 100644 FineUI.Examples/third-party/autocomplete/inline.aspx.cs create mode 100644 FineUI.Examples/third-party/autocomplete/inline.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/inline_window.aspx create mode 100644 FineUI.Examples/third-party/autocomplete/inline_window.aspx.cs create mode 100644 FineUI.Examples/third-party/autocomplete/inline_window.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/multi_values.aspx create mode 100644 FineUI.Examples/third-party/autocomplete/multi_values.aspx.cs create mode 100644 FineUI.Examples/third-party/autocomplete/multi_values.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/multi_values_remote.aspx create mode 100644 FineUI.Examples/third-party/autocomplete/multi_values_remote.aspx.cs create mode 100644 FineUI.Examples/third-party/autocomplete/multi_values_remote.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/remote_with_cache.aspx create mode 100644 FineUI.Examples/third-party/autocomplete/remote_with_cache.aspx.cs create mode 100644 FineUI.Examples/third-party/autocomplete/remote_with_cache.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/autocomplete/search.ashx create mode 100644 FineUI.Examples/third-party/autocomplete/search.ashx.cs create mode 100644 FineUI.Examples/third-party/ckeditor/ckeditor.aspx create mode 100644 FineUI.Examples/third-party/ckeditor/ckeditor.aspx.cs create mode 100644 FineUI.Examples/third-party/ckeditor/ckeditor.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/my97/my97.aspx create mode 100644 FineUI.Examples/third-party/my97/my97.aspx.cs create mode 100644 FineUI.Examples/third-party/my97/my97.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/res/My97DatePicker_4.8beta4.zip create mode 100644 FineUI.Examples/third-party/res/ckeditor_4.4.2_full.zip create mode 100644 FineUI.Examples/third-party/res/tinymce_4.1.1.zip create mode 100644 FineUI.Examples/third-party/res/ueditor1_4_3-utf8-net.zip create mode 100644 FineUI.Examples/third-party/res/umeditor1_2_2-utf8-net.zip create mode 100644 FineUI.Examples/third-party/res/授权说明.txt create mode 100644 FineUI.Examples/third-party/tinymce/tinymce.aspx create mode 100644 FineUI.Examples/third-party/tinymce/tinymce.aspx.cs create mode 100644 FineUI.Examples/third-party/tinymce/tinymce.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/ueditor/ueditor.aspx create mode 100644 FineUI.Examples/third-party/ueditor/ueditor.aspx.cs create mode 100644 FineUI.Examples/third-party/ueditor/ueditor.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/ueditor/ueditor_two.aspx create mode 100644 FineUI.Examples/third-party/ueditor/ueditor_two.aspx.cs create mode 100644 FineUI.Examples/third-party/ueditor/ueditor_two.aspx.designer.cs create mode 100644 FineUI.Examples/third-party/umeditor/umeditor.aspx create mode 100644 FineUI.Examples/third-party/umeditor/umeditor.aspx.cs create mode 100644 FineUI.Examples/third-party/umeditor/umeditor.aspx.designer.cs create mode 100644 FineUI.Examples/toolbar/form.aspx create mode 100644 FineUI.Examples/toolbar/form.aspx.cs create mode 100644 FineUI.Examples/toolbar/form.aspx.designer.cs create mode 100644 FineUI.Examples/toolbar/menu_hideonclick.aspx create mode 100644 FineUI.Examples/toolbar/menu_hideonclick.aspx.cs create mode 100644 FineUI.Examples/toolbar/menu_hideonclick.aspx.designer.cs create mode 100644 FineUI.Examples/toolbar/multi_toolbars.aspx create mode 100644 FineUI.Examples/toolbar/multi_toolbars.aspx.cs create mode 100644 FineUI.Examples/toolbar/multi_toolbars.aspx.designer.cs create mode 100644 FineUI.Examples/toolbar/toolbar_images.aspx create mode 100644 FineUI.Examples/toolbar/toolbar_images.aspx.cs create mode 100644 FineUI.Examples/toolbar/toolbar_images.aspx.designer.cs create mode 100644 FineUI.Examples/toolbar/toolbar_images_fixedwidth.aspx create mode 100644 FineUI.Examples/toolbar/toolbar_images_fixedwidth.aspx.cs create mode 100644 FineUI.Examples/toolbar/toolbar_images_fixedwidth.aspx.designer.cs create mode 100644 FineUI.Examples/tree/select/tree_multi_select_selectable.aspx create mode 100644 FineUI.Examples/tree/select/tree_multi_select_selectable.aspx.cs create mode 100644 FineUI.Examples/tree/select/tree_multi_select_selectable.aspx.designer.cs create mode 100644 FineUI.Examples/tree/tree_expand.aspx create mode 100644 FineUI.Examples/tree/tree_expand.aspx.cs create mode 100644 FineUI.Examples/tree/tree_expand.aspx.designer.cs create mode 100644 FineUI.Examples/tree/tree_nodedatabound.aspx create mode 100644 FineUI.Examples/tree/tree_nodedatabound.aspx.cs create mode 100644 FineUI.Examples/tree/tree_nodedatabound.aspx.designer.cs create mode 100644 FineUI.Examples/window/panel_collapse.aspx create mode 100644 FineUI.Examples/window/panel_collapse.aspx.cs create mode 100644 FineUI.Examples/window/panel_collapse.aspx.designer.cs create mode 100644 FineUI.Examples/window/window_form.aspx create mode 100644 FineUI.Examples/window/window_form.aspx.cs create mode 100644 FineUI.Examples/window/window_form.aspx.designer.cs create mode 100644 FineUI.Examples/window/window_multi.aspx create mode 100644 FineUI.Examples/window/window_multi.aspx.cs create mode 100644 FineUI.Examples/window/window_multi.aspx.designer.cs create mode 100644 FineUI/BaseWebControls/ControlBase/Listener/Listener.cs create mode 100644 FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs create mode 100644 FineUI/Business/Enums/SummaryPosition.cs create mode 100644 FineUI/Business/Enums/ToolbarAlign.cs create mode 100644 FineUI/Business/Util/DateUtil.cs create mode 100644 FineUI/Business/Util/FState.cs create mode 100644 FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs create mode 100644 FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs create mode 100644 FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs create mode 100644 FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs create mode 100644 FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs create mode 100644 FineUI/lib/JSBeautifyLib/JSBeautify.txt create mode 100644 FineUI/lib/extjs.txt create mode 100644 Newtonsoft.Json/Net20/Newtonsoft.Json.dll create mode 100644 Newtonsoft.Json/Net20/Newtonsoft.Json.xml create mode 100644 Newtonsoft.Json/Net35/Newtonsoft.Json.dll create mode 100644 Newtonsoft.Json/Net35/Newtonsoft.Json.xml create mode 100644 Newtonsoft.Json/Net40/Newtonsoft.Json.dll create mode 100644 Newtonsoft.Json/Net40/Newtonsoft.Json.xml create mode 100644 Newtonsoft.Json/Net45/Newtonsoft.Json.dll create mode 100644 Newtonsoft.Json/Net45/Newtonsoft.Json.xml diff --git a/FineUI.Examples/Code/PageBase.cs b/FineUI.Examples/Code/PageBase.cs index 37d8d85..f6c919b 100644 --- a/FineUI.Examples/Code/PageBase.cs +++ b/FineUI.Examples/Code/PageBase.cs @@ -1,894 +1,1144 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Text; -using System.Data; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.IO; - - -namespace FineUI.Examples -{ - public class PageBase : System.Web.UI.Page - { - #region OnInit - - protected override void OnInit(EventArgs e) - { - if (!IsPostBack) - { - if (PageManager.Instance != null) - { - HttpCookie themeCookie = Request.Cookies["Theme"]; - if (themeCookie != null) - { - string themeValue = themeCookie.Value; - PageManager.Instance.Theme = (Theme)Enum.Parse(typeof(Theme), themeValue, true); - - //if (IsSystemTheme(themeValue)) - //{ - // PageManager.Instance.Theme = (Theme)Enum.Parse(typeof(Theme), themeValue, true); - //} - //else - //{ - // PageManager.Instance.CustomTheme = themeValue; - //} - } - - HttpCookie langCookie = Request.Cookies["Language"]; - if (langCookie != null) - { - string langValue = langCookie.Value; - PageManager.Instance.Language = (Language)Enum.Parse(typeof(Language), langValue, true); - } - } - } - - base.OnInit(e); - } - - private bool IsSystemTheme(string themeName) - { - themeName = themeName.ToLower(); - string[] themes = Enum.GetNames(typeof(Theme)); - foreach (string theme in themes) - { - if (theme.ToLower() == themeName) - { - return true; - } - } - return false; - } - - #endregion - - #region 上传文件类型判断 - - protected readonly static List VALID_FILE_TYPES = new List { "jpg", "bmp", "gif", "jpeg", "png" }; - - protected static bool ValidateFileType(string fileName) - { - string fileType = String.Empty; - int lastDotIndex = fileName.LastIndexOf("."); - if (lastDotIndex >= 0) - { - fileType = fileName.Substring(lastDotIndex + 1).ToLower(); - } - - if (VALID_FILE_TYPES.Contains(fileType)) - { - return true; - } - else - { - return false; - } - } - - - #endregion - - #region 省市县 - - protected readonly static JArray SHENG_JSON = JArray.Parse("[\"北京\",\"天津\",\"上海\",\"重庆\",\"河北\",\"山西\",\"辽宁\",\"吉林\",\"黑龙江\",\"江苏\",\"浙江\",\"安徽\",\"福建\",\"江西\",\"山东\",\"河南\",\"湖北\",\"湖南\",\"广东\",\"海南\",\"四川\",\"贵州\",\"云南\",\"陕西\",\"甘肃\",\"青海\",\"内蒙古\",\"广西\",\"西藏\",\"宁夏\",\"新疆\",\"香港\",\"澳门\",\"台湾\"]"); - protected readonly static JObject SHI_JSON = JObject.Parse("{\"北京\":[\"北京市\"],\"天津\":[\"天津市\"],\"上海\":[\"上海市\"],\"重庆\":[\"重庆市\"],\"河北\":[\"石家庄市\",\"唐山市\",\"秦皇岛市\",\"邯郸市\",\"邢台市\",\"保定市\",\"张家口市\",\"承德市\",\"沧州市\",\"廊坊市\",\"衡水市\"],\"山西\":[\"太原市\",\"大同市\",\"阳泉市\",\"长治市\",\"晋城市\",\"朔州市\",\"晋中市运城市忻州市\",\"临汾市\",\"吕梁市\"],\"辽宁\":[\"沈阳市\",\"大连市\",\"鞍山市\",\"抚顺市\",\"本溪市\",\"丹东市\",\"锦州市\",\"营口市\",\"阜新市\",\"辽阳市\",\"盘锦市\",\"铁岭市\",\"朝阳市\",\"葫芦岛市\"],\"吉林\":[\"长春市\",\"吉林市\",\"四平市\",\"辽源市\",\"通化市\",\"白山市\",\"松原市\",\"白城市\",\"延边朝鲜族自治州\"],\"黑龙江\":[\"哈尔滨市\",\"齐齐哈尔市\",\"鹤岗市\",\"双鸭山市\",\"鸡西市\",\"大庆市\",\"伊春市\",\"牡丹江市\",\"佳木斯市\",\"七台河市\",\"黑河市\",\"绥化市\",\"大兴安岭地区\"],\"江苏\":[\"南京市\",\"苏州市\",\"无锡市\",\"常州市\",\"镇江市\",\"南通市\",\"泰州市\",\"扬州市\",\"盐城市\",\"连云港市\",\"徐州市\",\"淮安市\",\"宿迁市\"],\"浙江\":[\"杭州市\",\"宁波市\",\"温州市\",\"嘉兴市\",\"湖州市\",\"绍兴市\",\"金华市\",\"衢州市\",\"舟山市\",\"台州市\",\"丽水市\"],\"安徽\":[\"合肥市\",\"芜湖市\",\"蚌埠市\",\"淮南市\",\"马鞍山市\",\"淮北市\",\"铜陵市\",\"安庆市\",\"黄山市\",\"滁州市\",\"阜阳市\",\"宿州市\",\"巢湖市\",\"六安市\",\"亳州市\",\"池州市\",\"宣城市\"],\"福建\":[\"福州市\",\"厦门市\",\"莆田市\",\"三明市\",\"泉州市\",\"漳州市\",\"南平市\",\"龙岩市\",\"宁德市\"],\"江西\":[\"南昌市\",\"景德镇市\",\"萍乡市\",\"九江市\",\"新余市\",\"鹰潭市\",\"赣州市\",\"吉安市\",\"宜春市\",\"抚州市\",\"上饶市\"],\"山东\":[\"济南市\",\"青岛市\",\"淄博市\",\"枣庄市\",\"东营市\",\"烟台市\",\"潍坊市\",\"济宁市\",\"泰安市\",\"威海市\",\"日照市\",\"莱芜市\",\"临沂市\",\"德州市\",\"聊城市\",\"滨州市\",\"菏泽市\"],\"河南\":[\"郑州市\",\"开封市\",\"洛阳市\",\"平顶山市\",\"安阳市\",\"鹤壁市\",\"新乡市\",\"焦作市\",\"濮阳市\",\"许昌市\",\"漯河市\",\"三门峡市\",\"南阳市\",\"商丘市\",\"信阳市\",\"周口市\",\"驻马店市\",\"济源市\"],\"湖北\":[\"武汉市\",\"黄石市\",\"十堰市\",\"荆州市\",\"宜昌市\",\"襄樊市\",\"鄂州市\",\"荆门市\",\"孝感市\",\"黄冈市\",\"咸宁市\",\"随州市\",\"恩施土家族苗族自治州\",\"仙桃市\",\"天门市\",\"潜江市\",\"神农架林区\"],\"湖南\":[\"长沙市\",\"株洲市\",\"湘潭市\",\"衡阳市\",\"邵阳市\",\"岳阳市\",\"常德市\",\"张家界市\",\"益阳市\",\"郴州市\",\"永州市\",\"怀化市\",\"娄底市\",\"湘西土家族苗族自治州\"],\"广东\":[\"广州市\",\"深圳市\",\"珠海市\",\"汕头市\",\"韶关市\",\"佛山市\",\"江门市\",\"湛江市\",\"茂名市\",\"肇庆市\",\"惠州市\",\"梅州市\",\"汕尾市\",\"河源市\",\"阳江市\",\"清远市\",\"东莞市\",\"中山市\",\"潮州市\",\"揭阳市\",\"云浮市\"],\"海南\":[\"海口市\",\"三亚市\",\"五指山市\",\"琼海市\",\"儋州市\",\"文昌市\",\"万宁市\",\"东方市\",\"澄迈县\",\"定安县\",\"屯昌县\",\"临高县\",\"白沙黎族自治县\",\"昌江黎族自治县\",\"乐东黎族自治县\",\"陵水黎族自治县\",\"保亭黎族苗族自治县\",\"琼中黎族苗族自治县\"],\"四川\":[\"成都市\",\"自贡市\",\"攀枝花市\",\"泸州市\",\"德阳市\",\"绵阳市\",\"广元市\",\"遂宁市\",\"内江市\",\"乐山市\",\"南充市\",\"眉山市\",\"宜宾市\",\"广安市\",\"达州市\",\"雅安市\",\"巴中市\",\"资阳市\",\"阿坝藏族羌族自治州\",\"甘孜藏族自治州\",\"凉山彝族自治州\"],\"贵州\":[\"贵阳市\",\"六盘水市\",\"遵义市\",\"安顺市\",\"铜仁地区\",\"毕节地区\",\"黔西南布依族苗族自治州\",\"黔东南苗族侗族自治州\",\"黔南布依族苗族自治州\"],\"云南\":[\"昆明市\",\"曲靖市\",\"玉溪市\",\"保山市\",\"昭通市\",\"丽江市\",\"普洱市\",\"临沧市\",\"德宏傣族景颇族自治州\",\"怒江傈僳族自治州\",\"迪庆藏族自治州\",\"大理白族自治州\",\"楚雄彝族自治州\",\"红河哈尼族彝族自治州\",\"文山壮族苗族自治州\",\"西双版纳傣族自治州\"],\"陕西\":[\"西安市\",\"铜川市\",\"宝鸡市\",\"咸阳市\",\"渭南市\",\"延安市\",\"汉中市\",\"榆林市\",\"安康市\",\"商洛市\"],\"甘肃\":[\"兰州市\",\"嘉峪关市\",\"金昌市\",\"白银市\",\"天水市\",\"武威市\",\"酒泉市\",\"张掖市\",\"庆阳市\",\"平凉市\",\"定西市\",\"陇南市\",\"临夏回族自治州\",\"甘南藏族自治州\"],\"青海\":[\"西宁市\",\"海东地区\",\"海北藏族自治州\",\"海南藏族自治州\",\"黄南藏族自治州\",\"果洛藏族自治州\",\"玉树藏族自治州\",\"海西蒙古族藏族自治州\"],\"内蒙古\":[\"呼和浩特市\",\"包头市\",\"乌海市\",\"赤峰市\",\"通辽市\",\"鄂尔多斯市\",\"呼伦贝尔市\",\"巴彦淖尔市\",\"乌兰察布市\",\"锡林郭勒盟\",\"兴安盟\",\"阿拉善盟\"],\"广西\":[\"南宁市\",\"柳州市\",\"桂林市\",\"梧州市\",\"北海市\",\"防城港市\",\"钦州市\",\"贵港市\",\"玉林市\",\"百色市\",\"贺州市\",\"河池市\",\"来宾市\",\"崇左市\"],\"西藏\":[\"拉萨市\",\"那曲地区\",\"昌都地区\",\"林芝地区\",\"山南地区\",\"日喀则地区\",\"阿里地区\"],\"宁夏\":[\"银川市\",\"石嘴山市\",\"吴忠市\",\"固原市\",\"中卫市\"],\"新疆\":[\"乌鲁木齐市\",\"克拉玛依市\",\"吐鲁番地区\",\"哈密地区\",\"和田地区\",\"阿克苏地区\",\"喀什地区\",\"克孜勒苏柯尔克孜自治州\",\"巴音郭楞蒙古自治州\",\"昌吉回族自治州\",\"博尔塔拉蒙古自治州\",\"石河子市\",\"阿拉尔市\",\"图木舒克市\",\"五家渠市\",\"伊犁哈萨克自治州\",\"塔城地区\",\"阿勒泰地区\"],\"香港\":[\"中西区\",\"湾仔区\",\"东区\",\"南区\",\"黄大仙区\",\"观塘区\",\"深水埗区\",\"油尖旺区\",\"九龙城区\",\"北区\",\"大埔区\",\"沙田区\",\"西贡区\",\"元朗区\",\"屯门区\",\"荃湾区\",\"葵青区\",\"离岛区\"],\"澳门\":[\"花地玛堂区\",\"圣安多尼堂区\",\"大堂区\",\"望德堂区\",\"风顺堂区\",\"氹仔\",\"路环\",\"路氹城\"],\"台湾\":[\"台北市\",\"高雄市\",\"基隆市\",\"新竹市\",\"台中市\",\"嘉义市\",\"台南市\",\"台北县\",\"桃园县\",\"新竹县\",\"苗栗县\",\"台中县\",\"彰化县\",\"南投县\",\"云林县\",\"嘉义县\",\"台南县\",\"高雄县\",\"屏东县\",\"宜兰县\",\"花莲县\",\"台东县\",\"澎湖县\",\"金门县\",\"连江县\"]}"); - protected readonly static JObject XIAN_JSON = JObject.Parse("{\"北京市\":[\"东城区\",\"西城区\",\"崇文区\",\"宣武区\",\"朝阳区\",\"丰台区\",\"石景山区\",\"海淀区\",\"门头沟区\",\"房山区\",\"通州区\",\"顺义区\",\"昌平区\",\"大兴区\",\"怀柔区\",\"平谷区\",\"密云县\",\"延庆县\"],\"天津市\":[\"和平区\",\"河东区\",\"河西区\",\"南开区\",\"河北区\",\"红桥区\",\"塘沽区\",\"汉沽区\",\"大港区\",\"东丽区\",\"西青区\",\"北辰区\",\"津南区\",\"武清区\",\"宝坻区\",\"静海县\",\"宁河县\",\"蓟县\"],\"上海市\":[\"黄浦区\",\"卢湾区\",\"徐汇区\",\"长宁区\",\"静安区\",\"普陀区\",\"闸北区\",\"虹口区\",\"杨浦区\",\"宝山区\",\"闵行区\",\"嘉定区\",\"松江区\",\"金山区\",\"青浦区\",\"奉贤区\",\"浦东新区\",\"崇明县\"],\"重庆市\":[\"渝中区\",\"大渡口区\",\"江北区\",\"南岸区\",\"北碚区\",\"渝北区\",\"巴南区\",\"长寿区\",\"双桥区\",\"沙坪坝区\",\"万盛区\",\"万州区\",\"涪陵区\",\"黔江区\",\"永川区\",\"合川区\",\"江津区\",\"九龙坡区\",\"南川区\",\"綦江县\",\"潼南县\",\"荣昌县\",\"璧山县\",\"大足县\",\"铜梁县\",\"梁平县\",\"开县\",\"忠县\",\"城口县\",\"垫江县\",\"武隆县\",\"丰都县\",\"奉节县\",\"云阳县\",\"巫溪县\",\"巫山县\",\"石柱土家族自治县\",\"秀山土家族苗族自治县\",\"酉阳土家族苗族自治县\",\"彭水苗族土家族自治县\"],\"石家庄市\":[\"长安区\",\"桥东区\",\"桥西区\",\"新华区\",\"裕华区\",\"井陉矿区\",\"鹿泉市\",\"辛集市\",\"藁城市\",\"晋州市\",\"新乐市\",\"深泽县\",\"无极县\",\"赵县\",\"灵寿县\",\"高邑县\",\"元氏县\",\"赞皇县\",\"平山县\",\"井陉县\",\"栾城县\",\"正定县\",\"行唐县\"],\"唐山市\":[\"路北区\",\"路南区\",\"古冶区\",\"开平区\",\"丰南区\",\"丰润区\",\"遵化市\",\"迁安市\",\"迁西县\",\"滦南县\",\"玉田县\",\"唐海县\",\"乐亭县\",\"滦县\",\"汉沽管理区\"],\"秦皇岛市\":[\"海港区\",\"山海关区\",\"北戴河区\",\"昌黎县\",\"抚宁县\",\"卢龙县\",\"青龙满族自治县\"],\"邯郸市\":[\"邯山区\",\"丛台区\",\"复兴区\",\"峰峰矿区\",\"武安市\",\"邱县\",\"大名县\",\"魏县\",\"曲周县\",\"鸡泽县\",\"肥乡县\",\"广平县\",\"成安县\",\"临漳县\",\"磁县\",\"涉县\",\"永年县\",\"馆陶县\",\"邯郸县\"],\"邢台市\":[\"桥东区\",\"桥西区\",\"南宫市\",\"沙河市\",\"临城县\",\"内丘县\",\"柏乡县\",\"隆尧县\",\"任县\",\"南和县\",\"宁晋县\",\"巨鹿县\",\"新河县\",\"广宗县\",\"平乡县\",\"威县\",\"清河县\",\"临西县\",\"邢台县\"],\"保定市\":[\"新市区\",\"北市区\",\"南市区\",\"定州市\",\"涿州市\",\"安国市\",\"高碑店市\",\"易县\",\"徐水县\",\"涞源县\",\"顺平县\",\"唐县\",\"望都县\",\"涞水县\",\"高阳县\",\"安新县\",\"雄县\",\"容城县\",\"蠡县\",\"曲阳县\",\"阜平县\",\"博野县\",\"满城县\",\"清苑县\",\"定兴县\"],\"张家口市\":[\"桥东区\",\"桥西区\",\"宣化区\",\"下花园区\",\"张北县\",\"康保县\",\"沽源县\",\"尚义县\",\"蔚县\",\"阳原县\",\"怀安县\",\"万全县\",\"怀来县\",\"赤城县\",\"崇礼县\",\"宣化县\",\"涿鹿县\",\"塞北管理区\"],\"承德市\":[\"双桥区\",\"双滦区\",\"鹰手营子矿区\",\"兴隆县\",\"平泉县\",\"滦平县\",\"隆化县\",\"承德县\",\"丰宁满族自治县\",\"宽城满族自治县\",\"围场满族蒙古族自治县\"],\"沧州市\":[\"新华区\",\"运河区\",\"泊头市\",\"任丘市\",\"黄骅市\",\"河间市\",\"献县\",\"吴桥县\",\"沧县\",\"东光县\",\"肃宁县\",\"南皮县\",\"盐山县\",\"青县\",\"海兴县\",\"孟村回族自治县\"],\"廊坊市\":[\"安次区\",\"广阳区\",\"霸州市\",\"三河市\",\"香河县\",\"永清县\",\"固安县\",\"文安县\",\"大城县\",\"大厂回族自治县\"],\"衡水市\":[\"桃城区\",\"冀州市\",\"深州市\",\"枣强县\",\"武邑县\",\"武强县\",\"饶阳县\",\"安平县\",\"故城县\",\"景县\",\"阜城县\"],\"太原市\":[\"杏花岭区\",\"小店区\",\"迎泽区\",\"尖草坪区\",\"万柏林区\",\"晋源区\",\"古交市\",\"阳曲县\",\"清徐县\",\"娄烦县\"],\"大同市\":[\"城区\",\"矿区\",\"南郊区\",\"新荣区\",\"大同县\",\"天镇县\",\"灵丘县\",\"阳高县\",\"左云县\",\"广灵县\",\"浑源县\"],\"阳泉市\":[\"城区\",\"矿区\",\"郊区\",\"平定县\",\"盂县\"],\"长治市\":[\"城区\",\"郊区\",\"潞城市\",\"长治县\",\"长子县\",\"平顺县\",\"襄垣县\",\"沁源县\",\"屯留县\",\"黎城县\",\"武乡县\",\"沁县\",\"壶关县\"],\"晋城市\":[\"城区\",\"高平市\",\"泽州县\",\"陵川县\",\"阳城县\",\"沁水县\"],\"朔州市\":[\"朔城区\",\"平鲁区\",\"山阴县\",\"右玉县\",\"应县\",\"怀仁县\"],\"晋中市\":[\"榆次区\",\"介休市\",\"昔阳县\",\"灵石县\",\"祁县\",\"左权县\",\"寿阳县\",\"太谷县\",\"和顺县\",\"平遥县\",\"榆社县\"],\"运城市\":[\"盐湖区\",\"河津市\",\"永济市\",\"闻喜县\",\"新绛县\",\"平陆县\",\"垣曲县\",\"绛县\",\"稷山县\",\"芮城县\",\"夏县\",\"万荣县\",\"临猗县\"],\"忻州市\":[\"忻府区\",\"原平市\",\"代县\",\"神池县\",\"五寨县\",\"五台县\",\"偏关县\",\"宁武县\",\"静乐县\",\"繁峙县\",\"河曲县\",\"保德县\",\"定襄县\",\"岢岚县\"],\"临汾市\":[\"尧都区\",\"侯马市\",\"霍州市\",\"汾西县\",\"吉县\",\"安泽县\",\"大宁县\",\"浮山县\",\"古县\",\"隰县\",\"襄汾县\",\"翼城县\",\"永和县\",\"乡宁县\",\"曲沃县\",\"洪洞县\",\"蒲县\"],\"吕梁市\":[\"离石区\",\"孝义市\",\"汾阳市\",\"文水县\",\"中阳县\",\"兴县\",\"临县\",\"方山县\",\"柳林县\",\"岚县\",\"交口县\",\"交城县\",\"石楼县\"],\"沈阳市\":[\"沈河区\",\"皇姑区\",\"和平区\",\"大东区\",\"铁西区\",\"苏家屯区\",\"东陵区\",\"沈北新区\",\"于洪区\",\"新民市\",\"法库县\",\"辽中县\",\"康平县\"],\"大连市\":[\"西岗区\",\"中山区\",\"沙河口区\",\"甘井子区\",\"旅顺口区\",\"金州区\",\"瓦房店市\",\"普兰店市\",\"庄河市\",\"长海县\"],\"鞍山市\":[\"铁东区\",\"铁西区\",\"立山区\",\"千山区\",\"海城市\",\"台安县\",\"岫岩满族自治县\"],\"抚顺市\":[\"顺城区\",\"新抚区\",\"东洲区\",\"望花区\",\"抚顺县\",\"清原满族自治县\",\"新宾满族自治县\"],\"本溪市\":[\"平山区\",\"明山区\",\"溪湖区\",\"南芬区\",\"本溪满族自治县\",\"桓仁满族自治县\"],\"丹东市\":[\"振兴区\",\"元宝区\",\"振安区\",\"东港市\",\"凤城市\",\"宽甸满族自治县\"],\"锦州市\":[\"太和区\",\"古塔区\",\"凌河区\",\"凌海市\",\"北镇市\",\"黑山县\",\"义县\"],\"营口市\":[\"站前区\",\"西市区\",\"鲅鱼圈区\",\"老边区\",\"大石桥市\",\"盖州市\"],\"阜新市\":[\"海州区\",\"新邱区\",\"太平区\",\"清河门区\",\"细河区\",\"彰武县\",\"阜新蒙古族自治县\"],\"辽阳市\":[\"白塔区\",\"文圣区\",\"宏伟区\",\"太子河区\",\"弓长岭区\",\"灯塔市\",\"辽阳县\"],\"盘锦市\":[\"双台子区\",\"兴隆台区\",\"盘山县\",\"大洼县\"],\"铁岭市\":[\"银州区\",\"清河区\",\"调兵山市\",\"开原市\",\"铁岭县\",\"昌图县\",\"西丰县\"],\"朝阳市\":[\"双塔区\",\"龙城区\",\"凌源市\",\"北票市\",\"朝阳县\",\"建平县\",\"喀喇沁左翼蒙古族自治县\"],\"葫芦岛市\":[\"龙港区\",\"南票区\",\"连山区\",\"兴城市\",\"绥中县\",\"建昌县\"],\"长春市\":[\"朝阳区\",\"宽城区\",\"二道区\",\"南关区\",\"绿园区\",\"双阳区\",\"九台市\",\"榆树市\",\"德惠市\",\"农安县\"],\"吉林市\":[\"船营区\",\"昌邑区\",\"龙潭区\",\"丰满区\",\"舒兰市\",\"桦甸市\",\"蛟河市\",\"磐石市\",\"永吉县\"],\"四平市\":[\"铁西区\",\"铁东区\",\"公主岭市\",\"双辽市\",\"梨树县\",\"伊通满族自治县\"],\"辽源市\":[\"龙山区\",\"西安区\",\"东辽县\",\"东丰县\"],\"通化市\":[\"东昌区\",\"二道江区\",\"梅河口市\",\"集安市\",\"通化县\",\"辉南县\",\"柳河县\"],\"白山市\":[\"八道江区\",\"江源区\",\"临江市\",\"靖宇县\",\"抚松县\",\"长白朝鲜族自治县\"],\"松原市\":[\"宁江区\",\"乾安县\",\"长岭县\",\"扶余县\",\"前郭尔罗斯蒙古族自治县\"],\"白城市\":[\"洮北区\",\"大安市\",\"洮南市\",\"镇赉县\",\"通榆县\"],\"延边朝鲜族自治州\":[\"延吉市\",\"图们市\",\"敦化市\",\"龙井市\",\"珲春市\",\"和龙市\",\"安图县\",\"汪清县\"],\"哈尔滨市\":[\"松北区\",\"道里区\",\"南岗区\",\"平房区\",\"香坊区\",\"道外区\",\"呼兰区\",\"阿城区\",\"双城市\",\"尚志市\",\"五常市\",\"宾县\",\"方正县\",\"通河县\",\"巴彦县\",\"延寿县\",\"木兰县\",\"依兰县\"],\"齐齐哈尔市\":[\"龙沙区\",\"昂昂溪区\",\"铁锋区\",\"建华区\",\"富拉尔基区\",\"碾子山区\",\"梅里斯达斡尔族区\",\"讷河市\",\"富裕县\",\"拜泉县\",\"甘南县\",\"依安县\",\"克山县\",\"泰来县\",\"克东县\",\"龙江县\"],\"鹤岗市\":[\"兴山区\",\"工农区\",\"南山区\",\"兴安区\",\"向阳区\",\"东山区\",\"萝北县\",\"绥滨县\"],\"双鸭山市\":[\"尖山区\",\"岭东区\",\"四方台区\",\"宝山区\",\"集贤县\",\"宝清县\",\"友谊县\",\"饶河县\"],\"鸡西市\":[\"鸡冠区\",\"恒山区\",\"城子河区\",\"滴道区\",\"梨树区\",\"麻山区\",\"密山市\",\"虎林市\",\"鸡东县\"],\"大庆市\":[\"萨尔图区\",\"红岗区\",\"龙凤区\",\"让胡路区\",\"大同区\",\"林甸县\",\"肇州县\",\"肇源县\",\"杜尔伯特蒙古族自治县\"],\"伊春市\":[\"伊春区\",\"带岭区\",\"南岔区\",\"金山屯区\",\"西林区\",\"美溪区\",\"乌马河区\",\"翠峦区\",\"友好区\",\"上甘岭区\",\"五营区\",\"红星区\",\"新青区\",\"汤旺河区\",\"乌伊岭区\",\"铁力市\",\"嘉荫县\"],\"牡丹江市\":[\"爱民区\",\"东安区\",\"阳明区\",\"西安区\",\"绥芬河市\",\"宁安市\",\"海林市\",\"穆棱市\",\"林口县\",\"东宁县\"],\"佳木斯市\":[\"前进区\",\"向阳区\",\"东风区\",\"郊区\",\"同江市\",\"富锦市\",\"桦川县\",\"抚远县\",\"桦南县\",\"汤原县\"],\"七台河市\":[\"桃山区\",\"新兴区\",\"茄子河区\",\"勃利县\"],\"黑河市\":[\"爱辉区\",\"北安市\",\"五大连池市\",\"逊克县\",\"嫩江县\",\"孙吴县\"],\"绥化市\":[\"北林区\",\"安达市\",\"肇东市\",\"海伦市\",\"绥棱县\",\"兰西县\",\"明水县\",\"青冈县\",\"庆安县\",\"望奎县\"],\"大兴安岭地区\":[\"呼玛县\",\"塔河县\",\"漠河县\"],\"南京市\":[\"玄武区\",\"白下区\",\"秦淮区\",\"建邺区\",\"鼓楼区\",\"下关区\",\"栖霞区\",\"雨花台区\",\"浦口区\",\"江宁区\",\"六合区\",\"溧水县\",\"高淳县\"],\"苏州市\":[\"金阊区\",\"平江区\",\"沧浪区\",\"吴中区\",\"相城区\",\"虎丘区\",\"张家港市\",\"常熟市\",\"太仓市\",\"昆山市\",\"吴江市\"],\"无锡市\":[\"崇安区\",\"南长区\",\"北塘区\",\"滨湖区\",\"锡山区\",\"惠山区\",\"江阴市\",\"宜兴市\"],\"常州市\":[\"钟楼区\",\"天宁区\",\"戚墅堰区\",\"新北区\",\"武进区\",\"金坛市\",\"溧阳市\"],\"镇江市\":[\"京口区\",\"润州区\",\"丹徒区\",\"丹阳市\",\"扬中市\",\"句容市\"],\"南通市\":[\"崇川区\",\"港闸区\",\"通州区\",\"如皋市\",\"海门市\",\"启东市\",\"海安县\",\"如东县\"],\"泰州市\":[\"海陵区\",\"高港区\",\"姜堰市\",\"泰兴市\",\"靖江市\",\"兴化市\"],\"扬州市\":[\"广陵区\",\"维扬区\",\"邗江区\",\"江都市\",\"仪征市\",\"高邮市\",\"宝应县\"],\"盐城市\":[\"亭湖区\",\"盐都区\",\"大丰市\",\"东台市\",\"建湖县\",\"射阳县\",\"阜宁县\",\"滨海县\",\"响水县\"],\"连云港市\":[\"新浦区\",\"海州区\",\"连云区\",\"东海县\",\"灌云县\",\"赣榆县\",\"灌南县\"],\"徐州市\":[\"云龙区\",\"鼓楼区\",\"九里区\",\"泉山区\",\"贾汪区\",\"邳州市\",\"新沂市\",\"铜山县\",\"睢宁县\",\"沛县\",\"丰县\"],\"淮安市\":[\"清河区\",\"清浦区\",\"楚州区\",\"淮阴区\",\"涟水县\",\"洪泽县\",\"金湖县\",\"盱眙县\"],\"宿迁市\":[\"宿城区\",\"宿豫区\",\"沭阳县\",\"泗阳县\",\"泗洪县\"],\"杭州市\":[\"拱墅区\",\"西湖区\",\"上城区\",\"下城区\",\"江干区\",\"滨江区\",\"余杭区\",\"萧山区\",\"建德市\",\"富阳市\",\"临安市\",\"桐庐县\",\"淳安县\"],\"宁波市\":[\"海曙区\",\"江东区\",\"江北区\",\"镇海区\",\"北仑区\",\"鄞州区\",\"余姚市\",\"慈溪市\",\"奉化市\",\"宁海县\",\"象山县\"],\"温州市\":[\"鹿城区\",\"龙湾区\",\"瓯海区\",\"瑞安市\",\"乐清市\",\"永嘉县\",\"洞头县\",\"平阳县\",\"苍南县\",\"文成县\",\"泰顺县\"],\"嘉兴市\":[\"南湖区\",\"秀洲区\",\"海宁市\",\"平湖市\",\"桐乡市\",\"嘉善县\",\"海盐县\"],\"湖州市\":[\"吴兴区\",\"南浔区\",\"长兴县\",\"德清县\",\"安吉县\"],\"绍兴市\":[\"越城区\",\"诸暨市\",\"上虞市\",\"嵊州市\",\"绍兴县\",\"新昌县\"],\"金华市\":[\"婺城区\",\"金东区\",\"兰溪市\",\"义乌市\",\"东阳市\",\"永康市\",\"武义县\",\"浦江县\",\"磐安县\"],\"衢州市\":[\"柯城区\",\"衢江区\",\"江山市\",\"龙游县\",\"常山县\",\"开化县\"],\"舟山市\":[\"定海区\",\"普陀区\",\"岱山县\",\"嵊泗县\"],\"台州市\":[\"椒江区\",\"黄岩区\",\"路桥区\",\"临海市\",\"温岭市\",\"玉环县\",\"天台县\",\"仙居县\",\"三门县\"],\"丽水市\":[\"莲都区\",\"龙泉市\",\"缙云县\",\"青田县\",\"云和县\",\"遂昌县\",\"松阳县\",\"庆元县\",\"景宁畲族自治县\"],\"合肥市\":[\"蜀山区\",\"庐阳区\",\"瑶海区\",\"包河区\",\"长丰县\",\"肥东县\",\"肥西县\"],\"芜湖市\":[\"镜湖区\",\"弋江区\",\"鸠江区\",\"三山区\",\"芜湖县\",\"南陵县\",\"繁昌县\"],\"蚌埠市\":[\"蚌山区\",\"龙子湖区\",\"禹会区\",\"淮上区\",\"怀远县\",\"固镇县\",\"五河县\"],\"淮南市\":[\"田家庵区\",\"大通区\",\"谢家集区\",\"八公山区\",\"潘集区\",\"凤台县\"],\"马鞍山市\":[\"雨山区\",\"花山区\",\"金家庄区\",\"当涂县\"],\"淮北市\":[\"相山区\",\"杜集区\",\"烈山区\",\"濉溪县\"],\"铜陵市\":[\"铜官山区\",\"狮子山区\",\"郊区\",\"铜陵县\"],\"安庆市\":[\"迎江区\",\"大观区\",\"宜秀区\",\"桐城市\",\"宿松县\",\"枞阳县\",\"太湖县\",\"怀宁县\",\"岳西县\",\"望江县\",\"潜山县\"],\"黄山市\":[\"屯溪区\",\"黄山区\",\"徽州区\",\"休宁县\",\"歙县\",\"祁门县\",\"黟县\"],\"滁州市\":[\"琅琊区\",\"南谯区\",\"天长市\",\"明光市\",\"全椒县\",\"来安县\",\"定远县\",\"凤阳县\"],\"阜阳市\":[\"颍州区\",\"颍东区\",\"颍泉区\",\"界首市\",\"临泉县\",\"颍上县\",\"阜南县\",\"太和县\"],\"宿州市\":[\"埇桥区\",\"萧县\",\"泗县\",\"砀山县\",\"灵璧县\"],\"巢湖市\":[\"居巢区\",\"含山县\",\"无为县\",\"庐江县\",\"和县\"],\"六安市\":[\"金安区\",\"裕安区\",\"寿县\",\"霍山县\",\"霍邱县\",\"舒城县\",\"金寨县\"],\"亳州市\":[\"谯城区\",\"利辛县\",\"涡阳县\",\"蒙城县\"],\"池州市\":[\"贵池区\",\"东至县\",\"石台县\",\"青阳县\"],\"宣城市\":[\"宣州区\",\"宁国市\",\"广德县\",\"郎溪县\",\"泾县\",\"旌德县\",\"绩溪县\"],\"福州市\":[\"鼓楼区\",\"台江区\",\"仓山区\",\"马尾区\",\"晋安区\",\"福清市\",\"长乐市\",\"闽侯县\",\"闽清县\",\"永泰县\",\"连江县\",\"罗源县\",\"平潭县\"],\"厦门市\":[\"思明区\",\"海沧区\",\"湖里区\",\"集美区\",\"同安区\",\"翔安区\"],\"莆田市\":[\"城厢区\",\"涵江区\",\"荔城区\",\"秀屿区\",\"仙游县\"],\"三明市\":[\"梅列区\",\"三元区\",\"永安市\",\"明溪县\",\"将乐县\",\"大田县\",\"宁化县\",\"建宁县\",\"沙县\",\"尤溪县\",\"清流县\",\"泰宁县\"],\"泉州市\":[\"鲤城区\",\"丰泽区\",\"洛江区\",\"泉港区\",\"石狮市\",\"晋江市\",\"南安市\",\"惠安县\",\"永春县\",\"安溪县\",\"德化县\",\"金门县\"],\"漳州市\":[\"芗城区\",\"龙文区\",\"龙海市\",\"平和县\",\"南靖县\",\"诏安县\",\"漳浦县\",\"华安县\",\"东山县\",\"长泰县\",\"云霄县\"],\"南平市\":[\"延平区\",\"建瓯市\",\"邵武市\",\"武夷山市\",\"建阳市\",\"松溪县\",\"光泽县\",\"顺昌县\",\"浦城县\",\"政和县\"],\"龙岩市\":[\"新罗区\",\"漳平市\",\"长汀县\",\"武平县\",\"上杭县\",\"永定县\",\"连城县\"],\"宁德市\":[\"蕉城区\",\"福安市\",\"福鼎市\",\"寿宁县\",\"霞浦县\",\"柘荣县\",\"屏南县\",\"古田县\",\"周宁县\"],\"南昌市\":[\"东湖区\",\"西湖区\",\"青云谱区\",\"湾里区\",\"青山湖区\",\"新建县\",\"南昌县\",\"进贤县\",\"安义县\"],\"景德镇市\":[\"珠山区\",\"昌江区\",\"乐平市\",\"浮梁县\"],\"萍乡市\":[\"安源区\",\"湘东区\",\"莲花县\",\"上栗县\",\"芦溪县\"],\"九江市\":[\"浔阳区\",\"庐山区\",\"瑞昌市\",\"九江县\",\"星子县\",\"武宁县\",\"彭泽县\",\"永修县\",\"修水县\",\"湖口县\",\"德安县\",\"都昌县\"],\"新余市\":[\"渝水区\",\"分宜县\"],\"鹰潭市\":[\"月湖区\",\"贵溪市\",\"余江县\"],\"赣州市\":[\"章贡区\",\"瑞金市\",\"南康市\",\"石城县\",\"安远县\",\"赣县\",\"宁都县\",\"寻乌县\",\"兴国县\",\"定南县\",\"上犹县\",\"于都县\",\"龙南县\",\"崇义县\",\"信丰县\",\"全南县\",\"大余县\",\"会昌县\"],\"吉安市\":[\"吉州区\",\"青原区\",\"井冈山市\",\"吉安县\",\"永丰县\",\"永新县\",\"新干县\",\"泰和县\",\"峡江县\",\"遂川县\",\"安福县\",\"吉水县\",\"万安县\"],\"宜春市\":[\"袁州区\",\"丰城市\",\"樟树市\",\"高安市\",\"铜鼓县\",\"靖安县\",\"宜丰县\",\"奉新县\",\"万载县\",\"上高县\"],\"抚州市\":[\"临川区\",\"南丰县\",\"乐安县\",\"金溪县\",\"南城县\",\"东乡县\",\"资溪县\",\"宜黄县\",\"广昌县\",\"黎川县\",\"崇仁县\"],\"上饶市\":[\"信州区\",\"德兴市\",\"上饶县\",\"广丰县\",\"鄱阳县\",\"婺源县\",\"铅山县\",\"余干县\",\"横峰县\",\"弋阳县\",\"玉山县\",\"万年县\"],\"济南市\":[\"市中区\",\"历下区\",\"天桥区\",\"槐荫区\",\"历城区\",\"长清区\",\"章丘市\",\"平阴县\",\"济阳县\",\"商河县\"],\"青岛市\":[\"市南区\",\"市北区\",\"四方区\",\"李沧区\",\"崂山区\",\"城阳区\",\"黄岛区\",\"即墨市\",\"胶州市\",\"胶南市\",\"平度市\",\"莱西市\"],\"淄博市\":[\"张店区\",\"临淄区\",\"淄川区\",\"博山区\",\"周村区\",\"桓台县\",\"高青县\",\"沂源县\"],\"枣庄市\":[\"市中区\",\"山亭区\",\"峄城区\",\"台儿庄区\",\"薛城区\",\"滕州市\"],\"东营市\":[\"东营区\",\"河口区\",\"垦利县\",\"广饶县\",\"利津县\"],\"烟台市\":[\"芝罘区\",\"福山区\",\"牟平区\",\"莱山区\",\"龙口市\",\"莱阳市\",\"莱州市\",\"招远市\",\"蓬莱市\",\"栖霞市\",\"海阳市\",\"长岛县\"],\"潍坊市\":[\"潍城区\",\"寒亭区\",\"坊子区\",\"奎文区\",\"青州市\",\"诸城市\",\"寿光市\",\"安丘市\",\"高密市\",\"昌邑市\",\"昌乐县\",\"临朐县\"],\"济宁市\":[\"市中区\",\"任城区\",\"曲阜市\",\"兖州市\",\"邹城市\",\"鱼台县\",\"金乡县\",\"嘉祥县\",\"微山县\",\"汶上县\",\"泗水县\",\"梁山县\"],\"泰安市\":[\"泰山区\",\"岱岳区\",\"新泰市\",\"肥城市\",\"宁阳县\",\"东平县\"],\"威海市\":[\"环翠区\",\"乳山市\",\"文登市\",\"荣成市\"],\"日照市\":[\"东港区\",\"岚山区\",\"五莲县\",\"莒县\"],\"莱芜市\":[\"莱城区\",\"钢城区\"],\"临沂市\":[\"兰山区\",\"罗庄区\",\"河东区\",\"沂南县\",\"郯城县\",\"沂水县\",\"苍山县\",\"费县\",\"平邑县\",\"莒南县\",\"蒙阴县\",\"临沭县\"],\"德州市\":[\"德城区\",\"乐陵市\",\"禹城市\",\"陵县\",\"宁津县\",\"齐河县\",\"武城县\",\"庆云县\",\"平原县\",\"夏津县\",\"临邑县\"],\"聊城市\":[\"东昌府区\",\"临清市\",\"高唐县\",\"阳谷县\",\"茌平县\",\"莘县\",\"东阿县\",\"冠县\"],\"滨州市\":[\"滨城区\",\"邹平县\",\"沾化县\",\"惠民县\",\"博兴县\",\"阳信县\",\"无棣县\"],\"菏泽市\":[\"牡丹区\",\"鄄城县\",\"单县\",\"郓城县\",\"曹县\",\"定陶县\",\"巨野县\",\"东明县\",\"成武县\"],\"郑州市\":[\"中原区\",\"金水区\",\"二七区\",\"管城回族区\",\"上街区\",\"惠济区\",\"巩义市\",\"新郑市\",\"新密市\",\"登封市\",\"荥阳市\",\"中牟县\"],\"开封市\":[\"鼓楼区\",\"龙亭区\",\"顺河回族区\",\"禹王台区\",\"金明区\",\"开封县\",\"尉氏县\",\"兰考县\",\"杞县\",\"通许县\"],\"洛阳市\":[\"西工区\",\"老城区\",\"涧西区\",\"瀍河回族区\",\"洛龙区\",\"吉利区\",\"偃师市\",\"孟津县\",\"汝阳县\",\"伊川县\",\"洛宁县\",\"嵩县\",\"宜阳县\",\"新安县\",\"栾川县\"],\"平顶山市\":[\"新华区\",\"卫东区\",\"湛河区\",\"石龙区\",\"汝州市\",\"舞钢市\",\"宝丰县\",\"叶县\",\"郏县\",\"鲁山县\"],\"安阳市\":[\"北关区\",\"文峰区\",\"殷都区\",\"龙安区\",\"林州市\",\"安阳县\",\"滑县\",\"内黄县\",\"汤阴县\"],\"鹤壁市\":[\"淇滨区\",\"山城区\",\"鹤山区\",\"浚县\",\"淇县\"],\"新乡市\":[\"卫滨区\",\"红旗区\",\"凤泉区\",\"牧野区\",\"卫辉市\",\"辉县市\",\"新乡县\",\"获嘉县\",\"原阳县\",\"长垣县\",\"封丘县\",\"延津县\"],\"焦作市\":[\"解放区\",\"中站区\",\"马村区\",\"山阳区\",\"沁阳市\",\"孟州市\",\"修武县\",\"温县\",\"武陟县\",\"博爱县\"],\"濮阳市\":[\"华龙区\",\"濮阳县\",\"南乐县\",\"台前县\",\"清丰县\",\"范县\"],\"许昌市\":[\"魏都区\",\"禹州市\",\"长葛市\",\"许昌县\",\"鄢陵县\",\"襄城县\"],\"漯河市\":[\"源汇区\",\"郾城区\",\"召陵区\",\"临颍县\",\"舞阳县\"],\"三门峡市\":[\"湖滨区\",\"义马市\",\"灵宝市\",\"渑池县\",\"卢氏县\",\"陕县\"],\"南阳市\":[\"卧龙区\",\"宛城区\",\"邓州市\",\"桐柏县\",\"方城县\",\"淅川县\",\"镇平县\",\"唐河县\",\"南召县\",\"内乡县\",\"新野县\",\"社旗县\",\"西峡县\"],\"商丘市\":[\"梁园区\",\"睢阳区\",\"永城市\",\"宁陵县\",\"虞城县\",\"民权县\",\"夏邑县\",\"柘城县\",\"睢县\"],\"信阳市\":[\"浉河区\",\"平桥区\",\"潢川县\",\"淮滨县\",\"息县\",\"新县\",\"商城县\",\"固始县\",\"罗山县\",\"光山县\"],\"周口市\":[\"川汇区\",\"项城市\",\"商水县\",\"淮阳县\",\"太康县\",\"鹿邑县\",\"西华县\",\"扶沟县\",\"沈丘县\",\"郸城县\"],\"驻马店市\":[\"驿城区\",\"确山县\",\"新蔡县\",\"上蔡县\",\"西平县\",\"泌阳县\",\"平舆县\",\"汝南县\",\"遂平县\",\"正阳县\"],\"济源市\":[],\"武汉市\":[\"江岸区\",\"武昌区\",\"江汉区\",\"硚口区\",\"汉阳区\",\"青山区\",\"洪山区\",\"东西湖区\",\"汉南区\",\"蔡甸区\",\"江夏区\",\"黄陂区\",\"新洲区\"],\"黄石市\":[\"黄石港区\",\"西塞山区\",\"下陆区\",\"铁山区\",\"大冶市\",\"阳新县\"],\"十堰市\":[\"张湾区\",\"茅箭区\",\"丹江口市\",\"郧县\",\"竹山县\",\"房县\",\"郧西县\",\"竹溪县\"],\"荆州市\":[\"沙市区\",\"荆州区\",\"洪湖市\",\"石首市\",\"松滋市\",\"监利县\",\"公安县\",\"江陵县\"],\"宜昌市\":[\"西陵区\",\"伍家岗区\",\"点军区\",\"猇亭区\",\"夷陵区\",\"宜都市\",\"当阳市\",\"枝江市\",\"秭归县\",\"远安县\",\"兴山县\",\"五峰土家族自治县\",\"长阳土家族自治县\"],\"襄樊市\":[\"襄城区\",\"樊城区\",\"襄阳区\",\"老河口市\",\"枣阳市\",\"宜城市\",\"南漳县\",\"谷城县\",\"保康县\"],\"鄂州市\":[\"鄂城区\",\"华容区\",\"梁子湖区\"],\"荆门市\":[\"东宝区\",\"掇刀区\",\"钟祥市\",\"京山县\",\"沙洋县\"],\"孝感市\":[\"孝南区\",\"应城市\",\"安陆市\",\"汉川市\",\"云梦县\",\"大悟县\",\"孝昌县\"],\"黄冈市\":[\"黄州区\",\"麻城市\",\"武穴市\",\"红安县\",\"罗田县\",\"浠水县\",\"蕲春县\",\"黄梅县\",\"英山县\",\"团风县\"],\"咸宁市\":[\"咸安区\",\"赤壁市\",\"嘉鱼县\",\"通山县\",\"崇阳县\",\"通城县\"],\"随州市\":[\"曾都区\",\"广水市\",\"随县\"],\"恩施土家族苗族自治州\":[\"恩施市\",\"利川市\",\"建始县\",\"来凤县\",\"巴东县\",\"鹤峰县\",\"宣恩县\",\"咸丰县\"],\"仙桃市\":[],\"天门市\":[],\"潜江市\":[],\"神农架林区\":[],\"长沙市\":[\"岳麓区\",\"芙蓉区\",\"天心区\",\"开福区\",\"雨花区\",\"浏阳市\",\"长沙县\",\"望城县\",\"宁乡县\"],\"株洲市\":[\"天元区\",\"荷塘区\",\"芦淞区\",\"石峰区\",\"醴陵市\",\"株洲县\",\"炎陵县\",\"茶陵县\",\"攸县\"],\"湘潭市\":[\"岳塘区\",\"雨湖区\",\"湘乡市\",\"韶山市\",\"湘潭县\"],\"衡阳市\":[\"雁峰区\",\"珠晖区\",\"石鼓区\",\"蒸湘区\",\"南岳区\",\"耒阳市\",\"常宁市\",\"衡阳县\",\"衡东县\",\"衡山县\",\"衡南县\",\"祁东县\"],\"邵阳市\":[\"双清区\",\"大祥区\",\"北塔区\",\"武冈市\",\"邵东县\",\"洞口县\",\"新邵县\",\"绥宁县\",\"新宁县\",\"邵阳县\",\"隆回县\",\"城步苗族自治县\"],\"岳阳市\":[\"岳阳楼区\",\"云溪区\",\"君山区\",\"临湘市\",\"汨罗市\",\"岳阳县\",\"湘阴县\",\"平江县\",\"华容县\"],\"常德市\":[\"武陵区\",\"鼎城区\",\"津市市\",\"澧县\",\"临澧县\",\"桃源县\",\"汉寿县\",\"安乡县\",\"石门县\"],\"张家界市\":[\"永定区\",\"武陵源区\",\"慈利县\",\"桑植县\"],\"益阳市\":[\"赫山区\",\"资阳区\",\"沅江市\",\"桃江县\",\"南县\",\"安化县\"],\"郴州市\":[\"北湖区\",\"苏仙区\",\"资兴市\",\"宜章县\",\"汝城县\",\"安仁县\",\"嘉禾县\",\"临武县\",\"桂东县\",\"永兴县\",\"桂阳县\"],\"永州市\":[\"冷水滩区\",\"零陵区\",\"祁阳县\",\"蓝山县\",\"宁远县\",\"新田县\",\"东安县\",\"江永县\",\"道县\",\"双牌县\",\"江华瑶族自治县\"],\"怀化市\":[\"鹤城区\",\"洪江市\",\"会同县\",\"沅陵县\",\"辰溪县\",\"溆浦县\",\"中方县\",\"新晃侗族自治县\",\"芷江侗族自治县\",\"通道侗族自治县\",\"靖州苗族侗族自治县\",\"麻阳苗族自治县\",\"洪江区\"],\"娄底市\":[\"娄星区\",\"冷水江市\",\"涟源市\",\"新化县\",\"双峰县\"],\"湘西土家族苗族自治州\":[\"吉首市\",\"古丈县\",\"龙山县\",\"永顺县\",\"凤凰县\",\"泸溪县\",\"保靖县\",\"花垣县\"],\"广州市\":[\"越秀区\",\"荔湾区\",\"海珠区\",\"天河区\",\"白云区\",\"黄埔区\",\"番禺区\",\"花都区\",\"南沙区\",\"萝岗区\",\"增城市\",\"从化市\"],\"深圳市\":[\"福田区\",\"罗湖区\",\"南山区\",\"宝安区\",\"龙岗区\",\"盐田区\"],\"珠海市\":[\"香洲区\",\"斗门区\",\"金湾区\"],\"汕头市\":[\"金平区\",\"濠江区\",\"龙湖区\",\"潮阳区\",\"潮南区\",\"澄海区\",\"南澳县\"],\"韶关市\":[\"浈江区\",\"武江区\",\"曲江区\",\"乐昌市\",\"南雄市\",\"始兴县\",\"仁化县\",\"翁源县\",\"新丰县\",\"乳源瑶族自治县\"],\"佛山市\":[\"禅城区\",\"南海区\",\"顺德区\",\"三水区\",\"高明区\"],\"江门市\":[\"蓬江区\",\"江海区\",\"新会区\",\"恩平市\",\"台山市\",\"开平市\",\"鹤山市\"],\"湛江市\":[\"赤坎区\",\"霞山区\",\"坡头区\",\"麻章区\",\"吴川市\",\"廉江市\",\"雷州市\",\"遂溪县\",\"徐闻县\"],\"茂名市\":[\"茂南区\",\"茂港区\",\"化州市\",\"信宜市\",\"高州市\",\"电白县\"],\"肇庆市\":[\"端州区\",\"鼎湖区\",\"高要市\",\"四会市\",\"广宁县\",\"怀集县\",\"封开县\",\"德庆县\"],\"惠州市\":[\"惠城区\",\"惠阳区\",\"博罗县\",\"惠东县\",\"龙门县\"],\"梅州市\":[\"梅江区\",\"兴宁市\",\"梅县\",\"大埔县\",\"丰顺县\",\"五华县\",\"平远县\",\"蕉岭县\"],\"汕尾市\":[\"城区\",\"陆丰市\",\"海丰县\",\"陆河县\"],\"河源市\":[\"源城区\",\"紫金县\",\"龙川县\",\"连平县\",\"和平县\",\"东源县\"],\"阳江市\":[\"江城区\",\"阳春市\",\"阳西县\",\"阳东县\"],\"清远市\":[\"清城区\",\"英德市\",\"连州市\",\"佛冈县\",\"阳山县\",\"清新县\",\"连山壮族瑶族自治县\",\"连南瑶族自治县\"],\"东莞市\":[],\"中山市\":[],\"潮州市\":[\"湘桥区\",\"潮安县\",\"饶平县\"],\"揭阳市\":[\"榕城区\",\"普宁市\",\"揭东县\",\"揭西县\",\"惠来县\"],\"云浮市\":[\"云城区\",\"罗定市\",\"云安县\",\"新兴县\",\"郁南县\"],\"海口市\":[\"龙华区\",\"秀英区\",\"琼山区\",\"美兰区\"],\"三亚市\":[],\"五指山市\":[],\"琼海市\":[],\"儋州市\":[],\"文昌市\":[],\"万宁市\":[],\"东方市\":[],\"澄迈县\":[],\"定安县\":[],\"屯昌县\":[],\"临高县\":[],\"白沙黎族自治县\":[],\"昌江黎族自治县\":[],\"乐东黎族自治县\":[],\"陵水黎族自治县\":[],\"保亭黎族苗族自治县\":[],\"琼中黎族苗族自治县\":[],\"成都市\":[\"青羊区\",\"锦江区\",\"金牛区\",\"武侯区\",\"成华区\",\"龙泉驿区\",\"青白江区\",\"新都区\",\"温江区\",\"都江堰市\",\"彭州市\",\"邛崃市\",\"崇州市\",\"金堂县\",\"郫县\",\"新津县\",\"双流县\",\"蒲江县\",\"大邑县\"],\"自贡市\":[\"大安区\",\"自流井区\",\"贡井区\",\"沿滩区\",\"荣县\",\"富顺县\"],\"攀枝花市\":[\"东区\",\"西区\",\"仁和区\",\"米易县\",\"盐边县\"],\"泸州市\":[\"江阳区\",\"纳溪区\",\"龙马潭区\",\"泸县\",\"合江县\",\"叙永县\",\"古蔺县\"],\"德阳市\":[\"旌阳区\",\"广汉市\",\"什邡市\",\"绵竹市\",\"罗江县\",\"中江县\"],\"绵阳市\":[\"涪城区\",\"游仙区\",\"江油市\",\"盐亭县\",\"三台县\",\"平武县\",\"安县\",\"梓潼县\",\"北川羌族自治县\"],\"广元市\":[\"利州区\",\"元坝区\",\"朝天区\",\"青川县\",\"旺苍县\",\"剑阁县\",\"苍溪县\"],\"遂宁市\":[\"船山区\",\"安居区\",\"射洪县\",\"蓬溪县\",\"大英县\"],\"内江市\":[\"市中区\",\"东兴区\",\"资中县\",\"隆昌县\",\"威远县\"],\"乐山市\":[\"市中区\",\"五通桥区\",\"沙湾区\",\"金口河区\",\"峨眉山市\",\"夹江县\",\"井研县\",\"犍为县\",\"沐川县\",\"马边彝族自治县\",\"峨边彝族自治县\"],\"南充市\":[\"顺庆区\",\"高坪区\",\"嘉陵区\",\"阆中市\",\"营山县\",\"蓬安县\",\"仪陇县\",\"南部县\",\"西充县\"],\"眉山市\":[\"东坡区\",\"仁寿县\",\"彭山县\",\"洪雅县\",\"丹棱县\",\"青神县\"],\"宜宾市\":[\"翠屏区\",\"宜宾县\",\"兴文县\",\"南溪县\",\"珙县\",\"长宁县\",\"高县\",\"江安县\",\"筠连县\",\"屏山县\"],\"广安市\":[\"广安区\",\"华蓥市\",\"岳池县\",\"邻水县\",\"武胜县\"],\"达州市\":[\"通川区\",\"万源市\",\"达县\",\"渠县\",\"宣汉县\",\"开江县\",\"大竹县\"],\"雅安市\":[\"雨城区\",\"芦山县\",\"石棉县\",\"名山县\",\"天全县\",\"荥经县\",\"宝兴县\",\"汉源县\"],\"巴中市\":[\"巴州区\",\"南江县\",\"平昌县\",\"通江县\"],\"资阳市\":[\"雁江区\",\"简阳市\",\"安岳县\",\"乐至县\"],\"阿坝藏族羌族自治州\":[\"马尔康县\",\"九寨沟县\",\"红原县\",\"汶川县\",\"阿坝县\",\"理县\",\"若尔盖县\",\"小金县\",\"黑水县\",\"金川县\",\"松潘县\",\"壤塘县\",\"茂县\"],\"甘孜藏族自治州\":[\"康定县\",\"丹巴县\",\"炉霍县\",\"九龙县\",\"甘孜县\",\"雅江县\",\"新龙县\",\"道孚县\",\"白玉县\",\"理塘县\",\"德格县\",\"乡城县\",\"石渠县\",\"稻城县\",\"色达县\",\"巴塘县\",\"泸定县\",\"得荣县\"],\"凉山彝族自治州\":[\"西昌市\",\"美姑县\",\"昭觉县\",\"金阳县\",\"甘洛县\",\"布拖县\",\"雷波县\",\"普格县\",\"宁南县\",\"喜德县\",\"会东县\",\"越西县\",\"会理县\",\"盐源县\",\"德昌县\",\"冕宁县\",\"木里藏族自治县\"],\"贵阳市\":[\"乌当区\",\"南明区\",\"云岩区\",\"花溪区\",\"白云区\",\"小河区\",\"清镇市\",\"开阳县\",\"息烽县\",\"修文县\"],\"六盘水市\":[\"钟山区\",\"六枝特区\",\"盘县\",\"水城县\"],\"遵义市\":[\"红花岗区\",\"汇川区\",\"赤水市\",\"仁怀市\",\"遵义县\",\"绥阳县\",\"桐梓县\",\"习水县\",\"凤冈县\",\"正安县\",\"余庆县\",\"湄潭县\",\"道真仡佬族苗族自治县\",\"务川仡佬族苗族自治县\"],\"安顺市\":[\"西秀区\",\"普定县\",\"平坝县\",\"镇宁布依族苗族自治县\",\"紫云苗族布依族自治县\",\"关岭布依族苗族自治县\"],\"铜仁地区\":[\"铜仁市\",\"德江县\",\"江口县\",\"思南县\",\"石阡县\",\"玉屏侗族自治县\",\"松桃苗族自治县\",\"印江土家族苗族自治县\",\"沿河土家族自治县\",\"万山特区\"],\"毕节地区\":[\"毕节市\",\"黔西县\",\"大方县\",\"织金县\",\"金沙县\",\"赫章县\",\"纳雍县\",\"威宁彝族回族苗族自治县\"],\"黔西南布依族苗族自治州\":[\"兴义市\",\"望谟县\",\"兴仁县\",\"普安县\",\"册亨县\",\"晴隆县\",\"贞丰县\",\"安龙县\"],\"黔东南苗族侗族自治州\":[\"凯里市\",\"施秉县\",\"从江县\",\"锦屏县\",\"镇远县\",\"麻江县\",\"台江县\",\"天柱县\",\"黄平县\",\"榕江县\",\"剑河县\",\"三穗县\",\"雷山县\",\"黎平县\",\"岑巩县\",\"丹寨县\"],\"黔南布依族苗族自治州\":[\"都匀市\",\"福泉市\",\"贵定县\",\"惠水县\",\"罗甸县\",\"瓮安县\",\"荔波县\",\"龙里县\",\"平塘县\",\"长顺县\",\"独山县\",\"三都水族自治县\"],\"昆明市\":[\"盘龙区\",\"五华区\",\"官渡区\",\"西山区\",\"东川区\",\"安宁市\",\"呈贡县\",\"晋宁县\",\"富民县\",\"宜良县\",\"嵩明县\",\"石林彝族自治县\",\"禄劝彝族苗族自治县\",\"寻甸回族彝族自治县\"],\"曲靖市\":[\"麒麟区\",\"宣威市\",\"马龙县\",\"沾益县\",\"富源县\",\"罗平县\",\"师宗县\",\"陆良县\",\"会泽县\"],\"玉溪市\":[\"红塔区\",\"江川县\",\"澂江县\",\"通海县\",\"华宁县\",\"易门县\",\"峨山彝族自治县\",\"新平彝族傣族自治县\",\"元江哈尼族彝族傣族自治县\"],\"保山市\":[\"隆阳区\",\"施甸县\",\"腾冲县\",\"龙陵县\",\"昌宁县\"],\"昭通市\":[\"昭阳区\",\"鲁甸县\",\"巧家县\",\"盐津县\",\"大关县\",\"永善县\",\"绥江县\",\"镇雄县\",\"彝良县\",\"威信县\",\"水富县\"],\"丽江市\":[\"古城区\",\"永胜县\",\"华坪县\",\"玉龙纳西族自治县\",\"宁蒗彝族自治县\"],\"普洱市\":[\"思茅区\",\"宁洱哈尼族彝族自治县\",\"墨江哈尼族自治县\",\"景东彝族自治县\",\"景谷傣族彝族自治县\",\"镇沅彝族哈尼族拉祜族自治县\",\"江城哈尼族彝族自治县\",\"孟连傣族拉祜族佤族自治县\",\"澜沧拉祜族自治县\",\"西盟佤族自治县\"],\"临沧市\":[\"临翔区\",\"凤庆县\",\"云县\",\"永德县\",\"镇康县\",\"双江拉祜族佤族布朗族傣族自治县\",\"耿马傣族佤族自治县\",\"沧源佤族自治县\"],\"德宏傣族景颇族自治州\":[\"潞西市\",\"瑞丽市\",\"梁河县\",\"盈江县\",\"陇川县\"],\"怒江傈僳族自治州\":[\"泸水县\",\"福贡县\",\"贡山独龙族怒族自治县\",\"兰坪白族普米族自治县\"],\"迪庆藏族自治州\":[\"香格里拉县\",\"德钦县\",\"维西傈僳族自治县\"],\"大理白族自治州\":[\"大理市\",\"祥云县\",\"宾川县\",\"弥渡县\",\"永平县\",\"云龙县\",\"洱源县\",\"剑川县\",\"鹤庆县\",\"漾濞彝族自治县\",\"南涧彝族自治县\",\"巍山彝族回族自治县\"],\"楚雄彝族自治州\":[\"楚雄市\",\"双柏县\",\"牟定县\",\"南华县\",\"姚安县\",\"大姚县\",\"永仁县\",\"元谋县\",\"武定县\",\"禄丰县\"],\"红河哈尼族彝族自治州\":[\"蒙自县\",\"个旧市\",\"开远市\",\"绿春县\",\"建水县\",\"石屏县\",\"弥勒县\",\"泸西县\",\"元阳县\",\"红河县\",\"金平苗族瑶族傣族自治县\",\"河口瑶族自治县\",\"屏边苗族自治县\"],\"文山壮族苗族自治州\":[\"文山县\",\"砚山县\",\"西畴县\",\"麻栗坡县\",\"马关县\",\"丘北县\",\"广南县\",\"富宁县\"],\"西双版纳傣族自治州\":[\"景洪市\",\"勐海县\",\"勐腊县\"],\"西安市\":[\"未央区\",\"莲湖区\",\"新城区\",\"碑林区\",\"雁塔区\",\"灞桥区\",\"阎良区\",\"临潼区\",\"长安区\",\"高陵县\",\"蓝田县\",\"户县\",\"周至县\"],\"铜川市\":[\"耀州区\",\"王益区\",\"印台区\",\"宜君县\"],\"宝鸡市\":[\"金台区\",\"渭滨区\",\"陈仓区\",\"岐山县\",\"凤翔县\",\"陇县\",\"太白县\",\"麟游县\",\"扶风县\",\"千阳县\",\"眉县\",\"凤县\"],\"咸阳市\":[\"秦都区\",\"渭城区\",\"杨陵区\",\"兴平市\",\"礼泉县\",\"泾阳县\",\"永寿县\",\"三原县\",\"彬县\",\"旬邑县\",\"长武县\",\"乾县\",\"武功县\",\"淳化县\"],\"渭南市\":[\"临渭区\",\"韩城市\",\"华阴市\",\"蒲城县\",\"潼关县\",\"白水县\",\"澄城县\",\"华县\",\"合阳县\",\"富平县\",\"大荔县\"],\"延安市\":[\"宝塔区\",\"安塞县\",\"洛川县\",\"子长县\",\"黄陵县\",\"延川县\",\"富县\",\"延长县\",\"甘泉县\",\"宜川县\",\"志丹县\",\"黄龙县\",\"吴起县\"],\"汉中市\":[\"汉台区\",\"留坝县\",\"镇巴县\",\"城固县\",\"南郑县\",\"洋县\",\"宁强县\",\"佛坪县\",\"勉县\",\"西乡县\",\"略阳县\"],\"榆林市\":[\"榆阳区\",\"清涧县\",\"绥德县\",\"神木县\",\"佳县\",\"府谷县\",\"子洲县\",\"靖边县\",\"横山县\",\"米脂县\",\"吴堡县\",\"定边县\"],\"安康市\":[\"汉滨区\",\"紫阳县\",\"岚皋县\",\"旬阳县\",\"镇坪县\",\"平利县\",\"石泉县\",\"宁陕县\",\"白河县\",\"汉阴县\"],\"商洛市\":[\"商州区\",\"镇安县\",\"山阳县\",\"洛南县\",\"商南县\",\"丹凤县\",\"柞水县\"],\"兰州市\":[\"城关区\",\"七里河区\",\"西固区\",\"安宁区\",\"红古区\",\"永登县\",\"皋兰县\",\"榆中县\"],\"嘉峪关市\":[],\"金昌市\":[\"金川区\",\"永昌县\"],\"白银市\":[\"白银区\",\"平川区\",\"靖远县\",\"会宁县\",\"景泰县\"],\"天水市\":[\"秦州区\",\"麦积区\",\"清水县\",\"秦安县\",\"甘谷县\",\"武山县\",\"张家川回族自治县\"],\"武威市\":[\"凉州区\",\"民勤县\",\"古浪县\",\"天祝藏族自治县\"],\"酒泉市\":[\"肃州区\",\"玉门市\",\"敦煌市\",\"金塔县\",\"瓜州县\",\"肃北蒙古族自治县\",\"阿克塞哈萨克族自治县\"],\"张掖市\":[\"甘州区\",\"民乐县\",\"临泽县\",\"高台县\",\"山丹县\",\"肃南裕固族自治县\"],\"庆阳市\":[\"西峰区\",\"庆城县\",\"环县\",\"华池县\",\"合水县\",\"正宁县\",\"宁县\",\"镇原县\"],\"平凉市\":[\"崆峒区\",\"泾川县\",\"灵台县\",\"崇信县\",\"华亭县\",\"庄浪县\",\"静宁县\"],\"定西市\":[\"安定区\",\"通渭县\",\"临洮县\",\"漳县\",\"岷县\",\"渭源县\",\"陇西县\"],\"陇南市\":[\"武都区\",\"成县\",\"宕昌县\",\"康县\",\"文县\",\"西和县\",\"礼县\",\"两当县\",\"徽县\"],\"临夏回族自治州\":[\"临夏市\",\"临夏县\",\"康乐县\",\"永靖县\",\"广河县\",\"和政县\",\"东乡族自治县\",\"积石山保安族东乡族撒拉族自治县\"],\"甘南藏族自治州\":[\"合作市\",\"临潭县\",\"卓尼县\",\"舟曲县\",\"迭部县\",\"玛曲县\",\"碌曲县\",\"夏河县\"],\"西宁市\":[\"城中区\",\"城东区\",\"城西区\",\"城北区\",\"湟源县\",\"湟中县\",\"大通回族土族自治县\"],\"海东地区\":[\"平安县\",\"乐都县\",\"民和回族土族自治县\",\"互助土族自治县\",\"化隆回族自治县\",\"循化撒拉族自治县\"],\"海北藏族自治州\":[\"海晏县\",\"祁连县\",\"刚察县\",\"门源回族自治县\"],\"海南藏族自治州\":[\"共和县\",\"同德县\",\"贵德县\",\"兴海县\",\"贵南县\"],\"黄南藏族自治州\":[\"同仁县\",\"尖扎县\",\"泽库县\",\"河南蒙古族自治县\"],\"果洛藏族自治州\":[\"玛沁县\",\"班玛县\",\"甘德县\",\"达日县\",\"久治县\",\"玛多县\"],\"玉树藏族自治州\":[\"玉树县\",\"杂多县\",\"称多县\",\"治多县\",\"囊谦县\",\"曲麻莱县\"],\"海西蒙古族藏族自治州\":[\"德令哈市\",\"格尔木市\",\"乌兰县\",\"都兰县\",\"天峻县\"],\"呼和浩特市\":[\"回民区\",\"玉泉区\",\"新城区\",\"赛罕区\",\"托克托县\",\"清水河县\",\"武川县\",\"和林格尔县\",\"土默特左旗\"],\"包头市\":[\"昆都仑区\",\"青山区\",\"东河区\",\"九原区\",\"石拐区\",\"白云矿区\",\"固阳县\",\"土默特右旗\",\"达尔罕茂明安联合旗\"],\"乌海市\":[\"海勃湾区\",\"乌达区\",\"海南区\"],\"赤峰市\":[\"红山区\",\"元宝山区\",\"松山区\",\"宁城县\",\"林西县\",\"喀喇沁旗\",\"巴林左旗\",\"敖汉旗\",\"阿鲁科尔沁旗\",\"翁牛特旗\",\"克什克腾旗\",\"巴林右旗\"],\"通辽市\":[\"科尔沁区\",\"霍林郭勒市\",\"开鲁县\",\"科尔沁左翼中旗\",\"科尔沁左翼后旗\",\"库伦旗\",\"奈曼旗\",\"扎鲁特旗\"],\"鄂尔多斯市\":[\"东胜区\",\"准格尔旗\",\"乌审旗\",\"伊金霍洛旗\",\"鄂托克旗\",\"鄂托克前旗\",\"杭锦旗\",\"达拉特旗\"],\"呼伦贝尔市\":[\"海拉尔区\",\"满洲里市\",\"牙克石市\",\"扎兰屯市\",\"根河市\",\"额尔古纳市\",\"陈巴尔虎旗\",\"阿荣旗\",\"新巴尔虎左旗\",\"新巴尔虎右旗\",\"鄂伦春自治旗\",\"莫力达瓦达斡尔族自治旗\",\"鄂温克族自治旗\"],\"巴彦淖尔市\":[\"临河区\",\"五原县\",\"磴口县\",\"杭锦后旗\",\"乌拉特中旗\",\"乌拉特前旗\",\"乌拉特后旗\"],\"乌兰察布市\":[\"集宁区\",\"丰镇市\",\"兴和县\",\"卓资县\",\"商都县\",\"凉城县\",\"化德县\",\"四子王旗\",\"察哈尔右翼前旗\",\"察哈尔右翼中旗\",\"察哈尔右翼后旗\"],\"锡林郭勒盟\":[\"锡林浩特市\",\"二连浩特市\",\"多伦县\",\"阿巴嘎旗\",\"西乌珠穆沁旗\",\"东乌珠穆沁旗\",\"苏尼特左旗\",\"苏尼特右旗\",\"太仆寺旗\",\"正镶白旗\",\"正蓝旗\",\"镶黄旗\"],\"兴安盟\":[\"乌兰浩特市\",\"阿尔山市\",\"突泉县\",\"扎赉特旗\",\"科尔沁右翼前旗\",\"科尔沁右翼中旗\"],\"阿拉善盟\":[\"阿拉善左旗\",\"阿拉善右旗\",\"额济纳旗\"],\"南宁市\":[\"青秀区\",\"兴宁区\",\"西乡塘区\",\"良庆区\",\"江南区\",\"邕宁区\",\"武鸣县\",\"隆安县\",\"马山县\",\"上林县\",\"宾阳县\",\"横县\"],\"柳州市\":[\"城中区\",\"鱼峰区\",\"柳北区\",\"柳南区\",\"柳江县\",\"柳城县\",\"鹿寨县\",\"融安县\",\"融水苗族自治县\",\"三江侗族自治县\"],\"桂林市\":[\"象山区\",\"秀峰区\",\"叠彩区\",\"七星区\",\"雁山区\",\"阳朔县\",\"临桂县\",\"灵川县\",\"全州县\",\"平乐县\",\"兴安县\",\"灌阳县\",\"荔浦县\",\"资源县\",\"永福县\",\"龙胜各族自治县\",\"恭城瑶族自治县\"],\"梧州市\":[\"万秀区\",\"蝶山区\",\"长洲区\",\"岑溪市\",\"苍梧县\",\"藤县\",\"蒙山县\"],\"北海市\":[\"海城区\",\"银海区\",\"铁山港区\",\"合浦县\"],\"防城港市\":[\"港口区\",\"防城区\",\"东兴市\",\"上思县\"],\"钦州市\":[\"钦南区\",\"钦北区\",\"灵山县\",\"浦北县\"],\"贵港市\":[\"港北区\",\"港南区\",\"覃塘区\",\"桂平市\",\"平南县\"],\"玉林市\":[\"玉州区\",\"北流市\",\"容县\",\"陆川县\",\"博白县\",\"兴业县\"],\"百色市\":[\"右江区\",\"凌云县\",\"平果县\",\"西林县\",\"乐业县\",\"德保县\",\"田林县\",\"田阳县\",\"靖西县\",\"田东县\",\"那坡县\",\"隆林各族自治县\"],\"贺州市\":[\"八步区\",\"钟山县\",\"昭平县\",\"富川瑶族自治县\"],\"河池市\":[\"金城江区\",\"宜州市\",\"天峨县\",\"凤山县\",\"南丹县\",\"东兰县\",\"都安瑶族自治县\",\"罗城仫佬族自治县\",\"巴马瑶族自治县\",\"环江毛南族自治县\",\"大化瑶族自治县\"],\"来宾市\":[\"兴宾区\",\"合山市\",\"象州县\",\"武宣县\",\"忻城县\",\"金秀瑶族自治县\"],\"崇左市\":[\"江州区\",\"凭祥市\",\"宁明县\",\"扶绥县\",\"龙州县\",\"大新县\",\"天等县\"],\"拉萨市\":[\"城关区\",\"林周县\",\"当雄县\",\"尼木县\",\"曲水县\",\"堆龙德庆县\",\"达孜县\",\"墨竹工卡县\"],\"那曲地区\":[\"那曲县\",\"嘉黎县\",\"比如县\",\"聂荣县\",\"安多县\",\"申扎县\",\"索县\",\"班戈县\",\"巴青县\",\"尼玛县\"],\"昌都地区\":[\"昌都县\",\"江达县\",\"贡觉县\",\"类乌齐县\",\"丁青县\",\"察雅县\",\"八宿县\",\"左贡县\",\"芒康县\",\"洛隆县\",\"边坝县\"],\"林芝地区\":[\"林芝县\",\"工布江达县\",\"米林县\",\"墨脱县\",\"波密县\",\"察隅县\",\"朗县\"],\"山南地区\":[\"乃东县\",\"扎囊县\",\"贡嘎县\",\"桑日县\",\"琼结县\",\"曲松县\",\"措美县\",\"洛扎县\",\"加查县\",\"隆子县\",\"错那县\",\"浪卡子县\"],\"日喀则地区\":[\"日喀则市\",\"南木林县\",\"江孜县\",\"定日县\",\"萨迦县\",\"拉孜县\",\"昂仁县\",\"谢通门县\",\"白朗县\",\"仁布县\",\"康马县\",\"定结县\",\"仲巴县\",\"亚东县\",\"吉隆县\",\"聂拉木县\",\"萨嘎县\",\"岗巴县\"],\"阿里地区\":[\"噶尔县\",\"普兰县\",\"札达县\",\"日土县\",\"革吉县\",\"改则县\",\"措勤县\"],\"银川市\":[\"兴庆区\",\"西夏区\",\"金凤区\",\"灵武市\",\"永宁县\",\"贺兰县\"],\"石嘴山市\":[\"大武口区\",\"惠农区\",\"平罗县\"],\"吴忠市\":[\"利通区\",\"青铜峡市\",\"盐池县\",\"同心县\"],\"固原市\":[\"原州区\",\"西吉县\",\"隆德县\",\"泾源县\",\"彭阳县\"],\"中卫市\":[\"沙坡头区\",\"中宁县\",\"海原县\"],\"乌鲁木齐市\":[\"天山区\",\"沙依巴克区\",\"新市区\",\"水磨沟区\",\"头屯河区\",\"达坂城区\",\"米东区\",\"乌鲁木齐县\"],\"克拉玛依市\":[\"克拉玛依区\",\"独山子区\",\"白碱滩区\",\"乌尔禾区\"],\"吐鲁番地区\":[\"吐鲁番市\",\"托克逊县\",\"鄯善县\"],\"哈密地区\":[\"哈密市\",\"伊吾县\",\"巴里坤哈萨克自治县\"],\"和田地区\":[\"和田市\",\"和田县\",\"洛浦县\",\"民丰县\",\"皮山县\",\"策勒县\",\"于田县\",\"墨玉县\"],\"阿克苏地区\":[\"阿克苏市\",\"温宿县\",\"沙雅县\",\"拜城县\",\"阿瓦提县\",\"库车县\",\"柯坪县\",\"新和县\",\"乌什县\"],\"喀什地区\":[\"喀什市\",\"巴楚县\",\"泽普县\",\"伽师县\",\"叶城县\",\"岳普湖县\",\"疏勒县\",\"麦盖提县\",\"英吉沙县\",\"莎车县\",\"疏附县\",\"塔什库尔干塔吉克自治县\"],\"克孜勒苏柯尔克孜自治州\":[\"阿图什市\",\"阿合奇县\",\"乌恰县\",\"阿克陶县\"],\"巴音郭楞蒙古自治州\":[\"库尔勒市\",\"和静县\",\"尉犁县\",\"和硕县\",\"且末县\",\"博湖县\",\"轮台县\",\"若羌县\",\"焉耆回族自治县\"],\"昌吉回族自治州\":[\"昌吉市\",\"阜康市\",\"奇台县\",\"玛纳斯县\",\"吉木萨尔县\",\"呼图壁县\",\"木垒哈萨克自治县\"],\"博尔塔拉蒙古自治州\":[\"博乐市\",\"精河县\",\"温泉县\"],\"石河子市\":[],\"阿拉尔市\":[],\"图木舒克市\":[],\"五家渠市\":[],\"伊犁哈萨克自治州\":[\"伊宁市\",\"奎屯市\",\"伊宁县\",\"特克斯县\",\"尼勒克县\",\"昭苏县\",\"新源县\",\"霍城县\",\"巩留县\",\"察布查尔锡伯自治县\"],\"塔城地区\":[\"塔城市\",\"乌苏市\",\"额敏县\",\"裕民县\",\"沙湾县\",\"托里县\",\"和布克赛尔蒙古自治县\"],\"阿勒泰地区\":[\"阿勒泰市\",\"青河县\",\"吉木乃县\",\"富蕴县\",\"布尔津县\",\"福海县\",\"哈巴河县\"],\"中西区\":[],\"湾仔区\":[],\"东区\":[],\"南区\":[],\"黄大仙区\":[],\"观塘区\":[],\"深水埗区\":[],\"油尖旺区\":[],\"九龙城区\":[],\"北区\":[],\"大埔区\":[],\"沙田区\":[],\"西贡区\":[],\"元朗区\":[],\"屯门区\":[],\"荃湾区\":[],\"葵青区\":[],\"离岛区\":[],\"花地玛堂区\":[],\"圣安多尼堂区\":[],\"大堂区\":[],\"望德堂区\":[],\"风顺堂区\":[],\"氹仔\":[],\"路环\":[],\"路氹城\":[],\"台北市\":[],\"高雄市\":[],\"基隆市\":[],\"新竹市\":[],\"台中市\":[],\"嘉义市\":[],\"台南市\":[],\"台北县\":[],\"桃园县\":[],\"新竹县\":[],\"苗栗县\":[],\"台中县\":[],\"彰化县\":[],\"南投县\":[],\"云林县\":[],\"嘉义县\":[],\"台南县\":[],\"高雄县\":[],\"屏东县\":[],\"宜兰县\":[],\"花莲县\":[],\"台东县\":[],\"澎湖县\":[],\"金门县\":[],\"连江县\":[]}"); - - #endregion - - #region 表格相关 - - /// - /// 选中的行 - /// - /// - /// - protected string HowManyRowsAreSelected(Grid grid) - { - StringBuilder sb = new StringBuilder(); - int selectedCount = grid.SelectedRowIndexArray.Length; - if (selectedCount > 0) - { - sb.AppendFormat("共选中了 {0} 行:", selectedCount); - sb.Append(""); - - sb.Append(""); - foreach (string datakey in grid.DataKeyNames) - { - sb.AppendFormat("", datakey); - } - sb.Append(""); - - - for (int i = 0; i < selectedCount; i++) - { - int rowIndex = grid.SelectedRowIndexArray[i]; - sb.Append(""); - - sb.AppendFormat("", rowIndex + 1); - - // 如果是内存分页,所有分页的数据都存在,rowIndex 就是在全部数据中的顺序,而不是当前页的顺序 - if (grid.AllowPaging && !grid.IsDatabasePaging) - { - rowIndex = grid.PageIndex * grid.PageSize + rowIndex; - } - - object[] dataKeys = grid.DataKeys[rowIndex]; - for (int j = 0; j < dataKeys.Length; j++) - { - sb.AppendFormat("", dataKeys[j]); - } - - sb.Append(""); - } - sb.Append("
行号{0}
{0}{0}
"); - } - else - { - sb.Append("没有选中任何一行!"); - } - - return sb.ToString(); - } - - /// - /// 获取性别的字面值,在 ASPX 中调用 - /// - /// - /// - protected string GetGender(object gender) - { - if (Convert.ToInt32(gender) == 1) - { - return "男"; - } - else - { - return "女"; - } - } - - protected DataTable GetClassDataTable() - { - DataTable table = new DataTable(); - table.Columns.Add(new DataColumn("Id", typeof(int))); - table.Columns.Add(new DataColumn("Name", typeof(String))); - table.Columns.Add(new DataColumn("EntranceYear", typeof(String))); - table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); - table.Columns.Add(new DataColumn("Desc", typeof(string))); - - DataRow row = table.NewRow(); - - row[0] = 101; - row[1] = "班级一"; - row[2] = "2000"; - row[3] = DateTime.Parse("2000-09-01"); - row[4] = "班级一创建于2000年9月1号,班长胡飞,连续三年获得全校优秀班级称号。"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 102; - row[1] = "班级二"; - row[2] = "2005"; - row[3] = DateTime.Parse("2005-09-01"); - row[4] = "班级一创建于2005年9月1号,班长董婷婷,连续两年获得全校优秀班级称号。"; - table.Rows.Add(row); - - return table; - } - - - /// - /// 获取模拟表格2 - /// - /// - protected DataTable GetDataTable2() - { - DataTable table = new DataTable(); - table.Columns.Add(new DataColumn("Id", typeof(int))); - table.Columns.Add(new DataColumn("Name", typeof(String))); - table.Columns.Add(new DataColumn("EntranceYear", typeof(String))); - table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); - table.Columns.Add(new DataColumn("Major", typeof(String))); - table.Columns.Add(new DataColumn("Group", typeof(int))); - table.Columns.Add(new DataColumn("Gender", typeof(int))); - table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); - table.Columns.Add(new DataColumn("Desc", typeof(string))); - table.Columns.Add(new DataColumn("Guid", typeof(Guid))); - table.Columns.Add(new DataColumn("Hobby", typeof(String))); - table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); - table.Columns.Add(new DataColumn("Donate", typeof(int))); - table.Columns.Add(new DataColumn("Fee", typeof(int))); - // Hobby:reading,basketball,travel,movie,music - // 爱好:读书, 篮球, 旅游, 电影, 音乐 - - DataRow row = null; - - row = table.NewRow(); - row[0] = 101; - row[1] = "陈萍萍"; - row[2] = "2000"; - row[3] = true; - row[4] = "计算机应用技术"; - row[5] = 1; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-100); - row[8] = "陈萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball,travel"; - row[11] = "2000-09-01"; - row[12] = 299; - row[13] = 2990; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 102; - row[1] = "胡飞"; - row[2] = "2008"; - row[3] = false; - row[4] = "信息工程"; - row[5] = 1; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-90); - row[8] = "胡飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball"; - row[11] = "2008-09-01"; - row[12] = 199; - row[13] = 1990; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 103; - row[1] = "金婷婷"; - row[2] = "2001"; - row[3] = true; - row[4] = "会计学"; - row[5] = 2; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-80); - row[8] = "金婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball,music"; - row[11] = "2001-09-01"; - row[12] = 299; - row[13] = 3990; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 104; - row[1] = "潘国"; - row[2] = "2008"; - row[3] = false; - row[4] = "国际经济与贸易"; - row[5] = 2; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-70); - row[8] = "潘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,music"; - row[11] = "2008-09-01"; - row[12] = 399; - row[13] = 3998; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 105; - row[1] = "吴颖颖"; - row[2] = "2002"; - row[3] = true; - row[4] = "市场营销"; - row[5] = 3; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-60); - row[8] = "吴颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,movie,music"; - row[11] = "2002-09-01"; - row[12] = 499; - row[13] = 4992; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 106; - row[1] = "张博"; - row[2] = "2003"; - row[3] = false; - row[4] = "财务管理"; - row[5] = 3; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-50); - row[8] = "张博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "movie,music"; - row[11] = "2003-09-01"; - row[12] = 99; - row[13] = 997; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 107; - row[1] = "杨倩倩"; - row[2] = "2000"; - row[3] = true; - row[4] = "材料物理与化学"; - row[5] = 4; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-40); - row[8] = "杨倩倩,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "travel,movie,music"; - row[11] = "2000-09-01"; - row[12] = 399; - row[13] = 3995; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 108; - row[1] = "董超"; - row[2] = "2004"; - row[3] = false; - row[4] = "生物医学工程"; - row[5] = 4; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-30); - row[8] = "董超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "basketball,movie,music"; - row[11] = "2004-09-01"; - row[12] = 299; - row[13] = 2996; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 109; - row[1] = "张娟娟"; - row[2] = "2003"; - row[3] = true; - row[4] = "土木工程"; - row[5] = 5; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-20); - row[8] = "张娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,travel,movie,music"; - row[11] = "2003-09-01"; - row[12] = 599; - row[13] = 5990; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 110; - row[1] = "叶鹏"; - row[2] = "2006"; - row[3] = false; - row[4] = "电子商务"; - row[5] = 5; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-10); - row[8] = "叶鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,movie,music"; - row[11] = "2006-09-01"; - row[12] = 699; - row[13] = 6990; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 111; - row[1] = "李玲玲"; - row[2] = "2002"; - row[3] = true; - row[4] = "管理学"; - row[5] = 5; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-5); - row[8] = "李玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,travel,music"; - row[11] = "2002-09-01"; - row[12] = 399; - row[13] = 3990; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 112; - row[1] = "张萍萍"; - row[2] = "2000"; - row[3] = true; - row[4] = "计算机应用技术"; - row[5] = 1; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-100); - row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball,travel"; - row[11] = "2000-09-01"; - row[12] = 299; - row[13] = 2999; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 113; - row[1] = "曹飞"; - row[2] = "2008"; - row[3] = false; - row[4] = "信息工程"; - row[5] = 1; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-90); - row[8] = "曹飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball"; - row[11] = "2008-09-01"; - row[12] = 399; - row[13] = 3996; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 114; - row[1] = "孙婷婷"; - row[2] = "2001"; - row[3] = true; - row[4] = "会计学"; - row[5] = 2; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-80); - row[8] = "孙婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball,music"; - row[11] = "2001-09-01"; - row[12] = 499; - row[13] = 4990; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 115; - row[1] = "董国"; - row[2] = "2008"; - row[3] = false; - row[4] = "国际经济与贸易"; - row[5] = 2; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-70); - row[8] = "董国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,music"; - row[11] = "2008-09-01"; - row[12] = 299; - row[13] = 2992; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 116; - row[1] = "习颖颖"; - row[2] = "2002"; - row[3] = true; - row[4] = "市场营销"; - row[5] = 3; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-60); - row[8] = "习颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,movie,music"; - row[11] = "2002-09-01"; - row[12] = 199; - row[13] = 1990; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 117; - row[1] = "李博"; - row[2] = "2003"; - row[3] = false; - row[4] = "财务管理"; - row[5] = 3; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-50); - row[8] = "李博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "movie,music"; - row[11] = "2003-09-01"; - row[12] = 99; - row[13] = 990; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 118; - row[1] = "黄倩倩"; - row[2] = "2000"; - row[3] = true; - row[4] = "材料物理与化学"; - row[5] = 4; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-40); - row[8] = "黄倩倩,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "travel,movie,music"; - row[11] = "2000-09-01"; - row[12] = 399; - row[13] = 3990; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 119; - row[1] = "韩超"; - row[2] = "2004"; - row[3] = false; - row[4] = "生物医学工程"; - row[5] = 4; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-30); - row[8] = "韩超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "basketball,movie,music"; - row[11] = "2004-09-01"; - row[12] = 399; - row[13] = 3991; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 120; - row[1] = "王娟娟"; - row[2] = "2003"; - row[3] = true; - row[4] = "土木工程"; - row[5] = 5; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-20); - row[8] = "王娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,travel,movie,music"; - row[11] = "2003-09-01"; - row[12] = 399; - row[13] = 3992; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 121; - row[1] = "周鹏"; - row[2] = "2006"; - row[3] = false; - row[4] = "电子商务"; - row[5] = 5; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-10); - row[8] = "周鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,movie,music"; - row[11] = "2006-09-01"; - row[12] = 299; - row[13] = 2992; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 122; - row[1] = "吴玲玲"; - row[2] = "2002"; - row[3] = true; - row[4] = "管理学"; - row[5] = 5; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-5); - row[8] = "吴玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,travel,music"; - row[11] = "2002-09-01"; - row[12] = 399; - row[13] = 3993; - table.Rows.Add(row); - - - return table; - } - - /// - /// 获取模拟表格 - /// - /// - protected DataTable GetDataTable() - { - DataTable table = new DataTable(); - table.Columns.Add(new DataColumn("Id", typeof(int))); - table.Columns.Add(new DataColumn("Name", typeof(String))); - table.Columns.Add(new DataColumn("EntranceYear", typeof(String))); - table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); - table.Columns.Add(new DataColumn("Major", typeof(String))); - table.Columns.Add(new DataColumn("Group", typeof(int))); - table.Columns.Add(new DataColumn("Gender", typeof(int))); - table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); - table.Columns.Add(new DataColumn("Desc", typeof(string))); - table.Columns.Add(new DataColumn("Guid", typeof(Guid))); - table.Columns.Add(new DataColumn("Hobby", typeof(String))); - table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); - // Hobby:reading,basketball,travel,movie,music - // 爱好:读书, 篮球, 旅游, 电影, 音乐 - table.Columns.Add(new DataColumn("ChineseScore", typeof(Int32))); - table.Columns.Add(new DataColumn("MathScore", typeof(Int32))); - table.Columns.Add(new DataColumn("TotalScore", typeof(Int32))); - - - DataRow row = table.NewRow(); - row[0] = 101; - row[1] = "张萍萍"; - row[2] = "2000"; - row[3] = true; - row[4] = "材料科学与工程系"; - row[5] = 1; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-100); - row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,travel,music"; - row[11] = "2000-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 102; - row[1] = "陈飞"; - row[2] = "2001"; - row[3] = false; - row[4] = "化学系"; - row[5] = 1; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-90); - row[8] = "陈飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "basketball,travel,movie,reading,music"; - row[11] = "2001-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 103; - row[1] = "董婷婷"; - row[2] = "2008"; - row[3] = true; - row[4] = "化学系"; - row[5] = 2; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-80); - row[8] = "董婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "basketball,movie,music"; - row[11] = "2008-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 104; - row[1] = "刘国"; - row[2] = "2002"; - row[3] = false; - row[4] = "化学系"; - row[5] = 2; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-70); - row[8] = "刘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball,movie"; - row[11] = "2002-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 105; - row[1] = "康颖颖"; - row[2] = "2008"; - row[3] = true; - row[4] = "数学系"; - row[5] = 3; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-60); - row[8] = "康颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,travel,movie,music"; - row[11] = "2008-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 106; - row[1] = "彭博"; - row[2] = "2003"; - row[3] = false; - row[4] = "数学系"; - row[5] = 3; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-50); - row[8] = "彭博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "basketball,travel,music"; - row[11] = "2003-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 107; - row[1] = "黄倩倩"; - row[2] = "2000"; - row[3] = true; - row[4] = "数学系"; - row[5] = 4; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-40); - row[8] = "黄倩倩,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "travel,movie,music,reading"; - row[11] = "2000-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 108; - row[1] = "唐超"; - row[2] = "2004"; - row[3] = false; - row[4] = "物理系"; - row[5] = 4; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-30); - row[8] = "唐超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,movie,music,basketball"; - row[11] = "2004-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - - row = table.NewRow(); - row[0] = 109; - row[1] = "杨娟娟"; - row[2] = "2003"; - row[3] = true; - row[4] = "物理系"; - row[5] = 5; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-20); - row[8] = "杨娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball,movie"; - row[11] = "2003-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 110; - row[1] = "徐鹏"; - row[2] = "2002"; - row[3] = false; - row[4] = "物理系"; - row[5] = 5; - row[6] = 1; - row[7] = DateTime.Now.AddDays(-10); - row[8] = "徐鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,basketball,travel"; - row[11] = "2002-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = 111; - row[1] = "纪玲玲"; - row[2] = "2006"; - row[3] = true; - row[4] = "自动化系"; - row[5] = 5; - row[6] = 0; - row[7] = DateTime.Now.AddDays(-5); - row[8] = "纪玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; - row[9] = Guid.NewGuid(); - row[10] = "reading,movie,music,basketball"; - row[11] = "2006-09-01"; - row[12] = 0; - row[13] = 0; - row[14] = 0; - table.Rows.Add(row); - - - return table; - } - - /// - /// 获取空数据表 - /// - /// - protected DataTable GetEmptyDataTable() - { - DataTable table = new DataTable(); - table.Columns.Add(new DataColumn("Id", typeof(int))); - table.Columns.Add(new DataColumn("Name", typeof(String))); - table.Columns.Add(new DataColumn("EntranceYear", typeof(String))); - table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); - table.Columns.Add(new DataColumn("Major", typeof(String))); - table.Columns.Add(new DataColumn("Group", typeof(int))); - table.Columns.Add(new DataColumn("Gender", typeof(int))); - - - return table; - } - - - #endregion - - #region 压缩ViewState - - //protected override object LoadPageStateFromPersistenceMedium() - //{ - // string gzippedState = Request.Form[StringUtil.GZIPPED_VIEWSTATE_ID]; - // return StringUtil.LoadGzippedViewState(gzippedState); - //} - - //protected override void SavePageStateToPersistenceMedium(object viewState) - //{ - // ClientScript.RegisterHiddenField(StringUtil.GZIPPED_VIEWSTATE_ID, StringUtil.GenerateGzippedViewState(viewState)); - //} - - #endregion - - } - -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.IO; + + +namespace FineUI.Examples +{ + public class PageBase : System.Web.UI.Page + { + #region OnInit + + protected override void OnInit(EventArgs e) + { + var pm = PageManager.Instance; + + // 如果不是FineUI的AJAX回发(两种情况:1.页面第一个加载 2.页面非AJAX回发) + if (pm != null && !pm.IsFineUIAjaxPostBack) + { + HttpCookie themeCookie = Request.Cookies["Theme_v4"]; + if (themeCookie != null) + { + try + { + string themeValue = themeCookie.Value; + pm.Theme = (Theme)Enum.Parse(typeof(Theme), themeValue, true); + } + catch (Exception) + { + pm.Theme = FineUI.Theme.Neptune; + } + } + + HttpCookie langCookie = Request.Cookies["Language_v4"]; + if (langCookie != null) + { + try + { + string langValue = langCookie.Value; + pm.Language = (Language)Enum.Parse(typeof(Language), langValue, true); + } + catch (Exception) + { + pm.Language = Language.ZH_CN; + } + } + } + + + base.OnInit(e); + } + + private bool IsSystemTheme(string themeName) + { + themeName = themeName.ToLower(); + string[] themes = Enum.GetNames(typeof(Theme)); + foreach (string theme in themes) + { + if (theme.ToLower() == themeName) + { + return true; + } + } + return false; + } + + #endregion + + #region 上传文件类型判断 + + protected readonly static List VALID_FILE_TYPES = new List { "jpg", "bmp", "gif", "jpeg", "png" }; + + protected static bool ValidateFileType(string fileName) + { + string fileType = String.Empty; + int lastDotIndex = fileName.LastIndexOf("."); + if (lastDotIndex >= 0) + { + fileType = fileName.Substring(lastDotIndex + 1).ToLower(); + } + + if (VALID_FILE_TYPES.Contains(fileType)) + { + return true; + } + else + { + return false; + } + } + + + #endregion + + #region 省市县 + + protected readonly static JArray SHENG_JSON = JArray.Parse("[\"北京\",\"天津\",\"上海\",\"重庆\",\"河北\",\"山西\",\"辽宁\",\"吉林\",\"黑龙江\",\"江苏\",\"浙江\",\"安徽\",\"福建\",\"江西\",\"山东\",\"河南\",\"湖北\",\"湖南\",\"广东\",\"海南\",\"四川\",\"贵州\",\"云南\",\"陕西\",\"甘肃\",\"青海\",\"内蒙古\",\"广西\",\"西藏\",\"宁夏\",\"新疆\",\"香港\",\"澳门\",\"台湾\"]"); + protected readonly static JObject SHI_JSON = JObject.Parse("{\"北京\":[\"北京市\"],\"天津\":[\"天津市\"],\"上海\":[\"上海市\"],\"重庆\":[\"重庆市\"],\"河北\":[\"石家庄市\",\"唐山市\",\"秦皇岛市\",\"邯郸市\",\"邢台市\",\"保定市\",\"张家口市\",\"承德市\",\"沧州市\",\"廊坊市\",\"衡水市\"],\"山西\":[\"太原市\",\"大同市\",\"阳泉市\",\"长治市\",\"晋城市\",\"朔州市\",\"晋中市运城市忻州市\",\"临汾市\",\"吕梁市\"],\"辽宁\":[\"沈阳市\",\"大连市\",\"鞍山市\",\"抚顺市\",\"本溪市\",\"丹东市\",\"锦州市\",\"营口市\",\"阜新市\",\"辽阳市\",\"盘锦市\",\"铁岭市\",\"朝阳市\",\"葫芦岛市\"],\"吉林\":[\"长春市\",\"吉林市\",\"四平市\",\"辽源市\",\"通化市\",\"白山市\",\"松原市\",\"白城市\",\"延边朝鲜族自治州\"],\"黑龙江\":[\"哈尔滨市\",\"齐齐哈尔市\",\"鹤岗市\",\"双鸭山市\",\"鸡西市\",\"大庆市\",\"伊春市\",\"牡丹江市\",\"佳木斯市\",\"七台河市\",\"黑河市\",\"绥化市\",\"大兴安岭地区\"],\"江苏\":[\"南京市\",\"苏州市\",\"无锡市\",\"常州市\",\"镇江市\",\"南通市\",\"泰州市\",\"扬州市\",\"盐城市\",\"连云港市\",\"徐州市\",\"淮安市\",\"宿迁市\"],\"浙江\":[\"杭州市\",\"宁波市\",\"温州市\",\"嘉兴市\",\"湖州市\",\"绍兴市\",\"金华市\",\"衢州市\",\"舟山市\",\"台州市\",\"丽水市\"],\"安徽\":[\"合肥市\",\"芜湖市\",\"蚌埠市\",\"淮南市\",\"马鞍山市\",\"淮北市\",\"铜陵市\",\"安庆市\",\"黄山市\",\"滁州市\",\"阜阳市\",\"宿州市\",\"巢湖市\",\"六安市\",\"亳州市\",\"池州市\",\"宣城市\"],\"福建\":[\"福州市\",\"厦门市\",\"莆田市\",\"三明市\",\"泉州市\",\"漳州市\",\"南平市\",\"龙岩市\",\"宁德市\"],\"江西\":[\"南昌市\",\"景德镇市\",\"萍乡市\",\"九江市\",\"新余市\",\"鹰潭市\",\"赣州市\",\"吉安市\",\"宜春市\",\"抚州市\",\"上饶市\"],\"山东\":[\"济南市\",\"青岛市\",\"淄博市\",\"枣庄市\",\"东营市\",\"烟台市\",\"潍坊市\",\"济宁市\",\"泰安市\",\"威海市\",\"日照市\",\"莱芜市\",\"临沂市\",\"德州市\",\"聊城市\",\"滨州市\",\"菏泽市\"],\"河南\":[\"郑州市\",\"开封市\",\"洛阳市\",\"平顶山市\",\"安阳市\",\"鹤壁市\",\"新乡市\",\"焦作市\",\"濮阳市\",\"许昌市\",\"漯河市\",\"三门峡市\",\"南阳市\",\"商丘市\",\"信阳市\",\"周口市\",\"驻马店市\",\"济源市\"],\"湖北\":[\"武汉市\",\"黄石市\",\"十堰市\",\"荆州市\",\"宜昌市\",\"襄樊市\",\"鄂州市\",\"荆门市\",\"孝感市\",\"黄冈市\",\"咸宁市\",\"随州市\",\"恩施土家族苗族自治州\",\"仙桃市\",\"天门市\",\"潜江市\",\"神农架林区\"],\"湖南\":[\"长沙市\",\"株洲市\",\"湘潭市\",\"衡阳市\",\"邵阳市\",\"岳阳市\",\"常德市\",\"张家界市\",\"益阳市\",\"郴州市\",\"永州市\",\"怀化市\",\"娄底市\",\"湘西土家族苗族自治州\"],\"广东\":[\"广州市\",\"深圳市\",\"珠海市\",\"汕头市\",\"韶关市\",\"佛山市\",\"江门市\",\"湛江市\",\"茂名市\",\"肇庆市\",\"惠州市\",\"梅州市\",\"汕尾市\",\"河源市\",\"阳江市\",\"清远市\",\"东莞市\",\"中山市\",\"潮州市\",\"揭阳市\",\"云浮市\"],\"海南\":[\"海口市\",\"三亚市\",\"五指山市\",\"琼海市\",\"儋州市\",\"文昌市\",\"万宁市\",\"东方市\",\"澄迈县\",\"定安县\",\"屯昌县\",\"临高县\",\"白沙黎族自治县\",\"昌江黎族自治县\",\"乐东黎族自治县\",\"陵水黎族自治县\",\"保亭黎族苗族自治县\",\"琼中黎族苗族自治县\"],\"四川\":[\"成都市\",\"自贡市\",\"攀枝花市\",\"泸州市\",\"德阳市\",\"绵阳市\",\"广元市\",\"遂宁市\",\"内江市\",\"乐山市\",\"南充市\",\"眉山市\",\"宜宾市\",\"广安市\",\"达州市\",\"雅安市\",\"巴中市\",\"资阳市\",\"阿坝藏族羌族自治州\",\"甘孜藏族自治州\",\"凉山彝族自治州\"],\"贵州\":[\"贵阳市\",\"六盘水市\",\"遵义市\",\"安顺市\",\"铜仁地区\",\"毕节地区\",\"黔西南布依族苗族自治州\",\"黔东南苗族侗族自治州\",\"黔南布依族苗族自治州\"],\"云南\":[\"昆明市\",\"曲靖市\",\"玉溪市\",\"保山市\",\"昭通市\",\"丽江市\",\"普洱市\",\"临沧市\",\"德宏傣族景颇族自治州\",\"怒江傈僳族自治州\",\"迪庆藏族自治州\",\"大理白族自治州\",\"楚雄彝族自治州\",\"红河哈尼族彝族自治州\",\"文山壮族苗族自治州\",\"西双版纳傣族自治州\"],\"陕西\":[\"西安市\",\"铜川市\",\"宝鸡市\",\"咸阳市\",\"渭南市\",\"延安市\",\"汉中市\",\"榆林市\",\"安康市\",\"商洛市\"],\"甘肃\":[\"兰州市\",\"嘉峪关市\",\"金昌市\",\"白银市\",\"天水市\",\"武威市\",\"酒泉市\",\"张掖市\",\"庆阳市\",\"平凉市\",\"定西市\",\"陇南市\",\"临夏回族自治州\",\"甘南藏族自治州\"],\"青海\":[\"西宁市\",\"海东地区\",\"海北藏族自治州\",\"海南藏族自治州\",\"黄南藏族自治州\",\"果洛藏族自治州\",\"玉树藏族自治州\",\"海西蒙古族藏族自治州\"],\"内蒙古\":[\"呼和浩特市\",\"包头市\",\"乌海市\",\"赤峰市\",\"通辽市\",\"鄂尔多斯市\",\"呼伦贝尔市\",\"巴彦淖尔市\",\"乌兰察布市\",\"锡林郭勒盟\",\"兴安盟\",\"阿拉善盟\"],\"广西\":[\"南宁市\",\"柳州市\",\"桂林市\",\"梧州市\",\"北海市\",\"防城港市\",\"钦州市\",\"贵港市\",\"玉林市\",\"百色市\",\"贺州市\",\"河池市\",\"来宾市\",\"崇左市\"],\"西藏\":[\"拉萨市\",\"那曲地区\",\"昌都地区\",\"林芝地区\",\"山南地区\",\"日喀则地区\",\"阿里地区\"],\"宁夏\":[\"银川市\",\"石嘴山市\",\"吴忠市\",\"固原市\",\"中卫市\"],\"新疆\":[\"乌鲁木齐市\",\"克拉玛依市\",\"吐鲁番地区\",\"哈密地区\",\"和田地区\",\"阿克苏地区\",\"喀什地区\",\"克孜勒苏柯尔克孜自治州\",\"巴音郭楞蒙古自治州\",\"昌吉回族自治州\",\"博尔塔拉蒙古自治州\",\"石河子市\",\"阿拉尔市\",\"图木舒克市\",\"五家渠市\",\"伊犁哈萨克自治州\",\"塔城地区\",\"阿勒泰地区\"],\"香港\":[\"中西区\",\"湾仔区\",\"东区\",\"南区\",\"黄大仙区\",\"观塘区\",\"深水埗区\",\"油尖旺区\",\"九龙城区\",\"北区\",\"大埔区\",\"沙田区\",\"西贡区\",\"元朗区\",\"屯门区\",\"荃湾区\",\"葵青区\",\"离岛区\"],\"澳门\":[\"花地玛堂区\",\"圣安多尼堂区\",\"大堂区\",\"望德堂区\",\"风顺堂区\",\"氹仔\",\"路环\",\"路氹城\"],\"台湾\":[\"台北市\",\"高雄市\",\"基隆市\",\"新竹市\",\"台中市\",\"嘉义市\",\"台南市\",\"台北县\",\"桃园县\",\"新竹县\",\"苗栗县\",\"台中县\",\"彰化县\",\"南投县\",\"云林县\",\"嘉义县\",\"台南县\",\"高雄县\",\"屏东县\",\"宜兰县\",\"花莲县\",\"台东县\",\"澎湖县\",\"金门县\",\"连江县\"]}"); + protected readonly static JObject XIAN_JSON = JObject.Parse("{\"北京市\":[\"东城区\",\"西城区\",\"崇文区\",\"宣武区\",\"朝阳区\",\"丰台区\",\"石景山区\",\"海淀区\",\"门头沟区\",\"房山区\",\"通州区\",\"顺义区\",\"昌平区\",\"大兴区\",\"怀柔区\",\"平谷区\",\"密云县\",\"延庆县\"],\"天津市\":[\"和平区\",\"河东区\",\"河西区\",\"南开区\",\"河北区\",\"红桥区\",\"塘沽区\",\"汉沽区\",\"大港区\",\"东丽区\",\"西青区\",\"北辰区\",\"津南区\",\"武清区\",\"宝坻区\",\"静海县\",\"宁河县\",\"蓟县\"],\"上海市\":[\"黄浦区\",\"卢湾区\",\"徐汇区\",\"长宁区\",\"静安区\",\"普陀区\",\"闸北区\",\"虹口区\",\"杨浦区\",\"宝山区\",\"闵行区\",\"嘉定区\",\"松江区\",\"金山区\",\"青浦区\",\"奉贤区\",\"浦东新区\",\"崇明县\"],\"重庆市\":[\"渝中区\",\"大渡口区\",\"江北区\",\"南岸区\",\"北碚区\",\"渝北区\",\"巴南区\",\"长寿区\",\"双桥区\",\"沙坪坝区\",\"万盛区\",\"万州区\",\"涪陵区\",\"黔江区\",\"永川区\",\"合川区\",\"江津区\",\"九龙坡区\",\"南川区\",\"綦江县\",\"潼南县\",\"荣昌县\",\"璧山县\",\"大足县\",\"铜梁县\",\"梁平县\",\"开县\",\"忠县\",\"城口县\",\"垫江县\",\"武隆县\",\"丰都县\",\"奉节县\",\"云阳县\",\"巫溪县\",\"巫山县\",\"石柱土家族自治县\",\"秀山土家族苗族自治县\",\"酉阳土家族苗族自治县\",\"彭水苗族土家族自治县\"],\"石家庄市\":[\"长安区\",\"桥东区\",\"桥西区\",\"新华区\",\"裕华区\",\"井陉矿区\",\"鹿泉市\",\"辛集市\",\"藁城市\",\"晋州市\",\"新乐市\",\"深泽县\",\"无极县\",\"赵县\",\"灵寿县\",\"高邑县\",\"元氏县\",\"赞皇县\",\"平山县\",\"井陉县\",\"栾城县\",\"正定县\",\"行唐县\"],\"唐山市\":[\"路北区\",\"路南区\",\"古冶区\",\"开平区\",\"丰南区\",\"丰润区\",\"遵化市\",\"迁安市\",\"迁西县\",\"滦南县\",\"玉田县\",\"唐海县\",\"乐亭县\",\"滦县\",\"汉沽管理区\"],\"秦皇岛市\":[\"海港区\",\"山海关区\",\"北戴河区\",\"昌黎县\",\"抚宁县\",\"卢龙县\",\"青龙满族自治县\"],\"邯郸市\":[\"邯山区\",\"丛台区\",\"复兴区\",\"峰峰矿区\",\"武安市\",\"邱县\",\"大名县\",\"魏县\",\"曲周县\",\"鸡泽县\",\"肥乡县\",\"广平县\",\"成安县\",\"临漳县\",\"磁县\",\"涉县\",\"永年县\",\"馆陶县\",\"邯郸县\"],\"邢台市\":[\"桥东区\",\"桥西区\",\"南宫市\",\"沙河市\",\"临城县\",\"内丘县\",\"柏乡县\",\"隆尧县\",\"任县\",\"南和县\",\"宁晋县\",\"巨鹿县\",\"新河县\",\"广宗县\",\"平乡县\",\"威县\",\"清河县\",\"临西县\",\"邢台县\"],\"保定市\":[\"新市区\",\"北市区\",\"南市区\",\"定州市\",\"涿州市\",\"安国市\",\"高碑店市\",\"易县\",\"徐水县\",\"涞源县\",\"顺平县\",\"唐县\",\"望都县\",\"涞水县\",\"高阳县\",\"安新县\",\"雄县\",\"容城县\",\"蠡县\",\"曲阳县\",\"阜平县\",\"博野县\",\"满城县\",\"清苑县\",\"定兴县\"],\"张家口市\":[\"桥东区\",\"桥西区\",\"宣化区\",\"下花园区\",\"张北县\",\"康保县\",\"沽源县\",\"尚义县\",\"蔚县\",\"阳原县\",\"怀安县\",\"万全县\",\"怀来县\",\"赤城县\",\"崇礼县\",\"宣化县\",\"涿鹿县\",\"塞北管理区\"],\"承德市\":[\"双桥区\",\"双滦区\",\"鹰手营子矿区\",\"兴隆县\",\"平泉县\",\"滦平县\",\"隆化县\",\"承德县\",\"丰宁满族自治县\",\"宽城满族自治县\",\"围场满族蒙古族自治县\"],\"沧州市\":[\"新华区\",\"运河区\",\"泊头市\",\"任丘市\",\"黄骅市\",\"河间市\",\"献县\",\"吴桥县\",\"沧县\",\"东光县\",\"肃宁县\",\"南皮县\",\"盐山县\",\"青县\",\"海兴县\",\"孟村回族自治县\"],\"廊坊市\":[\"安次区\",\"广阳区\",\"霸州市\",\"三河市\",\"香河县\",\"永清县\",\"固安县\",\"文安县\",\"大城县\",\"大厂回族自治县\"],\"衡水市\":[\"桃城区\",\"冀州市\",\"深州市\",\"枣强县\",\"武邑县\",\"武强县\",\"饶阳县\",\"安平县\",\"故城县\",\"景县\",\"阜城县\"],\"太原市\":[\"杏花岭区\",\"小店区\",\"迎泽区\",\"尖草坪区\",\"万柏林区\",\"晋源区\",\"古交市\",\"阳曲县\",\"清徐县\",\"娄烦县\"],\"大同市\":[\"城区\",\"矿区\",\"南郊区\",\"新荣区\",\"大同县\",\"天镇县\",\"灵丘县\",\"阳高县\",\"左云县\",\"广灵县\",\"浑源县\"],\"阳泉市\":[\"城区\",\"矿区\",\"郊区\",\"平定县\",\"盂县\"],\"长治市\":[\"城区\",\"郊区\",\"潞城市\",\"长治县\",\"长子县\",\"平顺县\",\"襄垣县\",\"沁源县\",\"屯留县\",\"黎城县\",\"武乡县\",\"沁县\",\"壶关县\"],\"晋城市\":[\"城区\",\"高平市\",\"泽州县\",\"陵川县\",\"阳城县\",\"沁水县\"],\"朔州市\":[\"朔城区\",\"平鲁区\",\"山阴县\",\"右玉县\",\"应县\",\"怀仁县\"],\"晋中市\":[\"榆次区\",\"介休市\",\"昔阳县\",\"灵石县\",\"祁县\",\"左权县\",\"寿阳县\",\"太谷县\",\"和顺县\",\"平遥县\",\"榆社县\"],\"运城市\":[\"盐湖区\",\"河津市\",\"永济市\",\"闻喜县\",\"新绛县\",\"平陆县\",\"垣曲县\",\"绛县\",\"稷山县\",\"芮城县\",\"夏县\",\"万荣县\",\"临猗县\"],\"忻州市\":[\"忻府区\",\"原平市\",\"代县\",\"神池县\",\"五寨县\",\"五台县\",\"偏关县\",\"宁武县\",\"静乐县\",\"繁峙县\",\"河曲县\",\"保德县\",\"定襄县\",\"岢岚县\"],\"临汾市\":[\"尧都区\",\"侯马市\",\"霍州市\",\"汾西县\",\"吉县\",\"安泽县\",\"大宁县\",\"浮山县\",\"古县\",\"隰县\",\"襄汾县\",\"翼城县\",\"永和县\",\"乡宁县\",\"曲沃县\",\"洪洞县\",\"蒲县\"],\"吕梁市\":[\"离石区\",\"孝义市\",\"汾阳市\",\"文水县\",\"中阳县\",\"兴县\",\"临县\",\"方山县\",\"柳林县\",\"岚县\",\"交口县\",\"交城县\",\"石楼县\"],\"沈阳市\":[\"沈河区\",\"皇姑区\",\"和平区\",\"大东区\",\"铁西区\",\"苏家屯区\",\"东陵区\",\"沈北新区\",\"于洪区\",\"新民市\",\"法库县\",\"辽中县\",\"康平县\"],\"大连市\":[\"西岗区\",\"中山区\",\"沙河口区\",\"甘井子区\",\"旅顺口区\",\"金州区\",\"瓦房店市\",\"普兰店市\",\"庄河市\",\"长海县\"],\"鞍山市\":[\"铁东区\",\"铁西区\",\"立山区\",\"千山区\",\"海城市\",\"台安县\",\"岫岩满族自治县\"],\"抚顺市\":[\"顺城区\",\"新抚区\",\"东洲区\",\"望花区\",\"抚顺县\",\"清原满族自治县\",\"新宾满族自治县\"],\"本溪市\":[\"平山区\",\"明山区\",\"溪湖区\",\"南芬区\",\"本溪满族自治县\",\"桓仁满族自治县\"],\"丹东市\":[\"振兴区\",\"元宝区\",\"振安区\",\"东港市\",\"凤城市\",\"宽甸满族自治县\"],\"锦州市\":[\"太和区\",\"古塔区\",\"凌河区\",\"凌海市\",\"北镇市\",\"黑山县\",\"义县\"],\"营口市\":[\"站前区\",\"西市区\",\"鲅鱼圈区\",\"老边区\",\"大石桥市\",\"盖州市\"],\"阜新市\":[\"海州区\",\"新邱区\",\"太平区\",\"清河门区\",\"细河区\",\"彰武县\",\"阜新蒙古族自治县\"],\"辽阳市\":[\"白塔区\",\"文圣区\",\"宏伟区\",\"太子河区\",\"弓长岭区\",\"灯塔市\",\"辽阳县\"],\"盘锦市\":[\"双台子区\",\"兴隆台区\",\"盘山县\",\"大洼县\"],\"铁岭市\":[\"银州区\",\"清河区\",\"调兵山市\",\"开原市\",\"铁岭县\",\"昌图县\",\"西丰县\"],\"朝阳市\":[\"双塔区\",\"龙城区\",\"凌源市\",\"北票市\",\"朝阳县\",\"建平县\",\"喀喇沁左翼蒙古族自治县\"],\"葫芦岛市\":[\"龙港区\",\"南票区\",\"连山区\",\"兴城市\",\"绥中县\",\"建昌县\"],\"长春市\":[\"朝阳区\",\"宽城区\",\"二道区\",\"南关区\",\"绿园区\",\"双阳区\",\"九台市\",\"榆树市\",\"德惠市\",\"农安县\"],\"吉林市\":[\"船营区\",\"昌邑区\",\"龙潭区\",\"丰满区\",\"舒兰市\",\"桦甸市\",\"蛟河市\",\"磐石市\",\"永吉县\"],\"四平市\":[\"铁西区\",\"铁东区\",\"公主岭市\",\"双辽市\",\"梨树县\",\"伊通满族自治县\"],\"辽源市\":[\"龙山区\",\"西安区\",\"东辽县\",\"东丰县\"],\"通化市\":[\"东昌区\",\"二道江区\",\"梅河口市\",\"集安市\",\"通化县\",\"辉南县\",\"柳河县\"],\"白山市\":[\"八道江区\",\"江源区\",\"临江市\",\"靖宇县\",\"抚松县\",\"长白朝鲜族自治县\"],\"松原市\":[\"宁江区\",\"乾安县\",\"长岭县\",\"扶余县\",\"前郭尔罗斯蒙古族自治县\"],\"白城市\":[\"洮北区\",\"大安市\",\"洮南市\",\"镇赉县\",\"通榆县\"],\"延边朝鲜族自治州\":[\"延吉市\",\"图们市\",\"敦化市\",\"龙井市\",\"珲春市\",\"和龙市\",\"安图县\",\"汪清县\"],\"哈尔滨市\":[\"松北区\",\"道里区\",\"南岗区\",\"平房区\",\"香坊区\",\"道外区\",\"呼兰区\",\"阿城区\",\"双城市\",\"尚志市\",\"五常市\",\"宾县\",\"方正县\",\"通河县\",\"巴彦县\",\"延寿县\",\"木兰县\",\"依兰县\"],\"齐齐哈尔市\":[\"龙沙区\",\"昂昂溪区\",\"铁锋区\",\"建华区\",\"富拉尔基区\",\"碾子山区\",\"梅里斯达斡尔族区\",\"讷河市\",\"富裕县\",\"拜泉县\",\"甘南县\",\"依安县\",\"克山县\",\"泰来县\",\"克东县\",\"龙江县\"],\"鹤岗市\":[\"兴山区\",\"工农区\",\"南山区\",\"兴安区\",\"向阳区\",\"东山区\",\"萝北县\",\"绥滨县\"],\"双鸭山市\":[\"尖山区\",\"岭东区\",\"四方台区\",\"宝山区\",\"集贤县\",\"宝清县\",\"友谊县\",\"饶河县\"],\"鸡西市\":[\"鸡冠区\",\"恒山区\",\"城子河区\",\"滴道区\",\"梨树区\",\"麻山区\",\"密山市\",\"虎林市\",\"鸡东县\"],\"大庆市\":[\"萨尔图区\",\"红岗区\",\"龙凤区\",\"让胡路区\",\"大同区\",\"林甸县\",\"肇州县\",\"肇源县\",\"杜尔伯特蒙古族自治县\"],\"伊春市\":[\"伊春区\",\"带岭区\",\"南岔区\",\"金山屯区\",\"西林区\",\"美溪区\",\"乌马河区\",\"翠峦区\",\"友好区\",\"上甘岭区\",\"五营区\",\"红星区\",\"新青区\",\"汤旺河区\",\"乌伊岭区\",\"铁力市\",\"嘉荫县\"],\"牡丹江市\":[\"爱民区\",\"东安区\",\"阳明区\",\"西安区\",\"绥芬河市\",\"宁安市\",\"海林市\",\"穆棱市\",\"林口县\",\"东宁县\"],\"佳木斯市\":[\"前进区\",\"向阳区\",\"东风区\",\"郊区\",\"同江市\",\"富锦市\",\"桦川县\",\"抚远县\",\"桦南县\",\"汤原县\"],\"七台河市\":[\"桃山区\",\"新兴区\",\"茄子河区\",\"勃利县\"],\"黑河市\":[\"爱辉区\",\"北安市\",\"五大连池市\",\"逊克县\",\"嫩江县\",\"孙吴县\"],\"绥化市\":[\"北林区\",\"安达市\",\"肇东市\",\"海伦市\",\"绥棱县\",\"兰西县\",\"明水县\",\"青冈县\",\"庆安县\",\"望奎县\"],\"大兴安岭地区\":[\"呼玛县\",\"塔河县\",\"漠河县\"],\"南京市\":[\"玄武区\",\"白下区\",\"秦淮区\",\"建邺区\",\"鼓楼区\",\"下关区\",\"栖霞区\",\"雨花台区\",\"浦口区\",\"江宁区\",\"六合区\",\"溧水县\",\"高淳县\"],\"苏州市\":[\"金阊区\",\"平江区\",\"沧浪区\",\"吴中区\",\"相城区\",\"虎丘区\",\"张家港市\",\"常熟市\",\"太仓市\",\"昆山市\",\"吴江市\"],\"无锡市\":[\"崇安区\",\"南长区\",\"北塘区\",\"滨湖区\",\"锡山区\",\"惠山区\",\"江阴市\",\"宜兴市\"],\"常州市\":[\"钟楼区\",\"天宁区\",\"戚墅堰区\",\"新北区\",\"武进区\",\"金坛市\",\"溧阳市\"],\"镇江市\":[\"京口区\",\"润州区\",\"丹徒区\",\"丹阳市\",\"扬中市\",\"句容市\"],\"南通市\":[\"崇川区\",\"港闸区\",\"通州区\",\"如皋市\",\"海门市\",\"启东市\",\"海安县\",\"如东县\"],\"泰州市\":[\"海陵区\",\"高港区\",\"姜堰市\",\"泰兴市\",\"靖江市\",\"兴化市\"],\"扬州市\":[\"广陵区\",\"维扬区\",\"邗江区\",\"江都市\",\"仪征市\",\"高邮市\",\"宝应县\"],\"盐城市\":[\"亭湖区\",\"盐都区\",\"大丰市\",\"东台市\",\"建湖县\",\"射阳县\",\"阜宁县\",\"滨海县\",\"响水县\"],\"连云港市\":[\"新浦区\",\"海州区\",\"连云区\",\"东海县\",\"灌云县\",\"赣榆县\",\"灌南县\"],\"徐州市\":[\"云龙区\",\"鼓楼区\",\"九里区\",\"泉山区\",\"贾汪区\",\"邳州市\",\"新沂市\",\"铜山县\",\"睢宁县\",\"沛县\",\"丰县\"],\"淮安市\":[\"清河区\",\"清浦区\",\"楚州区\",\"淮阴区\",\"涟水县\",\"洪泽县\",\"金湖县\",\"盱眙县\"],\"宿迁市\":[\"宿城区\",\"宿豫区\",\"沭阳县\",\"泗阳县\",\"泗洪县\"],\"杭州市\":[\"拱墅区\",\"西湖区\",\"上城区\",\"下城区\",\"江干区\",\"滨江区\",\"余杭区\",\"萧山区\",\"建德市\",\"富阳市\",\"临安市\",\"桐庐县\",\"淳安县\"],\"宁波市\":[\"海曙区\",\"江东区\",\"江北区\",\"镇海区\",\"北仑区\",\"鄞州区\",\"余姚市\",\"慈溪市\",\"奉化市\",\"宁海县\",\"象山县\"],\"温州市\":[\"鹿城区\",\"龙湾区\",\"瓯海区\",\"瑞安市\",\"乐清市\",\"永嘉县\",\"洞头县\",\"平阳县\",\"苍南县\",\"文成县\",\"泰顺县\"],\"嘉兴市\":[\"南湖区\",\"秀洲区\",\"海宁市\",\"平湖市\",\"桐乡市\",\"嘉善县\",\"海盐县\"],\"湖州市\":[\"吴兴区\",\"南浔区\",\"长兴县\",\"德清县\",\"安吉县\"],\"绍兴市\":[\"越城区\",\"诸暨市\",\"上虞市\",\"嵊州市\",\"绍兴县\",\"新昌县\"],\"金华市\":[\"婺城区\",\"金东区\",\"兰溪市\",\"义乌市\",\"东阳市\",\"永康市\",\"武义县\",\"浦江县\",\"磐安县\"],\"衢州市\":[\"柯城区\",\"衢江区\",\"江山市\",\"龙游县\",\"常山县\",\"开化县\"],\"舟山市\":[\"定海区\",\"普陀区\",\"岱山县\",\"嵊泗县\"],\"台州市\":[\"椒江区\",\"黄岩区\",\"路桥区\",\"临海市\",\"温岭市\",\"玉环县\",\"天台县\",\"仙居县\",\"三门县\"],\"丽水市\":[\"莲都区\",\"龙泉市\",\"缙云县\",\"青田县\",\"云和县\",\"遂昌县\",\"松阳县\",\"庆元县\",\"景宁畲族自治县\"],\"合肥市\":[\"蜀山区\",\"庐阳区\",\"瑶海区\",\"包河区\",\"长丰县\",\"肥东县\",\"肥西县\"],\"芜湖市\":[\"镜湖区\",\"弋江区\",\"鸠江区\",\"三山区\",\"芜湖县\",\"南陵县\",\"繁昌县\"],\"蚌埠市\":[\"蚌山区\",\"龙子湖区\",\"禹会区\",\"淮上区\",\"怀远县\",\"固镇县\",\"五河县\"],\"淮南市\":[\"田家庵区\",\"大通区\",\"谢家集区\",\"八公山区\",\"潘集区\",\"凤台县\"],\"马鞍山市\":[\"雨山区\",\"花山区\",\"金家庄区\",\"当涂县\"],\"淮北市\":[\"相山区\",\"杜集区\",\"烈山区\",\"濉溪县\"],\"铜陵市\":[\"铜官山区\",\"狮子山区\",\"郊区\",\"铜陵县\"],\"安庆市\":[\"迎江区\",\"大观区\",\"宜秀区\",\"桐城市\",\"宿松县\",\"枞阳县\",\"太湖县\",\"怀宁县\",\"岳西县\",\"望江县\",\"潜山县\"],\"黄山市\":[\"屯溪区\",\"黄山区\",\"徽州区\",\"休宁县\",\"歙县\",\"祁门县\",\"黟县\"],\"滁州市\":[\"琅琊区\",\"南谯区\",\"天长市\",\"明光市\",\"全椒县\",\"来安县\",\"定远县\",\"凤阳县\"],\"阜阳市\":[\"颍州区\",\"颍东区\",\"颍泉区\",\"界首市\",\"临泉县\",\"颍上县\",\"阜南县\",\"太和县\"],\"宿州市\":[\"埇桥区\",\"萧县\",\"泗县\",\"砀山县\",\"灵璧县\"],\"巢湖市\":[\"居巢区\",\"含山县\",\"无为县\",\"庐江县\",\"和县\"],\"六安市\":[\"金安区\",\"裕安区\",\"寿县\",\"霍山县\",\"霍邱县\",\"舒城县\",\"金寨县\"],\"亳州市\":[\"谯城区\",\"利辛县\",\"涡阳县\",\"蒙城县\"],\"池州市\":[\"贵池区\",\"东至县\",\"石台县\",\"青阳县\"],\"宣城市\":[\"宣州区\",\"宁国市\",\"广德县\",\"郎溪县\",\"泾县\",\"旌德县\",\"绩溪县\"],\"福州市\":[\"鼓楼区\",\"台江区\",\"仓山区\",\"马尾区\",\"晋安区\",\"福清市\",\"长乐市\",\"闽侯县\",\"闽清县\",\"永泰县\",\"连江县\",\"罗源县\",\"平潭县\"],\"厦门市\":[\"思明区\",\"海沧区\",\"湖里区\",\"集美区\",\"同安区\",\"翔安区\"],\"莆田市\":[\"城厢区\",\"涵江区\",\"荔城区\",\"秀屿区\",\"仙游县\"],\"三明市\":[\"梅列区\",\"三元区\",\"永安市\",\"明溪县\",\"将乐县\",\"大田县\",\"宁化县\",\"建宁县\",\"沙县\",\"尤溪县\",\"清流县\",\"泰宁县\"],\"泉州市\":[\"鲤城区\",\"丰泽区\",\"洛江区\",\"泉港区\",\"石狮市\",\"晋江市\",\"南安市\",\"惠安县\",\"永春县\",\"安溪县\",\"德化县\",\"金门县\"],\"漳州市\":[\"芗城区\",\"龙文区\",\"龙海市\",\"平和县\",\"南靖县\",\"诏安县\",\"漳浦县\",\"华安县\",\"东山县\",\"长泰县\",\"云霄县\"],\"南平市\":[\"延平区\",\"建瓯市\",\"邵武市\",\"武夷山市\",\"建阳市\",\"松溪县\",\"光泽县\",\"顺昌县\",\"浦城县\",\"政和县\"],\"龙岩市\":[\"新罗区\",\"漳平市\",\"长汀县\",\"武平县\",\"上杭县\",\"永定县\",\"连城县\"],\"宁德市\":[\"蕉城区\",\"福安市\",\"福鼎市\",\"寿宁县\",\"霞浦县\",\"柘荣县\",\"屏南县\",\"古田县\",\"周宁县\"],\"南昌市\":[\"东湖区\",\"西湖区\",\"青云谱区\",\"湾里区\",\"青山湖区\",\"新建县\",\"南昌县\",\"进贤县\",\"安义县\"],\"景德镇市\":[\"珠山区\",\"昌江区\",\"乐平市\",\"浮梁县\"],\"萍乡市\":[\"安源区\",\"湘东区\",\"莲花县\",\"上栗县\",\"芦溪县\"],\"九江市\":[\"浔阳区\",\"庐山区\",\"瑞昌市\",\"九江县\",\"星子县\",\"武宁县\",\"彭泽县\",\"永修县\",\"修水县\",\"湖口县\",\"德安县\",\"都昌县\"],\"新余市\":[\"渝水区\",\"分宜县\"],\"鹰潭市\":[\"月湖区\",\"贵溪市\",\"余江县\"],\"赣州市\":[\"章贡区\",\"瑞金市\",\"南康市\",\"石城县\",\"安远县\",\"赣县\",\"宁都县\",\"寻乌县\",\"兴国县\",\"定南县\",\"上犹县\",\"于都县\",\"龙南县\",\"崇义县\",\"信丰县\",\"全南县\",\"大余县\",\"会昌县\"],\"吉安市\":[\"吉州区\",\"青原区\",\"井冈山市\",\"吉安县\",\"永丰县\",\"永新县\",\"新干县\",\"泰和县\",\"峡江县\",\"遂川县\",\"安福县\",\"吉水县\",\"万安县\"],\"宜春市\":[\"袁州区\",\"丰城市\",\"樟树市\",\"高安市\",\"铜鼓县\",\"靖安县\",\"宜丰县\",\"奉新县\",\"万载县\",\"上高县\"],\"抚州市\":[\"临川区\",\"南丰县\",\"乐安县\",\"金溪县\",\"南城县\",\"东乡县\",\"资溪县\",\"宜黄县\",\"广昌县\",\"黎川县\",\"崇仁县\"],\"上饶市\":[\"信州区\",\"德兴市\",\"上饶县\",\"广丰县\",\"鄱阳县\",\"婺源县\",\"铅山县\",\"余干县\",\"横峰县\",\"弋阳县\",\"玉山县\",\"万年县\"],\"济南市\":[\"市中区\",\"历下区\",\"天桥区\",\"槐荫区\",\"历城区\",\"长清区\",\"章丘市\",\"平阴县\",\"济阳县\",\"商河县\"],\"青岛市\":[\"市南区\",\"市北区\",\"四方区\",\"李沧区\",\"崂山区\",\"城阳区\",\"黄岛区\",\"即墨市\",\"胶州市\",\"胶南市\",\"平度市\",\"莱西市\"],\"淄博市\":[\"张店区\",\"临淄区\",\"淄川区\",\"博山区\",\"周村区\",\"桓台县\",\"高青县\",\"沂源县\"],\"枣庄市\":[\"市中区\",\"山亭区\",\"峄城区\",\"台儿庄区\",\"薛城区\",\"滕州市\"],\"东营市\":[\"东营区\",\"河口区\",\"垦利县\",\"广饶县\",\"利津县\"],\"烟台市\":[\"芝罘区\",\"福山区\",\"牟平区\",\"莱山区\",\"龙口市\",\"莱阳市\",\"莱州市\",\"招远市\",\"蓬莱市\",\"栖霞市\",\"海阳市\",\"长岛县\"],\"潍坊市\":[\"潍城区\",\"寒亭区\",\"坊子区\",\"奎文区\",\"青州市\",\"诸城市\",\"寿光市\",\"安丘市\",\"高密市\",\"昌邑市\",\"昌乐县\",\"临朐县\"],\"济宁市\":[\"市中区\",\"任城区\",\"曲阜市\",\"兖州市\",\"邹城市\",\"鱼台县\",\"金乡县\",\"嘉祥县\",\"微山县\",\"汶上县\",\"泗水县\",\"梁山县\"],\"泰安市\":[\"泰山区\",\"岱岳区\",\"新泰市\",\"肥城市\",\"宁阳县\",\"东平县\"],\"威海市\":[\"环翠区\",\"乳山市\",\"文登市\",\"荣成市\"],\"日照市\":[\"东港区\",\"岚山区\",\"五莲县\",\"莒县\"],\"莱芜市\":[\"莱城区\",\"钢城区\"],\"临沂市\":[\"兰山区\",\"罗庄区\",\"河东区\",\"沂南县\",\"郯城县\",\"沂水县\",\"苍山县\",\"费县\",\"平邑县\",\"莒南县\",\"蒙阴县\",\"临沭县\"],\"德州市\":[\"德城区\",\"乐陵市\",\"禹城市\",\"陵县\",\"宁津县\",\"齐河县\",\"武城县\",\"庆云县\",\"平原县\",\"夏津县\",\"临邑县\"],\"聊城市\":[\"东昌府区\",\"临清市\",\"高唐县\",\"阳谷县\",\"茌平县\",\"莘县\",\"东阿县\",\"冠县\"],\"滨州市\":[\"滨城区\",\"邹平县\",\"沾化县\",\"惠民县\",\"博兴县\",\"阳信县\",\"无棣县\"],\"菏泽市\":[\"牡丹区\",\"鄄城县\",\"单县\",\"郓城县\",\"曹县\",\"定陶县\",\"巨野县\",\"东明县\",\"成武县\"],\"郑州市\":[\"中原区\",\"金水区\",\"二七区\",\"管城回族区\",\"上街区\",\"惠济区\",\"巩义市\",\"新郑市\",\"新密市\",\"登封市\",\"荥阳市\",\"中牟县\"],\"开封市\":[\"鼓楼区\",\"龙亭区\",\"顺河回族区\",\"禹王台区\",\"金明区\",\"开封县\",\"尉氏县\",\"兰考县\",\"杞县\",\"通许县\"],\"洛阳市\":[\"西工区\",\"老城区\",\"涧西区\",\"瀍河回族区\",\"洛龙区\",\"吉利区\",\"偃师市\",\"孟津县\",\"汝阳县\",\"伊川县\",\"洛宁县\",\"嵩县\",\"宜阳县\",\"新安县\",\"栾川县\"],\"平顶山市\":[\"新华区\",\"卫东区\",\"湛河区\",\"石龙区\",\"汝州市\",\"舞钢市\",\"宝丰县\",\"叶县\",\"郏县\",\"鲁山县\"],\"安阳市\":[\"北关区\",\"文峰区\",\"殷都区\",\"龙安区\",\"林州市\",\"安阳县\",\"滑县\",\"内黄县\",\"汤阴县\"],\"鹤壁市\":[\"淇滨区\",\"山城区\",\"鹤山区\",\"浚县\",\"淇县\"],\"新乡市\":[\"卫滨区\",\"红旗区\",\"凤泉区\",\"牧野区\",\"卫辉市\",\"辉县市\",\"新乡县\",\"获嘉县\",\"原阳县\",\"长垣县\",\"封丘县\",\"延津县\"],\"焦作市\":[\"解放区\",\"中站区\",\"马村区\",\"山阳区\",\"沁阳市\",\"孟州市\",\"修武县\",\"温县\",\"武陟县\",\"博爱县\"],\"濮阳市\":[\"华龙区\",\"濮阳县\",\"南乐县\",\"台前县\",\"清丰县\",\"范县\"],\"许昌市\":[\"魏都区\",\"禹州市\",\"长葛市\",\"许昌县\",\"鄢陵县\",\"襄城县\"],\"漯河市\":[\"源汇区\",\"郾城区\",\"召陵区\",\"临颍县\",\"舞阳县\"],\"三门峡市\":[\"湖滨区\",\"义马市\",\"灵宝市\",\"渑池县\",\"卢氏县\",\"陕县\"],\"南阳市\":[\"卧龙区\",\"宛城区\",\"邓州市\",\"桐柏县\",\"方城县\",\"淅川县\",\"镇平县\",\"唐河县\",\"南召县\",\"内乡县\",\"新野县\",\"社旗县\",\"西峡县\"],\"商丘市\":[\"梁园区\",\"睢阳区\",\"永城市\",\"宁陵县\",\"虞城县\",\"民权县\",\"夏邑县\",\"柘城县\",\"睢县\"],\"信阳市\":[\"浉河区\",\"平桥区\",\"潢川县\",\"淮滨县\",\"息县\",\"新县\",\"商城县\",\"固始县\",\"罗山县\",\"光山县\"],\"周口市\":[\"川汇区\",\"项城市\",\"商水县\",\"淮阳县\",\"太康县\",\"鹿邑县\",\"西华县\",\"扶沟县\",\"沈丘县\",\"郸城县\"],\"驻马店市\":[\"驿城区\",\"确山县\",\"新蔡县\",\"上蔡县\",\"西平县\",\"泌阳县\",\"平舆县\",\"汝南县\",\"遂平县\",\"正阳县\"],\"济源市\":[],\"武汉市\":[\"江岸区\",\"武昌区\",\"江汉区\",\"硚口区\",\"汉阳区\",\"青山区\",\"洪山区\",\"东西湖区\",\"汉南区\",\"蔡甸区\",\"江夏区\",\"黄陂区\",\"新洲区\"],\"黄石市\":[\"黄石港区\",\"西塞山区\",\"下陆区\",\"铁山区\",\"大冶市\",\"阳新县\"],\"十堰市\":[\"张湾区\",\"茅箭区\",\"丹江口市\",\"郧县\",\"竹山县\",\"房县\",\"郧西县\",\"竹溪县\"],\"荆州市\":[\"沙市区\",\"荆州区\",\"洪湖市\",\"石首市\",\"松滋市\",\"监利县\",\"公安县\",\"江陵县\"],\"宜昌市\":[\"西陵区\",\"伍家岗区\",\"点军区\",\"猇亭区\",\"夷陵区\",\"宜都市\",\"当阳市\",\"枝江市\",\"秭归县\",\"远安县\",\"兴山县\",\"五峰土家族自治县\",\"长阳土家族自治县\"],\"襄樊市\":[\"襄城区\",\"樊城区\",\"襄阳区\",\"老河口市\",\"枣阳市\",\"宜城市\",\"南漳县\",\"谷城县\",\"保康县\"],\"鄂州市\":[\"鄂城区\",\"华容区\",\"梁子湖区\"],\"荆门市\":[\"东宝区\",\"掇刀区\",\"钟祥市\",\"京山县\",\"沙洋县\"],\"孝感市\":[\"孝南区\",\"应城市\",\"安陆市\",\"汉川市\",\"云梦县\",\"大悟县\",\"孝昌县\"],\"黄冈市\":[\"黄州区\",\"麻城市\",\"武穴市\",\"红安县\",\"罗田县\",\"浠水县\",\"蕲春县\",\"黄梅县\",\"英山县\",\"团风县\"],\"咸宁市\":[\"咸安区\",\"赤壁市\",\"嘉鱼县\",\"通山县\",\"崇阳县\",\"通城县\"],\"随州市\":[\"曾都区\",\"广水市\",\"随县\"],\"恩施土家族苗族自治州\":[\"恩施市\",\"利川市\",\"建始县\",\"来凤县\",\"巴东县\",\"鹤峰县\",\"宣恩县\",\"咸丰县\"],\"仙桃市\":[],\"天门市\":[],\"潜江市\":[],\"神农架林区\":[],\"长沙市\":[\"岳麓区\",\"芙蓉区\",\"天心区\",\"开福区\",\"雨花区\",\"浏阳市\",\"长沙县\",\"望城县\",\"宁乡县\"],\"株洲市\":[\"天元区\",\"荷塘区\",\"芦淞区\",\"石峰区\",\"醴陵市\",\"株洲县\",\"炎陵县\",\"茶陵县\",\"攸县\"],\"湘潭市\":[\"岳塘区\",\"雨湖区\",\"湘乡市\",\"韶山市\",\"湘潭县\"],\"衡阳市\":[\"雁峰区\",\"珠晖区\",\"石鼓区\",\"蒸湘区\",\"南岳区\",\"耒阳市\",\"常宁市\",\"衡阳县\",\"衡东县\",\"衡山县\",\"衡南县\",\"祁东县\"],\"邵阳市\":[\"双清区\",\"大祥区\",\"北塔区\",\"武冈市\",\"邵东县\",\"洞口县\",\"新邵县\",\"绥宁县\",\"新宁县\",\"邵阳县\",\"隆回县\",\"城步苗族自治县\"],\"岳阳市\":[\"岳阳楼区\",\"云溪区\",\"君山区\",\"临湘市\",\"汨罗市\",\"岳阳县\",\"湘阴县\",\"平江县\",\"华容县\"],\"常德市\":[\"武陵区\",\"鼎城区\",\"津市市\",\"澧县\",\"临澧县\",\"桃源县\",\"汉寿县\",\"安乡县\",\"石门县\"],\"张家界市\":[\"永定区\",\"武陵源区\",\"慈利县\",\"桑植县\"],\"益阳市\":[\"赫山区\",\"资阳区\",\"沅江市\",\"桃江县\",\"南县\",\"安化县\"],\"郴州市\":[\"北湖区\",\"苏仙区\",\"资兴市\",\"宜章县\",\"汝城县\",\"安仁县\",\"嘉禾县\",\"临武县\",\"桂东县\",\"永兴县\",\"桂阳县\"],\"永州市\":[\"冷水滩区\",\"零陵区\",\"祁阳县\",\"蓝山县\",\"宁远县\",\"新田县\",\"东安县\",\"江永县\",\"道县\",\"双牌县\",\"江华瑶族自治县\"],\"怀化市\":[\"鹤城区\",\"洪江市\",\"会同县\",\"沅陵县\",\"辰溪县\",\"溆浦县\",\"中方县\",\"新晃侗族自治县\",\"芷江侗族自治县\",\"通道侗族自治县\",\"靖州苗族侗族自治县\",\"麻阳苗族自治县\",\"洪江区\"],\"娄底市\":[\"娄星区\",\"冷水江市\",\"涟源市\",\"新化县\",\"双峰县\"],\"湘西土家族苗族自治州\":[\"吉首市\",\"古丈县\",\"龙山县\",\"永顺县\",\"凤凰县\",\"泸溪县\",\"保靖县\",\"花垣县\"],\"广州市\":[\"越秀区\",\"荔湾区\",\"海珠区\",\"天河区\",\"白云区\",\"黄埔区\",\"番禺区\",\"花都区\",\"南沙区\",\"萝岗区\",\"增城市\",\"从化市\"],\"深圳市\":[\"福田区\",\"罗湖区\",\"南山区\",\"宝安区\",\"龙岗区\",\"盐田区\"],\"珠海市\":[\"香洲区\",\"斗门区\",\"金湾区\"],\"汕头市\":[\"金平区\",\"濠江区\",\"龙湖区\",\"潮阳区\",\"潮南区\",\"澄海区\",\"南澳县\"],\"韶关市\":[\"浈江区\",\"武江区\",\"曲江区\",\"乐昌市\",\"南雄市\",\"始兴县\",\"仁化县\",\"翁源县\",\"新丰县\",\"乳源瑶族自治县\"],\"佛山市\":[\"禅城区\",\"南海区\",\"顺德区\",\"三水区\",\"高明区\"],\"江门市\":[\"蓬江区\",\"江海区\",\"新会区\",\"恩平市\",\"台山市\",\"开平市\",\"鹤山市\"],\"湛江市\":[\"赤坎区\",\"霞山区\",\"坡头区\",\"麻章区\",\"吴川市\",\"廉江市\",\"雷州市\",\"遂溪县\",\"徐闻县\"],\"茂名市\":[\"茂南区\",\"茂港区\",\"化州市\",\"信宜市\",\"高州市\",\"电白县\"],\"肇庆市\":[\"端州区\",\"鼎湖区\",\"高要市\",\"四会市\",\"广宁县\",\"怀集县\",\"封开县\",\"德庆县\"],\"惠州市\":[\"惠城区\",\"惠阳区\",\"博罗县\",\"惠东县\",\"龙门县\"],\"梅州市\":[\"梅江区\",\"兴宁市\",\"梅县\",\"大埔县\",\"丰顺县\",\"五华县\",\"平远县\",\"蕉岭县\"],\"汕尾市\":[\"城区\",\"陆丰市\",\"海丰县\",\"陆河县\"],\"河源市\":[\"源城区\",\"紫金县\",\"龙川县\",\"连平县\",\"和平县\",\"东源县\"],\"阳江市\":[\"江城区\",\"阳春市\",\"阳西县\",\"阳东县\"],\"清远市\":[\"清城区\",\"英德市\",\"连州市\",\"佛冈县\",\"阳山县\",\"清新县\",\"连山壮族瑶族自治县\",\"连南瑶族自治县\"],\"东莞市\":[],\"中山市\":[],\"潮州市\":[\"湘桥区\",\"潮安县\",\"饶平县\"],\"揭阳市\":[\"榕城区\",\"普宁市\",\"揭东县\",\"揭西县\",\"惠来县\"],\"云浮市\":[\"云城区\",\"罗定市\",\"云安县\",\"新兴县\",\"郁南县\"],\"海口市\":[\"龙华区\",\"秀英区\",\"琼山区\",\"美兰区\"],\"三亚市\":[],\"五指山市\":[],\"琼海市\":[],\"儋州市\":[],\"文昌市\":[],\"万宁市\":[],\"东方市\":[],\"澄迈县\":[],\"定安县\":[],\"屯昌县\":[],\"临高县\":[],\"白沙黎族自治县\":[],\"昌江黎族自治县\":[],\"乐东黎族自治县\":[],\"陵水黎族自治县\":[],\"保亭黎族苗族自治县\":[],\"琼中黎族苗族自治县\":[],\"成都市\":[\"青羊区\",\"锦江区\",\"金牛区\",\"武侯区\",\"成华区\",\"龙泉驿区\",\"青白江区\",\"新都区\",\"温江区\",\"都江堰市\",\"彭州市\",\"邛崃市\",\"崇州市\",\"金堂县\",\"郫县\",\"新津县\",\"双流县\",\"蒲江县\",\"大邑县\"],\"自贡市\":[\"大安区\",\"自流井区\",\"贡井区\",\"沿滩区\",\"荣县\",\"富顺县\"],\"攀枝花市\":[\"东区\",\"西区\",\"仁和区\",\"米易县\",\"盐边县\"],\"泸州市\":[\"江阳区\",\"纳溪区\",\"龙马潭区\",\"泸县\",\"合江县\",\"叙永县\",\"古蔺县\"],\"德阳市\":[\"旌阳区\",\"广汉市\",\"什邡市\",\"绵竹市\",\"罗江县\",\"中江县\"],\"绵阳市\":[\"涪城区\",\"游仙区\",\"江油市\",\"盐亭县\",\"三台县\",\"平武县\",\"安县\",\"梓潼县\",\"北川羌族自治县\"],\"广元市\":[\"利州区\",\"元坝区\",\"朝天区\",\"青川县\",\"旺苍县\",\"剑阁县\",\"苍溪县\"],\"遂宁市\":[\"船山区\",\"安居区\",\"射洪县\",\"蓬溪县\",\"大英县\"],\"内江市\":[\"市中区\",\"东兴区\",\"资中县\",\"隆昌县\",\"威远县\"],\"乐山市\":[\"市中区\",\"五通桥区\",\"沙湾区\",\"金口河区\",\"峨眉山市\",\"夹江县\",\"井研县\",\"犍为县\",\"沐川县\",\"马边彝族自治县\",\"峨边彝族自治县\"],\"南充市\":[\"顺庆区\",\"高坪区\",\"嘉陵区\",\"阆中市\",\"营山县\",\"蓬安县\",\"仪陇县\",\"南部县\",\"西充县\"],\"眉山市\":[\"东坡区\",\"仁寿县\",\"彭山县\",\"洪雅县\",\"丹棱县\",\"青神县\"],\"宜宾市\":[\"翠屏区\",\"宜宾县\",\"兴文县\",\"南溪县\",\"珙县\",\"长宁县\",\"高县\",\"江安县\",\"筠连县\",\"屏山县\"],\"广安市\":[\"广安区\",\"华蓥市\",\"岳池县\",\"邻水县\",\"武胜县\"],\"达州市\":[\"通川区\",\"万源市\",\"达县\",\"渠县\",\"宣汉县\",\"开江县\",\"大竹县\"],\"雅安市\":[\"雨城区\",\"芦山县\",\"石棉县\",\"名山县\",\"天全县\",\"荥经县\",\"宝兴县\",\"汉源县\"],\"巴中市\":[\"巴州区\",\"南江县\",\"平昌县\",\"通江县\"],\"资阳市\":[\"雁江区\",\"简阳市\",\"安岳县\",\"乐至县\"],\"阿坝藏族羌族自治州\":[\"马尔康县\",\"九寨沟县\",\"红原县\",\"汶川县\",\"阿坝县\",\"理县\",\"若尔盖县\",\"小金县\",\"黑水县\",\"金川县\",\"松潘县\",\"壤塘县\",\"茂县\"],\"甘孜藏族自治州\":[\"康定县\",\"丹巴县\",\"炉霍县\",\"九龙县\",\"甘孜县\",\"雅江县\",\"新龙县\",\"道孚县\",\"白玉县\",\"理塘县\",\"德格县\",\"乡城县\",\"石渠县\",\"稻城县\",\"色达县\",\"巴塘县\",\"泸定县\",\"得荣县\"],\"凉山彝族自治州\":[\"西昌市\",\"美姑县\",\"昭觉县\",\"金阳县\",\"甘洛县\",\"布拖县\",\"雷波县\",\"普格县\",\"宁南县\",\"喜德县\",\"会东县\",\"越西县\",\"会理县\",\"盐源县\",\"德昌县\",\"冕宁县\",\"木里藏族自治县\"],\"贵阳市\":[\"乌当区\",\"南明区\",\"云岩区\",\"花溪区\",\"白云区\",\"小河区\",\"清镇市\",\"开阳县\",\"息烽县\",\"修文县\"],\"六盘水市\":[\"钟山区\",\"六枝特区\",\"盘县\",\"水城县\"],\"遵义市\":[\"红花岗区\",\"汇川区\",\"赤水市\",\"仁怀市\",\"遵义县\",\"绥阳县\",\"桐梓县\",\"习水县\",\"凤冈县\",\"正安县\",\"余庆县\",\"湄潭县\",\"道真仡佬族苗族自治县\",\"务川仡佬族苗族自治县\"],\"安顺市\":[\"西秀区\",\"普定县\",\"平坝县\",\"镇宁布依族苗族自治县\",\"紫云苗族布依族自治县\",\"关岭布依族苗族自治县\"],\"铜仁地区\":[\"铜仁市\",\"德江县\",\"江口县\",\"思南县\",\"石阡县\",\"玉屏侗族自治县\",\"松桃苗族自治县\",\"印江土家族苗族自治县\",\"沿河土家族自治县\",\"万山特区\"],\"毕节地区\":[\"毕节市\",\"黔西县\",\"大方县\",\"织金县\",\"金沙县\",\"赫章县\",\"纳雍县\",\"威宁彝族回族苗族自治县\"],\"黔西南布依族苗族自治州\":[\"兴义市\",\"望谟县\",\"兴仁县\",\"普安县\",\"册亨县\",\"晴隆县\",\"贞丰县\",\"安龙县\"],\"黔东南苗族侗族自治州\":[\"凯里市\",\"施秉县\",\"从江县\",\"锦屏县\",\"镇远县\",\"麻江县\",\"台江县\",\"天柱县\",\"黄平县\",\"榕江县\",\"剑河县\",\"三穗县\",\"雷山县\",\"黎平县\",\"岑巩县\",\"丹寨县\"],\"黔南布依族苗族自治州\":[\"都匀市\",\"福泉市\",\"贵定县\",\"惠水县\",\"罗甸县\",\"瓮安县\",\"荔波县\",\"龙里县\",\"平塘县\",\"长顺县\",\"独山县\",\"三都水族自治县\"],\"昆明市\":[\"盘龙区\",\"五华区\",\"官渡区\",\"西山区\",\"东川区\",\"安宁市\",\"呈贡县\",\"晋宁县\",\"富民县\",\"宜良县\",\"嵩明县\",\"石林彝族自治县\",\"禄劝彝族苗族自治县\",\"寻甸回族彝族自治县\"],\"曲靖市\":[\"麒麟区\",\"宣威市\",\"马龙县\",\"沾益县\",\"富源县\",\"罗平县\",\"师宗县\",\"陆良县\",\"会泽县\"],\"玉溪市\":[\"红塔区\",\"江川县\",\"澂江县\",\"通海县\",\"华宁县\",\"易门县\",\"峨山彝族自治县\",\"新平彝族傣族自治县\",\"元江哈尼族彝族傣族自治县\"],\"保山市\":[\"隆阳区\",\"施甸县\",\"腾冲县\",\"龙陵县\",\"昌宁县\"],\"昭通市\":[\"昭阳区\",\"鲁甸县\",\"巧家县\",\"盐津县\",\"大关县\",\"永善县\",\"绥江县\",\"镇雄县\",\"彝良县\",\"威信县\",\"水富县\"],\"丽江市\":[\"古城区\",\"永胜县\",\"华坪县\",\"玉龙纳西族自治县\",\"宁蒗彝族自治县\"],\"普洱市\":[\"思茅区\",\"宁洱哈尼族彝族自治县\",\"墨江哈尼族自治县\",\"景东彝族自治县\",\"景谷傣族彝族自治县\",\"镇沅彝族哈尼族拉祜族自治县\",\"江城哈尼族彝族自治县\",\"孟连傣族拉祜族佤族自治县\",\"澜沧拉祜族自治县\",\"西盟佤族自治县\"],\"临沧市\":[\"临翔区\",\"凤庆县\",\"云县\",\"永德县\",\"镇康县\",\"双江拉祜族佤族布朗族傣族自治县\",\"耿马傣族佤族自治县\",\"沧源佤族自治县\"],\"德宏傣族景颇族自治州\":[\"潞西市\",\"瑞丽市\",\"梁河县\",\"盈江县\",\"陇川县\"],\"怒江傈僳族自治州\":[\"泸水县\",\"福贡县\",\"贡山独龙族怒族自治县\",\"兰坪白族普米族自治县\"],\"迪庆藏族自治州\":[\"香格里拉县\",\"德钦县\",\"维西傈僳族自治县\"],\"大理白族自治州\":[\"大理市\",\"祥云县\",\"宾川县\",\"弥渡县\",\"永平县\",\"云龙县\",\"洱源县\",\"剑川县\",\"鹤庆县\",\"漾濞彝族自治县\",\"南涧彝族自治县\",\"巍山彝族回族自治县\"],\"楚雄彝族自治州\":[\"楚雄市\",\"双柏县\",\"牟定县\",\"南华县\",\"姚安县\",\"大姚县\",\"永仁县\",\"元谋县\",\"武定县\",\"禄丰县\"],\"红河哈尼族彝族自治州\":[\"蒙自县\",\"个旧市\",\"开远市\",\"绿春县\",\"建水县\",\"石屏县\",\"弥勒县\",\"泸西县\",\"元阳县\",\"红河县\",\"金平苗族瑶族傣族自治县\",\"河口瑶族自治县\",\"屏边苗族自治县\"],\"文山壮族苗族自治州\":[\"文山县\",\"砚山县\",\"西畴县\",\"麻栗坡县\",\"马关县\",\"丘北县\",\"广南县\",\"富宁县\"],\"西双版纳傣族自治州\":[\"景洪市\",\"勐海县\",\"勐腊县\"],\"西安市\":[\"未央区\",\"莲湖区\",\"新城区\",\"碑林区\",\"雁塔区\",\"灞桥区\",\"阎良区\",\"临潼区\",\"长安区\",\"高陵县\",\"蓝田县\",\"户县\",\"周至县\"],\"铜川市\":[\"耀州区\",\"王益区\",\"印台区\",\"宜君县\"],\"宝鸡市\":[\"金台区\",\"渭滨区\",\"陈仓区\",\"岐山县\",\"凤翔县\",\"陇县\",\"太白县\",\"麟游县\",\"扶风县\",\"千阳县\",\"眉县\",\"凤县\"],\"咸阳市\":[\"秦都区\",\"渭城区\",\"杨陵区\",\"兴平市\",\"礼泉县\",\"泾阳县\",\"永寿县\",\"三原县\",\"彬县\",\"旬邑县\",\"长武县\",\"乾县\",\"武功县\",\"淳化县\"],\"渭南市\":[\"临渭区\",\"韩城市\",\"华阴市\",\"蒲城县\",\"潼关县\",\"白水县\",\"澄城县\",\"华县\",\"合阳县\",\"富平县\",\"大荔县\"],\"延安市\":[\"宝塔区\",\"安塞县\",\"洛川县\",\"子长县\",\"黄陵县\",\"延川县\",\"富县\",\"延长县\",\"甘泉县\",\"宜川县\",\"志丹县\",\"黄龙县\",\"吴起县\"],\"汉中市\":[\"汉台区\",\"留坝县\",\"镇巴县\",\"城固县\",\"南郑县\",\"洋县\",\"宁强县\",\"佛坪县\",\"勉县\",\"西乡县\",\"略阳县\"],\"榆林市\":[\"榆阳区\",\"清涧县\",\"绥德县\",\"神木县\",\"佳县\",\"府谷县\",\"子洲县\",\"靖边县\",\"横山县\",\"米脂县\",\"吴堡县\",\"定边县\"],\"安康市\":[\"汉滨区\",\"紫阳县\",\"岚皋县\",\"旬阳县\",\"镇坪县\",\"平利县\",\"石泉县\",\"宁陕县\",\"白河县\",\"汉阴县\"],\"商洛市\":[\"商州区\",\"镇安县\",\"山阳县\",\"洛南县\",\"商南县\",\"丹凤县\",\"柞水县\"],\"兰州市\":[\"城关区\",\"七里河区\",\"西固区\",\"安宁区\",\"红古区\",\"永登县\",\"皋兰县\",\"榆中县\"],\"嘉峪关市\":[],\"金昌市\":[\"金川区\",\"永昌县\"],\"白银市\":[\"白银区\",\"平川区\",\"靖远县\",\"会宁县\",\"景泰县\"],\"天水市\":[\"秦州区\",\"麦积区\",\"清水县\",\"秦安县\",\"甘谷县\",\"武山县\",\"张家川回族自治县\"],\"武威市\":[\"凉州区\",\"民勤县\",\"古浪县\",\"天祝藏族自治县\"],\"酒泉市\":[\"肃州区\",\"玉门市\",\"敦煌市\",\"金塔县\",\"瓜州县\",\"肃北蒙古族自治县\",\"阿克塞哈萨克族自治县\"],\"张掖市\":[\"甘州区\",\"民乐县\",\"临泽县\",\"高台县\",\"山丹县\",\"肃南裕固族自治县\"],\"庆阳市\":[\"西峰区\",\"庆城县\",\"环县\",\"华池县\",\"合水县\",\"正宁县\",\"宁县\",\"镇原县\"],\"平凉市\":[\"崆峒区\",\"泾川县\",\"灵台县\",\"崇信县\",\"华亭县\",\"庄浪县\",\"静宁县\"],\"定西市\":[\"安定区\",\"通渭县\",\"临洮县\",\"漳县\",\"岷县\",\"渭源县\",\"陇西县\"],\"陇南市\":[\"武都区\",\"成县\",\"宕昌县\",\"康县\",\"文县\",\"西和县\",\"礼县\",\"两当县\",\"徽县\"],\"临夏回族自治州\":[\"临夏市\",\"临夏县\",\"康乐县\",\"永靖县\",\"广河县\",\"和政县\",\"东乡族自治县\",\"积石山保安族东乡族撒拉族自治县\"],\"甘南藏族自治州\":[\"合作市\",\"临潭县\",\"卓尼县\",\"舟曲县\",\"迭部县\",\"玛曲县\",\"碌曲县\",\"夏河县\"],\"西宁市\":[\"城中区\",\"城东区\",\"城西区\",\"城北区\",\"湟源县\",\"湟中县\",\"大通回族土族自治县\"],\"海东地区\":[\"平安县\",\"乐都县\",\"民和回族土族自治县\",\"互助土族自治县\",\"化隆回族自治县\",\"循化撒拉族自治县\"],\"海北藏族自治州\":[\"海晏县\",\"祁连县\",\"刚察县\",\"门源回族自治县\"],\"海南藏族自治州\":[\"共和县\",\"同德县\",\"贵德县\",\"兴海县\",\"贵南县\"],\"黄南藏族自治州\":[\"同仁县\",\"尖扎县\",\"泽库县\",\"河南蒙古族自治县\"],\"果洛藏族自治州\":[\"玛沁县\",\"班玛县\",\"甘德县\",\"达日县\",\"久治县\",\"玛多县\"],\"玉树藏族自治州\":[\"玉树县\",\"杂多县\",\"称多县\",\"治多县\",\"囊谦县\",\"曲麻莱县\"],\"海西蒙古族藏族自治州\":[\"德令哈市\",\"格尔木市\",\"乌兰县\",\"都兰县\",\"天峻县\"],\"呼和浩特市\":[\"回民区\",\"玉泉区\",\"新城区\",\"赛罕区\",\"托克托县\",\"清水河县\",\"武川县\",\"和林格尔县\",\"土默特左旗\"],\"包头市\":[\"昆都仑区\",\"青山区\",\"东河区\",\"九原区\",\"石拐区\",\"白云矿区\",\"固阳县\",\"土默特右旗\",\"达尔罕茂明安联合旗\"],\"乌海市\":[\"海勃湾区\",\"乌达区\",\"海南区\"],\"赤峰市\":[\"红山区\",\"元宝山区\",\"松山区\",\"宁城县\",\"林西县\",\"喀喇沁旗\",\"巴林左旗\",\"敖汉旗\",\"阿鲁科尔沁旗\",\"翁牛特旗\",\"克什克腾旗\",\"巴林右旗\"],\"通辽市\":[\"科尔沁区\",\"霍林郭勒市\",\"开鲁县\",\"科尔沁左翼中旗\",\"科尔沁左翼后旗\",\"库伦旗\",\"奈曼旗\",\"扎鲁特旗\"],\"鄂尔多斯市\":[\"东胜区\",\"准格尔旗\",\"乌审旗\",\"伊金霍洛旗\",\"鄂托克旗\",\"鄂托克前旗\",\"杭锦旗\",\"达拉特旗\"],\"呼伦贝尔市\":[\"海拉尔区\",\"满洲里市\",\"牙克石市\",\"扎兰屯市\",\"根河市\",\"额尔古纳市\",\"陈巴尔虎旗\",\"阿荣旗\",\"新巴尔虎左旗\",\"新巴尔虎右旗\",\"鄂伦春自治旗\",\"莫力达瓦达斡尔族自治旗\",\"鄂温克族自治旗\"],\"巴彦淖尔市\":[\"临河区\",\"五原县\",\"磴口县\",\"杭锦后旗\",\"乌拉特中旗\",\"乌拉特前旗\",\"乌拉特后旗\"],\"乌兰察布市\":[\"集宁区\",\"丰镇市\",\"兴和县\",\"卓资县\",\"商都县\",\"凉城县\",\"化德县\",\"四子王旗\",\"察哈尔右翼前旗\",\"察哈尔右翼中旗\",\"察哈尔右翼后旗\"],\"锡林郭勒盟\":[\"锡林浩特市\",\"二连浩特市\",\"多伦县\",\"阿巴嘎旗\",\"西乌珠穆沁旗\",\"东乌珠穆沁旗\",\"苏尼特左旗\",\"苏尼特右旗\",\"太仆寺旗\",\"正镶白旗\",\"正蓝旗\",\"镶黄旗\"],\"兴安盟\":[\"乌兰浩特市\",\"阿尔山市\",\"突泉县\",\"扎赉特旗\",\"科尔沁右翼前旗\",\"科尔沁右翼中旗\"],\"阿拉善盟\":[\"阿拉善左旗\",\"阿拉善右旗\",\"额济纳旗\"],\"南宁市\":[\"青秀区\",\"兴宁区\",\"西乡塘区\",\"良庆区\",\"江南区\",\"邕宁区\",\"武鸣县\",\"隆安县\",\"马山县\",\"上林县\",\"宾阳县\",\"横县\"],\"柳州市\":[\"城中区\",\"鱼峰区\",\"柳北区\",\"柳南区\",\"柳江县\",\"柳城县\",\"鹿寨县\",\"融安县\",\"融水苗族自治县\",\"三江侗族自治县\"],\"桂林市\":[\"象山区\",\"秀峰区\",\"叠彩区\",\"七星区\",\"雁山区\",\"阳朔县\",\"临桂县\",\"灵川县\",\"全州县\",\"平乐县\",\"兴安县\",\"灌阳县\",\"荔浦县\",\"资源县\",\"永福县\",\"龙胜各族自治县\",\"恭城瑶族自治县\"],\"梧州市\":[\"万秀区\",\"蝶山区\",\"长洲区\",\"岑溪市\",\"苍梧县\",\"藤县\",\"蒙山县\"],\"北海市\":[\"海城区\",\"银海区\",\"铁山港区\",\"合浦县\"],\"防城港市\":[\"港口区\",\"防城区\",\"东兴市\",\"上思县\"],\"钦州市\":[\"钦南区\",\"钦北区\",\"灵山县\",\"浦北县\"],\"贵港市\":[\"港北区\",\"港南区\",\"覃塘区\",\"桂平市\",\"平南县\"],\"玉林市\":[\"玉州区\",\"北流市\",\"容县\",\"陆川县\",\"博白县\",\"兴业县\"],\"百色市\":[\"右江区\",\"凌云县\",\"平果县\",\"西林县\",\"乐业县\",\"德保县\",\"田林县\",\"田阳县\",\"靖西县\",\"田东县\",\"那坡县\",\"隆林各族自治县\"],\"贺州市\":[\"八步区\",\"钟山县\",\"昭平县\",\"富川瑶族自治县\"],\"河池市\":[\"金城江区\",\"宜州市\",\"天峨县\",\"凤山县\",\"南丹县\",\"东兰县\",\"都安瑶族自治县\",\"罗城仫佬族自治县\",\"巴马瑶族自治县\",\"环江毛南族自治县\",\"大化瑶族自治县\"],\"来宾市\":[\"兴宾区\",\"合山市\",\"象州县\",\"武宣县\",\"忻城县\",\"金秀瑶族自治县\"],\"崇左市\":[\"江州区\",\"凭祥市\",\"宁明县\",\"扶绥县\",\"龙州县\",\"大新县\",\"天等县\"],\"拉萨市\":[\"城关区\",\"林周县\",\"当雄县\",\"尼木县\",\"曲水县\",\"堆龙德庆县\",\"达孜县\",\"墨竹工卡县\"],\"那曲地区\":[\"那曲县\",\"嘉黎县\",\"比如县\",\"聂荣县\",\"安多县\",\"申扎县\",\"索县\",\"班戈县\",\"巴青县\",\"尼玛县\"],\"昌都地区\":[\"昌都县\",\"江达县\",\"贡觉县\",\"类乌齐县\",\"丁青县\",\"察雅县\",\"八宿县\",\"左贡县\",\"芒康县\",\"洛隆县\",\"边坝县\"],\"林芝地区\":[\"林芝县\",\"工布江达县\",\"米林县\",\"墨脱县\",\"波密县\",\"察隅县\",\"朗县\"],\"山南地区\":[\"乃东县\",\"扎囊县\",\"贡嘎县\",\"桑日县\",\"琼结县\",\"曲松县\",\"措美县\",\"洛扎县\",\"加查县\",\"隆子县\",\"错那县\",\"浪卡子县\"],\"日喀则地区\":[\"日喀则市\",\"南木林县\",\"江孜县\",\"定日县\",\"萨迦县\",\"拉孜县\",\"昂仁县\",\"谢通门县\",\"白朗县\",\"仁布县\",\"康马县\",\"定结县\",\"仲巴县\",\"亚东县\",\"吉隆县\",\"聂拉木县\",\"萨嘎县\",\"岗巴县\"],\"阿里地区\":[\"噶尔县\",\"普兰县\",\"札达县\",\"日土县\",\"革吉县\",\"改则县\",\"措勤县\"],\"银川市\":[\"兴庆区\",\"西夏区\",\"金凤区\",\"灵武市\",\"永宁县\",\"贺兰县\"],\"石嘴山市\":[\"大武口区\",\"惠农区\",\"平罗县\"],\"吴忠市\":[\"利通区\",\"青铜峡市\",\"盐池县\",\"同心县\"],\"固原市\":[\"原州区\",\"西吉县\",\"隆德县\",\"泾源县\",\"彭阳县\"],\"中卫市\":[\"沙坡头区\",\"中宁县\",\"海原县\"],\"乌鲁木齐市\":[\"天山区\",\"沙依巴克区\",\"新市区\",\"水磨沟区\",\"头屯河区\",\"达坂城区\",\"米东区\",\"乌鲁木齐县\"],\"克拉玛依市\":[\"克拉玛依区\",\"独山子区\",\"白碱滩区\",\"乌尔禾区\"],\"吐鲁番地区\":[\"吐鲁番市\",\"托克逊县\",\"鄯善县\"],\"哈密地区\":[\"哈密市\",\"伊吾县\",\"巴里坤哈萨克自治县\"],\"和田地区\":[\"和田市\",\"和田县\",\"洛浦县\",\"民丰县\",\"皮山县\",\"策勒县\",\"于田县\",\"墨玉县\"],\"阿克苏地区\":[\"阿克苏市\",\"温宿县\",\"沙雅县\",\"拜城县\",\"阿瓦提县\",\"库车县\",\"柯坪县\",\"新和县\",\"乌什县\"],\"喀什地区\":[\"喀什市\",\"巴楚县\",\"泽普县\",\"伽师县\",\"叶城县\",\"岳普湖县\",\"疏勒县\",\"麦盖提县\",\"英吉沙县\",\"莎车县\",\"疏附县\",\"塔什库尔干塔吉克自治县\"],\"克孜勒苏柯尔克孜自治州\":[\"阿图什市\",\"阿合奇县\",\"乌恰县\",\"阿克陶县\"],\"巴音郭楞蒙古自治州\":[\"库尔勒市\",\"和静县\",\"尉犁县\",\"和硕县\",\"且末县\",\"博湖县\",\"轮台县\",\"若羌县\",\"焉耆回族自治县\"],\"昌吉回族自治州\":[\"昌吉市\",\"阜康市\",\"奇台县\",\"玛纳斯县\",\"吉木萨尔县\",\"呼图壁县\",\"木垒哈萨克自治县\"],\"博尔塔拉蒙古自治州\":[\"博乐市\",\"精河县\",\"温泉县\"],\"石河子市\":[],\"阿拉尔市\":[],\"图木舒克市\":[],\"五家渠市\":[],\"伊犁哈萨克自治州\":[\"伊宁市\",\"奎屯市\",\"伊宁县\",\"特克斯县\",\"尼勒克县\",\"昭苏县\",\"新源县\",\"霍城县\",\"巩留县\",\"察布查尔锡伯自治县\"],\"塔城地区\":[\"塔城市\",\"乌苏市\",\"额敏县\",\"裕民县\",\"沙湾县\",\"托里县\",\"和布克赛尔蒙古自治县\"],\"阿勒泰地区\":[\"阿勒泰市\",\"青河县\",\"吉木乃县\",\"富蕴县\",\"布尔津县\",\"福海县\",\"哈巴河县\"],\"中西区\":[],\"湾仔区\":[],\"东区\":[],\"南区\":[],\"黄大仙区\":[],\"观塘区\":[],\"深水埗区\":[],\"油尖旺区\":[],\"九龙城区\":[],\"北区\":[],\"大埔区\":[],\"沙田区\":[],\"西贡区\":[],\"元朗区\":[],\"屯门区\":[],\"荃湾区\":[],\"葵青区\":[],\"离岛区\":[],\"花地玛堂区\":[],\"圣安多尼堂区\":[],\"大堂区\":[],\"望德堂区\":[],\"风顺堂区\":[],\"氹仔\":[],\"路环\":[],\"路氹城\":[],\"台北市\":[],\"高雄市\":[],\"基隆市\":[],\"新竹市\":[],\"台中市\":[],\"嘉义市\":[],\"台南市\":[],\"台北县\":[],\"桃园县\":[],\"新竹县\":[],\"苗栗县\":[],\"台中县\":[],\"彰化县\":[],\"南投县\":[],\"云林县\":[],\"嘉义县\":[],\"台南县\":[],\"高雄县\":[],\"屏东县\":[],\"宜兰县\":[],\"花莲县\":[],\"台东县\":[],\"澎湖县\":[],\"金门县\":[],\"连江县\":[]}"); + + #endregion + + #region 表格相关 + + /// + /// 选中了哪些行 + /// + /// 表格对象 + /// 选中行的描述信息 + protected string HowManyRowsAreSelected(Grid grid) + { + return HowManyRowsAreSelected(grid, false); + } + + /// + /// 选中了哪些行 + /// + /// 表格对象 + /// 在表格数据源中计算序号(而不是在当前分页内计算序号) + /// 选中行的描述信息 + protected string HowManyRowsAreSelected(Grid grid, bool rowNumberInDataSource) + { + StringBuilder sb = new StringBuilder(); + int selectedCount = grid.SelectedRowIndexArray.Length; + if (selectedCount > 0) + { + sb.AppendFormat("

共选中了 {0} 行:

", selectedCount); + sb.Append(""); + + sb.Append(""); + foreach (string datakey in grid.DataKeyNames) + { + sb.AppendFormat("", datakey); + } + sb.Append(""); + + + for (int i = 0; i < selectedCount; i++) + { + int rowIndex = grid.SelectedRowIndexArray[i]; + sb.Append(""); + + int rownumber = rowIndex + 1; + if (rowNumberInDataSource && grid.AllowPaging) + { + rownumber += grid.PageIndex * grid.PageSize; + } + sb.AppendFormat("", rownumber); + + + // 如果是内存分页,所有分页的数据都存在,rowIndex 就是在全部数据中的顺序,而不是当前页的顺序 + if (grid.AllowPaging && !grid.IsDatabasePaging) + { + rowIndex = grid.PageIndex * grid.PageSize + rowIndex; + } + + object[] dataKeys = grid.DataKeys[rowIndex]; + for (int j = 0; j < dataKeys.Length; j++) + { + sb.AppendFormat("", dataKeys[j]); + } + + sb.Append(""); + } + sb.Append("
序号{0}
{0}{0}
"); + } + else + { + sb.Append("没有选中任何一行!"); + } + + return sb.ToString(); + } + + /// + /// 获取性别的字面值,在 ASPX 中调用 + /// + /// + /// + protected string GetGender(object gender) + { + if (Convert.ToInt32(gender) == 1) + { + return "男"; + } + else + { + return "女"; + } + } + + protected DataTable GetClassDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + + DataRow row = table.NewRow(); + + row[0] = 101; + row[1] = "班级一"; + row[2] = 2000; + row[3] = DateTime.Parse("2000-09-01"); + row[4] = "班级一创建于2000年9月1号,班长胡飞,连续三年获得全校优秀班级称号。"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "班级二"; + row[2] = 2005; + row[3] = DateTime.Parse("2005-09-01"); + row[4] = "班级一创建于2005年9月1号,班长董婷婷,连续两年获得全校优秀班级称号。"; + table.Rows.Add(row); + + return table; + } + + + /// + /// 获取模拟表格2 + /// + /// + protected DataTable GetDataTable2() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + table.Columns.Add(new DataColumn("Guid", typeof(Guid))); + table.Columns.Add(new DataColumn("Hobby", typeof(String))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + table.Columns.Add(new DataColumn("Donate", typeof(int))); + table.Columns.Add(new DataColumn("Fee", typeof(int))); + // Hobby:reading,basketball,travel,movie,music + // 爱好:读书, 篮球, 旅游, 电影, 音乐 + + // 考试成绩 + table.Columns.Add(new DataColumn("ChineseScore", typeof(Int32))); + table.Columns.Add(new DataColumn("MathScore", typeof(Int32))); + table.Columns.Add(new DataColumn("TotalScore", typeof(Int32))); + + + DataRow row = null; + + row = table.NewRow(); + row[0] = 101; + row[1] = "陈萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "计算机应用技术"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "陈萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2000-09-01"; + row[12] = 299; + row[13] = 2990; + row[14] = 80; + row[15] = 80; + row[16] = 160; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "胡飞"; + row[2] = 2008; + row[3] = false; + row[4] = "信息工程"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-90); + row[8] = "胡飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball"; + row[11] = "2008-09-01"; + row[12] = 199; + row[13] = 1990; + row[14] = 90; + row[15] = 80; + row[16] = 170; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 103; + row[1] = "金婷婷"; + row[2] = 2001; + row[3] = true; + row[4] = "会计学"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-80); + row[8] = "金婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,music"; + row[11] = "2001-09-01"; + row[12] = 299; + row[13] = 3990; + row[14] = 85; + row[15] = 85; + row[16] = 170; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 104; + row[1] = "潘国"; + row[2] = 2008; + row[3] = false; + row[4] = "国际经济与贸易"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-70); + row[8] = "潘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,music"; + row[11] = "2008-09-01"; + row[12] = 399; + row[13] = 3998; + row[14] = 89; + row[15] = 80; + row[16] = 169; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 105; + row[1] = "吴颖颖"; + row[2] = 2002; + row[3] = true; + row[4] = "市场营销"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "吴颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2002-09-01"; + row[12] = 499; + row[13] = 4992; + row[14] = 92; + row[15] = 85; + row[16] = 177; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 106; + row[1] = "张博"; + row[2] = 2003; + row[3] = false; + row[4] = "财务管理"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "张博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "movie,music"; + row[11] = "2003-09-01"; + row[12] = 99; + row[13] = 997; + row[14] = 88; + row[15] = 86; + row[16] = 174; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 107; + row[1] = "杨倩倩"; + row[2] = 2000; + row[3] = true; + row[4] = "材料物理与化学"; + row[5] = 4; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-40); + row[8] = "杨倩倩,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music"; + row[11] = "2000-09-01"; + row[12] = 399; + row[13] = 3995; + row[14] = 95; + row[15] = 82; + row[16] = 177; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 108; + row[1] = "董超"; + row[2] = 2004; + row[3] = false; + row[4] = "生物医学工程"; + row[5] = 4; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-30); + row[8] = "董超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2004-09-01"; + row[12] = 299; + row[13] = 2996; + row[14] = 86; + row[15] = 98; + row[16] = 184; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 109; + row[1] = "张娟娟"; + row[2] = 2003; + row[3] = true; + row[4] = "土木工程"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-20); + row[8] = "张娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2003-09-01"; + row[12] = 599; + row[13] = 5990; + row[14] = 92; + row[15] = 96; + row[16] = 198; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 110; + row[1] = "叶鹏"; + row[2] = 2006; + row[3] = false; + row[4] = "电子商务"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-10); + row[8] = "叶鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2006-09-01"; + row[12] = 699; + row[13] = 6990; + row[14] = 69; + row[15] = 99; + row[16] = 168; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 111; + row[1] = "李玲玲"; + row[2] = 2002; + row[3] = true; + row[4] = "管理学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "李玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2002-09-01"; + row[12] = 399; + row[13] = 3990; + row[14] = 88; + row[15] = 92; + row[16] = 180; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 112; + row[1] = "张萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "计算机应用技术"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2000-09-01"; + row[12] = 299; + row[13] = 2999; + row[14] = 82; + row[15] = 88; + row[16] = 170; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 113; + row[1] = "曹飞"; + row[2] = 2008; + row[3] = false; + row[4] = "信息工程"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-90); + row[8] = "曹飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball"; + row[11] = "2008-09-01"; + row[12] = 399; + row[13] = 3996; + row[14] = 96; + row[15] = 85; + row[16] = 181; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 114; + row[1] = "孙婷婷"; + row[2] = 2001; + row[3] = true; + row[4] = "会计学"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-80); + row[8] = "孙婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,music"; + row[11] = "2001-09-01"; + row[12] = 499; + row[13] = 4990; + row[14] = 80; + row[15] = 90; + row[16] = 170; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 115; + row[1] = "董国"; + row[2] = 2008; + row[3] = false; + row[4] = "国际经济与贸易"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-70); + row[8] = "董国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,music"; + row[11] = "2008-09-01"; + row[12] = 299; + row[13] = 2992; + row[14] = 90; + row[15] = 95; + row[16] = 185; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 116; + row[1] = "习颖颖"; + row[2] = 2002; + row[3] = true; + row[4] = "市场营销"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "习颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2002-09-01"; + row[12] = 199; + row[13] = 1990; + row[14] = 86; + row[15] = 90; + row[16] = 176; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 117; + row[1] = "李博"; + row[2] = 2003; + row[3] = false; + row[4] = "财务管理"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "李博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "movie,music"; + row[11] = "2003-09-01"; + row[12] = 99; + row[13] = 990; + row[14] = 80; + row[15] = 95; + row[16] = 175; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 118; + row[1] = "黄婷婷"; + row[2] = 2000; + row[3] = true; + row[4] = "材料物理与化学"; + row[5] = 4; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-40); + row[8] = "黄婷婷,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music"; + row[11] = "2000-09-01"; + row[12] = 399; + row[13] = 3990; + row[14] = 95; + row[15] = 88; + row[16] = 183; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 119; + row[1] = "韩超"; + row[2] = 2004; + row[3] = false; + row[4] = "生物医学工程"; + row[5] = 4; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-30); + row[8] = "韩超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2004-09-01"; + row[12] = 399; + row[13] = 3991; + row[14] = 88; + row[15] = 86; + row[16] = 174; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 120; + row[1] = "王娟娟"; + row[2] = 2003; + row[3] = true; + row[4] = "土木工程"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-20); + row[8] = "王娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2003-09-01"; + row[12] = 399; + row[13] = 3992; + row[14] = 90; + row[15] = 88; + row[16] = 178; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 121; + row[1] = "周鹏"; + row[2] = 2006; + row[3] = false; + row[4] = "电子商务"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-10); + row[8] = "周鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2006-09-01"; + row[12] = 299; + row[13] = 2992; + row[14] = 92; + row[15] = 96; + row[16] = 186; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 122; + row[1] = "吴玲玲"; + row[2] = 2002; + row[3] = true; + row[4] = "管理学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "吴玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2002-09-01"; + row[12] = 399; + row[13] = 3993; + row[14] = 95; + row[15] = 89; + row[16] = 184; + table.Rows.Add(row); + + + return table; + } + + /// + /// 获取模拟表格 + /// + /// + protected DataTable GetDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + table.Columns.Add(new DataColumn("Guid", typeof(Guid))); + + // Hobby:reading,basketball,travel,movie,music + // 爱好:读书, 篮球, 旅游, 电影, 音乐 + table.Columns.Add(new DataColumn("Hobby", typeof(String))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + + // 考试成绩 + table.Columns.Add(new DataColumn("ChineseScore", typeof(Int32))); + table.Columns.Add(new DataColumn("MathScore", typeof(Int32))); + table.Columns.Add(new DataColumn("TotalScore", typeof(Int32))); + + // 体检结果 + table.Columns.Add(new DataColumn("ShenGao", typeof(Int32))); + table.Columns.Add(new DataColumn("TiZhong", typeof(Int32))); + table.Columns.Add(new DataColumn("XueYaDi", typeof(String))); + table.Columns.Add(new DataColumn("XueYaGao", typeof(String))); + table.Columns.Add(new DataColumn("ShiLiZuo", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiYou", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiZuoJiaoZhen", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiYouJiaoZhen", typeof(Single))); + + // 合并单元格需要的字段 + table.Columns.Add(new DataColumn("GroupB", typeof(int))); + + + DataRow row = table.NewRow(); + row[0] = 101; + row[1] = "张萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); // DBNull.Value; + row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。
毕业后就职于某大型国有企业,任部门经理,连续三年获得企业优秀员工称号。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2000-09-01"; + row[12] = 80; + row[13] = 90; + row[14] = 170; + row[15] = 180; + row[16] = 150; + row[17] = 80; + row[18] = 120; + row[19] = 0.2; + row[20] = 0.5; + row[21] = 1.0; + row[22] = 1.2; + row[23] = 1; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "陈飞"; + row[2] = 2000; + row[3] = false; + row[4] = "化学系"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "陈飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,travel,movie,reading,music"; + row[11] = "2001-09-01"; + row[12] = 85; + row[13] = 90; + row[14] = 175; + row[15] = 160; + row[16] = 120; + row[17] = 70; + row[18] = 110; + row[19] = 0.3; + row[20] = 0.3; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 1; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 103; + row[1] = "董婷婷"; + row[2] = 2000; + row[3] = true; + row[4] = "化学系"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "董婷婷,女,18岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。
董婷婷是在学校认识丈夫刘国的,有一天晚上下自习后,董婷婷发短信给刘国说“做我男朋友吧!”,然后他们就走到了一起。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2008-09-01"; + row[12] = 90; + row[13] = 90; + row[14] = 180; + row[15] = 190; + row[16] = 130; + row[17] = 82; + row[18] = 125; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.0; + row[23] = 2; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 104; + row[1] = "刘国"; + row[2] = 2002; + row[3] = false; + row[4] = "化学系"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "刘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。
刘国是作为交换生来中科大学习,在校期间认识了妻子董婷婷,虽然是被追到手了,不过在人前却总是说“老婆是我千辛万苦追来的!”。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,movie"; + row[11] = "2002-09-01"; + row[12] = 95; + row[13] = 95; + row[14] = 190; + row[15] = 170; + row[16] = 130; + row[17] = 76; + row[18] = 112; + row[19] = 1.0; + row[20] = 1.0; + row[21] = 1.0; + row[22] = 1.0; + row[23] = 2; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 105; + row[1] = "康颖颖"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "康颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2008-09-01"; + row[12] = 85; + row[13] = 95; + row[14] = 180; + row[15] = 159; + row[16] = 90; + row[17] = 77; + row[18] = 128; + row[19] = 0.6; + row[20] = 0.9; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 106; + row[1] = "彭博"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "彭博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,travel,music"; + row[11] = "2003-09-01"; + row[12] = 60; + row[13] = 100; + row[14] = 160; + row[15] = 175; + row[16] = 150; + row[17] = 88; + row[18] = 126; + row[19] = 0.1; + row[20] = 0.3; + row[21] = 1.5; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 107; + row[1] = "黄婷婷"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "黄婷婷,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music,reading"; + row[11] = "2000-09-01"; + row[12] = 100; + row[13] = 80; + row[14] = 180; + row[15] = 160; + row[16] = 80; + row[17] = 70; + row[18] = 110; + row[19] = 0.8; + row[20] = 0.8; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 108; + row[1] = "唐超"; + row[2] = 2004; + row[3] = false; + row[4] = "物理系"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "唐超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。
作为刘国的同班同学,唐超是班里的尖子生,本科还没毕业就被哈佛大学录取了,现在好像还没毕业呢。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music,basketball"; + row[11] = "2004-09-01"; + row[12] = 80; + row[13] = 80; + row[14] = 160; + row[15] = 188; + row[16] = 130; + row[17] = 82; + row[18] = 130; + row[19] = 0.5; + row[20] = 0.8; + row[21] = 1.3; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 109; + row[1] = "杨婷婷"; + row[2] = 2004; + row[3] = true; + row[4] = "物理系"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "杨婷婷,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。
杨婷婷的父母都是中科大的高材生,他们很高兴送女儿上一所前中科大校长创办的大学,而南科大自己颁发的学位文凭也颇受争议。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,movie"; + row[11] = "2003-09-01"; + row[12] = 90; + row[13] = 60; + row[14] = 150; + row[15] = 166; + row[16] = 110; + row[17] = 70; + row[18] = 116; + row[19] = 0.8; + row[20] = 1.0; + row[21] = 0.8; + row[22] = 1.0; + row[23] = 5; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 110; + row[1] = "徐鹏"; + row[2] = 2002; + row[3] = false; + row[4] = "物理系"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "徐鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2002-09-01"; + row[12] = 60; + row[13] = 90; + row[14] = 150; + row[15] = 198; + row[16] = 145; + row[17] = 83; + row[18] = 128; + row[19] = 1.2; + row[20] = 1.5; + row[21] = 1.2; + row[22] = 1.5; + row[23] = 5; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 111; + row[1] = "纪婷婷"; + row[2] = 2012; + row[3] = true; + row[4] = "自动化系"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "纪婷婷,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music,basketball"; + row[11] = "2006-09-01"; + row[12] = 90; + row[13] = 70; + row[14] = 160; + row[15] = 158; + row[16] = 76; + row[17] = 69; + row[18] = 109; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 5; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 112; + row[1] = "张一驰"; + row[2] = 2012; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "张一驰,男,28岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2000-09-01"; + row[12] = 99; + row[13] = 98; + row[14] = 197; + row[15] = 183; + row[16] = 125; + row[17] = 80; + row[18] = 120; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 5; + table.Rows.Add(row); + + return table; + } + + /// + /// 获取空数据表 + /// + /// + protected DataTable GetEmptyDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + + + return table; + } + + + #endregion + + #region 压缩ViewState + + //protected override object LoadPageStateFromPersistenceMedium() + //{ + // string gzippedState = Request.Form[StringUtil.GZIPPED_VIEWSTATE_ID]; + // return StringUtil.LoadGzippedViewState(gzippedState); + //} + + //protected override void SavePageStateToPersistenceMedium(object viewState) + //{ + // ClientScript.RegisterHiddenField(StringUtil.GZIPPED_VIEWSTATE_ID, StringUtil.GenerateGzippedViewState(viewState)); + //} + + #endregion + + #region 实用函数 + + /// + /// 获取回发的参数 + /// + /// + public string GetRequestEventArgument() + { + return Request.Form["__EVENTARGUMENT"]; + } + + #endregion + + } + +} diff --git a/FineUI.Examples/FineUI.Examples.csproj b/FineUI.Examples/FineUI.Examples.csproj index cad83f7..8edbedb 100644 --- a/FineUI.Examples/FineUI.Examples.csproj +++ b/FineUI.Examples/FineUI.Examples.csproj @@ -1,2289 +1,2870 @@ - - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {CF702D32-2B3C-4FE7-8916-4C09DBF30289} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - FineUI.Examples - FineUI.Examples - v2.0 - - - - - 4.0 - - false - - - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\ - TRACE - prompt - 4 - AllRules.ruleset - - - - False - library\CKEditor.NET.dll - - - False - library\FredCK.FCKeditorV2.dll - - - False - library\Newtonsoft.Json.dll - - - - - - - - - - False - library\Wilco.SyntaxHighlighter.dll - - - - - - - - - - - - - - - - - - - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - - - - - - - aspnet.aspx - ASPXCodeBehind - - - aspnet.aspx - - - fileupload.aspx - ASPXCodeBehind - - - fileupload.aspx - - - fckeditor.aspx - ASPXCodeBehind - - - fckeditor.aspx - - - aspnet_literal.aspx - ASPXCodeBehind - - - aspnet_literal.aspx - - - test.aspx - ASPXCodeBehind - - - test.aspx - - - TestWindow.aspx - ASPXCodeBehind - - - TestWindow.aspx - - - ckeditor.aspx - ASPXCodeBehind - - - ckeditor.aspx - - - ueditor.aspx - ASPXCodeBehind - - - ueditor.aspx - - - ueditor_two.aspx - ASPXCodeBehind - - - ueditor_two.aspx - - - inline.aspx - ASPXCodeBehind - - - inline.aspx - - - custom_display.aspx - ASPXCodeBehind - - - custom_display.aspx - - - multi_values_remote.aspx - ASPXCodeBehind - - - multi_values_remote.aspx - - - search.ashx - - - multi_values.aspx - ASPXCodeBehind - - - multi_values.aspx - - - remote_with_cache.aspx - ASPXCodeBehind - - - remote_with_cache.aspx - - - email.aspx - ASPXCodeBehind - - - email.aspx - - - button_custom.aspx - ASPXCodeBehind - - - button_custom.aspx - - - source.aspx - ASPXCodeBehind - - - source.aspx - - - source_file.aspx - ASPXCodeBehind - - - source_file.aspx - - - form_reset.aspx - ASPXCodeBehind - - - form_reset.aspx - - - form_hide_field.aspx - ASPXCodeBehind - - - form_hide_field.aspx - - - form_center_button.aspx - ASPXCodeBehind - - - form_center_button.aspx - - - fileupload_toolbar.aspx - ASPXCodeBehind - - - fileupload_toolbar.aspx - - - grid_edit_compare.aspx - ASPXCodeBehind - - - grid_edit_compare.aspx - - - grid_edit_dropdownlist_textbox.aspx - ASPXCodeBehind - - - grid_edit_dropdownlist_textbox.aspx - - - grid_simulate_tree_database_paging.aspx - ASPXCodeBehind - - - grid_simulate_tree_database_paging.aspx - - - grid_width_forcefitalltime.aspx - ASPXCodeBehind - - - grid_width_forcefitalltime.aspx - - - grid_width_forcefitfirsttime.aspx - ASPXCodeBehind - - - grid_width_forcefitfirsttime.aspx - - - grid_width_expandunusedspace.aspx - ASPXCodeBehind - - - grid_width_expandunusedspace.aspx - - - grid_width.aspx - ASPXCodeBehind - - - grid_width.aspx - - - grid_checkboxfield_checkall.aspx - ASPXCodeBehind - - - grid_checkboxfield_checkall.aspx - - - grid_rowclick.aspx - ASPXCodeBehind - - - grid_rowclick.aspx - - - grid_rowdoubleclick.aspx - ASPXCodeBehind - - - grid_rowdoubleclick.aspx - - - grid_rowselect.aspx - ASPXCodeBehind - - - grid_rowselect.aspx - - - grid_edit_save_auto.aspx - ASPXCodeBehind - - - grid_edit_save_auto.aspx - - - grid_edit_save_manual.aspx - ASPXCodeBehind - - - grid_edit_save_manual.aspx - - - grid_text_middle.aspx - ASPXCodeBehind - - - grid_text_middle.aspx - - - grid_simulate_tree_paging.aspx - ASPXCodeBehind - - - grid_simulate_tree_paging.aspx - - - grid_simulate_tree_database_paging_dropdownlist.aspx - ASPXCodeBehind - - - grid_simulate_tree_database_paging_dropdownlist.aspx - - - grid_hdmenu_hidecolumn.aspx - ASPXCodeBehind - - - grid_hdmenu_hidecolumn.aspx - - - grid_hdmenu_sorting.aspx - ASPXCodeBehind - - - grid_hdmenu_sorting.aspx - - - grid_text_top.aspx - ASPXCodeBehind - - - grid_text_top.aspx - - - grid_column_lines.aspx - ASPXCodeBehind - - - grid_column_lines.aspx - - - grid_empty_text.aspx - ASPXCodeBehind - - - grid_empty_text.aspx - - - grid_editor_cell.aspx - ASPXCodeBehind - - - grid_editor_cell.aspx - - - grid_groupheader_sort_hdmenu.aspx - ASPXCodeBehind - - - grid_groupheader_sort_hdmenu.aspx - - - grid_groupheader_sort.aspx - ASPXCodeBehind - - - grid_groupheader_sort.aspx - - - grid_paging_database_sorting.aspx - ASPXCodeBehind - - - grid_paging_database_sorting.aspx - - - grid_editor_cell2.aspx - ASPXCodeBehind - - - grid_editor_cell2.aspx - - - grid_checkboxfield_rowcheckall.aspx - ASPXCodeBehind - - - grid_checkboxfield_rowcheckall.aspx - - - grid_editor_cell_new.aspx - ASPXCodeBehind - - - grid_editor_cell_new.aspx - - - grid_editor_cell_delete.aspx - ASPXCodeBehind - - - grid_editor_cell_delete.aspx - - - grid_summary.aspx - ASPXCodeBehind - - - grid_summary.aspx - - - grid_checkall_only.aspx - ASPXCodeBehind - - - grid_checkall_only.aspx - - - grid_summary_serverside.aspx - ASPXCodeBehind - - - grid_summary_serverside.aspx - - - grid_summary_absolute.aspx - ASPXCodeBehind - - - grid_summary_absolute.aspx - - - grid_line_wrap.aspx - ASPXCodeBehind - - - grid_line_wrap.aspx - - - grid_summary_serverside_paged.aspx - ASPXCodeBehind - - - grid_summary_serverside_paged.aspx - - - grid_editor_cell_renderfunction.aspx - ASPXCodeBehind - - - grid_editor_cell_renderfunction.aspx - - - grid_rowcommand_paging.aspx - ASPXCodeBehind - - - grid_rowcommand_paging.aspx - - - grid_rowcommand_paging_database.aspx - ASPXCodeBehind - - - grid_rowcommand_paging_database.aspx - - - grid_editor_cell_new_delete.aspx - ASPXCodeBehind - - - grid_editor_cell_new_delete.aspx - - - grid_editor_cell_afteredit.aspx - ASPXCodeBehind - - - grid_editor_cell_afteredit.aspx - - - grid_excel_selectcolumns.aspx - ASPXCodeBehind - - - grid_excel_selectcolumns.aspx - - - selectprovince1.aspx - ASPXCodeBehind - - - selectprovince1.aspx - - - selectprovince1_child.aspx - ASPXCodeBehind - - - selectprovince1_child.aspx - - - selectprovince2.aspx - ASPXCodeBehind - - - selectprovince2.aspx - - - selectprovince2_child.aspx - ASPXCodeBehind - - - selectprovince2_child.aspx - - - selectprovince3.aspx - ASPXCodeBehind - - - selectprovince3.aspx - - - selectprovince3_child.aspx - ASPXCodeBehind - - - selectprovince3_child.aspx - - - default.aspx - ASPXCodeBehind - - - default.aspx - - - leftmenu.aspx - ASPXCodeBehind - - - leftmenu.aspx - - - default.aspx - ASPXCodeBehind - - - default.aspx - - - leftmenu.aspx - ASPXCodeBehind - - - leftmenu.aspx - - - default.aspx - ASPXCodeBehind - - - default.aspx - - - keydown.aspx - ASPXCodeBehind - - - keydown.aspx - - - captcha.ashx - - - - hello_aspnet.aspx - ASPXCodeBehind - - - hello_aspnet.aspx - - - hello.aspx - ASPXCodeBehind - - - hello.aspx - - - login.aspx - ASPXCodeBehind - - - login.aspx - - - login_captcha.aspx - ASPXCodeBehind - - - login_captcha.aspx - - - button.aspx - ASPXCodeBehind - - - button.aspx - - - button_icon.aspx - ASPXCodeBehind - - - button_icon.aspx - - - button_click.aspx - ASPXCodeBehind - - - button_click.aspx - - - button_menu.aspx - ASPXCodeBehind - - - button_menu.aspx - - - button_linkbutton.aspx - ASPXCodeBehind - - - button_linkbutton.aspx - - - ASPXCodeBehind - - - dropdownlist_compositelist.aspx - ASPXCodeBehind - - - dropdownlist_compositelist.aspx - - - dropdownlist_datatable.aspx - ASPXCodeBehind - - - dropdownlist_datatable.aspx - - - dropdownlist_simulate_tree.aspx - ASPXCodeBehind - - - dropdownlist_simulate_tree.aspx - - - dropdownlist_simplelist.aspx - ASPXCodeBehind - - - dropdownlist_simplelist.aspx - - - dropdownlist_emptyvalue.aspx - ASPXCodeBehind - - - dropdownlist_emptyvalue.aspx - - - dropdownlist_forceselection.aspx - ASPXCodeBehind - - - dropdownlist_forceselection.aspx - - - dropdownlist_enableedit.aspx - ASPXCodeBehind - - - dropdownlist_enableedit.aspx - - - checkbox.aspx - ASPXCodeBehind - - - checkbox.aspx - - - fileupload.aspx - ASPXCodeBehind - - - fileupload.aspx - - - layout_panel.aspx - ASPXCodeBehind - - - layout_panel.aspx - - - twintriggerbox.aspx - ASPXCodeBehind - - - twintriggerbox.aspx - - - textbox.aspx - ASPXCodeBehind - - - textbox.aspx - - - textbox_autopostback.aspx - ASPXCodeBehind - - - textbox_autopostback.aspx - - - htmleditor.aspx - ASPXCodeBehind - - - htmleditor.aspx - - - label.aspx - ASPXCodeBehind - - - label.aspx - - - hyperlink.aspx - ASPXCodeBehind - - - hyperlink.aspx - - - datepicker.aspx - - - numberbox.aspx - ASPXCodeBehind - - - numberbox.aspx - - - tooltip.aspx - ASPXCodeBehind - - - tooltip.aspx - - - textarea_autogrow.aspx - ASPXCodeBehind - - - textarea_autogrow.aspx - - - checkboxlist.aspx - ASPXCodeBehind - - - checkboxlist.aspx - - - layout_panel2.aspx - ASPXCodeBehind - - - layout_panel2.aspx - - - datepicker_autopostback.aspx - ASPXCodeBehind - - - datepicker_autopostback.aspx - - - calendar.aspx - ASPXCodeBehind - - - calendar.aspx - - - datepicker_range.aspx - ASPXCodeBehind - - - datepicker_range.aspx - - - checkboxlist_update.aspx - ASPXCodeBehind - - - checkboxlist_update.aspx - - - radiobuttonlist_update.aspx - ASPXCodeBehind - - - radiobuttonlist_update.aspx - - - timepicker.aspx - ASPXCodeBehind - - - timepicker.aspx - - - fileupload_autopostback.aspx - ASPXCodeBehind - - - fileupload_autopostback.aspx - - - grid.aspx - ASPXCodeBehind - - - grid.aspx - - - grid_aspnet.aspx - ASPXCodeBehind - - - grid_aspnet.aspx - - - grid_checkboxfield.aspx - ASPXCodeBehind - - - grid_checkboxfield.aspx - - - grid_complex_property.aspx - ASPXCodeBehind - - - grid_complex_property.aspx - - - grid_paging_database.aspx - ASPXCodeBehind - - - grid_paging_database.aspx - - - grid_dynamic_columns.aspx - ASPXCodeBehind - - - grid_dynamic_columns.aspx - - - grid_excel.aspx - ASPXCodeBehind - - - grid_excel.aspx - - - grid_iframe.aspx - ASPXCodeBehind - - - grid_iframe.aspx - - - grid_iframe_window.aspx - ASPXCodeBehind - - - grid_iframe_window.aspx - - - grid_paging.aspx - ASPXCodeBehind - - - grid_paging.aspx - - - grid_rowdatabound.aspx - ASPXCodeBehind - - - grid_rowdatabound.aspx - - - grid_rowcolor.aspx - ASPXCodeBehind - - - grid_rowcolor.aspx - - - grid_simulate_tree.aspx - ASPXCodeBehind - - - grid_simulate_tree.aspx - - - grid_sorting.aspx - ASPXCodeBehind - - - grid_sorting.aspx - - - grid_checkall.aspx - ASPXCodeBehind - - - grid_checkall.aspx - - - grid_hidecolumn.aspx - ASPXCodeBehind - - - grid_hidecolumn.aspx - - - grid_rowcommand.aspx - ASPXCodeBehind - - - grid_rowcommand.aspx - - - grid_centercolumn.aspx - ASPXCodeBehind - - - grid_centercolumn.aspx - - - grid_rowexpander.aspx - ASPXCodeBehind - - - grid_rowexpander.aspx - - - grid_rowcheckall.aspx - ASPXCodeBehind - - - grid_rowcheckall.aspx - - - grid_paging_sorting.aspx - ASPXCodeBehind - - - grid_paging_sorting.aspx - - - grid_edit.aspx - ASPXCodeBehind - - - grid_edit.aspx - - - grid_edit_dropdownlist.aspx - ASPXCodeBehind - - - grid_edit_dropdownlist.aspx - - - grid_edit_dropdownlist2.aspx - ASPXCodeBehind - - - grid_edit_dropdownlist2.aspx - - - grid_edit_dropdownlist_update.aspx - ASPXCodeBehind - - - grid_edit_dropdownlist_update.aspx - - - grid_checkboxfield_autopostback.aspx - ASPXCodeBehind - - - grid_checkboxfield_autopostback.aspx - - - grid_twogrid.aspx - ASPXCodeBehind - - - grid_twogrid.aspx - - - grid_prerowdatabound.aspx - ASPXCodeBehind - - - grid_prerowdatabound.aspx - - - grid_rowexpander_expandall.aspx - ASPXCodeBehind - - - grid_rowexpander_expandall.aspx - - - grid_aspnet_rowdatabound.aspx - ASPXCodeBehind - - - grid_aspnet_rowdatabound.aspx - - - grid_rowexpander_expandall2.aspx - ASPXCodeBehind - - - grid_rowexpander_expandall2.aspx - - - grid_textselection.aspx - ASPXCodeBehind - - - grid_textselection.aspx - - - grid_groupheader.aspx - ASPXCodeBehind - - - grid_groupheader.aspx - - - grid_dynamic_columns2.aspx - ASPXCodeBehind - - - grid_dynamic_columns2.aspx - - - grid_excel_aspnet.aspx - ASPXCodeBehind - - - grid_excel_aspnet.aspx - - - grid_edit_radiobuttonlist.aspx - ASPXCodeBehind - - - grid_edit_radiobuttonlist.aspx - - - grid_edit_checkboxlist.aspx - ASPXCodeBehind - - - grid_edit_checkboxlist.aspx - - - grid_pageitems_pagesize.aspx - ASPXCodeBehind - - - grid_pageitems_pagesize.aspx - - - grid_pageitems_rowexpander.aspx - ASPXCodeBehind - - - grid_pageitems_rowexpander.aspx - - - grid_pageitems.aspx - ASPXCodeBehind - - - grid_pageitems.aspx - - - grid_pageitems_pagesize_database.aspx - ASPXCodeBehind - - - grid_pageitems_pagesize_database.aspx - - - grid_rownumber_paging.aspx - ASPXCodeBehind - - - grid_rownumber_paging.aspx - - - grid_rownumber_width.aspx - ASPXCodeBehind - - - grid_rownumber_width.aspx - - - grid_rownumber_paging_database.aspx - ASPXCodeBehind - - - grid_rownumber_paging_database.aspx - - - grid_paging_selection.aspx - ASPXCodeBehind - - - grid_paging_selection.aspx - - - grid_paging_database_selection.aspx - ASPXCodeBehind - - - grid_paging_database_selection.aspx - - - passvalue_iframe.aspx - ASPXCodeBehind - - - passvalue_iframe.aspx - - - passvalue_iframe_iframe.aspx - ASPXCodeBehind - - - passvalue_iframe_iframe.aspx - - - parent_postback_top.aspx - ASPXCodeBehind - - - parent_postback_top.aspx - - - parent_postback_top2.aspx - ASPXCodeBehind - - - parent_postback_top2.aspx - - - parent_postback_top3.aspx - ASPXCodeBehind - - - parent_postback_top3.aspx - - - parent_simplepostback.aspx - ASPXCodeBehind - - - parent_simplepostback.aspx - - - parent_simplepostback2.aspx - ASPXCodeBehind - - - parent_simplepostback2.aspx - - - table.aspx - ASPXCodeBehind - - - table.aspx - - - hbox.aspx - ASPXCodeBehind - - - hbox.aspx - - - vbox.aspx - ASPXCodeBehind - - - vbox.aspx - - - alert.aspx - ASPXCodeBehind - - - alert.aspx - - - button_in_form.aspx - ASPXCodeBehind - - - button_in_form.aspx - - - confirm_cancel.aspx - ASPXCodeBehind - - - confirm_cancel.aspx - - - cssclass.aspx - ASPXCodeBehind - - - cssclass.aspx - - - tabstrip_iframe_disabled.aspx - ASPXCodeBehind - - - tabstrip_iframe_disabled.aspx - - - tabstrip_iframe_disabled_tab1.aspx - ASPXCodeBehind - - - tabstrip_iframe_disabled_tab1.aspx - - - start.aspx - ASPXCodeBehind - - - start.aspx - - - toolbar_iframe.aspx - ASPXCodeBehind - - - toolbar_iframe.aspx - - - cssstyle.aspx - ASPXCodeBehind - - - cssstyle.aspx - - - addtab.aspx - ASPXCodeBehind - - - addtab.aspx - - - ajax_loading.aspx - ASPXCodeBehind - - - ajax_loading.aspx - - - test3.aspx - - - textbox.aspx - ASPXCodeBehind - - - textbox.aspx - - - timer.aspx - ASPXCodeBehind - - - timer.aspx - - - menu.aspx - ASPXCodeBehind - - - menu.aspx - - - menucheckbox.aspx - ASPXCodeBehind - - - menucheckbox.aspx - - - tree_checked.aspx - ASPXCodeBehind - - - tree_checked.aspx - - - tree_nodecommand.aspx - ASPXCodeBehind - - - tree_nodecommand.aspx - - - tree_icon.aspx - ASPXCodeBehind - - - tree_icon.aspx - - - tree_select.aspx - ASPXCodeBehind - - - tree_select.aspx - - - tree_sitemap.aspx - ASPXCodeBehind - - - tree_sitemap.aspx - - - tree_datasource.aspx - ASPXCodeBehind - - - tree_datasource.aspx - - - tree_document.aspx - ASPXCodeBehind - - - tree_document.aspx - - - tree.aspx - ASPXCodeBehind - - - tree.aspx - - - tree_ajax.aspx - ASPXCodeBehind - - - tree_ajax.aspx - - - tree_datatable.aspx - ASPXCodeBehind - - - tree_datatable.aspx - - - tree_checkall.aspx - ASPXCodeBehind - - - tree_checkall.aspx - - - shengshixian.aspx - ASPXCodeBehind - - - shengshixian.aspx - - - dropdownlist.aspx - ASPXCodeBehind - - - dropdownlist.aspx - - - default.aspx - ASPXCodeBehind - - - default.aspx - - - form_dynamic.aspx - ASPXCodeBehind - - - form_dynamic.aspx - - - form_compare.aspx - ASPXCodeBehind - - - form_compare.aspx - - - form.aspx - ASPXCodeBehind - - - form.aspx - - - radiobutton.aspx - ASPXCodeBehind - - - radiobutton.aspx - - - datepicker.aspx - ASPXCodeBehind - - - triggerbox.aspx - ASPXCodeBehind - - - triggerbox.aspx - - - image.aspx - ASPXCodeBehind - - - image.aspx - - - form_validate.aspx - ASPXCodeBehind - - - form_validate.aspx - - - icons.aspx - ASPXCodeBehind - - - icons.aspx - - - radiobuttonlist.aspx - ASPXCodeBehind - - - radiobuttonlist.aspx - - - button_iframe.aspx - ASPXCodeBehind - - - button_iframe.aspx - - - grid_iframe.aspx - ASPXCodeBehind - - - grid_iframe.aspx - - - iframe_iframe.aspx - ASPXCodeBehind - - - iframe_iframe.aspx - - - iframe_iframe_window1.aspx - ASPXCodeBehind - - - iframe_iframe_window1.aspx - - - iframe_iframe_window2.aspx - ASPXCodeBehind - - - iframe_iframe_window2.aspx - - - triggerbox_iframe.aspx - ASPXCodeBehind - - - triggerbox_iframe.aspx - - - triggerbox_iframe_iframe.aspx - ASPXCodeBehind - - - triggerbox_iframe_iframe.aspx - - - parent_postback.aspx - ASPXCodeBehind - - - parent_postback.aspx - - - parent_postback2.aspx - ASPXCodeBehind - - - parent_postback2.aspx - - - parent_postback3.aspx - ASPXCodeBehind - - - parent_postback3.aspx - - - absolute.aspx - ASPXCodeBehind - - - absolute.aspx - - - accordion.aspx - ASPXCodeBehind - - - accordion.aspx - - - anchor.aspx - ASPXCodeBehind - - - anchor.aspx - - - border.aspx - ASPXCodeBehind - - - border.aspx - - - card.aspx - ASPXCodeBehind - - - card.aspx - - - column.aspx - ASPXCodeBehind - - - column.aspx - - - fit.aspx - ASPXCodeBehind - - - fit.aspx - - - form.aspx - ASPXCodeBehind - - - form.aspx - - - row.aspx - ASPXCodeBehind - - - row.aspx - - - tabstrip_iframe.aspx - ASPXCodeBehind - - - tabstrip_iframe.aspx - - - tabstrip.aspx - ASPXCodeBehind - - - tabstrip.aspx - - - menu_dynamic2.aspx - ASPXCodeBehind - - - menu_dynamic2.aspx - - - menu_dynamic.aspx - ASPXCodeBehind - - - menu_dynamic.aspx - - - toolbar.aspx - ASPXCodeBehind - - - toolbar.aspx - - - accordion_tree.aspx - ASPXCodeBehind - - - accordion_tree.aspx - - - timer.aspx - ASPXCodeBehind - - - timer.aspx - - - custom_postback.aspx - ASPXCodeBehind - - - custom_postback.aspx - - - - tabstrip_enableclose.aspx - ASPXCodeBehind - - - tabstrip_enableclose.aspx - - - tabstrip_addtab.aspx - ASPXCodeBehind - - - tabstrip_addtab.aspx - - - tabstrip_autopostback.aspx - ASPXCodeBehind - - - tabstrip_autopostback.aspx - - - test.aspx - ASPXCodeBehind - - - test.aspx - - - test2.aspx - ASPXCodeBehind - - - test2.aspx - - - ajax.aspx - ASPXCodeBehind - - - ajax.aspx - - - test3.aspx - ASPXCodeBehind - - - test4.aspx - ASPXCodeBehind - - - test4.aspx - - - tree_multi_select.aspx - ASPXCodeBehind - - - tree_multi_select.aspx - - - fileUp.ashx - - - getContent.ashx - - - getMovie.ashx - - - getRemoteImage.ashx - - - imageManager.ashx - - - imageUp.ashx - - - scrawlUp.ashx - - - - UserInfoControl.ascx - ASPXCodeBehind - - - UserInfoControl.ascx - - - userinfo.aspx - ASPXCodeBehind - - - userinfo.aspx - - - userinfo2.aspx - ASPXCodeBehind - - - userinfo2.aspx - - - userinfo_dynamic.aspx - ASPXCodeBehind - - - userinfo_dynamic.aspx - - - group_panel.aspx - ASPXCodeBehind - - - group_panel.aspx - - - panel.aspx - ASPXCodeBehind - - - panel.aspx - - - window.aspx - ASPXCodeBehind - - - window.aspx - - - window_toolbar.aspx - ASPXCodeBehind - - - window_toolbar.aspx - - - - - {0F8BF1F6-DDC2-43DA-BB0B-416CC287AC1B} - FineUI - - - - - - - - - - - - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - False - True - 11126 - / - - - False - False - - - False - - - - + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CF702D32-2B3C-4FE7-8916-4C09DBF30289} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + FineUI.Examples + FineUI.Examples + v2.0 + + + + + 4.0 + + false + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\ + TRACE + prompt + 4 + AllRules.ruleset + + + + False + ..\Newtonsoft.Json\Net20\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + accordion_autopostback.aspx + ASPXCodeBehind + + + accordion_autopostback.aspx + + + aspnet.aspx + ASPXCodeBehind + + + aspnet.aspx + + + aspnet_literal.aspx + ASPXCodeBehind + + + aspnet_literal.aspx + + + login_enterkey.aspx + ASPXCodeBehind + + + login_enterkey.aspx + + + dropdownlist_matchfieldwidth.aspx + ASPXCodeBehind + + + dropdownlist_matchfieldwidth.aspx + + + multiselect.aspx + ASPXCodeBehind + + + multiselect.aspx + + + multiselect_enableedit.aspx + ASPXCodeBehind + + + multiselect_enableedit.aspx + + + multiselect_autopostback.aspx + ASPXCodeBehind + + + multiselect_autopostback.aspx + + + Global.asax + + + grid_checkall_singleselect.aspx + ASPXCodeBehind + + + grid_checkall_singleselect.aspx + + + grid_excel_findcontrol.aspx + ASPXCodeBehind + + + grid_excel_findcontrol.aspx + + + grid_excel_groupfield.aspx + ASPXCodeBehind + + + grid_excel_groupfield.aspx + + + grid_hide_gridheader.aspx + ASPXCodeBehind + + + grid_hide_gridheader.aspx + + + grid_lockcolumn.aspx + ASPXCodeBehind + + + grid_lockcolumn.aspx + + + grid_lockcolumn_many_columns.aspx + ASPXCodeBehind + + + grid_lockcolumn_many_columns.aspx + + + grid_lockcolumn_rowexpander.aspx + ASPXCodeBehind + + + grid_lockcolumn_rowexpander.aspx + + + grid_lockcolumn_groupheader_sort.aspx + ASPXCodeBehind + + + grid_lockcolumn_groupheader_sort.aspx + + + grid_lockcolumn_summary_scrollbar.aspx + ASPXCodeBehind + + + grid_lockcolumn_summary_scrollbar.aspx + + + grid_lockcolumn_editor_cell_new.aspx + ASPXCodeBehind + + + grid_lockcolumn_editor_cell_new.aspx + + + grid_lockcolumn_line_wrap.aspx + ASPXCodeBehind + + + grid_lockcolumn_line_wrap.aspx + + + grid_paging_database_bbar.aspx + ASPXCodeBehind + + + grid_paging_database_bbar.aspx + + + grid_prerowdatabound_cancelled.aspx + ASPXCodeBehind + + + grid_prerowdatabound_cancelled.aspx + + + grid_editor_cell_afteredit_rowexpander.aspx + ASPXCodeBehind + + + grid_editor_cell_afteredit_rowexpander.aspx + + + grid_editor_cell_new_delete_rowexpander.aspx + ASPXCodeBehind + + + grid_editor_cell_new_delete_rowexpander.aspx + + + grid_style_columnclass.aspx + ASPXCodeBehind + + + grid_style_columnclass.aspx + + + grid_summary_scrollbar_flow.aspx + ASPXCodeBehind + + + grid_summary_scrollbar_flow.aspx + + + grid_style_rowcolor_paging_database.aspx + ASPXCodeBehind + + + grid_style_rowcolor_paging_database.aspx + + + grid_style_rowcolor_paging.aspx + ASPXCodeBehind + + + grid_style_rowcolor_paging.aspx + + + grid_editor_cell_paging.aspx + ASPXCodeBehind + + + grid_editor_cell_paging.aspx + + + grid_rownumber_align.aspx + ASPXCodeBehind + + + grid_rownumber_align.aspx + + + grid_groupheader_hidden.aspx + ASPXCodeBehind + + + grid_groupheader_hidden.aspx + + + selectprovince_executescript.aspx + ASPXCodeBehind + + + selectprovince_executescript.aspx + + + selectprovince_executescript_child.aspx + ASPXCodeBehind + + + selectprovince_executescript_child.aspx + + + region.aspx + ASPXCodeBehind + + + region.aspx + + + formlist.aspx + ASPXCodeBehind + + + formlist.aspx + + + + list.aspx + ASPXCodeBehind + + + list.aspx + + + simple.aspx + ASPXCodeBehind + + + simple.aspx + + + Simple.Master + ASPXCodeBehind + + + Simple.Master + + + simple2.aspx + ASPXCodeBehind + + + simple2.aspx + + + SingleGrid.Master + ASPXCodeBehind + + + SingleGrid.Master + + + global_error.aspx + ASPXCodeBehind + + + global_error.aspx + + + pageloading.aspx + ASPXCodeBehind + + + pageloading.aspx + + + tabstrip_position.aspx + ASPXCodeBehind + + + tabstrip_position.aspx + + + Demo.aspx + ASPXCodeBehind + + + Demo.aspx + + + empty.aspx + ASPXCodeBehind + + + empty.aspx + + + grid_editor_cell_databind2.aspx + ASPXCodeBehind + + + grid_editor_cell_databind2.aspx + + + grid_iframe2.aspx + ASPXCodeBehind + + + grid_iframe2.aspx + + + iframe_window.aspx + ASPXCodeBehind + + + iframe_window.aspx + + + login__.aspx + ASPXCodeBehind + + + login__.aspx + + + LPList.aspx + ASPXCodeBehind + + + LPList.aspx + + + SingleGrid.Master + ASPXCodeBehind + + + SingleGrid.Master + + + ASPXCodeBehind + + + tabstrip_addtab2.aspx + ASPXCodeBehind + + + tabstrip_addtab2.aspx + + + triggerbox2.aspx + ASPXCodeBehind + + + triggerbox2.aspx + + + activex.aspx + ASPXCodeBehind + + + activex.aspx + + + empty2.aspx + ASPXCodeBehind + + + empty2.aspx + + + inline_window.aspx + ASPXCodeBehind + + + inline_window.aspx + + + ckeditor.aspx + ASPXCodeBehind + + + ckeditor.aspx + + + tinymce.aspx + ASPXCodeBehind + + + tinymce.aspx + + + ueditor.aspx + ASPXCodeBehind + + + ueditor.aspx + + + ueditor_two.aspx + ASPXCodeBehind + + + ueditor_two.aspx + + + button_custom.aspx + ASPXCodeBehind + + + button_custom.aspx + + + button_menu_menuid.aspx + ASPXCodeBehind + + + button_menu_menuid.aspx + + + source.aspx + ASPXCodeBehind + + + source.aspx + + + source_file.aspx + ASPXCodeBehind + + + source_file.aspx + + + form_reset.aspx + ASPXCodeBehind + + + form_reset.aspx + + + form_hide_field.aspx + ASPXCodeBehind + + + form_hide_field.aspx + + + form_center_button.aspx + ASPXCodeBehind + + + form_center_button.aspx + + + fileupload_toolbar.aspx + ASPXCodeBehind + + + fileupload_toolbar.aspx + + + form_disabled.aspx + ASPXCodeBehind + + + form_disabled.aspx + + + layout_contactus.aspx + ASPXCodeBehind + + + layout_contactus.aspx + + + layout_checkout.aspx + ASPXCodeBehind + + + layout_checkout.aspx + + + grid_editor_cell_databind.aspx + ASPXCodeBehind + + + grid_editor_cell_databind.aspx + + + grid_edit_compare.aspx + ASPXCodeBehind + + + grid_edit_compare.aspx + + + grid_edit_dropdownlist_textbox.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist_textbox.aspx + + + grid_excel_dynamic_columns.aspx + ASPXCodeBehind + + + grid_excel_dynamic_columns.aspx + + + grid_simulate_tree_database_paging.aspx + ASPXCodeBehind + + + grid_simulate_tree_database_paging.aspx + + + grid_width_forcefit.aspx + ASPXCodeBehind + + + grid_width_forcefit.aspx + + + grid_width_expandunusedspace.aspx + ASPXCodeBehind + + + grid_width_expandunusedspace.aspx + + + grid_width.aspx + ASPXCodeBehind + + + grid_width.aspx + + + grid_checkboxfield_checkall.aspx + ASPXCodeBehind + + + grid_checkboxfield_checkall.aspx + + + grid_rowclick.aspx + ASPXCodeBehind + + + grid_rowclick.aspx + + + grid_rowdoubleclick.aspx + ASPXCodeBehind + + + grid_rowdoubleclick.aspx + + + grid_rowselect.aspx + ASPXCodeBehind + + + grid_rowselect.aspx + + + grid_edit_save_auto.aspx + ASPXCodeBehind + + + grid_edit_save_auto.aspx + + + grid_text_middle.aspx + ASPXCodeBehind + + + grid_text_middle.aspx + + + grid_simulate_tree_paging.aspx + ASPXCodeBehind + + + grid_simulate_tree_paging.aspx + + + grid_simulate_tree_database_paging_dropdownlist.aspx + ASPXCodeBehind + + + grid_simulate_tree_database_paging_dropdownlist.aspx + + + grid_hdmenu_hidecolumn.aspx + ASPXCodeBehind + + + grid_hdmenu_hidecolumn.aspx + + + grid_hdmenu_sorting.aspx + ASPXCodeBehind + + + grid_hdmenu_sorting.aspx + + + grid_text_top.aspx + ASPXCodeBehind + + + grid_text_top.aspx + + + grid_column_lines.aspx + ASPXCodeBehind + + + grid_column_lines.aspx + + + grid_empty_text.aspx + ASPXCodeBehind + + + grid_empty_text.aspx + + + grid_editor_cell.aspx + ASPXCodeBehind + + + grid_editor_cell.aspx + + + grid_groupheader_sort_hdmenu.aspx + ASPXCodeBehind + + + grid_groupheader_sort_hdmenu.aspx + + + grid_groupheader_sort.aspx + ASPXCodeBehind + + + grid_groupheader_sort.aspx + + + grid_paging_database_sorting.aspx + ASPXCodeBehind + + + grid_paging_database_sorting.aspx + + + grid_checkboxfield_rowcheckall.aspx + ASPXCodeBehind + + + grid_checkboxfield_rowcheckall.aspx + + + grid_editor_cell_new.aspx + ASPXCodeBehind + + + grid_editor_cell_new.aspx + + + grid_editor_cell_delete.aspx + ASPXCodeBehind + + + grid_editor_cell_delete.aspx + + + grid_checkall_only.aspx + ASPXCodeBehind + + + grid_checkall_only.aspx + + + grid_line_wrap.aspx + ASPXCodeBehind + + + grid_line_wrap.aspx + + + grid_editor_cell_renderfunction.aspx + ASPXCodeBehind + + + grid_editor_cell_renderfunction.aspx + + + grid_rowcommand_paging.aspx + ASPXCodeBehind + + + grid_rowcommand_paging.aspx + + + grid_rowcommand_paging_database.aspx + ASPXCodeBehind + + + grid_rowcommand_paging_database.aspx + + + grid_editor_cell_new_delete.aspx + ASPXCodeBehind + + + grid_editor_cell_new_delete.aspx + + + grid_editor_cell_afteredit.aspx + ASPXCodeBehind + + + grid_editor_cell_afteredit.aspx + + + grid_excel_selectcolumns.aspx + ASPXCodeBehind + + + grid_excel_selectcolumns.aspx + + + grid_summary.aspx + ASPXCodeBehind + + + grid_summary.aspx + + + grid_edit_enterkey_v.aspx + ASPXCodeBehind + + + grid_edit_enterkey_v.aspx + + + grid_edit_enterkey_h.aspx + ASPXCodeBehind + + + grid_edit_enterkey_h.aspx + + + grid_summary_currentpage.aspx + ASPXCodeBehind + + + grid_summary_currentpage.aspx + + + grid_checkboxfield_rowcheckall_clientside.aspx + ASPXCodeBehind + + + grid_checkboxfield_rowcheckall_clientside.aspx + + + grid_checkboxfield_rowcheckall_contextmenu.aspx + ASPXCodeBehind + + + grid_checkboxfield_rowcheckall_contextmenu.aspx + + + grid_excel_selectcolumns_iframe_window.aspx + ASPXCodeBehind + + + grid_excel_selectcolumns_iframe_window.aspx + + + grid_edit_cart.aspx + ASPXCodeBehind + + + grid_edit_cart.aspx + + + grid_rowcommand_download.aspx + ASPXCodeBehind + + + grid_rowcommand_download.aspx + + + grid_summary_scrollbar.aspx + ASPXCodeBehind + + + grid_summary_scrollbar.aspx + + + selectprovince1.aspx + ASPXCodeBehind + + + selectprovince1.aspx + + + selectprovince1_child.aspx + ASPXCodeBehind + + + selectprovince1_child.aspx + + + selectprovince2.aspx + ASPXCodeBehind + + + selectprovince2.aspx + + + selectprovince2_child.aspx + ASPXCodeBehind + + + selectprovince2_child.aspx + + + selectprovince3.aspx + ASPXCodeBehind + + + selectprovince3.aspx + + + selectprovince3_child.aspx + ASPXCodeBehind + + + selectprovince3_child.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + leftmenu.aspx + ASPXCodeBehind + + + leftmenu.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + leftmenu.aspx + ASPXCodeBehind + + + leftmenu.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + leftmenu.aspx + ASPXCodeBehind + + + leftmenu.aspx + + + window.aspx + ASPXCodeBehind + + + window.aspx + + + window_iframe.aspx + ASPXCodeBehind + + + window_iframe.aspx + + + window2.aspx + ASPXCodeBehind + + + window2.aspx + + + window2_iframe.aspx + ASPXCodeBehind + + + window2_iframe.aspx + + + keydown.aspx + ASPXCodeBehind + + + keydown.aspx + + + captcha.ashx + + + + hello_aspnet.aspx + ASPXCodeBehind + + + hello_aspnet.aspx + + + hello.aspx + ASPXCodeBehind + + + hello.aspx + + + login.aspx + ASPXCodeBehind + + + login.aspx + + + login_captcha.aspx + ASPXCodeBehind + + + login_captcha.aspx + + + button.aspx + ASPXCodeBehind + + + button.aspx + + + button_icon.aspx + ASPXCodeBehind + + + button_icon.aspx + + + button_click.aspx + ASPXCodeBehind + + + button_click.aspx + + + button_menu.aspx + ASPXCodeBehind + + + button_menu.aspx + + + button_linkbutton.aspx + ASPXCodeBehind + + + button_linkbutton.aspx + + + ASPXCodeBehind + + + dropdownlist_compositelist.aspx + ASPXCodeBehind + + + dropdownlist_compositelist.aspx + + + dropdownlist_datatable.aspx + ASPXCodeBehind + + + dropdownlist_datatable.aspx + + + dropdownlist_simulate_tree.aspx + ASPXCodeBehind + + + dropdownlist_simulate_tree.aspx + + + dropdownlist_simplelist.aspx + ASPXCodeBehind + + + dropdownlist_simplelist.aspx + + + dropdownlist_emptyvalue.aspx + ASPXCodeBehind + + + dropdownlist_emptyvalue.aspx + + + dropdownlist_forceselection.aspx + ASPXCodeBehind + + + dropdownlist_forceselection.aspx + + + dropdownlist_enableedit.aspx + ASPXCodeBehind + + + dropdownlist_enableedit.aspx + + + checkbox.aspx + ASPXCodeBehind + + + checkbox.aspx + + + fileupload.aspx + ASPXCodeBehind + + + fileupload.aspx + + + layout_panel.aspx + ASPXCodeBehind + + + layout_panel.aspx + + + twintriggerbox.aspx + ASPXCodeBehind + + + twintriggerbox.aspx + + + textbox.aspx + ASPXCodeBehind + + + textbox.aspx + + + textbox_autopostback.aspx + ASPXCodeBehind + + + textbox_autopostback.aspx + + + htmleditor.aspx + ASPXCodeBehind + + + htmleditor.aspx + + + label.aspx + ASPXCodeBehind + + + label.aspx + + + hyperlink.aspx + ASPXCodeBehind + + + hyperlink.aspx + + + datepicker.aspx + + + numberbox.aspx + ASPXCodeBehind + + + numberbox.aspx + + + tooltip.aspx + ASPXCodeBehind + + + tooltip.aspx + + + textarea_autogrow.aspx + ASPXCodeBehind + + + textarea_autogrow.aspx + + + checkboxlist.aspx + ASPXCodeBehind + + + checkboxlist.aspx + + + layout_panel2.aspx + ASPXCodeBehind + + + layout_panel2.aspx + + + datepicker_autopostback.aspx + ASPXCodeBehind + + + datepicker_autopostback.aspx + + + calendar.aspx + ASPXCodeBehind + + + calendar.aspx + + + datepicker_range.aspx + ASPXCodeBehind + + + datepicker_range.aspx + + + checkboxlist_update.aspx + ASPXCodeBehind + + + checkboxlist_update.aspx + + + radiobuttonlist_update.aspx + ASPXCodeBehind + + + radiobuttonlist_update.aspx + + + timepicker.aspx + ASPXCodeBehind + + + timepicker.aspx + + + fileupload_autopostback.aspx + ASPXCodeBehind + + + fileupload_autopostback.aspx + + + grid.aspx + ASPXCodeBehind + + + grid.aspx + + + grid_aspnet.aspx + ASPXCodeBehind + + + grid_aspnet.aspx + + + grid_checkboxfield.aspx + ASPXCodeBehind + + + grid_checkboxfield.aspx + + + grid_complex_property.aspx + ASPXCodeBehind + + + grid_complex_property.aspx + + + grid_paging_database.aspx + ASPXCodeBehind + + + grid_paging_database.aspx + + + grid_dynamic_columns.aspx + ASPXCodeBehind + + + grid_dynamic_columns.aspx + + + grid_excel.aspx + ASPXCodeBehind + + + grid_excel.aspx + + + grid_iframe.aspx + ASPXCodeBehind + + + grid_iframe.aspx + + + grid_iframe_window.aspx + ASPXCodeBehind + + + grid_iframe_window.aspx + + + grid_paging.aspx + ASPXCodeBehind + + + grid_paging.aspx + + + grid_rowdatabound.aspx + ASPXCodeBehind + + + grid_rowdatabound.aspx + + + grid_style_rowcolor.aspx + ASPXCodeBehind + + + grid_style_rowcolor.aspx + + + grid_simulate_tree.aspx + ASPXCodeBehind + + + grid_simulate_tree.aspx + + + grid_sorting.aspx + ASPXCodeBehind + + + grid_sorting.aspx + + + grid_checkall.aspx + ASPXCodeBehind + + + grid_checkall.aspx + + + grid_hidecolumn.aspx + ASPXCodeBehind + + + grid_hidecolumn.aspx + + + grid_rowcommand.aspx + ASPXCodeBehind + + + grid_rowcommand.aspx + + + grid_centercolumn.aspx + ASPXCodeBehind + + + grid_centercolumn.aspx + + + grid_rowexpander.aspx + ASPXCodeBehind + + + grid_rowexpander.aspx + + + grid_rowcheckall.aspx + ASPXCodeBehind + + + grid_rowcheckall.aspx + + + grid_paging_sorting.aspx + ASPXCodeBehind + + + grid_paging_sorting.aspx + + + grid_edit.aspx + ASPXCodeBehind + + + grid_edit.aspx + + + grid_edit_dropdownlist.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist.aspx + + + grid_edit_dropdownlist2.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist2.aspx + + + grid_edit_dropdownlist_update.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist_update.aspx + + + grid_checkboxfield_autopostback.aspx + ASPXCodeBehind + + + grid_checkboxfield_autopostback.aspx + + + grid_twogrid.aspx + ASPXCodeBehind + + + grid_twogrid.aspx + + + grid_prerowdatabound.aspx + ASPXCodeBehind + + + grid_prerowdatabound.aspx + + + grid_rowexpander_expandall_js.aspx + ASPXCodeBehind + + + grid_rowexpander_expandall_js.aspx + + + grid_aspnet_rowdatabound.aspx + ASPXCodeBehind + + + grid_aspnet_rowdatabound.aspx + + + grid_rowexpander_expandall.aspx + ASPXCodeBehind + + + grid_rowexpander_expandall.aspx + + + grid_textselection.aspx + ASPXCodeBehind + + + grid_textselection.aspx + + + grid_groupheader.aspx + ASPXCodeBehind + + + grid_groupheader.aspx + + + grid_dynamic_columns2.aspx + ASPXCodeBehind + + + grid_dynamic_columns2.aspx + + + grid_excel_aspnet.aspx + ASPXCodeBehind + + + grid_excel_aspnet.aspx + + + grid_edit_radiobuttonlist.aspx + ASPXCodeBehind + + + grid_edit_radiobuttonlist.aspx + + + grid_edit_checkboxlist.aspx + ASPXCodeBehind + + + grid_edit_checkboxlist.aspx + + + grid_pageitems_pagesize.aspx + ASPXCodeBehind + + + grid_pageitems_pagesize.aspx + + + grid_pageitems_rowexpander.aspx + ASPXCodeBehind + + + grid_pageitems_rowexpander.aspx + + + grid_pageitems.aspx + ASPXCodeBehind + + + grid_pageitems.aspx + + + grid_pageitems_pagesize_database.aspx + ASPXCodeBehind + + + grid_pageitems_pagesize_database.aspx + + + grid_rownumber_paging.aspx + ASPXCodeBehind + + + grid_rownumber_paging.aspx + + + grid_rownumber_width.aspx + ASPXCodeBehind + + + grid_rownumber_width.aspx + + + grid_rownumber_paging_database.aspx + ASPXCodeBehind + + + grid_rownumber_paging_database.aspx + + + grid_paging_selection.aspx + ASPXCodeBehind + + + grid_paging_selection.aspx + + + grid_paging_database_selection.aspx + ASPXCodeBehind + + + grid_paging_database_selection.aspx + + + passvalue_iframe.aspx + ASPXCodeBehind + + + passvalue_iframe.aspx + + + passvalue_iframe_iframe.aspx + ASPXCodeBehind + + + passvalue_iframe_iframe.aspx + + + parent_postback_top.aspx + ASPXCodeBehind + + + parent_postback_top.aspx + + + parent_postback_top2.aspx + ASPXCodeBehind + + + parent_postback_top2.aspx + + + parent_postback_top3.aspx + ASPXCodeBehind + + + parent_postback_top3.aspx + + + parent_simplepostback.aspx + ASPXCodeBehind + + + parent_simplepostback.aspx + + + parent_simplepostback2.aspx + ASPXCodeBehind + + + parent_simplepostback2.aspx + + + table.aspx + ASPXCodeBehind + + + table.aspx + + + hbox.aspx + ASPXCodeBehind + + + hbox.aspx + + + vbox.aspx + ASPXCodeBehind + + + vbox.aspx + + + alert.aspx + ASPXCodeBehind + + + alert.aspx + + + confirm_cancel.aspx + ASPXCodeBehind + + + confirm_cancel.aspx + + + cssclass.aspx + ASPXCodeBehind + + + cssclass.aspx + + + confirm_cancel2.aspx + ASPXCodeBehind + + + confirm_cancel2.aspx + + + custom_postback2.aspx + ASPXCodeBehind + + + custom_postback2.aspx + + + tabstrip_iframe_disabled.aspx + ASPXCodeBehind + + + tabstrip_iframe_disabled.aspx + + + tabstrip_iframe_disabled_tab1.aspx + ASPXCodeBehind + + + tabstrip_iframe_disabled_tab1.aspx + + + start.aspx + ASPXCodeBehind + + + start.aspx + + + custom_display.aspx + ASPXCodeBehind + + + custom_display.aspx + + + email.aspx + ASPXCodeBehind + + + email.aspx + + + inline.aspx + ASPXCodeBehind + + + inline.aspx + + + multi_values.aspx + ASPXCodeBehind + + + multi_values.aspx + + + multi_values_remote.aspx + ASPXCodeBehind + + + multi_values_remote.aspx + + + remote_with_cache.aspx + ASPXCodeBehind + + + remote_with_cache.aspx + + + search.ashx + + + my97.aspx + ASPXCodeBehind + + + my97.aspx + + + umeditor.aspx + ASPXCodeBehind + + + umeditor.aspx + + + form.aspx + ASPXCodeBehind + + + form.aspx + + + multi_toolbars.aspx + ASPXCodeBehind + + + multi_toolbars.aspx + + + toolbar_iframe.aspx + ASPXCodeBehind + + + toolbar_iframe.aspx + + + cssstyle.aspx + ASPXCodeBehind + + + cssstyle.aspx + + + addtab.aspx + ASPXCodeBehind + + + addtab.aspx + + + ajax_loading.aspx + ASPXCodeBehind + + + ajax_loading.aspx + + + test3.aspx + + + textbox.aspx + ASPXCodeBehind + + + textbox.aspx + + + timer.aspx + ASPXCodeBehind + + + timer.aspx + + + menu.aspx + ASPXCodeBehind + + + menu.aspx + + + menucheckbox.aspx + ASPXCodeBehind + + + menucheckbox.aspx + + + menu_hideonclick.aspx + ASPXCodeBehind + + + menu_hideonclick.aspx + + + toolbar_images.aspx + ASPXCodeBehind + + + toolbar_images.aspx + + + toolbar_images_fixedwidth.aspx + ASPXCodeBehind + + + toolbar_images_fixedwidth.aspx + + + tree_checked.aspx + ASPXCodeBehind + + + tree_checked.aspx + + + tree_multi_select_selectable.aspx + ASPXCodeBehind + + + tree_multi_select_selectable.aspx + + + tree_nodecommand.aspx + ASPXCodeBehind + + + tree_nodecommand.aspx + + + tree_icon.aspx + ASPXCodeBehind + + + tree_icon.aspx + + + tree_select.aspx + ASPXCodeBehind + + + tree_select.aspx + + + tree_sitemap.aspx + ASPXCodeBehind + + + tree_sitemap.aspx + + + tree_datasource.aspx + ASPXCodeBehind + + + tree_datasource.aspx + + + tree_document.aspx + ASPXCodeBehind + + + tree_document.aspx + + + tree.aspx + ASPXCodeBehind + + + tree.aspx + + + tree_ajax.aspx + ASPXCodeBehind + + + tree_ajax.aspx + + + tree_datatable.aspx + ASPXCodeBehind + + + tree_datatable.aspx + + + tree_checkall.aspx + ASPXCodeBehind + + + tree_checkall.aspx + + + shengshixian.aspx + ASPXCodeBehind + + + shengshixian.aspx + + + dropdownlist.aspx + ASPXCodeBehind + + + dropdownlist.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + form_dynamic.aspx + ASPXCodeBehind + + + form_dynamic.aspx + + + form_compare.aspx + ASPXCodeBehind + + + form_compare.aspx + + + form.aspx + ASPXCodeBehind + + + form.aspx + + + radiobutton.aspx + ASPXCodeBehind + + + radiobutton.aspx + + + datepicker.aspx + ASPXCodeBehind + + + triggerbox.aspx + ASPXCodeBehind + + + triggerbox.aspx + + + image.aspx + ASPXCodeBehind + + + image.aspx + + + form_validate.aspx + ASPXCodeBehind + + + form_validate.aspx + + + icons.aspx + ASPXCodeBehind + + + icons.aspx + + + radiobuttonlist.aspx + ASPXCodeBehind + + + radiobuttonlist.aspx + + + button_iframe.aspx + ASPXCodeBehind + + + button_iframe.aspx + + + grid_iframe.aspx + ASPXCodeBehind + + + grid_iframe.aspx + + + iframe_iframe.aspx + ASPXCodeBehind + + + iframe_iframe.aspx + + + iframe_iframe_window1.aspx + ASPXCodeBehind + + + iframe_iframe_window1.aspx + + + iframe_iframe_window2.aspx + ASPXCodeBehind + + + iframe_iframe_window2.aspx + + + triggerbox_iframe.aspx + ASPXCodeBehind + + + triggerbox_iframe.aspx + + + triggerbox_iframe_iframe.aspx + ASPXCodeBehind + + + triggerbox_iframe_iframe.aspx + + + parent_postback.aspx + ASPXCodeBehind + + + parent_postback.aspx + + + parent_postback2.aspx + ASPXCodeBehind + + + parent_postback2.aspx + + + parent_postback3.aspx + ASPXCodeBehind + + + parent_postback3.aspx + + + absolute.aspx + ASPXCodeBehind + + + absolute.aspx + + + accordion.aspx + ASPXCodeBehind + + + accordion.aspx + + + anchor.aspx + ASPXCodeBehind + + + anchor.aspx + + + card.aspx + ASPXCodeBehind + + + card.aspx + + + column.aspx + ASPXCodeBehind + + + column.aspx + + + fit.aspx + ASPXCodeBehind + + + fit.aspx + + + tabstrip_iframe.aspx + ASPXCodeBehind + + + tabstrip_iframe.aspx + + + tabstrip.aspx + ASPXCodeBehind + + + tabstrip.aspx + + + menu_dynamic2.aspx + ASPXCodeBehind + + + menu_dynamic2.aspx + + + menu_dynamic.aspx + ASPXCodeBehind + + + menu_dynamic.aspx + + + toolbar.aspx + ASPXCodeBehind + + + toolbar.aspx + + + accordion_tree.aspx + ASPXCodeBehind + + + accordion_tree.aspx + + + timer.aspx + ASPXCodeBehind + + + timer.aspx + + + custom_postback.aspx + ASPXCodeBehind + + + custom_postback.aspx + + + + tabstrip_enableclose.aspx + ASPXCodeBehind + + + tabstrip_enableclose.aspx + + + tabstrip_addtab.aspx + ASPXCodeBehind + + + tabstrip_addtab.aspx + + + tabstrip_autopostback.aspx + ASPXCodeBehind + + + tabstrip_autopostback.aspx + + + test.aspx + ASPXCodeBehind + + + test.aspx + + + test2.aspx + ASPXCodeBehind + + + test2.aspx + + + ajax.aspx + ASPXCodeBehind + + + ajax.aspx + + + test3.aspx + ASPXCodeBehind + + + test4.aspx + ASPXCodeBehind + + + test4.aspx + + + tree_multi_select.aspx + ASPXCodeBehind + + + tree_multi_select.aspx + + + tree_expand.aspx + ASPXCodeBehind + + + tree_expand.aspx + + + tree_nodedatabound.aspx + ASPXCodeBehind + + + tree_nodedatabound.aspx + + + UserInfoControl.ascx + ASPXCodeBehind + + + UserInfoControl.ascx + + + userinfo.aspx + ASPXCodeBehind + + + userinfo.aspx + + + userinfo2.aspx + ASPXCodeBehind + + + userinfo2.aspx + + + userinfo_dynamic.aspx + ASPXCodeBehind + + + userinfo_dynamic.aspx + + + group_panel.aspx + ASPXCodeBehind + + + group_panel.aspx + + + panel.aspx + ASPXCodeBehind + + + panel.aspx + + + window.aspx + ASPXCodeBehind + + + window.aspx + + + window_multi.aspx + ASPXCodeBehind + + + window_multi.aspx + + + window_toolbar.aspx + ASPXCodeBehind + + + window_toolbar.aspx + + + panel_collapse.aspx + ASPXCodeBehind + + + panel_collapse.aspx + + + window_form.aspx + ASPXCodeBehind + + + window_form.aspx + + + + + {0F8BF1F6-DDC2-43DA-BB0B-416CC287AC1B} + FineUI + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + False + True + 50184 + / + + + False + False + + + False + + + + \ No newline at end of file diff --git a/FineUI.Examples/Global.asax b/FineUI.Examples/Global.asax new file mode 100644 index 0000000..3cd1abf --- /dev/null +++ b/FineUI.Examples/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="FineUI.Examples.Global" Language="C#" %> diff --git a/FineUI.Examples/Global.asax.cs b/FineUI.Examples/Global.asax.cs new file mode 100644 index 0000000..e6f771b --- /dev/null +++ b/FineUI.Examples/Global.asax.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.Security; +using System.Web.SessionState; + +namespace FineUI.Examples +{ + public class Global : System.Web.HttpApplication + { + + protected void Application_Start(object sender, EventArgs e) + { + Application["OnlineUserCount"] = 0; + } + + protected void Session_Start(object sender, EventArgs e) + { + // 这种统计在线人数的做法会有一定的误差 + Application.Lock(); + Application["OnlineUserCount"] = (int)Application["OnlineUserCount"] + 1; + Application.UnLock(); + } + + protected void Application_BeginRequest(object sender, EventArgs e) + { + + } + + protected void Application_AuthenticateRequest(object sender, EventArgs e) + { + + } + + protected void Application_Error(object sender, EventArgs e) + { + + } + + protected void Session_End(object sender, EventArgs e) + { + Application.Lock(); + Application["OnlineUserCount"] = (int)Application["OnlineUserCount"] - 1; + Application.UnLock(); + } + + protected void Application_End(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/FineUI.Examples/Properties/AssemblyInfo.cs b/FineUI.Examples/Properties/AssemblyInfo.cs index 451f5aa..7db6077 100644 --- a/FineUI.Examples/Properties/AssemblyInfo.cs +++ b/FineUI.Examples/Properties/AssemblyInfo.cs @@ -1,35 +1,35 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("FineUI.Examples")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("FineUI")] -[assembly: AssemblyProduct("FineUI.Examples")] -[assembly: AssemblyCopyright("Copyright (C) 2008-2009 sanshi.ustc@gmail.com")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FineUI.Examples")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("FineUI")] +[assembly: AssemblyProduct("FineUI.Examples")] +[assembly: AssemblyCopyright("Copyright (C) 2008-2009 sanshi.ustc@gmail.com")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/FineUI.Examples/Web.config b/FineUI.Examples/Web.config index c2b8565..5a64763 100644 --- a/FineUI.Examples/Web.config +++ b/FineUI.Examples/Web.config @@ -1,58 +1,85 @@ - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI.Examples/accordion/accordion.aspx b/FineUI.Examples/accordion/accordion.aspx index dfaf1bd..6d597fd 100644 --- a/FineUI.Examples/accordion/accordion.aspx +++ b/FineUI.Examples/accordion/accordion.aspx @@ -1,43 +1,48 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion.aspx.cs" Inherits="FineUI.Examples.accordion.accordion2" %> - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion.aspx.cs" Inherits="FineUI.Examples.accordion.accordion2" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + diff --git a/FineUI.Examples/accordion/accordion.aspx.cs b/FineUI.Examples/accordion/accordion.aspx.cs index edf0bf5..8776c21 100644 --- a/FineUI.Examples/accordion/accordion.aspx.cs +++ b/FineUI.Examples/accordion/accordion.aspx.cs @@ -1,23 +1,34 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using System.Text; - -namespace FineUI.Examples.accordion -{ - public partial class accordion2 : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - - } - - protected void Button1_Click(object sender, EventArgs e) - { - Alert.ShowInTop(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActiveIndex + 1)); - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.accordion +{ + public partial class accordion2 : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActivePaneIndex + 1)); + } + + protected void Button2_Click(object sender, EventArgs e) + { + var nextIndex = Accordion1.ActivePaneIndex + 1; + if (nextIndex >= Accordion1.Panes.Count) + { + nextIndex = 0; + } + + Accordion1.ActivePaneIndex = nextIndex; + } + } +} diff --git a/FineUI.Examples/accordion/accordion.aspx.designer.cs b/FineUI.Examples/accordion/accordion.aspx.designer.cs index e5699ce..c9d22a1 100644 --- a/FineUI.Examples/accordion/accordion.aspx.designer.cs +++ b/FineUI.Examples/accordion/accordion.aspx.designer.cs @@ -1,105 +1,114 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.accordion { - - - public partial class accordion2 { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// Accordion1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Accordion Accordion1; - - /// - /// AccordionPane1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.AccordionPane AccordionPane1; - - /// - /// Label1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label Label1; - - /// - /// AccordionPane2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.AccordionPane AccordionPane2; - - /// - /// Label2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label Label2; - - /// - /// AccordionPane3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.AccordionPane AccordionPane3; - - /// - /// Label3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label Label3; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.accordion { + + + public partial class accordion2 { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Accordion1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Accordion Accordion1; + + /// + /// AccordionPane1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label1; + + /// + /// AccordionPane2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane2; + + /// + /// Label2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label2; + + /// + /// AccordionPane3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane3; + + /// + /// Label3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label3; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + } +} diff --git a/FineUI.Examples/accordion/accordion_autopostback.aspx b/FineUI.Examples/accordion/accordion_autopostback.aspx new file mode 100644 index 0000000..deef75d --- /dev/null +++ b/FineUI.Examples/accordion/accordion_autopostback.aspx @@ -0,0 +1,44 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_autopostback.aspx.cs" Inherits="FineUI.Examples.accordion.accordion_autopostback" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/FineUI.Examples/accordion/accordion_autopostback.aspx.cs b/FineUI.Examples/accordion/accordion_autopostback.aspx.cs new file mode 100644 index 0000000..63423b9 --- /dev/null +++ b/FineUI.Examples/accordion/accordion_autopostback.aspx.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.accordion +{ + public partial class accordion_autopostback : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActivePaneIndex + 1)); + } + + protected void Accordion1_PaneIndexChanged(object sender, EventArgs e) + { + Alert.ShowInTop(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActivePaneIndex + 1)); + } + } +} diff --git a/FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs b/FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs new file mode 100644 index 0000000..9e5af00 --- /dev/null +++ b/FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs @@ -0,0 +1,105 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.accordion { + + + public partial class accordion_autopostback { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Accordion1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Accordion Accordion1; + + /// + /// AccordionPane1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label1; + + /// + /// AccordionPane2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane2; + + /// + /// Label2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label2; + + /// + /// AccordionPane3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane3; + + /// + /// Label3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label3; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI.Examples/accordion/accordion_links.aspx b/FineUI.Examples/accordion/accordion_links.aspx index 13ad741..d945717 100644 --- a/FineUI.Examples/accordion/accordion_links.aspx +++ b/FineUI.Examples/accordion/accordion_links.aspx @@ -1,71 +1,71 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_links.aspx.cs" - Inherits="ExtAspNet.Examples.accordion.accordion_links" %> - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- Select Link 1 in Panel 3 -
- - - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_links.aspx.cs" + Inherits="ExtAspNet.Examples.accordion.accordion_links" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Select Link 1 in Panel 3 +
+ + + + + + + diff --git a/FineUI.Examples/accordion/accordion_links.aspx.cs b/FineUI.Examples/accordion/accordion_links.aspx.cs index 1c6f243..042a28a 100644 --- a/FineUI.Examples/accordion/accordion_links.aspx.cs +++ b/FineUI.Examples/accordion/accordion_links.aspx.cs @@ -1,25 +1,25 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using System.Text; - -namespace ExtAspNet.Examples.accordion -{ - public partial class accordion_links : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - - - } - } - - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace ExtAspNet.Examples.accordion +{ + public partial class accordion_links : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + + } + } + + + + } +} diff --git a/FineUI.Examples/accordion/accordion_links.aspx.designer.cs b/FineUI.Examples/accordion/accordion_links.aspx.designer.cs index 7d85555..4aa933d 100644 --- a/FineUI.Examples/accordion/accordion_links.aspx.designer.cs +++ b/FineUI.Examples/accordion/accordion_links.aspx.designer.cs @@ -1,88 +1,88 @@ -//------------------------------------------------------------------------------ -// -// 此代码由工具生成。 -// 运行时版本:2.0.50727.3603 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace ExtAspNet.Examples.accordion { - - - public partial class accordion_links { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::ExtAspNet.PageManager PageManager1; - - /// - /// accordionMenu 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::ExtAspNet.Accordion accordionMenu; - - /// - /// AccordionPane1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::ExtAspNet.AccordionPane AccordionPane1; - - /// - /// AccordionPane2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::ExtAspNet.AccordionPane AccordionPane2; - - /// - /// linkFYBX 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::ExtAspNet.AccordionLink linkFYBX; - - /// - /// AccordionPane3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::ExtAspNet.AccordionPane AccordionPane3; - - /// - /// linkDSP 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::ExtAspNet.AccordionLink linkDSP; - } -} +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:2.0.50727.3603 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace ExtAspNet.Examples.accordion { + + + public partial class accordion_links { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.PageManager PageManager1; + + /// + /// accordionMenu 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.Accordion accordionMenu; + + /// + /// AccordionPane1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionPane AccordionPane1; + + /// + /// AccordionPane2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionPane AccordionPane2; + + /// + /// linkFYBX 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionLink linkFYBX; + + /// + /// AccordionPane3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionPane AccordionPane3; + + /// + /// linkDSP 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionLink linkDSP; + } +} diff --git a/FineUI.Examples/accordion/accordion_links_iframe.htm b/FineUI.Examples/accordion/accordion_links_iframe.htm index 1ce0ff6..c4c03fa 100644 --- a/FineUI.Examples/accordion/accordion_links_iframe.htm +++ b/FineUI.Examples/accordion/accordion_links_iframe.htm @@ -1,17 +1,17 @@ - - - - - - - - This is a page in iframe. -
- Select Link 2 in Panel 2 - - + + + + + + + + This is a page in iframe. +
+ Select Link 2 in Panel 2 + + diff --git a/FineUI.Examples/accordion/accordion_tree.aspx b/FineUI.Examples/accordion/accordion_tree.aspx index 2e4b217..101d523 100644 --- a/FineUI.Examples/accordion/accordion_tree.aspx +++ b/FineUI.Examples/accordion/accordion_tree.aspx @@ -1,51 +1,51 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_tree.aspx.cs" - Inherits="FineUI.Examples.accordion.accordion_tree" %> - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_tree.aspx.cs" + Inherits="FineUI.Examples.accordion.accordion_tree" %> + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/FineUI.Examples/accordion/accordion_tree.aspx.cs b/FineUI.Examples/accordion/accordion_tree.aspx.cs index 01b97b8..1d13316 100644 --- a/FineUI.Examples/accordion/accordion_tree.aspx.cs +++ b/FineUI.Examples/accordion/accordion_tree.aspx.cs @@ -1,46 +1,46 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using System.Text; - -namespace FineUI.Examples.accordion -{ - public partial class accordion_tree : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - // 绑定 XML 数据源到树控件 - treeMenu.DataSource = XmlDataSource1; - treeMenu.DataBind(); - - ResolveTreeNode(treeMenu.Nodes); - } - } - - private void ResolveTreeNode(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (node.Nodes.Count == 0) - { - if (!String.IsNullOrEmpty(node.NavigateUrl)) - { - node.Target = "main"; - } - } - else - { - ResolveTreeNode(node.Nodes); - } - } - - } - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.accordion +{ + public partial class accordion_tree : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + // 绑定 XML 数据源到树控件 + treeMenu.DataSource = XmlDataSource1; + treeMenu.DataBind(); + + ResolveTreeNode(treeMenu.Nodes); + } + } + + private void ResolveTreeNode(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.Nodes.Count == 0) + { + if (!String.IsNullOrEmpty(node.NavigateUrl)) + { + node.Target = "main"; + } + } + else + { + ResolveTreeNode(node.Nodes); + } + } + + } + + + } +} diff --git a/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs b/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs index c906b49..b52da00 100644 --- a/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs +++ b/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs @@ -1,78 +1,78 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.accordion { - - - public partial class accordion_tree { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// RegionPanel1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.RegionPanel RegionPanel1; - - /// - /// Region2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Region Region2; - - /// - /// treeMenu 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Tree treeMenu; - - /// - /// Region3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Region Region3; - - /// - /// XmlDataSource1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.XmlDataSource XmlDataSource1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.accordion { + + + public partial class accordion_tree { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// RegionPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.RegionPanel RegionPanel1; + + /// + /// Region2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region Region2; + + /// + /// treeMenu 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Tree treeMenu; + + /// + /// Region3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region Region3; + + /// + /// XmlDataSource1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.XmlDataSource XmlDataSource1; + } +} diff --git a/FineUI.Examples/accordion/accordion_tree_index.htm b/FineUI.Examples/accordion/accordion_tree_index.htm index 7f4d1ae..be012f5 100644 --- a/FineUI.Examples/accordion/accordion_tree_index.htm +++ b/FineUI.Examples/accordion/accordion_tree_index.htm @@ -1,15 +1,15 @@ - - - - - - - 请注意,本示例如何做到如下几点: -
    -
  • 如何将树控件放在Accordion控件中;
  • -
  • 如何从XML文件加载树控件;
  • -
  • 如何在后台通过递归改变每个树节点的Target属性;
  • -
  • 树节点的Target属性是如何影响链接的打开位置。
  • -
- - + + + + + + + 请注意,本示例如何做到如下几点: +
    +
  • 如何将树控件放在Accordion控件中;
  • +
  • 如何从XML文件加载树控件;
  • +
  • 如何在后台通过递归改变每个树节点的Target属性;
  • +
  • 树节点的Target属性是如何影响链接的打开位置。
  • +
+ + diff --git a/FineUI.Examples/aspnet/aspnet.aspx b/FineUI.Examples/aspnet/aspnet.aspx index 7a9c03c..d4ad2d4 100644 --- a/FineUI.Examples/aspnet/aspnet.aspx +++ b/FineUI.Examples/aspnet/aspnet.aspx @@ -1,34 +1,37 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="aspnet.aspx.cs" Inherits="FineUI.Examples.aspnet.aspnet" %> - - - - - - - - -
- - - - -
- -
-
- - - - -
- - -
-
- 注意:只有设置ASP.NET按钮的属性UseSubmitBehavior=false,点击事件才是AJAX;否则点击ASP.NET按钮会导致整个页面回发。 - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="aspnet.aspx.cs" Inherits="FineUI.Examples.aspnet.aspnet" %> + + + + + + + + +
+ + + + +
+ +
+ + + + +
+ + +
+ 注意: +
    +
  • 【3. ASP.NET 按钮(AJAX)】设置了属性UseSubmitBehavior=false,点击此按钮是AJAX回发。
  • +
  • 【4. ASP.NET 按钮】设置了属性UseSubmitBehavior=true,点击此按钮会导致整个页面回发。
  • +
  • 由于【4. ASP.NET 按钮】在客户端会被渲染为input[type=submit],所以在两个文本输入框内按回车键都会导致整个页面回发。
  • +
+ + + diff --git a/FineUI.Examples/aspnet/aspnet.aspx.cs b/FineUI.Examples/aspnet/aspnet.aspx.cs index f7ac0a0..c41c23d 100644 --- a/FineUI.Examples/aspnet/aspnet.aspx.cs +++ b/FineUI.Examples/aspnet/aspnet.aspx.cs @@ -1,48 +1,48 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using System.Text; - -namespace FineUI.Examples.aspnet -{ - public partial class aspnet : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - - } - } - - protected void Button1_Click(object sender, EventArgs e) - { - aspBox.Text = "1. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); - extBox.Text = "1. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); - } - - protected void Button2_Click(object sender, EventArgs e) - { - aspBox.Text = "2. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); - extBox.Text = "2. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); - } - - protected void Button3_Click(object sender, EventArgs e) - { - aspBox.Text = "3. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); - extBox.Text = "3. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); - } - - - protected void Button4_Click(object sender, EventArgs e) - { - aspBox.Text = "4. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); - extBox.Text = "4. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); - } - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class aspnet : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + aspBox.Text = "1. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "1. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + protected void Button2_Click(object sender, EventArgs e) + { + aspBox.Text = "2. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "2. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + protected void Button3_Click(object sender, EventArgs e) + { + aspBox.Text = "3. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "3. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + + protected void Button4_Click(object sender, EventArgs e) + { + aspBox.Text = "4. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "4. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + + } +} diff --git a/FineUI.Examples/aspnet/aspnet.aspx.designer.cs b/FineUI.Examples/aspnet/aspnet.aspx.designer.cs index e10cdbb..ce6ac29 100644 --- a/FineUI.Examples/aspnet/aspnet.aspx.designer.cs +++ b/FineUI.Examples/aspnet/aspnet.aspx.designer.cs @@ -1,96 +1,96 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.aspnet { - - - public partial class aspnet { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// ContentPanel1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.ContentPanel ContentPanel1; - - /// - /// extBox 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TextBox extBox; - - /// - /// aspBox 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.TextBox aspBox; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - - /// - /// Button2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button2; - - /// - /// Button3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Button Button3; - - /// - /// Button4 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Button Button4; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class aspnet { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ContentPanel ContentPanel1; + + /// + /// extBox 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox extBox; + + /// + /// aspBox 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.TextBox aspBox; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// Button3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Button Button3; + + /// + /// Button4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Button Button4; + } +} diff --git a/FineUI.Examples/aspnet/aspnet_literal.aspx b/FineUI.Examples/aspnet/aspnet_literal.aspx index 7b7e099..6042339 100644 --- a/FineUI.Examples/aspnet/aspnet_literal.aspx +++ b/FineUI.Examples/aspnet/aspnet_literal.aspx @@ -1,27 +1,27 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="aspnet_literal.aspx.cs" - Inherits="FineUI.Examples.aspnet.aspnet_literal" %> - - - - - - - - -
- - -
- -
-
- -
-
- - -
- 注意:只有Label1和Literal2的值更新了。 - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="aspnet_literal.aspx.cs" + Inherits="FineUI.Examples.aspnet.aspnet_literal" %> + + + + + + + + +
+ + +
+ +
+
+ +
+
+ + +
+ 注意:只有Label1和Literal2的值更新了。 + + + diff --git a/FineUI.Examples/aspnet/aspnet_literal.aspx.cs b/FineUI.Examples/aspnet/aspnet_literal.aspx.cs index 40eeb8c..35334c0 100644 --- a/FineUI.Examples/aspnet/aspnet_literal.aspx.cs +++ b/FineUI.Examples/aspnet/aspnet_literal.aspx.cs @@ -1,30 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using System.Text; - -namespace FineUI.Examples.aspnet -{ - public partial class aspnet_literal : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - - } - } - - protected void Button1_Click(object sender, EventArgs e) - { - Label1.Text = "Label1 - " + DateTime.Now.ToLongTimeString(); - Literal1.Text = "Literal1 - " + DateTime.Now.ToLongTimeString(); - Literal2.Text = "Literal2 - " + DateTime.Now.ToLongTimeString(); - } - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class aspnet_literal : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + Label1.Text = "Label1 - " + DateTime.Now.ToLongTimeString(); + Literal1.Text = "Literal1 - " + DateTime.Now.ToLongTimeString(); + Literal2.Text = "Literal2 - " + DateTime.Now.ToLongTimeString(); + } + + + } +} diff --git a/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs b/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs index 2e2e50f..227e39c 100644 --- a/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs +++ b/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs @@ -1,69 +1,69 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.aspnet { - - - public partial class aspnet_literal { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// Label1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Label Label1; - - /// - /// Literal1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Literal Literal1; - - /// - /// Literal2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Literal Literal2; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class aspnet_literal { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label Label1; + + /// + /// Literal1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal Literal1; + + /// + /// Literal2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal Literal2; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI.Examples/basic/Captcha/CaptchaImage.cs b/FineUI.Examples/basic/Captcha/CaptchaImage.cs index 99715a5..e402dde 100644 --- a/FineUI.Examples/basic/Captcha/CaptchaImage.cs +++ b/FineUI.Examples/basic/Captcha/CaptchaImage.cs @@ -1,198 +1,198 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using System.Drawing.Text; - - -namespace CaptchaImage -{ - /// - /// ֤ͼƬĴԣhttp://www.codeproject.com/KB/aspnet/CaptchaImage.aspx - /// - public class CaptchaImage - { - // Public properties (all read-only). - public string Text - { - get { return this.text; } - } - public Bitmap Image - { - get { return this.image; } - } - public int Width - { - get { return this.width; } - } - public int Height - { - get { return this.height; } - } - - // Internal properties. - private string text; - private int width; - private int height; - private string familyName; - private Bitmap image; - - // For generating random numbers. - private Random random = new Random(); - - // ==================================================================== - // Initializes a new instance of the CaptchaImage class using the - // specified text, width and height. - // ==================================================================== - public CaptchaImage(string s, int width, int height) - { - this.text = s; - this.SetDimensions(width, height); - this.GenerateImage(); - } - - // ==================================================================== - // Initializes a new instance of the CaptchaImage class using the - // specified text, width, height and font family. - // ==================================================================== - public CaptchaImage(string s, int width, int height, string familyName) - { - this.text = s; - this.SetDimensions(width, height); - this.SetFamilyName(familyName); - this.GenerateImage(); - } - - // ==================================================================== - // This member overrides Object.Finalize. - // ==================================================================== - ~CaptchaImage() - { - Dispose(false); - } - - // ==================================================================== - // Releases all resources used by this object. - // ==================================================================== - public void Dispose() - { - GC.SuppressFinalize(this); - this.Dispose(true); - } - - // ==================================================================== - // Custom Dispose method to clean up unmanaged resources. - // ==================================================================== - protected virtual void Dispose(bool disposing) - { - if (disposing) - // Dispose of the bitmap. - this.image.Dispose(); - } - - // ==================================================================== - // Sets the image width and height. - // ==================================================================== - private void SetDimensions(int width, int height) - { - // Check the width and height. - if (width <= 0) - throw new ArgumentOutOfRangeException("width", width, "Argument out of range, must be greater than zero."); - if (height <= 0) - throw new ArgumentOutOfRangeException("height", height, "Argument out of range, must be greater than zero."); - this.width = width; - this.height = height; - } - - // ==================================================================== - // Sets the font used for the image text. - // ==================================================================== - private void SetFamilyName(string familyName) - { - // If the named font is not installed, default to a system font. - try - { - Font font = new Font(this.familyName, 13F); - this.familyName = familyName; - font.Dispose(); - } - catch (Exception) - { - this.familyName = System.Drawing.FontFamily.GenericSerif.Name; - } - } - - // ==================================================================== - // Creates the bitmap image. - // ==================================================================== - private void GenerateImage() - { - // Create a new 32-bit bitmap image. - Bitmap bitmap = new Bitmap(this.width, this.height, PixelFormat.Format32bppArgb); - - // Create a graphics object for drawing. - Graphics g = Graphics.FromImage(bitmap); - g.SmoothingMode = SmoothingMode.AntiAlias; - Rectangle rect = new Rectangle(0, 0, this.width, this.height); - - // Fill in the background. - HatchBrush hatchBrush = new HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White); - g.FillRectangle(hatchBrush, rect); - - // Set up the text font. - SizeF size; - float fontSize = rect.Height + 1; - Font font; - // Adjust the font size until the text fits within the image. - do - { - fontSize--; - font = new Font(this.familyName, fontSize, FontStyle.Bold); - size = g.MeasureString(this.text, font); - } while (size.Width > rect.Width); - - // Set up the text format. - StringFormat format = new StringFormat(); - format.Alignment = StringAlignment.Center; - format.LineAlignment = StringAlignment.Center; - - // Create a path using the text and warp it randomly. - GraphicsPath path = new GraphicsPath(); - path.AddString(this.text, font.FontFamily, (int)font.Style, font.Size, rect, format); - float v = 8F; - PointF[] points = - { - new PointF(this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v), - new PointF(rect.Width - this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v), - new PointF(this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v), - new PointF(rect.Width - this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v) - }; - Matrix matrix = new Matrix(); - matrix.Translate(0F, 0F); - path.Warp(points, rect, matrix, WarpMode.Perspective, 0F); - - // Draw the text. - hatchBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.Green, Color.DarkGray); - g.FillPath(hatchBrush, path); - - // Add some random noise. - int m = Math.Max(rect.Width, rect.Height); - for (int i = 0; i < (int)(rect.Width * rect.Height / 30F); i++) - { - int x = this.random.Next(rect.Width); - int y = this.random.Next(rect.Height); - int w = this.random.Next(m / 50); - int h = this.random.Next(m / 50); - g.FillEllipse(hatchBrush, x, y, w, h); - } - - // Clean up. - font.Dispose(); - hatchBrush.Dispose(); - g.Dispose(); - - // Set the image. - this.image = bitmap; - } - } -} +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing.Text; + + +namespace CaptchaImage +{ + /// + /// ֤ͼƬĴԣhttp://www.codeproject.com/KB/aspnet/CaptchaImage.aspx + /// + public class CaptchaImage + { + // Public properties (all read-only). + public string Text + { + get { return this.text; } + } + public Bitmap Image + { + get { return this.image; } + } + public int Width + { + get { return this.width; } + } + public int Height + { + get { return this.height; } + } + + // Internal properties. + private string text; + private int width; + private int height; + private string familyName; + private Bitmap image; + + // For generating random numbers. + private Random random = new Random(); + + // ==================================================================== + // Initializes a new instance of the CaptchaImage class using the + // specified text, width and height. + // ==================================================================== + public CaptchaImage(string s, int width, int height) + { + this.text = s; + this.SetDimensions(width, height); + this.GenerateImage(); + } + + // ==================================================================== + // Initializes a new instance of the CaptchaImage class using the + // specified text, width, height and font family. + // ==================================================================== + public CaptchaImage(string s, int width, int height, string familyName) + { + this.text = s; + this.SetDimensions(width, height); + this.SetFamilyName(familyName); + this.GenerateImage(); + } + + // ==================================================================== + // This member overrides Object.Finalize. + // ==================================================================== + ~CaptchaImage() + { + Dispose(false); + } + + // ==================================================================== + // Releases all resources used by this object. + // ==================================================================== + public void Dispose() + { + GC.SuppressFinalize(this); + this.Dispose(true); + } + + // ==================================================================== + // Custom Dispose method to clean up unmanaged resources. + // ==================================================================== + protected virtual void Dispose(bool disposing) + { + if (disposing) + // Dispose of the bitmap. + this.image.Dispose(); + } + + // ==================================================================== + // Sets the image width and height. + // ==================================================================== + private void SetDimensions(int width, int height) + { + // Check the width and height. + if (width <= 0) + throw new ArgumentOutOfRangeException("width", width, "Argument out of range, must be greater than zero."); + if (height <= 0) + throw new ArgumentOutOfRangeException("height", height, "Argument out of range, must be greater than zero."); + this.width = width; + this.height = height; + } + + // ==================================================================== + // Sets the font used for the image text. + // ==================================================================== + private void SetFamilyName(string familyName) + { + // If the named font is not installed, default to a system font. + try + { + Font font = new Font(this.familyName, 13F); + this.familyName = familyName; + font.Dispose(); + } + catch (Exception) + { + this.familyName = System.Drawing.FontFamily.GenericSerif.Name; + } + } + + // ==================================================================== + // Creates the bitmap image. + // ==================================================================== + private void GenerateImage() + { + // Create a new 32-bit bitmap image. + Bitmap bitmap = new Bitmap(this.width, this.height, PixelFormat.Format32bppArgb); + + // Create a graphics object for drawing. + Graphics g = Graphics.FromImage(bitmap); + g.SmoothingMode = SmoothingMode.AntiAlias; + Rectangle rect = new Rectangle(0, 0, this.width, this.height); + + // Fill in the background. + HatchBrush hatchBrush = new HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White); + g.FillRectangle(hatchBrush, rect); + + // Set up the text font. + SizeF size; + float fontSize = rect.Height + 1; + Font font; + // Adjust the font size until the text fits within the image. + do + { + fontSize--; + font = new Font(this.familyName, fontSize, FontStyle.Bold); + size = g.MeasureString(this.text, font); + } while (size.Width > rect.Width); + + // Set up the text format. + StringFormat format = new StringFormat(); + format.Alignment = StringAlignment.Center; + format.LineAlignment = StringAlignment.Center; + + // Create a path using the text and warp it randomly. + GraphicsPath path = new GraphicsPath(); + path.AddString(this.text, font.FontFamily, (int)font.Style, font.Size, rect, format); + float v = 8F; + PointF[] points = + { + new PointF(this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v), + new PointF(rect.Width - this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v), + new PointF(this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v), + new PointF(rect.Width - this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v) + }; + Matrix matrix = new Matrix(); + matrix.Translate(0F, 0F); + path.Warp(points, rect, matrix, WarpMode.Perspective, 0F); + + // Draw the text. + hatchBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.Green, Color.DarkGray); + g.FillPath(hatchBrush, path); + + // Add some random noise. + int m = Math.Max(rect.Width, rect.Height); + for (int i = 0; i < (int)(rect.Width * rect.Height / 30F); i++) + { + int x = this.random.Next(rect.Width); + int y = this.random.Next(rect.Height); + int w = this.random.Next(m / 50); + int h = this.random.Next(m / 50); + g.FillEllipse(hatchBrush, x, y, w, h); + } + + // Clean up. + font.Dispose(); + hatchBrush.Dispose(); + g.Dispose(); + + // Set the image. + this.image = bitmap; + } + } +} diff --git a/FineUI.Examples/basic/Captcha/captcha.ashx b/FineUI.Examples/basic/Captcha/captcha.ashx index 680099d..eb23e17 100644 --- a/FineUI.Examples/basic/Captcha/captcha.ashx +++ b/FineUI.Examples/basic/Captcha/captcha.ashx @@ -1 +1 @@ -<%@ WebHandler Language="C#" CodeBehind="captcha.ashx.cs" Class="FineUI.Examples.basic.Captcha.captcha" %> +<%@ WebHandler Language="C#" CodeBehind="captcha.ashx.cs" Class="FineUI.Examples.basic.Captcha.captcha" %> diff --git a/FineUI.Examples/basic/Captcha/captcha.ashx.cs b/FineUI.Examples/basic/Captcha/captcha.ashx.cs index 8d222c5..76fd6c0 100644 --- a/FineUI.Examples/basic/Captcha/captcha.ashx.cs +++ b/FineUI.Examples/basic/Captcha/captcha.ashx.cs @@ -1,53 +1,53 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.Services; -using System.Web.SessionState; -using System.Drawing.Imaging; - -namespace FineUI.Examples.basic.Captcha -{ - /// - /// 生成验证码图片 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - public class captcha : IHttpHandler, IReadOnlySessionState - { - - public void ProcessRequest(HttpContext context) - { - int width = 200; - int height = 30; - - try - { - width = Convert.ToInt32(context.Request.QueryString["w"]); - height = Convert.ToInt32(context.Request.QueryString["h"]); - } - catch (Exception) - { - // Nothing - } - - // 从 Session 中读取验证码,并创建图片 - CaptchaImage.CaptchaImage ci = new CaptchaImage.CaptchaImage(context.Session["CaptchaImageText"].ToString(), width, height, "Consolas"); - - // 输出图片 - context.Response.Clear(); - context.Response.ContentType = "image/jpeg"; - - ci.Image.Save(context.Response.OutputStream, ImageFormat.Jpeg); - - ci.Dispose(); - } - - public bool IsReusable - { - get - { - return false; - } - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.Services; +using System.Web.SessionState; +using System.Drawing.Imaging; + +namespace FineUI.Examples.basic.Captcha +{ + /// + /// 生成验证码图片 + /// + [WebService(Namespace = "http://tempuri.org/")] + [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] + public class captcha : IHttpHandler, IReadOnlySessionState + { + + public void ProcessRequest(HttpContext context) + { + int width = 200; + int height = 30; + + try + { + width = Convert.ToInt32(context.Request.QueryString["w"]); + height = Convert.ToInt32(context.Request.QueryString["h"]); + } + catch (Exception) + { + // Nothing + } + + // 从 Session 中读取验证码,并创建图片 + CaptchaImage.CaptchaImage ci = new CaptchaImage.CaptchaImage(context.Session["CaptchaImageText"].ToString(), width, height, "Consolas"); + + // 输出图片 + context.Response.Clear(); + context.Response.ContentType = "image/jpeg"; + + ci.Image.Save(context.Response.OutputStream, ImageFormat.Jpeg); + + ci.Dispose(); + } + + public bool IsReusable + { + get + { + return false; + } + } + } +} diff --git a/FineUI.Examples/basic/hello.aspx b/FineUI.Examples/basic/hello.aspx index 16b2153..422f96f 100644 --- a/FineUI.Examples/basic/hello.aspx +++ b/FineUI.Examples/basic/hello.aspx @@ -1,19 +1,20 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="hello.aspx.cs" Inherits="FineUI.Examples.basic.hello" %> - - - - - - - - -
- - - -
- - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="hello.aspx.cs" Inherits="FineUI.Examples.basic.hello" %> + + + + + + + + +
+ + + +
+
+ + + + + diff --git a/FineUI.Examples/basic/hello.aspx.cs b/FineUI.Examples/basic/hello.aspx.cs index 3672c06..408d526 100644 --- a/FineUI.Examples/basic/hello.aspx.cs +++ b/FineUI.Examples/basic/hello.aspx.cs @@ -1,26 +1,26 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.basic -{ - public partial class hello : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - - } - - protected void btnHello_Click(object sender, EventArgs e) - { - Alert.Show("你好 FineUI!", MessageBoxIcon.Warning); - } - - protected void btnHello2_Click(object sender, EventArgs e) - { - Alert.ShowInTop("你好 FineUI!", MessageBoxIcon.Information); - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.basic +{ + public partial class hello : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnHello_Click(object sender, EventArgs e) + { + Alert.Show("你好 FineUI!", MessageBoxIcon.Warning); + } + + protected void btnHello2_Click(object sender, EventArgs e) + { + Alert.ShowInTop("你好 FineUI!", MessageBoxIcon.Information); + } + } +} diff --git a/FineUI.Examples/basic/hello.aspx.designer.cs b/FineUI.Examples/basic/hello.aspx.designer.cs index 9bcb4c5..77b5c4f 100644 --- a/FineUI.Examples/basic/hello.aspx.designer.cs +++ b/FineUI.Examples/basic/hello.aspx.designer.cs @@ -1,51 +1,51 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.basic { - - - public partial class hello { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// btnHello 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnHello; - - /// - /// btnHello2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnHello2; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class hello { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnHello 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnHello; + + /// + /// btnHello2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnHello2; + } +} diff --git a/FineUI.Examples/basic/hello_aspnet.aspx b/FineUI.Examples/basic/hello_aspnet.aspx index 6a5b219..2f1459f 100644 --- a/FineUI.Examples/basic/hello_aspnet.aspx +++ b/FineUI.Examples/basic/hello_aspnet.aspx @@ -1,14 +1,14 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="hello_aspnet.aspx.cs" Inherits="FineUI.Examples.basic.hello_aspnet" %> - - - - - - - - -
- - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="hello_aspnet.aspx.cs" Inherits="FineUI.Examples.basic.hello_aspnet" %> + + + + + + + + +
+ + + + diff --git a/FineUI.Examples/basic/hello_aspnet.aspx.cs b/FineUI.Examples/basic/hello_aspnet.aspx.cs index c170ff9..b28e4d1 100644 --- a/FineUI.Examples/basic/hello_aspnet.aspx.cs +++ b/FineUI.Examples/basic/hello_aspnet.aspx.cs @@ -1,21 +1,21 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.basic -{ - public partial class hello_aspnet : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - - } - - protected void btnHello_Click(object sender, EventArgs e) - { - Page.ClientScript.RegisterStartupScript(this.GetType(), "alert_hello", "alert('你好 Asp.Net!');", true); - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.basic +{ + public partial class hello_aspnet : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnHello_Click(object sender, EventArgs e) + { + Page.ClientScript.RegisterStartupScript(this.GetType(), "alert_hello", "alert('你好 Asp.Net!');", true); + } + } +} diff --git a/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs b/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs index b85b275..836ee0b 100644 --- a/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs +++ b/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs @@ -1,33 +1,33 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.basic { - - - public partial class hello_aspnet { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// btnHello 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Button btnHello; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class hello_aspnet { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// btnHello 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Button btnHello; + } +} diff --git a/FineUI.Examples/basic/login.aspx b/FineUI.Examples/basic/login.aspx index 7314a74..b759ebb 100644 --- a/FineUI.Examples/basic/login.aspx +++ b/FineUI.Examples/basic/login.aspx @@ -1,42 +1,47 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="FineUI.Examples.basic.login" %> - - - - - - - - -
- - 用户名:admin -
- 密码:admin -
- 注意:在任意文本输入框内按回车键,都会触发按钮(Type="Submit")的表单提交事件。 - - - - - - - - - - - - - - - - - - - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="FineUI.Examples.basic.login" %> + + + + + + + + +
+ + 用户名:admin +
+ 密码:admin +
+
+
+ 注意:在任意输入框内按回车键都会触发表单的提交(相当于点击【登陆】按钮)。 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI.Examples/basic/login.aspx.cs b/FineUI.Examples/basic/login.aspx.cs index c3ad439..5611edb 100644 --- a/FineUI.Examples/basic/login.aspx.cs +++ b/FineUI.Examples/basic/login.aspx.cs @@ -1,31 +1,31 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using System.Text; - -namespace FineUI.Examples.basic -{ - public partial class login : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - - } - - protected void btnLogin_Click(object sender, EventArgs e) - { - if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") - { - Alert.ShowInTop("成功登录!"); - } - else - { - Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); - } - } - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.basic +{ + public partial class login : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnLogin_Click(object sender, EventArgs e) + { + if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") + { + Alert.ShowInTop("成功登录!"); + } + else + { + Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); + } + } + + } +} diff --git a/FineUI.Examples/basic/login.aspx.designer.cs b/FineUI.Examples/basic/login.aspx.designer.cs index 02ed373..2aca126 100644 --- a/FineUI.Examples/basic/login.aspx.designer.cs +++ b/FineUI.Examples/basic/login.aspx.designer.cs @@ -1,87 +1,96 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.basic { - - - public partial class login { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// Window1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Window Window1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// tbxUserName 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TextBox tbxUserName; - - /// - /// tbxPassword 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TextBox tbxPassword; - - /// - /// Toolbar1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Toolbar Toolbar1; - - /// - /// btnLogin 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnLogin; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class login { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Window1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window Window1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// tbxUserName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxUserName; + + /// + /// tbxPassword 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxPassword; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Toolbar Toolbar1; + + /// + /// btnLogin 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnLogin; + + /// + /// btnReset 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnReset; + } +} diff --git a/FineUI.Examples/basic/login_captcha.aspx b/FineUI.Examples/basic/login_captcha.aspx index 28681ee..8b31572 100644 --- a/FineUI.Examples/basic/login_captcha.aspx +++ b/FineUI.Examples/basic/login_captcha.aspx @@ -1,55 +1,58 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login_captcha.aspx.cs" - Inherits="FineUI.Examples.basic.login_captcha" %> - - - - - - - - -
- - 用户名:admin -
- 密码:admin -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login_captcha.aspx.cs" + Inherits="FineUI.Examples.basic.login_captcha" %> + + + + + + + + +
+ + 用户名:admin +
+ 密码:admin +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI.Examples/basic/login_captcha.aspx.cs b/FineUI.Examples/basic/login_captcha.aspx.cs index cb63aa9..f04b4c0 100644 --- a/FineUI.Examples/basic/login_captcha.aspx.cs +++ b/FineUI.Examples/basic/login_captcha.aspx.cs @@ -1,76 +1,76 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using System.Text; - -namespace FineUI.Examples.basic -{ - public partial class login_captcha : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - LoadData(); - } - } - - - private void LoadData() - { - InitCaptchaCode(); - } - - /// - /// 初始化验证码 - /// - private void InitCaptchaCode() - { - // 创建一个 6 位的随机数并保存在 Session 对象中 - Session["CaptchaImageText"] = GenerateRandomCode(); - imgCaptcha.ImageUrl = "~/basic/captcha/captcha.ashx?w=150&h=30&t=" + DateTime.Now.Ticks; - } - - /// - /// 创建一个 6 位的随机数 - /// - /// - private string GenerateRandomCode() - { - string s = String.Empty; - Random random = new Random(); - for (int i = 0; i < 6; i++) - { - s += random.Next(10).ToString(); - } - return s; - } - - protected void btnRefresh_Click(object sender, EventArgs e) - { - InitCaptchaCode(); - } - - protected void btnLogin_Click(object sender, EventArgs e) - { - if (tbxCaptcha.Text != Session["CaptchaImageText"].ToString()) - { - Alert.ShowInTop("验证码错误!"); - return; - } - - if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") - { - Alert.ShowInTop("成功登录!"); - } - else - { - Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); - } - } - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.basic +{ + public partial class login_captcha : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LoadData(); + } + } + + + private void LoadData() + { + InitCaptchaCode(); + } + + /// + /// 初始化验证码 + /// + private void InitCaptchaCode() + { + // 创建一个 6 位的随机数并保存在 Session 对象中 + Session["CaptchaImageText"] = GenerateRandomCode(); + imgCaptcha.ImageUrl = "~/basic/captcha/captcha.ashx?w=150&h=30&t=" + DateTime.Now.Ticks; + } + + /// + /// 创建一个 6 位的随机数 + /// + /// + private string GenerateRandomCode() + { + string s = String.Empty; + Random random = new Random(); + for (int i = 0; i < 6; i++) + { + s += random.Next(10).ToString(); + } + return s; + } + + protected void btnRefresh_Click(object sender, EventArgs e) + { + InitCaptchaCode(); + } + + protected void btnLogin_Click(object sender, EventArgs e) + { + if (tbxCaptcha.Text != Session["CaptchaImageText"].ToString()) + { + Alert.ShowInTop("验证码错误!"); + return; + } + + if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") + { + Alert.ShowInTop("成功登录!"); + } + else + { + Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); + } + } + + } +} diff --git a/FineUI.Examples/basic/login_captcha.aspx.designer.cs b/FineUI.Examples/basic/login_captcha.aspx.designer.cs index f2a947b..9435b78 100644 --- a/FineUI.Examples/basic/login_captcha.aspx.designer.cs +++ b/FineUI.Examples/basic/login_captcha.aspx.designer.cs @@ -1,114 +1,123 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.basic { - - - public partial class login_captcha { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// Window1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Window Window1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// tbxUserName 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TextBox tbxUserName; - - /// - /// tbxPassword 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TextBox tbxPassword; - - /// - /// tbxCaptcha 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TextBox tbxCaptcha; - - /// - /// imgCaptcha 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Image imgCaptcha; - - /// - /// btnRefresh 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.LinkButton btnRefresh; - - /// - /// Toolbar1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Toolbar Toolbar1; - - /// - /// btnLogin 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnLogin; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class login_captcha { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Window1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window Window1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// tbxUserName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxUserName; + + /// + /// tbxPassword 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxPassword; + + /// + /// tbxCaptcha 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxCaptcha; + + /// + /// imgCaptcha 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Image imgCaptcha; + + /// + /// btnRefresh 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton btnRefresh; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Toolbar Toolbar1; + + /// + /// btnLogin 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnLogin; + + /// + /// btnReset 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnReset; + } +} diff --git a/FineUI.Examples/basic/login_enterkey.aspx b/FineUI.Examples/basic/login_enterkey.aspx new file mode 100644 index 0000000..9e76d4f --- /dev/null +++ b/FineUI.Examples/basic/login_enterkey.aspx @@ -0,0 +1,47 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login_enterkey.aspx.cs" Inherits="FineUI.Examples.basic.login_enterkey" %> + + + + + + + + +
+ + 用户名:admin +
+ 密码:admin +
+
+
+ 注意:在表单内按回车键会导航到下一个控件。 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI.Examples/basic/login_enterkey.aspx.cs b/FineUI.Examples/basic/login_enterkey.aspx.cs new file mode 100644 index 0000000..d0c3af2 --- /dev/null +++ b/FineUI.Examples/basic/login_enterkey.aspx.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.basic +{ + public partial class login_enterkey : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnLogin_Click(object sender, EventArgs e) + { + if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") + { + Alert.ShowInTop("成功登录!"); + } + else + { + Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); + } + } + + } +} diff --git a/FineUI.Examples/basic/login_enterkey.aspx.designer.cs b/FineUI.Examples/basic/login_enterkey.aspx.designer.cs new file mode 100644 index 0000000..98d797a --- /dev/null +++ b/FineUI.Examples/basic/login_enterkey.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class login_enterkey { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Window1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window Window1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// tbxUserName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxUserName; + + /// + /// tbxPassword 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxPassword; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Toolbar Toolbar1; + + /// + /// btnLogin 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnLogin; + + /// + /// btnReset 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnReset; + } +} diff --git a/FineUI.Examples/bin/FineUI.Examples.dll b/FineUI.Examples/bin/FineUI.Examples.dll index 738721c6a3bd13d3645b0baca0749205187d4397..6272c977c23b5ac10af090833828245fe1c88330 100644 GIT binary patch literal 287744 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 literal 238592 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

}!&hnxR^uC{TS?v+ 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�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 literal 620032 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

Tt9D78NbDyBr&-y?~HnqQCZ3mPAg!pA~c9`2DQd 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 #Q2_G<4HwBDNC%p2-J<=V@| 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�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⁣Hd6)#ty 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 - - - FineUI - - - -

- 表单容器控件基类 - - - - - 可折叠面板控件基类(抽象类) - - - - - 面板控件基类(抽象类) - - - - - 容器控件基类(抽象类) - - - - - 控件基类(抽象类) - - - - - 控件基类(抽象类) - - - - - 控件基类(抽象类) - - - - - 构造函数 - - - - - 添加服务器AJAX属性 - - 属性列表 - - - - 添加客户端AJAX属性 - - 属性列表 - - - - 添加Gzip压缩属性 - - 属性列表 - - - - 标示是否初始化完成 - - - - - 页面初始化事件 - - - - - - 在备份初始化属性之前修改属性值 - - 此时对控件的属性做修改是安全的: - 1. 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 - 2. 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 X_STATE 已经恢复完毕 - - - - - 重载 RenderControl,为了向子控件公开 RenderBeginTag 和 RenderEndTag 两个方法 - - 服务器控件输出流 - - - - 渲染控件的开始标签 - - 输出流 - - - - 渲染控件的结束标签 - - 输出流 - - - - 渲染 HTML 之前调用 - - - - - - 渲染 HTML 之前调用(计算被修改属性列表之前调用,可以在此修改属性) - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 获取XState的JS变量 - - - - - - 回发过程中此属性是否被改变 - 如果是客户端可以改变的属性,仅在服务器端改变时才返回 true, - (如果仅是客户端改变,则返回 false,因为客户端改变的属性不需要再输出相应的 JavaScript 脚本) - - - - - - - 回发过程中这些属性是否被改变 - 只要任何属性被改变,就返回 true - - - - - - - 从JObject恢复控件的属性 - - 对象属性的JObject形式 - - - - 将控件的属性列表转化为JObject对象 - - 属性列表 - 属性列表的JObject形式 - - - - AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 - - - - - - AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 - - - - - - 添加CSS样式 - - 键 - CSS内容 - - - - 删除CSS样式 - - 键 - - - - 向页面添加控件无关脚本 - - 客户端脚本 - - - - 向页面添加控件无关脚本 - - 客户端脚本 - 脚本层级 - - - - 添加控件相关脚本 - - 客户端脚本 - - - - 获取 Hidden 属性改变的 JavaScript 脚本 - 有些控件可能需要特别的逻辑,因此这里为虚函数(比如 Window 控件) - - 客户端脚本 - - - - 获取 Enabled 属性改变的 JavaScript 脚本 - 有些控件可能需要特别的逻辑,因此这里为虚函数 - - 客户端脚本 - - - - 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','');) - - 客户端脚本 - - - - 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) - - 事件参数 - 客户端脚本 - - - - 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) - - 隐藏字段ID - 隐藏字段值 - - - - - 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) - - 隐藏字段ID - 隐藏字段值 - 隐藏字段所在的页面对象(JavaScript实例window) - 客户端脚本 - - - - 添加Attributes中的属性值 - - HtmlNodeBuilder对象 - - - - XState用来在服务器和客户端之间持久化控件状态。 - - - - - 目前Gzippped的属性支持JObject/JArray/String类型 - - - - - JavaScript中使用ID(比如:x0, x1) - - - - - 获取控件实例的JavaScript代码(比如:X('RegionPanel1_Button1')) - - - - - 是否向页面输出控件的外部容器(默认:true) - 否:只创建Javascript对象而不添加到页面中 - 是:创建Javascript对象,并添加到页面中,页面上添加占位符 - - - - - 参数对象创建器 - - - - - 从 HTTP 请求中恢复当前控件的状态 - 比如当前请求 Request.Form["X_STATE"] = {"btnClientClick":{"OnClientClick":"X.util.alert(\"This is an alert dialog\",\"\",Ext.MessageBox.INFO,'');"},"btnPressed":{"Pressed":false}} - 并且当前控件的 ClientID 是 "btnPressed",则返回值为 JObject 对象 {"Pressed":false} - - - - - 此控件所在的集合分组,只在BaseCollection中使用 - - - - - 不支持此属性(禁用控件默认的ViewState) - - - - - 控件的客户端ID(比如:RegionPanel1_Button1) - - - - - 控件外部容器的客户端ID(比如:Button1_wrapper) - - - - - 产品名称 - - - - - 产品版本 - - - - - HTML标签属性 - - - - - 控件ID - - - - - [AJAX属性]是否可用 - - - - - 指示控件是否被渲染出来(如果想要显示隐藏控件,请使用Hidden属性) - - - - - [AJAX属性]是否隐藏控件 - - - - - 隐藏模式 - - - - - 是否启用AJAX - - - - - 是否启用XState压缩(默认为true) - - - - - 是否启用Ajax正在加载提示 - - - - - Ajax正在加载提示的类型 - - - - - 是否处于FineUI的AJAX回发过程 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 使控件获得焦点 - - - - - 使控件获得焦点,并选中控件中的文本内容 - - 是否选中控件中的文本内容 - - - - 使控件获得焦点,并选中控件中的文本内容 - - 是否选中控件中的文本内容 - 使控件获得焦点前延迟的毫秒数 - - - - 获得使控件获得焦点的脚本 - - JS脚本 - - - - 获得使控件获得焦点,并选中控件中的文本内容的脚本 - - 是否选中控件中的文本内容 - JS脚本 - - - - 获得使控件获得焦点,并选中控件中的文本内容的脚本 - - 是否选中控件中的文本内容 - 使控件获得焦点前延迟的毫秒数 - JS脚本 - - - - 为已经添加到OB中的Style增加新的样式 - 注意:这个key-value不会保存到属性CssStyle中 - - - - - - - 页面加载后立即获得焦点 - - - - - [AJAX属性]控件样式类名 - - - - - [AJAX属性]控件样式 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 宽度 - - - - - 高度 - - - - - 锚点值(当父容器的Layout=Anchor时有效) - - - - - 列的宽度(当父容器的Layout=Column时有效) - - - - - 行的宽度(当父容器的Layout=Row时有效) - - - - - 绝对定位的X坐标(当父容器的Layout=Absolute时有效) - - - - - 绝对定位的Y坐标(当父容器的Layout=Absolute时有效) - - - - - 表格列数(当父容器的Layout=Table时有效) - - - - - 表格合并行(当父容器的Layout=Table时有效) - - - - - 表格合并列(当父容器的Layout=Table时有效) - - - - - 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) - - - - - 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) - - - - - 内边距(当本容器的Layout=VBox或者HBox时有效) - - - - - 子控件的外边距(当本容器的Layout=VBox或者HBox时有效) - - - - - 控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效) - - - - - 外边距(当父容器的Layout=VBox或者HBox时有效) - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 布局类型 - - - - - 构造函数 - - - - - 渲染控件的开始标签 - - 输出流 - - - - 渲染控件的结束标签 - - 输出流 - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 刷新面板中的IFrame页面 - - - - - 获取刷新面板中IFrame页面的客户端脚本 - - 客户端脚本 - - - - 重置面板中所有字段 - - - - - 获取重置面板中所有字段的客户端脚本 - - - - - - 是否自动滚动 - - - - - 页脚工具栏的排列位置 - - - - - 启用自定义的圆角边框 - - - - - 废弃EnableBackgroundColor属性,以便和ExtJS保持一致。 - - - - - 内容区域的样式 - - - - - 内容区域的内边距,字符串类型,可以设置上下左右的内边距,比如'0px 5px'或'5px 10px 2px 2px' - - - - - 是否显示边框 - - - - - 工具栏控件 - - - - - 子控件 - - - - - [AJAX属性]IFrame的地址 - - - - - IFrame的名称 - - - - - 是否启用IFrame - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 是否展开 - - - - - [AJAX属性]是否折叠 - - - - - 是否允许折叠 - - - - - [AJAX属性]标题 - - - - - 是否显示标题栏 - - - - - 图标地址 - - - - - 图标 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - [只读]布局类型 - - - - - 标签的宽度 - - - - - 标签与字段的分隔符 - - - - - 距离右侧边界的宽度 - - - - - 标签的位置 - - - - - 表单中消息的位置 - - - - - 表单文本输入框字段基类(抽象类) - - - - - 表单文本输入框字段基类(抽象类) - - - - - 表单字段基类(抽象类) - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 重置此字段的值(比如用来清空FileUpload的内容) - - - - - 获取重置此字段的客户端脚本 - - - - - - 获取此字段值的客户端脚本(注意返回的脚本不带结束分号) - - 客户端脚本 - - - - 是否显示标签 - - - - - 是否显示空白的标签 - - - - - [AJAX属性]标签文本 - - - - - 表单中字段与标签的分隔符 - - - - - 在标签后面显示红色的星号(用来标识必填项) - - - - - [AJAX属性]表单控件的只读状态 - - - - - Tab按键的跳转顺序 - - - - - 距离右侧边界的宽度 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 设置字段验证失败的提示信息 - - 提示信息 - - - - 清除验证失败的提示信息 - - - - - 获取字段验证失败提示信息的客户端脚本 - - 提示信息 - 客户端脚本 - - - - 获取清除验证失败提示信息的客户端脚本 - - 客户端脚本 - - - - 是否必填项 - - - - - 为空时提示信息 - - - - - 最大长度 - - - - - 超过最大长度时提示信息 - - - - - 最小长度 - - - - - 少于最小长度时提示信息 - - - - - RegexPattern - - - - - 正则表达式 - - - - - 不满足正则表达式时提示信息 - - - - - 正则表达式是否忽略大小写 - - - - - 需要比较的控件ID - - - - - 需要比较的值 - - - - - 比较操作符 - - - - - 比较的类型 - - - - - 不满足比较条件时提示信息 - - - - - 下一步获得焦点的控件(响应回车事件) - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 触发文本改变事件 - - 事件参数 - - - - 处理回发事件 - - 事件参数 - - - - 触发失去焦点事件 - - 事件参数 - - - - 文本框为空时显示的文本 - - - - - [AJAX属性]文本 - - - - - 是否自动回发(文本值改变) - - - - - 启用失去焦点事件 - - - - - 文本改变事件(需要启用AutoPostBack) - - - - - 失去焦点事件(需要启用EnableBlurEvent) - - - - - 表格可编辑字段的类型 - - - - - 自动(默认值) - - - - - 字符串 - - - - - 整型 - - - - - 浮点数 - - - - - 布尔型 - - - - - 日期 - - - - - 表格可编辑字段的类型名称 - - - - - 表格可编辑字段渲染器 - - - - - 无(默认值) - - - - - 首字母大写 - - - - - 日期(RendererArgument来指定日期格式化字符串) - RendererArgument: - 1. d 月中的某一天。一位数的日期没有前导零。 - 2. dd 月中的某一天。一位数的日期有一个前导零。 - 3. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 - 4. dddd 周中某天的完整名称,在 DayNames 中定义。 - 5. M 月份数字。一位数的月份没有前导零。 - 6. MM 月份数字。一位数的月份有一个前导零。 - 7. MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 - 8. MMMM 月份的完整名称,在 MonthNames 中定义。 - 9. y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 - 10. yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 - 11. yyyy 包括纪元的四位数的年份。 - - - - - 截断字符串并添加省略号(RendererArgument来指定最大长度) - - - - - 文件大小 - - - - - HTML编码 - - - - - HTML解码 - - - - - 转化为小写字符 - - - - - 转化为大写字符 - - - - - 换行符转换为HTML标签
-
-
- - - 格式化为数字(RendererArgument来指定数字的显示格式) - RendererArgument: - 1. 0 - (123456) 只显示数字,没有精度 - 2. 0.00 - (123456.78) 只显示数字,两位精度 - 3. 0.0000 - (123456.7890) 只显示数字,四位精度 - 4. 0,000 - (123,456) 显示数字和逗号,没有精度 - 5. 0,000.00 - (123,456.78) 显示数字和逗号,两位精度 - - - - - 删除所有的脚本标签 - - - - - 删除所有的标签 - - - - - 清除字符串两端的空白字符 - - - - - 美元 - - - - - 表格可编辑字段渲染器名称 - - - - - 表单客户端验证提示消息的类型 - - - - - 浮动提示(默认值) - - - - - 使用HTML标签的title属性 - - - - - 在字段下面通过一个div层来显示消息 - - - - - 在字段右侧显示一个错误图标 - - - - - 不显示错误信息 - - - - - 提示消息的类型名称 - - - - - 复选框/单选框/复选框菜单按钮的事件参数 - - - - - 构造函数 - - 是否选中 - - - - 是否选中 - - - - - 控件集合 - - - - - 控件集合 - - - - - 构造函数 - - 父控件实例 - - - - 向集合中插入一个元素 - - - - - - - 删除集合中的一个元素 - - - - - - 清空集合 - - - - - 获取类型 T 在父控件子集中的开始位置 - - - - - - 构造函数 - - 父控件实例 - - - - 控件集合 - - - - - 构造函数 - - 父控件实例 - - - - 控件内部不允许存在非标签形式的字符串 - - - - - 不允许空白字符 - - - - - - 忽略游离于标签外的字符串 - - - - - - 支持页分析器生成控件及其包含的子控件 - - - - - 允许空白字符 - - - - - - 不忽略游离于标签外的字符串 - - - - - - 全局配置参数 - - - - - 初始化section对象,如果在Web.config中没有定义,则初始化为空对象 - - - - - Runtime Section - - - - - Refer:http://flimflan.com/blog/AccessingWebconfigAtDesignTimeInNET20.aspx - - - - - - - 主题 - - - - - 语言 - - - - - 表单中消息的位置 - - - - - 表单中标签的位置 - - - - - 表单中字段距离右侧的宽度 - - - - - 表单中字段标签的宽度 - - - - - 表单中字段与标签的分隔符 - - - - - AJAX超时时间(单位:秒,默认:60s) - - - - - 是否启用Ajax - - - - - 是否启用AJAX提示 - - - - - AJAX提示的类型 - - - - - DEBUG 模式 - - - - - 图标的根路径 - - - - - Extjs库的根路径 - - - - - 自定义样式的根路径 - - - - - 自定义样式的名称 - - - - - 是否启用XState压缩 - - - - - 获取默认的背景颜色 - - 用于CSS的背景颜色值 - - - - 产品名称 - - - - - 当前版本 - - - - - 为设计时提供集合编辑器 - - - - - 构造函数 - - 控件类型 - - - - 获取此集合编辑器可包含的数据类型 - - 类型集合 - - - - 为设计时提供的菜单项集合编辑器 - - - - - 构造函数 - - 控件类型 - - - - 获取此集合编辑器可包含的数据类型 - - 类型集合 - - - - 为设计时提供的工具栏项集合编辑器 - - - - - 构造函数 - - 控件类型 - - - - 获取此集合编辑器可包含的数据类型 - - 类型集合 - - - - 为设计时提供的表格列编辑器集合编辑器 - - - - - 构造函数 - - 控件类型 - - - - 获取此集合编辑器可包含的数据类型 - - 类型集合 - - - - 相比较的数据类型(用于表单控件的客户端验证) - - - - - 浮点数 - - - - - 整形 - - - - - 字符串(默认值) - - - - - 隐藏的模式 - - - - - 通过设置CSS属性visibility来控制显示隐藏 - - - - - 通过设置CSS属性top/left来控制显示隐藏 - - - - - 通过设置CSS属性display来控制显示隐藏(默认值) - - - - - 隐藏的模式名称 - - - - - 预定义图标 - - - - - None - - - - - Accept - - - - - Add - - - - - Anchor - - - - - Application - - - - - ApplicationAdd - - - - - ApplicationCascade - - - - - ApplicationDelete - - - - - ApplicationDouble - - - - - ApplicationEdit - - - - - ApplicationError - - - - - ApplicationForm - - - - - ApplicationFormAdd - - - - - ApplicationFormDelete - - - - - ApplicationFormEdit - - - - - ApplicationFormMagnify - - - - - ApplicationGet - - - - - ApplicationGo - - - - - ApplicationHome - - - - - ApplicationKey - - - - - ApplicationLightning - - - - - ApplicationLink - - - - - ApplicationOsx - - - - - ApplicationOsxAdd - - - - - ApplicationOsxCascade - - - - - ApplicationOsxDelete - - - - - ApplicationOsxDouble - - - - - ApplicationOsxError - - - - - ApplicationOsxGet - - - - - ApplicationOsxGo - - - - - ApplicationOsxHome - - - - - ApplicationOsxKey - - - - - ApplicationOsxLightning - - - - - ApplicationOsxLink - - - - - ApplicationOsxSplit - - - - - ApplicationOsxStart - - - - - ApplicationOsxStop - - - - - ApplicationOsxTerminal - - - - - ApplicationPut - - - - - ApplicationSideBoxes - - - - - ApplicationSideContract - - - - - ApplicationSideExpand - - - - - ApplicationSideList - - - - - ApplicationSideTree - - - - - ApplicationSplit - - - - - ApplicationStart - - - - - ApplicationStop - - - - - ApplicationTileHorizontal - - - - - ApplicationTileVertical - - - - - ApplicationViewColumns - - - - - ApplicationViewDetail - - - - - ApplicationViewGallery - - - - - ApplicationViewIcons - - - - - ApplicationViewList - - - - - ApplicationViewTile - - - - - ApplicationXp - - - - - ApplicationXpTerminal - - - - - ArrowBranch - - - - - ArrowDivide - - - - - ArrowDown - - - - - ArrowEw - - - - - ArrowIn - - - - - ArrowInout - - - - - ArrowInLonger - - - - - ArrowJoin - - - - - ArrowLeft - - - - - ArrowMerge - - - - - ArrowNe - - - - - ArrowNs - - - - - ArrowNsew - - - - - ArrowNw - - - - - ArrowNwNeSwSe - - - - - ArrowNwSe - - - - - ArrowOut - - - - - ArrowOutLonger - - - - - ArrowRedo - - - - - ArrowRefresh - - - - - ArrowRefreshSmall - - - - - ArrowRight - - - - - ArrowRotateAnticlockwise - - - - - ArrowRotateClockwise - - - - - ArrowSe - - - - - ArrowSw - - - - - ArrowSwitch - - - - - ArrowSwitchBluegreen - - - - - ArrowSwNe - - - - - ArrowTurnLeft - - - - - ArrowTurnRight - - - - - ArrowUndo - - - - - ArrowUp - - - - - AsteriskOrange - - - - - AsteriskRed - - - - - AsteriskYellow - - - - - Attach - - - - - AwardStarAdd - - - - - AwardStarBronze1 - - - - - AwardStarBronze2 - - - - - AwardStarBronze3 - - - - - AwardStarDelete - - - - - AwardStarGold1 - - - - - AwardStarGold2 - - - - - AwardStarGold3 - - - - - AwardStarSilver1 - - - - - AwardStarSilver2 - - - - - AwardStarSilver3 - - - - - Basket - - - - - BasketAdd - - - - - BasketDelete - - - - - BasketEdit - - - - - BasketError - - - - - BasketGo - - - - - BasketPut - - - - - BasketRemove - - - - - Bell - - - - - BellAdd - - - - - BellDelete - - - - - BellError - - - - - BellGo - - - - - BellLink - - - - - BellSilver - - - - - BellSilverStart - - - - - BellSilverStop - - - - - BellStart - - - - - BellStop - - - - - Bin - - - - - BinClosed - - - - - BinEmpty - - - - - Blank - - - - - Bomb - - - - - Book - - - - - Bookmark - - - - - BookmarkAdd - - - - - BookmarkDelete - - - - - BookmarkEdit - - - - - BookmarkError - - - - - BookmarkGo - - - - - BookAdd - - - - - BookAddresses - - - - - BookAddressesAdd - - - - - BookAddressesDelete - - - - - BookAddressesEdit - - - - - BookAddressesError - - - - - BookAddressesKey - - - - - BookDelete - - - - - BookEdit - - - - - BookError - - - - - BookGo - - - - - BookKey - - - - - BookLink - - - - - BookMagnify - - - - - BookNext - - - - - BookOpen - - - - - BookOpenMark - - - - - BookPrevious - - - - - BookRed - - - - - BookTabs - - - - - BorderAll - - - - - BorderBottom - - - - - BorderDraw - - - - - BorderInner - - - - - BorderInnerHorizontal - - - - - BorderInnerVertical - - - - - BorderLeft - - - - - BorderNone - - - - - BorderOuter - - - - - BorderRight - - - - - BorderTop - - - - - Box - - - - - BoxError - - - - - BoxPicture - - - - - BoxWorld - - - - - Brick - - - - - Bricks - - - - - BrickAdd - - - - - BrickDelete - - - - - BrickEdit - - - - - BrickError - - - - - BrickGo - - - - - BrickLink - - - - - BrickMagnify - - - - - Briefcase - - - - - Bug - - - - - BugAdd - - - - - BugDelete - - - - - BugEdit - - - - - BugError - - - - - BugFix - - - - - BugGo - - - - - BugLink - - - - - BugMagnify - - - - - Build - - - - - Building - - - - - BuildingAdd - - - - - BuildingDelete - - - - - BuildingEdit - - - - - BuildingError - - - - - BuildingGo - - - - - BuildingKey - - - - - BuildingLink - - - - - BuildCancel - - - - - BulletAdd - - - - - BulletArrowBottom - - - - - BulletArrowDown - - - - - BulletArrowTop - - - - - BulletArrowUp - - - - - BulletBlack - - - - - BulletBlue - - - - - BulletConnect - - - - - BulletCross - - - - - BulletDatabase - - - - - BulletDatabaseYellow - - - - - BulletDelete - - - - - BulletDisk - - - - - BulletEarth - - - - - BulletEdit - - - - - BulletEject - - - - - BulletError - - - - - BulletFeed - - - - - BulletGet - - - - - BulletGo - - - - - BulletGreen - - - - - BulletHome - - - - - BulletKey - - - - - BulletLeft - - - - - BulletLightning - - - - - BulletMagnify - - - - - BulletMinus - - - - - BulletOrange - - - - - BulletPageWhite - - - - - BulletPicture - - - - - BulletPink - - - - - BulletPlus - - - - - BulletPurple - - - - - BulletRed - - - - - BulletRight - - - - - BulletShape - - - - - BulletSparkle - - - - - BulletStar - - - - - BulletStart - - - - - BulletStop - - - - - BulletStopAlt - - - - - BulletTick - - - - - BulletToggleMinus - - - - - BulletTogglePlus - - - - - BulletWhite - - - - - BulletWrench - - - - - BulletWrenchRed - - - - - BulletYellow - - - - - Button - - - - - Cake - - - - - CakeOut - - - - - CakeSliced - - - - - Calculator - - - - - CalculatorAdd - - - - - CalculatorDelete - - - - - CalculatorEdit - - - - - CalculatorError - - - - - CalculatorLink - - - - - Calendar - - - - - CalendarAdd - - - - - CalendarDelete - - - - - CalendarEdit - - - - - CalendarLink - - - - - CalendarSelectDay - - - - - CalendarSelectNone - - - - - CalendarSelectWeek - - - - - CalendarStar - - - - - CalendarViewDay - - - - - CalendarViewMonth - - - - - CalendarViewWeek - - - - - Camera - - - - - CameraAdd - - - - - CameraConnect - - - - - CameraDelete - - - - - CameraEdit - - - - - CameraError - - - - - CameraGo - - - - - CameraLink - - - - - CameraMagnify - - - - - CameraPicture - - - - - CameraSmall - - - - - CameraStart - - - - - CameraStop - - - - - Cancel - - - - - Car - - - - - Cart - - - - - CartAdd - - - - - CartDelete - - - - - CartEdit - - - - - CartError - - - - - CartFull - - - - - CartGo - - - - - CartMagnify - - - - - CartPut - - - - - CartRemove - - - - - CarAdd - - - - - CarDelete - - - - - CarError - - - - - CarRed - - - - - CarStart - - - - - CarStop - - - - - Cd - - - - - Cdr - - - - - CdrAdd - - - - - CdrBurn - - - - - CdrCross - - - - - CdrDelete - - - - - CdrEdit - - - - - CdrEject - - - - - CdrError - - - - - CdrGo - - - - - CdrMagnify - - - - - CdrPlay - - - - - CdrStart - - - - - CdrStop - - - - - CdrStopAlt - - - - - CdrTick - - - - - CdAdd - - - - - CdBurn - - - - - CdDelete - - - - - CdEdit - - - - - CdEject - - - - - CdGo - - - - - CdMagnify - - - - - CdPlay - - - - - CdStop - - - - - CdStopAlt - - - - - CdTick - - - - - ChartBar - - - - - ChartBarAdd - - - - - ChartBarDelete - - - - - ChartBarEdit - - - - - ChartBarError - - - - - ChartBarLink - - - - - ChartCurve - - - - - ChartCurveAdd - - - - - ChartCurveDelete - - - - - ChartCurveEdit - - - - - ChartCurveError - - - - - ChartCurveGo - - - - - ChartCurveLink - - - - - ChartLine - - - - - ChartLineAdd - - - - - ChartLineDelete - - - - - ChartLineEdit - - - - - ChartLineError - - - - - ChartLineLink - - - - - ChartOrganisation - - - - - ChartOrganisationAdd - - - - - ChartOrganisationDelete - - - - - ChartOrgInverted - - - - - ChartPie - - - - - ChartPieAdd - - - - - ChartPieDelete - - - - - ChartPieEdit - - - - - ChartPieError - - - - - ChartPieLightning - - - - - ChartPieLink - - - - - CheckError - - - - - Clipboard - - - - - Clock - - - - - ClockAdd - - - - - ClockDelete - - - - - ClockEdit - - - - - ClockError - - - - - ClockGo - - - - - ClockLink - - - - - ClockPause - - - - - ClockPlay - - - - - ClockRed - - - - - ClockStart - - - - - ClockStop - - - - - ClockStop2 - - - - - Cmy - - - - - Cog - - - - - CogAdd - - - - - CogDelete - - - - - CogEdit - - - - - CogError - - - - - CogGo - - - - - CogStart - - - - - CogStop - - - - - Coins - - - - - CoinsAdd - - - - - CoinsDelete - - - - - Color - - - - - ColorSwatch - - - - - ColorWheel - - - - - Comment - - - - - Comments - - - - - CommentsAdd - - - - - CommentsDelete - - - - - CommentAdd - - - - - CommentDelete - - - - - CommentDull - - - - - CommentEdit - - - - - CommentPlay - - - - - CommentRecord - - - - - Compass - - - - - Compress - - - - - Computer - - - - - ComputerAdd - - - - - ComputerConnect - - - - - ComputerDelete - - - - - ComputerEdit - - - - - ComputerError - - - - - ComputerGo - - - - - ComputerKey - - - - - ComputerLink - - - - - ComputerMagnify - - - - - ComputerOff - - - - - ComputerStart - - - - - ComputerStop - - - - - ComputerWrench - - - - - Connect - - - - - Contrast - - - - - ContrastDecrease - - - - - ContrastHigh - - - - - ContrastIncrease - - - - - ContrastLow - - - - - Controller - - - - - ControllerAdd - - - - - ControllerDelete - - - - - ControllerError - - - - - ControlAdd - - - - - ControlAddBlue - - - - - ControlBlank - - - - - ControlBlankBlue - - - - - ControlEject - - - - - ControlEjectBlue - - - - - ControlEnd - - - - - ControlEndBlue - - - - - ControlEqualizer - - - - - ControlEqualizerBlue - - - - - ControlFastforward - - - - - ControlFastforwardBlue - - - - - ControlPause - - - - - ControlPauseBlue - - - - - ControlPlay - - - - - ControlPlayBlue - - - - - ControlPower - - - - - ControlPowerBlue - - - - - ControlRecord - - - - - ControlRecordBlue - - - - - ControlRemove - - - - - ControlRemoveBlue - - - - - ControlRepeat - - - - - ControlRepeatBlue - - - - - ControlRewind - - - - - ControlRewindBlue - - - - - ControlStart - - - - - ControlStartBlue - - - - - ControlStop - - - - - ControlStopBlue - - - - - Creditcards - - - - - Cross - - - - - Css - - - - - CssAdd - - - - - CssDelete - - - - - CssError - - - - - CssGo - - - - - CssValid - - - - - Cup - - - - - CupAdd - - - - - CupBlack - - - - - CupDelete - - - - - CupEdit - - - - - CupError - - - - - CupGo - - - - - CupGreen - - - - - CupKey - - - - - CupLink - - - - - CupTea - - - - - Cursor - - - - - CursorSmall - - - - - Cut - - - - - CutRed - - - - - Database - - - - - DatabaseAdd - - - - - DatabaseConnect - - - - - DatabaseCopy - - - - - DatabaseDelete - - - - - DatabaseEdit - - - - - DatabaseError - - - - - DatabaseGear - - - - - DatabaseGo - - - - - DatabaseKey - - - - - DatabaseLightning - - - - - DatabaseLink - - - - - DatabaseRefresh - - - - - DatabaseSave - - - - - DatabaseStart - - - - - DatabaseStop - - - - - DatabaseTable - - - - - DatabaseWrench - - - - - DatabaseYellow - - - - - DatabaseYellowStart - - - - - DatabaseYellowStop - - - - - Date - - - - - DateAdd - - - - - DateDelete - - - - - DateEdit - - - - - DateError - - - - - DateGo - - - - - DateLink - - - - - DateMagnify - - - - - DateNext - - - - - DatePrevious - - - - - Decline - - - - - Delete - - - - - DeviceStylus - - - - - Disconnect - - - - - Disk - - - - - DiskBlack - - - - - DiskBlackError - - - - - DiskBlackMagnify - - - - - DiskDownload - - - - - DiskEdit - - - - - DiskError - - - - - DiskMagnify - - - - - DiskMultiple - - - - - DiskUpload - - - - - Door - - - - - DoorError - - - - - DoorIn - - - - - DoorOpen - - - - - DoorOut - - - - - Drink - - - - - DrinkEmpty - - - - - DrinkRed - - - - - Drive - - - - - DriveAdd - - - - - DriveBurn - - - - - DriveCd - - - - - DriveCdr - - - - - DriveCdEmpty - - - - - DriveDelete - - - - - DriveDisk - - - - - DriveEdit - - - - - DriveError - - - - - DriveGo - - - - - DriveKey - - - - - DriveLink - - - - - DriveMagnify - - - - - DriveNetwork - - - - - DriveNetworkError - - - - - DriveNetworkStop - - - - - DriveRename - - - - - DriveUser - - - - - DriveWeb - - - - - Dvd - - - - - DvdAdd - - - - - DvdDelete - - - - - DvdEdit - - - - - DvdError - - - - - DvdGo - - - - - DvdKey - - - - - DvdLink - - - - - DvdStart - - - - - DvdStop - - - - - EjectBlue - - - - - EjectGreen - - - - - Email - - - - - EmailAdd - - - - - EmailAttach - - - - - EmailDelete - - - - - EmailEdit - - - - - EmailError - - - - - EmailGo - - - - - EmailLink - - - - - EmailMagnify - - - - - EmailOpen - - - - - EmailOpenImage - - - - - EmailStar - - - - - EmailStart - - - - - EmailStop - - - - - EmailTransfer - - - - - EmoticonEvilgrin - - - - - EmoticonGrin - - - - - EmoticonHappy - - - - - EmoticonSmile - - - - - EmoticonSurprised - - - - - EmoticonTongue - - - - - EmoticonUnhappy - - - - - EmoticonWaii - - - - - EmoticonWink - - - - - Erase - - - - - Error - - - - - ErrorAdd - - - - - ErrorDelete - - - - - ErrorGo - - - - - Exclamation - - - - - Eye - - - - - Eyes - - - - - Feed - - - - - FeedAdd - - - - - FeedDelete - - - - - FeedDisk - - - - - FeedEdit - - - - - FeedError - - - - - FeedGo - - - - - FeedKey - - - - - FeedLink - - - - - FeedMagnify - - - - - FeedStar - - - - - Female - - - - - Film - - - - - FilmAdd - - - - - FilmDelete - - - - - FilmEdit - - - - - FilmEject - - - - - FilmError - - - - - FilmGo - - - - - FilmKey - - - - - FilmLink - - - - - FilmMagnify - - - - - FilmSave - - - - - FilmStar - - - - - FilmStart - - - - - FilmStop - - - - - Find - - - - - FingerPoint - - - - - FlagAd - - - - - FlagAe - - - - - FlagAf - - - - - FlagAg - - - - - FlagAi - - - - - FlagAl - - - - - FlagAm - - - - - FlagAn - - - - - FlagAo - - - - - FlagAr - - - - - FlagAs - - - - - FlagAt - - - - - FlagAu - - - - - FlagAw - - - - - FlagAx - - - - - FlagAz - - - - - FlagBa - - - - - FlagBb - - - - - FlagBd - - - - - FlagBe - - - - - FlagBf - - - - - FlagBg - - - - - FlagBh - - - - - FlagBi - - - - - FlagBj - - - - - FlagBlack - - - - - FlagBlue - - - - - FlagBm - - - - - FlagBn - - - - - FlagBo - - - - - FlagBr - - - - - FlagBs - - - - - FlagBt - - - - - FlagBv - - - - - FlagBw - - - - - FlagBy - - - - - FlagBz - - - - - FlagCa - - - - - FlagCatalonia - - - - - FlagCc - - - - - FlagCd - - - - - FlagCf - - - - - FlagCg - - - - - FlagCh - - - - - FlagChecked - - - - - FlagCi - - - - - FlagCk - - - - - FlagCl - - - - - FlagCm - - - - - FlagCn - - - - - FlagCo - - - - - FlagCr - - - - - FlagCs - - - - - FlagCu - - - - - FlagCv - - - - - FlagCx - - - - - FlagCy - - - - - FlagCz - - - - - FlagDe - - - - - FlagDj - - - - - FlagDk - - - - - FlagDm - - - - - FlagDo - - - - - FlagDz - - - - - FlagEc - - - - - FlagEe - - - - - FlagEg - - - - - FlagEh - - - - - FlagEngland - - - - - FlagEr - - - - - FlagEs - - - - - FlagEt - - - - - FlagEuropeanunion - - - - - FlagFam - - - - - FlagFi - - - - - FlagFj - - - - - FlagFk - - - - - FlagFm - - - - - FlagFo - - - - - FlagFr - - - - - FlagFrance - - - - - FlagGa - - - - - FlagGb - - - - - FlagGd - - - - - FlagGe - - - - - FlagGf - - - - - FlagGg - - - - - FlagGh - - - - - FlagGi - - - - - FlagGl - - - - - FlagGm - - - - - FlagGn - - - - - FlagGp - - - - - FlagGq - - - - - FlagGr - - - - - FlagGreen - - - - - FlagGrey - - - - - FlagGs - - - - - FlagGt - - - - - FlagGu - - - - - FlagGw - - - - - FlagGy - - - - - FlagHk - - - - - FlagHm - - - - - FlagHn - - - - - FlagHr - - - - - FlagHt - - - - - FlagHu - - - - - FlagId - - - - - FlagIe - - - - - FlagIl - - - - - FlagIn - - - - - FlagIo - - - - - FlagIq - - - - - FlagIr - - - - - FlagIs - - - - - FlagIt - - - - - FlagJm - - - - - FlagJo - - - - - FlagJp - - - - - FlagKe - - - - - FlagKg - - - - - FlagKh - - - - - FlagKi - - - - - FlagKm - - - - - FlagKn - - - - - FlagKp - - - - - FlagKr - - - - - FlagKw - - - - - FlagKy - - - - - FlagKz - - - - - FlagLa - - - - - FlagLb - - - - - FlagLc - - - - - FlagLi - - - - - FlagLk - - - - - FlagLr - - - - - FlagLs - - - - - FlagLt - - - - - FlagLu - - - - - FlagLv - - - - - FlagLy - - - - - FlagMa - - - - - FlagMc - - - - - FlagMd - - - - - FlagMe - - - - - FlagMg - - - - - FlagMh - - - - - FlagMk - - - - - FlagMl - - - - - FlagMm - - - - - FlagMn - - - - - FlagMo - - - - - FlagMp - - - - - FlagMq - - - - - FlagMr - - - - - FlagMs - - - - - FlagMt - - - - - FlagMu - - - - - FlagMv - - - - - FlagMw - - - - - FlagMx - - - - - FlagMy - - - - - FlagMz - - - - - FlagNa - - - - - FlagNc - - - - - FlagNe - - - - - FlagNf - - - - - FlagNg - - - - - FlagNi - - - - - FlagNl - - - - - FlagNo - - - - - FlagNp - - - - - FlagNr - - - - - FlagNu - - - - - FlagNz - - - - - FlagOm - - - - - FlagOrange - - - - - FlagPa - - - - - FlagPe - - - - - FlagPf - - - - - FlagPg - - - - - FlagPh - - - - - FlagPink - - - - - FlagPk - - - - - FlagPl - - - - - FlagPm - - - - - FlagPn - - - - - FlagPr - - - - - FlagPs - - - - - FlagPt - - - - - FlagPurple - - - - - FlagPw - - - - - FlagPy - - - - - FlagQa - - - - - FlagRe - - - - - FlagRed - - - - - FlagRo - - - - - FlagRs - - - - - FlagRu - - - - - FlagRw - - - - - FlagSa - - - - - FlagSb - - - - - FlagSc - - - - - FlagScotland - - - - - FlagSd - - - - - FlagSe - - - - - FlagSg - - - - - FlagSh - - - - - FlagSi - - - - - FlagSj - - - - - FlagSk - - - - - FlagSl - - - - - FlagSm - - - - - FlagSn - - - - - FlagSo - - - - - FlagSr - - - - - FlagSt - - - - - FlagSv - - - - - FlagSy - - - - - FlagSz - - - - - FlagTc - - - - - FlagTd - - - - - FlagTf - - - - - FlagTg - - - - - FlagTh - - - - - FlagTj - - - - - FlagTk - - - - - FlagTl - - - - - FlagTm - - - - - FlagTn - - - - - FlagTo - - - - - FlagTr - - - - - FlagTt - - - - - FlagTv - - - - - FlagTw - - - - - FlagTz - - - - - FlagUa - - - - - FlagUg - - - - - FlagUm - - - - - FlagUs - - - - - FlagUy - - - - - FlagUz - - - - - FlagVa - - - - - FlagVc - - - - - FlagVe - - - - - FlagVg - - - - - FlagVi - - - - - FlagVn - - - - - FlagVu - - - - - FlagWales - - - - - FlagWf - - - - - FlagWhite - - - - - FlagWs - - - - - FlagYe - - - - - FlagYellow - - - - - FlagYt - - - - - FlagZa - - - - - FlagZm - - - - - FlagZw - - - - - FlowerDaisy - - - - - Folder - - - - - FolderAdd - - - - - FolderBell - - - - - FolderBookmark - - - - - FolderBrick - - - - - FolderBug - - - - - FolderCamera - - - - - FolderConnect - - - - - FolderDatabase - - - - - FolderDelete - - - - - FolderEdit - - - - - FolderError - - - - - FolderExplore - - - - - FolderFeed - - - - - FolderFilm - - - - - FolderFind - - - - - FolderFont - - - - - FolderGo - - - - - FolderHeart - - - - - FolderHome - - - - - FolderImage - - - - - FolderKey - - - - - FolderLightbulb - - - - - FolderLink - - - - - FolderMagnify - - - - - FolderPage - - - - - FolderPageWhite - - - - - FolderPalette - - - - - FolderPicture - - - - - FolderStar - - - - - FolderTable - - - - - FolderUp - - - - - FolderUser - - - - - FolderWrench - - - - - Font - - - - - FontAdd - - - - - FontColor - - - - - FontDelete - - - - - FontGo - - - - - FontLarger - - - - - FontSmaller - - - - - ForwardBlue - - - - - ForwardGreen - - - - - Group - - - - - GroupAdd - - - - - GroupDelete - - - - - GroupEdit - - - - - GroupError - - - - - GroupGear - - - - - GroupGo - - - - - GroupKey - - - - - GroupLink - - - - - Heart - - - - - HeartAdd - - - - - HeartBroken - - - - - HeartConnect - - - - - HeartDelete - - - - - Help - - - - - Hourglass - - - - - HourglassAdd - - - - - HourglassDelete - - - - - HourglassGo - - - - - HourglassLink - - - - - House - - - - - HouseConnect - - - - - HouseGo - - - - - HouseKey - - - - - HouseLink - - - - - HouseStar - - - - - Html - - - - - HtmlAdd - - - - - HtmlDelete - - - - - HtmlError - - - - - HtmlGo - - - - - HtmlValid - - - - - Image - - - - - Images - - - - - ImageAdd - - - - - ImageDelete - - - - - ImageEdit - - - - - ImageLink - - - - - ImageMagnify - - - - - ImageStar - - - - - Information - - - - - Ipod - - - - - IpodCast - - - - - IpodCastAdd - - - - - IpodCastDelete - - - - - IpodConnect - - - - - IpodNano - - - - - IpodNanoConnect - - - - - IpodSound - - - - - Joystick - - - - - JoystickAdd - - - - - JoystickConnect - - - - - JoystickDelete - - - - - JoystickError - - - - - Key - - - - - Keyboard - - - - - KeyboardAdd - - - - - KeyboardConnect - - - - - KeyboardDelete - - - - - KeyboardMagnify - - - - - KeyAdd - - - - - KeyDelete - - - - - KeyGo - - - - - KeyStart - - - - - KeyStop - - - - - Laptop - - - - - LaptopAdd - - - - - LaptopConnect - - - - - LaptopDelete - - - - - LaptopDisk - - - - - LaptopEdit - - - - - LaptopError - - - - - LaptopGo - - - - - LaptopKey - - - - - LaptopLink - - - - - LaptopMagnify - - - - - LaptopStart - - - - - LaptopStop - - - - - LaptopWrench - - - - - Layers - - - - - Layout - - - - - LayoutAdd - - - - - LayoutContent - - - - - LayoutDelete - - - - - LayoutEdit - - - - - LayoutError - - - - - LayoutHeader - - - - - LayoutKey - - - - - LayoutLightning - - - - - LayoutLink - - - - - LayoutSidebar - - - - - Lightbulb - - - - - LightbulbAdd - - - - - LightbulbDelete - - - - - LightbulbOff - - - - - Lightning - - - - - LightningAdd - - - - - LightningDelete - - - - - LightningGo - - - - - Link - - - - - LinkAdd - - - - - LinkBreak - - - - - LinkDelete - - - - - LinkEdit - - - - - LinkError - - - - - LinkGo - - - - - Lock - - - - - LockAdd - - - - - LockBreak - - - - - LockDelete - - - - - LockEdit - - - - - LockGo - - - - - LockKey - - - - - LockOpen - - - - - LockStart - - - - - LockStop - - - - - Lorry - - - - - LorryAdd - - - - - LorryDelete - - - - - LorryError - - - - - LorryFlatbed - - - - - LorryGo - - - - - LorryLink - - - - - LorryStart - - - - - LorryStop - - - - - MagifierZoomOut - - - - - Magnifier - - - - - MagnifierZoomIn - - - - - Mail - - - - - Male - - - - - Map - - - - - MapAdd - - - - - MapClipboard - - - - - MapCursor - - - - - MapDelete - - - - - MapEdit - - - - - MapError - - - - - MapGo - - - - - MapLink - - - - - MapMagnify - - - - - MapStart - - - - - MapStop - - - - - MedalBronze1 - - - - - MedalBronze2 - - - - - MedalBronze3 - - - - - MedalBronzeAdd - - - - - MedalBronzeDelete - - - - - MedalGold1 - - - - - MedalGold2 - - - - - MedalGold3 - - - - - MedalGoldAdd - - - - - MedalGoldDelete - - - - - MedalSilver1 - - - - - MedalSilver2 - - - - - MedalSilver3 - - - - - MedalSilverAdd - - - - - MedalSilverDelete - - - - - Money - - - - - MoneyAdd - - - - - MoneyDelete - - - - - MoneyDollar - - - - - MoneyEuro - - - - - MoneyPound - - - - - MoneyYen - - - - - Monitor - - - - - MonitorAdd - - - - - MonitorDelete - - - - - MonitorEdit - - - - - MonitorError - - - - - MonitorGo - - - - - MonitorKey - - - - - MonitorLightning - - - - - MonitorLink - - - - - MoonFull - - - - - Mouse - - - - - MouseAdd - - - - - MouseDelete - - - - - MouseError - - - - - Music - - - - - MusicNote - - - - - Neighbourhood - - - - - New - - - - - Newspaper - - - - - NewspaperAdd - - - - - NewspaperDelete - - - - - NewspaperGo - - - - - NewspaperLink - - - - - NewBlue - - - - - NewRed - - - - - NextBlue - - - - - NextGreen - - - - - Note - - - - - NoteAdd - - - - - NoteDelete - - - - - NoteEdit - - - - - NoteError - - - - - NoteGo - - - - - Outline - - - - - Overlays - - - - - Package - - - - - PackageAdd - - - - - PackageDelete - - - - - PackageDown - - - - - PackageGo - - - - - PackageGreen - - - - - PackageIn - - - - - PackageLink - - - - - PackageSe - - - - - PackageStart - - - - - PackageStop - - - - - PackageWhite - - - - - Page - - - - - PageAdd - - - - - PageAttach - - - - - PageBack - - - - - PageBreak - - - - - PageBreakInsert - - - - - PageCancel - - - - - PageCode - - - - - PageCopy - - - - - PageDelete - - - - - PageEdit - - - - - PageError - - - - - PageExcel - - - - - PageFind - - - - - PageForward - - - - - PageGear - - - - - PageGo - - - - - PageGreen - - - - - PageHeaderFooter - - - - - PageKey - - - - - PageLandscape - - - - - PageLandscapeShot - - - - - PageLightning - - - - - PageLink - - - - - PageMagnify - - - - - PagePaintbrush - - - - - PagePaste - - - - - PagePortrait - - - - - PagePortraitShot - - - - - PageRed - - - - - PageRefresh - - - - - PageSave - - - - - PageWhite - - - - - PageWhiteAcrobat - - - - - PageWhiteActionscript - - - - - PageWhiteAdd - - - - - PageWhiteBreak - - - - - PageWhiteC - - - - - PageWhiteCamera - - - - - PageWhiteCd - - - - - PageWhiteCdr - - - - - PageWhiteCode - - - - - PageWhiteCodeRed - - - - - PageWhiteColdfusion - - - - - PageWhiteCompressed - - - - - PageWhiteConnect - - - - - PageWhiteCopy - - - - - PageWhiteCplusplus - - - - - PageWhiteCsharp - - - - - PageWhiteCup - - - - - PageWhiteDatabase - - - - - PageWhiteDatabaseYellow - - - - - PageWhiteDelete - - - - - PageWhiteDvd - - - - - PageWhiteEdit - - - - - PageWhiteError - - - - - PageWhiteExcel - - - - - PageWhiteFind - - - - - PageWhiteFlash - - - - - PageWhiteFont - - - - - PageWhiteFreehand - - - - - PageWhiteGear - - - - - PageWhiteGet - - - - - PageWhiteGo - - - - - PageWhiteH - - - - - PageWhiteHorizontal - - - - - PageWhiteKey - - - - - PageWhiteLightning - - - - - PageWhiteLink - - - - - PageWhiteMagnify - - - - - PageWhiteMedal - - - - - PageWhiteOffice - - - - - PageWhitePaint - - - - - PageWhitePaintbrush - - - - - PageWhitePaint2 - - - - - PageWhitePaste - - - - - PageWhitePasteTable - - - - - PageWhitePhp - - - - - PageWhitePicture - - - - - PageWhitePowerpoint - - - - - PageWhitePut - - - - - PageWhiteRefresh - - - - - PageWhiteRuby - - - - - PageWhiteSideBySide - - - - - PageWhiteStack - - - - - PageWhiteStar - - - - - PageWhiteSwoosh - - - - - PageWhiteText - - - - - PageWhiteTextWidth - - - - - PageWhiteTux - - - - - PageWhiteVector - - - - - PageWhiteVisualstudio - - - - - PageWhiteWidth - - - - - PageWhiteWord - - - - - PageWhiteWorld - - - - - PageWhiteWrench - - - - - PageWhiteZip - - - - - PageWord - - - - - PageWorld - - - - - Paint - - - - - Paintbrush - - - - - PaintbrushColor - - - - - Paintcan - - - - - PaintcanRed - - - - - PaintCanBrush - - - - - Palette - - - - - PastePlain - - - - - PasteWord - - - - - PauseBlue - - - - - PauseGreen - - - - - PauseRecord - - - - - Pencil - - - - - PencilAdd - - - - - PencilDelete - - - - - PencilGo - - - - - Phone - - - - - PhoneAdd - - - - - PhoneDelete - - - - - PhoneEdit - - - - - PhoneError - - - - - PhoneGo - - - - - PhoneKey - - - - - PhoneLink - - - - - PhoneSound - - - - - PhoneStart - - - - - PhoneStop - - - - - Photo - - - - - Photos - - - - - PhotoAdd - - - - - PhotoDelete - - - - - PhotoEdit - - - - - PhotoLink - - - - - PhotoPaint - - - - - Picture - - - - - Pictures - - - - - PicturesThumbs - - - - - PictureAdd - - - - - PictureClipboard - - - - - PictureDelete - - - - - PictureEdit - - - - - PictureEmpty - - - - - PictureError - - - - - PictureGo - - - - - PictureKey - - - - - PictureLink - - - - - PictureSave - - - - - Pilcrow - - - - - Pill - - - - - PillAdd - - - - - PillDelete - - - - - PillError - - - - - PillGo - - - - - PlayBlue - - - - - PlayGreen - - - - - Plugin - - - - - PluginAdd - - - - - PluginDelete - - - - - PluginDisabled - - - - - PluginEdit - - - - - PluginError - - - - - PluginGo - - - - - PluginKey - - - - - PluginLink - - - - - PreviousGreen - - - - - Printer - - - - - PrinterAdd - - - - - PrinterCancel - - - - - PrinterColor - - - - - PrinterConnect - - - - - PrinterDelete - - - - - PrinterEmpty - - - - - PrinterError - - - - - PrinterGo - - - - - PrinterKey - - - - - PrinterMono - - - - - PrinterStart - - - - - PrinterStop - - - - - Rainbow - - - - - RainbowStar - - - - - RecordBlue - - - - - RecordGreen - - - - - RecordRed - - - - - Reload - - - - - Report - - - - - ReportAdd - - - - - ReportDelete - - - - - ReportDisk - - - - - ReportEdit - - - - - ReportGo - - - - - ReportKey - - - - - ReportLink - - - - - ReportMagnify - - - - - ReportPicture - - - - - ReportStart - - - - - ReportStop - - - - - ReportUser - - - - - ReportWord - - - - - ResultsetFirst - - - - - ResultsetLast - - - - - ResultsetNext - - - - - ResultsetPrevious - - - - - ReverseBlue - - - - - ReverseGreen - - - - - RewindBlue - - - - - RewindGreen - - - - - Rgb - - - - - Rosette - - - - - RosetteBlue - - - - - Rss - - - - - RssAdd - - - - - RssDelete - - - - - RssError - - - - - RssGo - - - - - RssValid - - - - - Ruby - - - - - RubyAdd - - - - - RubyDelete - - - - - RubyGear - - - - - RubyGet - - - - - RubyGo - - - - - RubyKey - - - - - RubyLink - - - - - RubyPut - - - - - Script - - - - - ScriptAdd - - - - - ScriptCode - - - - - ScriptCodeOriginal - - - - - ScriptCodeRed - - - - - ScriptDelete - - - - - ScriptEdit - - - - - ScriptError - - - - - ScriptGear - - - - - ScriptGo - - - - - ScriptKey - - - - - ScriptLightning - - - - - ScriptLink - - - - - ScriptPalette - - - - - ScriptSave - - - - - ScriptStart - - - - - ScriptStop - - - - - Seasons - - - - - SectionCollapsed - - - - - SectionExpanded - - - - - Server - - - - - ServerAdd - - - - - ServerChart - - - - - ServerCompressed - - - - - ServerConnect - - - - - ServerDatabase - - - - - ServerDelete - - - - - ServerEdit - - - - - ServerError - - - - - ServerGo - - - - - ServerKey - - - - - ServerLightning - - - - - ServerLink - - - - - ServerStart - - - - - ServerStop - - - - - ServerUncompressed - - - - - ServerWrench - - - - - Shading - - - - - ShapesMany - - - - - ShapesManySelect - - - - - Shape3d - - - - - ShapeAlignBottom - - - - - ShapeAlignCenter - - - - - ShapeAlignLeft - - - - - ShapeAlignMiddle - - - - - ShapeAlignRight - - - - - ShapeAlignTop - - - - - ShapeFlipHorizontal - - - - - ShapeFlipVertical - - - - - ShapeGroup - - - - - ShapeHandles - - - - - ShapeMoveBack - - - - - ShapeMoveBackwards - - - - - ShapeMoveForwards - - - - - ShapeMoveFront - - - - - ShapeRotateAnticlockwise - - - - - ShapeRotateClockwise - - - - - ShapeShadeA - - - - - ShapeShadeB - - - - - ShapeShadeC - - - - - ShapeShadow - - - - - ShapeShadowToggle - - - - - ShapeSquare - - - - - ShapeSquareAdd - - - - - ShapeSquareDelete - - - - - ShapeSquareEdit - - - - - ShapeSquareError - - - - - ShapeSquareGo - - - - - ShapeSquareKey - - - - - ShapeSquareLink - - - - - ShapeSquareSelect - - - - - ShapeUngroup - - - - - Share - - - - - Shield - - - - - ShieldAdd - - - - - ShieldDelete - - - - - ShieldError - - - - - ShieldGo - - - - - ShieldRainbow - - - - - ShieldSilver - - - - - ShieldStart - - - - - ShieldStop - - - - - Sitemap - - - - - SitemapColor - - - - - Smartphone - - - - - SmartphoneAdd - - - - - SmartphoneConnect - - - - - SmartphoneDelete - - - - - SmartphoneDisk - - - - - SmartphoneEdit - - - - - SmartphoneError - - - - - SmartphoneGo - - - - - SmartphoneKey - - - - - SmartphoneWrench - - - - - SortAscending - - - - - SortDescending - - - - - Sound - - - - - SoundAdd - - - - - SoundDelete - - - - - SoundHigh - - - - - SoundIn - - - - - SoundLow - - - - - SoundMute - - - - - SoundNone - - - - - SoundOut - - - - - Spellcheck - - - - - Sport8ball - - - - - SportBasketball - - - - - SportFootball - - - - - SportGolf - - - - - SportGolfPractice - - - - - SportRaquet - - - - - SportShuttlecock - - - - - SportSoccer - - - - - SportTennis - - - - - Star - - - - - StarBronze - - - - - StarBronzeHalfGrey - - - - - StarGold - - - - - StarGoldHalfGrey - - - - - StarGoldHalfSilver - - - - - StarGrey - - - - - StarHalfGrey - - - - - StarSilver - - - - - StatusAway - - - - - StatusBeRightBack - - - - - StatusBusy - - - - - StatusInvisible - - - - - StatusOffline - - - - - StatusOnline - - - - - Stop - - - - - StopBlue - - - - - StopGreen - - - - - StopRed - - - - - Style - - - - - StyleAdd - - - - - StyleDelete - - - - - StyleEdit - - - - - StyleGo - - - - - Sum - - - - - Tab - - - - - Table - - - - - TableAdd - - - - - TableCell - - - - - TableColumn - - - - - TableColumnAdd - - - - - TableColumnDelete - - - - - TableConnect - - - - - TableDelete - - - - - TableEdit - - - - - TableError - - - - - TableGear - - - - - TableGo - - - - - TableKey - - - - - TableLightning - - - - - TableLink - - - - - TableMultiple - - - - - TableRefresh - - - - - TableRelationship - - - - - TableRow - - - - - TableRowDelete - - - - - TableRowInsert - - - - - TableSave - - - - - TableSort - - - - - TabAdd - - - - - TabBlue - - - - - TabDelete - - - - - TabEdit - - - - - TabGo - - - - - TabGreen - - - - - TabRed - - - - - Tag - - - - - TagsGrey - - - - - TagsRed - - - - - TagBlue - - - - - TagBlueAdd - - - - - TagBlueDelete - - - - - TagBlueEdit - - - - - TagGreen - - - - - TagOrange - - - - - TagPink - - - - - TagPurple - - - - - TagRed - - - - - TagYellow - - - - - Telephone - - - - - TelephoneAdd - - - - - TelephoneDelete - - - - - TelephoneEdit - - - - - TelephoneError - - - - - TelephoneGo - - - - - TelephoneKey - - - - - TelephoneLink - - - - - TelephoneRed - - - - - Television - - - - - TelevisionAdd - - - - - TelevisionDelete - - - - - TelevisionIn - - - - - TelevisionOff - - - - - TelevisionOut - - - - - TelevisionStar - - - - - Textfield - - - - - TextfieldAdd - - - - - TextfieldDelete - - - - - TextfieldKey - - - - - TextfieldRename - - - - - TextAb - - - - - TextAlignCenter - - - - - TextAlignJustify - - - - - TextAlignLeft - - - - - TextAlignRight - - - - - TextAllcaps - - - - - TextBold - - - - - TextColumns - - - - - TextComplete - - - - - TextDirection - - - - - TextDoubleUnderline - - - - - TextDropcaps - - - - - TextFit - - - - - TextFlip - - - - - TextFontDefault - - - - - TextHeading1 - - - - - TextHeading2 - - - - - TextHeading3 - - - - - TextHeading4 - - - - - TextHeading5 - - - - - TextHeading6 - - - - - TextHorizontalrule - - - - - TextIndent - - - - - TextIndentRemove - - - - - TextInverse - - - - - TextItalic - - - - - TextKerning - - - - - TextLeftToRight - - - - - TextLetterspacing - - - - - TextLetterOmega - - - - - TextLinespacing - - - - - TextListBullets - - - - - TextListNumbers - - - - - TextLowercase - - - - - TextLowercaseA - - - - - TextMirror - - - - - TextPaddingBottom - - - - - TextPaddingLeft - - - - - TextPaddingRight - - - - - TextPaddingTop - - - - - TextReplace - - - - - TextRightToLeft - - - - - TextRotate0 - - - - - TextRotate180 - - - - - TextRotate270 - - - - - TextRotate90 - - - - - TextRuler - - - - - TextShading - - - - - TextSignature - - - - - TextSmallcaps - - - - - TextSpelling - - - - - TextStrikethrough - - - - - TextSubscript - - - - - TextSuperscript - - - - - TextTab - - - - - TextUnderline - - - - - TextUppercase - - - - - Theme - - - - - ThumbDown - - - - - ThumbUp - - - - - Tick - - - - - Time - - - - - TimelineMarker - - - - - TimeAdd - - - - - TimeDelete - - - - - TimeGo - - - - - TimeGreen - - - - - TimeRed - - - - - Transmit - - - - - TransmitAdd - - - - - TransmitBlue - - - - - TransmitDelete - - - - - TransmitEdit - - - - - TransmitError - - - - - TransmitGo - - - - - TransmitRed - - - - - Tux - - - - - User - - - - - UserAdd - - - - - UserAlert - - - - - UserB - - - - - UserBrown - - - - - UserComment - - - - - UserCross - - - - - UserDelete - - - - - UserEarth - - - - - UserEdit - - - - - UserFemale - - - - - UserGo - - - - - UserGray - - - - - UserGrayCool - - - - - UserGreen - - - - - UserHome - - - - - UserKey - - - - - UserMagnify - - - - - UserMature - - - - - UserOrange - - - - - UserRed - - - - - UserStar - - - - - UserSuit - - - - - UserSuitBlack - - - - - UserTick - - - - - Vcard - - - - - VcardAdd - - - - - VcardDelete - - - - - VcardEdit - - - - - VcardKey - - - - - Vector - - - - - VectorAdd - - - - - VectorDelete - - - - - VectorKey - - - - - Wand - - - - - WeatherCloud - - - - - WeatherClouds - - - - - WeatherCloudy - - - - - WeatherCloudyRain - - - - - WeatherLightning - - - - - WeatherRain - - - - - WeatherSnow - - - - - WeatherSun - - - - - Webcam - - - - - WebcamAdd - - - - - WebcamConnect - - - - - WebcamDelete - - - - - WebcamError - - - - - WebcamStart - - - - - WebcamStop - - - - - World - - - - - WorldAdd - - - - - WorldConnect - - - - - WorldDawn - - - - - WorldDelete - - - - - WorldEdit - - - - - WorldGo - - - - - WorldKey - - - - - WorldLink - - - - - WorldNight - - - - - WorldOrbit - - - - - Wrench - - - - - WrenchOrange - - - - - Xhtml - - - - - XhtmlAdd - - - - - XhtmlDelete - - - - - XhtmlError - - - - - XhtmlGo - - - - - XhtmlValid - - - - - Zoom - - - - - ZoomIn - - - - - ZoomOut - - - - - SystemClose - - - - - SystemNew - - - - - SystemSave - - - - - SystemSaveClose - - - - - SystemSaveNew - - - - - SystemSearch - - - - - 预定义图标名称 - - - - - 获取图标名称 - - - - - - - 获得图标的服务器地址 - - 图标 - 图标的服务器地址 - - - - 获取客户端可用的图标URL地址 - - 图标 - URL地址 - - - - 获取客户端可用的图标URL地址 - - 图标 - 图标地址 - URL地址 - - - - 将图标字符串转换为图标 - - 图标字符串 - 是否忽略大小写 - 图标 - - - - 将图标转换为图标字符串 - - 图标 - 图标字符串 - - - - 样式 - - - - - 蓝色 - - - - - 银灰色 - - - - - 高对比度 - - - - - 海王星(默认值) - - - - - 样式的类型名称 - - - - - 语言 - - - - - 英文 - - - - - 中文(默认值) - - - - - 中文(台湾) - - - - - 葡萄牙文(巴西) - - - - - 土耳其文 - - - - - 俄文 - - - - - 语言的类型名称 - - - - - 操作符(用于表单控件的客户端验证) - - - - - 等于(默认值) - - - - - 大于 - - - - - 大于等于 - - - - - 小于 - - - - - 小于等于 - - - - - 不等于 - - - - - 操作符名称 - - - - - 触发器输入框右侧图标的类型 - - - - - 无(默认值) - - - - - 搜索图标 - - - - - 清空图标 - - - - - 日期图标 - - - - - 系统图标名称 - - - - - 窗体的初始显示位置 - - - - - 页面的中部 - - - - - 页面的黄金分割点处(默认值) - - - - - 工具条的位置 - - - - - 顶部(默认值) - - - - - 底部 - - - - - 页脚 - - - - - 左侧 - - - - - 右侧 - - - - - 底部按钮 - - - - - 工具条的位置名称 - - - - - 按钮类型 - - - - - 普通按钮(默认值) - - - - - 提交按钮(会为生成的input标签添加type="submit") - - - - - 重置按钮(会为生成的input标签添加type="reset") - - - - - 按钮类型名称 - - - - - 窗体以及对话框的显示位置 - - - - - 当前页面(默认值) - - - - - 父页面 - - - - - 最外层页面 - - - - - Alert,Confirm,Window显示的位置 - - - - - Get target name used inside JavaScript code. - - - - - - - 正则表达式常用类型(用于表单控件的客户端验证) - - - - - 无(默认值) - - - - - 数字 - - - - - 字母 - - - - - 字母数字 - - - - - 字母下划线 - - - - - 字母数字下划线 - - - - - 小写字母 - - - - - 大写字母 - - - - - 电子邮箱 - - - - - 网址 - - - - - 邮政编码(中华人民共和国) - - - - - IP地址 - - - - - 身份证(中华人民共和国) - - - - - 正则表达式常用类型 内容 - - - - - 关闭窗体的动作 - - - - - 关闭窗体(默认值) - - - - - 关闭窗体后刷新父页面 - - - - - 关闭窗体后会发父页面(需要注册OnClose事件处理函数) - - - - - 关闭窗体的动作 - - - - - Region控件所在RegionPanel中的位置 - - - - - 上方 - - - - - 底部 - - - - - 左侧 - - - - - 右侧 - - - - - 中部(默认值) - - - - - 布局类型名称 - - - - - Tab标签的显示位置 - - - - - 顶部(默认值) - - - - - 底部 - - - - - 左侧 - - - - - 右侧 - - - - - Tab显示的位置名称 - - - - - 按钮上图标的摆放位置 - - - - - 靠上 - - - - - 靠右 - - - - - 靠下 - - - - - 靠左(默认值) - - - - - 图标摆放位置的名称 - - - - - 按钮的大小 - - - - - 小尺寸(默认值) - - - - - 中等尺寸 - - - - - 大尺寸 - - - - - 按钮的大小名称 - - - - - 在HBox布局或者VBox布局中,用来控制容器子控件的位置 - - - - - 所有子控件位于父容器的开始位置(废弃,请使用Start代替) - - - - - 所有子控件位于父容器的中间位置(废弃,请使用Center代替) - - - - - 所有子控件位于父容器的开始位置(默认值) - - - - - 所有子控件位于父容器的中间位置 - - - - - 所有子控件被拉伸至父容器的大小 - - - - - 所有子控件被拉伸至最大子控件的大小 - - - - - HBox或者VBox的位置的名称 - - - - - 在HBox布局或者VBox布局中,用来控制容器子控件的位置 - - - - - 子控件靠父容器的开始位置排列(废弃,请使用Start代替) - - - - - 子控件靠父容器的中间位置排列 - - - - - 子控件靠父容器的结束位置排列(废弃,请使用End代替) - - - - - 子控件靠父容器的开始位置排列(默认值) - - - - - 子控件靠父容器的结束位置排列 - - - - - HBox或者VBox的位置的名称 - - - - - 页脚工具栏的排列位置 - - - - - 靠右(默认值) - - - - - 靠左 - - - - - 居中 - - - - - 页脚工具栏的排列位置名称 - - - - - Ajax提示信息的类型 - - - - - 在页面顶部显示黄色提示框(默认值) - - - - - Extjs的页面遮罩提示框 - - - - - Ajax提示信息的类型名称 - - - - - 文本排列位置 - - - - - 靠左排列(默认值) - - - - - 居中排列 - - - - - 靠右排列 - - - - - 文本排列位置名称 - - - - - 表单中标签的排列位置 - - - - - 靠左(默认值) - - - - - 靠右 - - - - - 靠上 - - - - - 表单中标签的排列位置名称 - - - - - 垂直排列位置 - - - - - 居中排列(默认值) - - - - - 靠上排列 - - - - - 靠下排列 - - - - - 垂直排列位置名称 - - - - - 创建Javascript数组参数的帮助类 - - - - - 构造函数 - - - - - 构造函数 - - 初始属性值 - - - - 构造函数 - - 初始属性值 - 是否保持原样 - - - - 删除属性 - - 属性值 - - - - 添加属性 - - 属性值 - - - - 添加属性 - - 属性值 - 是否保持原样 - - - - 返回对象的JSON字符串形式 - - 对象的JSON形式 - - - - 已经添加属性的个数 - - - - - 删除属性 - - - - - - 添加属性 - - - - - - - 添加属性 - - - - 是否保持原样 - - - - 使用这个方法需要特别注意,因为这里返回的不是设置的属性了 - 比如:"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"" - - - - - - - 返回对象的Json字符串表示 - - - - - - 存在 Page.Items 上下文中,用于生成JavascriptID - - - - - 添加JS文件到页面的底部 - - - - - - - - 添加样式表到页头 - - - - - - - - 向页面头部添加内容 - - - - - - - - 页头是否包含控件 - - - - - - - - 取得下一个控件的位置 - - - - - - 资源处理程序 - - - - - 处理资源的请求 - - Http请求上下文 - - - - 只要请求的 URL 相同,则请求可以重用 - - - - - AJAX输出过滤器 - - - - - 设置引起本次回发的按钮(或其他控件)可用 - - - - - - 更新 EventValidation 节点的值 - - - - - - - 更新 ViewState 节点的值 - - - - - - - - 更新ASP.NET控件 - - - - - - - 取得 HTML 中一个节点的值 - - - - - - - - 取得 HTML 中一个节点的OuterHtml - - - - - - - - 获取当前输出流的HTML内容 - - - - - - 请求处理模块(主要用来处理Response.Redirect的情况) - - - - - 清除资源 - - - - - 初始化模块 - - Http应用程序 - - - - 存在 Page.Items 上下文中,用于生成JavascriptID - - - - - 模拟树帮助类(用于表格和树控件) - - - - - 模拟树结构的节点类 - - - - - 模拟树的节点内容 - - - - - 节点内容 - - - - - 节点内容 - - - - - 节点所在层次(从0开始,0表示根节点) - - - - - 父节点 - - - - - 是否有弟节点 - - - - - FineUI控件的状态保持机制 - - - - - 构造函数 - - 控件 - - - - 增加在当前请求中改变的属性列表(控件可以自己手工设置,以便保存在 X_STATE 中) - - - - - - 备份初始化属性值 - 在输出 AJAX 回发之前,会拿这个初始属性值和当时属性值做对比,以确定这些属性是否被用户改变 - - - - - 备份 PostData 的属性值(也就是在客户端改变的属性值) - - - - - - 计算被修改的属性列表(更新 ModifiedProperties 和 ClientPropertiesModifiedInServer 两个值) - 这个需要在 OnPreRender 中调用,在页面第一次加载,正常的回发以及AJAX回发时都要调用 - - - - - 页面第一次加载至今改变过的属性列表总和(其中可能经历多次正常的页面回发和局部 AJAX 回发) - - - - - - 获取设置 XState 属性值 - - - - - - - 当前请求中改变的属性列表,既包含服务器端改变的属性,也包含客户端改变的属性 - - - - - 客户端可以改变的属性在服务器端被改变了 - - - - - 控件相关帮助函数 - - - - - 查找父控件 - - 当前控件 - 查找控件的类型 - 找到的第一个父控件 - - - - 根据控件ID查找控件 - - 要查找的控件ID - 找到的控件 - - - - 根据控件类型查找控件 - - 要查找的控件类型 - 找到的控件 - - - - 在父控件的所有子控件中查找控件 - - 父控件 - 要查找的控件ID - 找到的控件 - - - - 在父控件的所有子控件中查找控件 - - 父控件 - 要查找的控件类型 - 找到的控件 - - - - 字符串帮助类 - - - - - GZIP压缩的ViewState隐藏字段的ID - - - - - GZIP压缩的ViewState隐藏字段的ID - - - - - 获取枚举实例 - - 枚举类型 - 枚举实例名称 - 枚举实例 - - - - 获取枚举实例名称 - - 枚举实例 - 枚举实例名称 - - - - 去除字符串中的Html - - 字符串 - 字符串 - - - - 将字符串"1,2,3"转化为整形列表[1,2,3] - - 字符串 - 整形列表 - - - - 将字符串"1,2,3"转化为整形列表[1,2,3] - - 字符串 - 返回之前是否对数组进行排序(由小到大) - 整形列表 - - - - 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] - - 字符串 - 字符串列表 - - - - 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] - - - 返回之前是否对数组进行排序(由小到大) - 字符串列表 - - - - 将字符串数组["ssdd","2","ok"]转化为字符串"ssdd,2,ok" - - 字符串数组 - 字符串 - - - - 将整型数组[2,3,4]转化为字符串"2,3,4" - - 整形数组 - 字符串 - - - - 比较两个整形数组是否相等 - - 整形数组1 - 整形数组2 - 是否相等 - - - - 比较两个字符串数组是否相等 - - 字符串数组1 - 字符串数组2 - 是否相等 - - - - 将 10% 转换为 0.1 的字符串的形式 - - 百分比字符串 - 小数 - - - - Base64解码 - - 需要解码的字节数组 - 解码后的字符串 - - - - Base64解码 - - 需要解码的字符串 - 解码后的字符串 - - - - Base64编码 - - 需要编码的字节数组 - 编码后的字符串 - - - - Base64编码 - - 需要编码的字符串 - 编码后的字符串 - - - - Gzip编码字符串 - - 源字符串 - Gzip后的字符串 - - - - 解码Gzip字符串 - - Gzip后的字符串 - 源字符串 - - - - 加载Gzipped的ViewState - - - - - - - 生成Gzipped的ViewState - - - - - - - 对象帮助类 - - - - - 获取对象的属性值 - - 可能是DataRowView或一个对象 - 属性名 - 属性值 - - - - 获取对象的属性值 - - 对象 - 属性名("Color"、"BodyStyle"或者"Info.UserName") - 属性值 - - - - 创建HTML节点的帮助类 - - - - - 构造函数 - - 节点名称 - - - - 设置属性 - - 属性名 - 属性值 - - - - 取得属性的值 - - 属性名 - 属性值 - - - - 转化为客户端可用的HTML标签字符串 - - 客户端可用的HTML标签字符串 - - - - 节点内部值 - - - - - 样式帮助类 - - - - - 提取样式字符串 - - CSS字符串 - 样式名称 - 样式字符串 - - - - 获取背景图片样式 - - 选择符 - 图片地址 - CSS样式 - - - - 获取背景图片样式(no-repeat) - - 选择符 - 图片地址 - CSS样式 - - - - JSON帮助类 - - - - - 将JArray转换为整型数组 - - JArray对象 - 整型数组 - - - - 将JArray转换为字符串数组 - - JArray对象 - 字符串数组 - - - - 将JArray转换为对象数组 - - JArray对象 - 对象数组 - - - - A utility class to compute CRC32. - - - - - Compute a checksum for a given string. - - The string to compute the checksum for. - The computed checksum. - - - - Compute a checksum for a given array of bytes. - - The array of bytes to compute the checksum for. - The computed checksum. - - - - Represents an HTML attribute. - - - - - Creates a duplicate of this attribute. - - The cloned attribute. - - - - Compares the current instance with another attribute. Comparison is based on attributes' name. - - An attribute to compare with this instance. - A 32-bit signed integer that indicates the relative order of the names comparison. - - - - Gets the qualified name of the attribute. - - - - - Gets or sets the value of the attribute. - - - - - Gets the line number of this attribute in the document. - - - - - Gets the column number of this attribute in the document. - - - - - Gets the stream position of this attribute in the document, relative to the start of the document. - - - - - Gets the HTML node to which this attribute belongs. - - - - - Gets the HTML document to which this attribute belongs. - - - - - Represents a combined list and collection of HTML nodes. - - - - - Inserts the specified attribute as the last attribute in the collection. - - The attribute to insert. May not be null. - The appended attribute. - - - - Creates and inserts a new attribute as the last attribute in the collection. - - The name of the attribute to insert. - The appended attribute. - - - - Creates and inserts a new attribute as the last attribute in the collection. - - The name of the attribute to insert. - The value of the attribute to insert. - The appended attribute. - - - - Inserts the specified attribute as the first node in the collection. - - The attribute to insert. May not be null. - The prepended attribute. - - - - Removes the attribute at the specified index. - - The index of the attribute to remove. - - - - Removes a given attribute from the list. - - The attribute to remove. May not be null. - - - - Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. - - The attribute's name. May not be null. - - - - Remove all attributes in the list. - - - - - Returns an enumerator that can iterate through the list. - - An IEnumerator for the entire list. - - - - Gets the number of elements actually contained in the list. - - - - - Gets a given attribute from the list using its name. - - - - - Gets the attribute at the specified index. - - - - - Represents an enumerator that can iterate through the list. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - - - Advances the enumerator to the next element of the collection. - - true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection. - - - - Gets the current element in the collection. - - - - - Gets the current element in the collection. - - - - - Represents an HTML comment. - - - - - Represents an HTML node. - - - - - Gets the name of a comment node. It is actually defined as '#comment'. - - - - - Gets the name of the document node. It is actually defined as '#document'. - - - - - Gets the name of a text node. It is actually defined as '#text'. - - - - - Gets a collection of flags that define specific behaviors for specific element nodes. - The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. - - - - - Determines if an element node is closed. - - The name of the element node to check. May not be null. - true if the name is the name of a closed element node, false otherwise. - - - - Determines if an element node can be kept overlapped. - - The name of the element node to check. May not be null. - true if the name is the name of an element node that can be kept overlapped, false otherwise. - - - - Determines if a text corresponds to the closing tag of an node that can be kept overlapped. - - The text to check. May not be null. - true or false. - - - - Determines if an element node is a CDATA element node. - - The name of the element node to check. May not be null. - true if the name is the name of a CDATA element node, false otherwise. - - - - Determines if an element node is defined as empty. - - The name of the element node to check. May not be null. - true if the name is the name of an empty element node, false otherwise. - - - - Creates an HTML node from a string representing literal HTML. - - The HTML text. - The newly created node instance. - - - - Creates a duplicate of the node and the subtree under it. - - The node to duplicate. May not be null. - - - - Creates a duplicate of the node. - - The node to duplicate. May not be null. - true to recursively clone the subtree under the specified node, false to clone only the node itself. - - - - Creates a new XPathNavigator object for navigating this HTML node. - - An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document. - - - - Selects the first XmlNode that matches the XPath expression. - - The XPath expression. May not be null. - The first HtmlNode that matches the XPath query or a null reference if no matching node was found. - - - - Selects a list of nodes matching the XPath expression. - - The XPath expression. - An HtmlNodeCollection containing a collection of nodes matching the XPath query, or null if no node matched the XPath expression. - - - - Creates a duplicate of the node - - - - - - Creates a duplicate of the node and changes its name at the same time. - - The new name of the cloned node. May not be null. - The cloned node. - - - - Creates a duplicate of the node and changes its name at the same time. - - The new name of the cloned node. May not be null. - true to recursively clone the subtree under the specified node; false to clone only the node itself. - The cloned node. - - - - Creates a duplicate of the node. - - true to recursively clone the subtree under the specified node; false to clone only the node itself. - The cloned node. - - - - Removes all the children and/or attributes of the current node. - - - - - Removes all the children of the current node. - - - - - Removes the specified child node. - - The node being removed. May not be null. - The node removed. - - - - Removes the specified child node. - - The node being removed. May not be null. - true to keep grand children of the node, false otherwise. - The node removed. - - - - Replaces the child node oldChild with newChild node. - - The new node to put in the child list. - The node being replaced in the list. - The node replaced. - - - - Inserts the specified node immediately before the specified reference node. - - The node to insert. May not be null. - The node that is the reference node. The newChild is placed before this node. - The node being inserted. - - - - Inserts the specified node immediately after the specified reference node. - - The node to insert. May not be null. - The node that is the reference node. The newNode is placed after the refNode. - The node being inserted. - - - - Adds the specified node to the beginning of the list of children of this node. - - The node to add. May not be null. - The node added. - - - - Adds the specified node list to the beginning of the list of children of this node. - - The node list to add. May not be null. - - - - Adds the specified node to the end of the list of children of this node. - - The node to add. May not be null. - The node added. - - - - Adds the specified node to the end of the list of children of this node. - - The node list to add. May not be null. - - - - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - - The name of the attribute to get. May not be null. - The default value to return if not found. - The value of the attribute if found, the default value if not found. - - - - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - - The name of the attribute to get. May not be null. - The default value to return if not found. - The value of the attribute if found, the default value if not found. - - - - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - - The name of the attribute to get. May not be null. - The default value to return if not found. - The value of the attribute if found, the default value if not found. - - - - Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. - - The name of the attribute to set. May not be null. - The value for the attribute. - The corresponding attribute instance. - - - - Saves the current node to the specified TextWriter. - - The TextWriter to which you want to save. - - - - Saves the current node to the specified XmlWriter. - - The XmlWriter to which you want to save. - - - - Saves all the children of the node to the specified TextWriter. - - The TextWriter to which you want to save. - - - - Saves the current node to a string. - - The saved string. - - - - Saves all the children of the node to a string. - - The saved string. - - - - Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. - - - - - Gets the line number of this node in the document. - - - - - Gets the column number of this node in the document. - - - - - Gets the stream position of this node in the document, relative to the start of the document. - - - - - Gets a value indicating if this node has been closed or not. - - - - - Gets or sets this node's name. - - - - - Gets or Sets the text between the start and end tags of the object. - - - - - Gets or Sets the HTML between the start and end tags of the object. - - - - - Gets or Sets the object and its content in HTML. - - - - - Gets the HTML node immediately following this element. - - - - - Gets the node immediately preceding this node. - - - - - Gets the first child of the node. - - - - - Gets the last child of the node. - - - - - Gets the type of this node. - - - - - Gets the parent of this node (for nodes that can have parents). - - - - - Gets the HtmlDocument to which this node belongs. - - - - - Gets all the children of the node. - - - - - Gets a value indicating whether the current node has any attributes. - - - - - Gets a value indicating whether the current node has any attributes on the closing tag. - - - - - Gets a value indicating whether this node has any child nodes. - - - - - Gets the collection of HTML attributes for this node. May not be null. - - - - - Gets the collection of HTML attributes for the closing tag. May not be null. - - - - - Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - - - - - Gets or Sets the object and its content in HTML. - - - - - Gets or Sets the comment text of the node. - - - - - Represents a complete HTML document. - - - - - Defines if a checksum must be computed for the document while parsing. Default is false. - - - - - Defines if declared encoding must be read from the document. - Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - Default is true. - - - - - Defines if non closed nodes will be checked at the end of parsing. Default is true. - - - - - Defines if the 'id' attribute must be specifically used. Default is true. - - - - - Defines if empty nodes must be written as closed during output. Default is false. - - - - - Defines if output must conform to XML, instead of HTML. - - - - - Defines if name must be output in uppercase. Default is false. - - - - - Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. - - - - - Adds Debugging attributes to node. Default is false. - - - - - Defines if source text must be extracted while parsing errors. - If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. - Default is false. - - - - - Defines if closing for non closed nodes must be done at the end or directly in the document. - Setting this to true can actually change how browsers render the page. Default is false. - - - - - Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. - - - - - Defines the maximum length of source text or parse errors. Default is 100. - - - - - Defines the default stream encoding to use. Default is System.Text.Encoding.Default. - - - - - Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. - - - - - Creates an instance of an HTML document. - - - - - Applies HTML encoding to a specified string. - - The input string to encode. May not be null. - The encoded string. - - - - Detects the encoding of an HTML stream. - - The input stream. May not be null. - The detected encoding. - - - - Detects the encoding of an HTML file. - - Path for the file containing the HTML document to detect. May not be null. - The detected encoding. - - - - Detects the encoding of an HTML text. - - The input html text. May not be null. - The detected encoding. - - - - Detects the encoding of an HTML text provided on a TextReader. - - The TextReader used to feed the HTML. May not be null. - The detected encoding. - - - - Loads an HTML document from a stream. - - The input stream. - - - - Loads an HTML document from a stream. - - The input stream. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Loads an HTML document from a stream. - - The input stream. - The character encoding to use. - - - - Loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - The minimum buffer size. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - The character encoding to use. May not be null. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - The character encoding to use. May not be null. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads an HTML document from a file. - - The complete file path to be read. May not be null. - The character encoding to use. May not be null. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Loads the HTML document from the specified string. - - String containing the HTML document to load. May not be null. - - - - Detects the encoding of an HTML document from a file first, and then loads the file. - - The complete file path to be read. - - - - Detects the encoding of an HTML document from a file first, and then loads the file. - - The complete file path to be read. May not be null. - true to detect encoding, false otherwise. - - - - Loads the HTML document from the specified TextReader. - - The TextReader used to feed the HTML data into the document. May not be null. - - - - Saves the HTML document to the specified stream. - - The stream to which you want to save. - - - - Saves the HTML document to the specified stream. - - The stream to which you want to save. May not be null. - The character encoding to use. May not be null. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. May not be null. - The character encoding to use. May not be null. - - - - Saves the HTML document to the specified StreamWriter. - - The StreamWriter to which you want to save. - - - - Saves the HTML document to the specified TextWriter. - - The TextWriter to which you want to save. May not be null. - - - - Saves the HTML document to the specified XmlWriter. - - The XmlWriter to which you want to save. - - - - Creates a new XPathNavigator object for navigating this HTML document. - - An XPathNavigator object. The XPathNavigator is positioned on the root of the document. - - - - Gets a valid XML name. - - Any text. - A string that is a valid XML name. - - - - Gets the HTML node with the specified 'id' attribute value. - - The attribute id to match. May not be null. - The HTML node with the matching id or null if not found. - - - - Creates an HTML element node with the specified name. - - The qualified name of the element. May not be null. - The new HTML node. - - - - Creates an HTML comment node. - - The new HTML comment node. - - - - Creates an HTML comment node with the specified comment text. - - The comment text. May not be null. - The new HTML comment node. - - - - Creates an HTML text node. - - The new HTML text node. - - - - Creates an HTML text node with the specified text. - - The text of the node. May not be null. - The new HTML text node. - - - - Creates an HTML attribute with the specified name. - - The name of the attribute. May not be null. - The new HTML attribute. - - - - Creates an HTML attribute with the specified name. - - The name of the attribute. May not be null. - The value of the attribute. - The new HTML attribute. - - - - Determines if the specified character is considered as a whitespace character. - - The character to check. - true if if the specified character is considered as a whitespace character. - - - - Gets the remaining text. - Will always be null if OptionStopperNodeName is null. - - - - - Gets the offset of Remainder in the original Html text. - If OptionStopperNodeName is null, this will return the length of the original Html text. - - - - - Gets a list of parse errors found in the document. - - - - - Gets the document's stream encoding. - - - - - Gets the document's declared encoding. - Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - - - - - Gets the document's output encoding. - - - - - Gets the root node of the document. - - - - - Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. - - - - - Flags that describe the behavior of an Element node. - - - - - The node is a CDATA node. - - - - - The node is empty. META or IMG are example of such nodes. - - - - - The node will automatically be closed during parsing. - - - - - The node can overlap. - - - - - A utility class to replace special characters by entities and vice-versa. - Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html - - - - - Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. - - The node to entitize. - An entitized cloned node. - - - - Replace characters above 127 by entities. - - The source text. - The result text. - - - - Replace characters above 127 by entities. - - The source text. - If set to false, the function will not use known entities name. Default is true. - The result text. - - - - Replace characters above 127 by entities. - - The source text. - If set to false, the function will not use known entities name. Default is true. - If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized. - The result text - - - - Replace known entities by characters. - - The source text. - The result text. - - - - A collection of entities indexed by name. - - - - - A collection of entities indexed by value. - - - - - Represents a combined list and collection of HTML nodes. - - - - - Returns an enumerator that can iterate through the list. - - An IEnumerator for the entire list. - - - - Gets the number of elements actually contained in the list. - - - - - Gets the node at the specified index. - - - - - Gets a given node from the list. - - - - - Represents an enumerator that can iterate through the list. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - - - Advances the enumerator to the next element of the collection. - - true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection. - - - - Gets the current element in the collection. - - - - - Gets the current element in the collection. - - - - - Represents an HTML navigator on an HTML document seen as a data store. - - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - The character encoding to use. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the stream. - The minimum buffer size. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. - - The TextReader used to feed the HTML data into the document. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - The character encoding to use. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Moves to the next sibling of the current node. - - true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged. - - - - Moves to the previous sibling of the current node. - - true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node. - - - - Moves to the first sibling of the current node. - - true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node. - - - - Moves to the first child of the current node. - - true if there is a first child node, otherwise false. - - - - Moves to the parent of the current node. - - true if there is a parent node, otherwise false. - - - - Moves to the root node to which the current node belongs. - - - - - Moves to the same position as the specified HtmlNavigator. - - The HtmlNavigator positioned on the node that you want to move to. - true if successful, otherwise false. If false, the position of the navigator is unchanged. - - - - Moves to the node that has an attribute of type ID whose value matches the specified string. - - A string representing the ID value of the node to which you want to move. This argument does not need to be atomized. - true if the move was successful, otherwise false. If false, the position of the navigator is unchanged. - - - - Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. - - The HtmlNavigator that you want to compare against. - true if the two navigators have the same position, otherwise, false. - - - - Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. - - A new HtmlNavigator object positioned at the same node as the original HtmlNavigator. - - - - Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. - - The local name of the HTML attribute. - The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation. - The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node. - - - - Moves to the HTML attribute with matching LocalName and NamespaceURI. - - The local name of the HTML attribute. - The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation. - true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change. - - - - Moves to the first HTML attribute. - - true if the navigator is successful moving to the first HTML attribute, otherwise, false. - - - - Moves to the next HTML attribute. - - - - - - Returns the value of the namespace node corresponding to the specified local name. - Always returns string.Empty for the HtmlNavigator implementation. - - The local name of the namespace node. - Always returns string.Empty for the HtmlNavigator implementation. - - - - Moves the XPathNavigator to the namespace node with the specified local name. - Always returns false for the HtmlNavigator implementation. - - The local name of the namespace node. - Always returns false for the HtmlNavigator implementation. - - - - Moves the XPathNavigator to the first namespace node of the current element. - Always returns false for the HtmlNavigator implementation. - - An XPathNamespaceScope value describing the namespace scope. - Always returns false for the HtmlNavigator implementation. - - - - Moves the XPathNavigator to the next namespace node. - Always returns falsefor the HtmlNavigator implementation. - - An XPathNamespaceScope value describing the namespace scope. - Always returns false for the HtmlNavigator implementation. - - - - Gets the name of the current HTML node without the namespace prefix. - - - - - Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Gets the qualified name of the current node. - - - - - Gets the prefix associated with the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Gets the type of the current node. - - - - - Gets the text value of the current node. - - - - - Gets the base URI for the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Gets the xml:lang scope for the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - - - - - Gets a value indicating whether the current node is an empty element. - - - - - Gets the XmlNameTable associated with this implementation. - - - - - Gets a value indicating whether the current node has child nodes. - - - - - Gets a value indicating whether the current node has child nodes. - - - - - Gets the current HTML node. - - - - - Gets the current HTML document. - - - - - Represents the type of a node. - - - - - The root of a document. - - - - - An HTML element. - - - - - An HTML comment. - - - - - A text node is always the child of an element or a document node. - - - - - Represents a parsing error found during document parsing. - - - - - Gets the type of error. - - - - - Gets the line number of this error in the document. - - - - - Gets the column number of this error in the document. - - - - - Gets the absolute stream position of this error in the document, relative to the start of the document. - - - - - Gets the the full text of the line containing the error. - - - - - Gets a description for the error. - - - - - Represents the type of parsing error. - - - - - A tag was not closed. - - - - - A tag was not opened. - - - - - There is a charset mismatch between stream and declared (META) encoding. - - - - - An end tag was not required. - - - - - An end tag is invalid at this position. - - - - - Represents an HTML text node. - - - - - Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - - - - - Gets or Sets the object and its content in HTML. - - - - - Gets or Sets the text of the node. - - - - - A utility class to get HTML document from HTTP. - - - - - Occurs before an HTTP request is executed. - - - - - Occurs after an HTTP request has been executed. - - - - - Occurs before an HTML document is handled. - - - - - Creates an instance of an HtmlWeb class. - - - - - Gets an HTML document from an Internet resource and saves it to the specified file. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The location of the file where you want to save the document. - - - - Gets an HTML document from an Internet resource and saves it to the specified file. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The location of the file where you want to save the document. - The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. - - - - Gets an HTML document from an Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - A new HTML document. - - - - Loads an HTML document from an Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. - A new HTML document. - - - - Gets the cache file path for a specified url. - - The url fo which to retrieve the cache path. May not be null. - The cache file path. - - - - Gets the path extension for a given MIME content type. - - The input MIME content type. - The default path extension to return if any error occurs. - The MIME content type's path extension. - - - - Gets the MIME content type for a given path extension. - - The input path extension. - The default content type to return if any error occurs. - The path extention's MIME content type. - - - - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The XmlTextWriter to which you want to save. - - - - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The URL that specifies the XSLT stylesheet to load. - An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. - The XmlTextWriter to which you want to save. - - - - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null. - The URL that specifies the XSLT stylesheet to load. - An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. - The XmlTextWriter to which you want to save. - A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes. - - - - Creates an instance of the given type from the specified Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The requested type. - An newly created instance. - - - - Creates an instance of the given type from the specified Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The URL that specifies the XSLT stylesheet to load. - An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. - The requested type. - An newly created instance. - - - - Creates an instance of the given type from the specified Internet resource. - - The requested URL, such as "http://Myserver/Mypath/Myfile.asp". - The URL that specifies the XSLT stylesheet to load. - An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. - The requested type. - A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes. - An newly created instance. - - - - Gets a value indicating if the last document was retrieved from the cache. - - - - - Gets the URI of the Internet resource that actually responded to the request. - - - - - Gets or Sets a value indicating whether to get document only from the cache. - If this is set to true and document is not found in the cache, nothing will be loaded. - - - - - Gets or Sets a value indicating if cookies will be stored. - - - - - Gets the last request duration in milliseconds. - - - - - Gets or Sets a value indicating if document encoding must be automatically detected. - - - - - Gets the last request status. - - - - - Gets or Sets the size of the buffer used for memory operations. - - - - - Gets or Sets the cache path. If null, no caching mechanism will be used. - - - - - Gets or Sets a value indicating whether the caching mechanisms should be used or not. - - - - - Represents the method that will handle the PreRequest event. - - - - - Represents the method that will handle the PostResponse event. - - - - - Represents the method that will handle the PreHandleDocument event. - - - - - Represents an exception thrown by the HtmlWeb utility class. - - - - - Creates an instance of the HtmlWebException. - - The exception's message. - - - - Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. - - - - - Gets or sets the token representing code start. - - - - - Gets or sets the token representing code end. - - - - - Gets or sets the token representing code directive. - - - - - Gets or sets the token representing response write directive. - - - - - Creates a mixed code document instance. - - - - - Loads a mixed code document from a stream. - - The input stream. - - - - Loads a mixed code document from a stream. - - The input stream. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a stream. - - The input stream. - The character encoding to use. - - - - Loads a mixed code document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a stream. - - The input stream. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - The character encoding to use. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - - - - Loads a mixed code document from a file. - - The complete file path to be read. - The character encoding to use. - Indicates whether to look for byte order marks at the beginning of the file. - The minimum buffer size. - - - - Loads a mixed document from a text - - The text to load. - - - - Loads the mixed code document from the specified TextReader. - - The TextReader used to feed the HTML data into the document. - - - - Saves the mixed document to the specified stream. - - The stream to which you want to save. - - - - Saves the mixed document to the specified stream. - - The stream to which you want to save. - The character encoding to use. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. - - - - Saves the mixed document to the specified file. - - The location of the file where you want to save the document. - The character encoding to use. - - - - Saves the mixed document to the specified StreamWriter. - - The StreamWriter to which you want to save. - - - - Saves the mixed document to the specified TextWriter. - - The TextWriter to which you want to save. - - - - Create a text fragment instances. - - The newly created text fragment instance. - - - - Create a code fragment instances. - - The newly created code fragment instance. - - - - Gets the encoding of the stream used to read the document. - - - - - Gets the list of code fragments in the document. - - - - - Gets the list of text fragments in the document. - - - - - Gets the list of all fragments in the document. - - - - - Gets the code represented by the mixed code document seen as a template. - - - - - Represents a fragment of code in a mixed code document. - - - - - Represents a base class for fragments in a mixed code document. - - - - - Gets the type of fragment. - - - - - Gets the fragment position in the document's stream. - - - - - Gets the line number of the fragment. - - - - - Gets the line position (column) of the fragment. - - - - - Gets the fragement text. - - - - - Gets the fragment code text. - - - - - Represents a list of mixed code fragments. - - - - - Appends a fragment to the list of fragments. - - The fragment to append. May not be null. - - - - Prepends a fragment to the list of fragments. - - The fragment to append. May not be null. - - - - Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. - - The fragment to remove. May not be null. - - - - Remove a fragment from the list of fragments, using its index in the list. - - The index of the fragment to remove. - - - - Remove all fragments from the list. - - - - - Gets an enumerator that can iterate through the fragment list. - - - - - Gets an enumerator that can iterate through the fragment list. - - - - - Gets the number of fragments contained in the list. - - - - - Gets a fragment from the list using its index. - - - - - Represents a fragment enumerator. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - - - Advances the enumerator to the next element of the collection. - - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - - - - Gets the current element in the collection. - - - - - Gets the current element in the collection. - - - - - Represents the type of fragement in a mixed code document. - - - - - The fragment contains code. - - - - - The fragment contains text. - - - - - Represents a fragment of text in a mixed code document. - - - - - Gets the fragment text. - - - - - JSBeautifyOptions - - - - - indent_size - - - - - indent_char - - - - - indent_level - - - - - preserve_newlines - - - - - JSBeautify - - - - - GetResult - - - - - - JSBeautify - - - - - - - 工具条控件集合 - - - - - 构造函数 - - 父控件实例 - - - - 菜单项复选框控件(单选框) - - - - - 菜单项控件基类(抽象类) - - - - - 菜单项控件基类(抽象类) - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 添加子控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 点击时隐藏菜单,可以配合使用CssStyle=cursor:default; - - - - - 图标地址 - - - - - 预定义图标 - - - - - 文本 - - - - - 上下文菜单 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 触发复选框状态改变事件 - - 事件参数 - - - - 分组名(如果指定分组名,则此控件被渲染为单选框) - - - - - [AJAX属性]是否选中 - - - - - 是否自动回发 - - - - - 复选框状态改变事件(需要启用AutoPostBack) - - - - - 定时器控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 获取 Hidden 属性改变的 JavaScript 脚本 - - 客户端脚本 - - - - 处理回发事件 - - 事件参数 - - - - 触发定时事件 - - 事件参数 - - - - 定时间隔(单位:秒) - - - - - 定时事件 - - - - - 支持提示的表单字段基类(抽象类) - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 添加提示信息 - - HtmlNodeBuilder实例 - - - - [AJAX属性]提示文本 - - - - - [AJAX属性]提示文本的标题 - - - - - [AJAX属性]是否自动隐藏提示信息 - - - - - 用户控件的容器 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 取得第一个子控件 - - - - - - - 单项按钮项 - - - - - 构造函数 - - - - - 构造函数 - - 文本 - 值 - - - - 是否选中 - - - - - 显示的文本 - - - - - 值 - - - - - 单选项集合 - - - - - 通过文本查找单选项 - - 文本 - 单选项 - - - - 通过文本查找单选项 - - 文本 - 是否去除HTML标签 - 单选项 - - - - 通过值查找单选项 - - 值 - 单选项 - - - - 添加单选项 - - 文本 - 值 - 新元素的插入位置 - - - - 确认对话框帮助类(静态类) - - - - - 确认对话框默认图标 - - - - - 显示消息框 - - - - - - 显示消息框 - - - - - - - 显示消息框 - - - - - - - 显示消息框 - - - - - - - - 获取显示确认对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 对话框图标 - 客户端脚本 - - - - 获取显示确认对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 对话框图标 - 点击确定按钮执行的客户端脚本 - 点击取消按钮执行的客户端脚本 - 客户端脚本 - - - - 获取显示确认对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 对话框图标 - 点击确定按钮执行的客户端脚本 - 点击取消按钮执行的客户端脚本 - 弹出对话框的目标页面 - 客户端脚本 - - - - 当前活动窗体帮助类(静态类) - - - - - 获取将values值写回控件的客户端脚本 - - 需要写回的字符串列表 - 客户端脚本 - - - - 获取关闭当前激活窗体的客户端脚本 - - 客户端脚本 - - - - 获取关闭当前激活窗体并刷新父页面的客户端脚本 - - 客户端脚本 - - - - 获取关闭当前激活窗体并回发父页面的客户端脚本 - - 客户端脚本 - - - - 获取关闭当前激活窗体并回发父页面的客户端脚本 - - 回发参数 - 客户端脚本 - - - - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体的客户端脚本 - - 客户端脚本 - - - - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再刷新父页面的客户端脚本 - - 客户端脚本 - - - - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 - - 客户端脚本 - - - - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 - - 回发参数 - 客户端脚本 - - - - 菜单项按钮控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发事件 - - 事件参数 - - - - 触发按钮点击事件 - - 事件参数 - - - - 是否可以回发 - - - - - 点击按钮时需要执行的客户端脚本 - - - - - 提交之前需要验证的表单名称列表 - - - - - 验证失败时提示对话框弹出位置 - - - - - 验证失败时是否出现提示对话框 - - - - - 确认对话框标题 - - - - - 确认对话框内容 - - - - - 确认对话框提示图标 - - - - - 确认对话框弹出位置 - - - - - 按钮点击事件 - - - - - 菜单项文本控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 文本 - - - - - 菜单项分隔符控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 菜单项超链接控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 链接地址 - - - - - 链接目标 - - - - - 菜单项控件集合 - - - - - 构造函数 - - 父控件实例 - - - - 带下拉列表的按钮 - - - - - 按钮控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 获取按钮客户端点击事件的脚本 - - 验证表单列表 - 表单验证提示消息目标页面 - 是否显示表单验证提示对话框 - 启用回发 - 回发脚本 - 确认对话框消息 - 确认对话框标题 - 确认对话框图标 - 确认对话框目标页面 - 自定义客户端点击脚本 - 需要禁用的控件客户端ID - 客户端脚本 - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 处理回发事件 - - 事件参数 - - - - 触发按钮点击事件 - - 事件参数 - - - - 回发之前禁用按钮(防止重复提交) - - - - - 是否可以回发 - - - - - [AJAX属性]是否被按下 - - - - - 是否可以按下 - - - - - [AJAX属性]点击按钮时需要执行的客户端脚本 - - - - - [AJAX属性]预定义图标 - - - - - 按钮的大小 - - - - - 图标地址 - - - - - 图标摆放位置 - - - - - [AJAX属性]按钮文本 - - - - - [AJAX属性]提示文本 - - - - - 提示文本类型 - - - - - Tab键索引 - - - - - 按钮类型 - - - - - 需要验证的表单名称列表(逗号分隔) - - - - - 验证失败时提示对话框弹出位置 - - - - - 验证失败时是否出现提示对话框 - - - - - [AJAX属性]确认对话框标题 - - - - - [AJAX属性]确认对话框内容 - - - - - [AJAX属性]确认对话框提示图标 - - - - - [AJAX属性]确认对话框弹出位置 - - - - - 按钮的上下文菜单 - - - - - 按钮点击事件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 菜单控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 菜单项集合 - - - - - 页面配置管理器(每个页面必须包含一个 PageManager 控件) - - - - - 渲染控件的开始标签 - - 输出流 - - - - 渲染控件的结束标签 - - 输出流 - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - Used by FCKeditor, Add script before ajax postback. - - - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 自动调整此容器的宽度和高度,以填充整个页面 - - - - - 是否隐藏滚动条 - - - - - 是否隐藏滚动条 - - - - - 每次页面回发后总是执行onReady脚本(包括Ajax局部回发) - - - - - 是否启用页面加载标示 - - - - - 需要在AJAX回发时更新的Asp.net控件列表(逗号分隔) - - - - - 本次AJAX请求过程中需要更新TemplateField的表格 - - - - - 本次AJAX请求过程中重新加载的表格 - - - - - 样式 - - - - - 自定义样式的根路径 - - - - - 自定义样式的名称 - - - - - 语言 - - - - - 是否启用Ajax - - - - - 是否启用Ajax正在加载提示 - - - - - Ajax正在加载提示的类型 - - - - - Ajax超时时间(单位:秒,默认:60秒) - - - - - 是否启用XState压缩(默认为true) - - - - - 表单中消息的位置 - - - - - 表单中标签的位置 - - - - - 表单中右侧的空白宽度 - - - - - 表单中字段标签的宽度 - - - - - 表单中字段与标签的分隔符 - - - - - PageLoading控件是否存在页面 - - - - - PageManager在当前页面的实例 - - - - - 图片控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - [AJAX属性]链接地址 - - - - - [AJAX属性]预定义图标 - - - - - [AJAX属性]图片的宽度 - - - - - [AJAX属性]图片的高度 - - - - - [AJAX属性]图片的样式类 - - - - - [AJAX属性]图片的样式 - - - - - [AJAX属性]图片的Alt - - - - - 文件上传控件 - - - - - 构造函数 - - - - - 将上载文件的内容保存到 Web 服务器上的指定路径 - - 保存的文件的名称 - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 处理回发事件 - - 事件参数 - - - - 触发文件选定事件 - - 事件参数 - - - - 不支持此属性 - - - - - 按钮文本 - - - - - 是否只显示按钮,不显示只读输入框 - - - - - 按钮图标 - - - - - 按钮图标地址 - - - - - 上传的文件 - - - - - 是否包含文件 - - - - - 客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名) - - - - - 客户端文件名称,不包含目录路径 - - - - - 文件选定事件(需要启用AutoPostBack) - - - - - 隐藏表单控件 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 扩展文本框控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发事件 - - 事件参数 - - - - 触发第一个触发按钮点击事件 - - 事件参数 - - - - 触发第二个触发按钮点击事件 - - 事件参数 - - - - 是否允许编辑 - - - - - 是否显示触发器 - - - - - [AJAX属性]是否显示第一个触发器 - - - - - [AJAX属性]是否显示第一个触发器 - - - - - 是否可以回发第一个触发器 - - - - - 是否可以回发第一个触发器 - - - - - 第一个触发器图片 - - - - - 第二个触发器图片 - - - - - 第一个触发器图片 - - - - - 第二个触发器图片 - - - - - 点击第一个触发器时需要执行的客户端脚本 - - - - - 点击第二个触发器时需要执行的客户端脚本 - - - - - 第一个触发按钮点击事件 - - - - - 第二个触发按钮点击事件 - - - - - 链接按钮控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发事件 - - 事件参数 - - - - 触发按钮点击事件 - - 事件参数 - - - - [AJAX属性]文本 - - - - - [AJAX属性]点击按钮时需要执行的客户端脚本 - - - - - 提交之前需要验证的表单名称列表 - - - - - 验证失败时提示对话框弹出位置 - - - - - 验证失败时是否出现提示对话框 - - - - - 是否可以回发 - - - - - 是否对文本编码 - - - - - [AJAX属性]确认对话框标题 - - - - - [AJAX属性]确认对话框内容 - - - - - [AJAX属性]确认对话框提示图标 - - - - - [AJAX属性]确认对话框弹出位置 - - - - - 按钮点击事件 - - - - - 单选框列表控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 绑定到数据源 - - - - - 绑定到数据表 - - - - - - 绑定到可枚举列表 - - - - - - 取得属性值 - - - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发选中项改变事件 - - 事件参数 - - - - 触发回发数据改变事件 - - - - - 是否必填项 - - - - - 为空时提示信息 - - - - - 是否自动回发 - - - - - 渲染成几列 - - - - - 是否按照纵向顺序渲染 - - - - - 显示文本的数据字段 - - - - - 显示文本的格式化字符串 - - - - - 显示值的数据字段 - - - - - 数据源 - - - - - [AJAX属性]选中项的值 - - - - - [AJAX属性]选中项的索引 - - - - - 选中项 - - - - - 单选项集合 - - - - - 保存的单选项数据(内部使用) - - - - - 选中项改变事件(需要启用AutoPostBack) - - - - - 单选框控件 - - - - - 构造函数 - - - - - 设置本组内其他RadioButton的Checked属性为false - 简单处理,只查找和此RadioButton在同一个层级的RadioButton - - - - - 初始化控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 触发单选框状态改变事件 - - 事件参数 - - - - 文本 - - - - - [AJAX属性]是否选中 - - - - - 分组的名称 - - - - - 是否自动回发 - - - - - 单选框状态改变事件(需要启用AutoPostBack) - - - - - 扩展文本框控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 触发按钮点击事件 - - 事件参数 - - - - 处理回发事件 - - 事件参数 - - - - 是否允许编辑 - - - - - 是否显示触发器 - - - - - 是否可以回发 - - - - - 右侧按钮的图片 - - - - - 右侧的图标 - - - - - 点击按钮时需要执行的客户端脚本 - - - - - 触发按钮点击事件 - - - - - 为设计时提供的表格列集合编辑器 - - - - - 构造函数 - - 控件类型 - - - - 获取此集合编辑器可包含的数据类型 - - 类型集合 - - - - 表格行选中事件参数 - - - - - 构造函数 - - 行索引 - - - - 行索引 - - - - - 表格行点击事件参数 - - - - - 构造函数 - - 行索引 - /// 列ID - - - - 行索引 - - - - - 列ID - - - - - 表格列基类(抽象类) - - - - - 表格列基类(抽象类) - - - - - 取得列头渲染后的HTML - - 渲染后的HTML - - - - 取得列渲染后的HTML - - 表格行实例 - 渲染后的HTML - - - - 获取列的状态 - - - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 表格对象 - - - - - 列索引 - - - - - 排序字段 - - - - - 是否隐藏列 - - - - - 列ID(如果没有设置,则为ClientID) - - - - - 标题栏显示的文字 - - - - - 标题栏文字的提示文本 - - - - - 标题栏文字的提示文本类型 - - - - - 列宽度 - - - - - 控制子控件的尺寸(表格列使用HBox布局) - - - - - 此列会扩展所有未使用的宽度 - - - - - 文本的排列位置 - - - - - 启用表头菜单 - - - - - 启用隐藏列功能 - - - - - 表格单元格容器样式类 - - - - - 本列是否需要保存状态(目前只有CheckBoxField实现了这个定义) - - - - - 取得提示字符串 - - - - - - - 此列模拟树显示时的层次字段 - - - - - 提示文本 - - - - - 提示字段名称 - - - - - 提示字段格式化字符串 - - - - - 表格可编辑列 - - - - - 表格可编辑列的基类 - - - - - 字段名称 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 单元格编辑控件 - - - - - 字段类型 - - - - - 渲染器 - - - - - 渲染器的参数 - - - - - 自定义渲染器函数(JavaScript函数) - - - - - 处理数据库中null值,默认为空字符串 - - - - - 显示之前进行HTML编码(默认为true) - - - - - 表格可编辑复选框列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 表格数据绑定列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 启用表头菜单 - - - - - 是否允许隐藏列 - - - - - 是否启用分页行号 - - - - - 表格分组列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 列数据 - - - - - 区域面板控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 布局类型 - - - - - 区域集合 - - - - - 手风琴控件 - - - - - - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 布局类型 - - - - - 是否启用折叠按钮 - - - - - 是否启用激活在最上面 - - - - - 是否启用填充整个区域 - - - - - 激活面板的索引 - - - - - 手风琴面板集合 - - - - - 手风琴面板控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 鼠标移到标题栏是否高亮显示 - - - - - 手风琴面板控件集合 - - - - - 构造函数 - - 父控件实例 - - - - 树节点展开事件参数 - - - - - 构造函数 - - 树节点 - - - - 树实例 - - - - - 树节点ID - - - - - 树节点命令事件参数 - - - - - 构造函数 - - 树节点 - 命令名称 - 命令参数 - - - - 树实例 - - - - - 树节点ID - - - - - 命令名称 - - - - - 命令参数 - - - - - 树节点选中事件参数 - - - - - 构造函数 - - 树节点 - 是否选中 - - - - 树节点 - - - - - 节点ID - - - - - 是否选中 - - - - - 树节点 - - - - - 设置属性的值 - - - - - - - 树实例 - - - - - 父节点 - - - - - 树节点集合 - - - - - 单击树节点是否回发 - - - - - 点击按钮时需要执行的客户端脚本 - - - - - 命令名称 - - - - - 命令参数 - - - - - 是否选中 - - - - - 是否启用复选框 - - - - - 改变复选框状态是否自动回发 - - - - - 文本 - - - - - 树节点ID - - - - - 是否叶子节点 - - - - - 是否可用 - - - - - 是否展开 - - - - - 链接目标 - - - - - 链接地址 - - - - - 图标地址 - - - - - 预定义图标 - - - - - 提示文本 - - - - - 树节点控件集合 - - - - - 构造函数 - - 树实例 - 父节点 - - - - 插入树节点 - - 插入索引位置 - 树节点实例 - - - - 设置每个节点的Tree实例 - - - - - - 树节点的属性映射 - - - - - 映射源 - - - - - 映射目标 - - - - - 树节点的属性映射集合 - - - - - 窗体关闭事件参数 - - - - - 构造函数 - - 关闭参数 - - - - 关闭参数 - - - - - 表格行预绑定事件参数 - - - - - 构造函数 - - 行数据源 - 行索引 - - - - 行数据源(如果数据源为DataTable,则DataItem为DataRowView) - - - - - 行索引 - - - - - 表格分页事件参数 - - - - - 构造函数 - - 新页面的索引 - - - - 新页面的索引 - - - - - 表格行命令事件参数 - - - - - 构造函数 - - 行索引 - 列索引 - 命令名称 - 命令参数 - - - - 行索引 - - - - - 列索引 - - - - - 命令名称 - - - - - 命令参数 - - - - - 表格行绑定事件参数 - - - - - 构造函数 - - 行数据源 - 行索引 - 本行各列的值 - - - - 本行各列的值(渲染后的HTML片段) - - - - - 行数据源 - - - - - 行索引 - - - - - 表格行点击事件参数 - - - - - 构造函数 - - 行索引 - - - - 行索引 - - - - - 表格链接按钮列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 启用表头菜单 - - - - - 是否允许隐藏列 - - - - - 字段名称 - - - - - 字段格式化字符串 - - - - - 按钮文本 - - - - - 显示之前进行HTML编码(默认为true) - - - - - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - - - - - 是否可以回发 - - - - - 是否可用 - - - - - 点击按钮时需要执行的客户端脚本 - - - - - 提交之前需要验证的表单名称列表 - - - - - 验证失败时提示对话框弹出位置 - - - - - 验证失败时是否出现提示对话框 - - - - - 图标 - - - - - 图标地址 - - - - - 确认对话框标题 - - - - - 确认对话框内容 - - - - - 确认对话框提示图标 - - - - - 确认对话框弹出位置 - - - - - 命令名称 - - - - - 命令参数 - - - - - 区域控件 - - - - - Tab 控件必须包含在 TabStrip 中 - - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 是否可以拖动分隔条 - - - - - 边距 - - - - - 位置 - - - - - Region控件集合 - - - - - 构造函数 - - 父控件实例 - - - - 日期控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发事件 - - 事件参数 - - - - 触发日期选定事件 - - 事件参数 - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - [AJAX属性]选择的日期 - - - - - 日期格式 - - - - - 最大日期 - - - - - 最小日期 - - - - - 选择日期是否自动回发 - - - - - 选择日期是否自动回发 - - - - - 日期选定事件(需要启用EnableDateSelect) - - - - - 工具条控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 工具条的位置 - - - - - 工具条项集合 - - - - - 工具栏文本控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - [AJAX属性]文本 - - - - - 工具栏分隔符控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 工具栏左右分隔符控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 链接控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - [AJAX属性]文本 - - - - - [AJAX属性]点击链接时需要执行的客户端脚本 - - - - - [AJAX属性]链接地址 - - - - - [AJAX属性]链接目标 - - - - - 是否对文本编码 - - - - - 页面上下文帮助类(静态类),包括向页面注册脚本、刷新当前页面、页面重定向等实用函数 - - - - - 跳转到指定的Url - - - - - - 跳转到指定的Url,Target指定在哪个窗口中跳转(_self,_parent,_top) - - - _self,_parent,_top - - - - 刷新当前页面 - - - - - 刷新指定页面 - - 目标页面 - - - - 注册页面脚本 - - 客户端脚本 - - - - 树控件 - - - - - 构造函数 - - - - - 初始化控件 - - - - - 渲染 HTML 之前调用 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 绑定数据源 - - - - - - 如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 - 同时处理 AutoLeafIdentification 属性 - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 处理回发事件 - - 事件参数 - - - - 触发节点选中事件 - - 事件参数 - - - - 触发节点点击事件 - - 事件参数 - - - - 触发节点展开事件 - - 事件参数 - - - - 获取所有展开节点的ID数组 - - 节点的ID数组 - - - - 获取指定节点集合中所有展开节点的ID数组 - - 指定的节点集合 - 节点的ID数组 - - - - 获取所有展开节点的数组 - - 节点的数组 - - - - 获取指定节点集合中所有展开节点的数组 - - 指定的节点集合 - 节点的数组 - - - - 折叠所有节点 - - - - - 折叠指定节点集合中的所有节点 - - 指定的节点集合 - - - - 展开所有节点 - - - - - 展开指定节点集合中的所有节点 - - 指定的节点集合 - - - - 获取选中节点的ID数组 - - 节点的ID数组 - - - - 获取指定节点集合中选中节点的ID数组 - - 指定的节点集合 - 节点的ID数组 - - - - 获取选中节点的数组 - - 节点的数组 - - - - 获取指定节点集合中选中节点的数组 - - 指定的节点集合 - 节点的数组 - - - - 选中所有节点的复选框 - - - - - 选中指定节点的复选框 - - 指定的节点集合 - - - - 反选所有节点的复选框 - - - - - 反选指定节点的复选框 - - 指定的节点集合 - - - - 查找树节点 - - 节点ID - 树节点 - - - - 在指定的节点集合中查找树节点 - - 节点ID - 指定的节点集合 - 树节点 - - - - 获取展开全部节点的的客户端脚本 - - 客户端脚本 - - - - 获取折叠全部节点的的客户端脚本 - - 客户端脚本 - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 布局类型 - - - - - 启用箭头 - - - - - 启用动画 - - - - - 每次只能展开一个 - - - - - 启用节点之间连线 - - - - - 启用图标 - - - - - 自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性(默认:true) - - - - - 启用多行选择 - - - - - 数据源 - - - - - 树节点集合 - - - - - 选中的树节点 - - - - - [AJAX属性]选中的树节点ID - - - - - [AJAX属性]选中的树节点ID列表 - - - - - 树控件属性与数据源节点的映射关系 - - - - - 选中行 - - - - - 展开的节点列表 - - - - - 选中的节点列表 - - - - - 树节点集合的 JSON 表示(内部使用) - - - - - 节点选中事件 - - - - - 节点点击事件 - - - - - 节点展开事件 - - - - - 脚本(不和控件关联的脚本) - - - - - 脚本 - - - - - 层次(层次越高,注册越靠后)(缺省100) - 负值表示在所有注册脚本之前执行 - - - - - 容器面板控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 布局类型 - - - - - 页面加载提示控件 - - - - - 渲染控件的开始标签 - - 输出流 - - - - 渲染控件的结束标签(不生成结束标签) - - 输出流 - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 自定义的加载图片 - - - - - 回发时是否显示 - - - - - 是否启用淡出效果 - - - - - 表单面板控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理列 - - - - - - 添加列 - - 行ID集合 - 开始行的索引(包含) - 结束行的索引(包含) - 行的列数 - - - - 添加Items变量 - - - - - - - - 取得当前行的列数 - - - - - - - 取得当前行 columnIndex 列的控件 - - - - - - - - 不支持此属性 - - - - - 表单行控件集合 - - - - - 表单行控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 格式化widths - - - - - - - 各列的宽度,空格分割 - - - - - 子控件集合 - - - - - 表单行控件集合 - - - - - 构造函数 - - 父控件实例 - - - - 分组面板控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 复选框控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 触发复选框状态改变事件 - - 事件参数 - - - - 文本 - - - - - [AJAX属性]是否选中 - - - - - 是否自动回发 - - - - - 复选框状态改变事件(需要启用AutoPostBack) - - - - - 简单的表单容器控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 窗体控件 - - - - - 构造函数 - - - - - 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 - - 输出流 - - - - 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 - - 输出流 - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - Override the same method exist in ControlBase, because we have separate logic to hide this control. - - - - - 保存服务器控件的ClientID - 可以调用ActiveWindow.GetWriteBackValueReference在子页面向这些服务器控件写入值 - - - - - 获取显示窗体的客户端脚本 - - 客户端脚本 - - - - 获取显示窗体的客户端脚本 - - IFrame地址 - 客户端脚本 - - - - 获取显示窗体的客户端脚本 - - IFrame地址 - 窗体标题 - 客户端脚本 - - - - 获取最大化窗体尺寸的客户端脚本 - - 客户端脚本 - - - - 获取恢复窗体尺寸的客户端脚本 - - 客户端脚本 - - - - 获取最小化窗体尺寸的客户端脚本 - - 客户端脚本 - - - - 获取关闭当前激活Window的客户端脚本 - - 客户端脚本 - - - - 获取关闭当前激活Window然后刷新页面的客户端脚本 - - 客户端脚本 - - - - 获取关闭当前激活Window然后回发页面的客户端脚本 - - 客户端脚本 - - - - 获取关闭当前激活Window然后回发页面的客户端脚本 - - 客户端脚本 - - - - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本 - - 客户端脚本 - - - - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后刷新父页面的客户端脚本 - - 客户端脚本 - - - - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 - - 客户端脚本 - - - - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 - - 客户端脚本 - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 处理回发事件 - - 事件参数 - - - - 触发窗体关闭事件 - - 事件参数 - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 为了放置不同页面的Window的ClientID发生冲突,加上GUID - - - - - [只读]Window的IFrameName必须是唯一的,在所有页面中是唯一的 - 所以不要手工定义Window的IFrameName - - - - - 窗口的位置 - - - - - 是否弹出窗体 - - - - - 左上角位置 - - - - - 左上角位置 - - - - - 是否可以关闭 - - - - - 是否可以移动 - - - - - 是否可以最大化 - - - - - 是否可以最小化 - - - - - 最小高度 - - - - - 最小宽度 - - - - - 是否模式窗口 - - - - - 是否可以改变窗口大小 - - - - - 点击关闭按钮时需要执行的客户端脚本 - - - - - 关闭Window之前弹出确认当前表单改变的对话框 - - - - - 关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作) - - - - - 弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效) - - - - - 内容区域颜色是否和边框颜色相同,默认为true - - - - - 窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack) - - - - - 表格排序事件参数 - - - - - 构造函数 - - 排序字段 - 排序方向 - 列索引 - - - - 排序字段 - - - - - 排序方向 - - - - - 列索引 - - - - - 表格控件 - - - - - 模板列占位符前缀 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 当前分页的开始行和结束行 - - - - - - 渲染开始标签 - - 输出流 - - - - 渲染结束标签 - - 输出流 - - - - 当在客户端修改了模板列中的值,调用此函数来告诉表格控件需要更新这些值; - 如果对表格重新进行了数据绑定,则不需要调用此函数,因为重新绑定后会更新表格的全部内容 - - - - - 绑定到数据源 - - - - - 清空Rows,同时清除所有子控件中的GridRow控件 - - - - - 获取用户修改的数据 - - - - - - 获取删除的行索引列表 - - - - - - 获取新增的行数据 - - - - - - 获取用户修改的行数据 - - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 接受用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) - - - - - 获取接受用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) - - 客户端脚本 - - - - 拒绝用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) - - - - - 获取拒绝用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) - - - - - 清空表格选中项 - - - - - 获取清空表格选中项的客户端脚本 - - 客户端脚本 - - - - 添加一条新纪录 - - 缺省值 - - - - 添加一条新纪录 - - 缺省值 - 是否添加到末尾 - - - - 获取添加一条新纪录的客户端脚本 - - 缺省值 - 客户端脚本 - - - - 获取添加一条新纪录的客户端脚本 - - 缺省值 - 是否添加到末尾 - 客户端脚本 - - - - 删除选中行(或者单元格) - - - - - 获取删除选中行(或者单元格)的客户端脚本 - - 客户端脚本 - - - - 获取表格是否有选中项的客户端脚本 - - 客户端脚本 - - - - 获取表格选中项数的客户端脚本 - - 客户端脚本 - - - - 获取表格选中项数的客户端脚本 - - 客户端脚本 - - - - 获取表格选中单元格的客户端脚本(仅用于AllowCellEditing模式) - - 客户端脚本 - - - - 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - - 客户端脚本 - - - - 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 客户端脚本 - - - - 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 对话框图标 - 客户端脚本 - - - - 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 客户端脚本 - - - - 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 客户端脚本 - - - - 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 对话框图标 - 客户端脚本 - - - - 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 客户端脚本 - - - - 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 客户端脚本 - - - - 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 对话框图标 - 客户端脚本 - - - - 通过列ID获取列实例 - - 列ID - 列实例 - - - - 通过列索引获取列实例 - - 列索引 - 列实例 - - - - 选中所有行(设置SelectedRowIndexArray属性) - - - - - 展开全部的行扩展列 - - - - - 折叠全部的行扩展列 - - - - - 处理回发事件 - - 事件参数 - - - - 获取Columns前面的列(比如索引列,选择框列) - - - - - - 触发排序事件 - - 事件参数 - - - - 触发绑定前事件 - - 事件参数 - - - - 触发行绑定前事件 - - 事件参数 - - - - 触发行绑定后事件 - - 事件参数 - - - - 触发行内事件 - - 事件参数 - - - - 触发页索引改变事件 - - 事件参数 - - - - 触发行点击事件 - - 事件参数 - - - - 触发行双击事件 - - 事件参数 - - - - 触发行选中事件 - - 事件参数 - - - - 触发结束编辑事件 - - 事件参数 - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 布局类型 - - - - - 允许单元格编辑 - - - - - 编辑单元格时点击单元格的次数(默认为2次) - - - - - 允许服务器端分页 - - - - - 是否数据库分页 - - - - - 服务器端分页后清空选中的行 - - - - - 每页显示项数 - - - - - [AJAX属性]当前显示页索引 - - - - - [AJAX属性]总页数 - - - - - [AJAX属性]记录的总个数 - - - - - 允许服务器端排序 - - - - - 排序方向("ASC", "DESC") - - - - - 当前排序字段(只读) - - - - - 数据为空时显示在内容区域的文本,可以是HTML标签 - - - - - 行中文字的垂直排列位置(默认为Middle) - - - - - 是否延迟渲染 - - - - - 展开所有的行扩展列 - - - - - 启用表格中的文字选择 - - - - - 显示表格表头 - - - - - 启用表头菜单 - - - - - 启用表格列分隔线(默认为false) - - - - - 启用交替行显示不同的颜色 - - - - - 启用鼠标移动到行的颜色 - - - - - 点击行是否自动回发 - - - - - 选中行是否自动回发 - - - - - 双击行是否自动回发 - - - - - 点击行是否自动回发 - - - - - 选中行是否自动回发 - - - - - 点击行是否自动回发 - - - - - 双击行是否自动回发 - - - - - 结束编辑是否自动回发(需要启用AllowCellEditing) - - - - - 自动扩展宽度以填充剩余空间的列(ColumnID) - - - - - 成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效) - - - - - 启用多选框 - - - - - 只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效) - - - - - 启用多行选择 - - - - - [AJAX属性]选中行的索引(列表中的第一项) - - - - - [AJAX属性]选中的单元格([行索引,列索引]) - - - - - [AJAX属性]选中行的索引列表 - - - - - [AJAX属性]隐藏的列名称列表(逗号分隔) - - - - - 数据源 - - - - - 行关键字段 - - - - - 行关键字段的值 - - - - - 分页工具条项集合 - - - - - 全部的列 - - - - - 列数据 - - - - - 行数据 - - - - - 保存的行数据(内部使用) - - - - - 排序事件 - - - - - 绑定前事件 - - - - - 行绑定前事件 - - - - - 行绑定后事件 - - - - - 行内事件 - - - - - 页索引改变事件 - - - - - 行点击事件(需要启用EnableRowClick) - - - - - 行双击事件(需要启用EnableRowDoubleClick) - - - - - 行选中事件(需要启用EnableRowSelect) - - - - - 结束编辑事件(需要启用EnableAfterEditEvent) - - - - - 表格数据绑定列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 是否可用 - - - - - 字段名称 - - - - - 字段格式化字符串 - - - - - 处理数据库中null值,默认为空字符串 - - - - - 显示之前进行HTML编码(默认为true) - - - - - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - - - - - 表格复选框列 - - - - - 取得单元格的数据 - - - - - - - - 本行的复选框是否处于选中状态 - - 行索引 - 选中状态 - - - - 设置本列复选框的选中状态 - - 行索引 - 是否选中 - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 是否可用(只在RenderAsStaticField=false时有效) - - - - - 是否自动回发(只在RenderAsStaticField=false时有效) - - - - - 字段名称 - - - - - 渲染为静态图片,否则渲染为可编辑的复选框 - - - - - 显示列头复选框(只在RenderAsStaticField=false时有效) - - - - - 命令名称 - - - - - 命令参数 - - - - - 表格窗体列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 启用表头菜单 - - - - - 是否允许隐藏列 - - - - - 是否可用 - - - - - 对应的窗体控件ID - - - - - 窗体标题对应的字段名称 - - - - - 窗体标题对应的字段格式化字符串 - - - - - 字段名称 - - - - - 字段格式化字符串 - - - - - 显示之前进行HTML编码(默认为true) - - - - - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - - - - - 绑定到IFrame地址的字段名称列表 - - - - - 绑定到IFrame地址的字段格式化字符串 - - - - - 对每个绑定到IFrame地址的字段进行URL编码(默认为true) - - - - - IFrame地址 - - - - - 显示文本 - - - - - 标题 - - - - - 图标 - - - - - 图标地址 - - - - - 表格图片列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 图片地址字段 - - - - - 图片地址字段格式化字符串 - - - - - 图片的宽度 - - - - - 图片的高度 - - - - - 表格模板列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 模板容器 - - - - - 是否渲染为行扩展列 - - - - - 表格超链接列 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 是否可用 - - - - - 字段名称 - - - - - 字段格式化字符串 - - - - - 绑定到超链接地址的字段名称列表 - - - - - 对每个绑定到超链接地址的字段进行URL编码(此属性废弃,请使用UrlEncode属性) - - - - - 对每个绑定到超链接地址的字段进行URL编码(默认为true) - - - - - 绑定到超链接地址的字段格式化字符串 - - - - - 打开超链接的目标框架 - - - - - 超链接地址 - - - - - 超链接文本 - - - - - 显示之前进行HTML编码(默认为true) - - - - - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - - - - - 表格列集合 - - - - - 构造函数 - - 父控件实例 - - - - 用来作为模板列的数据绑定容器,实现了IDataItemContainer接口 - - - - - 构造函数 - - 数据源 - 行索引 - - - - 控件初始化事件 - - 事件参数 - - - - 渲染开始标签 - - ASP.NET服务器控件输出流 - - - - 渲染结束标签 - - ASP.NET服务器控件输出流 - - - - 数据源(IDataItemContainer成员) - - - - - 数据项索引(IDataItemContainer成员) - - - - - 数据项在控件中显示位置的索引(IDataItemContainer成员) - - - - - 表格行 - - - - - 构造函数 - - - - - 构造函数 - - 表格实例 - 行对应的数据源(在回发时为null) - 行序号 - - - - 当前行列状态列表 - - - - - - 恢复当前行列状态列表(同时更新相应的Values值) - - - - - - 更新当前行某列的渲染后的HTML - - - - - - 表格行中模板列控件列表(数据绑定时自动生成每个模板列控件ID,回发时从XState中回发模板列控件ID) - - - - - 绑定行的值 - - - - - 查找表格行内的控件 - - - - - - - 表格实例 - - - - - 本行对应的数据源(不维护状态) - - - - - 第几行 - - - - - 此行的状态信息 - - - - - 此行DataKeyNames字段的值 - - - - - 非公开属性,对于CheckBoxField可以通过GetCheckedState访问 - - - - - 表格行中模板列控件列表,一个典型的例子为:[GridRowControl, null, null, GridRowControl, null, null, null, null, null] - - - - - 表格行控件集合 - - - - - 列表项 - - - - - 构造函数 - - - - - 构造函数 - - 列表项文本 - 列表项值 - - - - 是否选中 - - - - - 显示的文本 - - - - - 值 - - - - - 是否可选择 - - - - - 模拟树的层次(从0开始为根节点) - - - - - 列表项集合 - - - - - 通过文本查找列表项 - - 文本 - 列表项 - - - - 通过文本查找列表项 - - 文本 - 是否去除HTML标签 - 列表项 - - - - 通过值查找列表项 - - 值 - 列表项 - - - - 添加列表项 - - 文本 - 值 - 新元素的插入位置 - - - - 下拉列表控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 绑定到数据源 - - - - - 绑定到数据表格 - - 数据表格 - - - - 绑定到可枚举类型 - - 可枚举类型 - - - - 取得属性值 - - - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 触发选中项改变事件 - - 事件参数 - - - - [AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效) - - - - - [AJAX属性]选中项的值 - - - - - [AJAX属性]选中项的索引 - - - - - 选中项的文本 - - - - - 选中项 - - - - - 是否强制选中下拉列表中的项(启用编辑的情况下) - - - - - 是否可编辑,以便在录入时自动过滤下拉框中的值 - - - - - 是否启用模拟树显示 - - - - - 模拟树显示时指示所在层次的数据字段 - - - - - 是否可选择的字段 - - - - - 是否自动回发 - - - - - 显示文本字段 - - - - - 显示文本的格式化字符串 - - - - - 显示值字段 - - - - - 数据源 - - - - - 保存的列表项数据(内部使用) - - - - - 列表项集合 - - - - - 选中项改变事件(需要启用AutoPostBack) - - - - - 文本控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 是否对文本编码 - - - - - [AJAX属性]文本 - - - - - 多行文本框控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 是否自动增长高度 - - - - - 自动增长的最大高度 - - - - - 自动增长的最小高度 - - - - - 是否总是隐藏滚动条 - - - - - 选项卡控件 - - - - - 构造函数 - - - - - Tab 控件必须包含在 TabStrip 中 - - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - Override the same method exist in ControlBase, because we have separate logic to hide this control. - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 获取显示选项卡的客户端脚本 - - 客户端脚本 - - - - 获取隐藏选项卡的客户端脚本 - - 客户端脚本 - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 是否可以关闭 - - - - - 选项卡面板控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发回发数据改变事件 - - - - - 处理回发事件 - - 事件参数 - - - - 触发选项卡改变事件 - - 事件参数 - - - - 获取添加选项卡的脚本 - - 选项卡ID - IFrame地址 - 选项卡标题 - 是否可以关闭 - 客户端脚本 - - - - 获取添加选项卡的脚本 - - 选项卡ID - IFrame地址 - 选项卡标题 - 选项卡图标 - 是否可以关闭 - 客户端脚本 - - - - 获取移除选项卡的脚本 - - 选项卡ID - 客户端脚本 - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - 布局类型 - - - - - 切换选项卡时是否自动回发 - - - - - 显示标题的背景颜色 - - - - - 是否启用右键菜单(可用来关闭当前Tab和所有其他Tab) - - - - - 选项卡显示的位置 - - - - - 是否启用延迟加载选项卡 - - - - - [AJAX属性]当前激活选项卡的索引 - - - - - 当前激活的选项卡 - - - - - 选项卡集合 - - - - - 选项卡改变事件 - - - - - 面板控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - HTML编辑框控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发数据 - 回发到服务器,判断控件的属性是否变化, - 如果变化返回true,则RaisePostDataChangedEvent - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发文本改变事件 - - 事件参数 - - - - 触发回发数据改变事件 - - - - - 不支持此属性 - - - - - 不支持此属性 - - - - - [AJAX属性]文本 - - - - - 启用左右定位 - - - - - 启用颜色 - - - - - 启用字体 - - - - - 启用调整字体大小 - - - - - 启用格式化 - - - - - 启用创建链接 - - - - - 启用创建列表 - - - - - 启用源码视图 - - - - - 字体列表 - - - - - 启用中文字体 - - - - - 文本改变事件 - - - - - 日期选择框控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发事件 - - 事件参数 - - - - 触发日期选定事件 - - 事件参数 - - - - 是否允许编辑 - - - - - 选择的日期 - - - - - 启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd - - - - - 尝试解析日期的格式列表 - - - - - 日期格式 - - - - - 最大日期 - - - - - 最小日期 - - - - - 选择日期是否自动回发 - - - - - 选择日期是否自动回发 - - - - - 日期选定事件(需要启用EnableDateSelect) - - - - - 选项卡集合 - - - - - 构造函数 - - 父控件实例 - - - - 控件-控件相关脚本 - - - - - 要注册脚本的控件 - - - - - 脚本 - - - - - 额外的脚本 - - - - - 布局类型 - - - - - 容器布局(默认值) - - - - - 锚点布局 - - - - - 边框布局(只用于RegionPanel控件) - - - - - 自适应布局(用于只有一个子控件的情况) - - - - - 手风琴布局(只用于Accordion控件) - - - - - 表单布局(用于SimpleForm和Form控件) - - - - - 卡片布局(只用于TabStrip控件) - - - - - 列布局 - - - - - 绝对定位布局 - - - - - 行布局 - - - - - 表格布局 - - - - - 垂直盒子布局 - - - - - 水平盒子布局 - - - - - 布局类型名称 - - - - - Extjs和.Net之间的日期格式转换 - - - - - 创建Javascript的Date对象字符串 - - 日期对象 - 日期的客户端脚本形式 - - - - 将.Net日期格式字符串转换为ExtJS的日期格式字符串 - - .Net日期格式字符串 - ExtJS的日期格式字符串 - - - - 数字输入框控件 - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 不允许小数 - - - - - 不允许负数 - - - - - 最大值 - - - - - 最小值 - - - - - 小数点后的位数(默认为2) - - - - - 文本框类型 - - - - - 普通文本框(默认值) - - - - - 密码输入框 - - - - - 文本框类型名称 - - - - - 提示框的类型 - - - - - Extjs的浮动提示框(默认值) - - - - - HTML标签的title属性 - - - - - 提示框的类型名称 - - - - - JavaScript帮助类 - - - - - 将包含JavaScript代码块的字符串转换为可以使用的客户端脚本 - - 包含JavaScript代码块的字符串 - 转换后的客户端脚本 - - - - 获取单引号括起来的JavaScript字符串,一般用在GetReference函数中 - 你好 -> '你好' - 你'好 -> '你\'好' - 你\好 -> '你\\好' - - 源字符串 - 单引号括起来的字符串 - - - - 获取字符串数组的脚本字符串形式 - - 字符串数组 - 字符串数组的脚本字符串 - - - - 获取整形数组的脚本字符串形式 - - 整数数组 - 整形数组的脚本字符串 - - - - 获取一段完成的JavaScript函数 - - 函数主体 - 函数参数 - 字符串表示的JavaScript函数 - - - - 获取延迟执行JavaScript脚本的字符串 - - 需要执行的脚本内容 - 延迟毫秒数 - 延迟执行的客户端脚本 - - - - 获取延迟执行JavaScript脚本的字符串 - - 需要执行的脚本内容 - 延迟毫秒数 - 执行脚本时的函数上下文 - 延迟执行的客户端脚本 - - - - 返回的是双引号括起来的字符串,用来作为JSON属性比较合适 - - 源字符串 - 双引号括起来的字符串 - - - - 将数字对象转化为字符串 - - 数字对象 - 字符串 - - - - 对话框帮助类 - - - - - 默认提示对话图标 - - - - - 显示对话框 - - - - - 获取显示对话框的客户端脚本 - - 客户端脚本 - - - - 显示对话框 - - 消息正文 - - - - 显示对话框 - - 消息正文 - 标题 - - - - 显示对话框 - - 消息正文 - 图标 - - - - 显示对话框 - - 对话框消息 - 对话框标题 - 点击确定按钮执行的客户端脚本 - - - - 显示对话框 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - - - - 显示对话框 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - - - - 显示对话框 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - 显示对话框的目标页面 - - - - 显示对话框 - - 对话框消息 - 对话框标题 - - 点击确定按钮执行的客户端脚本 - 显示对话框的目标页面 - 自定义对话框图标 - 自定义对话框图标地址 - - - - 在父页面中显示对话框 - - 消息正文 - - - - 在父页面中显示对话框 - - 消息正文 - 标题 - - - - 在父页面中显示对话框 - - 消息正文 - 图标 - - - - 在父页面中显示对话框 - - 对话框消息 - 对话框标题 - 点击确定按钮执行的客户端脚本 - - - - 在父页面中显示对话框 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - - - - 在父页面中显示对话框 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - - - - 在顶层窗口中显示对话框 - - 消息正文 - - - - 在顶层窗口中显示对话框 - - 消息正文 - 对话框标题 - - - - 在顶层窗口中显示对话框 - - 消息正文 - 自定义对话框图标 - - - - - - 消息正文 - 对话框标题 - 点击确定按钮执行的客户端脚本 - - - - - - 消息正文 - 对话框标题 - 自定义对话框图标 - - - - 在顶层窗口中显示对话框 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 自定义对话框图标 - 客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 点击确定按钮执行的客户端脚本 - 客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - 客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - 显示对话框的目标页面 - 客户端脚本 - - - - 获取显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - - 点击确定按钮执行的客户端脚本 - 显示对话框的目标页面 - - 自定义对话框图标地址 - 客户端脚本 - - - - 获取在父页面中显示对话框的客户端脚本 - - 对话框消息 - 客户端脚本 - - - - 获取在父页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 客户端脚本 - - - - 获取在父页面中显示对话框的客户端脚本 - - 对话框消息 - 自定义对话框图标 - 客户端脚本 - - - - 获取在父页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 客户端脚本 - - - - 获取在父页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 点击确定按钮执行的客户端脚本 - 客户端脚本 - - - - 获取在父页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - 客户端脚本 - - - - 获取在最上层页面中显示对话框的客户端脚本 - - 对话框消息 - 客户端脚本 - - - - 获取在最上层页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 客户端脚本 - - - - 获取在最上层页面中显示对话框的客户端脚本 - - 对话框消息 - 自定义对话框图标 - 客户端脚本 - - - - 获取在最上层页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 客户端脚本 - - - - 获取在最上层页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 点击确定按钮执行的客户端脚本 - 客户端脚本 - - - - 获取在最上层页面中显示对话框的客户端脚本 - - 对话框消息 - 对话框标题 - 自定义对话框图标 - 点击确定按钮执行的客户端脚本 - 客户端脚本 - - - - 对话框消息正文 - - - - - 对话框标题 - - - - - 对话框图标 - - - - - 点击确认按钮执行的JavaScript脚本 - - - - - 对话框的目标位置 - - - - - 自定义对话框图标地址 - - - - - 自定义对话框图标 - - - - - 消息框图标类型 - - - - - 信息(默认值) - - - - - 警告 - - - - - 问题 - - - - - 错误 - - - - - 消息框图标类型名称 - - - - - 创建Javascript对象参数的帮助类 - - - - - 构造函数 - - - - - 构造函数 - - 属性名 - 属性值 - - - - 构造函数 - - 属性名 - 属性值 - 是否保持原样 - - - - 删除属性 - - 属性名 - - - - 是否包含属性 - - 属性名 - - - - - 添加属性 - - 属性名 - 属性值 - - - - 添加属性 - - 属性名 - 属性值 - 是否保持原样 - - - - 获取属性 - - 属性名 - 属性值 - - - - 返回对象的JSON字符串形式 - - 对象的JSON形式 - - - - 已经添加属性的个数 - - - - - 资源帮助类 - - - - - 获取嵌入资源的 res.axd 地址 - - 资源名称 - 资源地址 - - - - 获取嵌入资源的 res.axd 地址 - - 页面对象 - 资源名称 - 资源地址 - - - - 获取嵌入资源的地址 - - 资源名称 - 资源地址 - - - - 获取嵌入资源的地址 - - 页面实例 - 资源名称 - 资源地址 - - - - 取得资源的内容 - - 资源名称 - 资源内容 - - - - 取得资源的二进制内容 - - 资源名称 - 资源的二进制内容 - - - - 获取空白图片的地址 - - 空白图片的地址 - - - - 配置字段名称 - - - - - 字段属性名称 - - - - - 字段属性值 - - - - - 属性分类的名称 - - - - - 基本属性 - - - - - 属性 - - - - - 表单验证 - - - - - 布局 - - - - - 事件 - - - - - 文本框控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 文本框类型 - - - - - FineUI在Web.config中的配置节 - - - - - 主题 - - - - - 语言 - - - - - 表单验证消息的提示位置 - - - - - 表单中标签的位置 - - - - - 表单控件右侧距离边界的距离 - - - - - 表单控件标签的宽度 - - - - - 表单控件标签的分隔符 - - - - - 启用AJAX - - - - - 启用AJAX加载提示信息 - - - - - AJAX提示信息的类型 - - - - - 客户端AJAX超时时间 - - - - - 是否启用大字体(将ExtJS所有11px字体改为12px) - - - - - 是否启用调试模式 - - - - - ExtJS文件夹所在的根目录 - - - - - 图标所在的根目录 - - - - - 自定义主题所在的根目录 - - - - - 自定义主题名称 - - - - - 是否启用XState压缩(默认为true) - - - - - 存在 Page.Items 上下文中,向页面注册资源 - - - - - 需要向页面注册的样式列表 - - - - - 准备呈现页面内容,在保存页面状态之前 - - - - - - - 注册页面第一次加载时的样式和脚本 - - - - - 注册页面脚本 - - - - - 是否注册startup脚本 - - - - - - - 取得页面初始化时脚本 - - - - - - - 返回经过排序的 _startupControlScriptList 列表,子控件排在父控件的前面 - - - - - - 取得应该将Script插入的位置 - modified by 30372245@qq.com, 要能够向上回溯,因为控件A的父的父控件可能不存在列表中 - - - - - - - - 添加样式 - - - - - - - - 删除已经添加的CSS样式 - - - - - - 添加脚本 - 相同控件的脚本合并在一起(30372245@qq.com 2008-7-4) - - - - - - - - 控件control的注册脚本是否存在 - - - - - - - AJAX时每个控件需要注册的脚本 - - - - - AJAX时不依赖控件的脚本 - - - - - AJAX时使用到的所有短名称列表 - 比如:X('SimpleForm1_tbxUserName') -> cmp0 - X('SimpleForm1_tbxPassword') -> cmp1 - - - - - 取得 ResourceManager 的实例,单件模式 - - - - - 复选框列表控件 - - - - - 构造函数 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 绑定到数据源 - - - - - 绑定到数据表 - - - - - - 绑定到可枚举列表 - - - - - - 取得属性值 - - - - - - - 处理回发数据 - - 回发数据键 - 回发数据集 - 回发数据是否改变 - - - - 触发选中项改变事件 - - 事件参数 - - - - 触发回发数据改变事件 - - - - - 是否必填项 - - - - - 为空时提示信息 - - - - - 是否自动回发 - - - - - 渲染成几列 - - - - - 是否按照纵向顺序渲染 - - - - - 显示文本的数据字段 - - - - - 显示文本的格式化字符串 - - - - - 显示值的数据字段 - - - - - 数据源 - - - - - [AJAX属性]选中项的值 - - - - - [AJAX属性]选中项的索引 - - - - - 选中项 - - - - - 复选框集合 - - - - - 保存的复选框数据(内部使用) - - - - - 选中项改变事件(需要启用AutoPostBack) - - - - - 复选框列表项 - - - - - 构造函数 - - - - - 构造函数 - - - - - - - 是否选中 - - - - - 显示的文本 - - - - - 值 - - - - - 复选项集合 - - - - - 通过文本查找复选项 - - 文本 - 复选项 - - - - 通过文本查找复选项 - - 文本 - 是否去除HTML标签 - 复选项 - - - - 通过值查找复选项 - - 值 - 复选项 - - - - 添加复选项 - - 文本 - 值 - 新元素的插入位置 - - - - 时间选择框控件 - - - - - 渲染 HTML 之前调用(AJAX回发) - - - - - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - - - - - 处理回发事件 - - 事件参数 - - - - 触发日期选择事件 - - 事件参数 - - - - 是否允许编辑 - - - - - 选择的时间 - - - - - 尝试解析时间的格式列表 - - - - - 时间格式(默认为HH:mm,24小时制,比如“20:30”) - - - - - 最大时间 - - - - - 最大时间的字符串形式 - - - - - 最小时间 - - - - - 最小时间的字符串形式 - - - - - 列表中每个时间值相差的分钟数(默认为15分钟) - - - - - 选择时间是否自动回发 - - - - - 选择时间是否自动回发 - - - - - 日期选择事件(需要启用EnableDateSelect) - - - - + + + + FineUI + + + + + 表单容器控件基类 + + + + + 可折叠面板控件基类(抽象类) + + + + + 面板控件基类(抽象类) + + + + + 容器控件基类(抽象类) + + + + + 控件基类(抽象类) + + + + + 控件基类(抽象类) + + + + + 控件基类(抽象类) + + + + + 构造函数 + + + + + 添加服务器AJAX属性 + + 属性列表 + + + + 添加客户端AJAX属性 + + 属性列表 + + + + 添加Gzip压缩属性 + + 属性列表 + + + + 标示是否初始化完成 + + + + + 页面初始化事件 + + + + + + 在备份初始化属性之前修改属性值 + + 此时对控件的属性做修改是安全的: + 1. 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 + 2. 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 F_STATE 已经恢复完毕 + + + + + 重载 RenderControl,为了向子控件公开 RenderBeginTag 和 RenderEndTag 两个方法 + + 服务器控件输出流 + + + + 渲染控件的开始标签 + + 输出流 + + + + 渲染控件的结束标签 + + 输出流 + + + + 渲染 HTML 之前调用 + + + + + + 渲染 HTML 之前调用(计算被修改属性列表之前调用,可以在此修改属性) + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 获取FState的JS变量 + + + + + + 回发过程中此属性是否被改变 + 如果是客户端可以改变的属性,仅在服务器端改变时才返回 true, + (如果仅是客户端改变,则返回 false,因为客户端改变的属性不需要再输出相应的 JavaScript 脚本) + + + + + + + 回发过程中这些属性是否被改变 + 只要任何属性被改变,就返回 true + + + + + + + 从JObject恢复控件的属性 + + 对象属性的JObject形式 + + + + 将控件的属性列表转化为JObject对象 + + 属性列表 + 属性列表的JObject形式 + + + + AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + + + + + + AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + + + + + + 添加CSS样式 + + 键 + CSS内容 + + + + 删除CSS样式 + + 键 + + + + 向页面添加控件无关脚本 + + 客户端脚本 + + + + 向页面添加控件无关脚本 + + 客户端脚本 + 脚本层级 + + + + 添加控件相关脚本 + + 客户端脚本 + + + + 获取 Hidden 属性改变的 JavaScript 脚本 + 有些控件可能需要特别的逻辑,因此这里为虚函数(比如 Window 控件、Tab 控件) + + 客户端脚本 + + + + 获取 Enabled 属性改变的 JavaScript 脚本 + 有些控件可能需要特别的逻辑,因此这里为虚函数 + + 客户端脚本 + + + + 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','');) + + 客户端脚本 + + + + 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + + 事件参数 + 客户端脚本 + + + + 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + + 事件参数 + 是否启用AJAX + 客户端脚本 + + + + 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + + 隐藏字段ID + 隐藏字段值 + + + + + 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + + 隐藏字段ID + 隐藏字段值 + 隐藏字段所在的页面对象(JavaScript实例window) + 客户端脚本 + + + + 添加Attributes中的属性值 + + HtmlNodeBuilder对象 + + + + 获取客户端事件处理函数 + + + + + + + + + 向 OB 中添加客户端事件处理函数 + + + + + + + + FState用来在服务器和客户端之间持久化控件状态。 + + + + + 目前Gzippped的属性支持JObject/JArray/String类型 + + + + + JavaScript中使用ID(比如:x0, x1) + + + + + 获取控件实例的JavaScript代码(比如:F('RegionPanel1_Button1')) + + + + + 是否向页面输出控件的外部容器(默认:true) + 否:只创建Javascript对象而不添加到页面中 + 是:创建Javascript对象,并添加到页面中,页面上添加占位符 + + + + + 参数对象创建器 + + + + + 从 HTTP 请求中恢复当前控件的状态 + 比如当前请求 Request.Form["F_STATE"] = {"btnClientClick":{"OnClientClick":"F.util.alert(\"This is an alert dialog\",\"\",Ext.MessageBox.INFO,'');"},"btnPressed":{"Pressed":false}} + 并且当前控件的 ClientID 是 "btnPressed",则返回值为 JObject 对象 {"Pressed":false} + + + + + 此控件所在的集合分组,只在BaseCollection中使用 + + + + + 不支持此属性(禁用控件默认的ViewState) + + + + + 控件的客户端ID(比如:RegionPanel1_Button1) + + + + + 控件外部容器的客户端ID(比如:Button1_wrapper) + + + + + 产品名称 + + + + + 产品版本 + + + + + HTML标签属性 + + + + + 控件ID + + + + + [AJAX属性]是否可用 + + + + + 指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + + + + + 只读属性,指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + + + + + [AJAX属性]是否隐藏控件 + + + + + 隐藏模式 + + + + + 是否启用AJAX + + + + + 是否启用FState压缩(默认为false) + + + + + 是否启用Ajax正在加载提示 + + + + + Ajax正在加载提示的类型 + + + + + 是否处于FineUI的AJAX回发过程 + + + + + 客户端事件列表 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 使控件获得焦点 + + + + + 使控件获得焦点,并选中控件中的文本内容 + + 是否选中控件中的文本内容 + + + + 使控件获得焦点,并选中控件中的文本内容 + + 是否选中控件中的文本内容 + 使控件获得焦点前延迟的毫秒数 + + + + 获得使控件获得焦点的脚本 + + JS脚本 + + + + 获得使控件获得焦点,并选中控件中的文本内容的脚本 + + 是否选中控件中的文本内容 + JS脚本 + + + + 获得使控件获得焦点,并选中控件中的文本内容的脚本 + + 是否选中控件中的文本内容 + 使控件获得焦点前延迟的毫秒数 + JS脚本 + + + + 为已经添加到OB中的Style增加新的样式 + 注意:这个key-value不会保存到属性CssStyle中 + + + + + + + 页面加载后立即获得焦点 + + + + + [AJAX属性]控件样式类名 + + + + + [AJAX属性]控件样式 + + + + + 外边距 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 获取当前控件的父容器 + + + + + + 宽度 + + + + + 高度 + + + + + 锚点值(当父容器的Layout=Anchor时有效) + + + + + 列的宽度(当父容器的Layout=Column时有效) + + + + + 行的宽度(当父容器的Layout=Row时有效) + + + + + 绝对定位的X坐标(当父容器的Layout=Absolute时有效) + + + + + 绝对定位的Y坐标(当父容器的Layout=Absolute时有效) + + + + + 表格列数(当父容器的Layout=Table时有效) + + + + + 表格合并行(当父容器的Layout=Table时有效) + + + + + 表格合并列(当父容器的Layout=Table时有效) + + + + + 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + + + + + 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + + + + + 内边距(当本容器的Layout=VBox或者HBox时有效) + + + + + 子控件的外边距(当本容器的Layout=VBox或者HBox时有效) + + + + + 控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效) + + + + + 是否显示分隔条 + + + + + 区域所在的位置 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 构造函数 + + + + + 渲染控件的开始标签 + + 输出流 + + + + 渲染控件的结束标签 + + 输出流 + + + + 创建子控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 刷新面板中的IFrame页面 + + + + + 获取刷新面板中IFrame页面的客户端脚本 + + 客户端脚本 + + + + 重置面板中所有字段 + + + + + 获取重置面板中所有字段的客户端脚本 + + + + + + 清空面板内表单字段的改变状态 + + 客户端脚本 + + + + 是否自动滚动 + + + + + 启用自定义的圆角边框 + + + + + 内容区域的样式 + + + + + 内容区域的内边距,字符串类型,可以设置上下左右的内边距,比如'0px 5px'或'5px 10px 2px 2px' + + + + + 是否显示边框 + + + + + 工具栏控件 + + + + + 子控件 + + + + + 子控件 + + + + + [AJAX属性]IFrame的地址 + + + + + IFrame的名称 + + + + + 是否启用IFrame + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 处理回发事件 + + 事件参数 + + + + 触发折叠事件 + + 事件参数 + + + + 触发展开事件 + + 事件参数 + + + + 是否启用折叠事件 + + + + + 是否启用展开事件 + + + + + 是否展开 + + + + + [AJAX属性]是否折叠 + + + + + 是否允许折叠 + + + + + [AJAX属性]标题 + + + + + 是否显示标题栏 + + + + + 图标地址 + + + + + 图标 + + + + + 折叠事件 + + + + + 展开事件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 标签的宽度 + + + + + 标签与字段的分隔符 + + + + + 距离右侧边界的宽度 + + + + + 标签的位置 + + + + + 表单中消息的位置 + + + + + 表单文本输入框字段基类(抽象类) + + + + + 表单文本输入框字段基类(抽象类) + + + + + 表单字段基类(抽象类) + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 重置此字段的值(比如用来清空FileUpload的内容) + + + + + 获取重置此字段的客户端脚本 + + + + + + 获取此字段值的客户端脚本(注意返回的脚本不带结束分号) + + 客户端脚本 + + + + 设置字段验证失败的提示信息 + + 提示信息 + + + + 清除验证失败的提示信息 + + + + + 获取字段验证失败提示信息的客户端脚本 + + 提示信息 + 客户端脚本 + + + + 获取清除验证失败提示信息的客户端脚本 + + 客户端脚本 + + + + 是否显示标签 + + + + + 是否显示空白的标签 + + + + + [AJAX属性]标签文本 + + + + + 在标签后面显示红色的星号(用来标识必填项) + + + + + [AJAX属性]表单控件的只读状态 + + + + + Tab按键的跳转顺序 + + + + + 表单中字段与标签的分隔符 + + + + + 距离右侧边界的宽度 + + + + + 标签的宽度 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 是否必填项 + + + + + 为空时提示信息 + + + + + 最大长度 + + + + + 超过最大长度时提示信息 + + + + + 最小长度 + + + + + 少于最小长度时提示信息 + + + + + RegexPattern + + + + + 正则表达式 + + + + + 不满足正则表达式时提示信息 + + + + + 正则表达式是否忽略大小写 + + + + + 需要比较的控件ID + + + + + 需要比较的值 + + + + + 比较操作符 + + + + + 比较的类型 + + + + + 不满足比较条件时提示信息 + + + + + 下一步获得焦点的控件(响应回车事件) + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发文本改变事件 + + 事件参数 + + + + 处理回发事件 + + 事件参数 + + + + 触发失去焦点事件 + + 事件参数 + + + + 文本框为空时显示的文本 + + + + + [AJAX属性]文本 + + + + + 是否自动回发(文本值改变) + + + + + 启用失去焦点事件 + + + + + 文本改变事件(需要启用AutoPostBack) + + + + + 失去焦点事件(需要启用EnableBlurEvent) + + + + + 客户端事件 + + + + + 构造函数 + + + + + 构造函数 + + 客户端事件名称 + 客户端事件处理函数名称 + + + + 客户端事件名称 + + + + + 客户端事件处理函数名称 + + + + + 客户端事件集合 + + + + + 获取客户端处理函数名称 + + 事件名称 + 客户端处理函数名称 + + + + 按钮类型 + + + + + 普通按钮(默认值) + + + + + 提交按钮(会为生成的input标签添加type="submit") + + + + + 重置按钮(会为生成的input标签添加type="reset") + + + + + 按钮类型名称 + + + + + 表格可编辑字段的类型 + + + + + 自动(默认值) + + + + + 字符串 + + + + + 整型 + + + + + 浮点数 + + + + + 布尔型 + + + + + 日期 + + + + + 表格可编辑字段的类型名称 + + + + + 表格可编辑字段渲染器 + + + + + 无(默认值) + + + + + 首字母大写 + + + + + 日期(RendererArgument来指定日期格式化字符串) + RendererArgument: + 1. d 月中的某一天。一位数的日期没有前导零。 + 2. dd 月中的某一天。一位数的日期有一个前导零。 + 3. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 + 4. dddd 周中某天的完整名称,在 DayNames 中定义。 + 5. M 月份数字。一位数的月份没有前导零。 + 6. MM 月份数字。一位数的月份有一个前导零。 + 7. MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 + 8. MMMM 月份的完整名称,在 MonthNames 中定义。 + 9. y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 + 10. yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 + 11. yyyy 包括纪元的四位数的年份。 + + + + + 截断字符串并添加省略号(RendererArgument来指定最大长度) + + + + + 文件大小 + + + + + HTML编码 + + + + + HTML解码 + + + + + 转化为小写字符 + + + + + 转化为大写字符 + + + + + 换行符转换为HTML标签
+
+
+ + + 删除所有的脚本标签 + + + + + 删除所有的标签 + + + + + 清除字符串两端的空白字符 + + + + + 表格可编辑字段渲染器名称 + + + + + 表单客户端验证提示消息的类型 + + + + + 浮动提示(默认值) + + + + + 使用HTML标签的title属性 + + + + + 在字段下面通过一个div层来显示消息 + + + + + 在字段右侧显示一个错误图标 + + + + + 不显示错误信息 + + + + + 提示消息的类型名称 + + + + + 表格合计行的位置 + + + + + 紧跟数据行(默认值) + + + + + 表格顶部 + + + + + 表格底部 + + + + + 表格合计行的位置名称 + + + + + 工具栏的排列位置 + + + + + 靠右 + + + + + 靠左(默认值) + + + + + 居中 + + + + + 工具栏的排列位置名称 + + + + + FineUI控件的状态保持机制 + + + + + 构造函数 + + 控件 + + + + 增加在当前请求中改变的属性列表(控件可以自己手工设置,以便保存在 F_STATE 中) + + + + + + 备份初始化属性值 + 在输出 AJAX 回发之前,会拿这个初始属性值和当时属性值做对比,以确定这些属性是否被用户改变 + + + + + 备份 PostData 的属性值(也就是在客户端改变的属性值) + + + + + + 计算被修改的属性列表(更新 ModifiedProperties 和 ClientPropertiesModifiedInServer 两个值) + 这个需要在 OnPreRender 中调用,在页面第一次加载,正常的回发以及AJAX回发时都要调用 + + + + + 页面第一次加载至今改变过的属性列表总和(其中可能经历多次正常的页面回发和局部 AJAX 回发) + + + + + + 获取设置 FState 属性值 + + + + + + + 当前请求中改变的属性列表,既包含服务器端改变的属性,也包含客户端改变的属性 + + + + + 客户端可以改变的属性在服务器端被改变了 + + + + + Extjs和.Net之间的日期格式转换 + + + + + 创建Javascript的Date对象字符串 + + 日期对象 + 日期的客户端脚本形式 + + + + 将.Net日期格式字符串转换为ExtJS的日期格式字符串 + + .Net日期格式字符串 + ExtJS的日期格式字符串 + + + + 母版页ContentPlaceHolder控件的容器 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 取得第一个子控件 + + + + + + + 不向页面输出控件的外部容器 + + + + + 自定义事件参数 + + + + + 构造函数 + + 事件参数 + + + + 事件参数 + + + + + 复选框/单选框/复选框菜单按钮的事件参数 + + + + + 构造函数 + + 是否选中 + + + + 是否选中 + + + + + 树节点展开事件参数 + + + + + 构造函数 + + 树节点 + + + + 构造函数 + + 树节点 + 树节点的数据源 + + + + 树实例 + + + + + 树节点ID + + + + + 树节点的数据源 + + + + + 树节点预绑定事件参数 + + + + + 构造函数 + + 树节点的数据源 + + + + 是否取消添加本节点 + + + + + 树节点的数据源 + + + + + 控件集合 + + + + + 控件集合 + + + + + 构造函数 + + 父控件实例 + + + + 向集合中插入一个元素 + + + + + + + 删除集合中的一个元素 + + + + + + 清空集合 + + + + + 获取类型 T 在父控件子集中的开始位置 + + + + + + 构造函数 + + 父控件实例 + + + + 控件集合 + + + + + 构造函数 + + 父控件实例 + + + + 控件内部不允许存在非标签形式的字符串 + + + + + 不允许空白字符 + + + + + + 忽略游离于标签外的字符串 + + + + + + 支持页分析器生成控件及其包含的子控件 + + + + + 允许空白字符 + + + + + + 不忽略游离于标签外的字符串 + + + + + + 全局配置参数 + + + + + 初始化section对象,如果在Web.config中没有定义,则初始化为空对象 + + + + + Runtime Section + + + + + Refer:http://flimflan.com/blog/AccessingWebconfigAtDesignTimeInNET20.aspx + + + + + + + 主题 + + + + + 语言 + + + + + 表单中消息的位置 + + + + + 表单中标签的位置 + + + + + 表单中字段距离右侧的宽度 + + + + + 表单中字段标签的宽度 + + + + + 表单中字段与标签的分隔符 + + + + + AJAX超时时间(单位:秒,默认:60s) + + + + + 是否启用Ajax + + + + + 是否启用AJAX提示 + + + + + AJAX提示的类型 + + + + + DEBUG 模式 + + + + + 图标的根路径 + + + + + JS库的根路径 + + + + + 自定义样式的根路径 + + + + + 自定义样式的名称 + + + + + 是否启用FState压缩 + + + + + 是否向页面输出IE=edge标识 + + + + + 是否启用表单改变确认对话框 + + + + + 产品名称 + + + + + 当前版本 + + + + + 为设计时提供集合编辑器 + + + + + 构造函数 + + 控件类型 + + + + 获取此集合编辑器可包含的数据类型 + + 类型集合 + + + + 为设计时提供的菜单项集合编辑器 + + + + + 构造函数 + + 控件类型 + + + + 获取此集合编辑器可包含的数据类型 + + 类型集合 + + + + 为设计时提供的工具栏项集合编辑器 + + + + + 构造函数 + + 控件类型 + + + + 获取此集合编辑器可包含的数据类型 + + 类型集合 + + + + 为设计时提供的表格列编辑器集合编辑器 + + + + + 构造函数 + + 控件类型 + + + + 获取此集合编辑器可包含的数据类型 + + 类型集合 + + + + 相比较的数据类型(用于表单控件的客户端验证) + + + + + 浮点数 + + + + + 整形 + + + + + 字符串(默认值) + + + + + 隐藏的模式 + + + + + 通过设置CSS属性visibility来控制显示隐藏 + + + + + 通过设置CSS属性top/left来控制显示隐藏 + + + + + 通过设置CSS属性display来控制显示隐藏(默认值) + + + + + 隐藏的模式名称 + + + + + 预定义图标 + + + + + None + + + + + Accept + + + + + Add + + + + + Anchor + + + + + Application + + + + + ApplicationAdd + + + + + ApplicationCascade + + + + + ApplicationDelete + + + + + ApplicationDouble + + + + + ApplicationEdit + + + + + ApplicationError + + + + + ApplicationForm + + + + + ApplicationFormAdd + + + + + ApplicationFormDelete + + + + + ApplicationFormEdit + + + + + ApplicationFormMagnify + + + + + ApplicationGet + + + + + ApplicationGo + + + + + ApplicationHome + + + + + ApplicationKey + + + + + ApplicationLightning + + + + + ApplicationLink + + + + + ApplicationOsx + + + + + ApplicationOsxAdd + + + + + ApplicationOsxCascade + + + + + ApplicationOsxDelete + + + + + ApplicationOsxDouble + + + + + ApplicationOsxError + + + + + ApplicationOsxGet + + + + + ApplicationOsxGo + + + + + ApplicationOsxHome + + + + + ApplicationOsxKey + + + + + ApplicationOsxLightning + + + + + ApplicationOsxLink + + + + + ApplicationOsxSplit + + + + + ApplicationOsxStart + + + + + ApplicationOsxStop + + + + + ApplicationOsxTerminal + + + + + ApplicationPut + + + + + ApplicationSideBoxes + + + + + ApplicationSideContract + + + + + ApplicationSideExpand + + + + + ApplicationSideList + + + + + ApplicationSideTree + + + + + ApplicationSplit + + + + + ApplicationStart + + + + + ApplicationStop + + + + + ApplicationTileHorizontal + + + + + ApplicationTileVertical + + + + + ApplicationViewColumns + + + + + ApplicationViewDetail + + + + + ApplicationViewGallery + + + + + ApplicationViewIcons + + + + + ApplicationViewList + + + + + ApplicationViewTile + + + + + ApplicationXp + + + + + ApplicationXpTerminal + + + + + ArrowBranch + + + + + ArrowDivide + + + + + ArrowDown + + + + + ArrowEw + + + + + ArrowIn + + + + + ArrowInout + + + + + ArrowInLonger + + + + + ArrowJoin + + + + + ArrowLeft + + + + + ArrowMerge + + + + + ArrowNe + + + + + ArrowNs + + + + + ArrowNsew + + + + + ArrowNw + + + + + ArrowNwNeSwSe + + + + + ArrowNwSe + + + + + ArrowOut + + + + + ArrowOutLonger + + + + + ArrowRedo + + + + + ArrowRefresh + + + + + ArrowRefreshSmall + + + + + ArrowRight + + + + + ArrowRotateAnticlockwise + + + + + ArrowRotateClockwise + + + + + ArrowSe + + + + + ArrowSw + + + + + ArrowSwitch + + + + + ArrowSwitchBluegreen + + + + + ArrowSwNe + + + + + ArrowTurnLeft + + + + + ArrowTurnRight + + + + + ArrowUndo + + + + + ArrowUp + + + + + AsteriskOrange + + + + + AsteriskRed + + + + + AsteriskYellow + + + + + Attach + + + + + AwardStarAdd + + + + + AwardStarBronze1 + + + + + AwardStarBronze2 + + + + + AwardStarBronze3 + + + + + AwardStarDelete + + + + + AwardStarGold1 + + + + + AwardStarGold2 + + + + + AwardStarGold3 + + + + + AwardStarSilver1 + + + + + AwardStarSilver2 + + + + + AwardStarSilver3 + + + + + Basket + + + + + BasketAdd + + + + + BasketDelete + + + + + BasketEdit + + + + + BasketError + + + + + BasketGo + + + + + BasketPut + + + + + BasketRemove + + + + + Bell + + + + + BellAdd + + + + + BellDelete + + + + + BellError + + + + + BellGo + + + + + BellLink + + + + + BellSilver + + + + + BellSilverStart + + + + + BellSilverStop + + + + + BellStart + + + + + BellStop + + + + + Bin + + + + + BinClosed + + + + + BinEmpty + + + + + Blank + + + + + Bomb + + + + + Book + + + + + Bookmark + + + + + BookmarkAdd + + + + + BookmarkDelete + + + + + BookmarkEdit + + + + + BookmarkError + + + + + BookmarkGo + + + + + BookAdd + + + + + BookAddresses + + + + + BookAddressesAdd + + + + + BookAddressesDelete + + + + + BookAddressesEdit + + + + + BookAddressesError + + + + + BookAddressesKey + + + + + BookDelete + + + + + BookEdit + + + + + BookError + + + + + BookGo + + + + + BookKey + + + + + BookLink + + + + + BookMagnify + + + + + BookNext + + + + + BookOpen + + + + + BookOpenMark + + + + + BookPrevious + + + + + BookRed + + + + + BookTabs + + + + + BorderAll + + + + + BorderBottom + + + + + BorderDraw + + + + + BorderInner + + + + + BorderInnerHorizontal + + + + + BorderInnerVertical + + + + + BorderLeft + + + + + BorderNone + + + + + BorderOuter + + + + + BorderRight + + + + + BorderTop + + + + + Box + + + + + BoxError + + + + + BoxPicture + + + + + BoxWorld + + + + + Brick + + + + + Bricks + + + + + BrickAdd + + + + + BrickDelete + + + + + BrickEdit + + + + + BrickError + + + + + BrickGo + + + + + BrickLink + + + + + BrickMagnify + + + + + Briefcase + + + + + Bug + + + + + BugAdd + + + + + BugDelete + + + + + BugEdit + + + + + BugError + + + + + BugFix + + + + + BugGo + + + + + BugLink + + + + + BugMagnify + + + + + Build + + + + + Building + + + + + BuildingAdd + + + + + BuildingDelete + + + + + BuildingEdit + + + + + BuildingError + + + + + BuildingGo + + + + + BuildingKey + + + + + BuildingLink + + + + + BuildCancel + + + + + BulletAdd + + + + + BulletArrowBottom + + + + + BulletArrowDown + + + + + BulletArrowTop + + + + + BulletArrowUp + + + + + BulletBlack + + + + + BulletBlue + + + + + BulletConnect + + + + + BulletCross + + + + + BulletDatabase + + + + + BulletDatabaseYellow + + + + + BulletDelete + + + + + BulletDisk + + + + + BulletEarth + + + + + BulletEdit + + + + + BulletEject + + + + + BulletError + + + + + BulletFeed + + + + + BulletGet + + + + + BulletGo + + + + + BulletGreen + + + + + BulletHome + + + + + BulletKey + + + + + BulletLeft + + + + + BulletLightning + + + + + BulletMagnify + + + + + BulletMinus + + + + + BulletOrange + + + + + BulletPageWhite + + + + + BulletPicture + + + + + BulletPink + + + + + BulletPlus + + + + + BulletPurple + + + + + BulletRed + + + + + BulletRight + + + + + BulletShape + + + + + BulletSparkle + + + + + BulletStar + + + + + BulletStart + + + + + BulletStop + + + + + BulletStopAlt + + + + + BulletTick + + + + + BulletToggleMinus + + + + + BulletTogglePlus + + + + + BulletWhite + + + + + BulletWrench + + + + + BulletWrenchRed + + + + + BulletYellow + + + + + Button + + + + + Cake + + + + + CakeOut + + + + + CakeSliced + + + + + Calculator + + + + + CalculatorAdd + + + + + CalculatorDelete + + + + + CalculatorEdit + + + + + CalculatorError + + + + + CalculatorLink + + + + + Calendar + + + + + CalendarAdd + + + + + CalendarDelete + + + + + CalendarEdit + + + + + CalendarLink + + + + + CalendarSelectDay + + + + + CalendarSelectNone + + + + + CalendarSelectWeek + + + + + CalendarStar + + + + + CalendarViewDay + + + + + CalendarViewMonth + + + + + CalendarViewWeek + + + + + Camera + + + + + CameraAdd + + + + + CameraConnect + + + + + CameraDelete + + + + + CameraEdit + + + + + CameraError + + + + + CameraGo + + + + + CameraLink + + + + + CameraMagnify + + + + + CameraPicture + + + + + CameraSmall + + + + + CameraStart + + + + + CameraStop + + + + + Cancel + + + + + Car + + + + + Cart + + + + + CartAdd + + + + + CartDelete + + + + + CartEdit + + + + + CartError + + + + + CartFull + + + + + CartGo + + + + + CartMagnify + + + + + CartPut + + + + + CartRemove + + + + + CarAdd + + + + + CarDelete + + + + + CarError + + + + + CarRed + + + + + CarStart + + + + + CarStop + + + + + Cd + + + + + Cdr + + + + + CdrAdd + + + + + CdrBurn + + + + + CdrCross + + + + + CdrDelete + + + + + CdrEdit + + + + + CdrEject + + + + + CdrError + + + + + CdrGo + + + + + CdrMagnify + + + + + CdrPlay + + + + + CdrStart + + + + + CdrStop + + + + + CdrStopAlt + + + + + CdrTick + + + + + CdAdd + + + + + CdBurn + + + + + CdDelete + + + + + CdEdit + + + + + CdEject + + + + + CdGo + + + + + CdMagnify + + + + + CdPlay + + + + + CdStop + + + + + CdStopAlt + + + + + CdTick + + + + + ChartBar + + + + + ChartBarAdd + + + + + ChartBarDelete + + + + + ChartBarEdit + + + + + ChartBarError + + + + + ChartBarLink + + + + + ChartCurve + + + + + ChartCurveAdd + + + + + ChartCurveDelete + + + + + ChartCurveEdit + + + + + ChartCurveError + + + + + ChartCurveGo + + + + + ChartCurveLink + + + + + ChartLine + + + + + ChartLineAdd + + + + + ChartLineDelete + + + + + ChartLineEdit + + + + + ChartLineError + + + + + ChartLineLink + + + + + ChartOrganisation + + + + + ChartOrganisationAdd + + + + + ChartOrganisationDelete + + + + + ChartOrgInverted + + + + + ChartPie + + + + + ChartPieAdd + + + + + ChartPieDelete + + + + + ChartPieEdit + + + + + ChartPieError + + + + + ChartPieLightning + + + + + ChartPieLink + + + + + CheckError + + + + + Clipboard + + + + + Clock + + + + + ClockAdd + + + + + ClockDelete + + + + + ClockEdit + + + + + ClockError + + + + + ClockGo + + + + + ClockLink + + + + + ClockPause + + + + + ClockPlay + + + + + ClockRed + + + + + ClockStart + + + + + ClockStop + + + + + ClockStop2 + + + + + Cmy + + + + + Cog + + + + + CogAdd + + + + + CogDelete + + + + + CogEdit + + + + + CogError + + + + + CogGo + + + + + CogStart + + + + + CogStop + + + + + Coins + + + + + CoinsAdd + + + + + CoinsDelete + + + + + Color + + + + + ColorSwatch + + + + + ColorWheel + + + + + Comment + + + + + Comments + + + + + CommentsAdd + + + + + CommentsDelete + + + + + CommentAdd + + + + + CommentDelete + + + + + CommentDull + + + + + CommentEdit + + + + + CommentPlay + + + + + CommentRecord + + + + + Compass + + + + + Compress + + + + + Computer + + + + + ComputerAdd + + + + + ComputerConnect + + + + + ComputerDelete + + + + + ComputerEdit + + + + + ComputerError + + + + + ComputerGo + + + + + ComputerKey + + + + + ComputerLink + + + + + ComputerMagnify + + + + + ComputerOff + + + + + ComputerStart + + + + + ComputerStop + + + + + ComputerWrench + + + + + Connect + + + + + Contrast + + + + + ContrastDecrease + + + + + ContrastHigh + + + + + ContrastIncrease + + + + + ContrastLow + + + + + Controller + + + + + ControllerAdd + + + + + ControllerDelete + + + + + ControllerError + + + + + ControlAdd + + + + + ControlAddBlue + + + + + ControlBlank + + + + + ControlBlankBlue + + + + + ControlEject + + + + + ControlEjectBlue + + + + + ControlEnd + + + + + ControlEndBlue + + + + + ControlEqualizer + + + + + ControlEqualizerBlue + + + + + ControlFastforward + + + + + ControlFastforwardBlue + + + + + ControlPause + + + + + ControlPauseBlue + + + + + ControlPlay + + + + + ControlPlayBlue + + + + + ControlPower + + + + + ControlPowerBlue + + + + + ControlRecord + + + + + ControlRecordBlue + + + + + ControlRemove + + + + + ControlRemoveBlue + + + + + ControlRepeat + + + + + ControlRepeatBlue + + + + + ControlRewind + + + + + ControlRewindBlue + + + + + ControlStart + + + + + ControlStartBlue + + + + + ControlStop + + + + + ControlStopBlue + + + + + Creditcards + + + + + Cross + + + + + Css + + + + + CssAdd + + + + + CssDelete + + + + + CssError + + + + + CssGo + + + + + CssValid + + + + + Cup + + + + + CupAdd + + + + + CupBlack + + + + + CupDelete + + + + + CupEdit + + + + + CupError + + + + + CupGo + + + + + CupGreen + + + + + CupKey + + + + + CupLink + + + + + CupTea + + + + + Cursor + + + + + CursorSmall + + + + + Cut + + + + + CutRed + + + + + Database + + + + + DatabaseAdd + + + + + DatabaseConnect + + + + + DatabaseCopy + + + + + DatabaseDelete + + + + + DatabaseEdit + + + + + DatabaseError + + + + + DatabaseGear + + + + + DatabaseGo + + + + + DatabaseKey + + + + + DatabaseLightning + + + + + DatabaseLink + + + + + DatabaseRefresh + + + + + DatabaseSave + + + + + DatabaseStart + + + + + DatabaseStop + + + + + DatabaseTable + + + + + DatabaseWrench + + + + + DatabaseYellow + + + + + DatabaseYellowStart + + + + + DatabaseYellowStop + + + + + Date + + + + + DateAdd + + + + + DateDelete + + + + + DateEdit + + + + + DateError + + + + + DateGo + + + + + DateLink + + + + + DateMagnify + + + + + DateNext + + + + + DatePrevious + + + + + Decline + + + + + Delete + + + + + DeviceStylus + + + + + Disconnect + + + + + Disk + + + + + DiskBlack + + + + + DiskBlackError + + + + + DiskBlackMagnify + + + + + DiskDownload + + + + + DiskEdit + + + + + DiskError + + + + + DiskMagnify + + + + + DiskMultiple + + + + + DiskUpload + + + + + Door + + + + + DoorError + + + + + DoorIn + + + + + DoorOpen + + + + + DoorOut + + + + + Drink + + + + + DrinkEmpty + + + + + DrinkRed + + + + + Drive + + + + + DriveAdd + + + + + DriveBurn + + + + + DriveCd + + + + + DriveCdr + + + + + DriveCdEmpty + + + + + DriveDelete + + + + + DriveDisk + + + + + DriveEdit + + + + + DriveError + + + + + DriveGo + + + + + DriveKey + + + + + DriveLink + + + + + DriveMagnify + + + + + DriveNetwork + + + + + DriveNetworkError + + + + + DriveNetworkStop + + + + + DriveRename + + + + + DriveUser + + + + + DriveWeb + + + + + Dvd + + + + + DvdAdd + + + + + DvdDelete + + + + + DvdEdit + + + + + DvdError + + + + + DvdGo + + + + + DvdKey + + + + + DvdLink + + + + + DvdStart + + + + + DvdStop + + + + + EjectBlue + + + + + EjectGreen + + + + + Email + + + + + EmailAdd + + + + + EmailAttach + + + + + EmailDelete + + + + + EmailEdit + + + + + EmailError + + + + + EmailGo + + + + + EmailLink + + + + + EmailMagnify + + + + + EmailOpen + + + + + EmailOpenImage + + + + + EmailStar + + + + + EmailStart + + + + + EmailStop + + + + + EmailTransfer + + + + + EmoticonEvilgrin + + + + + EmoticonGrin + + + + + EmoticonHappy + + + + + EmoticonSmile + + + + + EmoticonSurprised + + + + + EmoticonTongue + + + + + EmoticonUnhappy + + + + + EmoticonWaii + + + + + EmoticonWink + + + + + Erase + + + + + Error + + + + + ErrorAdd + + + + + ErrorDelete + + + + + ErrorGo + + + + + Exclamation + + + + + Eye + + + + + Eyes + + + + + Feed + + + + + FeedAdd + + + + + FeedDelete + + + + + FeedDisk + + + + + FeedEdit + + + + + FeedError + + + + + FeedGo + + + + + FeedKey + + + + + FeedLink + + + + + FeedMagnify + + + + + FeedStar + + + + + Female + + + + + Film + + + + + FilmAdd + + + + + FilmDelete + + + + + FilmEdit + + + + + FilmEject + + + + + FilmError + + + + + FilmGo + + + + + FilmKey + + + + + FilmLink + + + + + FilmMagnify + + + + + FilmSave + + + + + FilmStar + + + + + FilmStart + + + + + FilmStop + + + + + Find + + + + + FingerPoint + + + + + FlagAd + + + + + FlagAe + + + + + FlagAf + + + + + FlagAg + + + + + FlagAi + + + + + FlagAl + + + + + FlagAm + + + + + FlagAn + + + + + FlagAo + + + + + FlagAr + + + + + FlagAs + + + + + FlagAt + + + + + FlagAu + + + + + FlagAw + + + + + FlagAx + + + + + FlagAz + + + + + FlagBa + + + + + FlagBb + + + + + FlagBd + + + + + FlagBe + + + + + FlagBf + + + + + FlagBg + + + + + FlagBh + + + + + FlagBi + + + + + FlagBj + + + + + FlagBlack + + + + + FlagBlue + + + + + FlagBm + + + + + FlagBn + + + + + FlagBo + + + + + FlagBr + + + + + FlagBs + + + + + FlagBt + + + + + FlagBv + + + + + FlagBw + + + + + FlagBy + + + + + FlagBz + + + + + FlagCa + + + + + FlagCatalonia + + + + + FlagCc + + + + + FlagCd + + + + + FlagCf + + + + + FlagCg + + + + + FlagCh + + + + + FlagChecked + + + + + FlagCi + + + + + FlagCk + + + + + FlagCl + + + + + FlagCm + + + + + FlagCn + + + + + FlagCo + + + + + FlagCr + + + + + FlagCs + + + + + FlagCu + + + + + FlagCv + + + + + FlagCx + + + + + FlagCy + + + + + FlagCz + + + + + FlagDe + + + + + FlagDj + + + + + FlagDk + + + + + FlagDm + + + + + FlagDo + + + + + FlagDz + + + + + FlagEc + + + + + FlagEe + + + + + FlagEg + + + + + FlagEh + + + + + FlagEngland + + + + + FlagEr + + + + + FlagEs + + + + + FlagEt + + + + + FlagEuropeanunion + + + + + FlagFam + + + + + FlagFi + + + + + FlagFj + + + + + FlagFk + + + + + FlagFm + + + + + FlagFo + + + + + FlagFr + + + + + FlagFrance + + + + + FlagGa + + + + + FlagGb + + + + + FlagGd + + + + + FlagGe + + + + + FlagGf + + + + + FlagGg + + + + + FlagGh + + + + + FlagGi + + + + + FlagGl + + + + + FlagGm + + + + + FlagGn + + + + + FlagGp + + + + + FlagGq + + + + + FlagGr + + + + + FlagGreen + + + + + FlagGrey + + + + + FlagGs + + + + + FlagGt + + + + + FlagGu + + + + + FlagGw + + + + + FlagGy + + + + + FlagHk + + + + + FlagHm + + + + + FlagHn + + + + + FlagHr + + + + + FlagHt + + + + + FlagHu + + + + + FlagId + + + + + FlagIe + + + + + FlagIl + + + + + FlagIn + + + + + FlagIo + + + + + FlagIq + + + + + FlagIr + + + + + FlagIs + + + + + FlagIt + + + + + FlagJm + + + + + FlagJo + + + + + FlagJp + + + + + FlagKe + + + + + FlagKg + + + + + FlagKh + + + + + FlagKi + + + + + FlagKm + + + + + FlagKn + + + + + FlagKp + + + + + FlagKr + + + + + FlagKw + + + + + FlagKy + + + + + FlagKz + + + + + FlagLa + + + + + FlagLb + + + + + FlagLc + + + + + FlagLi + + + + + FlagLk + + + + + FlagLr + + + + + FlagLs + + + + + FlagLt + + + + + FlagLu + + + + + FlagLv + + + + + FlagLy + + + + + FlagMa + + + + + FlagMc + + + + + FlagMd + + + + + FlagMe + + + + + FlagMg + + + + + FlagMh + + + + + FlagMk + + + + + FlagMl + + + + + FlagMm + + + + + FlagMn + + + + + FlagMo + + + + + FlagMp + + + + + FlagMq + + + + + FlagMr + + + + + FlagMs + + + + + FlagMt + + + + + FlagMu + + + + + FlagMv + + + + + FlagMw + + + + + FlagMx + + + + + FlagMy + + + + + FlagMz + + + + + FlagNa + + + + + FlagNc + + + + + FlagNe + + + + + FlagNf + + + + + FlagNg + + + + + FlagNi + + + + + FlagNl + + + + + FlagNo + + + + + FlagNp + + + + + FlagNr + + + + + FlagNu + + + + + FlagNz + + + + + FlagOm + + + + + FlagOrange + + + + + FlagPa + + + + + FlagPe + + + + + FlagPf + + + + + FlagPg + + + + + FlagPh + + + + + FlagPink + + + + + FlagPk + + + + + FlagPl + + + + + FlagPm + + + + + FlagPn + + + + + FlagPr + + + + + FlagPs + + + + + FlagPt + + + + + FlagPurple + + + + + FlagPw + + + + + FlagPy + + + + + FlagQa + + + + + FlagRe + + + + + FlagRed + + + + + FlagRo + + + + + FlagRs + + + + + FlagRu + + + + + FlagRw + + + + + FlagSa + + + + + FlagSb + + + + + FlagSc + + + + + FlagScotland + + + + + FlagSd + + + + + FlagSe + + + + + FlagSg + + + + + FlagSh + + + + + FlagSi + + + + + FlagSj + + + + + FlagSk + + + + + FlagSl + + + + + FlagSm + + + + + FlagSn + + + + + FlagSo + + + + + FlagSr + + + + + FlagSt + + + + + FlagSv + + + + + FlagSy + + + + + FlagSz + + + + + FlagTc + + + + + FlagTd + + + + + FlagTf + + + + + FlagTg + + + + + FlagTh + + + + + FlagTj + + + + + FlagTk + + + + + FlagTl + + + + + FlagTm + + + + + FlagTn + + + + + FlagTo + + + + + FlagTr + + + + + FlagTt + + + + + FlagTv + + + + + FlagTw + + + + + FlagTz + + + + + FlagUa + + + + + FlagUg + + + + + FlagUm + + + + + FlagUs + + + + + FlagUy + + + + + FlagUz + + + + + FlagVa + + + + + FlagVc + + + + + FlagVe + + + + + FlagVg + + + + + FlagVi + + + + + FlagVn + + + + + FlagVu + + + + + FlagWales + + + + + FlagWf + + + + + FlagWhite + + + + + FlagWs + + + + + FlagYe + + + + + FlagYellow + + + + + FlagYt + + + + + FlagZa + + + + + FlagZm + + + + + FlagZw + + + + + FlowerDaisy + + + + + Folder + + + + + FolderAdd + + + + + FolderBell + + + + + FolderBookmark + + + + + FolderBrick + + + + + FolderBug + + + + + FolderCamera + + + + + FolderConnect + + + + + FolderDatabase + + + + + FolderDelete + + + + + FolderEdit + + + + + FolderError + + + + + FolderExplore + + + + + FolderFeed + + + + + FolderFilm + + + + + FolderFind + + + + + FolderFont + + + + + FolderGo + + + + + FolderHeart + + + + + FolderHome + + + + + FolderImage + + + + + FolderKey + + + + + FolderLightbulb + + + + + FolderLink + + + + + FolderMagnify + + + + + FolderPage + + + + + FolderPageWhite + + + + + FolderPalette + + + + + FolderPicture + + + + + FolderStar + + + + + FolderTable + + + + + FolderUp + + + + + FolderUser + + + + + FolderWrench + + + + + Font + + + + + FontAdd + + + + + FontColor + + + + + FontDelete + + + + + FontGo + + + + + FontLarger + + + + + FontSmaller + + + + + ForwardBlue + + + + + ForwardGreen + + + + + Group + + + + + GroupAdd + + + + + GroupDelete + + + + + GroupEdit + + + + + GroupError + + + + + GroupGear + + + + + GroupGo + + + + + GroupKey + + + + + GroupLink + + + + + Heart + + + + + HeartAdd + + + + + HeartBroken + + + + + HeartConnect + + + + + HeartDelete + + + + + Help + + + + + Hourglass + + + + + HourglassAdd + + + + + HourglassDelete + + + + + HourglassGo + + + + + HourglassLink + + + + + House + + + + + HouseConnect + + + + + HouseGo + + + + + HouseKey + + + + + HouseLink + + + + + HouseStar + + + + + Html + + + + + HtmlAdd + + + + + HtmlDelete + + + + + HtmlError + + + + + HtmlGo + + + + + HtmlValid + + + + + Image + + + + + Images + + + + + ImageAdd + + + + + ImageDelete + + + + + ImageEdit + + + + + ImageLink + + + + + ImageMagnify + + + + + ImageStar + + + + + Information + + + + + Ipod + + + + + IpodCast + + + + + IpodCastAdd + + + + + IpodCastDelete + + + + + IpodConnect + + + + + IpodNano + + + + + IpodNanoConnect + + + + + IpodSound + + + + + Joystick + + + + + JoystickAdd + + + + + JoystickConnect + + + + + JoystickDelete + + + + + JoystickError + + + + + Key + + + + + Keyboard + + + + + KeyboardAdd + + + + + KeyboardConnect + + + + + KeyboardDelete + + + + + KeyboardMagnify + + + + + KeyAdd + + + + + KeyDelete + + + + + KeyGo + + + + + KeyStart + + + + + KeyStop + + + + + Laptop + + + + + LaptopAdd + + + + + LaptopConnect + + + + + LaptopDelete + + + + + LaptopDisk + + + + + LaptopEdit + + + + + LaptopError + + + + + LaptopGo + + + + + LaptopKey + + + + + LaptopLink + + + + + LaptopMagnify + + + + + LaptopStart + + + + + LaptopStop + + + + + LaptopWrench + + + + + Layers + + + + + Layout + + + + + LayoutAdd + + + + + LayoutContent + + + + + LayoutDelete + + + + + LayoutEdit + + + + + LayoutError + + + + + LayoutHeader + + + + + LayoutKey + + + + + LayoutLightning + + + + + LayoutLink + + + + + LayoutSidebar + + + + + Lightbulb + + + + + LightbulbAdd + + + + + LightbulbDelete + + + + + LightbulbOff + + + + + Lightning + + + + + LightningAdd + + + + + LightningDelete + + + + + LightningGo + + + + + Link + + + + + LinkAdd + + + + + LinkBreak + + + + + LinkDelete + + + + + LinkEdit + + + + + LinkError + + + + + LinkGo + + + + + Lock + + + + + LockAdd + + + + + LockBreak + + + + + LockDelete + + + + + LockEdit + + + + + LockGo + + + + + LockKey + + + + + LockOpen + + + + + LockStart + + + + + LockStop + + + + + Lorry + + + + + LorryAdd + + + + + LorryDelete + + + + + LorryError + + + + + LorryFlatbed + + + + + LorryGo + + + + + LorryLink + + + + + LorryStart + + + + + LorryStop + + + + + MagifierZoomOut + + + + + Magnifier + + + + + MagnifierZoomIn + + + + + Mail + + + + + Male + + + + + Map + + + + + MapAdd + + + + + MapClipboard + + + + + MapCursor + + + + + MapDelete + + + + + MapEdit + + + + + MapError + + + + + MapGo + + + + + MapLink + + + + + MapMagnify + + + + + MapStart + + + + + MapStop + + + + + MedalBronze1 + + + + + MedalBronze2 + + + + + MedalBronze3 + + + + + MedalBronzeAdd + + + + + MedalBronzeDelete + + + + + MedalGold1 + + + + + MedalGold2 + + + + + MedalGold3 + + + + + MedalGoldAdd + + + + + MedalGoldDelete + + + + + MedalSilver1 + + + + + MedalSilver2 + + + + + MedalSilver3 + + + + + MedalSilverAdd + + + + + MedalSilverDelete + + + + + Money + + + + + MoneyAdd + + + + + MoneyDelete + + + + + MoneyDollar + + + + + MoneyEuro + + + + + MoneyPound + + + + + MoneyYen + + + + + Monitor + + + + + MonitorAdd + + + + + MonitorDelete + + + + + MonitorEdit + + + + + MonitorError + + + + + MonitorGo + + + + + MonitorKey + + + + + MonitorLightning + + + + + MonitorLink + + + + + MoonFull + + + + + Mouse + + + + + MouseAdd + + + + + MouseDelete + + + + + MouseError + + + + + Music + + + + + MusicNote + + + + + Neighbourhood + + + + + New + + + + + Newspaper + + + + + NewspaperAdd + + + + + NewspaperDelete + + + + + NewspaperGo + + + + + NewspaperLink + + + + + NewBlue + + + + + NewRed + + + + + NextBlue + + + + + NextGreen + + + + + Note + + + + + NoteAdd + + + + + NoteDelete + + + + + NoteEdit + + + + + NoteError + + + + + NoteGo + + + + + Outline + + + + + Overlays + + + + + Package + + + + + PackageAdd + + + + + PackageDelete + + + + + PackageDown + + + + + PackageGo + + + + + PackageGreen + + + + + PackageIn + + + + + PackageLink + + + + + PackageSe + + + + + PackageStart + + + + + PackageStop + + + + + PackageWhite + + + + + Page + + + + + PageAdd + + + + + PageAttach + + + + + PageBack + + + + + PageBreak + + + + + PageBreakInsert + + + + + PageCancel + + + + + PageCode + + + + + PageCopy + + + + + PageDelete + + + + + PageEdit + + + + + PageError + + + + + PageExcel + + + + + PageFind + + + + + PageForward + + + + + PageGear + + + + + PageGo + + + + + PageGreen + + + + + PageHeaderFooter + + + + + PageKey + + + + + PageLandscape + + + + + PageLandscapeShot + + + + + PageLightning + + + + + PageLink + + + + + PageMagnify + + + + + PagePaintbrush + + + + + PagePaste + + + + + PagePortrait + + + + + PagePortraitShot + + + + + PageRed + + + + + PageRefresh + + + + + PageSave + + + + + PageWhite + + + + + PageWhiteAcrobat + + + + + PageWhiteActionscript + + + + + PageWhiteAdd + + + + + PageWhiteBreak + + + + + PageWhiteC + + + + + PageWhiteCamera + + + + + PageWhiteCd + + + + + PageWhiteCdr + + + + + PageWhiteCode + + + + + PageWhiteCodeRed + + + + + PageWhiteColdfusion + + + + + PageWhiteCompressed + + + + + PageWhiteConnect + + + + + PageWhiteCopy + + + + + PageWhiteCplusplus + + + + + PageWhiteCsharp + + + + + PageWhiteCup + + + + + PageWhiteDatabase + + + + + PageWhiteDatabaseYellow + + + + + PageWhiteDelete + + + + + PageWhiteDvd + + + + + PageWhiteEdit + + + + + PageWhiteError + + + + + PageWhiteExcel + + + + + PageWhiteFind + + + + + PageWhiteFlash + + + + + PageWhiteFont + + + + + PageWhiteFreehand + + + + + PageWhiteGear + + + + + PageWhiteGet + + + + + PageWhiteGo + + + + + PageWhiteH + + + + + PageWhiteHorizontal + + + + + PageWhiteKey + + + + + PageWhiteLightning + + + + + PageWhiteLink + + + + + PageWhiteMagnify + + + + + PageWhiteMedal + + + + + PageWhiteOffice + + + + + PageWhitePaint + + + + + PageWhitePaintbrush + + + + + PageWhitePaint2 + + + + + PageWhitePaste + + + + + PageWhitePasteTable + + + + + PageWhitePhp + + + + + PageWhitePicture + + + + + PageWhitePowerpoint + + + + + PageWhitePut + + + + + PageWhiteRefresh + + + + + PageWhiteRuby + + + + + PageWhiteSideBySide + + + + + PageWhiteStack + + + + + PageWhiteStar + + + + + PageWhiteSwoosh + + + + + PageWhiteText + + + + + PageWhiteTextWidth + + + + + PageWhiteTux + + + + + PageWhiteVector + + + + + PageWhiteVisualstudio + + + + + PageWhiteWidth + + + + + PageWhiteWord + + + + + PageWhiteWorld + + + + + PageWhiteWrench + + + + + PageWhiteZip + + + + + PageWord + + + + + PageWorld + + + + + Paint + + + + + Paintbrush + + + + + PaintbrushColor + + + + + Paintcan + + + + + PaintcanRed + + + + + PaintCanBrush + + + + + Palette + + + + + PastePlain + + + + + PasteWord + + + + + PauseBlue + + + + + PauseGreen + + + + + PauseRecord + + + + + Pencil + + + + + PencilAdd + + + + + PencilDelete + + + + + PencilGo + + + + + Phone + + + + + PhoneAdd + + + + + PhoneDelete + + + + + PhoneEdit + + + + + PhoneError + + + + + PhoneGo + + + + + PhoneKey + + + + + PhoneLink + + + + + PhoneSound + + + + + PhoneStart + + + + + PhoneStop + + + + + Photo + + + + + Photos + + + + + PhotoAdd + + + + + PhotoDelete + + + + + PhotoEdit + + + + + PhotoLink + + + + + PhotoPaint + + + + + Picture + + + + + Pictures + + + + + PicturesThumbs + + + + + PictureAdd + + + + + PictureClipboard + + + + + PictureDelete + + + + + PictureEdit + + + + + PictureEmpty + + + + + PictureError + + + + + PictureGo + + + + + PictureKey + + + + + PictureLink + + + + + PictureSave + + + + + Pilcrow + + + + + Pill + + + + + PillAdd + + + + + PillDelete + + + + + PillError + + + + + PillGo + + + + + PlayBlue + + + + + PlayGreen + + + + + Plugin + + + + + PluginAdd + + + + + PluginDelete + + + + + PluginDisabled + + + + + PluginEdit + + + + + PluginError + + + + + PluginGo + + + + + PluginKey + + + + + PluginLink + + + + + PreviousGreen + + + + + Printer + + + + + PrinterAdd + + + + + PrinterCancel + + + + + PrinterColor + + + + + PrinterConnect + + + + + PrinterDelete + + + + + PrinterEmpty + + + + + PrinterError + + + + + PrinterGo + + + + + PrinterKey + + + + + PrinterMono + + + + + PrinterStart + + + + + PrinterStop + + + + + Rainbow + + + + + RainbowStar + + + + + RecordBlue + + + + + RecordGreen + + + + + RecordRed + + + + + Reload + + + + + Report + + + + + ReportAdd + + + + + ReportDelete + + + + + ReportDisk + + + + + ReportEdit + + + + + ReportGo + + + + + ReportKey + + + + + ReportLink + + + + + ReportMagnify + + + + + ReportPicture + + + + + ReportStart + + + + + ReportStop + + + + + ReportUser + + + + + ReportWord + + + + + ResultsetFirst + + + + + ResultsetLast + + + + + ResultsetNext + + + + + ResultsetPrevious + + + + + ReverseBlue + + + + + ReverseGreen + + + + + RewindBlue + + + + + RewindGreen + + + + + Rgb + + + + + Rosette + + + + + RosetteBlue + + + + + Rss + + + + + RssAdd + + + + + RssDelete + + + + + RssError + + + + + RssGo + + + + + RssValid + + + + + Ruby + + + + + RubyAdd + + + + + RubyDelete + + + + + RubyGear + + + + + RubyGet + + + + + RubyGo + + + + + RubyKey + + + + + RubyLink + + + + + RubyPut + + + + + Script + + + + + ScriptAdd + + + + + ScriptCode + + + + + ScriptCodeOriginal + + + + + ScriptCodeRed + + + + + ScriptDelete + + + + + ScriptEdit + + + + + ScriptError + + + + + ScriptGear + + + + + ScriptGo + + + + + ScriptKey + + + + + ScriptLightning + + + + + ScriptLink + + + + + ScriptPalette + + + + + ScriptSave + + + + + ScriptStart + + + + + ScriptStop + + + + + Seasons + + + + + SectionCollapsed + + + + + SectionExpanded + + + + + Server + + + + + ServerAdd + + + + + ServerChart + + + + + ServerCompressed + + + + + ServerConnect + + + + + ServerDatabase + + + + + ServerDelete + + + + + ServerEdit + + + + + ServerError + + + + + ServerGo + + + + + ServerKey + + + + + ServerLightning + + + + + ServerLink + + + + + ServerStart + + + + + ServerStop + + + + + ServerUncompressed + + + + + ServerWrench + + + + + Shading + + + + + ShapesMany + + + + + ShapesManySelect + + + + + Shape3d + + + + + ShapeAlignBottom + + + + + ShapeAlignCenter + + + + + ShapeAlignLeft + + + + + ShapeAlignMiddle + + + + + ShapeAlignRight + + + + + ShapeAlignTop + + + + + ShapeFlipHorizontal + + + + + ShapeFlipVertical + + + + + ShapeGroup + + + + + ShapeHandles + + + + + ShapeMoveBack + + + + + ShapeMoveBackwards + + + + + ShapeMoveForwards + + + + + ShapeMoveFront + + + + + ShapeRotateAnticlockwise + + + + + ShapeRotateClockwise + + + + + ShapeShadeA + + + + + ShapeShadeB + + + + + ShapeShadeC + + + + + ShapeShadow + + + + + ShapeShadowToggle + + + + + ShapeSquare + + + + + ShapeSquareAdd + + + + + ShapeSquareDelete + + + + + ShapeSquareEdit + + + + + ShapeSquareError + + + + + ShapeSquareGo + + + + + ShapeSquareKey + + + + + ShapeSquareLink + + + + + ShapeSquareSelect + + + + + ShapeUngroup + + + + + Share + + + + + Shield + + + + + ShieldAdd + + + + + ShieldDelete + + + + + ShieldError + + + + + ShieldGo + + + + + ShieldRainbow + + + + + ShieldSilver + + + + + ShieldStart + + + + + ShieldStop + + + + + Sitemap + + + + + SitemapColor + + + + + Smartphone + + + + + SmartphoneAdd + + + + + SmartphoneConnect + + + + + SmartphoneDelete + + + + + SmartphoneDisk + + + + + SmartphoneEdit + + + + + SmartphoneError + + + + + SmartphoneGo + + + + + SmartphoneKey + + + + + SmartphoneWrench + + + + + SortAscending + + + + + SortDescending + + + + + Sound + + + + + SoundAdd + + + + + SoundDelete + + + + + SoundHigh + + + + + SoundIn + + + + + SoundLow + + + + + SoundMute + + + + + SoundNone + + + + + SoundOut + + + + + Spellcheck + + + + + Sport8ball + + + + + SportBasketball + + + + + SportFootball + + + + + SportGolf + + + + + SportGolfPractice + + + + + SportRaquet + + + + + SportShuttlecock + + + + + SportSoccer + + + + + SportTennis + + + + + Star + + + + + StarBronze + + + + + StarBronzeHalfGrey + + + + + StarGold + + + + + StarGoldHalfGrey + + + + + StarGoldHalfSilver + + + + + StarGrey + + + + + StarHalfGrey + + + + + StarSilver + + + + + StatusAway + + + + + StatusBeRightBack + + + + + StatusBusy + + + + + StatusInvisible + + + + + StatusOffline + + + + + StatusOnline + + + + + Stop + + + + + StopBlue + + + + + StopGreen + + + + + StopRed + + + + + Style + + + + + StyleAdd + + + + + StyleDelete + + + + + StyleEdit + + + + + StyleGo + + + + + Sum + + + + + Tab + + + + + Table + + + + + TableAdd + + + + + TableCell + + + + + TableColumn + + + + + TableColumnAdd + + + + + TableColumnDelete + + + + + TableConnect + + + + + TableDelete + + + + + TableEdit + + + + + TableError + + + + + TableGear + + + + + TableGo + + + + + TableKey + + + + + TableLightning + + + + + TableLink + + + + + TableMultiple + + + + + TableRefresh + + + + + TableRelationship + + + + + TableRow + + + + + TableRowDelete + + + + + TableRowInsert + + + + + TableSave + + + + + TableSort + + + + + TabAdd + + + + + TabBlue + + + + + TabDelete + + + + + TabEdit + + + + + TabGo + + + + + TabGreen + + + + + TabRed + + + + + Tag + + + + + TagsGrey + + + + + TagsRed + + + + + TagBlue + + + + + TagBlueAdd + + + + + TagBlueDelete + + + + + TagBlueEdit + + + + + TagGreen + + + + + TagOrange + + + + + TagPink + + + + + TagPurple + + + + + TagRed + + + + + TagYellow + + + + + Telephone + + + + + TelephoneAdd + + + + + TelephoneDelete + + + + + TelephoneEdit + + + + + TelephoneError + + + + + TelephoneGo + + + + + TelephoneKey + + + + + TelephoneLink + + + + + TelephoneRed + + + + + Television + + + + + TelevisionAdd + + + + + TelevisionDelete + + + + + TelevisionIn + + + + + TelevisionOff + + + + + TelevisionOut + + + + + TelevisionStar + + + + + Textfield + + + + + TextfieldAdd + + + + + TextfieldDelete + + + + + TextfieldKey + + + + + TextfieldRename + + + + + TextAb + + + + + TextAlignCenter + + + + + TextAlignJustify + + + + + TextAlignLeft + + + + + TextAlignRight + + + + + TextAllcaps + + + + + TextBold + + + + + TextColumns + + + + + TextComplete + + + + + TextDirection + + + + + TextDoubleUnderline + + + + + TextDropcaps + + + + + TextFit + + + + + TextFlip + + + + + TextFontDefault + + + + + TextHeading1 + + + + + TextHeading2 + + + + + TextHeading3 + + + + + TextHeading4 + + + + + TextHeading5 + + + + + TextHeading6 + + + + + TextHorizontalrule + + + + + TextIndent + + + + + TextIndentRemove + + + + + TextInverse + + + + + TextItalic + + + + + TextKerning + + + + + TextLeftToRight + + + + + TextLetterspacing + + + + + TextLetterOmega + + + + + TextLinespacing + + + + + TextListBullets + + + + + TextListNumbers + + + + + TextLowercase + + + + + TextLowercaseA + + + + + TextMirror + + + + + TextPaddingBottom + + + + + TextPaddingLeft + + + + + TextPaddingRight + + + + + TextPaddingTop + + + + + TextReplace + + + + + TextRightToLeft + + + + + TextRotate0 + + + + + TextRotate180 + + + + + TextRotate270 + + + + + TextRotate90 + + + + + TextRuler + + + + + TextShading + + + + + TextSignature + + + + + TextSmallcaps + + + + + TextSpelling + + + + + TextStrikethrough + + + + + TextSubscript + + + + + TextSuperscript + + + + + TextTab + + + + + TextUnderline + + + + + TextUppercase + + + + + Theme + + + + + ThumbDown + + + + + ThumbUp + + + + + Tick + + + + + Time + + + + + TimelineMarker + + + + + TimeAdd + + + + + TimeDelete + + + + + TimeGo + + + + + TimeGreen + + + + + TimeRed + + + + + Transmit + + + + + TransmitAdd + + + + + TransmitBlue + + + + + TransmitDelete + + + + + TransmitEdit + + + + + TransmitError + + + + + TransmitGo + + + + + TransmitRed + + + + + Tux + + + + + User + + + + + UserAdd + + + + + UserAlert + + + + + UserB + + + + + UserBrown + + + + + UserComment + + + + + UserCross + + + + + UserDelete + + + + + UserEarth + + + + + UserEdit + + + + + UserFemale + + + + + UserGo + + + + + UserGray + + + + + UserGrayCool + + + + + UserGreen + + + + + UserHome + + + + + UserKey + + + + + UserMagnify + + + + + UserMature + + + + + UserOrange + + + + + UserRed + + + + + UserStar + + + + + UserSuit + + + + + UserSuitBlack + + + + + UserTick + + + + + Vcard + + + + + VcardAdd + + + + + VcardDelete + + + + + VcardEdit + + + + + VcardKey + + + + + Vector + + + + + VectorAdd + + + + + VectorDelete + + + + + VectorKey + + + + + Wand + + + + + WeatherCloud + + + + + WeatherClouds + + + + + WeatherCloudy + + + + + WeatherCloudyRain + + + + + WeatherLightning + + + + + WeatherRain + + + + + WeatherSnow + + + + + WeatherSun + + + + + Webcam + + + + + WebcamAdd + + + + + WebcamConnect + + + + + WebcamDelete + + + + + WebcamError + + + + + WebcamStart + + + + + WebcamStop + + + + + World + + + + + WorldAdd + + + + + WorldConnect + + + + + WorldDawn + + + + + WorldDelete + + + + + WorldEdit + + + + + WorldGo + + + + + WorldKey + + + + + WorldLink + + + + + WorldNight + + + + + WorldOrbit + + + + + Wrench + + + + + WrenchOrange + + + + + Xhtml + + + + + XhtmlAdd + + + + + XhtmlDelete + + + + + XhtmlError + + + + + XhtmlGo + + + + + XhtmlValid + + + + + Zoom + + + + + ZoomIn + + + + + ZoomOut + + + + + SystemClose + + + + + SystemNew + + + + + SystemSave + + + + + SystemSaveClose + + + + + SystemSaveNew + + + + + SystemSearch + + + + + 预定义图标名称 + + + + + 获取图标名称 + + + + + + + 获得图标的服务器地址 + + 图标 + 图标的服务器地址 + + + + 获取客户端可用的图标URL地址 + + 图标 + URL地址 + + + + 获取客户端可用的图标URL地址 + + 图标 + 图标地址 + URL地址 + + + + 将图标字符串转换为图标 + + 图标字符串 + 是否忽略大小写 + 图标 + + + + 将图标转换为图标字符串 + + 图标 + 图标字符串 + + + + 样式 + + + + + 蓝色 + + + + + 银灰色 + + + + + 高对比度 + + + + + 海王星(默认值) + + + + + 样式的类型名称 + + + + + 语言 + + + + + 英文 + + + + + 中文(默认值) + + + + + 中文(台湾) + + + + + 葡萄牙文(巴西) + + + + + 土耳其文 + + + + + 俄文 + + + + + 语言的类型名称 + + + + + 操作符(用于表单控件的客户端验证) + + + + + 等于(默认值) + + + + + 大于 + + + + + 大于等于 + + + + + 小于 + + + + + 小于等于 + + + + + 不等于 + + + + + 操作符名称 + + + + + 触发器输入框右侧图标的类型 + + + + + 无(默认值) + + + + + 搜索图标 + + + + + 清空图标 + + + + + 日期图标 + + + + + 系统图标名称 + + + + + 窗体的初始显示位置 + + + + + 页面的中部 + + + + + 页面的黄金分割点处(默认值) + + + + + 工具条的位置 + + + + + 顶部(默认值) + + + + + 底部 + + + + + 左侧 + + + + + 右侧 + + + + + 工具条的位置名称 + + + + + 窗体以及对话框的显示位置 + + + + + 当前页面(默认值) + + + + + 父页面 + + + + + 最外层页面 + + + + + Alert,Confirm,Window显示的位置 + + + + + Get target name used inside JavaScript code. + + + + + + + 正则表达式常用类型(用于表单控件的客户端验证) + + + + + 无(默认值) + + + + + 数字 + + + + + 字母 + + + + + 字母数字 + + + + + 字母下划线 + + + + + 字母数字下划线 + + + + + 小写字母 + + + + + 大写字母 + + + + + 电子邮箱 + + + + + 网址 + + + + + 邮政编码(中华人民共和国) + + + + + IP地址 + + + + + 身份证(中华人民共和国) + + + + + 正则表达式常用类型 内容 + + + + + 关闭窗体的动作 + + + + + 关闭窗体(默认值) + + + + + 关闭窗体后刷新父页面 + + + + + 关闭窗体后会发父页面(需要注册OnClose事件处理函数) + + + + + 关闭窗体的动作 + + + + + Region控件所在RegionPanel中的位置 + + + + + 上方 + + + + + 底部 + + + + + 左侧 + + + + + 右侧 + + + + + 中部(默认值) + + + + + 布局类型名称 + + + + + Tab标签的显示位置 + + + + + 顶部(默认值) + + + + + 底部 + + + + + 左侧 + + + + + 右侧 + + + + + Tab显示的位置名称 + + + + + 按钮上图标的摆放位置 + + + + + 靠上 + + + + + 靠右 + + + + + 靠下 + + + + + 靠左(默认值) + + + + + 图标摆放位置的名称 + + + + + 按钮的大小 + + + + + 小尺寸(默认值) + + + + + 中等尺寸 + + + + + 大尺寸 + + + + + 按钮的大小名称 + + + + + 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + + + + + 所有子控件位于父容器的开始位置(废弃,请使用Start代替) + + + + + 所有子控件位于父容器的中间位置(废弃,请使用Center代替) + + + + + 所有子控件位于父容器的开始位置 + + + + + 所有子控件位于父容器的中间位置 + + + + + 所有子控件被拉伸至父容器的大小(默认值) + + + + + 所有子控件被拉伸至最大子控件的大小 + + + + + HBox或者VBox的位置的名称 + + + + + 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + + + + + 子控件靠父容器的开始位置排列(废弃,请使用Start代替) + + + + + 子控件靠父容器的结束位置排列(废弃,请使用End代替) + + + + + 子控件靠父容器的中间位置排列 + + + + + 子控件靠父容器的开始位置排列(默认值) + + + + + 子控件靠父容器的结束位置排列 + + + + + HBox或者VBox的位置的名称 + + + + + Ajax提示信息的类型 + + + + + 在页面顶部显示黄色提示框(默认值) + + + + + Extjs的页面遮罩提示框 + + + + + Ajax提示信息的类型名称 + + + + + 文本排列位置 + + + + + 靠左排列(默认值) + + + + + 居中排列 + + + + + 靠右排列 + + + + + 文本排列位置名称 + + + + + 表单中标签的排列位置 + + + + + 靠左(默认值) + + + + + 靠右 + + + + + 靠上 + + + + + 表单中标签的排列位置名称 + + + + + 垂直排列位置 + + + + + 居中排列(默认值) + + + + + 靠上排列 + + + + + 靠下排列 + + + + + 垂直排列位置名称 + + + + + 创建Javascript数组参数的帮助类 + + + + + 构造函数 + + + + + 构造函数 + + 初始属性值 + + + + 构造函数 + + 初始属性值 + 是否保持原样 + + + + 删除属性 + + 属性值 + + + + 添加属性 + + 属性值 + + + + 添加属性 + + 属性值 + 是否保持原样 + + + + 将整个数组中元素顺序反转 + + + + + 返回对象的JSON字符串形式 + + 对象的JSON形式 + + + + 内部保存的数据 + + + + + 已经添加属性的个数 + + + + + 删除属性 + + + + + + 添加属性 + + + + + + + 添加属性 + + + + 是否保持原样 + + + + 使用这个方法需要特别注意,因为这里返回的不是设置的属性了 + 比如:"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"" + + + + + + + 返回对象的Json字符串表示 + + + + + + 存在 Page.Items 上下文中,用于生成JavascriptID + + + + + 添加JS文件到页面的底部 + + + + + + + + 添加样式表到页头 + + + + + + + + 向页面头部添加内容 + + + + + + + + 页头是否包含控件 + + + + + + + + 取得下一个控件的位置 + + + + + + 资源处理程序 + + + + + 处理资源的请求 + + Http请求上下文 + + + + 只要请求的 URL 相同,则请求可以重用 + + + + + AJAX输出过滤器 + + + + + 设置引起本次回发的按钮(或其他控件)可用 + + + + + + 更新 EventValidation 节点的值 + + + + + + + 更新 ViewState 节点的值 + + + + + + + 更新ASP.NET控件 + + + + + + + 取得 HTML 中一个节点的值 + + + + + + + + 取得 HTML 中一个节点的OuterHtml + + + + + + + + 获取当前输出流的HTML内容 + + + + + + 请求处理模块(主要用来处理Response.Redirect的情况) + + + + + 清除资源 + + + + + 初始化模块 + + Http应用程序 + + + + 存在 Page.Items 上下文中,用于生成JavascriptID + + + + + 模拟树帮助类(用于表格和树控件) + + + + + 模拟树结构的节点类 + + + + + 模拟树的节点内容 + + + + + 节点内容 + + + + + 节点内容 + + + + + 节点所在层次(从0开始,0表示根节点) + + + + + 父节点 + + + + + 是否有弟节点 + + + + + 控件相关帮助函数 + + + + + 查找父控件 + + 当前控件 + 查找控件的类型 + 如果找到的控件实例继承自controlType,同样也认为是找到了 + 找到的第一个父控件 + + + + 查找父控件 + + 当前控件 + 查找控件的类型 + 找到的第一个父控件 + + + + 获得服务器控件ID的客户端ID数组 + + + + + + + 查找父层次结构中是否存在用户控件 + + 当前控件 + 父层次中的用户控件 + + + + 根据控件ID查找控件 + + 要查找的控件ID + 找到的控件 + + + + 根据控件类型查找控件 + + 要查找的控件类型 + 找到的控件 + + + + 在父控件的所有子控件中查找控件 + + 父控件 + 要查找的控件ID + 找到的控件 + + + + 在父控件的所有子控件中查找控件 + + 父控件 + 要查找的控件类型 + 找到的控件 + + + + 字符串帮助类 + + + + + GZIP压缩的ViewState隐藏字段的ID + + + + + GZIP压缩的ViewState隐藏字段的ID + + + + + 获取枚举实例 + + 枚举类型 + 枚举实例名称 + 枚举实例 + + + + 获取枚举实例名称 + + 枚举实例 + 枚举实例名称 + + + + 去除字符串中的Html + + 字符串 + 字符串 + + + + 将字符串"1,2,3"转化为整形列表[1,2,3] + + 字符串 + 整形列表 + + + + 将字符串"1,2,3"转化为整形列表[1,2,3] + + 字符串 + 返回之前是否对数组进行排序(由小到大) + 整形列表 + + + + 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + + 字符串 + 字符串列表 + + + + 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + + + 返回之前是否对数组进行排序(由小到大) + 字符串列表 + + + + 将字符串数组["ssdd","2","ok"]转化为字符串"ssdd,2,ok" + + 字符串数组 + 字符串 + + + + 将整型数组[2,3,4]转化为字符串"2,3,4" + + 整形数组 + 字符串 + + + + 比较两个整形数组是否相等 + + 整形数组1 + 整形数组2 + 是否相等 + + + + 比较两个字符串数组是否相等 + + 字符串数组1 + 字符串数组2 + 是否相等 + + + + 将 10% 转换为 0.1 的字符串的形式 + + 百分比字符串 + 小数 + + + + Base64解码 + + 需要解码的字节数组 + 解码后的字符串 + + + + Base64解码 + + 需要解码的字符串 + 解码后的字符串 + + + + Base64编码 + + 需要编码的字节数组 + 编码后的字符串 + + + + Base64编码 + + 需要编码的字符串 + 编码后的字符串 + + + + Gzip编码字符串 + + 源字符串 + Gzip后的字符串 + + + + 解码Gzip字符串 + + Gzip后的字符串 + 源字符串 + + + + 加载Gzipped的ViewState + + + + + + + 生成Gzipped的ViewState + + + + + + + 对象帮助类 + + + + + 获取对象的属性值 + + 可能是DataRowView或一个对象 + 属性名 + 属性值 + + + + 获取对象的属性值 + + 对象 + 属性名("Color"、"BodyStyle"或者"Info.UserName") + 属性值 + + + + 创建HTML节点的帮助类 + + + + + 构造函数 + + 节点名称 + + + + 设置属性 + + 属性名 + 属性值 + + + + 取得属性的值 + + 属性名 + 属性值 + + + + 转化为客户端可用的HTML标签字符串 + + 客户端可用的HTML标签字符串 + + + + 节点内部值 + + + + + 样式帮助类 + + + + + 提取样式字符串 + + CSS字符串 + 样式名称 + 样式字符串 + + + + 获取背景图片样式 + + 选择符 + 图片地址 + CSS样式 + + + + 获取背景图片样式(no-repeat) + + 选择符 + 图片地址 + CSS样式 + + + + 获取适合CSS的Margin或者Padding定义 + + 源字符串 + CSS样式 + + + + JSON帮助类 + + + + + 将JArray转换为整型数组 + + JArray对象 + 整型数组 + + + + 将JArray转换为字符串数组 + + JArray对象 + 字符串数组 + + + + 将JArray转换为对象数组 + + JArray对象 + 对象数组 + + + + A utility class to compute CRC32. + + + + + Compute a checksum for a given string. + + The string to compute the checksum for. + The computed checksum. + + + + Compute a checksum for a given array of bytes. + + The array of bytes to compute the checksum for. + The computed checksum. + + + + Represents an HTML attribute. + + + + + Creates a duplicate of this attribute. + + The cloned attribute. + + + + Compares the current instance with another attribute. Comparison is based on attributes' name. + + An attribute to compare with this instance. + A 32-bit signed integer that indicates the relative order of the names comparison. + + + + Gets the qualified name of the attribute. + + + + + Gets or sets the value of the attribute. + + + + + Gets the line number of this attribute in the document. + + + + + Gets the column number of this attribute in the document. + + + + + Gets the stream position of this attribute in the document, relative to the start of the document. + + + + + Gets the HTML node to which this attribute belongs. + + + + + Gets the HTML document to which this attribute belongs. + + + + + Represents a combined list and collection of HTML nodes. + + + + + Inserts the specified attribute as the last attribute in the collection. + + The attribute to insert. May not be null. + The appended attribute. + + + + Creates and inserts a new attribute as the last attribute in the collection. + + The name of the attribute to insert. + The appended attribute. + + + + Creates and inserts a new attribute as the last attribute in the collection. + + The name of the attribute to insert. + The value of the attribute to insert. + The appended attribute. + + + + Inserts the specified attribute as the first node in the collection. + + The attribute to insert. May not be null. + The prepended attribute. + + + + Removes the attribute at the specified index. + + The index of the attribute to remove. + + + + Removes a given attribute from the list. + + The attribute to remove. May not be null. + + + + Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. + + The attribute's name. May not be null. + + + + Remove all attributes in the list. + + + + + Returns an enumerator that can iterate through the list. + + An IEnumerator for the entire list. + + + + Gets the number of elements actually contained in the list. + + + + + Gets a given attribute from the list using its name. + + + + + Gets the attribute at the specified index. + + + + + Represents an enumerator that can iterate through the list. + + + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + + + Advances the enumerator to the next element of the collection. + + true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection. + + + + Gets the current element in the collection. + + + + + Gets the current element in the collection. + + + + + Represents an HTML comment. + + + + + Represents an HTML node. + + + + + Gets the name of a comment node. It is actually defined as '#comment'. + + + + + Gets the name of the document node. It is actually defined as '#document'. + + + + + Gets the name of a text node. It is actually defined as '#text'. + + + + + Gets a collection of flags that define specific behaviors for specific element nodes. + The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. + + + + + Determines if an element node is closed. + + The name of the element node to check. May not be null. + true if the name is the name of a closed element node, false otherwise. + + + + Determines if an element node can be kept overlapped. + + The name of the element node to check. May not be null. + true if the name is the name of an element node that can be kept overlapped, false otherwise. + + + + Determines if a text corresponds to the closing tag of an node that can be kept overlapped. + + The text to check. May not be null. + true or false. + + + + Determines if an element node is a CDATA element node. + + The name of the element node to check. May not be null. + true if the name is the name of a CDATA element node, false otherwise. + + + + Determines if an element node is defined as empty. + + The name of the element node to check. May not be null. + true if the name is the name of an empty element node, false otherwise. + + + + Creates an HTML node from a string representing literal HTML. + + The HTML text. + The newly created node instance. + + + + Creates a duplicate of the node and the subtree under it. + + The node to duplicate. May not be null. + + + + Creates a duplicate of the node. + + The node to duplicate. May not be null. + true to recursively clone the subtree under the specified node, false to clone only the node itself. + + + + Creates a new XPathNavigator object for navigating this HTML node. + + An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document. + + + + Selects the first XmlNode that matches the XPath expression. + + The XPath expression. May not be null. + The first HtmlNode that matches the XPath query or a null reference if no matching node was found. + + + + Selects a list of nodes matching the XPath expression. + + The XPath expression. + An HtmlNodeCollection containing a collection of nodes matching the XPath query, or null if no node matched the XPath expression. + + + + Creates a duplicate of the node + + + + + + Creates a duplicate of the node and changes its name at the same time. + + The new name of the cloned node. May not be null. + The cloned node. + + + + Creates a duplicate of the node and changes its name at the same time. + + The new name of the cloned node. May not be null. + true to recursively clone the subtree under the specified node; false to clone only the node itself. + The cloned node. + + + + Creates a duplicate of the node. + + true to recursively clone the subtree under the specified node; false to clone only the node itself. + The cloned node. + + + + Removes all the children and/or attributes of the current node. + + + + + Removes all the children of the current node. + + + + + Removes the specified child node. + + The node being removed. May not be null. + The node removed. + + + + Removes the specified child node. + + The node being removed. May not be null. + true to keep grand children of the node, false otherwise. + The node removed. + + + + Replaces the child node oldChild with newChild node. + + The new node to put in the child list. + The node being replaced in the list. + The node replaced. + + + + Inserts the specified node immediately before the specified reference node. + + The node to insert. May not be null. + The node that is the reference node. The newChild is placed before this node. + The node being inserted. + + + + Inserts the specified node immediately after the specified reference node. + + The node to insert. May not be null. + The node that is the reference node. The newNode is placed after the refNode. + The node being inserted. + + + + Adds the specified node to the beginning of the list of children of this node. + + The node to add. May not be null. + The node added. + + + + Adds the specified node list to the beginning of the list of children of this node. + + The node list to add. May not be null. + + + + Adds the specified node to the end of the list of children of this node. + + The node to add. May not be null. + The node added. + + + + Adds the specified node to the end of the list of children of this node. + + The node list to add. May not be null. + + + + Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + + The name of the attribute to get. May not be null. + The default value to return if not found. + The value of the attribute if found, the default value if not found. + + + + Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + + The name of the attribute to get. May not be null. + The default value to return if not found. + The value of the attribute if found, the default value if not found. + + + + Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + + The name of the attribute to get. May not be null. + The default value to return if not found. + The value of the attribute if found, the default value if not found. + + + + Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. + + The name of the attribute to set. May not be null. + The value for the attribute. + The corresponding attribute instance. + + + + Saves the current node to the specified TextWriter. + + The TextWriter to which you want to save. + + + + Saves the current node to the specified XmlWriter. + + The XmlWriter to which you want to save. + + + + Saves all the children of the node to the specified TextWriter. + + The TextWriter to which you want to save. + + + + Saves the current node to a string. + + The saved string. + + + + Saves all the children of the node to a string. + + The saved string. + + + + Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. + + + + + Gets the line number of this node in the document. + + + + + Gets the column number of this node in the document. + + + + + Gets the stream position of this node in the document, relative to the start of the document. + + + + + Gets a value indicating if this node has been closed or not. + + + + + Gets or sets this node's name. + + + + + Gets or Sets the text between the start and end tags of the object. + + + + + Gets or Sets the HTML between the start and end tags of the object. + + + + + Gets or Sets the object and its content in HTML. + + + + + Gets the HTML node immediately following this element. + + + + + Gets the node immediately preceding this node. + + + + + Gets the first child of the node. + + + + + Gets the last child of the node. + + + + + Gets the type of this node. + + + + + Gets the parent of this node (for nodes that can have parents). + + + + + Gets the HtmlDocument to which this node belongs. + + + + + Gets all the children of the node. + + + + + Gets a value indicating whether the current node has any attributes. + + + + + Gets a value indicating whether the current node has any attributes on the closing tag. + + + + + Gets a value indicating whether this node has any child nodes. + + + + + Gets the collection of HTML attributes for this node. May not be null. + + + + + Gets the collection of HTML attributes for the closing tag. May not be null. + + + + + Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + + + + + Gets or Sets the object and its content in HTML. + + + + + Gets or Sets the comment text of the node. + + + + + Represents a complete HTML document. + + + + + Defines if a checksum must be computed for the document while parsing. Default is false. + + + + + Defines if declared encoding must be read from the document. + Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + Default is true. + + + + + Defines if non closed nodes will be checked at the end of parsing. Default is true. + + + + + Defines if the 'id' attribute must be specifically used. Default is true. + + + + + Defines if empty nodes must be written as closed during output. Default is false. + + + + + Defines if output must conform to XML, instead of HTML. + + + + + Defines if name must be output in uppercase. Default is false. + + + + + Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. + + + + + Adds Debugging attributes to node. Default is false. + + + + + Defines if source text must be extracted while parsing errors. + If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. + Default is false. + + + + + Defines if closing for non closed nodes must be done at the end or directly in the document. + Setting this to true can actually change how browsers render the page. Default is false. + + + + + Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. + + + + + Defines the maximum length of source text or parse errors. Default is 100. + + + + + Defines the default stream encoding to use. Default is System.Text.Encoding.Default. + + + + + Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. + + + + + Creates an instance of an HTML document. + + + + + Applies HTML encoding to a specified string. + + The input string to encode. May not be null. + The encoded string. + + + + Detects the encoding of an HTML stream. + + The input stream. May not be null. + The detected encoding. + + + + Detects the encoding of an HTML file. + + Path for the file containing the HTML document to detect. May not be null. + The detected encoding. + + + + Detects the encoding of an HTML text. + + The input html text. May not be null. + The detected encoding. + + + + Detects the encoding of an HTML text provided on a TextReader. + + The TextReader used to feed the HTML. May not be null. + The detected encoding. + + + + Loads an HTML document from a stream. + + The input stream. + + + + Loads an HTML document from a stream. + + The input stream. + Indicates whether to look for byte order marks at the beginning of the stream. + + + + Loads an HTML document from a stream. + + The input stream. + The character encoding to use. + + + + Loads an HTML document from a stream. + + The input stream. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the stream. + + + + Loads an HTML document from a stream. + + The input stream. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the stream. + The minimum buffer size. + + + + Loads an HTML document from a file. + + The complete file path to be read. May not be null. + + + + Loads an HTML document from a file. + + The complete file path to be read. May not be null. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Loads an HTML document from a file. + + The complete file path to be read. May not be null. + The character encoding to use. May not be null. + + + + Loads an HTML document from a file. + + The complete file path to be read. May not be null. + The character encoding to use. May not be null. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Loads an HTML document from a file. + + The complete file path to be read. May not be null. + The character encoding to use. May not be null. + Indicates whether to look for byte order marks at the beginning of the file. + The minimum buffer size. + + + + Loads the HTML document from the specified string. + + String containing the HTML document to load. May not be null. + + + + Detects the encoding of an HTML document from a file first, and then loads the file. + + The complete file path to be read. + + + + Detects the encoding of an HTML document from a file first, and then loads the file. + + The complete file path to be read. May not be null. + true to detect encoding, false otherwise. + + + + Loads the HTML document from the specified TextReader. + + The TextReader used to feed the HTML data into the document. May not be null. + + + + Saves the HTML document to the specified stream. + + The stream to which you want to save. + + + + Saves the HTML document to the specified stream. + + The stream to which you want to save. May not be null. + The character encoding to use. May not be null. + + + + Saves the mixed document to the specified file. + + The location of the file where you want to save the document. + + + + Saves the mixed document to the specified file. + + The location of the file where you want to save the document. May not be null. + The character encoding to use. May not be null. + + + + Saves the HTML document to the specified StreamWriter. + + The StreamWriter to which you want to save. + + + + Saves the HTML document to the specified TextWriter. + + The TextWriter to which you want to save. May not be null. + + + + Saves the HTML document to the specified XmlWriter. + + The XmlWriter to which you want to save. + + + + Creates a new XPathNavigator object for navigating this HTML document. + + An XPathNavigator object. The XPathNavigator is positioned on the root of the document. + + + + Gets a valid XML name. + + Any text. + A string that is a valid XML name. + + + + Gets the HTML node with the specified 'id' attribute value. + + The attribute id to match. May not be null. + The HTML node with the matching id or null if not found. + + + + Creates an HTML element node with the specified name. + + The qualified name of the element. May not be null. + The new HTML node. + + + + Creates an HTML comment node. + + The new HTML comment node. + + + + Creates an HTML comment node with the specified comment text. + + The comment text. May not be null. + The new HTML comment node. + + + + Creates an HTML text node. + + The new HTML text node. + + + + Creates an HTML text node with the specified text. + + The text of the node. May not be null. + The new HTML text node. + + + + Creates an HTML attribute with the specified name. + + The name of the attribute. May not be null. + The new HTML attribute. + + + + Creates an HTML attribute with the specified name. + + The name of the attribute. May not be null. + The value of the attribute. + The new HTML attribute. + + + + Determines if the specified character is considered as a whitespace character. + + The character to check. + true if if the specified character is considered as a whitespace character. + + + + Gets the remaining text. + Will always be null if OptionStopperNodeName is null. + + + + + Gets the offset of Remainder in the original Html text. + If OptionStopperNodeName is null, this will return the length of the original Html text. + + + + + Gets a list of parse errors found in the document. + + + + + Gets the document's stream encoding. + + + + + Gets the document's declared encoding. + Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + + + + + Gets the document's output encoding. + + + + + Gets the root node of the document. + + + + + Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. + + + + + Flags that describe the behavior of an Element node. + + + + + The node is a CDATA node. + + + + + The node is empty. META or IMG are example of such nodes. + + + + + The node will automatically be closed during parsing. + + + + + The node can overlap. + + + + + A utility class to replace special characters by entities and vice-versa. + Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html + + + + + Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. + + The node to entitize. + An entitized cloned node. + + + + Replace characters above 127 by entities. + + The source text. + The result text. + + + + Replace characters above 127 by entities. + + The source text. + If set to false, the function will not use known entities name. Default is true. + The result text. + + + + Replace characters above 127 by entities. + + The source text. + If set to false, the function will not use known entities name. Default is true. + If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized. + The result text + + + + Replace known entities by characters. + + The source text. + The result text. + + + + A collection of entities indexed by name. + + + + + A collection of entities indexed by value. + + + + + Represents a combined list and collection of HTML nodes. + + + + + Returns an enumerator that can iterate through the list. + + An IEnumerator for the entire list. + + + + Gets the number of elements actually contained in the list. + + + + + Gets the node at the specified index. + + + + + Gets a given node from the list. + + + + + Represents an enumerator that can iterate through the list. + + + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + + + Advances the enumerator to the next element of the collection. + + true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection. + + + + Gets the current element in the collection. + + + + + Gets the current element in the collection. + + + + + Represents an HTML navigator on an HTML document seen as a data store. + + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + + The input stream. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + + The input stream. + Indicates whether to look for byte order marks at the beginning of the stream. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + + The input stream. + The character encoding to use. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + + The input stream. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the stream. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + + The input stream. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the stream. + The minimum buffer size. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. + + The TextReader used to feed the HTML data into the document. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + + The complete file path to be read. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + + The complete file path to be read. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + + The complete file path to be read. + The character encoding to use. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + + The complete file path to be read. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + + The complete file path to be read. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the file. + The minimum buffer size. + + + + Moves to the next sibling of the current node. + + true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged. + + + + Moves to the previous sibling of the current node. + + true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node. + + + + Moves to the first sibling of the current node. + + true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node. + + + + Moves to the first child of the current node. + + true if there is a first child node, otherwise false. + + + + Moves to the parent of the current node. + + true if there is a parent node, otherwise false. + + + + Moves to the root node to which the current node belongs. + + + + + Moves to the same position as the specified HtmlNavigator. + + The HtmlNavigator positioned on the node that you want to move to. + true if successful, otherwise false. If false, the position of the navigator is unchanged. + + + + Moves to the node that has an attribute of type ID whose value matches the specified string. + + A string representing the ID value of the node to which you want to move. This argument does not need to be atomized. + true if the move was successful, otherwise false. If false, the position of the navigator is unchanged. + + + + Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. + + The HtmlNavigator that you want to compare against. + true if the two navigators have the same position, otherwise, false. + + + + Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. + + A new HtmlNavigator object positioned at the same node as the original HtmlNavigator. + + + + Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. + + The local name of the HTML attribute. + The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation. + The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node. + + + + Moves to the HTML attribute with matching LocalName and NamespaceURI. + + The local name of the HTML attribute. + The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation. + true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change. + + + + Moves to the first HTML attribute. + + true if the navigator is successful moving to the first HTML attribute, otherwise, false. + + + + Moves to the next HTML attribute. + + + + + + Returns the value of the namespace node corresponding to the specified local name. + Always returns string.Empty for the HtmlNavigator implementation. + + The local name of the namespace node. + Always returns string.Empty for the HtmlNavigator implementation. + + + + Moves the XPathNavigator to the namespace node with the specified local name. + Always returns false for the HtmlNavigator implementation. + + The local name of the namespace node. + Always returns false for the HtmlNavigator implementation. + + + + Moves the XPathNavigator to the first namespace node of the current element. + Always returns false for the HtmlNavigator implementation. + + An XPathNamespaceScope value describing the namespace scope. + Always returns false for the HtmlNavigator implementation. + + + + Moves the XPathNavigator to the next namespace node. + Always returns falsefor the HtmlNavigator implementation. + + An XPathNamespaceScope value describing the namespace scope. + Always returns false for the HtmlNavigator implementation. + + + + Gets the name of the current HTML node without the namespace prefix. + + + + + Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + + + + + Gets the qualified name of the current node. + + + + + Gets the prefix associated with the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + + + + + Gets the type of the current node. + + + + + Gets the text value of the current node. + + + + + Gets the base URI for the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + + + + + Gets the xml:lang scope for the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + + + + + Gets a value indicating whether the current node is an empty element. + + + + + Gets the XmlNameTable associated with this implementation. + + + + + Gets a value indicating whether the current node has child nodes. + + + + + Gets a value indicating whether the current node has child nodes. + + + + + Gets the current HTML node. + + + + + Gets the current HTML document. + + + + + Represents the type of a node. + + + + + The root of a document. + + + + + An HTML element. + + + + + An HTML comment. + + + + + A text node is always the child of an element or a document node. + + + + + Represents a parsing error found during document parsing. + + + + + Gets the type of error. + + + + + Gets the line number of this error in the document. + + + + + Gets the column number of this error in the document. + + + + + Gets the absolute stream position of this error in the document, relative to the start of the document. + + + + + Gets the the full text of the line containing the error. + + + + + Gets a description for the error. + + + + + Represents the type of parsing error. + + + + + A tag was not closed. + + + + + A tag was not opened. + + + + + There is a charset mismatch between stream and declared (META) encoding. + + + + + An end tag was not required. + + + + + An end tag is invalid at this position. + + + + + Represents an HTML text node. + + + + + Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + + + + + Gets or Sets the object and its content in HTML. + + + + + Gets or Sets the text of the node. + + + + + A utility class to get HTML document from HTTP. + + + + + Occurs before an HTTP request is executed. + + + + + Occurs after an HTTP request has been executed. + + + + + Occurs before an HTML document is handled. + + + + + Creates an instance of an HtmlWeb class. + + + + + Gets an HTML document from an Internet resource and saves it to the specified file. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The location of the file where you want to save the document. + + + + Gets an HTML document from an Internet resource and saves it to the specified file. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The location of the file where you want to save the document. + The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. + + + + Gets an HTML document from an Internet resource. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + A new HTML document. + + + + Loads an HTML document from an Internet resource. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND. + A new HTML document. + + + + Gets the cache file path for a specified url. + + The url fo which to retrieve the cache path. May not be null. + The cache file path. + + + + Gets the path extension for a given MIME content type. + + The input MIME content type. + The default path extension to return if any error occurs. + The MIME content type's path extension. + + + + Gets the MIME content type for a given path extension. + + The input path extension. + The default content type to return if any error occurs. + The path extention's MIME content type. + + + + Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The XmlTextWriter to which you want to save. + + + + Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The URL that specifies the XSLT stylesheet to load. + An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. + The XmlTextWriter to which you want to save. + + + + Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null. + The URL that specifies the XSLT stylesheet to load. + An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. + The XmlTextWriter to which you want to save. + A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes. + + + + Creates an instance of the given type from the specified Internet resource. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The requested type. + An newly created instance. + + + + Creates an instance of the given type from the specified Internet resource. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The URL that specifies the XSLT stylesheet to load. + An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. + The requested type. + An newly created instance. + + + + Creates an instance of the given type from the specified Internet resource. + + The requested URL, such as "http://Myserver/Mypath/Myfile.asp". + The URL that specifies the XSLT stylesheet to load. + An XsltArgumentList containing the namespace-qualified arguments used as input to the transform. + The requested type. + A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes. + An newly created instance. + + + + Gets a value indicating if the last document was retrieved from the cache. + + + + + Gets the URI of the Internet resource that actually responded to the request. + + + + + Gets or Sets a value indicating whether to get document only from the cache. + If this is set to true and document is not found in the cache, nothing will be loaded. + + + + + Gets or Sets a value indicating if cookies will be stored. + + + + + Gets the last request duration in milliseconds. + + + + + Gets or Sets a value indicating if document encoding must be automatically detected. + + + + + Gets the last request status. + + + + + Gets or Sets the size of the buffer used for memory operations. + + + + + Gets or Sets the cache path. If null, no caching mechanism will be used. + + + + + Gets or Sets a value indicating whether the caching mechanisms should be used or not. + + + + + Represents the method that will handle the PreRequest event. + + + + + Represents the method that will handle the PostResponse event. + + + + + Represents the method that will handle the PreHandleDocument event. + + + + + Represents an exception thrown by the HtmlWeb utility class. + + + + + Creates an instance of the HtmlWebException. + + The exception's message. + + + + Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. + + + + + Gets or sets the token representing code start. + + + + + Gets or sets the token representing code end. + + + + + Gets or sets the token representing code directive. + + + + + Gets or sets the token representing response write directive. + + + + + Creates a mixed code document instance. + + + + + Loads a mixed code document from a stream. + + The input stream. + + + + Loads a mixed code document from a stream. + + The input stream. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Loads a mixed code document from a stream. + + The input stream. + The character encoding to use. + + + + Loads a mixed code document from a stream. + + The input stream. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Loads a mixed code document from a stream. + + The input stream. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the file. + The minimum buffer size. + + + + Loads a mixed code document from a file. + + The complete file path to be read. + + + + Loads a mixed code document from a file. + + The complete file path to be read. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Loads a mixed code document from a file. + + The complete file path to be read. + The character encoding to use. + + + + Loads a mixed code document from a file. + + The complete file path to be read. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the file. + + + + Loads a mixed code document from a file. + + The complete file path to be read. + The character encoding to use. + Indicates whether to look for byte order marks at the beginning of the file. + The minimum buffer size. + + + + Loads a mixed document from a text + + The text to load. + + + + Loads the mixed code document from the specified TextReader. + + The TextReader used to feed the HTML data into the document. + + + + Saves the mixed document to the specified stream. + + The stream to which you want to save. + + + + Saves the mixed document to the specified stream. + + The stream to which you want to save. + The character encoding to use. + + + + Saves the mixed document to the specified file. + + The location of the file where you want to save the document. + + + + Saves the mixed document to the specified file. + + The location of the file where you want to save the document. + The character encoding to use. + + + + Saves the mixed document to the specified StreamWriter. + + The StreamWriter to which you want to save. + + + + Saves the mixed document to the specified TextWriter. + + The TextWriter to which you want to save. + + + + Create a text fragment instances. + + The newly created text fragment instance. + + + + Create a code fragment instances. + + The newly created code fragment instance. + + + + Gets the encoding of the stream used to read the document. + + + + + Gets the list of code fragments in the document. + + + + + Gets the list of text fragments in the document. + + + + + Gets the list of all fragments in the document. + + + + + Gets the code represented by the mixed code document seen as a template. + + + + + Represents a fragment of code in a mixed code document. + + + + + Represents a base class for fragments in a mixed code document. + + + + + Gets the type of fragment. + + + + + Gets the fragment position in the document's stream. + + + + + Gets the line number of the fragment. + + + + + Gets the line position (column) of the fragment. + + + + + Gets the fragement text. + + + + + Gets the fragment code text. + + + + + Represents a list of mixed code fragments. + + + + + Appends a fragment to the list of fragments. + + The fragment to append. May not be null. + + + + Prepends a fragment to the list of fragments. + + The fragment to append. May not be null. + + + + Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. + + The fragment to remove. May not be null. + + + + Remove a fragment from the list of fragments, using its index in the list. + + The index of the fragment to remove. + + + + Remove all fragments from the list. + + + + + Gets an enumerator that can iterate through the fragment list. + + + + + Gets an enumerator that can iterate through the fragment list. + + + + + Gets the number of fragments contained in the list. + + + + + Gets a fragment from the list using its index. + + + + + Represents a fragment enumerator. + + + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + + + Advances the enumerator to the next element of the collection. + + true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + + + + Gets the current element in the collection. + + + + + Gets the current element in the collection. + + + + + Represents the type of fragement in a mixed code document. + + + + + The fragment contains code. + + + + + The fragment contains text. + + + + + Represents a fragment of text in a mixed code document. + + + + + Gets the fragment text. + + + + + JSBeautifyOptions + + + + + indent_size + + + + + indent_char + + + + + indent_level + + + + + preserve_newlines + + + + + JSBeautify + + + + + GetResult + + + + + + JSBeautify + + + + + + + 工具条控件集合 + + + + + 构造函数 + + 父控件实例 + + + + 菜单项复选框控件(单选框) + + + + + 菜单项控件基类(抽象类) + + + + + 菜单项控件基类(抽象类) + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 添加子控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 点击时隐藏菜单,可以配合使用CssStyle=cursor:default; + + + + + 图标地址 + + + + + 预定义图标 + + + + + 文本 + + + + + 上下文菜单 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发复选框状态改变事件 + + 事件参数 + + + + 分组名(如果指定分组名,则此控件被渲染为单选框) + + + + + [AJAX属性]是否选中 + + + + + 是否自动回发 + + + + + 复选框状态改变事件(需要启用AutoPostBack) + + + + + 定时器控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 获取 Hidden 属性改变的 JavaScript 脚本 + + 客户端脚本 + + + + 处理回发事件 + + 事件参数 + + + + 触发定时事件 + + 事件参数 + + + + 不向页面输出控件的外部容器 + + + + + 定时间隔(单位:秒) + + + + + 定时事件 + + + + + 支持提示的表单字段基类(抽象类) + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 添加提示信息 + + HtmlNodeBuilder实例 + + + + [AJAX属性]提示文本 + + + + + [AJAX属性]提示文本的标题 + + + + + [AJAX属性]是否自动隐藏提示信息 + + + + + 用户控件的容器 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 取得第一个子控件 + + + + + + + 不向页面输出控件的外部容器 + + + + + 单项按钮项 + + + + + 构造函数 + + + + + 构造函数 + + 文本 + 值 + + + + 构造函数 + + 文本 + 值 + 是否选中 + + + + 是否选中 + + + + + 显示的文本 + + + + + 值 + + + + + 单选项集合 + + + + + 通过文本查找单选项 + + 文本 + 单选项 + + + + 通过文本查找单选项 + + 文本 + 是否去除HTML标签 + 单选项 + + + + 通过值查找单选项 + + 值 + 单选项 + + + + 添加单选项 + + 文本 + 值 + 新元素的插入位置 + + + + 确认对话框帮助类(静态类) + + + + + 确认对话框默认图标 + + + + + 显示消息框 + + + + + + 显示消息框 + + + + + + + 显示消息框 + + + + + + + 显示消息框 + + + + + + + + 获取显示确认对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 对话框图标 + 客户端脚本 + + + + 获取显示确认对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 对话框图标 + 点击确定按钮执行的客户端脚本 + 点击取消按钮执行的客户端脚本 + 客户端脚本 + + + + 获取显示确认对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 对话框图标 + 点击确定按钮执行的客户端脚本 + 点击取消按钮执行的客户端脚本 + 弹出对话框的目标页面 + 客户端脚本 + + + + 当前活动窗体帮助类(静态类) + + + + + 获取将values值写回控件的客户端脚本 + + 需要写回的字符串列表 + 客户端脚本 + + + + 获取关闭当前激活窗体的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活窗体并刷新父页面的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活窗体并回发父页面的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活窗体并回发父页面的客户端脚本 + + 回发参数 + 客户端脚本 + + + + 获取关闭当前激活窗体并执行脚本的客户端脚本 + + 回发参数 + 客户端脚本 + + + + 菜单项按钮控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发事件 + + 事件参数 + + + + 触发按钮点击事件 + + 事件参数 + + + + 是否可以回发 + + + + + 点击按钮时需要执行的客户端脚本 + + + + + 提交之前需要验证的表单名称列表 + + + + + 验证失败时提示对话框弹出位置 + + + + + 验证失败时是否出现提示对话框 + + + + + 确认对话框标题 + + + + + 确认对话框内容 + + + + + 确认对话框提示图标 + + + + + 确认对话框弹出位置 + + + + + 按钮点击事件 + + + + + 菜单项文本控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 菜单项分隔符控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 菜单项超链接控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 链接地址 + + + + + 链接目标 + + + + + 菜单项控件集合 + + + + + 构造函数 + + 父控件实例 + + + + 带下拉列表的按钮 + + + + + 按钮控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 获取按钮客户端点击事件的脚本 + + 验证表单列表 + 表单验证提示消息目标页面 + 是否显示表单验证提示对话框 + 启用回发 + 回发脚本 + 确认对话框消息 + 确认对话框标题 + 确认对话框图标 + 确认对话框目标页面 + 自定义客户端点击脚本 + 需要禁用的控件客户端ID + 客户端脚本 + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 处理回发事件 + + 事件参数 + + + + 触发按钮点击事件 + + 事件参数 + + + + 回发之前禁用按钮(防止重复提交) + + + + + 是否可以回发 + + + + + [AJAX属性]是否被按下 + + + + + 是否可以按下 + + + + + [AJAX属性]点击按钮时需要执行的客户端脚本 + + + + + [AJAX属性]预定义图标 + + + + + 按钮的大小 + + + + + 图标地址 + + + + + 图标摆放位置 + + + + + [AJAX属性]按钮文本 + + + + + [AJAX属性]提示文本 + + + + + 提示文本类型 + + + + + Tab键索引 + + + + + 按钮类型 + + + + + 需要验证的表单名称列表(逗号分隔) + + + + + 验证失败时提示对话框弹出位置 + + + + + 验证失败时是否出现提示对话框 + + + + + [AJAX属性]确认对话框标题 + + + + + [AJAX属性]确认对话框内容 + + + + + [AJAX属性]确认对话框提示图标 + + + + + [AJAX属性]确认对话框弹出位置 + + + + + 按钮的上下文菜单 + + + + + 按钮的上下文菜单 + + + + + 按钮点击事件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 菜单控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不向页面输出控件的外部容器 + + + + + 菜单项集合 + + + + + 页面配置管理器(每个页面必须包含一个 PageManager 控件) + + + + + 渲染控件的开始标签 + + 输出流 + + + + 渲染控件的结束标签 + + 输出流 + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + + 事件参数 + 客户端脚本 + + + + 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + + 事件参数 + 是否在回发前验证表单(在PageManager上进行表单配置) + 客户端脚本 + + + + 处理回发事件 + + 事件参数 + + + + 触发自定义事件 + + 事件参数 + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 自定义页面加载图片 + + + + + 自动调整此容器的宽度和高度,以填充整个页面 + + + + + 是否隐藏滚动条 + + + + + 每次页面回发后总是执行onReady脚本(包括Ajax局部回发) + + + + + 是否启用页面加载标示 + + + + + 需要在AJAX回发时更新的Asp.net控件列表(逗号分隔) + + + + + 本次AJAX请求过程中需要更新TemplateField的表格 + + + + + 本次AJAX请求过程中重新加载的表格 + + + + + 是否启用表单改变确认对话框 + + + + + 样式 + + + + + 自定义样式的根路径 + + + + + 自定义样式的名称 + + + + + 语言 + + + + + 是否启用Ajax + + + + + 是否启用Ajax正在加载提示 + + + + + Ajax正在加载提示的类型 + + + + + Ajax超时时间(单位:秒,默认:60秒) + + + + + 是否启用FState压缩(默认为false) + + + + + 是否向页面输出IE=edge标识 + + + + + 需要验证的表单名称列表(逗号分隔),需配合CustomEvent使用 + + + + + 验证失败时提示对话框弹出位置,需配合CustomEvent使用 + + + + + 验证失败时是否出现提示对话框,需配合CustomEvent使用 + + + + + 表单中消息的位置 + + + + + 表单中标签的位置 + + + + + 表单中右侧的空白宽度 + + + + + 表单中字段标签的宽度 + + + + + 表单中字段与标签的分隔符 + + + + + PageManager在当前页面的实例 + + + + + 自定义事件 + + + + + 图片控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + [AJAX属性]链接地址 + + + + + [AJAX属性]预定义图标 + + + + + [AJAX属性]图片的宽度 + + + + + [AJAX属性]图片的高度 + + + + + [AJAX属性]图片的样式类 + + + + + [AJAX属性]图片的样式 + + + + + [AJAX属性]图片的Alt + + + + + 文件上传控件 + + + + + 构造函数 + + + + + 将上载文件的内容保存到 Web 服务器上的指定路径 + + 保存的文件的名称 + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 处理回发事件 + + 事件参数 + + + + 触发文件选定事件 + + 事件参数 + + + + 不支持此属性 + + + + + 允许上传的文件类型(仅部分浏览器支持) + + + + + 按钮文本 + + + + + 是否只显示按钮,不显示只读输入框 + + + + + 按钮图标 + + + + + 按钮图标地址 + + + + + 上传的文件 + + + + + 是否包含文件 + + + + + 客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名) + + + + + 客户端文件名称,不包含目录路径 + + + + + 文件选定事件(需要启用AutoPostBack) + + + + + 隐藏表单控件 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 扩展文本框控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发事件 + + 事件参数 + + + + 触发第一个触发按钮点击事件 + + 事件参数 + + + + 触发第二个触发按钮点击事件 + + 事件参数 + + + + 是否允许编辑 + + + + + 是否显示触发器 + + + + + [AJAX属性]是否显示第一个触发器 + + + + + [AJAX属性]是否显示第一个触发器 + + + + + 是否可以回发第一个触发器 + + + + + 是否可以回发第一个触发器 + + + + + 第一个触发器图片 + + + + + 第二个触发器图片 + + + + + 第一个触发器图片 + + + + + 第二个触发器图片 + + + + + 点击第一个触发器时需要执行的客户端脚本 + + + + + 点击第二个触发器时需要执行的客户端脚本 + + + + + 第一个触发按钮点击事件 + + + + + 第二个触发按钮点击事件 + + + + + 链接按钮控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发事件 + + 事件参数 + + + + 触发按钮点击事件 + + 事件参数 + + + + [AJAX属性]文本 + + + + + [AJAX属性]点击按钮时需要执行的客户端脚本 + + + + + 提交之前需要验证的表单名称列表 + + + + + 验证失败时提示对话框弹出位置 + + + + + 验证失败时是否出现提示对话框 + + + + + 是否可以回发 + + + + + 是否对文本编码 + + + + + [AJAX属性]确认对话框标题 + + + + + [AJAX属性]确认对话框内容 + + + + + [AJAX属性]确认对话框提示图标 + + + + + [AJAX属性]确认对话框弹出位置 + + + + + 按钮点击事件 + + + + + 单选框列表控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 绑定到数据源 + + + + + 绑定到数据表 + + + + + + 绑定到可枚举列表 + + + + + + 取得属性值 + + + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发选中项改变事件 + + 事件参数 + + + + 是否必填项 + + + + + 为空时提示信息 + + + + + 是否自动回发 + + + + + 渲染成几列 + + + + + 是否按照纵向顺序渲染 + + + + + 显示文本的数据字段 + + + + + 显示文本的格式化字符串 + + + + + 显示值的数据字段 + + + + + 数据源 + + + + + [AJAX属性]选中项的值 + + + + + [AJAX属性]选中项的索引 + + + + + 选中项 + + + + + 单选项集合 + + + + + 保存的单选项数据(内部使用) + + + + + 选中项改变事件(需要启用AutoPostBack) + + + + + 单选框控件 + + + + + 构造函数 + + + + + 设置本组内其他RadioButton的Checked属性为false + 简单处理,只查找和此RadioButton在同一个层级的RadioButton + + + + + 初始化控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发单选框状态改变事件 + + 事件参数 + + + + 文本 + + + + + [AJAX属性]是否选中 + + + + + 分组的名称 + + + + + 是否自动回发 + + + + + 单选框状态改变事件(需要启用AutoPostBack) + + + + + 扩展文本框控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 触发按钮点击事件 + + 事件参数 + + + + 处理回发事件 + + 事件参数 + + + + 是否允许编辑 + + + + + 是否显示触发器 + + + + + 是否可以回发 + + + + + 右侧按钮的图片 + + + + + 右侧的图标 + + + + + 点击按钮时需要执行的客户端脚本 + + + + + 触发按钮点击事件 + + + + + 为设计时提供的表格列集合编辑器 + + + + + 构造函数 + + 控件类型 + + + + 获取此集合编辑器可包含的数据类型 + + 类型集合 + + + + 表格行选中事件参数 + + + + + 构造函数 + + 行索引 + + + + 行索引 + + + + + 表格行点击事件参数 + + + + + 构造函数 + + 行索引 + /// 列ID + + + + 行索引 + + + + + 列ID + + + + + 表格列基类(抽象类) + + + + + 表格列基类(抽象类) + + + + + 取得列头渲染后的HTML + + 渲染后的HTML + + + + 取得列渲染后的HTML + + 表格行实例 + 渲染后的HTML + + + + 获取列的状态 + + + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 添加表格列的渲染脚本 + + + + + + 表格对象 + + + + + 列索引 + + + + + 排序字段 + + + + + 允许锁定 + + + + + 是否处于锁定状态 + + + + + 是否隐藏列 + + + + + 列ID(如果没有设置,则为ClientID) + + + + + 标题栏显示的文字 + + + + + 标题栏文字的提示文本 + + + + + 标题栏文字的提示文本类型 + + + + + 列宽度 + + + + + 控制子控件的尺寸(表格列使用HBox布局) + + + + + 此列会扩展所有未使用的宽度 + + + + + 文本的排列位置 + + + + + 启用表头菜单 + + + + + 启用隐藏列功能 + + + + + 表格单元格容器样式类 + + + + + 本列是否需要保存状态(目前只有CheckBoxField实现了这个定义) + + + + + 取得提示字符串 + + + + + + + 此列模拟树显示时的层次字段 + + + + + 提示文本 + + + + + 提示字段名称 + + + + + 提示字段格式化字符串 + + + + + 表格可编辑列 + + + + + 表格可编辑列的基类 + + + + + 字段名称 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 单元格编辑控件 + + + + + 字段类型 + + + + + 渲染器 + + + + + 渲染器的参数 + + + + + 自定义渲染器函数(JavaScript函数) + + + + + 处理数据库中null值,默认为空字符串 + + + + + 显示之前进行HTML编码(默认为true) + + + + + 表格可编辑复选框列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 表格数据绑定列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 启用表头菜单 + + + + + 是否允许隐藏列 + + + + + 是否启用分页行号 + + + + + 表格分组列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 列数据 + + + + + 区域面板控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 区域集合 + + + + + 手风琴控件 + + + + + + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 处理回发事件 + + 事件参数 + + + + 触发面板改变事件 + + 事件参数 + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 是否启用折叠按钮 + + + + + 是否启用激活在最上面 + + + + + 是否启用填充整个区域 + + + + + 切换面板时是否自动回发 + + + + + [AJAX属性]激活面板的索引 + + + + + 当前激活的面板 + + + + + 手风琴面板集合 + + + + + 面板改变事件 + + + + + 手风琴面板控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 鼠标移到标题栏是否高亮显示 + + + + + 手风琴面板控件集合 + + + + + 构造函数 + + 父控件实例 + + + + 树节点命令事件参数 + + + + + 构造函数 + + 树节点 + 命令名称 + 命令参数 + + + + 树实例 + + + + + 树节点ID + + + + + 命令名称 + + + + + 命令参数 + + + + + 树节点选中事件参数 + + + + + 构造函数 + + 树节点 + 是否选中 + + + + 树节点 + + + + + 节点ID + + + + + 是否选中 + + + + + 树节点 + + + + + 设置属性的值 + + + + + + + 树实例 + + + + + 父节点 + + + + + 树节点集合 + + + + + 展开树节点是否回发 + + + + + 折叠树节点是否回发 + + + + + 单击树节点是否回发 + + + + + 点击按钮时需要执行的客户端脚本 + + + + + 命令名称 + + + + + 命令参数 + + + + + 是否选中 + + + + + 是否启用复选框 + + + + + 改变复选框状态是否自动回发 + + + + + 文本 + + + + + 树节点ID + + + + + 是否叶子节点 + + + + + 是否可用 + + + + + 是否展开 + + + + + 链接目标 + + + + + 链接地址 + + + + + 图标地址 + + + + + 预定义图标 + + + + + 提示文本 + + + + + 树节点控件集合 + + + + + 构造函数 + + 树实例 + 父节点 + + + + 插入树节点 + + 插入索引位置 + 树节点实例 + + + + 设置每个节点的Tree实例 + + + + + + 树节点的属性映射 + + + + + 映射源 + + + + + 映射目标 + + + + + 树节点的属性映射集合 + + + + + 窗体关闭事件参数 + + + + + 构造函数 + + 关闭参数 + + + + 关闭参数 + + + + + 表格行预绑定事件参数 + + + + + 构造函数 + + 行数据源 + 行索引 + + + + 是否取消添加本节点 + + + + + 行数据源(如果数据源为DataTable,则DataItem为DataRowView) + + + + + 行索引 + + + + + 表格分页事件参数 + + + + + 构造函数 + + 新页面的索引 + + + + 新页面的索引 + + + + + 表格行命令事件参数 + + + + + 构造函数 + + 行索引 + 列索引 + 命令名称 + 命令参数 + + + + 行索引 + + + + + 列索引 + + + + + 命令名称 + + + + + 命令参数 + + + + + 表格行绑定事件参数 + + + + + 构造函数 + + 行数据源 + 行索引 + 本行各列的值 + + + + 本行各列的值(渲染后的HTML片段) + + + + + 行数据源 + + + + + 行索引 + + + + + 表格行点击事件参数 + + + + + 构造函数 + + 行索引 + + + + 行索引 + + + + + 表格链接按钮列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 启用表头菜单 + + + + + 是否允许隐藏列 + + + + + 字段名称 + + + + + 字段格式化字符串 + + + + + 按钮文本 + + + + + 显示之前进行HTML编码(默认为true) + + + + + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + + + + + 是否可以回发 + + + + + 是否可用 + + + + + 点击按钮时需要执行的客户端脚本 + + + + + 提交之前需要验证的表单名称列表 + + + + + 验证失败时提示对话框弹出位置 + + + + + 验证失败时是否出现提示对话框 + + + + + 图标 + + + + + 图标地址 + + + + + 确认对话框标题 + + + + + 确认对话框内容 + + + + + 确认对话框提示图标 + + + + + 确认对话框弹出位置 + + + + + 命令名称 + + + + + 命令参数 + + + + + 是否启用AJAX + + + + + 区域控件 + + + + + Tab 控件必须包含在 TabStrip 中 + + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 是否可以拖动分隔条 + + + + + 位置 + + + + + Region控件集合 + + + + + 构造函数 + + 父控件实例 + + + + 日期控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发事件 + + 事件参数 + + + + 触发日期选定事件 + + 事件参数 + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + [AJAX属性]选择的日期 + + + + + 日期格式 + + + + + 最大日期 + + + + + 最小日期 + + + + + 选择日期是否自动回发 + + + + + 日期选定事件(需要启用EnableDateSelect) + + + + + 工具条控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 页脚工具栏的排列位置 + + + + + 工具条的位置 + + + + + 工具条项集合 + + + + + 工具栏文本控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + [AJAX属性]文本 + + + + + 工具栏分隔符控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 工具栏左右分隔符控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 链接控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + [AJAX属性]文本 + + + + + [AJAX属性]点击链接时需要执行的客户端脚本 + + + + + [AJAX属性]链接地址 + + + + + [AJAX属性]链接目标 + + + + + 是否对文本编码 + + + + + 页面上下文帮助类(静态类),包括向页面注册脚本、刷新当前页面、页面重定向等实用函数 + + + + + 跳转到指定的Url + + + + + + 跳转到指定的Url,Target指定在哪个窗口中跳转(_self,_parent,_top) + + + _self,_parent,_top + + + + 刷新当前页面 + + + + + 刷新指定页面 + + 目标页面 + + + + 注册页面脚本 + + 客户端脚本 + + + + 树控件 + + + + + 构造函数 + + + + + 初始化控件 + + + + + 渲染 HTML 之前调用 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 绑定数据源 + + + + + + 如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 + 同时处理 AutoLeafIdentification 属性 + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 处理回发事件 + + 事件参数 + + + + 触发节点绑定后事件 + + 事件参数 + + + + 触发节点预绑定事件 + + 事件参数 + + + + 触发节点选中事件 + + 事件参数 + + + + 触发节点点击事件 + + 事件参数 + + + + 触发节点展开事件 + + 事件参数 + + + + 触发节点展开事件 + + 事件参数 + + + + 触发节点延迟加载事件 + + 事件参数 + + + + 获取所有展开节点的ID数组 + + 节点的ID数组 + + + + 获取指定节点集合中所有展开节点的ID数组 + + 指定的节点集合 + 节点的ID数组 + + + + 获取所有展开节点的数组 + + 节点的数组 + + + + 获取指定节点集合中所有展开节点的数组 + + 指定的节点集合 + 节点的数组 + + + + 折叠所有节点 + + + + + 折叠指定节点集合中的所有节点 + + 指定的节点集合 + + + + 展开所有节点 + + + + + 展开指定节点集合中的所有节点 + + 指定的节点集合 + + + + 获取选中节点的ID数组 + + 节点的ID数组 + + + + 获取指定节点集合中选中节点的ID数组 + + 指定的节点集合 + 节点的ID数组 + + + + 获取选中节点的数组 + + 节点的数组 + + + + 获取指定节点集合中选中节点的数组 + + 指定的节点集合 + 节点的数组 + + + + 选中所有节点的复选框 + + + + + 选中指定节点的复选框 + + 指定的节点集合 + + + + 反选所有节点的复选框 + + + + + 反选指定节点的复选框 + + 指定的节点集合 + + + + 查找树节点 + + 节点ID + 树节点 + + + + 在指定的节点集合中查找树节点 + + 节点ID + 指定的节点集合 + 树节点 + + + + 获取展开全部节点的的客户端脚本 + + 客户端脚本 + + + + 获取折叠全部节点的的客户端脚本 + + 客户端脚本 + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 单击切换节点的折叠展开状态 + + + + + 启用箭头 + + + + + 启用节点之间连线 + + + + + 启用动画 + + + + + 每次只能展开一个 + + + + + 启用图标 + + + + + 自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性(默认:true) + + + + + 启用多行选择 + + + + + 数据源 + + + + + 树节点集合 + + + + + 选中的树节点 + + + + + [AJAX属性]选中的树节点ID + + + + + [AJAX属性]选中的树节点ID列表 + + + + + 树控件属性与数据源节点的映射关系 + + + + + 选中行 + + + + + 展开的节点列表 + + + + + 选中的节点列表 + + + + + 树节点集合的 JSON 表示(内部使用) + + + + + 节点绑定后事件 + + + + + 节点预绑定事件 + + + + + 节点选中事件 + + + + + 节点点击事件 + + + + + 节点展开事件 + + + + + 节点展开事件 + + + + + 节点延迟加载事件 + + + + + 脚本(不和控件关联的脚本) + + + + + 脚本 + + + + + 层次(层次越高,注册越靠后)(缺省100) + 负值表示在所有注册脚本之前执行 + + + + + 容器面板控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 表单面板控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理列 + + + + + + 添加列 + + 行ID集合 + 开始行的索引(包含) + 结束行的索引(包含) + 行的列数 + + + + 添加Items变量 + + + + + + + + 取得当前行的列数 + + + + + + + 取得当前行 columnIndex 列的控件 + + + + + + + + 不支持此属性 + + + + + 表单行控件集合 + + + + + 表单行控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 格式化widths + + + + + + + 各列的宽度,空格分割 + + + + + 子控件集合 + + + + + 表单行控件集合 + + + + + 构造函数 + + 父控件实例 + + + + 分组面板控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 复选框控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发复选框状态改变事件 + + 事件参数 + + + + 文本 + + + + + [AJAX属性]是否选中 + + + + + 是否自动回发 + + + + + 复选框状态改变事件(需要启用AutoPostBack) + + + + + 简单的表单容器控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 窗体控件 + + + + + 构造函数 + + + + + 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + + 输出流 + + + + 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + + 输出流 + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 获取 Hidden 属性改变的 JavaScript 脚本 + Window 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + + + + + 保存服务器控件的ClientID + 可以调用ActiveWindow.GetWriteBackValueReference在子页面向这些服务器控件写入值 + + + + + 获取窗体内IFrame回发页面的客户端脚本(比如:__doPostBack('','eventArgument');) + + 事件参数 + 客户端脚本 + + + + 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + + 事件参数 + 客户端脚本 + + + + 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + + 事件参数 + 是否在回发前验证表单(在PageManager上进行表单配置) + 客户端脚本 + + + + 获取显示窗体的客户端脚本 + + 客户端脚本 + + + + 获取显示窗体的客户端脚本 + + IFrame地址 + 客户端脚本 + + + + 获取显示窗体的客户端脚本 + + IFrame地址 + 窗体标题 + 客户端脚本 + + + + 获取显示窗体的客户端脚本 + + 窗体宽度 + 窗体高度 + 客户端脚本 + + + + 获取显示窗体的客户端脚本 + + 窗体标题 + 窗体宽度 + 窗体高度 + 客户端脚本 + + + + 获取显示窗体的客户端脚本 + + IFrame地址 + 窗体标题 + 窗体宽度 + 窗体高度 + 客户端脚本 + + + + 获取最大化窗体尺寸的客户端脚本 + + 客户端脚本 + + + + 获取恢复窗体尺寸的客户端脚本 + + 客户端脚本 + + + + 获取最小化窗体尺寸的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活Window的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活Window然后刷新页面的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活Window然后回发页面的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活Window然后回发页面的客户端脚本 + + 客户端脚本 + + + + 获取关闭当前激活Window然后执行脚本的客户端脚本 + + 执行的脚本 + 客户端脚本 + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 处理回发事件 + + 事件参数 + + + + 触发窗体关闭事件 + + 事件参数 + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 为了放置不同页面的Window的ClientID发生冲突,加上GUID + + + + + [只读]Window的IFrameName必须是唯一的,在所有页面中是唯一的 + 所以不要手工定义Window的IFrameName + + + + + 窗口的位置 + + + + + 左上角位置 + + + + + 左上角位置 + + + + + 是否可以关闭 + + + + + 是否可以移动 + + + + + 是否可以最大化 + + + + + 是否可以最小化 + + + + + 最小高度 + + + + + 最小宽度 + + + + + 是否模式窗口 + + + + + 是否可以改变窗口大小 + + + + + 点击关闭按钮时需要执行的客户端脚本 + + + + + 关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作) + + + + + 弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效) + + + + + 窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack) + + + + + 表格排序事件参数 + + + + + 构造函数 + + 排序字段 + 排序方向 + 列索引 + + + + 排序字段 + + + + + 排序方向 + + + + + 列索引 + + + + + 表格控件 + + + + + 模板列占位符前缀 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 当前分页的开始行和结束行 + + + + + + 渲染开始标签 + + 输出流 + + + + 渲染结束标签 + + 输出流 + + + + 当在客户端修改了模板列中的值,调用此函数来告诉表格控件需要更新这些值; + 如果对表格重新进行了数据绑定,则不需要调用此函数,因为重新绑定后会更新表格的全部内容 + + + + + 绑定到数据源 + + + + + 清空Rows,同时清除所有子控件中的GridRow控件 + + + + + 获取用户修改的数据 + + + + + + 获取删除的行索引列表 + + + + + + 获取新增的行数据 + + + + + + 获取用户修改的行数据 + + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 接受用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + + + + + 获取接受用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + + 客户端脚本 + + + + 拒绝用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + + + + + 获取拒绝用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + + + + + 清空表格选中项 + + + + + 获取清空表格选中项的客户端脚本 + + 客户端脚本 + + + + 添加一条新纪录 + + 缺省值 + + + + 添加一条新纪录 + + 缺省值 + 是否添加到末尾 + + + + 获取添加一条新纪录的客户端脚本 + + 缺省值 + 客户端脚本 + + + + 获取添加一条新纪录的客户端脚本 + + 缺省值 + 是否添加到末尾 + 客户端脚本 + + + + 删除选中行(或者单元格) + + + + + 获取删除选中行(或者单元格)的客户端脚本 + + 客户端脚本 + + + + 获取表格是否有选中项的客户端脚本 + + 客户端脚本 + + + + 获取表格选中项数的客户端脚本 + + 客户端脚本 + + + + 获取表格选中单元格的客户端脚本(仅用于AllowCellEditing模式) + + 客户端脚本 + + + + 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + + 客户端脚本 + + + + 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 客户端脚本 + + + + 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 对话框图标 + 客户端脚本 + + + + 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 客户端脚本 + + + + 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 客户端脚本 + + + + 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 对话框图标 + 客户端脚本 + + + + 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 客户端脚本 + + + + 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 客户端脚本 + + + + 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 对话框图标 + 客户端脚本 + + + + 通过列ID获取列实例 + + 列ID + 列实例 + + + + 通过列索引获取列实例 + + 列索引 + 列实例 + + + + 选中所有行(设置SelectedRowIndexArray属性) + + + + + 展开全部的行扩展列 + + + + + 折叠全部的行扩展列 + + + + + 处理回发事件 + + 事件参数 + + + + 获取Columns前面的列(比如索引列,选择框列) + + + + + + 触发排序事件 + + 事件参数 + + + + 触发绑定前事件 + + 事件参数 + + + + 触发行绑定前事件 + + 事件参数 + + + + 触发行绑定后事件 + + 事件参数 + + + + 触发行内事件 + + 事件参数 + + + + 触发页索引改变事件 + + 事件参数 + + + + 触发行点击事件 + + 事件参数 + + + + 触发行双击事件 + + 事件参数 + + + + 触发行选中事件 + + 事件参数 + + + + 触发结束编辑事件 + + 事件参数 + + + + 装载控件状态 + + + + + + 保存控件状态 + + + + + + 初始化 + + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 允许单元格编辑 + + + + + 编辑单元格时点击单元格的次数(默认为2次) + + + + + 允许列锁定 + + + + + 允许服务器端分页 + + + + + 是否数据库分页 + + + + + 服务器端分页后清空选中的行 + + + + + 每页显示项数 + + + + + [AJAX属性]当前显示页索引 + + + + + [AJAX属性]总页数 + + + + + [AJAX属性]记录的总个数 + + + + + 允许服务器端排序 + + + + + 排序方向("ASC", "DESC") + + + + + 当前排序字段(只读) + + + + + 启用合计行 + + + + + [AJAX属性]合计行数据 + + + + + 合计行的位置 + + + + + 数据为空时显示在内容区域的文本,可以是HTML标签 + + + + + 行中文字的垂直排列位置(默认为Middle) + + + + + 是否延迟渲染 + + + + + 展开所有的行扩展列 + + + + + 启用表格中的文字选择 + + + + + 显示表格表头 + + + + + 显示分页工具条右侧的分页信息 + + + + + 启用表头菜单 + + + + + 启用表格列分隔线(默认为false) + + + + + 启用表格行分隔线(默认为true) + + + + + 启用交替行显示不同的颜色 + + + + + 启用鼠标移动到行的颜色 + + + + + 选中行是否自动回发 + + + + + 点击行是否自动回发 + + + + + 双击行是否自动回发 + + + + + 结束编辑是否自动回发(需要启用AllowCellEditing) + + + + + 自动扩展宽度以填充剩余空间的列(ColumnID) + + + + + 成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效) + + + + + 启用多选框 + + + + + 只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效) + + + + + 启用多行选择 + + + + + [AJAX属性]选中行的索引(列表中的第一项) + + + + + [AJAX属性]选中的单元格([行索引,列索引]) + + + + + [AJAX属性]选中行的索引列表 + + + + + [AJAX属性]隐藏的列名称列表(逗号分隔) + + + + + 数据源 + + + + + 行关键字段 + + + + + 行关键字段的值 + + + + + 分页工具条项集合 + + + + + 全部的列 + + + + + 列数据 + + + + + 行数据 + + + + + 保存的行数据(内部使用) + + + + + 排序事件 + + + + + 绑定前事件 + + + + + 行绑定前事件 + + + + + 行绑定后事件 + + + + + 行内事件 + + + + + 页索引改变事件 + + + + + 行点击事件(需要启用EnableRowClick) + + + + + 行双击事件(需要启用EnableRowDoubleClick) + + + + + 行选中事件(需要启用EnableRowSelect) + + + + + 结束编辑事件(需要启用EnableAfterEditEvent) + + + + + 表格数据绑定列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 是否可用 + + + + + 字段名称 + + + + + 字段格式化字符串 + + + + + 处理数据库中null值,默认为空字符串 + + + + + 显示之前进行HTML编码(默认为true) + + + + + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + + + + + 表格复选框列 + + + + + 取得单元格的数据 + + + + + + + + 本行的复选框是否处于选中状态 + + 行索引 + 选中状态 + + + + 设置本列复选框的选中状态 + + 行索引 + 是否选中 + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 是否可用(只在RenderAsStaticField=false时有效) + + + + + 是否自动回发(只在RenderAsStaticField=false时有效) + + + + + 字段名称 + + + + + 渲染为静态图片,否则渲染为可编辑的复选框 + + + + + 显示列头复选框(只在RenderAsStaticField=false时有效) + + + + + 是否启用AJAX + + + + + 命令名称 + + + + + 命令参数 + + + + + 表格窗体列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 启用表头菜单 + + + + + 是否允许隐藏列 + + + + + 是否可用 + + + + + 对应的窗体控件ID + + + + + 窗体标题对应的字段名称 + + + + + 窗体标题对应的字段格式化字符串 + + + + + 字段名称 + + + + + 字段格式化字符串 + + + + + 显示之前进行HTML编码(默认为true) + + + + + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + + + + + 绑定到IFrame地址的字段名称列表 + + + + + 绑定到IFrame地址的字段格式化字符串 + + + + + 对每个绑定到IFrame地址的字段进行URL编码(默认为true) + + + + + IFrame地址 + + + + + 显示文本 + + + + + 标题 + + + + + 图标 + + + + + 图标地址 + + + + + 表格图片列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 图片地址字段 + + + + + 图片地址字段格式化字符串 + + + + + 图片的宽度 + + + + + 图片的高度 + + + + + 表格模板列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 模板容器 + + + + + 是否渲染为行扩展列 + + + + + 双击展开折叠行扩展列 + + + + + 回车按键展开折叠行扩展列 + + + + + 点击图标展开折叠行扩展列时选中行 + + + + + 表格超链接列 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 是否可用 + + + + + 字段名称 + + + + + 字段格式化字符串 + + + + + 绑定到超链接地址的字段名称列表 + + + + + 对每个绑定到超链接地址的字段进行URL编码(此属性废弃,请使用UrlEncode属性) + + + + + 对每个绑定到超链接地址的字段进行URL编码(默认为true) + + + + + 绑定到超链接地址的字段格式化字符串 + + + + + 打开超链接的目标框架 + + + + + 超链接地址 + + + + + 超链接文本 + + + + + 显示之前进行HTML编码(默认为true) + + + + + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + + + + + 表格列集合 + + + + + 构造函数 + + 父控件实例 + + + + 用来作为模板列的数据绑定容器,实现了IDataItemContainer接口 + + + + + 构造函数 + + 数据源 + 行索引 + + + + 控件初始化事件 + + 事件参数 + + + + 渲染开始标签 + + ASP.NET服务器控件输出流 + + + + 渲染结束标签 + + ASP.NET服务器控件输出流 + + + + 数据源(IDataItemContainer成员) + + + + + 数据项索引(IDataItemContainer成员) + + + + + 数据项在控件中显示位置的索引(IDataItemContainer成员) + + + + + 表格行 + + + + + 构造函数 + + + + + 构造函数 + + 表格实例 + 行对应的数据源(在回发时为null) + 行序号 + + + + 当前行列状态列表 + + + + + + 恢复当前行列状态列表(同时更新相应的Values值) + + + + + + 更新当前行某列的渲染后的HTML + + + + + + 表格行中模板列控件列表(数据绑定时自动生成每个模板列控件ID,回发时从FState中回发模板列控件ID) + + + + + 绑定行的值 + + + + + 查找表格行内的控件 + + + + + + + 表格实例 + + + + + 本行对应的数据源(不维护状态) + + + + + 第几行 + + + + + 此行的状态信息 + + + + + 此行DataKeyNames字段的值 + + + + + 非公开属性,对于CheckBoxField可以通过GetCheckedState访问 + + + + + 表格行中模板列控件列表,一个典型的例子为:[GridRowControl, null, null, GridRowControl, null, null, null, null, null] + + + + + 表格行控件集合 + + + + + 列表项 + + + + + 构造函数 + + + + + 构造函数 + + 文本 + 值 + + + + 构造函数 + + 文本 + 值 + 是否选中 + + + + 是否选中 + + + + + 显示的文本 + + + + + 值 + + + + + 是否可选择 + + + + + 模拟树的层次(从0开始为根节点) + + + + + 列表项集合 + + + + + 通过文本查找列表项 + + 文本 + 列表项 + + + + 通过文本查找列表项 + + 文本 + 是否去除HTML标签 + 列表项 + + + + 通过值查找列表项 + + 值 + 列表项 + + + + 添加列表项 + + 文本 + 值 + 新元素的插入位置 + + + + 下拉列表控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 绑定到数据源 + + + + + 绑定到数据表格 + + 数据表格 + + + + 绑定到可枚举类型 + + 可枚举类型 + + + + 取得属性值 + + + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发选中项改变事件 + + 事件参数 + + + + 文本框为空时显示的文本 + + + + + [AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效) + + + + + [AJAX属性]选中项的值 + + + + + [AJAX属性]选中项的索引 + + + + + 选中项的文本 + + + + + 选中项 + + + + + [AJAX属性]选中项的值 + + + + + [AJAX属性]选中项的索引 + + + + + 选中项 + + + + + 下拉列表和字段的宽度相匹配 + + + + + 如果未定义选中项,则自动选中第一个子项(默认为true) + + + + + 是否可以选择多项 + + + + + 选择多项的分隔符 + + + + + 是否强制选中下拉列表中的项(启用编辑的情况下) + + + + + 是否可编辑,以便在录入时自动过滤下拉框中的值 + + + + + 是否启用模拟树显示 + + + + + 模拟树显示时指示所在层次的数据字段 + + + + + 是否可选择的字段 + + + + + 是否自动回发 + + + + + 显示文本字段 + + + + + 显示文本的格式化字符串 + + + + + 显示值字段 + + + + + 数据源 + + + + + 保存的列表项数据(内部使用) + + + + + 列表项集合 + + + + + 选中项改变事件(需要启用AutoPostBack) + + + + + 文本控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 是否对文本编码 + + + + + [AJAX属性]文本 + + + + + 多行文本框控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不支持此属性 + + + + + 是否自动增长高度 + + + + + 自动增长的最大高度 + + + + + 自动增长的最小高度 + + + + + 是否总是隐藏滚动条 + + + + + 选项卡控件 + + + + + 构造函数 + + + + + Tab 控件必须包含在 TabStrip 中 + + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 获取 Hidden 属性改变的 JavaScript 脚本 + Tab 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 获取显示选项卡的客户端脚本 + + 客户端脚本 + + + + 获取隐藏选项卡的客户端脚本 + + 客户端脚本 + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 是否可以关闭 + + + + + 选项卡面板控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 处理回发事件 + + 事件参数 + + + + 触发选项卡改变事件 + + 事件参数 + + + + 获取添加选项卡的脚本 + + 选项卡ID + IFrame地址 + 选项卡标题 + 是否可以关闭 + 客户端脚本 + + + + 获取添加选项卡的脚本 + + 选项卡ID + IFrame地址 + 选项卡标题 + 选项卡图标 + 是否可以关闭 + 客户端脚本 + + + + 获取移除选项卡的脚本 + + 选项卡ID + 客户端脚本 + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + 布局类型 + + + + + 切换选项卡时是否自动回发 + + + + + 是否启用右键菜单(可用来关闭当前Tab和所有其他Tab) + + + + + 选项卡显示的位置 + + + + + [AJAX属性]激活选项卡的索引 + + + + + 当前激活的选项卡 + + + + + 选项卡集合 + + + + + 选项卡改变事件 + + + + + 面板控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + HTML编辑框控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发数据 + 回发到服务器,判断控件的属性是否变化, + 如果变化返回true,则RaisePostDataChangedEvent + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发文本改变事件 + + 事件参数 + + + + 不支持此属性 + + + + + 不支持此属性 + + + + + [AJAX属性]文本 + + + + + 启用左右定位 + + + + + 启用颜色 + + + + + 启用字体 + + + + + 启用调整字体大小 + + + + + 启用格式化 + + + + + 启用创建链接 + + + + + 启用创建列表 + + + + + 启用源码视图 + + + + + 字体列表 + + + + + 启用中文字体 + + + + + 文本改变事件 + + + + + 日期选择框控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发事件 + + 事件参数 + + + + 触发日期选定事件 + + 事件参数 + + + + 是否允许编辑 + + + + + 选择的日期 + + + + + 启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd + + + + + 尝试解析日期的格式列表 + + + + + 日期格式 + + + + + 最大日期 + + + + + 最小日期 + + + + + 选择日期是否自动回发 + + + + + 日期选定事件(需要启用EnableDateSelect) + + + + + 选项卡集合 + + + + + 构造函数 + + 父控件实例 + + + + 控件相关脚本 + + + + + 要注册脚本的控件 + + + + + 脚本 + + + + + 布局类型 + + + + + 容器布局(默认值) + + + + + 锚点布局 + + + + + 区域布局 + + + + + 自适应布局(用于只有一个子控件的情况) + + + + + 手风琴布局(只用于Accordion控件) + + + + + 表单布局(用于SimpleForm和Form控件) + + + + + 卡片布局(只用于TabStrip控件) + + + + + 列布局 + + + + + 绝对定位布局 + + + + + 表格布局 + + + + + 垂直盒子布局 + + + + + 水平盒子布局 + + + + + 布局类型名称 + + + + + 数字输入框控件 + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 不允许小数 + + + + + 不允许负数 + + + + + 最大值 + + + + + 最小值 + + + + + 小数点后的位数(默认为2) + + + + + 文本框类型 + + + + + 普通文本框(默认值) + + + + + 密码输入框 + + + + + 文本框类型名称 + + + + + 提示框的类型 + + + + + Extjs的浮动提示框(默认值) + + + + + HTML标签的title属性 + + + + + 提示框的类型名称 + + + + + JavaScript帮助类 + + + + + 获取一段完成的JavaScript函数 + + 函数主体 + 函数参数 + 字符串表示的JavaScript函数 + + + + 获取延迟执行JavaScript脚本的字符串 + + 需要执行的脚本内容 + 延迟毫秒数 + 延迟执行的客户端脚本 + + + + 获取延迟执行JavaScript脚本的字符串 + + 需要执行的脚本内容 + 延迟毫秒数 + 执行脚本时的函数上下文 + 延迟执行的客户端脚本 + + + + 返回的是单引号括起来的字符串,用来作为JSON属性比较合适 + + 源字符串 + 单引号括起来的字符串 + + + + 将包含JavaScript代码块的字符串转换为可以使用的客户端脚本 + + 包含JavaScript代码块的字符串 + 转换后的客户端脚本 + + + + 获取字符串数组的脚本字符串形式 + + 字符串数组 + 字符串数组的脚本字符串 + + + + 获取整形数组的脚本字符串形式 + + 整数数组 + 整形数组的脚本字符串 + + + + 将数字对象转化为字符串 + + 数字对象 + 字符串 + + + + 对话框帮助类 + + + + + 默认提示对话图标 + + + + + 显示对话框 + + + + + 获取显示对话框的客户端脚本 + + 客户端脚本 + + + + 显示对话框 + + 消息正文 + + + + 显示对话框 + + 消息正文 + 标题 + + + + 显示对话框 + + 消息正文 + 图标 + + + + 显示对话框 + + 对话框消息 + 对话框标题 + 点击确定按钮执行的客户端脚本 + + + + 显示对话框 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + + + + 显示对话框 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + + + + 显示对话框 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + 显示对话框的目标页面 + + + + 显示对话框 + + 对话框消息 + 对话框标题 + + 点击确定按钮执行的客户端脚本 + 显示对话框的目标页面 + 自定义对话框图标 + 自定义对话框图标地址 + + + + 在父页面中显示对话框 + + 消息正文 + + + + 在父页面中显示对话框 + + 消息正文 + 标题 + + + + 在父页面中显示对话框 + + 消息正文 + 图标 + + + + 在父页面中显示对话框 + + 对话框消息 + 对话框标题 + 点击确定按钮执行的客户端脚本 + + + + 在父页面中显示对话框 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + + + + 在父页面中显示对话框 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + + + + 在顶层窗口中显示对话框 + + 消息正文 + + + + 在顶层窗口中显示对话框 + + 消息正文 + 对话框标题 + + + + 在顶层窗口中显示对话框 + + 消息正文 + 自定义对话框图标 + + + + + + 消息正文 + 对话框标题 + 点击确定按钮执行的客户端脚本 + + + + + + 消息正文 + 对话框标题 + 自定义对话框图标 + + + + 在顶层窗口中显示对话框 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 自定义对话框图标 + 客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 点击确定按钮执行的客户端脚本 + 客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + 客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + 显示对话框的目标页面 + 客户端脚本 + + + + 获取显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + + 点击确定按钮执行的客户端脚本 + 显示对话框的目标页面 + + 自定义对话框图标地址 + 客户端脚本 + + + + 获取在父页面中显示对话框的客户端脚本 + + 对话框消息 + 客户端脚本 + + + + 获取在父页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 客户端脚本 + + + + 获取在父页面中显示对话框的客户端脚本 + + 对话框消息 + 自定义对话框图标 + 客户端脚本 + + + + 获取在父页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 客户端脚本 + + + + 获取在父页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 点击确定按钮执行的客户端脚本 + 客户端脚本 + + + + 获取在父页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + 客户端脚本 + + + + 获取在最上层页面中显示对话框的客户端脚本 + + 对话框消息 + 客户端脚本 + + + + 获取在最上层页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 客户端脚本 + + + + 获取在最上层页面中显示对话框的客户端脚本 + + 对话框消息 + 自定义对话框图标 + 客户端脚本 + + + + 获取在最上层页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 客户端脚本 + + + + 获取在最上层页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 点击确定按钮执行的客户端脚本 + 客户端脚本 + + + + 获取在最上层页面中显示对话框的客户端脚本 + + 对话框消息 + 对话框标题 + 自定义对话框图标 + 点击确定按钮执行的客户端脚本 + 客户端脚本 + + + + 对话框消息正文 + + + + + 对话框标题 + + + + + 对话框图标 + + + + + 点击确认按钮执行的JavaScript脚本 + + + + + 对话框的目标位置 + + + + + 自定义对话框图标地址 + + + + + 自定义对话框图标 + + + + + 消息框图标类型 + + + + + 信息(默认值) + + + + + 警告 + + + + + 问题 + + + + + 错误 + + + + + 消息框图标类型名称 + + + + + 创建Javascript对象参数的帮助类 + + + + + 构造函数 + + + + + 构造函数 + + 属性名 + 属性值 + + + + 构造函数 + + 属性名 + 属性值 + 是否保持原样 + + + + 删除属性 + + 属性名 + + + + 是否包含属性 + + 属性名 + + + + + 添加属性 + + 属性名 + 属性值 + + + + 添加属性 + + 属性名 + 属性值 + 是否保持原样 + + + + 获取属性 + + 属性名 + 属性值 + + + + 返回对象的JSON字符串形式 + + 对象的JSON形式 + + + + 已经添加属性的个数 + + + + + 资源帮助类 + + + + + 获取嵌入资源的 res.axd 地址 + + 资源名称 + 资源地址 + + + + 获取嵌入资源的 res.axd 地址 + + 页面对象 + 资源名称 + 资源地址 + + + + 获取嵌入资源的地址 + + 资源名称 + 资源地址 + + + + 获取嵌入资源的地址 + + 页面实例 + 资源名称 + 资源地址 + + + + 取得资源的内容 + + 资源名称 + 资源内容 + + + + 取得资源的二进制内容 + + 资源名称 + 资源的二进制内容 + + + + 获取空白图片的地址 + + 空白图片的地址 + + + + 常量 + + + + + 绝对脚本的默认级别(仅内部使用) + + + + + 文件类型 + + + + + 文件类型 + + + + + 文件类型 + + + + + 文件类型 + + + + + 文件类型 + + + + + 文件类型 + + + + + 文件类型 + + + + + 文件类型 + + + + + 文件类型 + + + + + 配置字段名称 + + + + + 字段属性名称 + + + + + 字段属性值 + + + + + 属性分类的名称 + + + + + 基本属性 + + + + + 属性 + + + + + 表单验证 + + + + + 布局 + + + + + 事件 + + + + + 文本框控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 文本框类型 + + + + + FineUI在Web.config中的配置节 + + + + + 主题 + + + + + 语言 + + + + + 表单验证消息的提示位置 + + + + + 表单中标签的位置 + + + + + 表单控件右侧距离边界的距离 + + + + + 表单控件标签的宽度 + + + + + 表单控件标签的分隔符 + + + + + 启用AJAX + + + + + 启用AJAX加载提示信息 + + + + + AJAX提示信息的类型 + + + + + 客户端AJAX超时时间 + + + + + 是否启用大字体(将ExtJS所有11px字体改为12px) + + + + + 是否启用调试模式 + + + + + JS文件夹所在的根目录 + + + + + 图标所在的根目录 + + + + + 自定义主题所在的根目录 + + + + + 自定义主题名称 + + + + + 是否启用FState压缩(默认为false) + + + + + 是否向页面输出IE=edge标识 + + + + + 是否启用表单改变确认对话框 + + + + + 存在 Page.Items 上下文中,向页面注册资源 + + + + + 需要向页面注册的样式列表 + + + + + 确保ResourceManager实例的Page和当前页面一致 + + + + + + 准备呈现页面内容,在保存页面状态之前 + + + + + + + 注册页面第一次加载时的样式和脚本 + + + + + 注册页面脚本 + + + + + 是否注册startup脚本 + + + + + + + 取得页面初始化时脚本 + + + + + + + 返回经过排序的 _startupControlScriptList 列表,子控件排在父控件的前面 + + + + + + 取得应该将Script插入的位置 + 要能够向上回溯,因为控件的父控件可能不存在列表中,而父控件的父控件存在列表中 + + + + + + + + 添加样式 + + + + + + + + 删除已经添加的CSS样式 + + + + + + 添加脚本 + 相同控件的脚本合并在一起(30372245@qq.com 2008-7-4) + + + + + + + + 控件control的注册脚本是否存在 + + + + + + + AJAX时每个控件需要注册的脚本 + + + + + AJAX时不依赖控件的脚本 + + + + + AJAX时使用到的所有短名称列表 + 比如:F('SimpleForm1_tbxUserName') -> cmp0 + F('SimpleForm1_tbxPassword') -> cmp1 + + + + + 取得 ResourceManager 的实例,单件模式 + + + + + 复选框列表控件 + + + + + 构造函数 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 绑定到数据源 + + + + + 绑定到数据表 + + + + + + 绑定到可枚举列表 + + + + + + 取得属性值 + + + + + + + 处理回发数据 + + 回发数据键 + 回发数据集 + 回发数据是否改变 + + + + 触发回发数据改变事件 + + + + + 触发选中项改变事件 + + 事件参数 + + + + 是否必填项 + + + + + 为空时提示信息 + + + + + 是否自动回发 + + + + + 渲染成几列 + + + + + 是否按照纵向顺序渲染 + + + + + 显示文本的数据字段 + + + + + 显示文本的格式化字符串 + + + + + 显示值的数据字段 + + + + + 数据源 + + + + + [AJAX属性]选中项的值 + + + + + [AJAX属性]选中项的索引 + + + + + 选中项 + + + + + 复选框集合 + + + + + 保存的复选框数据(内部使用) + + + + + 选中项改变事件(需要启用AutoPostBack) + + + + + 复选框列表项 + + + + + 构造函数 + + + + + 构造函数 + + 文本 + 值 + + + + 构造函数 + + 文本 + 值 + 是否选中 + + + + 是否选中 + + + + + 显示的文本 + + + + + 值 + + + + + 复选项集合 + + + + + 通过文本查找复选项 + + 文本 + 复选项 + + + + 通过文本查找复选项 + + 文本 + 是否去除HTML标签 + 复选项 + + + + 通过值查找复选项 + + 值 + 复选项 + + + + 添加复选项 + + 文本 + 值 + 新元素的插入位置 + + + + 时间选择框控件 + + + + + 渲染 HTML 之前调用(AJAX回发) + + + + + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + + + + + 处理回发事件 + + 事件参数 + + + + 触发日期选择事件 + + 事件参数 + + + + 是否允许编辑 + + + + + 选择的时间 + + + + + 尝试解析时间的格式列表 + + + + + 时间格式(默认为HH:mm,24小时制,比如“20:30”) + + + + + 最大时间 + + + + + 最大时间的字符串形式 + + + + + 最小时间 + + + + + 最小时间的字符串形式 + + + + + 列表中每个时间值相差的分钟数(默认为15分钟) + + + + + 选择时间是否自动回发 + + + + + 日期选择事件(需要启用EnableDateSelect) + + +
+
diff --git a/FineUI.Examples/bin/Newtonsoft.Json.dll b/FineUI.Examples/bin/Newtonsoft.Json.dll index eeeebf5eff2df798087142a1804935577c6e435f..2024b03b53bf96f74c2bc94f27d0fbc776e51564 100644 GIT binary patch literal 440320 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 VYl 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 literal 389120 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⁡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%0Dsb$VZc+OKv4p1&Mt!j(2b3w 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 - - - - - - - - - -
- - - -
-
- - -
-
- - -
-
- - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button.aspx.cs" Inherits="FineUI.Examples.button.button" %> + + + + + + + + + +
+ + + +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/FineUI.Examples/button/button.aspx.cs b/FineUI.Examples/button/button.aspx.cs index 21d242e..19ce00f 100644 --- a/FineUI.Examples/button/button.aspx.cs +++ b/FineUI.Examples/button/button.aspx.cs @@ -1,46 +1,46 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.button -{ - public partial class button : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - - } - - protected void btnChangeEnable_Click(object sender, EventArgs e) - { - btnEnable.Enabled = true; - btnEnable.Text = "本按钮已经启用(点击弹出对话框)"; - } - - protected void btnEnable_Click(object sender, EventArgs e) - { - Alert.ShowInTop("你点击了刚刚启用的按钮"); - } - - - protected void btnTooltip_Click(object sender, EventArgs e) - { - btnTooltip.ToolTip = "这是改变后的提示信息"; - } - - - protected void btnChangePressed_Click(object sender, EventArgs e) - { - btnPressed.Pressed = !btnPressed.Pressed; - } - - - - - - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnChangeEnable_Click(object sender, EventArgs e) + { + btnEnable.Enabled = true; + btnEnable.Text = "本按钮已经启用(点击弹出对话框)"; + } + + protected void btnEnable_Click(object sender, EventArgs e) + { + Alert.ShowInTop("你点击了刚刚启用的按钮"); + } + + + protected void btnTooltip_Click(object sender, EventArgs e) + { + btnTooltip.ToolTip = "这是改变后的提示信息"; + } + + + protected void btnChangePressed_Click(object sender, EventArgs e) + { + btnPressed.Pressed = !btnPressed.Pressed; + } + + + + + + + + } +} diff --git a/FineUI.Examples/button/button.aspx.designer.cs b/FineUI.Examples/button/button.aspx.designer.cs index 90a3189..b028af1 100644 --- a/FineUI.Examples/button/button.aspx.designer.cs +++ b/FineUI.Examples/button/button.aspx.designer.cs @@ -1,105 +1,105 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.button { - - - public partial class button { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// btnChangeEnable 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnChangeEnable; - - /// - /// btnEnable 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnEnable; - - /// - /// btnChangePressed 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnChangePressed; - - /// - /// btnPressed 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnPressed; - - /// - /// btnTooltip 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnTooltip; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - - /// - /// Button2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button2; - - /// - /// Button3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button3; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnChangeEnable 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnChangeEnable; + + /// + /// btnEnable 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnEnable; + + /// + /// btnChangePressed 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnChangePressed; + + /// + /// btnPressed 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnPressed; + + /// + /// btnTooltip 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnTooltip; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// Button3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button3; + } +} diff --git a/FineUI.Examples/button/button_click.aspx b/FineUI.Examples/button/button_click.aspx index 22247b3..aa0dfab 100644 --- a/FineUI.Examples/button/button_click.aspx +++ b/FineUI.Examples/button/button_click.aspx @@ -1,25 +1,25 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_click.aspx.cs" Inherits="FineUI.Examples.button.button_click" %> - - - - - - - - -
- - - -
-
- - - - -
-
- - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_click.aspx.cs" Inherits="FineUI.Examples.button.button_click" %> + + + + + + + + +
+ + + +
+
+ + + + +
+
+ + + diff --git a/FineUI.Examples/button/button_click.aspx.cs b/FineUI.Examples/button/button_click.aspx.cs index b60246d..fcaf6a5 100644 --- a/FineUI.Examples/button/button_click.aspx.cs +++ b/FineUI.Examples/button/button_click.aspx.cs @@ -1,29 +1,29 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.button -{ - public partial class button_click : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - btnClientClick2.OnClientClick = Alert.GetShowInTopReference("这是在服务器端生成的客户端事件"); - } - } - - - protected void btnServerClick_Click(object sender, EventArgs e) - { - Alert.ShowInTop("这是服务器端事件"); - } - - - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_click : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + btnClientClick2.OnClientClick = Alert.GetShowInTopReference("这是在服务器端生成的客户端事件"); + } + } + + + protected void btnServerClick_Click(object sender, EventArgs e) + { + Alert.ShowInTop("这是服务器端事件"); + } + + + + + } +} diff --git a/FineUI.Examples/button/button_click.aspx.designer.cs b/FineUI.Examples/button/button_click.aspx.designer.cs index 015605a..0b36d49 100644 --- a/FineUI.Examples/button/button_click.aspx.designer.cs +++ b/FineUI.Examples/button/button_click.aspx.designer.cs @@ -1,60 +1,60 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.button { - - - public partial class button_click { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// btnServerClick 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnServerClick; - - /// - /// btnClientClick 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnClientClick; - - /// - /// btnClientClick2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnClientClick2; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_click { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnServerClick 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnServerClick; + + /// + /// btnClientClick 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnClientClick; + + /// + /// btnClientClick2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnClientClick2; + } +} diff --git a/FineUI.Examples/button/button_custom.aspx b/FineUI.Examples/button/button_custom.aspx index ba6f0b7..196b75f 100644 --- a/FineUI.Examples/button/button_custom.aspx +++ b/FineUI.Examples/button/button_custom.aspx @@ -1,33 +1,36 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_custom.aspx.cs" Inherits="FineUI.Examples.button.button_custom" %> - - - - - - - - - -
- - -
-
- - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_custom.aspx.cs" Inherits="FineUI.Examples.button.button_custom" %> + + + + + + + + + +
+ + +
+
+ + + + + + diff --git a/FineUI.Examples/button/button_custom.aspx.cs b/FineUI.Examples/button/button_custom.aspx.cs index 0f3248e..b6752d6 100644 --- a/FineUI.Examples/button/button_custom.aspx.cs +++ b/FineUI.Examples/button/button_custom.aspx.cs @@ -1,29 +1,29 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.button -{ - public partial class button_custom : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - - } - - - protected void Button1_Click(object sender, EventArgs e) - { - Alert.ShowInTop("点击了普通按钮"); - } - - protected void Button2_Click(object sender, EventArgs e) - { - Alert.ShowInTop("点击了自定义按钮"); - } - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_custom : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop("点击了普通按钮"); + } + + protected void Button2_Click(object sender, EventArgs e) + { + Alert.ShowInTop("点击了自定义按钮"); + } + + + } +} diff --git a/FineUI.Examples/button/button_custom.aspx.designer.cs b/FineUI.Examples/button/button_custom.aspx.designer.cs index 027a7ff..42e725d 100644 --- a/FineUI.Examples/button/button_custom.aspx.designer.cs +++ b/FineUI.Examples/button/button_custom.aspx.designer.cs @@ -1,51 +1,51 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.button { - - - public partial class button_custom { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - - /// - /// Button2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button2; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_custom { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + } +} diff --git a/FineUI.Examples/button/button_icon.aspx b/FineUI.Examples/button/button_icon.aspx index 905834d..f4ad427 100644 --- a/FineUI.Examples/button/button_icon.aspx +++ b/FineUI.Examples/button/button_icon.aspx @@ -1,33 +1,33 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_icon.aspx.cs" Inherits="FineUI.Examples.button.button_icon" %> - - - - - - - - -
- - - -
-
- - -
-
- -
-
- 只有图片的按钮: -
-
- - -
- - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_icon.aspx.cs" Inherits="FineUI.Examples.button.button_icon" %> + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+
+ 只有图片的按钮: +
+
+ + +
+ + + diff --git a/FineUI.Examples/button/button_icon.aspx.cs b/FineUI.Examples/button/button_icon.aspx.cs index 5fa7740..110a3f9 100644 --- a/FineUI.Examples/button/button_icon.aspx.cs +++ b/FineUI.Examples/button/button_icon.aspx.cs @@ -1,21 +1,28 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.button -{ - public partial class button_icon : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - - } - - protected void btnCustomIcon_Click(object sender, EventArgs e) - { - btnCustomIcon.IconUrl = "~/images/16/8.png"; - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_icon : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnCustomIcon_Click(object sender, EventArgs e) + { + if (btnCustomIcon.IconUrl.EndsWith("1.png")) + { + btnCustomIcon.IconUrl = "~/res/images/16/8.png"; + } + else + { + btnCustomIcon.IconUrl = "~/res/images/16/1.png"; + } + } + } +} diff --git a/FineUI.Examples/button/button_icon.aspx.designer.cs b/FineUI.Examples/button/button_icon.aspx.designer.cs index 48258e2..3e6a6ab 100644 --- a/FineUI.Examples/button/button_icon.aspx.designer.cs +++ b/FineUI.Examples/button/button_icon.aspx.designer.cs @@ -1,96 +1,96 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.button { - - - public partial class button_icon { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// btnIcon1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnIcon1; - - /// - /// btnIcon2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnIcon2; - - /// - /// btnIcon3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnIcon3; - - /// - /// btnIcon4 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnIcon4; - - /// - /// btnCustomIcon 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnCustomIcon; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - - /// - /// Button2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button2; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_icon { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnIcon1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon1; + + /// + /// btnIcon2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon2; + + /// + /// btnIcon3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon3; + + /// + /// btnIcon4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon4; + + /// + /// btnCustomIcon 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnCustomIcon; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + } +} diff --git a/FineUI.Examples/button/button_linkbutton.aspx b/FineUI.Examples/button/button_linkbutton.aspx index 7c25ca3..5fd308f 100644 --- a/FineUI.Examples/button/button_linkbutton.aspx +++ b/FineUI.Examples/button/button_linkbutton.aspx @@ -1,32 +1,32 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_linkbutton.aspx.cs" - Inherits="FineUI.Examples.button.button_linkbutton" %> - - - - - - - - -
- - - -
- - -
-
- - -
- - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_linkbutton.aspx.cs" + Inherits="FineUI.Examples.button.button_linkbutton" %> + + + + + + + + +
+ + + +
+ + +
+
+ + +
+ + + + + diff --git a/FineUI.Examples/button/button_linkbutton.aspx.cs b/FineUI.Examples/button/button_linkbutton.aspx.cs index de609b1..cb0fce5 100644 --- a/FineUI.Examples/button/button_linkbutton.aspx.cs +++ b/FineUI.Examples/button/button_linkbutton.aspx.cs @@ -1,30 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.button -{ - public partial class button_linkbutton : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - LinkButton2.OnClientClick = Alert.GetShowInTopReference("这是在服务器端生成的客户端事件"); - } - } - - protected void LinkButton3_Click(object sender, EventArgs e) - { - Alert.ShowInTop("这是服务器端事件"); - } - - protected void btnChangeEnable_Click(object sender, EventArgs e) - { - LinkButton1.Enabled = !LinkButton1.Enabled; - } - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_linkbutton : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LinkButton2.OnClientClick = Alert.GetShowInTopReference("这是在服务器端生成的客户端事件"); + } + } + + protected void LinkButton3_Click(object sender, EventArgs e) + { + Alert.ShowInTop("这是服务器端事件"); + } + + protected void btnChangeEnable_Click(object sender, EventArgs e) + { + LinkButton1.Enabled = !LinkButton1.Enabled; + } + + } +} diff --git a/FineUI.Examples/button/button_linkbutton.aspx.designer.cs b/FineUI.Examples/button/button_linkbutton.aspx.designer.cs index 8b83dc2..6fcac91 100644 --- a/FineUI.Examples/button/button_linkbutton.aspx.designer.cs +++ b/FineUI.Examples/button/button_linkbutton.aspx.designer.cs @@ -1,69 +1,69 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.button { - - - public partial class button_linkbutton { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// LinkButton2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.LinkButton LinkButton2; - - /// - /// LinkButton3 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.LinkButton LinkButton3; - - /// - /// LinkButton1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.LinkButton LinkButton1; - - /// - /// btnChangeEnable 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnChangeEnable; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_linkbutton { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// LinkButton2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton LinkButton2; + + /// + /// LinkButton3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton LinkButton3; + + /// + /// LinkButton1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton LinkButton1; + + /// + /// btnChangeEnable 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnChangeEnable; + } +} diff --git a/FineUI.Examples/button/button_menu.aspx b/FineUI.Examples/button/button_menu.aspx index a6e5617..250404e 100644 --- a/FineUI.Examples/button/button_menu.aspx +++ b/FineUI.Examples/button/button_menu.aspx @@ -1,38 +1,38 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_menu.aspx.cs" Inherits="FineUI.Examples.button.button_menu" %> - - - - - - - - -
- - - - - - - - - - - - - - - -
-
- - -
-
- - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_menu.aspx.cs" Inherits="FineUI.Examples.button.button_menu" %> + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+ + +
+
+ + + diff --git a/FineUI.Examples/button/button_menu.aspx.cs b/FineUI.Examples/button/button_menu.aspx.cs index 4f31def..b9a5cd9 100644 --- a/FineUI.Examples/button/button_menu.aspx.cs +++ b/FineUI.Examples/button/button_menu.aspx.cs @@ -1,55 +1,55 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI.Examples.button -{ - public partial class button_menu : PageBase - { - protected void Page_Init(object sender, EventArgs e) - { - MenuHyperLink menuSCMS = new MenuHyperLink(); - menuSCMS.Target = "_blank"; - menuSCMS.Text = "化学与材料科学学院"; - menuSCMS.Icon = Icon.TagGreen; - menuSCMS.NavigateUrl = "http://scms.ustc.edu.cn/"; - Button1.Menu.Items.Add(menuSCMS); - - MenuHyperLink menuBZ = new MenuHyperLink(); - menuBZ.Target = "_blank"; - menuBZ.Text = "管理学院"; - menuBZ.Icon = Icon.TagBlue; - menuBZ.NavigateUrl = "http://business.ustc.edu.cn/zh_CN/"; - Button1.Menu.Items.Add(menuBZ); - - MenuHyperLink menuIS = new MenuHyperLink(); - menuIS.Target = "_blank"; - menuIS.Text = "工商管理系"; - menuIS.Icon = Icon.TagPink; - menuIS.NavigateUrl = "http://is.ustc.edu.cn/"; - menuBZ.Menu.Items.Add(menuIS); - - - MenuHyperLink menuSTAT = new MenuHyperLink(); - menuSTAT.Target = "_blank"; - menuSTAT.Text = "统计与金融系"; - menuSTAT.Icon = Icon.TagPink; - menuSTAT.NavigateUrl = "http://stat.ustc.edu.cn/"; - menuBZ.Menu.Items.Add(menuSTAT); - - } - - - protected void Page_Load(object sender, EventArgs e) - { - - } - - - - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_menu : PageBase + { + protected void Page_Init(object sender, EventArgs e) + { + MenuHyperLink menuSCMS = new MenuHyperLink(); + menuSCMS.Target = "_blank"; + menuSCMS.Text = "化学与材料科学学院"; + menuSCMS.Icon = Icon.TagGreen; + menuSCMS.NavigateUrl = "http://scms.ustc.edu.cn/"; + Button1.Menu.Items.Add(menuSCMS); + + MenuHyperLink menuBZ = new MenuHyperLink(); + menuBZ.Target = "_blank"; + menuBZ.Text = "管理学院"; + menuBZ.Icon = Icon.TagBlue; + menuBZ.NavigateUrl = "http://business.ustc.edu.cn/zh_CN/"; + Button1.Menu.Items.Add(menuBZ); + + MenuHyperLink menuIS = new MenuHyperLink(); + menuIS.Target = "_blank"; + menuIS.Text = "工商管理系"; + menuIS.Icon = Icon.TagPink; + menuIS.NavigateUrl = "http://is.ustc.edu.cn/"; + menuBZ.Menu.Items.Add(menuIS); + + + MenuHyperLink menuSTAT = new MenuHyperLink(); + menuSTAT.Target = "_blank"; + menuSTAT.Text = "统计与金融系"; + menuSTAT.Icon = Icon.TagPink; + menuSTAT.NavigateUrl = "http://stat.ustc.edu.cn/"; + menuBZ.Menu.Items.Add(menuSTAT); + + } + + + protected void Page_Load(object sender, EventArgs e) + { + + } + + + + + + } +} diff --git a/FineUI.Examples/button/button_menu.aspx.designer.cs b/FineUI.Examples/button/button_menu.aspx.designer.cs index 9cfb4ca..95bfe5d 100644 --- a/FineUI.Examples/button/button_menu.aspx.designer.cs +++ b/FineUI.Examples/button/button_menu.aspx.designer.cs @@ -1,51 +1,51 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.button { - - - public partial class button_menu { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// btnMenu 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnMenu; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_menu { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnMenu 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnMenu; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI.Examples/button/button_menu_menuid.aspx b/FineUI.Examples/button/button_menu_menuid.aspx new file mode 100644 index 0000000..f12b289 --- /dev/null +++ b/FineUI.Examples/button/button_menu_menuid.aspx @@ -0,0 +1,38 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_menu_menuid.aspx.cs" Inherits="FineUI.Examples.button.button_menu_menuid" %> + + + + + + + + +
+ + + +
+
+ + + + + + + + + + + + + + +
+
+ + + diff --git a/FineUI.Examples/button/button_menu_menuid.aspx.cs b/FineUI.Examples/button/button_menu_menuid.aspx.cs new file mode 100644 index 0000000..80ab9c1 --- /dev/null +++ b/FineUI.Examples/button/button_menu_menuid.aspx.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_menu_menuid : PageBase + { + + protected void Page_Load(object sender, EventArgs e) + { + + } + + + + + + } +} diff --git a/FineUI.Examples/button/button_menu_menuid.aspx.designer.cs b/FineUI.Examples/button/button_menu_menuid.aspx.designer.cs new file mode 100644 index 0000000..8cae1cc --- /dev/null +++ b/FineUI.Examples/button/button_menu_menuid.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_menu_menuid { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnMenu 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnMenu; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Menu1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Menu Menu1; + + /// + /// MenuHyperLink1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuHyperLink MenuHyperLink1; + + /// + /// MenuHyperLink2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuHyperLink MenuHyperLink2; + + /// + /// MenuHyperLink3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuHyperLink MenuHyperLink3; + + /// + /// MenuHyperLink4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuHyperLink MenuHyperLink4; + } +} diff --git a/FineUI.Examples/common/menu.xml b/FineUI.Examples/common/menu.xml index 45bbca6..992d7f1 100644 --- a/FineUI.Examples/common/menu.xml +++ b/FineUI.Examples/common/menu.xml @@ -1,521 +1,653 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FineUI.Examples/common/source.aspx b/FineUI.Examples/common/source.aspx index 136bcc9..430288d 100644 --- a/FineUI.Examples/common/source.aspx +++ b/FineUI.Examples/common/source.aspx @@ -1,22 +1,22 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="source.aspx.cs" Inherits="FineUI.Examples.source" %> - - - - - - - - -
- - - -
- - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="source.aspx.cs" Inherits="FineUI.Examples.source" %> + + + + + + + + +
+ + + +
+ + diff --git a/FineUI.Examples/common/source.aspx.cs b/FineUI.Examples/common/source.aspx.cs index b1882df..aa6f0d5 100644 --- a/FineUI.Examples/common/source.aspx.cs +++ b/FineUI.Examples/common/source.aspx.cs @@ -1,149 +1,107 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.IO; - -namespace FineUI.Examples -{ - public partial class source : PageBase - { - private static Dictionary SOURCE_FILES = new Dictionary() { - {"grid/grid_iframe.aspx", "~/grid/grid_iframe_window.aspx"}, - {"tree/databind/tree_document.aspx", "~/tree/databind/website.xml"}, - {"tree/databind/tree_datasource.aspx", "~/tree/databind/website.xml"}, - {"tree/databind/tree_sitemap.aspx", "~/tree/databind/Web.sitemap"}, - {"aspnet/fileupload.aspx", "~/aspnet/fileupload_iframe.aspx"}, - {"iframe/button_iframe.aspx", "~/grid/grid_iframe_window.aspx"}, - {"iframe/grid_iframe.aspx", "~/grid/grid_iframe_window.aspx"}, - {"iframe/iframe_iframe.aspx", "~/iframe/iframe_iframe_window1.aspx;~/iframe/iframe_iframe_window2.aspx"}, - {"iframe/parent_postback.aspx", "~/iframe/parent_postback2.aspx;~/iframe/parent_postback3.aspx"}, - {"iframe/parent_postback_top.aspx", "~/iframe/parent_postback_top2.aspx;~/iframe/parent_postback_top3.aspx"}, - {"iframe/triggerbox_iframe.aspx", "~/iframe/triggerbox_iframe_iframe.aspx"}, - {"iframe/passvalue_iframe.aspx", "~/iframe/passvalue_iframe_iframe.aspx"}, - {"other/accordion_links.aspx", "~/other/accordion_links_iframe.htm"}, - {"usercontrol/userinfo.aspx", "~/usercontrol/UserInfoControl.ascx"}, - {"usercontrol/userinfo2.aspx", "~/usercontrol/UserInfoControl.ascx"}, - {"usercontrol/userinfo_dynamic.aspx", "~/usercontrol/UserInfoControl.ascx"}, - {"iframe/selectprovince1.aspx", "~/iframe/selectprovince1_child.aspx"}, - {"iframe/selectprovince2.aspx", "~/iframe/selectprovince2_child.aspx"}, - {"iframe/selectprovince3.aspx", "~/iframe/selectprovince3_child.aspx"}, - {"iframe/topmenu2/default.aspx", "~/iframe/topmenu2/default.aspx;~/iframe/topmenu2/leftmenu.aspx"}, - {"iframe/topmenu3/default.aspx", "~/iframe/topmenu3/default.aspx;~/iframe/topmenu3/leftmenu.aspx"}, - {"tabstrip/tabstrip_iframe_disabled.aspx", "~/tabstrip/tabstrip_iframe_disabled_tab1.aspx"} - - }; - - protected void Page_Init(object sender, EventArgs e) - { - if (!IsPostBack) - { - string files = Request.QueryString["files"]; - - if (String.IsNullOrEmpty(files)) - { - return; - } - - files = ResolveQueryString(files); - - if (!String.IsNullOrEmpty(files)) - { - string[] fileNames = files.Split(';'); - - for (int i = 0; i < fileNames.Length; i++) - { - string fileName = fileNames[i]; - string shortFileName = GetShortFileName(fileName); - string iframeUrl = "./source_file.aspx?file=" + fileName; - - FineUI.Tab tab = new FineUI.Tab(); - tab.Title = shortFileName; - tab.EnableIFrame = true; - tab.IFrameUrl = iframeUrl; - tab.IconUrl = GetIconUrl(tab.IFrameUrl); - TabStrip1.Tabs.Add(tab); - - // End with .aspx. - if (fileName.ToLower().EndsWith(".aspx") || fileName.ToLower().EndsWith(".ascx")) - { - tab = new FineUI.Tab(); - tab.Title = shortFileName + ".cs"; - tab.EnableIFrame = true; - tab.IFrameUrl = iframeUrl + ".cs"; - tab.IconUrl = GetIconUrl(tab.IFrameUrl); - TabStrip1.Tabs.Add(tab); - } - } - } - } - } - - protected void Page_Load(object sender, EventArgs e) - { - - } - - private string GetIconUrl(string url) - { - string suffix = url.Substring(url.LastIndexOf('.') + 1); - return "~/images/filetype/vs_" + suffix + ".png"; - //string fileName = "vs_unknow.png"; - //if (url.EndsWith(".aspx")) - //{ - // fileName = "vs_aspx.png"; - //} - //else if (url.EndsWith(".cs")) - //{ - // fileName = "vs_cs.png"; - //} - //else if (url.EndsWith(".xml")) - //{ - // fileName = "vs_xml.png"; - //} - //else if (url.EndsWith(".config")) - //{ - // fileName = "vs_config.png"; - //} - //else if (url.EndsWith(".js")) - //{ - // fileName = "vs_js.png"; - //} - //else if (url.EndsWith(".css")) - //{ - // fileName = "vs_css.png"; - //} - //else if (url.EndsWith(".html") || url.EndsWith(".htm")) - //{ - // fileName = "vs_htm.png"; - //} - } - - private string ResolveQueryString(string files) - { - string result = files; - foreach (string key in SOURCE_FILES.Keys) - { - if (files.EndsWith(key)) - { - result += ';' + SOURCE_FILES[key]; - break; - } - } - return result; - } - - private string GetShortFileName(string fileName) - { - int index = fileName.LastIndexOf("/"); - - if (index >= 0) - { - return fileName.Substring(index + 1); - } - - return fileName; - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.IO; + +namespace FineUI.Examples +{ + public partial class source : PageBase + { + protected void Page_Init(object sender, EventArgs e) + { + if (!IsPostBack) + { + string files = Request.QueryString["files"]; + + if (String.IsNullOrEmpty(files)) + { + return; + } + + if (!String.IsNullOrEmpty(files)) + { + string[] fileNames = files.Split(';'); + + for (int i = 0; i < fileNames.Length; i++) + { + string fileName = fileNames[i]; + string shortFileName = GetShortFileName(fileName); + string iframeUrl = "./source_file.aspx?file=" + fileName; + + Tab tab = new Tab(); + tab.Title = shortFileName; + tab.EnableIFrame = true; + tab.IFrameUrl = iframeUrl; + tab.IconUrl = GetIconUrl(tab.IFrameUrl); + TabStrip1.Tabs.Add(tab); + + // End with .aspx. + if (fileName.ToLower().EndsWith(".aspx") || fileName.ToLower().EndsWith(".ascx") || fileName.ToLower().EndsWith(".master")) + { + tab = new FineUI.Tab(); + tab.Title = shortFileName + ".cs"; + tab.EnableIFrame = true; + tab.IFrameUrl = iframeUrl + ".cs"; + tab.IconUrl = GetIconUrl(tab.IFrameUrl); + TabStrip1.Tabs.Add(tab); + } + } + } + } + } + + protected void Page_Load(object sender, EventArgs e) + { + + } + + private string GetIconUrl(string url) + { + string suffix = url.Substring(url.LastIndexOf('.') + 1); + return "~/res/images/filetype/vs_" + suffix + ".png"; + //string fileName = "vs_unknow.png"; + //if (url.EndsWith(".aspx")) + //{ + // fileName = "vs_aspx.png"; + //} + //else if (url.EndsWith(".cs")) + //{ + // fileName = "vs_cs.png"; + //} + //else if (url.EndsWith(".xml")) + //{ + // fileName = "vs_xml.png"; + //} + //else if (url.EndsWith(".config")) + //{ + // fileName = "vs_config.png"; + //} + //else if (url.EndsWith(".js")) + //{ + // fileName = "vs_js.png"; + //} + //else if (url.EndsWith(".css")) + //{ + // fileName = "vs_css.png"; + //} + //else if (url.EndsWith(".html") || url.EndsWith(".htm")) + //{ + // fileName = "vs_htm.png"; + //} + } + + private string GetShortFileName(string fileName) + { + int index = fileName.LastIndexOf("/"); + + if (index >= 0) + { + return fileName.Substring(index + 1); + } + + return fileName; + } + } +} diff --git a/FineUI.Examples/common/source.aspx.designer.cs b/FineUI.Examples/common/source.aspx.designer.cs index 9fa7594..0a7347c 100644 --- a/FineUI.Examples/common/source.aspx.designer.cs +++ b/FineUI.Examples/common/source.aspx.designer.cs @@ -1,42 +1,42 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples { - - - public partial class source { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// TabStrip1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TabStrip TabStrip1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class source { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// TabStrip1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TabStrip TabStrip1; + } +} diff --git a/FineUI.Examples/common/source_file.aspx b/FineUI.Examples/common/source_file.aspx index 70ff7d3..e18e6e2 100644 --- a/FineUI.Examples/common/source_file.aspx +++ b/FineUI.Examples/common/source_file.aspx @@ -1,36 +1,37 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="source_file.aspx.cs" Inherits="FineUI.Examples.source_file" %> - -<%@ Register Assembly="Wilco.SyntaxHighlighter" Namespace="Wilco.Web.SyntaxHighlighting" - TagPrefix="cc1" %> - - - - - - - -
- - -
- - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="source_file.aspx.cs" Inherits="FineUI.Examples.source_file" %> + + + + + + + + + +
+ +
+ + + + diff --git a/FineUI.Examples/common/source_file.aspx.cs b/FineUI.Examples/common/source_file.aspx.cs index b31f1ca..3f3dd80 100644 --- a/FineUI.Examples/common/source_file.aspx.cs +++ b/FineUI.Examples/common/source_file.aspx.cs @@ -1,53 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.IO; - -namespace FineUI.Examples -{ - public partial class source_file : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - string file = Request.QueryString["file"]; - - string content = File.ReadAllText(Server.MapPath(file)); - - if (!String.IsNullOrEmpty(file)) - { - string language = "ASPX"; - string fileName = file.ToLower(); - if (fileName.EndsWith(".aspx")) - { - language = "ASPX"; - } - else if (fileName.EndsWith(".cs")) - { - language = "C#"; - } - else if (fileName.EndsWith(".config") || fileName.EndsWith(".sitemap") || fileName.EndsWith(".xml")) - { - language = "XML"; - } - else if (fileName.EndsWith(".css")) - { - language = "CSS"; - } - else if (fileName.EndsWith(".js")) - { - language = "JavaScript"; - } - - SyntaxHighlighter1.Mode = Wilco.Web.SyntaxHighlighting.HighlightMode.Source; - SyntaxHighlighter1.Language = language; - SyntaxHighlighter1.Text = content; - } - - } - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.IO; + +namespace FineUI.Examples +{ + public partial class source_file : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + string file = Request.QueryString["file"]; + + if (file.StartsWith("http://") || file.StartsWith("https://")) + { + desc.Text = String.Format("

在新窗口打开", file); + return; + } + + string content = File.ReadAllText(Server.MapPath(file)); + desc.Text = "
" + HttpUtility.HtmlEncode(content) + "
"; + + } + } + } +} diff --git a/FineUI.Examples/common/source_file.aspx.designer.cs b/FineUI.Examples/common/source_file.aspx.designer.cs index 93548b0..58ab884 100644 --- a/FineUI.Examples/common/source_file.aspx.designer.cs +++ b/FineUI.Examples/common/source_file.aspx.designer.cs @@ -1,33 +1,33 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples { - - - public partial class source_file { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// SyntaxHighlighter1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::Wilco.Web.SyntaxHighlighting.SyntaxHighlighter SyntaxHighlighter1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class source_file { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// desc 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal desc; + } +} diff --git a/FineUI.Examples/config/ajax.aspx b/FineUI.Examples/config/ajax.aspx index 5142ffd..68672c4 100644 --- a/FineUI.Examples/config/ajax.aspx +++ b/FineUI.Examples/config/ajax.aspx @@ -1,47 +1,47 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ajax.aspx.cs" Inherits="FineUI.Examples.ajax" %> - - - - - - - - - -
-
- FineUI 有原生的 AJAX 支持,也就是说不需要做任何配置,控件属性在服务器端的改变都能以 AJAX 的方式影响到前端界面的显示。 -
-
- 但是,并非控件的所有属性都支持 AJAX 改变,下面列表展示了每个控件有哪些属性支持 AJAX 改变。 -
-
- -
- - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ajax.aspx.cs" Inherits="FineUI.Examples.ajax" %> + + + + + + + + + +
+
+ FineUI 有原生的 AJAX 支持,也就是说不需要做任何配置,控件属性在服务器端的改变都能以 AJAX 的方式影响到前端界面的显示。 +
+
+ 但是,并非控件的所有属性都支持 AJAX 改变,下面列表展示了每个控件有哪些属性支持 AJAX 改变。 +
+
+ +
+ + diff --git a/FineUI.Examples/config/ajax.aspx.cs b/FineUI.Examples/config/ajax.aspx.cs index 6c9fd77..2663533 100644 --- a/FineUI.Examples/config/ajax.aspx.cs +++ b/FineUI.Examples/config/ajax.aspx.cs @@ -1,102 +1,102 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Text; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - - -namespace FineUI.Examples -{ - public partial class ajax : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - LoadData(); - } - } - - private void LoadData() - { - string content = ReadFile("~/config/ajax_properties.txt"); - Dictionary allControls = new Dictionary(); - List publicControls = new List(); - JArray ja = JArray.Parse(content); - foreach (JObject jo in ja) - { - if (jo.Value("public")) // .getBool("public")) - { - publicControls.Add(jo.Value("name")); //jo.getString("name")); - } - allControls.Add(jo.Value("name"), jo); //jo.getString("name"), jo); - } - publicControls.Sort(); - - StringBuilder sb = new StringBuilder(); - sb.Append(""); - sb.Append(""); - for (int i = 0, count = publicControls.Count; i < count; i++) - { - string name = publicControls[i]; - - sb.Append(""); - - if ((i + 1) % 6 == 0) - { - sb.Append(""); - } - } - sb.Append(""); - sb.Append("
"); - sb.AppendFormat("
{0}
", name); - - // 计算控件name的所有AJAX属性 - List ajaxProperties = new List(); - - string parentControlName = name; - do - { - JObject control = allControls[parentControlName]; - foreach (string property in control.Value("ajax")) // .getJSONArray("ajax").getArrayList()) - { - if (!ajaxProperties.Contains(property)) - { - ajaxProperties.Add(property); - } - } - parentControlName = control.Value("parent"); //.getString("parent"); - - } while (!String.IsNullOrEmpty(parentControlName)); - - ajaxProperties.Sort(); - - - sb.Append("
    "); - foreach (string property in ajaxProperties) - { - sb.AppendFormat("
  • {0}
  • ", property); - } - sb.Append("
"); - - sb.Append("
"); - - litResult.Text = sb.ToString(); - } - - private string ReadFile(string filePath) - { - string content = String.Empty; - - using (System.IO.StreamReader sr = new System.IO.StreamReader(Server.MapPath(filePath))) - { - content = sr.ReadToEnd(); - } - - return content; - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI.Examples +{ + public partial class ajax : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LoadData(); + } + } + + private void LoadData() + { + string content = ReadFile("~/config/ajax_properties.txt"); + Dictionary allControls = new Dictionary(); + List publicControls = new List(); + JArray ja = JArray.Parse(content); + foreach (JObject jo in ja) + { + if (jo.Value("public")) // .getBool("public")) + { + publicControls.Add(jo.Value("name")); //jo.getString("name")); + } + allControls.Add(jo.Value("name"), jo); //jo.getString("name"), jo); + } + publicControls.Sort(); + + StringBuilder sb = new StringBuilder(); + sb.Append(""); + sb.Append(""); + for (int i = 0, count = publicControls.Count; i < count; i++) + { + string name = publicControls[i]; + + sb.Append(""); + + if ((i + 1) % 6 == 0) + { + sb.Append(""); + } + } + sb.Append(""); + sb.Append("
"); + sb.AppendFormat("
{0}
", name); + + // 计算控件name的所有AJAX属性 + List ajaxProperties = new List(); + + string parentControlName = name; + do + { + JObject control = allControls[parentControlName]; + foreach (string property in control.Value("ajax")) // .getJSONArray("ajax").getArrayList()) + { + if (!ajaxProperties.Contains(property)) + { + ajaxProperties.Add(property); + } + } + parentControlName = control.Value("parent"); //.getString("parent"); + + } while (!String.IsNullOrEmpty(parentControlName)); + + ajaxProperties.Sort(); + + + sb.Append("
    "); + foreach (string property in ajaxProperties) + { + sb.AppendFormat("
  • {0}
  • ", property); + } + sb.Append("
"); + + sb.Append("
"); + + litResult.Text = sb.ToString(); + } + + private string ReadFile(string filePath) + { + string content = String.Empty; + + using (System.IO.StreamReader sr = new System.IO.StreamReader(Server.MapPath(filePath))) + { + content = sr.ReadToEnd(); + } + + return content; + } + } +} diff --git a/FineUI.Examples/config/ajax.aspx.designer.cs b/FineUI.Examples/config/ajax.aspx.designer.cs index d3cd876..aab982c 100644 --- a/FineUI.Examples/config/ajax.aspx.designer.cs +++ b/FineUI.Examples/config/ajax.aspx.designer.cs @@ -1,33 +1,33 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples { - - - public partial class ajax { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// litResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Literal litResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class ajax { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// litResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal litResult; + } +} diff --git a/FineUI.Examples/config/ajax_properties.txt b/FineUI.Examples/config/ajax_properties.txt index c409e25..fa72525 100644 --- a/FineUI.Examples/config/ajax_properties.txt +++ b/FineUI.Examples/config/ajax_properties.txt @@ -1,360 +1,360 @@ -[{ - "name": "ControlBase", - "ajax": ["Hidden", "Enabled"], - "parent": "", - "public": false -}, -{ - "name": "Component", - "ajax": ["CssClass", "CssStyle"], - "parent": "ControlBase", - "public": false -}, -{ - "name": "BoxComponent", - "ajax": [], - "parent": "Component", - "public": false -}, -{ - "name": "Container", - "ajax": [], - "parent": "BoxComponent", - "public": false -}, -{ - "name": "PanelBase", - "ajax": ["IFrameUrl"], - "parent": "Container", - "public": false -}, -{ - "name": "CollapsablePanel", - "ajax": ["Expanded", "Collapsed", "Title"], - "parent": "PanelBase", - "public": false -}, -{ - "name": "Field", - "ajax": ["Readonly"], - "parent": "BoxComponent", - "public": false -}, -{ - "name": "TextField", - "ajax": [], - "parent": "Field", - "public": false -}, -{ - "name": "RealTextField", - "ajax": ["Text"], - "parent": "TextField", - "public": false -}, -{ - "name": "Toolbar", - "ajax": [], - "parent": "BoxComponent", - "public": true -}, -{ - "name": "ToolbarFill", - "ajax": [], - "parent": "Component", - "public": true -}, -{ - "name": "ToolbarSeparator", - "ajax": [], - "parent": "Component", - "public": true -}, -{ - "name": "ToolbarText", - "ajax": ["Text"], - "parent": "Component", - "public": true -}, -{ - "name": "Button", - "ajax": ["Text", "Icon", "IconUrl", "ToolTip", "OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmIcon", "ConfirmTarget", "Pressed"], - "parent": "Component", - "public": true -}, -{ - "name": "Calendar", - "ajax": [], - "parent": "Component", - "public": true -}, -{ - "name": "Menu", - "ajax": [], - "parent": "Component", - "public": true -}, -{ - "name": "BaseMenuItem", - "ajax": [], - "parent": "Component", - "public": false -}, -{ - "name": "MenuItem", - "ajax": [], - "parent": "BaseMenuItem", - "public": false -}, -{ - "name": "MenuButton", - "ajax": ["ClickScriptFunction"], - "parent": "MenuItem", - "public": true -}, -{ - "name": "MenuHyperLink", - "ajax": [], - "parent": "MenuItem", - "public": true -}, -{ - "name": "MenuSeparator", - "ajax": [], - "parent": "BaseMenuItem", - "public": true -}, -{ - "name": "MenuText", - "ajax": [], - "parent": "MenuItem", - "public": true -}, -{ - "name": "SplitButton", - "ajax": [], - "parent": "Button", - "public": true -}, -{ - "name": "PageLoading", - "ajax": [], - "parent": "ControlBase", - "public": true -}, -{ - "name": "PageManager", - "ajax": [], - "parent": "ControlBase", - "public": true -}, -{ - "name": "Timer", - "ajax": [], - "parent": "ControlBase", - "public": true -}, -{ - "name": "CheckBox", - "ajax": ["Checked"], - "parent": "Field", - "public": true -}, -{ - "name": "CheckBoxList", - "ajax": ["SelectedIndexArray", "SelectedValueArray", "SelectedItemArray"], - "parent": "Field", - "public": true -}, -{ - "name": "HtmlEditor", - "ajax": ["Text"], - "parent": "Field", - "public": true -}, -{ - "name": "Label", - "ajax": ["Text"], - "parent": "Field", - "public": true -}, -{ - "name": "HyperLink", - "ajax": ["Text", "NavigateUrl", "Target", "OnClientClick"], - "parent": "Field", - "public": true -}, -{ - "name": "Image", - "ajax": ["ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt"], - "parent": "Field", - "public": true -}, -{ - "name": "LinkButton", - "ajax": ["Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"], - "parent": "Field", - "public": true -}, -{ - "name": "RadioButton", - "ajax": ["Checked"], - "parent": "Field", - "public": true -}, -{ - "name": "RadioButtonList", - "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem"], - "parent": "Field", - "public": true -}, -{ - "name": "DropDownList", - "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem", "DataSource", "Items"], - "parent": "TextField", - "public": true -}, -{ - "name": "DatePicker", - "ajax": ["SelectedDate"], - "parent": "RealTextField", - "public": true -}, -{ - "name": "HiddenField", - "ajax": [], - "parent": "RealTextField", - "public": true -}, -{ - "name": "FileUpload", - "ajax": [], - "parent": "RealTextField", - "public": true -}, -{ - "name": "NumberBox", - "ajax": [], - "parent": "RealTextField", - "public": true -}, -{ - "name": "TextArea", - "ajax": [], - "parent": "RealTextField", - "public": true -}, -{ - "name": "TextBox", - "ajax": [], - "parent": "RealTextField", - "public": true -}, -{ - "name": "TriggerBox", - "ajax": [], - "parent": "RealTextField", - "public": true -}, -{ - "name": "TwinTriggerBox", - "ajax": ["ShowTrigger1", "ShowTrigger2"], - "parent": "RealTextField", - "public": true -}, -{ - "name": "RegionPanel", - "ajax": [], - "parent": "PanelBase", - "public": true -}, -{ - "name": "Region", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "Accordion", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "AccordionPane", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "AccordionLink", - "ajax": [], - "parent": "ControlBase", - "public": true -}, -{ - "name": "ContentPanel", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "Form", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "FormRow", - "ajax": [], - "parent": "ControlBase", - "public": true -}, -{ - "name": "GroupPanel", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "Panel", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "SimpleForm", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "Tree", - "ajax": ["Nodes", "SelectedNodeIDArray"], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "Window", - "ajax": [], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "Grid", - "ajax": ["PageIndex", "PageSize", "RecordCount", "SortColumnIndex", "SortDirection", "SelectedRowIndexArray", "DataSource"], - "parent": "CollapsablePanel", - "public": true -}, -{ - "name": "TabStrip", - "ajax": ["ActiveTabIndex"], - "parent": "PanelBase", - "public": true -}, -{ - "name": "Tab", - "ajax": [], - "parent": "PanelBase", - "public": true +[{ + "name": "ControlBase", + "ajax": ["Hidden", "Enabled"], + "parent": "", + "public": false +}, +{ + "name": "Component", + "ajax": ["CssClass", "FormItemClass", "CssStyle"], + "parent": "ControlBase", + "public": false +}, +{ + "name": "BoxComponent", + "ajax": [], + "parent": "Component", + "public": false +}, +{ + "name": "Container", + "ajax": [], + "parent": "BoxComponent", + "public": false +}, +{ + "name": "PanelBase", + "ajax": ["IFrameUrl"], + "parent": "Container", + "public": false +}, +{ + "name": "CollapsablePanel", + "ajax": ["Expanded", "Collapsed", "Title"], + "parent": "PanelBase", + "public": false +}, +{ + "name": "Field", + "ajax": ["Readonly"], + "parent": "BoxComponent", + "public": false +}, +{ + "name": "TextField", + "ajax": [], + "parent": "Field", + "public": false +}, +{ + "name": "RealTextField", + "ajax": ["Text"], + "parent": "TextField", + "public": false +}, +{ + "name": "Toolbar", + "ajax": [], + "parent": "BoxComponent", + "public": true +}, +{ + "name": "ToolbarFill", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "ToolbarSeparator", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "ToolbarText", + "ajax": ["Text"], + "parent": "Component", + "public": true +}, +{ + "name": "Button", + "ajax": ["Text", "Icon", "IconUrl", "ToolTip", "OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmIcon", "ConfirmTarget", "Pressed"], + "parent": "Component", + "public": true +}, +{ + "name": "Calendar", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "Menu", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "BaseMenuItem", + "ajax": [], + "parent": "Component", + "public": false +}, +{ + "name": "MenuItem", + "ajax": [], + "parent": "BaseMenuItem", + "public": false +}, +{ + "name": "MenuButton", + "ajax": ["ClickScriptFunction"], + "parent": "MenuItem", + "public": true +}, +{ + "name": "MenuHyperLink", + "ajax": [], + "parent": "MenuItem", + "public": true +}, +{ + "name": "MenuSeparator", + "ajax": [], + "parent": "BaseMenuItem", + "public": true +}, +{ + "name": "MenuText", + "ajax": [], + "parent": "MenuItem", + "public": true +}, +{ + "name": "SplitButton", + "ajax": [], + "parent": "Button", + "public": true +}, +{ + "name": "PageLoading", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "PageManager", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "Timer", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "CheckBox", + "ajax": ["Checked"], + "parent": "Field", + "public": true +}, +{ + "name": "CheckBoxList", + "ajax": ["SelectedIndexArray", "SelectedValueArray", "SelectedItemArray"], + "parent": "Field", + "public": true +}, +{ + "name": "HtmlEditor", + "ajax": ["Text"], + "parent": "Field", + "public": true +}, +{ + "name": "Label", + "ajax": ["Text"], + "parent": "Field", + "public": true +}, +{ + "name": "HyperLink", + "ajax": ["Text", "NavigateUrl", "Target", "OnClientClick"], + "parent": "Field", + "public": true +}, +{ + "name": "Image", + "ajax": ["ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt"], + "parent": "Field", + "public": true +}, +{ + "name": "LinkButton", + "ajax": ["Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"], + "parent": "Field", + "public": true +}, +{ + "name": "RadioButton", + "ajax": ["Checked"], + "parent": "Field", + "public": true +}, +{ + "name": "RadioButtonList", + "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem"], + "parent": "Field", + "public": true +}, +{ + "name": "DropDownList", + "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem", "DataSource", "Items"], + "parent": "TextField", + "public": true +}, +{ + "name": "DatePicker", + "ajax": ["SelectedDate"], + "parent": "RealTextField", + "public": true +}, +{ + "name": "HiddenField", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "FileUpload", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "NumberBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TextArea", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TextBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TriggerBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TwinTriggerBox", + "ajax": ["ShowTrigger1", "ShowTrigger2"], + "parent": "RealTextField", + "public": true +}, +{ + "name": "RegionPanel", + "ajax": [], + "parent": "PanelBase", + "public": true +}, +{ + "name": "Region", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Accordion", + "ajax": ["ActivePaneIndex"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "AccordionPane", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "AccordionLink", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "ContentPanel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Form", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "FormRow", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "GroupPanel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Panel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "SimpleForm", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Tree", + "ajax": ["Nodes", "SelectedNodeIDArray"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Window", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Grid", + "ajax": ["PageIndex", "PageSize", "RecordCount", "SortColumnIndex", "SortDirection", "SelectedRowIndexArray", "DataSource"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "TabStrip", + "ajax": ["ActiveTabIndex"], + "parent": "PanelBase", + "public": true +}, +{ + "name": "Tab", + "ajax": [], + "parent": "PanelBase", + "public": true }] \ No newline at end of file diff --git a/FineUI.Examples/config/enable_gzip_iis6.htm b/FineUI.Examples/config/enable_gzip_iis6.htm index 1c9bb55..139c2e6 100644 --- a/FineUI.Examples/config/enable_gzip_iis6.htm +++ b/FineUI.Examples/config/enable_gzip_iis6.htm @@ -1,63 +1,63 @@ - - - - 如何在IIS6中启用GZIP压缩 - - - - -
- 如何在IIS6中启用GZIP压缩 -
-
- 启用GZIP压缩可以大大减少网络传输的数据量,比如使用FineUI的网站,首次下载的JavaScript由未启用的650K左右减少为启用GZIP后的250k左右。 -
-
    -
  1. 展开IIS管理器,在网站菜单上点击右键,点击属性菜单,选择服务选项卡,按下图选中启用压缩的复选框。 -
    - -
    - -
    -
  2. -
  3. 这里下载IIS - 6.0资源工具包,安装后运行Metabase Explorer。 -
    - -
    -
  4. -
  5. 展开 LM>W3SVC>Filters>Compression,你需要如下编辑 gzip 和 deflate 两个菜单。 -
    - HcScriptFileExtensions:asp,dll,aspx,axd,asmx,php,exe -
    - HcDynamicCompressionLevel:10 -
    - HcFileExtensions:htm,html,js,css -
    - -
    -
  6. -
  7. 重启IIS。 -
    - -
  8. -
- - - + + + + 如何在IIS6中启用GZIP压缩 + + + + +
+ 如何在IIS6中启用GZIP压缩 +
+
+ 启用GZIP压缩可以大大减少网络传输的数据量,比如使用FineUI v3.x的网站,首次下载的JavaScript由未启用的650K左右减少为启用GZIP后的250k左右。 +
+
    +
  1. 展开IIS管理器,在网站菜单上点击右键,点击属性菜单,选择服务选项卡,按下图选中启用压缩的复选框。 +
    + +
    + +
    +
  2. +
  3. 这里下载IIS + 6.0资源工具包,安装后运行Metabase Explorer。 +
    + +
    +
  4. +
  5. 展开 LM>W3SVC>Filters>Compression,你需要如下编辑 gzip 和 deflate 两个菜单。 +
    + HcScriptFileExtensions:asp,dll,aspx,axd,asmx,php,exe +
    + HcDynamicCompressionLevel:10 +
    + HcFileExtensions:htm,html,js,css +
    + +
    +
  6. +
  7. 重启IIS。 +
    + +
  8. +
+ + + diff --git a/FineUI.Examples/config/icons.aspx b/FineUI.Examples/config/icons.aspx index 04d9e41..6a16dd5 100644 --- a/FineUI.Examples/config/icons.aspx +++ b/FineUI.Examples/config/icons.aspx @@ -1,25 +1,25 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="icons.aspx.cs" Inherits="FineUI.Examples.icons" %> - - - - - - - - - -
- FineUI Icons - <%----%> -
- - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="icons.aspx.cs" Inherits="FineUI.Examples.icons" %> + + + + + + + + + +
+ FineUI Icons + <%----%> +
+ + diff --git a/FineUI.Examples/config/icons.aspx.cs b/FineUI.Examples/config/icons.aspx.cs index 775edb9..d7a8f99 100644 --- a/FineUI.Examples/config/icons.aspx.cs +++ b/FineUI.Examples/config/icons.aspx.cs @@ -1,49 +1,49 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Text; - -namespace FineUI.Examples -{ - public partial class icons : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - //LoadData(); - } - } - - //private void LoadData() - //{ - // StringBuilder sb = new StringBuilder(); - // int index = 0; - // sb.Append(""); - // foreach (string icon in Enum.GetNames(typeof(FineUI.IconType))) - // { - // //string iconName = FineUI.IconTypeName.GetName((FineUI.IconType)Enum.Parse(typeof(FineUI.IconType), icon)); - // //string iconUrl = FineUI.ResourceHelper.GetWebResourceUrl(Page, String.Format("FineUI.res.box.icons.{0}", iconName)); - // FineUI.IconType iconType = (FineUI.IconType)Enum.Parse(typeof(FineUI.IconType), icon); - - // if (iconType != FineUI.IconType.None) - // { - // string iconUrl = FineUI.IconTypeName.GetIconUrl(iconType); - // sb.AppendFormat("", iconUrl, icon); - // } - - // if (index % 5 == 0 && index != 0) - // { - // sb.Append(""); - // } - - // index++; - // } - // sb.Append("
{1}
"); - // litIcons.Text = sb.ToString(); - //} - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; + +namespace FineUI.Examples +{ + public partial class icons : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + //LoadData(); + } + } + + //private void LoadData() + //{ + // StringBuilder sb = new StringBuilder(); + // int index = 0; + // sb.Append("
"); + // foreach (string icon in Enum.GetNames(typeof(FineUI.IconType))) + // { + // //string iconName = FineUI.IconTypeName.GetName((FineUI.IconType)Enum.Parse(typeof(FineUI.IconType), icon)); + // //string iconUrl = FineUI.ResourceHelper.GetWebResourceUrl(Page, String.Format("FineUI.res.box.icons.{0}", iconName)); + // FineUI.IconType iconType = (FineUI.IconType)Enum.Parse(typeof(FineUI.IconType), icon); + + // if (iconType != FineUI.IconType.None) + // { + // string iconUrl = FineUI.IconTypeName.GetIconUrl(iconType); + // sb.AppendFormat("", iconUrl, icon); + // } + + // if (index % 5 == 0 && index != 0) + // { + // sb.Append(""); + // } + + // index++; + // } + // sb.Append("
{1}
"); + // litIcons.Text = sb.ToString(); + //} + + } +} diff --git a/FineUI.Examples/config/icons.aspx.designer.cs b/FineUI.Examples/config/icons.aspx.designer.cs index 002baf0..f301885 100644 --- a/FineUI.Examples/config/icons.aspx.designer.cs +++ b/FineUI.Examples/config/icons.aspx.designer.cs @@ -1,24 +1,24 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples { - - - public partial class icons { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class icons { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + } +} diff --git a/FineUI.Examples/config/icons.htm b/FineUI.Examples/config/icons.htm index 2e50b89..c85fb5f 100644 --- a/FineUI.Examples/config/icons.htm +++ b/FineUI.Examples/config/icons.htm @@ -1,10 +1,10 @@ - - - - - - - - FineUI Icons - - + + + + + + + + FineUI Icons + + diff --git a/FineUI.Examples/config/install_toolbox.htm b/FineUI.Examples/config/install_toolbox.htm index a97e796..95625e5 100644 --- a/FineUI.Examples/config/install_toolbox.htm +++ b/FineUI.Examples/config/install_toolbox.htm @@ -1,33 +1,33 @@ - - - - - - - - -
- 安装工具箱 -
-
    -
  • 打开 Visual Studio,新建一个 Web 项目;
  • -
  • 打开 Default.aspx 页面;
  • -
  • 打开工具箱,在空白处点击右键选择“添加选项卡”,输入“FineUI”;
  • -
  • 在“FineUI”选项卡内,单击右键选择“选择项...”;
  • -
  • 在弹出的窗口的下面,选择“浏览...”按钮;
  • -
  • 打开“FineUI.dll”并确定;
  • -
  • 完成后的截图: -
    - FineUI toolbox -
  • -
- - + + + + + + + + +
+ 安装工具箱 +
+
    +
  1. 打开 Visual Studio,新建一个 Web 项目;
  2. +
  3. 打开 Default.aspx 页面;
  4. +
  5. 打开工具箱,在空白处点击右键选择“添加选项卡”,输入“FineUI”;
  6. +
  7. 在“FineUI”选项卡内,单击右键选择“选择项...”;
  8. +
  9. 在弹出的窗口的下面,选择“浏览...”按钮;
  10. +
  11. 打开“FineUI.dll”并确定;
  12. +
  13. 完成后的截图: +
    + FineUI toolbox +
  14. +
+ + diff --git a/FineUI.Examples/config/modify_webconfig.htm b/FineUI.Examples/config/modify_webconfig.htm index 74ef224..18101cc 100644 --- a/FineUI.Examples/config/modify_webconfig.htm +++ b/FineUI.Examples/config/modify_webconfig.htm @@ -1,97 +1,120 @@ - - - - - - - - -
- 在开发项目之前一定要配置好 Web.config: -
-
    -
  • 打开 web.config,在 configuration 配置节: -
    -
    -    <configSections>
    -        <section name="FineUI" type="FineUI.ConfigSection, FineUI"/>
    -    </configSections>
    -
    -    <!-- 可用的配置项(这里列的都是默认值):Language="zh_CN" AjaxTimeout="60" EnableAjax="true" Theme="blue" FormMessageTarget="qtip" FormOffsetRight="20" FormLabelWidth="100" FormLabelSeparator=":" IconBasePath="~/icon" EnableAjaxLoading="true" AjaxLoadingType="default" CustomTheme="" CustomThemeBasePath="~/theme" -->
    -    <FineUI DebugMode="false" />
    -            
    - FineUI 配置节中的参数: -
    -
      -
    • Theme: 控件主题,目前内置了四种主题风格(Neptune/Blue/Gray/Access,默认值:Neptune)
    • -
    • Language: 控件语言(en/zh_CN/zh_TW/...,默认值:zh_CN)
    • -
    • FormMessageTarget: 表单字段错误提示信息的显示位置(Side/Qtip,默认值:Side)
    • -
    • FormOffsetRight: 表单字段右侧距离边界的宽度(默认值:5px)
    • -
    • FormLabelWidth: 表单字段标签的宽度(默认值:100px)
    • -
    • FormLabelSeparator: 表单字段标签与内容的分隔符(默认值:":")
    • -
    • EnableAjax: 是否启用AJAX(默认值:true)
    • -
    • AjaxTimeout: AJAX超时时间(单位:秒,默认值:60s)
    • - -
    • DebugMode: 是否开发模式,启用时格式化输出页面JavaScript代码,便于调试(默认值:false)
    • -
    • EnableAjaxLoading: 是否启用Ajax提示(默认值:true)
    • -
    • AjaxLoadingType: Ajax提示类型,默认在页面顶部显示黄色提示框,mask则显示extjs默认的加载提示(default/mask,默认值:default)
    • -
    -
    -
    -
  • -
  • 在 system.web 配置节: -
    -    <pages>
    -      <controls>
    -        <add assembly="FineUI" namespace="FineUI" tagPrefix="x"/>
    -      </controls>
    -    </pages>
    -    
    -    <httpModules>
    -      <add name="FineUIScriptModule" type="FineUI.ScriptModule, FineUI"/>
    -    </httpModules>
    -
    -    <httpHandlers>
    -        <add verb="GET" path="res.axd" type="FineUI.ResourceHandler, FineUI"/>
    -    </httpHandlers>
    -        
    -
  • -
  • 完成。
  • -
-
-
- 特别提醒 -
-
- 基于.Net 4.5的项目,一定要为Web.config中<page>标签添加controlRenderingCompatibilityVersion和clientIDMode两个属性。 -
-    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
-        <controls>
-        <add assembly="FineUI" namespace="FineUI" tagPrefix="ext" />
-        </controls>
-    </pages>
-    
-
-
- 注意引用的Newtonsoft.Json.dll版本 -
-
- FineUI.dll只有一个For Net2.0的版本,无论你的项目是2.0、3.5、4.0、4.5,都只需要引用同一个FineUI.dll即可。 -
-
- Newtonsoft.Json.dll为每个.Net版本创建不同的DLL,比如你的项目是基于.Net 2.0的,就要引用json.net\Net20\Newtonsoft.Json.dll,如果你的项目是基于.Net - 4.0的,就要引用json.net\Net40\Newtonsoft.Json.dll。 -
-
-
-
- - + + + + + + + + +
+ 在开发项目之前请配置好 Web.config: +
+
    +
  1. 设置 configuration 配置节: +
    +
    +    <configSections>
    +        <section name="FineUI" type="FineUI.ConfigSection, FineUI"/>
    +    </configSections>
    +
    +    <!-- 可用的配置项(这里列的都是默认值):
    +            Theme="Neptune" 
    +            Language="zh_CN" 
    +            AjaxTimeout="120" 
    +            EnableAjax="true" 
    +            DebugMode="false"
    +            FormMessageTarget="Qtip" 
    +            FormOffsetRight="0" 
    +            FormLabelWidth="100" 
    +            FormLabelSeparator=":" 
    +            FormLabelAlign="Left" 
    +            EnableAjaxLoading="true" 
    +            AjaxLoadingType="Default" 
    +            CustomTheme="" 
    +            IconBasePath="~/res/icon" 
    +            CustomThemeBasePath="~/res/theme" 
    +            JSBasePath="~/extjs"
    +            IEEdge="true" 
    +    -->
    +    <FineUI DebugMode="false" />
    +            
    + FineUI 配置节中的参数: +
    +
      +
    • Theme: 控件主题,内置 4 种主题风格(Neptune/Blue/Gray/Access,默认值:Neptune)
    • +
    • Language: 控件语言(en/zh_CN/zh_TW,默认值:zh_CN)
    • +
    • FormMessageTarget: 表单字段错误提示信息的显示位置(Title/Side/Qtip,默认值:Side)
    • +
    • FormOffsetRight: 表单字段右侧距离边界的宽度(默认值:0px)
    • +
    • FormLabelWidth: 表单字段标签的宽度(默认值:100px)
    • +
    • FormLabelSeparator: 表单字段标签与内容的分隔符(默认值:":")
    • +
    • EnableAjax: 是否启用AJAX(默认值:true)
    • +
    • AjaxTimeout: Ajax超时时间(单位:秒,默认值:120s)
    • +
    • DebugMode: 是否开发模式,启用时格式化输出页面的JavaScript代码,便于调试(默认值:false)
    • +
    • EnableAjaxLoading: 是否启用Ajax提示(默认值:true)
    • +
    • AjaxLoadingType: Ajax提示类型,默认在页面顶部显示黄色提示框(Default/Mask,默认值:Default)
    • +
    +
    +
    +
  2. +
  3. 设置 system.web 配置节: +
    +    <pages>
    +      <controls>
    +        <add assembly="FineUI" namespace="FineUI" tagPrefix="f"/>
    +      </controls>
    +    </pages>
    +    
    +    <httpModules>
    +      <add name="FineUIScriptModule" type="FineUI.ScriptModule, FineUI"/>
    +    </httpModules>
    +	
    +	<httpHandlers>
    +      <add verb="GET" path="res.axd" type="FineUI.ResourceHandler, FineUI" validate="false"/>
    +    </httpHandlers>
    +
    +        
    +
  4. +
  5. 完成。
  6. +
+
+
+ 特别提醒 +
+
+ 基于.Net 4.5的项目,一定要为Web.config中<page>标签添加controlRenderingCompatibilityVersion和clientIDMode两个属性。 +
+    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
+        <controls>
+        <add assembly="FineUI" namespace="FineUI" tagPrefix="f" />
+        </controls>
+    </pages>
+    
+
+
+ 注意引用的Newtonsoft.Json.dll版本 +
+
+ FineUI.dll只有一个版本,无论你的项目是2.0、3.5、4.0、4.5,都只需要引用同一个FineUI.dll即可。 +
+
+ Newtonsoft.Json.dll为每个.Net版本创建不同的DLL,比如你的项目是基于.Net 2.0的,就要引用json.net\Net20\Newtonsoft.Json.dll,如果你的项目是基于.Net + 4.0的,就要引用json.net\Net40\Newtonsoft.Json.dll。 +
+
+
+ +
+
+
+ + diff --git a/FineUI.Examples/config/release_time_chart.htm b/FineUI.Examples/config/release_time_chart.htm index 1cceece..4970379 100644 --- a/FineUI.Examples/config/release_time_chart.htm +++ b/FineUI.Examples/config/release_time_chart.htm @@ -1,189 +1,193 @@ - - - - FineUI版本发布周期(天) - - - - -
-
-
-
- - - - + + + + FineUI版本发布周期(天) + + + + +
+
+
+
+ + + + diff --git a/FineUI.Examples/default.aspx b/FineUI.Examples/default.aspx index 7dc3d46..0d5b500 100644 --- a/FineUI.Examples/default.aspx +++ b/FineUI.Examples/default.aspx @@ -1,169 +1,558 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="FineUI.Examples._default" %> - - - - - FineUI 在线示例 - 基于 ExtJS 的专业 ASP.NET 控件库 - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

关于FineUI

- 基于 ExtJS 的专业 ASP.NET 控件库。 - -
-

FineUI的使命

- 创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序。 - -
-

支持的浏览器

- IE 7.0+、Firefox 3.6+、Chrome 3.0+、Opera 10.5+、Safari 3.0+ - -
-

授权协议

- Apache License v2.0(ExtJS 库在 GPL v3 协议下发布) - -
-

相关链接

- 首页:http://fineui.com/ -
- 论坛:http://fineui.com/bbs/ -
- 示例:http://fineui.com/demo/ -
- 文档:http://fineui.com/doc/ -
- 下载:http://fineui.codeplex.com/ -
-
-
- 注:FineUI 不再内置 ExtJS 库,请手工添加 ExtJS 库:http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218 - -
-
-
-
-
-
-
-
-
- - - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="FineUI.Examples._default" %> + + + + + FineUI(开源版)在线示例 - 基于 ExtJS 的开源 ASP.NET 控件库 + + + + + + + + + + + + + +
+ + + + +
+ + + FineUI(开源版)在线示例 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

FineUI(开源版)

+ 基于 ExtJS 的开源 ASP.NET 控件库 + +
+

FineUI的使命

+ 创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序 + +
+

支持的浏览器

+ Chrome、Firefox、Safari、IE 8.0+ + +
+

授权协议

+ Apache License v2.0(ExtJS 库在 GPL v3 协议下发布) + +
+

相关链接

+ 首页:http://fineui.com/ +
+ 论坛:http://fineui.com/bbs/ +
+ 示例:http://fineui.com/demo/ +
+ 文档:http://fineui.com/doc/ +
+ 下载:http://fineui.codeplex.com/ +
+
+
+ 注:FineUI 不再内置 ExtJS 库,请手工添加 ExtJS 库:http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218 + + +
+
+ 扫描二维码,关注 FineUI 微信公众号 +
+ +
+
+
+
+
+
+
+
+ + + + + + + + + +
 版本:v +    QQ公开群Copyright © 2014 合肥三生石上软件有限公司在线人数: 
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI.Examples/default.aspx.cs b/FineUI.Examples/default.aspx.cs index cf9e637..da488c1 100644 --- a/FineUI.Examples/default.aspx.cs +++ b/FineUI.Examples/default.aspx.cs @@ -1,413 +1,391 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -using System.Xml; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace FineUI.Examples -{ - public partial class _default : PageBase - { - #region Page_Init - - protected void Page_Init(object sender, EventArgs e) - { - string menuType = "menu"; - HttpCookie menuCookie = Request.Cookies["MenuStyle"]; - if (menuCookie != null) - { - menuType = menuCookie.Value; - } - - // 注册客户端脚本,服务器端控件ID和客户端ID的映射关系 - JObject ids = GetClientIDS(btnExpandAll, btnCollapseAll, windowSourceCode, mainTabStrip); - - if (menuType == "accordion") - { - Accordion accordionMenu = InitAccordionMenu(); - ids.Add("mainMenu", accordionMenu.ClientID); - ids.Add("menuType", "accordion"); - } - else - { - Tree treeMenu = InitTreeMenu(); - ids.Add("mainMenu", treeMenu.ClientID); - ids.Add("menuType", "menu"); - } - - ids.Add("theme", PageManager.Instance.Theme.ToString()); - - // 只在页面第一次加载时注册客户端用到的脚本 - if (!Page.IsPostBack) - { - string idsScriptStr = String.Format("window.IDS={0};", ids.ToString(Newtonsoft.Json.Formatting.None)); - PageContext.RegisterStartupScript(idsScriptStr); - } - } - - private Accordion InitAccordionMenu() - { - Accordion accordionMenu = new Accordion(); - accordionMenu.ID = "accordionMenu"; - accordionMenu.EnableFill = true; - accordionMenu.ShowBorder = false; - accordionMenu.ShowHeader = false; - Region2.Items.Add(accordionMenu); - - - XmlDocument xmlDoc = XmlDataSource1.GetXmlDocument(); - XmlNodeList xmlNodes = xmlDoc.SelectNodes("/Tree/TreeNode"); - foreach (XmlNode xmlNode in xmlNodes) - { - if (xmlNode.HasChildNodes) - { - AccordionPane accordionPane = new AccordionPane(); - accordionPane.Title = xmlNode.Attributes["Text"].Value; - accordionPane.Layout = Layout.Fit; - accordionPane.ShowBorder = false; - accordionPane.BodyPadding = "2px 0 0 0"; - accordionMenu.Items.Add(accordionPane); - - Tree innerTree = new Tree(); - innerTree.EnableArrows = true; - innerTree.ShowBorder = false; - innerTree.ShowHeader = false; - innerTree.EnableIcons = false; - innerTree.AutoScroll = true; - accordionPane.Items.Add(innerTree); - - XmlDocument innerXmlDoc = new XmlDocument(); - innerXmlDoc.LoadXml(String.Format("{0}", xmlNode.InnerXml)); - - // 绑定AccordionPane内部的树控件 - innerTree.DataSource = innerXmlDoc; - innerTree.DataBind(); - - // 重新设置每个节点的图标 - ResolveTreeNode(innerTree.Nodes); - } - } - - return accordionMenu; - } - - private Tree InitTreeMenu() - { - Tree treeMenu = new Tree(); - treeMenu.ID = "treeMenu"; - treeMenu.EnableArrows = true; - treeMenu.ShowBorder = false; - treeMenu.ShowHeader = false; - treeMenu.EnableIcons = false; - treeMenu.AutoScroll = true; - Region2.Items.Add(treeMenu); - - // 绑定 XML 数据源到树控件 - treeMenu.DataSource = XmlDataSource1; - treeMenu.DataBind(); - - // 重新设置每个节点的图标 - ResolveTreeNode(treeMenu.Nodes); - - return treeMenu; - } - - - private JObject GetClientIDS(params ControlBase[] ctrls) - { - JObject jo = new JObject(); - foreach (ControlBase ctrl in ctrls) - { - jo.Add(ctrl.ID, ctrl.ClientID); - } - - return jo; - } - - #endregion - - #region Page_Load - - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - InitMenuStyleButton(); - InitLangMenuButton(); - InitThemeMenuButton(); - - //// 显示源代码按钮 - //btnSourceCode.OnClientClick = windowSourceCode.GetShowReference("./common/source.aspx?files=~/default.aspx;~/common/menu.xml;~/Web.config;~/Code/PageBase.cs;~/js/default.js;~/css/default.css"); - - } - } - - - private void InitMenuStyleButton() - { - string menuStyleID = "MenuStyleTree"; - - HttpCookie menuStyleCookie = Request.Cookies["MenuStyle"]; - if (menuStyleCookie != null) - { - switch (menuStyleCookie.Value) - { - case "menu": - menuStyleID = "MenuStyleTree"; - break; - case "accordion": - menuStyleID = "MenuStyleAccordion"; - break; - } - } - - - SetSelectedMenuID(MenuStyle, menuStyleID); - } - - - private void InitLangMenuButton() - { - string langMenuID = "MenuLangZHCN"; - - string langValue = PageManager1.Language.ToString().ToLower(); - switch (langValue) - { - case "zh_cn": - langMenuID = "MenuLangZHCN"; - break; - case "zh_tw": - langMenuID = "MenuLangZHTW"; - break; - case "en": - langMenuID = "MenuLangEN"; - break; - } - - - SetSelectedMenuID(MenuLang, langMenuID); - } - - private void InitThemeMenuButton() - { - string themeMenuID = "MenuThemeBlue"; - - string themeValue = PageManager1.Theme.ToString().ToLower(); - switch (themeValue) - { - case "blue": - themeMenuID = "MenuThemeBlue"; - break; - case "gray": - themeMenuID = "MenuThemeGray"; - break; - case "access": - themeMenuID = "MenuThemeAccess"; - break; - case "neptune": - themeMenuID = "MenuThemeNeptune"; - break; - } - - SetSelectedMenuID(MenuTheme, themeMenuID); - } - - #endregion - - #region Event - - protected void MenuLang_CheckedChanged(object sender, CheckedEventArgs e) - { - // 单选框菜单按钮的CheckedChanged事件会触发两次,一次是取消选中的菜单项,另一次是选中的菜单项; - // 不处理取消选中菜单项的事件,从而防止此函数重复执行两次 - if (!e.Checked) - { - return; - } - - string langValue = FineUI.Language.ZH_CN.ToString(); - string langID = GetSelectedMenuID(MenuLang); - - switch (langID) - { - case "MenuLangZHCN": - langValue = FineUI.Language.ZH_CN.ToString(); - break; - case "MenuLangZHTW": - langValue = FineUI.Language.ZH_TW.ToString(); - break; - case "MenuLangEN": - langValue = FineUI.Language.EN.ToString(); - break; - } - - SaveToCookieAndRefresh("Language", langValue); - } - - protected void MenuTheme_CheckedChanged(object sender, CheckedEventArgs e) - { - // 单选框菜单按钮的CheckedChanged事件会触发两次,一次是取消选中的菜单项,另一次是选中的菜单项; - // 不处理取消选中菜单项的事件,从而防止此函数重复执行两次 - if (!e.Checked) - { - return; - } - - string themeValue = FineUI.Theme.Neptune.ToString(); - string themeID = GetSelectedMenuID(MenuTheme); - - switch (themeID) - { - case "MenuThemeNeptune": - themeValue = FineUI.Theme.Neptune.ToString(); - break; - case "MenuThemeBlue": - themeValue = FineUI.Theme.Blue.ToString(); - break; - case "MenuThemeGray": - themeValue = FineUI.Theme.Gray.ToString(); - break; - case "MenuThemeAccess": - themeValue = FineUI.Theme.Access.ToString(); - break; - } - - SaveToCookieAndRefresh("Theme", themeValue); - } - - protected void MenuStyle_CheckedChanged(object sender, CheckedEventArgs e) - { - // 单选框菜单按钮的CheckedChanged事件会触发两次,一次是取消选中的菜单项,另一次是选中的菜单项; - // 不处理取消选中菜单项的事件,从而防止此函数重复执行两次 - if (!e.Checked) - { - return; - } - - string menuValue = "menu"; - string menuStyleID = GetSelectedMenuID(MenuStyle); - - switch (menuStyleID) - { - case "MenuStyleTree": - menuValue = "tree"; - break; - case "MenuStyleAccordion": - menuValue = "accordion"; - break; - - } - SaveToCookieAndRefresh("MenuStyle", menuValue); - } - - private string GetSelectedMenuID(MenuButton menuButton) - { - foreach (MenuItem item in menuButton.Menu.Items) - { - if (item is MenuCheckBox && (item as MenuCheckBox).Checked) - { - return item.ID; - } - } - return null; - } - - private void SetSelectedMenuID(MenuButton menuButton, string selectedMenuID) - { - foreach (MenuItem item in menuButton.Menu.Items) - { - MenuCheckBox menu = (item as MenuCheckBox); - if (menu != null && menu.ID == selectedMenuID) - { - menu.Checked = true; - } - else - { - menu.Checked = false; - } - } - } - - - private void SaveToCookieAndRefresh(string cookieName, string cookieValue) - { - HttpCookie cookie = new HttpCookie(cookieName, cookieValue); - cookie.Expires = DateTime.Now.AddYears(1); - Response.Cookies.Add(cookie); - - PageContext.Refresh(); - } - - - - #endregion - - #region Tree - - /// - /// 重新设置每个节点的图标 - /// - /// - private void ResolveTreeNode(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (node.Nodes.Count == 0) - { - if (!String.IsNullOrEmpty(node.NavigateUrl)) - { - node.IconUrl = GetIconForTreeNode(node.NavigateUrl); - } - } - else - { - ResolveTreeNode(node.Nodes); - } - } - } - - /// - /// 根据链接地址返回相应的图标 - /// - /// - /// - private string GetIconForTreeNode(string url) - { - url = url.ToLower(); - int paramsIndex = url.IndexOf("?"); - if (paramsIndex >= 0) - { - url = url.Substring(0, paramsIndex); - } - int lastDotIndex = url.LastIndexOf('.'); - if (lastDotIndex >= 0) - { - url = url.Substring(lastDotIndex + 1); - } - - string fileType = url; - - string iconUrl = "~/images/filetype/vs_unknow.png"; - if (fileType == "txt") - { - iconUrl = "~/images/filetype/vs_txt.png"; - } - else if (fileType == "aspx") - { - iconUrl = "~/images/filetype/vs_aspx.png"; - } - else if (fileType == "htm" || fileType == "html") - { - iconUrl = "~/images/filetype/vs_htm.png"; - } - - return iconUrl; - } - - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +using System.Xml; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI.Examples +{ + public partial class _default : PageBase + { + #region Page_Init + + private string _menuType = "menu"; + private bool _showOnlyNew = false; + private int _examplesCount = 0; + + protected void Page_Init(object sender, EventArgs e) + { + HttpCookie menuCookie = Request.Cookies["MenuStyle_v4"]; + if (menuCookie != null) + { + _menuType = menuCookie.Value; + } + + // 从Cookie中读取是否仅显示最新示例 + HttpCookie menuShowOnlyNew = Request.Cookies["ShowOnlyNew_v4"]; + if (menuShowOnlyNew != null) + { + _showOnlyNew = Convert.ToBoolean(menuShowOnlyNew.Value); + } + + + if (_menuType == "accordion") + { + InitAccordionMenu(); + } + else + { + InitTreeMenu(); + } + + + if (_showOnlyNew) + { + leftPanel.Title = String.Format("最新示例({0})", _examplesCount); + } + else + { + leftPanel.Title = String.Format("全部示例({0})", _examplesCount); + } + + } + + private Accordion InitAccordionMenu() + { + Accordion accordionMenu = new Accordion(); + accordionMenu.ID = "accordionMenu"; + accordionMenu.ShowBorder = false; + accordionMenu.ShowHeader = false; + leftPanel.Items.Add(accordionMenu); + + + XmlDocument xmlDoc = XmlDataSource1.GetXmlDocument(); + XmlNodeList xmlNodes = xmlDoc.SelectNodes("/Tree/TreeNode"); + foreach (XmlNode xmlNode in xmlNodes) + { + if (xmlNode.HasChildNodes) + { + AccordionPane accordionPane = new AccordionPane(); + accordionPane.Title = xmlNode.Attributes["Text"].Value; + accordionPane.Layout = Layout.Fit; + accordionPane.ShowBorder = false; + accordionPane.BodyPadding = "2px 0 0 0"; + accordionMenu.Items.Add(accordionPane); + + Tree innerTree = new Tree(); + innerTree.ShowBorder = false; + innerTree.ShowHeader = false; + innerTree.EnableIcons = true; + innerTree.AutoScroll = true; + innerTree.EnableSingleClickExpand = true; + accordionPane.Items.Add(innerTree); + + XmlDocument doc = new XmlDocument(); + doc.LoadXml(String.Format("{0}", xmlNode.InnerXml)); + ResolveXmlDocument(doc); + + // 绑定AccordionPane内部的树控件 + innerTree.NodeDataBound += treeMenu_NodeDataBound; + innerTree.PreNodeDataBound += treeMenu_PreNodeDataBound; + innerTree.DataSource = doc; + innerTree.DataBind(); + } + } + + return accordionMenu; + } + + private Tree InitTreeMenu() + { + Tree treeMenu = new Tree(); + treeMenu.ID = "treeMenu"; + treeMenu.ShowBorder = false; + treeMenu.ShowHeader = false; + treeMenu.EnableIcons = true; + treeMenu.AutoScroll = true; + treeMenu.EnableSingleClickExpand = true; + leftPanel.Items.Add(treeMenu); + + XmlDocument doc = XmlDataSource1.GetXmlDocument(); + ResolveXmlDocument(doc); + + // 绑定 XML 数据源到树控件 + treeMenu.NodeDataBound += treeMenu_NodeDataBound; + treeMenu.PreNodeDataBound += treeMenu_PreNodeDataBound; + treeMenu.DataSource = doc; + treeMenu.DataBind(); + + return treeMenu; + } + + #region ResolveXmlDocument + + private void ResolveXmlDocument(XmlDocument doc) + { + ResolveXmlDocument(doc, doc.DocumentElement.ChildNodes); + } + + private int ResolveXmlDocument(XmlDocument doc, XmlNodeList nodes) + { + // nodes 中渲染到页面上的节点个数 + int nodeVisibleCount = 0; + + foreach (XmlNode node in nodes) + { + // Only process Xml elements (ignore comments, etc) + if (node.NodeType == XmlNodeType.Element) + { + XmlAttribute removedAttr; + + // 是否叶子节点 + bool isLeaf = node.ChildNodes.Count == 0; + + + // 所有过滤条件均是对叶子节点而言,而是否显示目录,要看是否存在叶子节点 + if (isLeaf) + { + // 如果仅显示最新示例 + if (_showOnlyNew) + { + XmlAttribute isNewAttr = node.Attributes["IsNew"]; + if (isNewAttr == null) + { + removedAttr = doc.CreateAttribute("Removed"); + removedAttr.Value = "true"; + + node.Attributes.Append(removedAttr); + + } + } + } + + // 存在子节点 + if (!isLeaf) + { + // 递归 + int childVisibleCount = ResolveXmlDocument(doc, node.ChildNodes); + + if (childVisibleCount == 0) + { + removedAttr = doc.CreateAttribute("Removed"); + removedAttr.Value = "true"; + + node.Attributes.Append(removedAttr); + } + } + + + removedAttr = node.Attributes["Removed"]; + if (removedAttr == null) + { + nodeVisibleCount++; + } + } + } + + return nodeVisibleCount; + } + + #endregion + + /// + /// 树节点的绑定后事件 + /// + /// + /// + private void treeMenu_NodeDataBound(object sender, TreeNodeEventArgs e) + { + string isNewHtml = GetIsNewHtml(e.XmlNode); + if (!String.IsNullOrEmpty(isNewHtml)) + { + e.Node.Text += isNewHtml; + } + + // 如果仅显示最新示例 并且 当前节点不是子节点,则展开当前节点 + if (_showOnlyNew && !e.Node.Leaf) + { + e.Node.Expanded = true; + } + + } + + + /// + /// 树节点的预绑定事件 + /// + /// + /// + private void treeMenu_PreNodeDataBound(object sender, TreePreNodeEventArgs e) + { + /* + // 如果仅显示最新示例 + if (showOnlyNew) + { + string isNewHtml = GetIsNewHtml(e.XmlNode); + if (String.IsNullOrEmpty(isNewHtml)) + { + e.Cancelled = true; + } + } + + // 更新示例总数 + if (e.XmlNode.ChildNodes.Count == 0) + { + examplesCount++; + } + */ + + // 是否叶子节点 + bool isLeaf = e.XmlNode.ChildNodes.Count == 0; + + XmlAttribute removedAttr = e.XmlNode.Attributes["Removed"]; + if (removedAttr != null) + { + e.Cancelled = true; + } + + if (isLeaf && !e.Cancelled) + { + _examplesCount++; + } + } + + + private string GetIsNewHtml(XmlNode node) + { + string result = String.Empty; + + XmlAttribute isNewAttr = node.Attributes["IsNew"]; + if (isNewAttr != null) + { + if (Convert.ToBoolean(isNewAttr.Value)) + { + result = " New!"; + } + } + + return result; + } + + + #endregion + + #region Page_Load + + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + InitMenuStyleButton(); + InitLangMenuButton(); + InitThemeMenuButton(); + InitMenuShowOnlyNew(); + + litVersion.Text = FineUI.GlobalConfig.ProductVersion; + litOnlineUserCount.Text = Application["OnlineUserCount"].ToString(); + } + } + + private void InitMenuShowOnlyNew() + { + cbxShowOnlyNew.Checked = _showOnlyNew; + + } + + + private void InitMenuStyleButton() + { + string menuStyleID = "MenuStyleTree"; + + HttpCookie menuStyleCookie = Request.Cookies["MenuStyle_v4"]; + if (menuStyleCookie != null) + { + switch (menuStyleCookie.Value) + { + case "menu": + menuStyleID = "MenuStyleTree"; + break; + case "accordion": + menuStyleID = "MenuStyleAccordion"; + break; + } + } + + + SetSelectedMenuID(MenuStyle, menuStyleID); + } + + + private void InitLangMenuButton() + { + string langMenuID = "MenuLangZHCN"; + + string langValue = PageManager1.Language.ToString().ToLower(); + switch (langValue) + { + case "zh_cn": + langMenuID = "MenuLangZHCN"; + break; + case "zh_tw": + langMenuID = "MenuLangZHTW"; + break; + case "en": + langMenuID = "MenuLangEN"; + break; + } + + + SetSelectedMenuID(MenuLang, langMenuID); + } + + private void InitThemeMenuButton() + { + string themeMenuID = "MenuThemeBlue"; + + string themeValue = PageManager1.Theme.ToString().ToLower(); + switch (themeValue) + { + case "blue": + themeMenuID = "MenuThemeBlue"; + break; + case "gray": + themeMenuID = "MenuThemeGray"; + break; + case "access": + themeMenuID = "MenuThemeAccess"; + break; + case "neptune": + themeMenuID = "MenuThemeNeptune"; + break; + } + + SetSelectedMenuID(MenuTheme, themeMenuID); + } + + + private void SetSelectedMenuID(MenuButton menuButton, string selectedMenuID) + { + foreach (MenuItem item in menuButton.Menu.Items) + { + MenuCheckBox menu = (item as MenuCheckBox); + if (menu != null && menu.ID == selectedMenuID) + { + menu.Checked = true; + } + else + { + menu.Checked = false; + } + } + } + + #endregion + + + } +} diff --git a/FineUI.Examples/default.aspx.designer.cs b/FineUI.Examples/default.aspx.designer.cs index 7d24198..0c53629 100644 --- a/FineUI.Examples/default.aspx.designer.cs +++ b/FineUI.Examples/default.aspx.designer.cs @@ -1,303 +1,366 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples { - - - public partial class _default { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// RegionPanel1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.RegionPanel RegionPanel1; - - /// - /// Region1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Region Region1; - - /// - /// ContentPanel1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.ContentPanel ContentPanel1; - - /// - /// Button2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button2; - - /// - /// btnExpandAll 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuButton btnExpandAll; - - /// - /// btnCollapseAll 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuButton btnCollapseAll; - - /// - /// MenuSeparator1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuSeparator MenuSeparator1; - - /// - /// MenuStyle 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuButton MenuStyle; - - /// - /// MenuStyleTree 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuStyleTree; - - /// - /// MenuStyleAccordion 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuStyleAccordion; - - /// - /// MenuLang 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuButton MenuLang; - - /// - /// MenuLangZHCN 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuLangZHCN; - - /// - /// MenuLangZHTW 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuLangZHTW; - - /// - /// MenuLangEN 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuLangEN; - - /// - /// MenuTheme 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuButton MenuTheme; - - /// - /// MenuThemeNeptune 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuThemeNeptune; - - /// - /// MenuThemeBlue 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuThemeBlue; - - /// - /// MenuThemeGray 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuThemeGray; - - /// - /// MenuThemeAccess 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuCheckBox MenuThemeAccess; - - /// - /// MenuSeparator2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.MenuSeparator MenuSeparator2; - - /// - /// Region2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Region Region2; - - /// - /// mainRegion 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Region mainRegion; - - /// - /// mainTabStrip 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.TabStrip mainTabStrip; - - /// - /// ToolbarFill2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.ToolbarFill ToolbarFill2; - - /// - /// btnGotoOpenSourceSite 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnGotoOpenSourceSite; - - /// - /// ToolbarSeparator1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.ToolbarSeparator ToolbarSeparator1; - - /// - /// ToolbarSeparator2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.ToolbarSeparator ToolbarSeparator2; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - - /// - /// windowSourceCode 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Window windowSourceCode; - - /// - /// XmlDataSource1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.XmlDataSource XmlDataSource1; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class _default { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// RegionPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.RegionPanel RegionPanel1; + + /// + /// Region1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region Region1; + + /// + /// leftPanel 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region leftPanel; + + /// + /// mainRegion 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region mainRegion; + + /// + /// mainTabStrip 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TabStrip mainTabStrip; + + /// + /// ToolbarFill2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ToolbarFill ToolbarFill2; + + /// + /// btnGotoOpenSourceSite 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGotoOpenSourceSite; + + /// + /// ToolbarSeparator2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ToolbarSeparator ToolbarSeparator2; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// bottomPanel 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region bottomPanel; + + /// + /// litVersion 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal litVersion; + + /// + /// litOnlineUserCount 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal litOnlineUserCount; + + /// + /// windowSourceCode 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window windowSourceCode; + + /// + /// menuSettings 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Menu menuSettings; + + /// + /// btnExpandAll 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuButton btnExpandAll; + + /// + /// btnCollapseAll 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuButton btnCollapseAll; + + /// + /// MenuSeparator4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuSeparator MenuSeparator4; + + /// + /// cbxShowOnlyNew 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox cbxShowOnlyNew; + + /// + /// MenuSeparator1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuSeparator MenuSeparator1; + + /// + /// MenuStyle 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuButton MenuStyle; + + /// + /// MenuStyleTree 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuStyleTree; + + /// + /// MenuStyleAccordion 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuStyleAccordion; + + /// + /// MenuLang 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuButton MenuLang; + + /// + /// MenuLangZHCN 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuLangZHCN; + + /// + /// MenuLangZHTW 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuLangZHTW; + + /// + /// MenuLangEN 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuLangEN; + + /// + /// MenuTheme 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuButton MenuTheme; + + /// + /// MenuThemeNeptune 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuThemeNeptune; + + /// + /// MenuThemeBlue 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuThemeBlue; + + /// + /// MenuThemeGray 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuThemeGray; + + /// + /// MenuThemeAccess 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuCheckBox MenuThemeAccess; + + /// + /// MenuSeparator2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuSeparator MenuSeparator2; + + /// + /// MenuHyperLink2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuHyperLink MenuHyperLink2; + + /// + /// MenuHyperLink1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuHyperLink MenuHyperLink1; + + /// + /// MenuSeparator3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuSeparator MenuSeparator3; + + /// + /// MenuHyperLink3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.MenuHyperLink MenuHyperLink3; + + /// + /// XmlDataSource1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.XmlDataSource XmlDataSource1; + } +} diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx b/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx index 7a2b901..3218ad1 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx @@ -1,31 +1,32 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_compositelist.aspx.cs" - Inherits="FineUI.Examples.dropdownlist.dropdownlist_compositelist" %> - - - - - - - - -
- - - - - - - - - - - - - -
-
- - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_compositelist.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_compositelist" %> + + + + + + + + +
+ + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs b/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs index 88f4383..44a3020 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs @@ -1,89 +1,93 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.dropdownlist -{ - public partial class dropdownlist_compositelist : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - BindEnumrableToDropDownList(); - } - } - - #region CustomClass - - public class CustomClass - { - private string _id; - - public string ID - { - get { return _id; } - set { _id = value; } - } - private string _name; - - public string Name - { - get { return _name; } - set { _name = value; } - } - - public CustomClass(string id, string name) - { - _id = id; - _name = name; - } - } - #endregion - - #region BindEnumrableToDropDownList - - private void BindEnumrableToDropDownList() - { - List myList = new List(); - myList.Add(new CustomClass("1", "选项 1")); - myList.Add(new CustomClass("2", "选项 2")); - myList.Add(new CustomClass("3", "选项 3")); - myList.Add(new CustomClass("4", "选项 4")); - myList.Add(new CustomClass("5", "选项 5")); - myList.Add(new CustomClass("6", "选项 6")); - myList.Add(new CustomClass("7", "选项 7")); - myList.Add(new CustomClass("8", "选项 8")); - myList.Add(new CustomClass("9", "选项 9")); - - DropDownList1.DataTextField = "Name"; - DropDownList1.DataValueField = "ID"; - DropDownList1.DataSource = myList; - DropDownList1.DataBind(); - - } - - #endregion - - #region Events - - protected void btnSelectItem6_Click(object sender, EventArgs e) - { - DropDownList1.SelectedValue = "6"; - } - - protected void btnGetSelection_Click(object sender, EventArgs e) - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - } - - #endregion - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_compositelist : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindEnumrableToDropDownList(); + } + } + + #region CustomClass + + public class CustomClass + { + private string _id; + + public string ID + { + get { return _id; } + set { _id = value; } + } + private string _name; + + public string Name + { + get { return _name; } + set { _name = value; } + } + + public CustomClass(string id, string name) + { + _id = id; + _name = name; + } + } + #endregion + + #region BindEnumrableToDropDownList + + private void BindEnumrableToDropDownList() + { + List myList = new List(); + myList.Add(new CustomClass("1", "可选项1")); + myList.Add(new CustomClass("2", "可选项2")); + myList.Add(new CustomClass("3", "可选项3")); + myList.Add(new CustomClass("4", "可选项4")); + myList.Add(new CustomClass("5", "可选项5")); + myList.Add(new CustomClass("6", "可选项6")); + myList.Add(new CustomClass("7", "可选择项7")); + myList.Add(new CustomClass("8", "可选择项8")); + myList.Add(new CustomClass("9", "可选择项9")); + + DropDownList1.DataTextField = "Name"; + DropDownList1.DataValueField = "ID"; + DropDownList1.DataSource = myList; + DropDownList1.DataBind(); + + } + + #endregion + + #region Events + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + #endregion + + } +} diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs b/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs index d287dd7..0e1ed9c 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs @@ -1,78 +1,78 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.dropdownlist { - - - public partial class dropdownlist_compositelist { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// DropDownList1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList DropDownList1; - - /// - /// btnSelectItem6 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSelectItem6; - - /// - /// btnGetSelection 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnGetSelection; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_compositelist { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx b/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx index 88c9da1..cc6419b 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx @@ -1,29 +1,30 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_datatable.aspx.cs" - Inherits="FineUI.Examples.dropdownlist.dropdownlist_datatable" %> - - - - - - - - -
- - - - - - - - - - - -
-
- 注:这个下拉列表在选择项改变时自动回发。 - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_datatable.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_datatable" %> + + + + + + + + +
+ + + + + + + + + + +
+ + +
+ 注:这个下拉列表在选择项改变时自动回发。 + + + diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs b/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs index 27354e6..53892a3 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs @@ -1,106 +1,110 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.dropdownlist -{ - public partial class dropdownlist_datatable : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - BindDataTableToDropDownList(); - } - } - - #region BindDataTableToDropDownList - - private void BindDataTableToDropDownList() - { - DataTable table = new DataTable(); - DataColumn column1 = new DataColumn("MyText", typeof(String)); - DataColumn column2 = new DataColumn("MyValue", typeof(String)); - table.Columns.Add(column1); - table.Columns.Add(column2); - - DataRow row = table.NewRow(); - row[0] = "选项 1"; - row[1] = "1"; - table.Rows.Add(row); - row = table.NewRow(); - - row[0] = "选项 2"; - row[1] = "2"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "选项 3"; - row[1] = "3"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "选项 4"; - row[1] = "4"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "选项 5"; - row[1] = "5"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "选项 6"; - row[1] = "6"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "选项 7"; - row[1] = "7"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "选项 8"; - row[1] = "8"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "选项 9"; - row[1] = "9"; - table.Rows.Add(row); - - row = table.NewRow(); - row[0] = "这是一个很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的可选项"; - row[1] = "10"; - table.Rows.Add(row); - - DropDownList1.DataTextField = "MyText"; - DropDownList1.DataValueField = "MyValue"; - DropDownList1.DataSource = table; - DropDownList1.DataBind(); - } - - #endregion - - #region Events - - protected void btnSelectItem6_Click(object sender, EventArgs e) - { - DropDownList1.SelectedValue = "6"; - } - - protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - } - - #endregion - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_datatable : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindDataTableToDropDownList(); + } + } + + #region BindDataTableToDropDownList + + private void BindDataTableToDropDownList() + { + DataTable table = new DataTable(); + DataColumn column1 = new DataColumn("MyText", typeof(String)); + DataColumn column2 = new DataColumn("MyValue", typeof(String)); + table.Columns.Add(column1); + table.Columns.Add(column2); + + DataRow row = table.NewRow(); + row[0] = "可选项1"; + row[1] = "1"; + table.Rows.Add(row); + row = table.NewRow(); + + row[0] = "可选项2"; + row[1] = "2"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项3"; + row[1] = "3"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项4"; + row[1] = "4"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项5"; + row[1] = "5"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项6"; + row[1] = "6"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选择项7"; + row[1] = "7"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选择项8"; + row[1] = "8"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选择项9"; + row[1] = "9"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "这是一个很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的可选项"; + row[1] = "10"; + table.Rows.Add(row); + + DropDownList1.DataTextField = "MyText"; + DropDownList1.DataValueField = "MyValue"; + DropDownList1.DataSource = table; + DropDownList1.DataBind(); + } + + #endregion + + #region Events + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "6"; + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + #endregion + + } +} diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs b/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs index 5ac5dff..1af8678 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs @@ -1,69 +1,69 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.dropdownlist { - - - public partial class dropdownlist_datatable { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// DropDownList1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList DropDownList1; - - /// - /// btnSelectItem6 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSelectItem6; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_datatable { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx b/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx index e435714..2dd55fb 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx @@ -1,31 +1,32 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_simplelist.aspx.cs" - Inherits="FineUI.Examples.dropdownlist.dropdownlist_simplelist" %> - - - - - - - - -
- - - - - - - - - - - - - -
-
- - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_simplelist.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_simplelist" %> + + + + + + + + +
+ + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs b/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs index 79b40ef..54596a1 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs @@ -1,60 +1,64 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.dropdownlist -{ - public partial class dropdownlist_simplelist : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - BindStringListToDropDownList(); - } - } - - #region BindStringListToDropDownList - - private void BindStringListToDropDownList() - { - List strList = new List(); - strList.Add("选项 1"); - strList.Add("选项 2"); - strList.Add("选项 3"); - strList.Add("选项 4"); - strList.Add("选项 5"); - strList.Add("选项 6"); - strList.Add("选项 7"); - strList.Add("选项 8"); - strList.Add("选项 9"); - strList.Add("这是一个很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的可选项"); - - DropDownList1.DataSource = strList; - DropDownList1.DataBind(); - - } - #endregion - - #region Events - - protected void btnSelectItem6_Click(object sender, EventArgs e) - { - DropDownList1.SelectedValue = "选项 6"; - } - - protected void btnGetSelection_Click(object sender, EventArgs e) - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - } - - #endregion - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_simplelist : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindStringListToDropDownList(); + } + } + + #region BindStringListToDropDownList + + private void BindStringListToDropDownList() + { + List strList = new List(); + strList.Add("可选项1"); + strList.Add("可选项2"); + strList.Add("可选项3"); + strList.Add("可选项4"); + strList.Add("可选项5"); + strList.Add("可选项6"); + strList.Add("可选择项7"); + strList.Add("可选择项8"); + strList.Add("可选择项9"); + strList.Add("这是一个很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的可选项"); + + DropDownList1.DataSource = strList; + DropDownList1.DataBind(); + + } + #endregion + + #region Events + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "可选项6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + #endregion + + } +} diff --git a/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs b/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs index d71a541..9576f2e 100644 --- a/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs @@ -1,78 +1,78 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.dropdownlist { - - - public partial class dropdownlist_simplelist { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// DropDownList1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList DropDownList1; - - /// - /// btnSelectItem6 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSelectItem6; - - /// - /// btnGetSelection 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnGetSelection; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_simplelist { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist.aspx b/FineUI.Examples/dropdownlist/dropdownlist.aspx index 0a7706c..9ca53cc 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist.aspx +++ b/FineUI.Examples/dropdownlist/dropdownlist.aspx @@ -1,60 +1,43 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist" %> - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs b/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs index 9cc4320..765a012 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs @@ -1,36 +1,40 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.dropdownlist -{ - public partial class dropdownlist : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - - } - } - - protected void btnSelectItem6_Click(object sender, EventArgs e) - { - DropDownList1.SelectedValue = "Value6"; - } - - protected void btnGetSelection_Click(object sender, EventArgs e) - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - } - - - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs b/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs index 746a2ed..2aae2ac 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs @@ -1,78 +1,78 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.dropdownlist { - - - public partial class dropdownlist { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// DropDownList1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList DropDownList1; - - /// - /// btnSelectItem6 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSelectItem6; - - /// - /// btnGetSelection 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnGetSelection; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx b/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx index a8dc9e8..6d6d0c1 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx +++ b/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx @@ -1,45 +1,47 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_emptyvalue.aspx.cs" - Inherits="FineUI.Examples.dropdownlist.dropdownlist_emptyvalue" %> - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- 注:“选项 6”的Value属性为空字符串。 - - - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_emptyvalue.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_emptyvalue" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 注:“可选项6”的Value属性为空字符串。 + + + + + diff --git a/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs b/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs index 5898384..2a24998 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs @@ -1,46 +1,50 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.dropdownlist -{ - public partial class dropdownlist_emptyvalue : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - - } - } - - protected void btnSelectItem6_Click(object sender, EventArgs e) - { - DropDownList1.SelectedValue = ""; - } - - protected void btnGetSelection_Click(object sender, EventArgs e) - { - Result(); - } - - private void Result() - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - } - - protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_emptyvalue : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = ""; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + Result(); + } + + private void Result() + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs b/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs index 322ba54..1654bc0 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs @@ -1,78 +1,78 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.dropdownlist { - - - public partial class dropdownlist_emptyvalue { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// DropDownList1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList DropDownList1; - - /// - /// btnSelectItem6 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSelectItem6; - - /// - /// btnGetSelection 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnGetSelection; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_emptyvalue { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx b/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx index 865e9b4..0530154 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx +++ b/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx @@ -1,44 +1,45 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_enableedit.aspx.cs" - Inherits="FineUI.Examples.dropdownlist.dropdownlist_enableedit" %> - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
- 注:下拉列表的属性设置为EnableEdit="true" ForceSelection="true"。 - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_enableedit.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_enableedit" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 注:下拉列表的属性设置为EnableEdit="true" ForceSelection="true"。 + + + diff --git a/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs b/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs index 8ae2f37..eb8894c 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs @@ -1,35 +1,38 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.dropdownlist -{ - public partial class dropdownlist_enableedit : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - - } - } - - protected void btnSelectItem6_Click(object sender, EventArgs e) - { - DropDownList1.SelectedValue = "Value6"; - } - - protected void btnGetSelection_Click(object sender, EventArgs e) - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - - } - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_enableedit : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs b/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs index 419a441..48641da 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs @@ -1,78 +1,78 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.dropdownlist { - - - public partial class dropdownlist_enableedit { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// DropDownList1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList DropDownList1; - - /// - /// btnSelectItem6 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSelectItem6; - - /// - /// btnGetSelection 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnGetSelection; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_enableedit { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx b/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx index 20cc67f..13209c8 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx +++ b/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx @@ -1,44 +1,45 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_forceselection.aspx.cs" - Inherits="FineUI.Examples.dropdownlist.dropdownlist_forceselection" %> - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
- 注:下拉列表的属性设置为EnableEdit="true" ForceSelection="false"。 - - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_forceselection.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_forceselection" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 注:下拉列表的属性设置为EnableEdit="true" ForceSelection="false"。 + + + diff --git a/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs b/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs index e5fc951..c265ed2 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs @@ -1,38 +1,38 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.dropdownlist -{ - public partial class dropdownlist_forceselection : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - - } - } - - protected void btnSelectItem6_Click(object sender, EventArgs e) - { - DropDownList1.SelectedValue = "Value6"; - } - - protected void btnGetSelection_Click(object sender, EventArgs e) - { - if (DropDownList1.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); - } - else - { - labResult.Text = String.Format("用户输入值:{0}", DropDownList1.Text); - } - } - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_forceselection : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = String.Format("用户输入值:{0}", DropDownList1.Text); + } + } + + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs b/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs index a4a233c..e32c1b8 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs @@ -1,78 +1,78 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.dropdownlist { - - - public partial class dropdownlist_forceselection { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// DropDownList1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList DropDownList1; - - /// - /// btnSelectItem6 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSelectItem6; - - /// - /// btnGetSelection 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnGetSelection; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_forceselection { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx b/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx new file mode 100644 index 0000000..3e85158 --- /dev/null +++ b/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx @@ -0,0 +1,54 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_matchfieldwidth.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_matchfieldwidth" %> + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ 注:ExtJS这个地方有问题,可能会有横向滚动体出来。查看专业版示例 + + + diff --git a/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs b/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs new file mode 100644 index 0000000..4752921 --- /dev/null +++ b/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_matchfieldwidth : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs b/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs new file mode 100644 index 0000000..7f73d5d --- /dev/null +++ b/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_matchfieldwidth { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx b/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx index daa6bc1..da372df 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx +++ b/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx @@ -1,31 +1,32 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_simulate_tree.aspx.cs" - Inherits="FineUI.Examples.data.dropdownlist_simulate_tree" %> - - - - - - - - -
- - - - - - - - - - - - - -
-
- - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_simulate_tree.aspx.cs" + Inherits="FineUI.Examples.data.dropdownlist_simulate_tree" %> + + + + + + + + +
+ + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs b/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs index 61cffa8..4955ff0 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs @@ -1,112 +1,116 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; - -namespace FineUI.Examples.data -{ - public partial class dropdownlist_simulate_tree : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - BindEnumrable(); - } - } - - #region JQueryFeature - - public class JQueryFeature - { - private string _id; - - public string Id - { - get { return _id; } - set { _id = value; } - } - private string _name; - - public string Name - { - get { return _name; } - set { _name = value; } - } - - private int _level; - - public int Level - { - get { return _level; } - set { _level = value; } - } - - private bool _enableSelect; - - public bool EnableSelect - { - get { return _enableSelect; } - set { _enableSelect = value; } - } - - public JQueryFeature(string id, string name, int level, bool enableSelect) - { - _id = id; - _name = name; - _level = level; - _enableSelect = enableSelect; - } - - public override string ToString() - { - return String.Format("Name:{0}+Id:{1}", Name, Id); - } - } - #endregion - - #region BindEnumrable - - private void BindEnumrable() - { - List myList = new List(); - myList.Add(new JQueryFeature("0", "jQuery", 0, false)); - myList.Add(new JQueryFeature("1", "核心", 1, false)); - myList.Add(new JQueryFeature("2", "选择符", 1, false)); - myList.Add(new JQueryFeature("3", "基本选择符", 2, true)); - myList.Add(new JQueryFeature("4", "内容选择符", 2, true)); - myList.Add(new JQueryFeature("5", "属性选择符", 2, true)); - myList.Add(new JQueryFeature("6", "筛选", 1, false)); - myList.Add(new JQueryFeature("7", "过滤", 2, true)); - myList.Add(new JQueryFeature("8", "查找", 2, true)); - myList.Add(new JQueryFeature("9", "事件", 1, false)); - myList.Add(new JQueryFeature("10", "页面载入", 2, true)); - myList.Add(new JQueryFeature("11", "事件处理", 2, true)); - myList.Add(new JQueryFeature("12", "事件委托", 2, true)); - - ddlBox.DataTextField = "Name"; - ddlBox.DataValueField = "Id"; - ddlBox.DataSimulateTreeLevelField = "Level"; - ddlBox.DataEnableSelectField = "EnableSelect"; - ddlBox.DataSource = myList; - ddlBox.DataBind(); - - ddlBox.SelectedValue = "3"; - } - #endregion - - #region Events - - protected void Button1_Click(object sender, EventArgs e) - { - if (ddlBox.SelectedItem != null) - { - labResult.Text = String.Format("选中项:{0}(值:{1})", ddlBox.SelectedText, ddlBox.SelectedValue); - } - } - #endregion - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.data +{ + public partial class dropdownlist_simulate_tree : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindEnumrable(); + } + } + + #region JQueryFeature + + public class JQueryFeature + { + private string _id; + + public string Id + { + get { return _id; } + set { _id = value; } + } + private string _name; + + public string Name + { + get { return _name; } + set { _name = value; } + } + + private int _level; + + public int Level + { + get { return _level; } + set { _level = value; } + } + + private bool _enableSelect; + + public bool EnableSelect + { + get { return _enableSelect; } + set { _enableSelect = value; } + } + + public JQueryFeature(string id, string name, int level, bool enableSelect) + { + _id = id; + _name = name; + _level = level; + _enableSelect = enableSelect; + } + + public override string ToString() + { + return String.Format("Name:{0}+Id:{1}", Name, Id); + } + } + #endregion + + #region BindEnumrable + + private void BindEnumrable() + { + List myList = new List(); + myList.Add(new JQueryFeature("0", "jQuery", 0, false)); + myList.Add(new JQueryFeature("1", "核心", 1, false)); + myList.Add(new JQueryFeature("2", "选择符", 1, false)); + myList.Add(new JQueryFeature("3", "基本选择符", 2, true)); + myList.Add(new JQueryFeature("4", "内容选择符", 2, true)); + myList.Add(new JQueryFeature("5", "属性选择符", 2, true)); + myList.Add(new JQueryFeature("6", "筛选", 1, false)); + myList.Add(new JQueryFeature("7", "过滤", 2, true)); + myList.Add(new JQueryFeature("8", "查找", 2, true)); + myList.Add(new JQueryFeature("9", "事件", 1, false)); + myList.Add(new JQueryFeature("10", "页面载入", 2, true)); + myList.Add(new JQueryFeature("11", "事件处理", 2, true)); + myList.Add(new JQueryFeature("12", "事件委托", 2, true)); + + ddlBox.DataTextField = "Name"; + ddlBox.DataValueField = "Id"; + ddlBox.DataSimulateTreeLevelField = "Level"; + ddlBox.DataEnableSelectField = "EnableSelect"; + ddlBox.DataSource = myList; + ddlBox.DataBind(); + + ddlBox.SelectedValue = "3"; + } + #endregion + + #region Events + + protected void Button1_Click(object sender, EventArgs e) + { + if (ddlBox.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", ddlBox.SelectedText, ddlBox.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + #endregion + + } +} diff --git a/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs b/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs index 3768c26..efaf6bf 100644 --- a/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs @@ -1,69 +1,69 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.data { - - - public partial class dropdownlist_simulate_tree { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// ddlBox 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList ddlBox; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button Button1; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.data { + + + public partial class dropdownlist_simulate_tree { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// ddlBox 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlBox; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/multiselect.aspx b/FineUI.Examples/dropdownlist/multiselect.aspx new file mode 100644 index 0000000..e529f66 --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect.aspx @@ -0,0 +1,43 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="multiselect.aspx.cs" Inherits="FineUI.Examples.dropdownlist.multiselect" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI.Examples/dropdownlist/multiselect.aspx.cs b/FineUI.Examples/dropdownlist/multiselect.aspx.cs new file mode 100644 index 0000000..ce521d7 --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect.aspx.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class multiselect : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs b/FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs new file mode 100644 index 0000000..21743b9 --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class multiselect { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx b/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx new file mode 100644 index 0000000..b5bc405 --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx @@ -0,0 +1,43 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="multiselect_autopostback.aspx.cs" Inherits="FineUI.Examples.dropdownlist.multiselect_autopostback" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs b/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs new file mode 100644 index 0000000..1493760 --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class multiselect_autopostback : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + WriteSelection(); + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + WriteSelection(); + } + + private void WriteSelection() + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + } +} diff --git a/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs b/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs new file mode 100644 index 0000000..d4c3aed --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class multiselect_autopostback { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx b/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx new file mode 100644 index 0000000..02c57ca --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx @@ -0,0 +1,46 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="multiselect_enableedit.aspx.cs" Inherits="FineUI.Examples.dropdownlist.multiselect_enableedit" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ 注:ExtJS的实现不完善,多选时不支持键盘输入过滤。 + + + + diff --git a/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs b/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs new file mode 100644 index 0000000..6b5cd1a --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class multiselect_enableedit : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs b/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs new file mode 100644 index 0000000..7e5316b --- /dev/null +++ b/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class multiselect_enableedit { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/dropdownlist/shengshixian.aspx b/FineUI.Examples/dropdownlist/shengshixian.aspx index a64c7c2..3d2e5bb 100644 --- a/FineUI.Examples/dropdownlist/shengshixian.aspx +++ b/FineUI.Examples/dropdownlist/shengshixian.aspx @@ -1,37 +1,38 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="shengshixian.aspx.cs" Inherits="FineUI.Examples.data.shengshixian" %> - - - - - - - - -
- - - - - - - - - - - - - - - -
-
- - - +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="shengshixian.aspx.cs" Inherits="FineUI.Examples.data.shengshixian" %> + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI.Examples/dropdownlist/shengshixian.aspx.cs b/FineUI.Examples/dropdownlist/shengshixian.aspx.cs index b9ea53c..791ccba 100644 --- a/FineUI.Examples/dropdownlist/shengshixian.aspx.cs +++ b/FineUI.Examples/dropdownlist/shengshixian.aspx.cs @@ -1,85 +1,91 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Data; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace FineUI.Examples.data -{ - public partial class shengshixian : PageBase - { - protected void Page_Load(object sender, EventArgs e) - { - if (!IsPostBack) - { - BindSheng(); - BindShi(); - BindXian(); - } - } - - - private void BindSheng() - { - ddlSheng.DataSource = SHENG_JSON; - ddlSheng.DataBind(); - - ddlSheng.Items.Insert(0, new ListItem("选择省份", "-1")); - ddlSheng.SelectedValue = "-1"; - } - - private void BindShi() - { - string sheng = ddlSheng.SelectedValue; - - if (sheng != "-1") - { - JArray ja = SHI_JSON.Value(sheng); - ddlShi.DataSource = ja; - ddlShi.DataBind(); - } - - ddlShi.Items.Insert(0, new ListItem("选择地区市", "-1")); - ddlShi.SelectedValue = "-1"; - } - - private void BindXian() - { - string shi = ddlShi.SelectedValue; - - if (shi != "-1") - { - JArray ja = XIAN_JSON.Value(shi); - ddlXian.DataSource = ja; - ddlXian.DataBind(); - } - - ddlXian.Items.Insert(0, new ListItem("选择县级市", "-1")); - ddlXian.SelectedValue = "-1"; - } - - protected void ddlSheng_SelectedIndexChanged(object sender, EventArgs e) - { - ddlShi.Items.Clear(); - BindShi(); - - ddlXian.Items.Clear(); - BindXian(); - } - - protected void ddlShi_SelectedIndexChanged(object sender, EventArgs e) - { - ddlXian.Items.Clear(); - BindXian(); - } - - protected void btnSubmit_Click(object sender, EventArgs e) - { - labResult.Text = "您选择为:" + ddlSheng.SelectedValue + " | " + ddlShi.SelectedValue + (ddlXian.SelectedValue == "-1" ? "" : " | " + ddlXian.SelectedValue); - } - - } -} +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI.Examples.data +{ + public partial class shengshixian : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindSheng(); + BindShi(); + BindXian(); + } + } + + + private void BindSheng() + { + ddlSheng.DataSource = SHENG_JSON; + ddlSheng.DataBind(); + + ddlSheng.Items.Insert(0, new ListItem("选择省份", "-1")); + ddlSheng.SelectedValue = "-1"; + } + + private void BindShi() + { + string sheng = ddlSheng.SelectedValue; + + if (sheng != "-1") + { + JArray ja = SHI_JSON.Value(sheng); + ddlShi.DataSource = ja; + ddlShi.DataBind(); + } + + ddlShi.Items.Insert(0, new ListItem("选择地区市", "-1")); + ddlShi.SelectedValue = "-1"; + + // 是否禁用 + ddlShi.Enabled = !(ddlShi.Items.Count == 1); + } + + private void BindXian() + { + string shi = ddlShi.SelectedValue; + + if (shi != "-1") + { + JArray ja = XIAN_JSON.Value(shi); + ddlXian.DataSource = ja; + ddlXian.DataBind(); + } + + ddlXian.Items.Insert(0, new ListItem("选择县级市", "-1")); + ddlXian.SelectedValue = "-1"; + + // 是否禁用 + ddlXian.Enabled = !(ddlXian.Items.Count == 1); + } + + protected void ddlSheng_SelectedIndexChanged(object sender, EventArgs e) + { + ddlShi.Items.Clear(); + BindShi(); + + ddlXian.Items.Clear(); + BindXian(); + } + + protected void ddlShi_SelectedIndexChanged(object sender, EventArgs e) + { + ddlXian.Items.Clear(); + BindXian(); + } + + protected void btnSubmit_Click(object sender, EventArgs e) + { + labResult.Text = "您选择为:" + ddlSheng.SelectedValue + " | " + ddlShi.SelectedValue + (ddlXian.SelectedValue == "-1" ? "" : " | " + ddlXian.SelectedValue); + } + + } +} diff --git a/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs b/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs index 545ff77..6c8db6d 100644 --- a/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs +++ b/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs @@ -1,87 +1,87 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace FineUI.Examples.data { - - - public partial class shengshixian { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// PageManager1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.PageManager PageManager1; - - /// - /// SimpleForm1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.SimpleForm SimpleForm1; - - /// - /// ddlSheng 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList ddlSheng; - - /// - /// ddlShi 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList ddlShi; - - /// - /// ddlXian 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.DropDownList ddlXian; - - /// - /// btnSubmit 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Button btnSubmit; - - /// - /// labResult 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUI.Label labResult; - } -} +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.data { + + + public partial class shengshixian { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// ddlSheng 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlSheng; + + /// + /// ddlShi 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlShi; + + /// + /// ddlXian 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlXian; + + /// + /// btnSubmit 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSubmit; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI.Examples/extjs_builder/build.bat b/FineUI.Examples/extjs_builder/build.bat index 27e0886..379abcc 100644 --- a/FineUI.Examples/extjs_builder/build.bat +++ b/FineUI.Examples/extjs_builder/build.bat @@ -1,135 +1,137 @@ - - -mkdir ..\extjs -mkdir ..\extjs\src -mkdir ..\extjs\lang -mkdir ..\extjs\res -mkdir ..\extjs\res\images -mkdir ..\extjs\res\css -mkdir ..\extjs\res\ext-theme-access -mkdir ..\extjs\res\ext-theme-access\images -mkdir ..\extjs\res\ext-theme-classic -mkdir ..\extjs\res\ext-theme-classic\images -mkdir ..\extjs\res\ext-theme-gray -mkdir ..\extjs\res\ext-theme-gray\images -mkdir ..\extjs\res\ext-theme-neptune -mkdir ..\extjs\res\ext-theme-neptune\images - - - -xcopy extjs_source_all\resources\ext-theme-access\images ..\extjs\res\ext-theme-access\images /Y /E -xcopy extjs_source_all\resources\ext-theme-classic\images ..\extjs\res\ext-theme-classic\images /Y /E -xcopy extjs_source_all\resources\ext-theme-gray\images ..\extjs\res\ext-theme-gray\images /Y /E -xcopy extjs_source_all\resources\ext-theme-neptune\images ..\extjs\res\ext-theme-neptune\images /Y /E -xcopy res\images ..\extjs\res\images /Y /E -type res\images\s.gif > ..\extjs\res\s.gif - - - - - -type res\FineUI.css > _x -type res\PageLoading.css >> _x -type res\Grid.css >> _x -type res\Tree.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\css\ux.css - -type extjs_source_all\resources\ext-theme-access\ext-theme-access-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\access.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-access\all.css - -type extjs_source_all\resources\ext-theme-classic\ext-theme-classic-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\classic.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-classic\all.css - -type extjs_source_all\resources\ext-theme-gray\ext-theme-gray-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\gray.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-gray\all.css - -type extjs_source_all\resources\ext-theme-neptune\ext-theme-neptune-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\neptune.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-neptune\all.css - - - - - -type extjs_source_all\locale\ext-lang-en.js > _x -type js\lang\fineui-lang-en.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\en.js - -type extjs_source_all\locale\ext-lang-pt_BR.js > _x -type js\lang\fineui-lang-pt_BR.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\pt_BR.js - - -type extjs_source_all\locale\ext-lang-tr.js > _x -type js\lang\fineui-lang-tr.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\tr.js - - -type extjs_source_all\locale\ext-lang-zh_CN.js > _x -type js\lang\fineui-lang-zh_CN.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\zh_CN.js - - -type extjs_source_all\locale\ext-lang-zh_TW.js > _x -type js\lang\fineui-lang-zh_TW.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\zh_TW.js - - -type extjs_source_all\locale\ext-lang-ru.js > _x -type js\lang\fineui-lang-ru.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\ru.js - - - - - - - - - - - - -type extjs_source_all\ext-all.js > _x - -type _x > ..\extjs\ext-part1.js - - -type js\lib\json2.js > _x -type js\lib\Base64.js >> _x -type js\X\X.util.js >> _x -type js\X\X.ajax.js >> _x -type js\X\X.wnd.js >> _x -type js\X\extender.js >> _x -type js\X\X.simulateTree.js >> _x -type js\X\X.format.js >> _x -type js\ux\FormViewport.js >> _x -type js\ux\SimplePagingToolbar.js >> _x -type js\ux\TabCloseMenu.js >> _x -type extjs_source_all\examples\ux\RowExpander.js >> _x - -type _x > ..\extjs\ext-part2.js - - -type ..\extjs\ext-part1.js > _x -type ..\extjs\ext-part2.js >> _x - - -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\ext-all.js - - -ajaxminifier\ajaxminifier -js -evals:immediate extjs_source_all\ext-debug.js -o ..\extjs\ext.js - -type extjs_source_all\ext-theme-neptune.js > ..\extjs\ext-theme-neptune.js - - -del _x /Q - - + + +mkdir ..\extjs +mkdir ..\extjs\src +mkdir ..\extjs\lang +mkdir ..\extjs\res +mkdir ..\extjs\res\images +mkdir ..\extjs\res\css +mkdir ..\extjs\res\ext-theme-access +mkdir ..\extjs\res\ext-theme-access\images +mkdir ..\extjs\res\ext-theme-classic +mkdir ..\extjs\res\ext-theme-classic\images +mkdir ..\extjs\res\ext-theme-gray +mkdir ..\extjs\res\ext-theme-gray\images +mkdir ..\extjs\res\ext-theme-neptune +mkdir ..\extjs\res\ext-theme-neptune\images + + + +xcopy extjs_source_all\resources\ext-theme-access\images ..\extjs\res\ext-theme-access\images /Y /E +xcopy extjs_source_all\resources\ext-theme-classic\images ..\extjs\res\ext-theme-classic\images /Y /E +xcopy extjs_source_all\resources\ext-theme-gray\images ..\extjs\res\ext-theme-gray\images /Y /E +xcopy extjs_source_all\resources\ext-theme-neptune\images ..\extjs\res\ext-theme-neptune\images /Y /E +xcopy res\images ..\extjs\res\images /Y /E +type res\images\s.gif > ..\extjs\res\s.gif + + + + + +type res\FineUI.css > _f +type res\PageLoading.css >> _f +type res\Grid.css >> _f +type res\Tree.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\css\ux.css + +type extjs_source_all\resources\ext-theme-access\ext-theme-access-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\access.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-access\all.css + +type extjs_source_all\resources\ext-theme-classic\ext-theme-classic-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\classic.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-classic\all.css + +type extjs_source_all\resources\ext-theme-gray\ext-theme-gray-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\gray.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-gray\all.css + +type extjs_source_all\resources\ext-theme-neptune\ext-theme-neptune-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\neptune.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-neptune\all.css + + + + + +type extjs_source_all\locale\ext-lang-en.js > _f +type js\lang\f-lang-en.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\en.js + +type extjs_source_all\locale\ext-lang-pt_BR.js > _f +type js\lang\f-lang-pt_BR.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\pt_BR.js + + +type extjs_source_all\locale\ext-lang-tr.js > _f +type js\lang\f-lang-tr.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\tr.js + + +type extjs_source_all\locale\ext-lang-zh_CN.js > _f +type js\lang\f-lang-zh_CN.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_CN.js + + +type extjs_source_all\locale\ext-lang-zh_TW.js > _f +type js\lang\f-lang-zh_TW.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_TW.js + + +type extjs_source_all\locale\ext-lang-ru.js > _f +type js\lang\f-lang-ru.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\ru.js + + + + + + + + + + + + +type extjs_source_all\ext-all.js > _f + +type _f > ..\extjs\ext-part1.js + + +type js\lib\json2.js > _f +type js\lib\Base64.js >> _f +type js\F\F.util.js >> _f +type js\F\F.ajax.js >> _f +type js\F\F.wnd.js >> _f +type js\F\extender.js >> _f +type js\F\F.simulateTree.js >> _f +type js\F\F.format.js >> _f +type js\ux\FormViewport.js >> _f +type js\ux\SimplePagingToolbar.js >> _f +type js\ux\TabCloseMenu.js >> _f +type extjs_source_all\examples\ux\RowExpander.js >> _f + +type _f > ..\extjs\ext-part2.js + + +type ..\extjs\ext-part1.js > _f +type ..\extjs\ext-part2.js >> _f + + +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\ext-all.js + + +ajaxminifier\ajaxminifier -js -evals:immediate extjs_source_all\ext-debug.js -o ..\extjs\ext.js + +type extjs_source_all\ext-theme-neptune.js > ..\extjs\ext-theme-neptune.js + + +type version.txt > ..\extjs\version.txt + +del _f /Q + + diff --git a/FineUI.Examples/extjs_builder/build_only_js_css.bat b/FineUI.Examples/extjs_builder/build_only_js_css.bat index d31adab..9c82061 100644 --- a/FineUI.Examples/extjs_builder/build_only_js_css.bat +++ b/FineUI.Examples/extjs_builder/build_only_js_css.bat @@ -1,122 +1,126 @@ - - -mkdir ..\extjs -mkdir ..\extjs\src -mkdir ..\extjs\lang -mkdir ..\extjs\res -mkdir ..\extjs\res\images -mkdir ..\extjs\res\css -mkdir ..\extjs\res\ext-theme-access -mkdir ..\extjs\res\ext-theme-access\images -mkdir ..\extjs\res\ext-theme-classic -mkdir ..\extjs\res\ext-theme-classic\images -mkdir ..\extjs\res\ext-theme-gray -mkdir ..\extjs\res\ext-theme-gray\images -mkdir ..\extjs\res\ext-theme-neptune -mkdir ..\extjs\res\ext-theme-neptune\images - - -type res\FineUI.css > _x -type res\PageLoading.css >> _x -type res\Grid.css >> _x -type res\Tree.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\css\ux.css - -type extjs_source_all\resources\ext-theme-access\ext-theme-access-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\access.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-access\all.css - -type extjs_source_all\resources\ext-theme-classic\ext-theme-classic-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\classic.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-classic\all.css - -type extjs_source_all\resources\ext-theme-gray\ext-theme-gray-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\gray.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-gray\all.css - -type extjs_source_all\resources\ext-theme-neptune\ext-theme-neptune-all.css > _x -type ..\extjs\res\css\ux.css >> _x -type res\neptune.css >> _x -ajaxminifier\ajaxminifier -css _x -o ..\extjs\res\ext-theme-neptune\all.css - - - - - -type extjs_source_all\locale\ext-lang-en.js > _x -type js\lang\fineui-lang-en.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\en.js - -type extjs_source_all\locale\ext-lang-pt_BR.js > _x -type js\lang\fineui-lang-pt_BR.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\pt_BR.js - - -type extjs_source_all\locale\ext-lang-tr.js > _x -type js\lang\fineui-lang-tr.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\tr.js - - -type extjs_source_all\locale\ext-lang-zh_CN.js > _x -type js\lang\fineui-lang-zh_CN.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\zh_CN.js - - -type extjs_source_all\locale\ext-lang-zh_TW.js > _x -type js\lang\fineui-lang-zh_TW.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\zh_TW.js - - -type extjs_source_all\locale\ext-lang-ru.js > _x -type js\lang\fineui-lang-ru.js >> _x -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\lang\ru.js - - - - - - - - - - - - -type extjs_source_all\ext-all.js > _x - -type _x > ..\extjs\ext-part1.js - - -type js\lib\json2.js > _x -type js\lib\Base64.js >> _x -type js\X\X.util.js >> _x -type js\X\X.ajax.js >> _x -type js\X\X.wnd.js >> _x -type js\X\extender.js >> _x -type js\X\X.simulateTree.js >> _x -type js\X\X.format.js >> _x -type js\ux\FormViewport.js >> _x -type js\ux\SimplePagingToolbar.js >> _x -type js\ux\TabCloseMenu.js >> _x -type extjs_source_all\examples\ux\RowExpander.js >> _x - -type _x > ..\extjs\ext-part2.js - - -type ..\extjs\ext-part1.js > _x -type ..\extjs\ext-part2.js >> _x - - -ajaxminifier\ajaxminifier -js -evals:immediate _x -o ..\extjs\ext-all.js - - -ajaxminifier\ajaxminifier -js -evals:immediate extjs_source_all\ext-debug.js -o ..\extjs\ext.js - -type extjs_source_all\ext-theme-neptune.js > ..\extjs\ext-theme-neptune.js - - -del _x /Q - + + +mkdir ..\extjs +mkdir ..\extjs\src +mkdir ..\extjs\lang +mkdir ..\extjs\res +mkdir ..\extjs\res\images +mkdir ..\extjs\res\css +mkdir ..\extjs\res\ext-theme-access +mkdir ..\extjs\res\ext-theme-access\images +mkdir ..\extjs\res\ext-theme-classic +mkdir ..\extjs\res\ext-theme-classic\images +mkdir ..\extjs\res\ext-theme-gray +mkdir ..\extjs\res\ext-theme-gray\images +mkdir ..\extjs\res\ext-theme-neptune +mkdir ..\extjs\res\ext-theme-neptune\images + + + + +type res\FineUI.css > _f +type res\PageLoading.css >> _f +type res\Grid.css >> _f +type res\Tree.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\css\ux.css + +type extjs_source_all\resources\ext-theme-access\ext-theme-access-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\access.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-access\all.css + +type extjs_source_all\resources\ext-theme-classic\ext-theme-classic-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\classic.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-classic\all.css + +type extjs_source_all\resources\ext-theme-gray\ext-theme-gray-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\gray.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-gray\all.css + +type extjs_source_all\resources\ext-theme-neptune\ext-theme-neptune-all.css > _f +type ..\extjs\res\css\ux.css >> _f +type res\neptune.css >> _f +ajaxminifier\ajaxminifier -css _f -o ..\extjs\res\ext-theme-neptune\all.css + + + + + +type extjs_source_all\locale\ext-lang-en.js > _f +type js\lang\f-lang-en.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\en.js + +type extjs_source_all\locale\ext-lang-pt_BR.js > _f +type js\lang\f-lang-pt_BR.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\pt_BR.js + + +type extjs_source_all\locale\ext-lang-tr.js > _f +type js\lang\f-lang-tr.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\tr.js + + +type extjs_source_all\locale\ext-lang-zh_CN.js > _f +type js\lang\f-lang-zh_CN.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_CN.js + + +type extjs_source_all\locale\ext-lang-zh_TW.js > _f +type js\lang\f-lang-zh_TW.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_TW.js + + +type extjs_source_all\locale\ext-lang-ru.js > _f +type js\lang\f-lang-ru.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\ru.js + + + + + + + + + + + + +type extjs_source_all\ext-all.js > _f + +type _f > ..\extjs\ext-part1.js + + +type js\lib\json2.js > _f +type js\lib\Base64.js >> _f +type js\F\F.util.js >> _f +type js\F\F.ajax.js >> _f +type js\F\F.wnd.js >> _f +type js\F\extender.js >> _f +type js\F\F.simulateTree.js >> _f +type js\F\F.format.js >> _f +type js\ux\FormViewport.js >> _f +type js\ux\SimplePagingToolbar.js >> _f +type js\ux\TabCloseMenu.js >> _f +type extjs_source_all\examples\ux\RowExpander.js >> _f + +type _f > ..\extjs\ext-part2.js + + +type ..\extjs\ext-part1.js > _f +type ..\extjs\ext-part2.js >> _f + + +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\ext-all.js + + +ajaxminifier\ajaxminifier -js -evals:immediate extjs_source_all\ext-debug.js -o ..\extjs\ext.js + +type extjs_source_all\ext-theme-neptune.js > ..\extjs\ext-theme-neptune.js + + +del _f /Q + + + diff --git a/FineUI.Examples/extjs_builder/js/F/F.ajax.js b/FineUI.Examples/extjs_builder/js/F/F.ajax.js new file mode 100644 index 0000000..e7083c6 --- /dev/null +++ b/FineUI.Examples/extjs_builder/js/F/F.ajax.js @@ -0,0 +1,522 @@ + +(function () { + + F.ajax = { + + timeoutErrorMsg: "Request timeout, please refresh the page and try again!", + errorMsg: "Error! {0} ({1})", + errorWindow: null, + + hookPostBack: function () { + if (typeof (__doPostBack) != 'undefined') { + __doPostBack = f__doPostBack; + } + } + + }; + + function enableAjax() { + if (typeof (F.control_enable_ajax) === 'undefined') { + return F.global_enable_ajax; + } + return F.control_enable_ajax; + } + + function enableAjaxLoading() { + if (typeof (F.control_enable_ajax_loading) === 'undefined') { + return F.global_enable_ajax_loading; + } + return F.control_enable_ajax_loading; + } + + function ajaxLoadingType() { + if (typeof (F.control_ajax_loading_type) === 'undefined') { + return F.global_ajax_loading_type; + } + return F.control_ajax_loading_type; + } + + + function f__doPostBack_internal() { + //if (typeof (F.util.beforeAjaxPostBackScript) === 'function') { + // F.util.beforeAjaxPostBackScript(); + //} + F.util.triggerBeforeAjax(); + + + function ajaxSuccess(data, viewStateBeforeAJAX) { + /* + try { + new Function(data)(); + } catch (e) { + createErrorWindow({ + statusText: "Execute JavaScript Exception", + status: -1, + responseText: util.htmlEncode(data) + }); + } + */ + new Function('__VIEWSTATE', data)(viewStateBeforeAJAX); + + // 有可能响应返回后即关闭本窗体 + if (F && F.util) { + F.util.triggerAjaxReady(); + } + } + + // Ext.encode will convert Chinese characters. Ext.encode({a:"你好"}) => '{"a":"\u4f60\u597d"}' + // We will include the official JSON object from http://json.org/ + // 现在还是用的 Ext.encode,在 IETester的 IE8下 JSON.stringify 生成的中文是\u9009\u9879形式。 + //F.util.setHiddenFieldValue('F_STATE', encodeURIComponent(JSON.stringify(getFState()))); + + var fstate = Ext.encode(getFState()); + if (Ext.isIE6 || Ext.isIE7) { + F.util.setHiddenFieldValue('F_STATE_URI', 'true'); + fstate = encodeURIComponent(fstate); + } else { + fstate = Base64.encode(fstate); + } + F.util.setHiddenFieldValue('F_STATE', fstate); + //F.util.setHiddenFieldValue('F_STATE', encodeURIComponent(Ext.encode(getFState()))); + if (!enableAjax()) { + // 当前请求结束后必须重置 F.control_enable_ajax + F.control_enable_ajax = undefined; + F.util.setHiddenFieldValue('F_AJAX', 'false'); + theForm.submit(); + } else { + // 当前请求结束后必须重置 F.control_enable_ajax + F.control_enable_ajax = undefined; + F.util.setHiddenFieldValue('F_AJAX', 'true'); + var url = document.location.href; + var urlHashIndex = url.indexOf('#'); + if (urlHashIndex >= 0) { + url = url.substring(0, urlHashIndex); + } + + var viewStateBeforeAJAX = F.util.getHiddenFieldValue('__VIEWSTATE'); + + Ext.Ajax.request({ + form: theForm.id, + url: url, + isUpload: F.form_upload_file, + //params: serializeForm(theForm) + '&X_AJAX=true', + success: function (data) { + var scripts = data.responseText; + + + if (scripts && F.form_upload_file) { + // 文件上传时,输出内容经过encodeURIComponent编码(在ResponseFilter中的Close函数中) + //scripts = scripts.replace(/<\/?pre[^>]*>/ig, ''); + scripts = decodeURIComponent(scripts); + } + + + // 因为这里调用后(可能会关闭当前页面),extjs还有代码要执行(Ext.callback...),所以这里要延迟一下,等 extjs 代码执行完毕后再执行这里代码 + window.setTimeout(function () { + ajaxSuccess(scripts, viewStateBeforeAJAX); + /* + if (scripts) { + if (F.form_upload_file) { + // 文件上传时,输出内容经过encodeURIComponent编码(在ResponseFilter中的Close函数中) + //scripts = scripts.replace(/<\/?pre[^>]*>/ig, ''); + scripts = decodeURIComponent(scripts); + } + + + new Function(scripts)(); + + + } + // 有可能响应返回后即关闭本窗体 + if (F && F.util) { + F.util.triggerAjaxReady(); + } + */ + }, 100); + }, + failure: function (data) { + var lastDisabledButtonId = F.util.getHiddenFieldValue('F_TARGET'); + if (lastDisabledButtonId) { + F.enable(lastDisabledButtonId); + } + createErrorWindow(data); + }, + callback: function (options, success, response) { + // AJAX结束时需要清空此字段,否则下一次的type=submit提交(ASP.NET回发方式之一)会被误认为是AJAX提交 + if (F && F.util) { + F.util.setHiddenFieldValue('F_AJAX', 'false'); + } + } + }); + } + } + + + // 如果启用 Ajax,则所有对 __doPostBack 的调用都会到这里来 + function f__doPostBack(eventTarget, eventArgument) { + // 回发页面之前延时 100 毫秒,确保页面上的操作完成(比如选中复选框的动作) + window.setTimeout(function () { + // theForm variable will always exist, because we invoke the GetPostBackEventReference in PageManager. + if (!theForm.onsubmit || (theForm.onsubmit() != false)) { + theForm.__EVENTTARGET.value = eventTarget; + theForm.__EVENTARGUMENT.value = eventArgument; + + f__doPostBack_internal(); + } + }, 100); + } + + + function writeContentToIFrame(iframe, content) { + // http://stackoverflow.com/questions/1477547/getelementbyid-contentdocument-error-in-ie + // contentWindow is always there. + if (iframe) { + var doc = iframe.contentWindow.document; + if (doc) { + doc.open(); + doc.write(content); + doc.close(); + } + } + } + + // 创建出错窗口 + function createErrorWindow(data) { + // 如果是请求超时错误,则弹出简单提醒对话框 + if (data.isTimeout) { + F.util.alert(F.ajax.timeoutErrorMsg); + return; + } + + // 如果响应正文为空,则弹出简单提醒对话框 + if (!data.responseText) { + F.util.alert(Ext.String.format(F.ajax.errorMsg, data.statusText, data.status)); + return; + } + + if (!F.ajax.errorWindow) { + F.ajax.errorWindow = Ext.create('Ext.window.Window', { + id: "FINEUI_ERROR", + renderTo: window.body, + width: 550, + height: 350, + border: true, + animCollapse: true, + collapsible: false, + collapsed: false, + closeAction: "hide", + plain: false, + modal: true, + draggable: true, + minimizable: false, + minHeight: 100, + minWidth: 200, + resizable: true, + maximizable: true, + closable: true + }); + } + + F.ajax.errorWindow.show(); + F.ajax.errorWindow.body.dom.innerHTML = F.wnd.createIFrameHtml('about:blank', 'FINEUI_ERROR'); + F.ajax.errorWindow.setTitle(Ext.String.format(F.ajax.errorMsg, data.statusText, data.status)); + writeContentToIFrame(F.ajax.errorWindow.body.query('iframe')[0], data.responseText); + } + + // 序列化表单为 URL 编码字符串,除去 的按钮 + var extjsSerializeForm = Ext.Element.serializeForm; + Ext.Element.serializeForm = function (form) { + var el, originalStr = extjsSerializeForm(form); + for (var i = 0; i < form.elements.length; i++) { + el = form.elements[i]; + if (el.type === 'submit') { + var submitStr = encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value); + if (originalStr.indexOf(submitStr) == 0) { + originalStr = originalStr.replace(submitStr, ''); + } else { + originalStr = originalStr.replace('&' + submitStr, ''); + } + } + } + return originalStr; + }; + + + function getFState() { + var state = {}; + Ext.ComponentManager.each(function (key, cmp) { + if (cmp.isXType) { + // f_props store the properties which has been changed on server-side or client-side. + // Every FineUI control should has this property. + var fstate = cmp['f_state']; + if (fstate && Ext.isObject(fstate)) { + var cmpState = getFStateViaCmp(cmp, fstate); + if (!F.util.isObjectEmpty(cmpState)) { + state[cmp.id] = cmpState; + } + } + } + }); + return state; + } + + F.ajax.getFState = getFState; + + function getFStateViaCmp(cmp, fstate) { + var state = {}; + + Ext.apply(state, fstate); + + function saveInHiddenField(property, currentValue) { + // Save this client-changed property in a form hidden field. + F.util.setHiddenFieldValue(cmp.id + '_' + property, currentValue); + } + function removeHiddenField(property) { + F.util.removeHiddenField(cmp.id + '_' + property); + } + + // 如果存在Gzip压缩的属性,就删除原来的属性 + function resolveGZProperty(property) { + var gzProperty = property + '_GZ'; + if (state[gzProperty]) { + delete state[property]; + } else { + delete state[gzProperty]; + } + } + + + + // 有些属性可以在客户端改变,因此需要在每个请求之前计算 + if (cmp.isXType('menucheckitem')) { + saveInHiddenField('Checked', cmp.checked); + } + + if (cmp.isXType('checkbox')) { + // 包含RadioButton + saveInHiddenField('Checked', cmp.getValue()); + } + + if (cmp.isXType('checkboxgroup')) { + var selected = cmp.f_getSelectedValues(); + if (selected.length > 0) { + saveInHiddenField('SelectedValueArray', selected.join(',')); + } else { + removeHiddenField('SelectedValueArray'); + } + } + + if (cmp.isXType('panel') || cmp.isXType('fieldset')) { + saveInHiddenField('Collapsed', cmp.f_isCollapsed()); + } + + if (cmp.isXType('datepicker')) { + saveInHiddenField('SelectedDate', Ext.Date.format(cmp.getValue(), cmp.initialConfig.format)); + } + + if (cmp.isXType('button')) { + if (cmp.initialConfig.enableToggle) { + saveInHiddenField('Pressed', cmp.pressed); + } + } + + if (cmp.isXType('grid')) { + + //if (cmp.getPlugin(cmp.id + '_celledit')) { + if(cmp.f_cellEditing) { + // 可编辑单元格的表格 + // 选中单元格 + saveInHiddenField('SelectedCell', cmp.f_getSelectedCell().join(',')); + + //// 新增行 + //var newAddedRows = cmp.f_getNewAddedRows(); + //if (newAddedRows.length > 0) { + // saveInHiddenField('NewAddedRows', newAddedRows.join(',')); + //} else { + // removeHiddenField('NewAddedRows'); + //} + + // 修改的数据 + var modifiedData = cmp.f_getModifiedData(); + if (modifiedData.length > 0) { + saveInHiddenField('ModifiedData', Ext.encode(modifiedData)); + } else { + removeHiddenField('ModifiedData'); + } + + // 删除的行索引列表 + var deletedRows = cmp.f_getDeletedRows(); + if (deletedRows.length > 0) { + saveInHiddenField('DeletedRows', deletedRows.join(',')); + } else { + removeHiddenField('DeletedRows'); + } + + } else { + // 普通的表格 + // 选中行索引列表 + saveInHiddenField('SelectedRowIndexArray', cmp.f_getSelectedRows().join(',')); + } + + + // 隐藏的列索引列表 + var gridHiddenColumns = cmp.f_getHiddenColumns(); + if (gridHiddenColumns.length > 0) { + saveInHiddenField('HiddenColumns', gridHiddenColumns.join(',')); + } else { + removeHiddenField('HiddenColumns'); + } + + // 目前States仅用于CheckBoxField + var gridStates = cmp.f_getStates(); + if (gridStates.length > 0) { + saveInHiddenField('States', Ext.encode(gridStates)); + } else { + removeHiddenField('States'); + } + + // 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + resolveGZProperty('F_Rows'); + } + + if (cmp.isXType('combo') || cmp.isXType('checkboxgroup') || cmp.isXType('radiogroup')) { + + // 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + resolveGZProperty('F_Items'); + } + + if (cmp.isXType('field')) { + + // 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + resolveGZProperty('Text'); + } + + if (cmp.isXType('treepanel')) { + saveInHiddenField('ExpandedNodes', cmp.f_getExpandedNodes(cmp.getRootNode().childNodes).join(',')); + saveInHiddenField('CheckedNodes', cmp.f_getCheckedNodes().join(',')); + saveInHiddenField('SelectedNodeIDArray', cmp.f_getSelectedNodes().join(',')); + + // 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + resolveGZProperty('F_Nodes'); + } + + if (cmp.isXType('tabpanel')) { + saveInHiddenField('ActiveTabIndex', cmp.f_getActiveTabIndex()); + } + + if (cmp.isXType('panel') && cmp.getLayout().type === 'accordion') { + saveInHiddenField('ActivePaneIndex', cmp.f_getActiveIndex()); + } + + if (cmp['f_type'] && cmp['f_type'] === 'tab') { + saveInHiddenField('Hidden', cmp.tab.isHidden()); + } + + return state; + } + + + + // 显示“正在载入...”的提示信息 + function _showAjaxLoading(ajaxLoadingType) { + if (_requestCount > 0) { + + if (ajaxLoadingType === "default") { + F.ajaxLoadingDefault.setStyle('left', (Ext.getBody().getWidth() - F.ajaxLoadingDefault.getWidth()) / 2 + 'px'); + F.ajaxLoadingDefault.show(); + } else { + F.ajaxLoadingMask.show(); + } + + } + } + + // 隐藏“正在载入...”的提示信息 + function _hideAjaxLoading(ajaxLoadingType) { + if (_requestCount <= 0) { + _requestCount = 0; + + if (ajaxLoadingType === "default") { + F.ajaxLoadingDefault.hide(); + } else { + F.ajaxLoadingMask.hide(); + } + + } + } + + // 当前 Ajax 的并发请求数 + var _requestCount = 0; + + // 发起 Ajax 请求之前事件处理 + Ext.Ajax.on('beforerequest', function (conn, options) { + _requestCount++; + + if (!enableAjaxLoading()) { + // Do nothing + } else { + Ext.defer(_showAjaxLoading, 50, window, [ajaxLoadingType()]); + } + }); + + // Ajax 请求结束 + Ext.Ajax.on('requestcomplete', function (conn, options) { + _requestCount--; + + if (!enableAjaxLoading()) { + // ... + } else { + Ext.defer(_hideAjaxLoading, 0, window, [ajaxLoadingType()]); + } + F.control_enable_ajax_loading = undefined; + F.control_ajax_loading_type = undefined; + }); + + // Ajax 请求发生异常 + Ext.Ajax.on('requestexception', function (conn, options) { + _requestCount--; + + if (!enableAjaxLoading()) { + // ... + } else { + Ext.defer(_hideAjaxLoading, 0, window, [ajaxLoadingType()]); + } + F.control_enable_ajax_loading = undefined; + F.control_ajax_loading_type = undefined; + }); + + + + + + + // // 不适用于所有Extjs控件(比如Toolbar中放置按钮,这个按钮就没有ownerCt对象) + // // 更新一个Javascript对象 + // updateObject: function(obj, newObjFunction, renderImmediately) { + // var id = obj.id; + // if (Ext.type(renderImmediately) == 'boolean' && !renderImmediately) { + + // // 1.取得父容器 + // var owner = obj.ownerCt; + // // 2.本控件在父容器的位置 + // var insertIndex = owner.items.indexOf(obj); + // // 3.从父容器中销毁此控件 + // owner.remove(obj); + // // 4.创建新的控件 + // newObjFunction(); + // // 5.将新的控件添加到删除的位置 + // owner.insert(insertIndex, Ext.getCmp(id)); + // // 6.父容器重新布局 + // owner.doLayout(); + + // } + // else { + + // // 1.销毁此控件 + // obj.destroy(); + // // 2.新建此控件 + // newObjFunction(); + // } + // } + +})(); \ No newline at end of file diff --git a/FineUI.Examples/extjs_builder/js/F/F.format.js b/FineUI.Examples/extjs_builder/js/F/F.format.js new file mode 100644 index 0000000..2453296 --- /dev/null +++ b/FineUI.Examples/extjs_builder/js/F/F.format.js @@ -0,0 +1,45 @@ + +(function () { + + var ExtF = Ext.util.Format; + + F.format = { + + capitalize: ExtF.capitalize, + + dateRenderer: ExtF.dateRenderer, + + ellipsisRenderer: function (length) { + return function (value) { + return ExtF.ellipsis(value, length, false); + }; + }, + + fileSize: ExtF.fileSize, + + htmlEncode: ExtF.htmlEncode, + + htmlDecode: ExtF.htmlDecode, + + lowercase: ExtF.lowercase, + + uppercase: ExtF.uppercase, + + nl2br: ExtF.nl2br, + + //number: ExtF.numberRenderer, + + stripScripts: ExtF.stripScripts, + + stripTags: ExtF.stripTags, + + trim: ExtF.trim + + //usMoney: ExtF.usMoney + + + + }; + + +})(); \ No newline at end of file diff --git a/FineUI.Examples/extjs_builder/js/F/F.simulateTree.js b/FineUI.Examples/extjs_builder/js/F/F.simulateTree.js new file mode 100644 index 0000000..d7b682e --- /dev/null +++ b/FineUI.Examples/extjs_builder/js/F/F.simulateTree.js @@ -0,0 +1,118 @@ + +(function() { + + function getParentIndex(levels, level, index) { + if (level > 0) { + for (var i = index - 1; i >= 0; i--) { + if (levels[i] == level - 1) { + return i; + } + } + } + return -1; + } + + function hasLittleBrother(levels, level, index) { + if (index < levels.length - 1) { + for (var i = index + 1; i < levels.length; i++) { + if (levels[i] == level) { + return true; + } else if (levels[i] < level) { + return false; + } + } + } + return false; + } + + function getParentTempData(tempdatas, tempdata, prefixIndex) { + for (var i = 0; i < prefixIndex - 1; i++) { + tempdata = tempdatas[tempdata.parentIndex]; + } + return tempdata; + } + + function getPrefixInner(tempdatas, tempdata, prefixIndex) { + // If level = 3, then prefixIndex array will be: [3, 2, 1] + // prefixIndex === 1 will always present the nearest prefix next to the Text. + if (prefixIndex === 1) { + if (tempdata.littleBrother) { + return '
'; + } + else { + return '
'; + } + } else { + var parentdata = getParentTempData(tempdatas, tempdata, prefixIndex); + if (parentdata.littleBrother) { + return '
'; + } + else { + return '
'; + } + } + return ""; + } + + function getPrefix(tempdatas, index) { + var tempdata = tempdatas[index]; + var level = tempdata.level; + var prefix = []; + for (var i = level; i > 0; i--) { + prefix.push(getPrefixInner(tempdatas, tempdata, i)); + } + return prefix.join(''); + } + + F.simulateTree = { + + transform: function(datas) { + if (!datas.length || datas[0].length < 4) { + return datas; + } + + //// store: new Ext.data.ArrayStore({ fields: ['value', 'text', 'enabled', 'prefix'] }) + //// Sample data: + //[ + // ["0", "jQuery", 0, 0], + // ["1", "Core", 0, 1], + // ["2", "Selectors", 0, 1], + // ["3", "Basic Filters", 1, 2], + // ["4", "Content Filters", 1, 2], + // ["41", "Contains", 1, 3], + // ["5", "Attribute Filters", 1, 2], + // ["6", "Traversing", 1, 1], + // ["7", "Filtering", 1, 2], + // ["8", "Finding", 1, 2], + // ["9", "Events", 0, 1], + // ["10", "Page Load", 1, 2], + // ["11", "Event Handling", 1, 2], + // ["12", "Interaction Helpers", 1, 2], + // ["13", "Ajax", 1, 1] + //] + var levels = []; + Ext.Array.each(datas, function (data, index) { + levels.push(data[3]); + }); + + var tempdatas = []; + Ext.Array.each(levels, function (level, index) { + tempdatas.push({ + 'level': level, + 'parentIndex': getParentIndex(levels, level, index), + 'littleBrother': hasLittleBrother(levels, level, index) + }); + }); + + var newdatas = []; + Ext.Array.each(datas, function (data, index) { + newdatas.push([data[0], data[1], data[2], getPrefix(tempdatas, index)]); + }); + return newdatas; + + } + + + }; + +})(); \ No newline at end of file diff --git a/FineUI.Examples/extjs_builder/js/F/F.util.js b/FineUI.Examples/extjs_builder/js/F/F.util.js new file mode 100644 index 0000000..72a219a --- /dev/null +++ b/FineUI.Examples/extjs_builder/js/F/F.util.js @@ -0,0 +1,1307 @@ + +// FineUI应用程序域 +var F = function (cmpName) { + return Ext.getCmp(cmpName); +}; + +F.state = function (cmp, state) { + F.util.setFState(cmp, state); +}; + +F.enable = function (id) { + F.util.enableSubmitControl(id); +}; + +F.disable = function (id) { + F.util.disableSubmitControl(id); +}; + +F.target = function (target) { + return F.util.getTargetWindow(target); +}; + +F.alert = function () { + F.util.alert.apply(window, arguments); +}; + +F.init = function () { + F.util.init.apply(window, arguments); +}; + +F.load = function () { + F.util.load.apply(window, arguments); +}; + +F.ready = function () { + F.util.ready.apply(window, arguments); +}; + +F.ajaxReady = function () { + F.util.ajaxReady.apply(window, arguments); + //if (typeof (onAjaxReady) == 'function') { + // onAjaxReady(); + //} +}; + +F.beforeAjax = function () { + F.util.beforeAjax.apply(window, arguments); +}; + +F.stop = function () { + var event = arguments.callee.caller.arguments[0] || window.event; + F.util.stopEventPropagation(event); +}; + +F.confirm = function () { + F.util.confirm.apply(null, arguments); +}; + +F.toggle = function (el, className) { + Ext.get(el).toggleCls(className); +}; + +F.fieldValue = function (cmp) { + return F.util.getFormFieldValue(cmp); +}; + +F.customEvent = function (argument, validate) { + var pmv = F.pagemanager.validate; + if (validate && pmv) { + if (!F.util.validForms(pmv.forms, pmv.target, pmv.messagebox)) { + return false; + } + } + __doPostBack(F.pagemanager.name, argument); +}; + +F.getHidden = function () { + return F.util.getHiddenFieldValue.apply(window, arguments); +}; +F.setHidden = function () { + return F.util.setHiddenFieldValue.apply(window, arguments); +}; + +F.addCSS = function () { + F.util.addCSS.apply(window, arguments); +}; + + +// 更新EventValidation的值 +F.eventValidation = function (newValue) { + F.setHidden("__EVENTVALIDATION", newValue); +}; + + +// 更新ViewState的值 +F.viewState = function (viewStateBeforeAJAX, newValue, startIndex) { + var viewStateHiddenFiledId = '__VIEWSTATE'; + + var oldValue = F.getHidden(viewStateHiddenFiledId); + var viewStateChanged = false; + if (oldValue !== viewStateBeforeAJAX) { + viewStateChanged = true; + } + + if (typeof (newValue) === 'undefined') { + // AJAX过程中ViewState值没变化 + if (viewStateChanged) { + F.setHidden(viewStateHiddenFiledId, viewStateBeforeAJAX); + } + } else { + // AJAX过程中ViewState值有变化 + if (Ext.type(startIndex) === 'number' && startIndex > 0) { + // 只返回startIndex之后的内容 + if (viewStateChanged) { + // 无法处理! + return false; + } else { + F.setHidden(viewStateHiddenFiledId, oldValue.substr(0, startIndex) + newValue); + } + } else { + // 返回完整的ViewState + F.setHidden(viewStateHiddenFiledId, newValue); + } + } + + // 更新成功! + return true; +}; + +// cookie('theme'); +// cookie('theme', 'gray'); +// cookie('theme', 'gray', { 'expires': 3 }); +// expires: 天 +// 新增 或者 修改Cookie +F.cookie = function (key, value, options) { + if (typeof(value) === 'undefined') { + var cookies = document.cookie ? document.cookie.split('; ') : []; + var result = key ? '' : {}; + Ext.Array.each(cookies, function (cookie, index) { + var parts = cookie.split('='); + var partName = decodeURIComponent(Ext.String.trim(parts[0])); + var partValue = decodeURIComponent(Ext.String.trim(parts[1])); + + if (key) { + if (key === partName) { + result = partValue; + return false; + } + } else { + result[partName] = partValue; + } + }); + return result; + } else { + // Set cookie + options = Ext.apply(options || {}, { + path: '/' + }); + + var expTime; + if (typeof (options.expires) === 'number') { + expTime = new Date(); + expTime.setTime(expTime.getTime() + options.expires * 24 * 60 * 60 * 1000); + } + + document.cookie = [ + encodeURIComponent(key), '=', encodeURIComponent(value), + options.expires ? '; expires=' + expTime.toUTCString() : '', + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join(''); + } +}; + +// 删除Cookie +F.removeCookie = function (key, options) { + options = Ext.apply(options || {}, { + path: '/', + 'expires': -1 + }); + + F.cookie(key, '', options); +}; + + +Ext.onReady(function () { + + F.util.triggerLoad(); + + + F.util.triggerReady(); + + + F.util.hidePageLoading(); + +}); + +(function () { + + // 遍历定义了 renderTo 属性的对象 + // callback: 'return false' to prevent loop continue + function resolveRenderToObj(callback) { + Ext.ComponentManager.each(function (key, cmp) { + if (cmp.isXType && cmp.renderTo) { + + var result = callback.apply(cmp, [cmp]); + if (result === false) { + return false; // break + } + + } + }); + } + + + // 能否访问 iframe 中的 window.F 对象 + function canIFrameWindowAccessed(iframeWnd) { + + // 访问 iframeWnd.F 时,可能出现错误 Blocked a frame with origin "http://fineui.com/" from accessing a cross-origin frame. + // Blocked:这个问题出现在 http://fineui.com/ 页面加载一个 http://baidu.com/ 的 iframe 页面 + try { + iframeWnd.F; + } catch (e) { + return false; + } + + if (!iframeWnd.F) { + return false; + } + + return true; + } + + + // FineUI常用函数域(Utility) + F.util = { + + alertTitle: "Alert Dialog", + confirmTitle: "Confirm Dialog", + formAlertMsg: "Please provide valid value for {0}!", + formAlertTitle: "Form Invalid", + loading: "Loading...", + + // 下拉列表的模板 + ddlTPL: '
x-boundlist-item-disabled">{prefix}{text}
', + + // 初始化 + init: function (options) { // msgTarget, labelWidth, labelSeparator, blankImageUrl, enableAjaxLoading, ajaxLoadingType, enableAjax, themeName, formChangeConfirm) { + + Ext.apply(F, options, { + language: 'zh_CN', + msgTarget: 'side', + labelWidth: 100, + labelSeparator: ':', + //blankImageUrl: '', + enableAjaxLoading: true, + ajaxLoadingType: 'default', + enableAjax: true, + theme: 'neptune', + formChangeConfirm: false, + ajaxTimeout: 120 + }); + + + // Ext.QuickTips.init(true); 在原生的IE7(非IE8下的IE7模式)会有问题 + // 表现为iframe中的页面出现滚动条时,页面上的所有按钮都不能点击了。 + // 测试例子在:aspnet/test.aspx + //Ext.QuickTips.init(false); + Ext.tip.QuickTipManager.init(); + + F.ajax.hookPostBack(); + + F.global_enable_ajax = F.enableAjax; + + F.global_enable_ajax_loading = F.enableAjaxLoading; + F.global_ajax_loading_type = F.ajaxLoadingType; + + // 添加Ajax Loading提示节点 + F.ajaxLoadingDefault = Ext.get(F.util.appendLoadingNode()); + F.ajaxLoadingMask = Ext.create('Ext.LoadMask', Ext.getBody(), { msg: F.util.loading }); + + + F.form_upload_file = false; + F.global_disable_ajax = false; + //F.x_window_manager = new Ext.WindowManager(); + //F.x_window_manager.zseed = 6000; + + F.util.setHiddenFieldValue('F_CHANGED', 'false'); + document.forms[0].autocomplete = 'off'; + + Ext.getBody().addCls('f-body'); + + Ext.Ajax.timeout = F.ajaxTimeout * 1000; + + // 向document.body添加主题类 + if (F.theme) { + Ext.getBody().addCls('f-theme-' + F.theme); + } + + if (Ext.form.field) { + var fieldPro = Ext.form.field.Base.prototype; + fieldPro.msgTarget = F.msgTarget; + fieldPro.labelWidth = F.labelWidth; + fieldPro.labelSeparator = F.labelSeparator; + fieldPro.autoFitErrors = true; + } + if (Ext.form.CheckboxGroup) { + var checkboxgroupPro = Ext.form.CheckboxGroup.prototype; + checkboxgroupPro.msgTarget = F.msgTarget; + checkboxgroupPro.labelWidth = F.labelWidth; + checkboxgroupPro.labelSeparator = F.labelSeparator; + checkboxgroupPro.autoFitErrors = true; + } + + F.beforeunloadCheck = true; + // 启用表单改变确认对话框 + if (F.formChangeConfirm) { + // 下面这个方法在 Chrome、 Firefox下无效 + //Ext.EventManager.on(window, 'beforeunload', function (event) { + window.onbeforeunload = function () { + // 允许关闭页面前提示,并且表单改变 + if (F.beforeunloadCheck && F.util.formChanged()) { + return F.wnd.formChangeConfirmMsg; + } + }; + } + + //if (enableBigFont) { + // Ext.getBody().addCls('bigfont'); + //} + + /* + // IE6&7不支持,IE8以上支持"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" + if (Ext.isIE6 || Ext.isIE7) { + Ext.BLANK_IMAGE_URL = F.blankImageUrl; + } + */ + + // Submit + F.ready(function () { + if (F.submitbutton) { + Ext.ComponentManager.each(function (key, cmp) { + if (cmp.isXType && cmp.renderTo) { + if (cmp.isXType('tooltip')) { + return true; // continue + } + + if (cmp.isXType('panel') || cmp.isXType('formviewport')) { + F.util.registerPanelEnterKey(cmp); + } + } + }); + } + + }); + + + + // 为了防止【页面中只有一个input[type=text],则回车会提交表单】的问题,现在页面上创建一个input[type=text]的空元素 + F.util.appendFormNode(''); + + }, + + _readyList: [], + _ajaxReadyList: [], + _beforeAjaxList: [], + _loadList: [], + + ready: function (callback) { + F.util._readyList.push(callback); + }, + triggerReady: function () { + Ext.Array.each(F.util._readyList, function (item, index) { + item.call(window); + }); + }, + + + ajaxReady: function (callback) { + F.util._ajaxReadyList.push(callback); + }, + triggerAjaxReady: function () { + Ext.Array.each(F.util._ajaxReadyList, function (item, index) { + item.call(window); + }); + }, + + beforeAjax: function (callback) { + F.util._beforeAjaxList.push(callback); + }, + triggerBeforeAjax: function () { + Ext.Array.each(F.util._beforeAjaxList, function (item, index) { + item.call(window); + }); + }, + + + load: function (callback) { + F.util._loadList.push(callback); + }, + triggerLoad: function () { + Ext.Array.each(F.util._loadList, function (item, index) { + item.call(window); + }); + }, + + setFState: function (cmp, state) { + if (!cmp || !cmp['f_state']) { + return; + } + + var oldValue, newValue, el; + // 如果state中包含CssClass,也就是在服务器端修改了CssClass属性,则需要首先删除原来的CssClass属性。 + if (typeof (state['CssClass']) !== 'undefined') { + newValue = state['CssClass']; + oldValue = cmp['f_state']['CssClass']; + if (!oldValue) { + oldValue = cmp.initialConfig.cls; + } + el = cmp.el; + el.removeCls(oldValue); + el.addCls(newValue); + } + + //if (typeof (state['FormItemClass']) !== 'undefined') { + // newValue = state['FormItemClass']; + // oldValue = cmp['f_state']['FormItemClass']; + // if (!oldValue) { + // oldValue = cmp.initialConfig.itemCls; + // } + // // Search for max 10 depth. + // el = cmp.el.findParent('.x-form-item', 10, true); + // el.removeCls(oldValue); + // el.addCls(newValue); + //} + + Ext.apply(cmp['f_state'], state); + + }, + + stopEventPropagation: function (event) { + event = event || window.event; + if (typeof (event.cancelBubble) === 'boolean') { + event.cancelBubble = true; + } else { + event.stopPropagation(); + } + }, + + // 绑定函数的上下文 + bind: function (fn, scope) { + return function () { + return fn.apply(scope, arguments); + }; + }, + + // 在页面上查找id为findId的节点,替换成replaceHtml + replace: function (findId, replaceHtml) { + // 在findId外面添加一个DIV层,然后更新此wrapper的InnerHTML + var findedControl = Ext.get(findId); + if (findedControl) { + var wrapper = findedControl.wrap().update(replaceHtml); + // 将新增的节点移到wrapper上面 + wrapper.first().insertBefore(wrapper); + // 然后删除wrapper + wrapper.remove(); + } + }, + + // 隐藏PageLoading节点 + hidePageLoading: function () { + /* + if (fadeOut) { + Ext.get("loading").remove(); + Ext.get("loading-mask").fadeOut({ remove: true }); + } + else { + Ext.get("loading").remove(); + Ext.get("loading-mask").remove(); + } + */ + + Ext.get("loading").hide(); + Ext.get("loading-mask").hide(); + }, + + + // 去掉字符串中的html标签 + stripHtmlTags: function (str) { + return str.replace(/<[^>]*>/g, ""); + }, + + + // 弹出Alert对话框 + alert: function (msg, title, icon, okscript) { + title = title || F.util.alertTitle; + icon = icon || Ext.MessageBox.INFO; + Ext.MessageBox.show({ + title: title, + msg: msg, + buttons: Ext.MessageBox.OK, + icon: icon, + fn: function (buttonId) { + if (buttonId === "ok") { + if (typeof (okscript) === "function") { + okscript.call(window); + } + } + } + }); + }, + + // 向页面添加Loading...节点 + appendLoadingNode: function () { + return F.util.appendFormNode({ tag: 'div', id: 'f_ajax_loading', cls: 'f-ajax-loading', html: F.util.loading }); + }, + + // 向页面的 form 节点最后添加新的节点 + appendFormNode: function (htmlOrObj) { + return Ext.DomHelper.append(document.forms[0], htmlOrObj); + }, + + // 向页面添加一个隐藏字段,如果已经存在则更新值 + setHiddenFieldValue: function (fieldId, fieldValue) { + var itemNode = Ext.get(fieldId); + if (!itemNode) { + // Ext.DomHelper.append 有问题,例如下面这个例子得到的结果是错的;变通一下,先插入节点,在设置节点的值。 + // Ext.DomHelper.append(document.forms[0], { tag: "input", type: "hidden", value: '{"X_Items":[["Value1","可选项1",1],["Value2","可选项2(不可选择)",0],["Value3","可选项3(不可选择)",0],["Value4","可选项4",1],["Value5","可选项5",1],["Value6","可选项6",1],["Value7","可选择项7",1],["Value8","可选择项8",1],["Value9","可选择项9",1]],"SelectedValue":"Value1"}'}); + // 上面的这个字符串,在IETest的IE8模式下会变成: + // {"DropDownList1":{"X_Items":[["Value1","\u9009\u9879 1",1],["Value2","\u9009\u9879 2\uff08\u4e0d\u53ef\u9009\u62e9\uff09",0],["Value3","\u9009\u9879 3\uff08\u4e0d\u53ef\u9009\u62e9\uff09",0],["Value4","\u9009\u9879 4",1],["Value5","\u9009\u9879 5",1],["Value6","\u9009\u9879 6",1],["Value7","\u9009\u9879 7",1],["Value8","\u9009\u9879 8",1],["Value9","\u9009\u9879 9",1]],"SelectedValue":"Value1"}} + + F.util.appendFormNode({ tag: "input", type: "hidden", id: fieldId, name: fieldId }); + Ext.get(fieldId).dom.value = fieldValue; + } + else { + itemNode.dom.value = fieldValue; + } + }, + // 从表单中删除隐藏字段 + removeHiddenField: function (fieldId) { + var itemNode = Ext.get(fieldId); + if (itemNode) { + itemNode.remove(); + } + }, + // 获取页面中一个隐藏字段的值 + getHiddenFieldValue: function (fieldId) { + var itemNode = Ext.get(fieldId); + if (itemNode) { + return itemNode.getValue(); + } + return null; + }, + + // 禁用提交按钮(在回发之前禁用以防止重复提交) + disableSubmitControl: function (controlClientID) { + F(controlClientID).disable(); + F.util.setHiddenFieldValue('F_TARGET', controlClientID); + }, + // 启用提交按钮(在回发之后启用提交按钮) + enableSubmitControl: function (controlClientID) { + F(controlClientID).enable(); + F.util.setHiddenFieldValue('F_TARGET', ''); + }, + + + + /* + // 更新ViewState的值 + updateViewState: function (newValue, startIndex, gzipped) { + if (typeof (startIndex) === 'boolean') { + gzipped = startIndex; + startIndex = -1; + } + + var viewStateHiddenFiledID = "__VIEWSTATE"; + if (gzipped) { + viewStateHiddenFiledID = "__VIEWSTATE_GZ"; + } + + var oldValue = F.util.getHiddenFieldValue(viewStateHiddenFiledID); + if (Ext.type(startIndex) == "number" && startIndex > 0) { + if (startIndex < oldValue.length) { + oldValue = oldValue.substr(0, startIndex); + } + } else { + // Added on 2011-5-2, this is a horrible mistake. + oldValue = ''; + } + F.util.setHiddenFieldValue(viewStateHiddenFiledID, oldValue + newValue); + }, + + // 更新EventValidation的值 + updateEventValidation: function (newValue) { + F.util.setHiddenFieldValue("__EVENTVALIDATION", newValue); + }, + */ + + // 设置页面状态是否改变 + setPageStateChanged: function (changed) { + var pageState = Ext.get("F_CHANGED"); + if (pageState) { + pageState.dom.value = changed; + } + }, + + // 页面状态是否改变 + isPageStateChanged: function () { + var pageState = Ext.get("F_CHANGED"); + if (pageState && pageState.getValue() == "true") { + return true; + } + return false; + }, + + + // 阻止页面关闭(页面中iframe内的表单已改变,或者页面中iframe定义了beforeunload) + preventPageClose: function (el) { + var me = this; + + // 是否阻止关闭 + var preventClose = false; + + var iframeEls; + if (el) { + iframeEls = el.select('iframe'); + } else { + iframeEls = Ext.select('iframe'); + } + + iframeEls.each(function (iframeEl) { + var iframeWnd = iframeEl.dom.contentWindow; + + if (!canIFrameWindowAccessed(iframeWnd)) { + return true; // continue + } + + if (iframeWnd && iframeWnd.F) { + var iframeF = iframeWnd.F; + + // 启用表单改变确认对话框 并且 表单已改变 + if (iframeF.formChangeConfirm && iframeF.util.formChanged()) { + // 阻止关闭当前面板 + if (!window.confirm(F.wnd.formChangeConfirmMsg)) { + preventClose = true; + return false; // break + } else { + // 没有阻止,不要在触发 $(window).beforeunload 事件了 + iframeF.beforeunloadCheck = false; + } + } + + /* + // 是否自定义了 beforeunload 事件 + var beforeunloadCallbacks = iframeF.util._fjs_getEvent('beforeunload'); + if (beforeunloadCallbacks) { + for (var i = 0, count = beforeunloadCallbacks.length; i < count; i++) { + var beforeunloadCallback = beforeunloadCallbacks[i]; + + var confirmMsg = beforeunloadCallback.apply(iframeWnd); + if (confirmMsg) { + // 阻止关闭当前面板 + if (!window.confirm(confirmMsg)) { + preventClose = true; + return false; // break + } else { + // 没有阻止,不要在触发 $(window).beforeunload 事件了 + iframeF.beforeunloadCheck = false; + } + } + } + } + */ + + // 子页面是否阻止关闭 + var childrenPreventClose = iframeF.util.preventPageClose(); + if (childrenPreventClose) { + + // 被子页面阻止了,则恢复父页面的 beforeunloadCheck 标识 + iframeF.beforeunloadCheck = true; + + preventClose = true; + return false; // break + } + } + + }); + + return preventClose; + }, + + // 页面中表单字段是否改变 + formChanged: function () { + var changed = false; + resolveRenderToObj(function (obj) { + if (obj.isXType('container') && obj.f_isDirty()) { + changed = true; + return false; // break + } + }); + + return changed; + }, + + + // 验证多个表单,返回数组[是否验证通过,第一个不通过的表单字段] + validForms: function (forms, targetName, showBox) { + var target = F.util.getTargetWindow(targetName); + var valid = true; + var firstInvalidField = null; + for (var i = 0; i < forms.length; i++) { + var result = F(forms[i]).f_isValid(); + if (!result[0]) { + valid = false; + if (firstInvalidField == null) { + firstInvalidField = result[1]; + } + } + } + + if (!valid) { + if (showBox) { + var alertMsg = Ext.String.format(F.util.formAlertMsg, firstInvalidField.fieldLabel); + target.F.util.alert(alertMsg, F.util.formAlertTitle, Ext.MessageBox.INFO); + } + return false; + } + return true; + }, + + + // 判断隐藏字段值(数组)是否包含value + isHiddenFieldContains: function (domId, testValue) { + testValue += ""; + var domValue = Ext.get(domId).dom.value; + if (domValue === "") { + //console.log(domId); + return false; + } + else { + var sourceArray = domValue.split(","); + return Ext.Array.indexOf(sourceArray, testValue) >= 0 ? true : false; + } + }, + + + // 将一个字符添加到字符列表中,将2添加到[5,3,4] + addValueToHiddenField: function (domId, addValue) { + addValue += ""; + var domValue = Ext.get(domId).dom.value; + if (domValue == "") { + Ext.get(domId).dom.value = addValue + ""; + } + else { + var sourceArray = domValue.split(","); + if (Ext.Array.indexOf(sourceArray, addValue) < 0) { + sourceArray.push(addValue); + Ext.get(domId).dom.value = sourceArray.join(","); + } + } + }, + + + // 从字符列表中移除一个字符,将2从dom的值"5,3,4,2"移除 + removeValueFromHiddenField: function (domId, addValue) { + addValue += ""; + var domValue = Ext.get(domId).dom.value; + if (domValue != "") { + var sourceArray = domValue.split(","); + if (Ext.Array.indexOf(sourceArray, addValue) >= 0) { + sourceArray = sourceArray.remove(addValue); + Ext.get(domId).dom.value = sourceArray.join(","); + } + } + }, + + + // 取得隐藏字段的值 + getHiddenFieldValue: function (fieldId) { + var itemNode = Ext.get(fieldId); + if (!itemNode) { + return ""; + } + else { + return itemNode.dom.value; + } + }, + + + // 取得表单字段的值 + getFormFieldValue: function (cmp) { + if (typeof (cmp) === 'string') { + cmp = F(cmp); + } + var value = cmp.getValue(); + if (cmp.isXType('displayfield')) { + value = value.replace(/<\/?span[^>]*>/ig, ''); + } + return value; + }, + + + // 由target获取window对象 + getTargetWindow: function (target) { + var wnd = window; + if (target === '_self') { + wnd = window; + } else if (target === '_parent') { + wnd = parent; + } else if (target === '_top') { + wnd = top; + } + return wnd; + }, + + + // 预加载图片 + preloadImages: function (images) { + var imageInstance = []; + for (var i = 0; i < images.length; i++) { + imageInstance[i] = new Image(); + imageInstance[i].src = images[i]; + } + }, + + hasCSS: function (id) { + return !!Ext.get(id); + }, + + addCSS: function (id, content, isCSSFile) { + + // 如果此节点已经存在,则先删除此节点 + var node = Ext.get(id); + if (node) { + Ext.removeNode(node.dom); + } + + var ss1; + + if (isCSSFile) { + ss1 = document.createElement('link'); + ss1.setAttribute('type', 'text/css'); + ss1.setAttribute('rel', 'stylesheet'); + ss1.setAttribute('id', id); + ss1.setAttribute('href', content); + } else { + // Tricks From: http://www.phpied.com/dynamic-script-and-style-elements-in-ie/ + ss1 = document.createElement("style"); + ss1.setAttribute("type", "text/css"); + ss1.setAttribute("id", id); + if (ss1.styleSheet) { // IE + ss1.styleSheet.cssText = content; + } else { // the world + var tt1 = document.createTextNode(content); + ss1.appendChild(tt1); + } + } + + var hh1 = document.getElementsByTagName("head")[0]; + hh1.appendChild(ss1); + }, + + /* + // 在启用AJAX的情况下,使所有的Asp.net的提交按钮(type="submit")不要响应默认的submit行为,而是自定义的AJAX + makeAspnetSubmitButtonAjax: function (buttonId) { + + // 低版本IE浏览器不允许使用JS修改input标签的type属性,导致此函数无效 + function resetButton(button) { + button.set({ "type": "button" }); + button.addListener("click", function (event, el) { + __doPostBack(el.getAttribute("name"), ""); + event.stopEvent(); + }); + } + + if (typeof (buttonId) === "undefined") { + Ext.Array.each(Ext.DomQuery.select("input[type=submit]"), function (item, index) { + resetButton(Ext.get(item)); + }); + } else { + var button = Ext.get(buttonId); + if (button.getAttribute("type") === "submit") { + resetButton(button); + } + } + + }, + + */ + + htmlEncode: function (str) { + var div = document.createElement("div"); + div.appendChild(document.createTextNode(str)); + return div.innerHTML; + }, + + htmlDecode: function (str) { + var div = document.createElement("div"); + div.innerHTML = str; + return div.innerHTML; + }, + + + // Whether a object is empty (With no property) or not. + // 可以使用 Ext.Object.isEmpty + isObjectEmpty: function (obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + return false; + } + } + return true; + }, + + // Convert an array to object. + // ['Text', 'Icon'] -> {'Text':true, 'Icon': true} + arrayToObject: function (arr) { + var obj = {}; + Ext.Array.each(arr, function (item, index) { + obj[item] = true; + }); + return obj; + }, + + hideScrollbar: function () { + if (Ext.isIE) { + window.document.body.scroll = 'no'; + } else { + window.document.body.style.overflow = 'hidden'; + } + }, + + + // 动态添加一个标签页 + // mainTabStrip: 选项卡实例 + // id: 选项卡ID + // url: 选项卡IFrame地址 + // text: 选项卡标题 + // icon: 选项卡图标 + // addTabCallback: 创建选项卡前的回调函数(接受tabConfig参数) + // refreshWhenExist: 添加选项卡时,如果选项卡已经存在,是否刷新内部IFrame + addMainTab: function (mainTabStrip, id, url, text, icon, createToolbar, refreshWhenExist) { + var iconId, iconCss, tabId, currentTab, tabConfig; + + // 兼容 addMainTab(mainTabStrip, treeNode, addTabCallback, refreshWhenExist) 调用方式 + if (typeof (id) !== 'string') { + refreshWhenExist = text; + createToolbar = url; + url = id.data.href; + icon = id.data.icon; + text = id.data.text; + + id = id.getId(); + } + + //var href = node.attributes.href; + if (icon) { + iconId = icon.replace(/\W/ig, '_'); + if (!F.util.hasCSS(iconId)) { + iconCss = []; + iconCss.push('.'); + iconCss.push(iconId); + iconCss.push('{background-image:url("'); + iconCss.push(icon); + iconCss.push('")}'); + F.util.addCSS(iconId, iconCss.join('')); + } + } + // 动态添加一个带工具栏的标签页 + //tabId = 'dynamic_added_tab' + id.replace('__', '-'); + currentTab = mainTabStrip.getTab(id); + if (!currentTab) { + tabConfig = { + 'id': id, + 'url': url, + 'title': text, + 'closable': true, + 'bodyStyle': 'padding:0px;' + }; + if (icon) { + tabConfig['iconCls'] = iconId; + } + + if (createToolbar) { + var addTabCallbackResult = createToolbar.apply(window, [tabConfig]); + // 兼容之前的方法,函数返回值如果不为空,则将返回值作为顶部工具条实例 + if (addTabCallbackResult) { + tabConfig['tbar'] = addTabCallbackResult; + } + } + mainTabStrip.addTab(tabConfig); + } else { + mainTabStrip.setActiveTab(currentTab); + currentTab.setTitle(text); + if (icon) { + currentTab.setIconCls(iconId); + } + if (refreshWhenExist) { + var iframeNode = currentTab.body.query('iframe')[0]; + if (iframeNode) { + if (url) { + iframeNode.contentWindow.location.href = url; + } else { + iframeNode.contentWindow.location.reload(); + } + } + } + + } + }, + + // 初始化左侧树(或者手风琴+树)与右侧选项卡控件的交互 + // treeMenu: 主框架中的树控件实例,或者内嵌树控件的手风琴控件实例 + // mainTabStrip: 选项卡实例 + // createToolbar: 创建选项卡前的回调函数(接受tabConfig参数) + // updateLocationHash: 切换Tab时,是否更新地址栏Hash值 + // refreshWhenExist: 添加选项卡时,如果选项卡已经存在,是否刷新内部IFrame + // refreshWhenTabChange: 切换选项卡时,是否刷新内部IFrame + // hashWindow:需要更新Hash值的窗口对象,默认为当前window + initTreeTabStrip: function (treeMenu, mainTabStrip, createToolbar, updateLocationHash, refreshWhenExist, refreshWhenTabChange, hashWindow) { + if (!hashWindow) { + hashWindow = window; + } + + // 注册树的节点点击事件 + function registerTreeClickEvent(treeInstance) { + treeInstance.on('itemclick', function (view, record, item, index, event) { + var href = record.data.href; + + // record.isLeaf() + // 不管当前节点是否子节点,只要有 href 属性,都需要打开一个新Tab + if (href) { + // 阻止事件传播 + event.stopEvent(); + + if (updateLocationHash) { + // 修改地址栏 + hashWindow.location.hash = '#' + href; + } + + // 新增Tab节点 + F.util.addMainTab(mainTabStrip, record, createToolbar, refreshWhenExist); + } + }); + } + + // treeMenu可能是Accordion或者Tree + if (treeMenu.getXType() === 'panel') { + treeMenu.items.each(function (item) { + var tree = item.items.getAt(0); + if (tree && tree.getXType() === 'treepanel') { + registerTreeClickEvent(tree); + } + }); + } else if (treeMenu.getXType() === 'treepanel') { + registerTreeClickEvent(treeMenu); + } + + // 切换主窗口的Tab + mainTabStrip.on('tabchange', function (tabStrip, tab) { + var tabHash = '#' + (tab.url || ''); + + // 只有当浏览器地址栏的Hash值和将要改变的不一样时,才进行如下两步处理: + // 1. 更新地址栏Hash值 + // 2. 刷新Tab内的IFrame + if (tabHash !== hashWindow.location.hash) { + + if (updateLocationHash) { + hashWindow.location.hash = tabHash; + } + + if (refreshWhenTabChange) { + var iframeNode = tab.body.query('iframe')[0]; + if (iframeNode) { + var currentLocationHref = iframeNode.contentWindow.location.href; + if (/^http(s?):\/\//.test(currentLocationHref)) { + iframeNode.contentWindow.location.reload(); + } + } + } + } + + }); + + + // 页面第一次加载时,根据URL地址在主窗口加载页面 + var HASH = hashWindow.location.hash.substr(1); + if (HASH) { + var FOUND = false; + + function initTreeMenu(treeInstance, node) { + var i, currentNode, nodes, node, path; + if (!FOUND && node.hasChildNodes()) { + nodes = node.childNodes; + for (i = 0; i < nodes.length; i++) { + currentNode = nodes[i]; + if (currentNode.isLeaf()) { + if (currentNode.data.href === HASH) { + path = currentNode.getPath(); + treeInstance.expandPath(path); //node.expand(); + treeInstance.selectPath(path); // currentNode.select(); + F.util.addMainTab(mainTabStrip, currentNode, createToolbar); + FOUND = true; + return; + } + } else { + arguments.callee(treeInstance, currentNode); + } + } + } + } + + if (treeMenu.getXType() === 'panel') { + treeMenu.items.each(function (item) { + var tree = item.items.getAt(0); + if (tree && tree.getXType() === 'treepanel') { + initTreeMenu(tree, tree.getRootNode()); + + // 找到树节点 + if (FOUND) { + item.expand(); + return false; + } + } + }); + } else if (treeMenu.getXType() === 'treepanel') { + initTreeMenu(treeMenu, treeMenu.getRootNode()); + } + } + + }, + + // 复选框分组处理 + resolveCheckBoxGroup: function (name, xstateContainer, isradiogroup) { + var items = [], i, count, xitem, xitemvalue, xitems, xselectedarray, xselected, xchecked, xitemname; + + xitems = xstateContainer.F_Items; + xselectedarray = xstateContainer.SelectedValueArray; + xselected = xstateContainer.SelectedValue; + + if (xitems && xitems.length > 0) { + for (i = 0, count = xitems.length; i < count; i++) { + xitem = xitems[i]; + xitemvalue = xitem[1]; + xchecked = false; + if (!isradiogroup) { + // xselectedarray 可能是undefined, [], ["value1", "value2"] + if (xselectedarray) { + xchecked = (Ext.Array.indexOf(xselectedarray, xitemvalue) >= 0) ? true : false; + } + xitemname = name + '_' + i; + } else { + xchecked = (xselected === xitemvalue) ? true : false; + xitemname = name; + } + items.push({ + 'inputValue': xitemvalue, + 'boxLabel': xitem[0], + 'name': xitemname, + 'checked': xchecked + }); + } + } + /* + else { + items.push({ + 'inputValue': "tobedeleted", + 'boxLabel': " ", + 'name': "tobedeleted" + }); + } + */ + return items; + + }, + + // 防止在短时间内,同一GroupName的单选框触发两次事件 + // 用于 MenuCheckBox 和 RadioButton + checkGroupLastTime: function (groupName) { + var checkName = groupName + '_lastupdatetime'; + var checkValue = F.util[checkName]; + F.util[checkName] = new Date(); + if (typeof (checkValue) === 'undefined') { + return true; + } else { + if ((new Date() - checkValue) < 100) { + return false; + } else { + return true; + } + } + }, + + // 对话框图标 + getMessageBoxIcon: function (iconShortName) { + var icon = Ext.MessageBox.WARNING; + if (iconShortName === 'info') { + icon = Ext.MessageBox.INFO; + } else if (iconShortName === 'warning') { + icon = Ext.MessageBox.WARNING; + } else if (iconShortName === 'question') { + icon = Ext.MessageBox.QUESTION; + } else if (iconShortName === 'error') { + icon = Ext.MessageBox.ERROR; + } + return icon; + }, + + // 确认对话框 + confirm: function (targetName, title, msg, okScript, cancelScript, iconShortName) { + var wnd = F.util.getTargetWindow(targetName); + var icon = F.util.getMessageBoxIcon(iconShortName); + wnd.Ext.MessageBox.show({ + title: title || F.util.confirmTitle, + msg: msg, + buttons: Ext.MessageBox.OKCANCEL, + icon: icon, + fn: function (btn) { + if (btn == 'cancel') { + if (cancelScript) { + if (typeof (cancelScript) === 'string') { + new Function(cancelScript)(); + } else { + cancelScript.apply(wnd); + } + } else { + return false; + } + } else { + if (okScript) { + if (typeof (okScript) === 'string') { + new Function(okScript)(); + } else { + okScript.apply(wnd); + } + } else { + return false; + } + } + } + }); + }, + + + + summaryType: function (gridId) { + return function (records, dataIndex) { + var summary = F(gridId).f_state['SummaryData']; + if (summary) { + var value = summary[dataIndex]; + if (typeof (value) !== 'undefined') { + return value; + } + } + return ''; + }; + }, + + // 表单字段内按回车键触发提交按钮 + registerPanelEnterKey: function (panel) { + if (F.submitbutton) { + Ext.create('Ext.util.KeyNav', panel.el, { + enter: function (e) { + var el = Ext.Element.getActiveElement(); + if (el.type !== 'textarea') { + F(F.submitbutton).el.dom.click(); + } + }, + scope: panel + }); + } + }, + + reset: function () { + Ext.ComponentManager.each(function (key, cmp) { + if (cmp.isXType && cmp.isXType('panel') && cmp.renderTo) { + cmp.f_reset(); + } + }); + }, + + + isDate: function (value) { + return Object.prototype.toString.call(value) === '[object Date]'; + }, + + resolveGridDateToString: function (fields, fieldName, fieldValue) { + var i, fieldConfig, result = fieldValue; + for (i = 0, count = fields.length; i < count; i++) { + fieldConfig = fields[i]; + if (fieldConfig.name === fieldName && fieldConfig.type === 'date' && fieldConfig.dateFormat) { + result = Ext.util.Format.date(fieldValue, fieldConfig.dateFormat); + } + } + return result; + }, + + + noop: function () { } + + }; + + + + +})(); \ No newline at end of file diff --git a/FineUI.Examples/extjs_builder/js/F/F.wnd.js b/FineUI.Examples/extjs_builder/js/F/F.wnd.js new file mode 100644 index 0000000..71331ce --- /dev/null +++ b/FineUI.Examples/extjs_builder/js/F/F.wnd.js @@ -0,0 +1,317 @@ + + +(function () { + + // 计算黄金分割点的位置 + // bodySize : 整个页面的Body的大小 + // windowSize : 窗口的大小 + function _calculateGoldenPosition(bodySize, windowSize) { + var top = (bodySize.height - (bodySize.height / 1.618)) - windowSize.height / 2; + if (top < 0) { + top = 0; + } + var left = (bodySize.width - windowSize.width) / 2; + if (left < 0) { + left = 0; + } + return { left: left, top: top }; + } + + // 计算中间的位置 + // bodySize : 整个页面的Body的大小 + // windowSize : 窗口的大小 + function _calculateCenterPosition(bodySize, windowSize) { + var top = (bodySize.height - windowSize.height) / 2; + if (top < 0) { + top = 0; + } + var left = (bodySize.width - windowSize.width) / 2; + if (left < 0) { + left = 0; + } + return { left: left, top: top }; + } + + + + // 创建IFrame节点片段 + function _createIFrameHtml(iframeUrl, iframeName) { + return ''; + } + + // 获取窗体的外部容器 + function _getWrapperNode(panel) { + return Ext.get(panel.el.findParentNode('.x-window-wrapper')); + } + + // FineUI窗口域(Window) + F.wnd = { + + closeButtonTooltip: "Close this window", + formChangeConfirmMsg: "Current form has been modified, abandon changes?", + + createIFrameHtml: function (iframeUrl, iframeName) { + return _createIFrameHtml(iframeUrl, iframeName); + }, + + // 窗体定义:Original Panel / Ghost Panel + + // 显示一个弹出窗体 + // 在 panel 实例中,定义了几个自定义属性,用于标示此实例的状态(在PanelBase中定义) + // 属性 - f_iframe/f_iframe_url/f_iframe_name/f_iframe_loaded + // panel : 当前弹出的窗体(Ext-Window) + // iframeUrl : 弹出窗体中包含的IFrame的地址 + // windowTitle : 弹出窗体的标题 + // left/top : 弹出窗体的左上角坐标(如果为空字符串,则使用中间位置或黄金分隔位置) + // isGoldenSection : 弹出窗体位于页面的黄金分隔位置 + // hiddenHiddenFieldID : 隐藏表单字段记录此窗体是否弹出,也页面回发时保持状态用 + show: function (panel, iframeUrl, windowTitle, left, top, isGoldenSection, hiddenHiddenFieldID, width, height) { + var target = F.util.getTargetWindow(panel['f_property_target']); + var guid = panel['f_property_guid']; + if (window.frameElement && target !== window) { + // 当前页面在IFrame中(也即时 window.frameElement 存在) + // 此弹出窗体需要在父窗口中弹出 + if (!target.F[guid]) { + // 父窗口中已经创建了这个Ext-Window对象 + var wrapper = guid + '_wrapper'; + if (!target.Ext.get(wrapper)) { + target.F.util.appendFormNode('
'); + } else { + target.Ext.get(wrapper).dom.innerHTML = ''; + } + // Ext.apply 的第三个参数是default obejct + var config = Ext.apply({}, { + 'renderTo': wrapper, + 'id': guid, + 'f_property_window': window, + 'f_property_ext_window': panel + }, panel.initialConfig); + + // 在父页面中创建一个Ext-Window的幻影(拷贝) + target.F[guid] = target.Ext.create('Ext.window.Window', config); + } + panel = target.F[guid]; + } + + if (iframeUrl !== '') { + F.wnd.updateIFrameNode(panel, iframeUrl); + } + if (windowTitle != '') { + panel.setTitle(windowTitle); + } + + + if (typeof(width) === 'number' && width) { + panel.setWidth(width); + } + + if (typeof(height) === 'number' && height) { + panel.setHeight(height); + } + + + Ext.get(hiddenHiddenFieldID).dom.value = 'false'; + panel.show(); + + if (left !== '' && top !== '') { + panel.setPosition(parseInt(left, 10), parseInt(top, 10)); + } else { + var bodySize = target.window.Ext.getBody().getViewSize(); + var panelSize = panel.getSize(), leftTop; + if (isGoldenSection) { + leftTop = _calculateGoldenPosition(bodySize, panelSize); + } else { + leftTop = _calculateCenterPosition(bodySize, panelSize); + //panel.alignTo(target.Ext.getBody(), "c-c"); + } + panel.setPosition(leftTop.left, leftTop.top); + } + + if (panel.maximizable) { + F.wnd.fixMaximize(panel); + } + }, + + // 获取Ghost Panel实例 + getGhostPanel: function (panel, targetName, guid) { + if (typeof (targetName) === 'undefined') { + targetName = panel.f_property_target; + } + if (typeof (guid) === 'undefined') { + guid = panel.f_property_guid; + } + var target = F.util.getTargetWindow(targetName); + if (window.frameElement && target !== window) { + // 从父页面中查找幻影Ext-Window对象 + panel = target.F[guid]; + } + return panel; + }, + + // 隐藏Ext-Window(比如用户点击了关闭按钮) + hide: function (panel, enableIFrame, hiddenHiddenFieldID) { + var panel = F.wnd.getGhostPanel(panel); + + // 如果返回 false,则说明隐藏操作被阻止了 + if (panel.hide() !== false) { + + // 修改当前页面中记录弹出窗口弹出状态的隐藏表单字段 + Ext.get(hiddenHiddenFieldID).dom.value = 'true'; + // 如果启用IFrame,则清空IFrame的内容,防止下次打开时显示残影 + if (enableIFrame) { + // 如果不加延迟,IE下AJAX会出错,因为在success中已经把当前窗体关闭后,而后面还要继续使用本页面上相关对象 + window.setTimeout(function () { + panel['f_iframe_loaded'] = false; + panel.update(""); + }, 100); + } + + } + }, + + // 最大化 + maximize: function (panel) { + var panel = F.wnd.getGhostPanel(panel); + panel.maximize(); + }, + + // 最小化 + minimize: function (panel) { + var panel = F.wnd.getGhostPanel(panel); + panel.minimize(); + }, + + // 恢复窗体大小 + restore: function (panel) { + var panel = F.wnd.getGhostPanel(panel); + panel.restore(); + }, + + // 这是 Extjs 的一个 bug,如果 Window 控件不是渲染在 document.body 中,则 maximize 函数并不能真正的最大化 + // 现在的 Window 控件时渲染在 from 表单里面的一个 DIV 中的 + fixMaximize: function (panel) { + if (panel.maximized) { + var target = F.util.getTargetWindow(panel['f_property_target']); + var bodySize = target.window.Ext.getBody().getViewSize(); + panel.setSize(bodySize.width, bodySize.height); + // 不要忘记左上角坐标 + panel.setPosition(0, 0); + } + }, + + // 创建或更新IFrame节点,同时更新panel实例中的自定义属性值 + updateIFrameNode: function (panel, iframeUrl) { + var iframeUrlChanged = false; + panel = F.wnd.getGhostPanel(panel); + // 如果此Panel中包含有IFrame + if (panel && panel['f_iframe']) { + if (iframeUrl && panel['f_iframe_url'] !== iframeUrl) { + panel['f_iframe_url'] = iframeUrl; + iframeUrlChanged = true; + } + // 如果此Panel中包含的IFrame还没有加载 + if (!panel['f_iframe_loaded']) { + window.setTimeout(function () { + // 如果此Panel已经创建完毕,但有时Panel可能是延迟创建的(比如TabStrip中的Tab,只有点击这个Tab时才创建Tab的内容) + panel['f_iframe_loaded'] = true; + panel.update(_createIFrameHtml(panel['f_iframe_url'], panel['f_iframe_name'])); + }, 0); + } + else { + if (iframeUrlChanged) { + panel.body.query('iframe')[0].src = panel['f_iframe_url']; + } + } + } + }, + + + // 处理表单中有任何字段发生变化时,关闭当前窗口时的提示 + confirmModified: function (closeFn) { + if (F.util.isPageStateChanged()) { + F.util.confirm('_self', F.wnd.formModifiedConfirmTitle, F.wnd.formChangeConfirmMsg, function () { + closeFn.apply(window, arguments); + }); + } else { + closeFn.apply(window, arguments); + } + }, + + + // Ext-Window中IFrame里页面中的表单发生变化时弹出确认消息 + iframeModifiedConfirm: function (panel, closeFn) { + // 这个页面所在的Window对象 + var pageWindow = F.wnd.getIFrameWindowObject(panel); + // 如果弹出的页面没能正常加载(比如说网络暂时连接中断) + // 则直接关闭弹出的Ext-Window,而不会去检查页面表单变化,因为页面对象不存在 + if (pageWindow.F) { + pageWindow.F.wnd.confirmModified(closeFn); + } + else { + panel.f_hide(); + } + }, + + // 取得Ghost Panel所在页面window对象 + getIFrameWindowObject: function (panel) { + // 当前页面在IFrame中(也即时 window.frameElement 存在) + // 此Ext-Window需要在父窗口中弹出 + /* + if (window.frameElement && panel['f_property_show_in_parent']) { + panel = parent.F[panel['f_property_guid']]; + } + */ + panel = F.wnd.getGhostPanel(panel); + var iframeNode = Ext.query('iframe', panel.body.dom); + if (iframeNode.length === 0) { + // 当前panel(Ext-Window)不包含iframe + return window; + } + else { + return iframeNode[0].contentWindow; + } + }, + + // 返回当前活动Window组件对象(浏览器窗口对象通过F.wnd.getActiveWindow().window获取) + getActiveWindow: function () { + + // Ext.WindowManager.getActive();有可能返回一个弹出对话框 + function getActiveFineUIWindow(wnd) { + var result = wnd.Ext.WindowManager.getActive(); + if (!result.f_property_guid) { + wnd.Ext.WindowManager.eachTopDown(function (cmp) { + if (cmp.f_property_guid) { + result = cmp; + return false; + } + }); + } + return result; + } + + var activeWindow = parent.window; + var activeExtWindow = getActiveFineUIWindow(activeWindow); + if (activeExtWindow) { + if (activeExtWindow['f_property_window']) { + activeWindow = activeExtWindow['f_property_window']; + activeExtWindow = activeExtWindow['f_property_ext_window']; + } + activeExtWindow.window = activeWindow; + } + return activeExtWindow; + }, + + + // 向弹出此Ext-Window的页面写入值 + writeBackValue: function () { + var aw = F.wnd.getActiveWindow(); + var controlIds = aw['f_property_save_state_control_client_ids']; + var controlCount = Math.min(controlIds.length, arguments.length); + for (var i = 0; i < controlCount; i++) { + aw.window.Ext.getCmp(controlIds[i]).setValue(arguments[i]); + } + } + + }; + +})(); diff --git a/FineUI.Examples/extjs_builder/js/F/extender.js b/FineUI.Examples/extjs_builder/js/F/extender.js new file mode 100644 index 0000000..e75f8a6 --- /dev/null +++ b/FineUI.Examples/extjs_builder/js/F/extender.js @@ -0,0 +1,1674 @@ + +F.originalComponentHide = Ext.Component.prototype.hide; +Ext.override(Ext.Component, { + + // override + hide: function () { + var me = this; + + if (me.tab && me.tab.isXType('tab')) { + // tabpanel 单独处理 + } else { + // 除了 tabpanel 的其他面板 + if (me.body) { + // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + if (F.util.preventPageClose(me.body)) { + return false; + } + } + } + + return F.originalComponentHide.apply(me, arguments); + }, + + f_setDisabled: function () { + this.setDisabled(!this.f_state['Enabled']); + }, + + f_setVisible: function () { + this.setVisible(!this.f_state['Hidden']); + }, + + f_setWidth: function () { + this.setWidth(this.f_state['Width']); + }, + + f_setHeight: function () { + this.setHeight(this.f_state['Height']); + } + + + + +}); + +// 1. tabpanel 单独处理,选项卡右上角的关闭按钮 +F.originalTabBarCloseTab = Ext.tab.Bar.prototype.closeTab; +Ext.override(Ext.tab.Bar, { + // override + closeTab: function (toClose) { + var me = this, card = toClose.card; + + if (card.body) { + // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + if (F.util.preventPageClose(card.body)) { + return false; + } + } + + return F.originalTabBarCloseTab.apply(me, arguments); + } + +}); + +// 2. tabpanel 单独处理,选项卡的右键菜单 +F.originalTabPanelRemove = Ext.tab.Panel.prototype.remove; +Ext.override(Ext.tab.Panel, { + + // override + remove: function (comp) { + var me = this, c = me.getComponent(comp); + + if (c && c.body) { + // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + if (F.util.preventPageClose(c.body)) { + return false; + } + } + + return F.originalTabPanelRemove.apply(me, arguments); + } + +}); + + +// 验证一个表单是否有效,会递归查询表单中每个字段 +// 如果表单隐藏或者字段隐藏,则不进行有效性校验 +Ext.override(Ext.container.Container, { + + f_isValid: function () { + var valid = true; + var firstInvalidField = null; + if (!this.hidden) { + this.items.each(function (f) { + if (!f.hidden) { + if (f.isXType('field') || f.isXType('checkboxgroup')) { + if (!f.validate()) { + valid = false; + if (firstInvalidField == null) { + firstInvalidField = f; + } + } + } else if (f.isXType('container') && f.items.length) { + var validResult = f.f_isValid(); + if (!validResult[0]) { + valid = false; + if (firstInvalidField == null) { + firstInvalidField = validResult[1]; + } + } + } + } + }); + } + return [valid, firstInvalidField]; + }, + + f_reset: function () { + var me = this; + if (me.items && me.items.length) { + me.items.each(function (item) { + if (item.isXType('field')) { + item.reset(); + } else if (item.isXType('container') && item.items.length) { + item.f_reset(); + } + }); + } + }, + + // 当前面板内的表单字段是否改变 + f_isDirty: function () { + var me = this, dirty = false; + + if (me.items && me.items.length) { + me.items.each(function (item) { + if (item.isXType('field')) { + if (item.isDirty()) { + dirty = true; + return false; + } + } else if (item.isXType('container') && item.items.length) { + if (item.f_isDirty()) { + dirty = true; + return false; + } + } + }); + } + + return dirty; + }, + + + // 当前面板内的表单字段 + f_clearDirty: function () { + var me = this; + + if (me.items && me.items.length) { + me.items.each(function (item) { + if (item.isXType('field')) { + item.resetOriginalValue(); + } else if (item.isXType('container') && item.items.length) { + item.f_clearDirty() + } + }); + } + } + +}); + +//F.originalPanelClose = Ext.panel.Panel.prototype.close; + +Ext.override(Ext.panel.Panel, { + + //// override + //close: function () { + + // // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + // if (F.util.preventPageClose(this.body)) { + // return false; + // } + + + // return F.originalPanelClose.apply(this, arguments); + //}, + + + f_setCollapse: function () { + var collapsed = this.f_state['Collapsed']; + if (collapsed) { + this.collapse(); + } else { + this.expand(); + } + }, + + f_isCollapsed: function () { + /* + var collapsed = false; + var state = this.getState(); + if (state && state.collapsed) { + collapsed = true; + } + return collapsed; + */ + return !!this.getCollapsed(); + }, + + f_setTitle: function () { + this.setTitle(this.f_state['Title']); + }, + + f_getActiveIndex: function () { + var activeIndex = -1; + this.items.each(function (item, index) { + if (item.f_isCollapsed && !item.f_isCollapsed()) { + activeIndex = index; + return false; + } + }); + return activeIndex; + } + + +}); + +Ext.override(Ext.form.FieldSet, { + f_setCollapse: function () { + var collapsed = this.f_state['Collapsed']; + if (collapsed) { + this.collapse(); + } else { + this.expand(); + } + }, + + f_isCollapsed: function () { + /* + var collapsed = false; + var state = this.getState(); + if (state && state.collapsed) { + collapsed = true; + } + return collapsed; + */ + return !!this.getCollapsed(); + }, + + f_setTitle: function () { + this.setTitle(this.f_state['Title']); + } + +}); + +if (Ext.menu.CheckItem) { + Ext.override(Ext.menu.CheckItem, { + + f_setChecked: function () { + this.setChecked(this.f_state['Checked'], true); + } + + }); +} + +if (Ext.form.field.Base) { + Ext.override(Ext.form.field.Base, { + + // Add functionality to Field's initComponent to enable the change event to bubble + /* + initComponent: Ext.form.Field.prototype.initComponent.createSequence(function () { + this.enableBubble('change'); + }), + */ + + /* 这会导致在文本输入框中按回车键,无法触发type=submit的表单回发事件 + listeners: { + specialkey: function (field, e) { + if (e.getKey() == e.ENTER) { + e.stopEvent(); + } + } + }, + */ + + /* + // When show or hide the field, also hide the label. + hide: function () { + Ext.form.Field.superclass.hide.call(this); + //this.callOverridden(); + + //var label = Ext.get(this.el.findParent('div[class=x-form-item]')).first('label[for=' + this.id + ']'); + var labelAndField = this.el.findParentNode('div[class*=x-form-item]', 10, true); + if (labelAndField) { + if (this.hideMode == 'display') { + labelAndField.setVisibilityMode(Ext.Element.DISPLAY); + } else { + labelAndField.setVisibilityMode(Ext.Element.VISIBILITY); + } + labelAndField.hide(); + } + }, + + show: function () { + Ext.form.Field.superclass.show.call(this); + //this.callOverridden(); + + //var label = Ext.get(this.el.findParent('div[class=x-form-item]')).first('label[for=' + this.id + ']'); + var labelAndField = this.el.findParentNode('div[class*=x-form-item]', 10, true); + if (labelAndField) { + if (this.hideMode == 'display') { + labelAndField.setVisibilityMode(Ext.Element.DISPLAY); + } else { + labelAndField.setVisibilityMode(Ext.Element.VISIBILITY); + } + labelAndField.show(); + } + }, + */ + + f_setValue: function (value) { + if (typeof (value) === 'undefined') { + value = this.f_state['Text']; + } + this.setValue(value); + }, + + f_setLabel: function (text) { + /* + if (this.label && this.label.update) { + this.label.update(text || this.f_state['Label']); + } + */ + var text = text || this.f_state['Label']; + if (this.setFieldLabel) { + this.setFieldLabel(text); + } + } + + }); +} + +if (Ext.form.field.Time) { + Ext.override(Ext.form.field.Time, { + + // Time 继承自 ComboBox,这个函数被覆盖了,因此需要重新定义 + f_setValue: function (value) { + if (typeof (value) === 'undefined') { + value = this.f_state['Text']; + } + this.setValue(value); + } + + }); +} + + +if (Ext.form.field.HtmlEditor) { + Ext.override(Ext.form.field.HtmlEditor, { + + f_setValue: function (text) { + if (typeof (text) === 'undefined') { + text = this.f_state['Text']; + } + this.setValue(text); + } + + }); +} + + +if (Ext.form.field.Checkbox) { + Ext.override(Ext.form.field.Checkbox, { + + f_setValue: function () { + this.setValue(this.f_state['Checked']); + } + + }); +} + + +if (Ext.form.RadioGroup) { + Ext.override(Ext.form.RadioGroup, { + + f_setValue: function (value) { + value = value || this.f_state['SelectedValue']; + var selectedObj = {}; + selectedObj[this.name] = value; + this.setValue(selectedObj); + //Ext.form.CheckboxGroup.prototype.f_setValue.apply(this, [value]); + } + + }); +} + + +if (Ext.form.CheckboxGroup) { + Ext.override(Ext.form.CheckboxGroup, { + + f_reloadData: function (name, isradiogroup) { + var container = this.ownerCt; + var newConfig = Ext.apply(this.initialConfig, { + "f_state": this.f_state, + "items": F.util.resolveCheckBoxGroup(name, this.f_state, isradiogroup) + }); + + if (container) { + var originalIndex = container.items.indexOf(this); + container.remove(this, true); + + if (isradiogroup) { + container.insert(originalIndex, Ext.create('Ext.form.RadioGroup', newConfig)); + } else { + container.insert(originalIndex, Ext.create('Ext.form.CheckboxGroup', newConfig)); + } + container.doLayout(); + } else { + this.destroy(); + if (isradiogroup) { + Ext.create('Ext.form.RadioGroup', newConfig); + } else { + Ext.create('Ext.form.CheckboxGroup', newConfig); + } + + } + }, + + /* + f_toBeDeleted: function () { + var tobedeleted = this.items.items[0]; + if (tobedeleted && tobedeleted.inputValue === 'tobedeleted') { + tobedeleted.destroy(); + this.items.remove(tobedeleted); + } + }, + */ + + // 选中项 + f_setValue: function (values) { + // valueArray:["value1", "value2", "value3"] + var values = values || this.f_state['SelectedValueArray']; + + var selectedObj = {}; + this.items.each(function (item) { + var itemSelected = false; + if (Ext.Array.indexOf(values, item.inputValue) >= 0) { + itemSelected = true; + } + selectedObj[item.name] = itemSelected; + }); + + this.setValue(selectedObj); + }, + + // 返回 ["value1", "value2", "value3"] + f_getSelectedValues: function () { + var selectedValues = []; + var values = this.getValue(); + Ext.Object.each(values, function (key, value) { + selectedValues.push(value); + }); + return selectedValues; + } + + }); +} + +if (Ext.form.field.ComboBox) { + Ext.override(Ext.form.field.ComboBox, { + // Load data from local cache. + // mode: "local", + // triggerAction: "all", + displayField: "text", + valueField: "value", + //tpl: "
x-combo-list-item-disable\">{prefix}{text}
", + + // These variables are in the Ext.form.ComboBox.prototype, therefore all instance will refer to the same store instance. + //store: new Ext.data.ArrayStore({ fields: ['value', 'text', 'enabled', 'prefix'] }), + + f_setValue: function (value) { + // value 可以是空字符串 + if (typeof (value) === 'undefined') { + if (this.multiSelect) { + value = this.f_state['SelectedValueArray']; + } else { + value = this.f_state['SelectedValue']; + } + //value = this.f_state['SelectedValue']; + } + this.setValue(value); + }, + + f_loadData: function (data) { + data = data || this.f_state['F_Items']; + if (data) { + this.store.loadData(F.simulateTree.transform(data)); + } + }, + + + f_getTextByValue: function (value, data) { + data = data || this.f_state['F_Items']; + value += ''; // 把Value转换为字符串 + for (var i = 0, count = data.length; i < count; i++) { + var item = data[i]; + if (item[0] === value) { + return item[1]; + } + } + return ''; + } + + }); +} + + +if (Ext.button.Button) { + Ext.override(Ext.button.Button, { + + f_setTooltip: function () { + this.setTooltip(this.f_state['ToolTip']); + }, + + f_toggle: function () { + this.toggle(this.f_state['Pressed']); + }, + + f_setText: function () { + this.setText(this.f_state['Text']); + } + + + }); +} + + +if (Ext.grid.column.RowNumberer) { + + F.originalRowNumbererRenderer = Ext.grid.column.RowNumberer.prototype.renderer; + Ext.override(Ext.grid.column.RowNumberer, { + + renderer: function () { + + var number = F.originalRowNumbererRenderer.apply(this, arguments); + + if (this.f_paging) { + var pagingBar = F(this.f_paging_grid).f_getPaging(); + if (pagingBar) { + number += pagingBar.f_pageIndex * pagingBar.f_pageSize; + } + } + + return number; + } + }); + +} + +if (Ext.grid.Panel) { + Ext.override(Ext.grid.Panel, { + + f_getData: function () { + var $this = this, data = this.f_state['F_Rows']['Values']; + + ////////////////////////////////////////////////// + var tpls = this.f_getTpls(this.f_tpls); + + // 将Grid1_ctl37与对应的outHTML放在哈希表中 + var tplsHash = {}; + var e = document.createElement('div'); + e.innerHTML = tpls; + Ext.Array.each(e.childNodes, function (item, index) { + tplsHash[item.id] = item.outerHTML.replace(/\r?\n\s*/ig, ''); + }); + + /* + // 将服务器返回的字符串转换为实际的JavaScript类型 + function resolveActualDataItem(fieldValue, fieldIndex) { + var fieldType = $this.f_fields[fieldIndex].type; + if (fieldType) { + if (fieldType === 'date') { + fieldValue = new Date(fieldValue); + } else if (fieldType === 'boolean') { + if (fieldValue == 'true' || fieldValue == '1') { + fieldValue = true; + } else { + fieldValue = false; + } + } else if (fieldType === 'float') { + fieldValue = parseFloat(fieldValue); + } else if (fieldType === 'int') { + fieldValue = parseInt(fieldValue, 10); + } + } + return fieldValue; + } + */ + + // 不要改变 F_Rows.Values 的原始数据,因为这个值会被POST到后台 + var newdata = [], newdataitem; + Ext.Array.each(data, function (row, rowIndex) { + newdataitem = []; + Ext.Array.each(row, function (item, index) { + if (typeof (item) === 'string' && item.substr(0, 7) === "#@TPL@#") { + var clientId = $this.id + '_' + item.substr(7); + newdataitem.push('
' + tplsHash[clientId] + '
'); + } else { + //newdataitem.push(resolveActualDataItem(item, index)); + newdataitem.push(item); + } + }); + newdata.push(newdataitem); + }); + ////////////////////////////////////////////////// + + return newdata; + }, + + f_getTpls: function (paramTpls) { + var tpls; + if (typeof (paramTpls) !== 'undefined') { + // 1. 如果Tpls存在于函数参数中 + tpls = paramTpls; + this['data-last-tpls'] = tpls; + } else { + var tplsNode = Ext.get(this.id + '_tpls'); + if (tplsNode) { + // 2. 如果Tpls存在于页面节点中 + tpls = tplsNode.dom.innerHTML; + // 获取模板列的内容之后,必须要删除原有的节点,因为会在表格中创建完全相同的新节点 + tplsNode.remove(); + + // 将模板列内容保存到表格实例中 + this['data-last-tpls'] = tpls; + } else { + // 3. 从缓存中读取 + // 从表格实例中读取模板列内容 + tpls = this['data-last-tpls']; + } + } + + return tpls; + }, + + + f_updateTpls: function (tpls) { + tpls = this.f_getTpls(tpls); + + var e = document.createElement('div'); + e.innerHTML = tpls; + Ext.Array.each(e.childNodes, function (item, index) { + var nodeId = item.id; + var tplContainer = Ext.get(nodeId + '_container'); + + // 对于内存分页,模板列的内容可能还没有渲染到页面中 + if (tplContainer) { + tplContainer.dom.innerHTML = item.outerHTML; + } + }); + }, + + f_getPaging: function () { + var toolbar = this.getDockedItems('toolbar[dock="bottom"][xtype="simplepagingtoolbar"]'); + return toolbar.length ? toolbar[0] : undefined; + }, + + f_loadData: function () { + var datas = this.f_getData(); + var pagingBar = this.f_getPaging(); + if (pagingBar) { + var pagingDatas = []; + if (pagingBar.f_databasePaging) { + pagingDatas = datas; + } else { + for (var i = pagingBar.f_startRowIndex; i <= pagingBar.f_endRowIndex; i++) { + pagingDatas.push(datas[i]); + } + } + datas = pagingDatas; + } + + + var store = this.getStore(); + + // 已经设置 Ext.data.Store 的 pruneModifiedRecords ,在重新加载数据时都会清除所有已经改变的数据 + // 所以无需 rejectChanges + // 拒绝之前对表格的编辑,因为接下来就要重新加载数据 + //store.rejectChanges(); + + // 重新加载数据前清空之前的改变 + //this.f_newAddedRows = []; + //this.f_deletedRows = []; + + store.loadData(datas); + + + if (this.f_cellEditing) { + store.commitChanges(); + this.f_initRecordIDs(); + } + }, + + // 初始化所有记录的ID列表 + f_initRecordIDs: function () { + var $this = this; + this.f_recordIDs = []; + this.getStore().each(function (record, index) { + $this.f_recordIDs.push(record.id); + }); + }, + + // 展开所有的行扩展列 + f_expandAllRows: function () { + var expander = this.getPlugin(this.id + '_rowexpander'); + if (expander) { + var store = this.getStore(); + for (var i = 0, count = store.getCount() ; i < count; i++) { + var record = store.getAt(i); + if (!expander.recordsExpanded[record.internalId]) { + expander.toggleRow(i, record); + } + } + } + }, + + // 隐藏所有的行扩展列 + f_collapseAllRows: function () { + var expander = this.getPlugin(this.id + '_rowexpander'); + if (expander) { + var store = this.getStore(); + for (var i = 0, count = store.getCount() ; i < count; i++) { + var record = store.getAt(i); + if (expander.recordsExpanded[record.internalId]) { + expander.toggleRow(i, record); + } + } + } + }, + + // http://evilcroco.name/2010/10/making-extjs-grid-content-selectable/ + // IE下允许选中表格中的文本 + /* + f_enableTextSelection: function () { + var elems = Ext.DomQuery.select("div[unselectable=on]", this.el.dom); + for (var i = 0, len = elems.length; i < len; i++) { + Ext.get(elems[i]).set({ 'unselectable': 'off' }).removeCls('x-unselectable'); + } + }, + */ + + // 获取选中的行数,或者单元格数(单元格编辑模式) + f_getSelectedCount: function () { + var selectedCount = 0; + var sm = this.getSelectionModel(); + if (sm.hasSelection()) { + if (sm.getCount) { + selectedCount = sm.getCount(); + } else { + // 单元格编辑模式,只可能选中一个单元格 + selectedCount = 1; + } + } + return selectedCount; + }, + + // 选中某些行 + f_selectRows: function (rows) { + rows = rows || this.f_state['SelectedRowIndexArray'] || []; + var sm = this.getSelectionModel(); + if (sm.select) { + sm.deselectAll(true); + Ext.Array.each(rows, function (row, index) { + // select( records, [keepExisting], [suppressEvent] ) + sm.select(row, true, true); + }); + } + }, + + // 选中全部行 + f_selectAllRows: function () { + var sm = this.getSelectionModel(); + if (sm.selectAll) { + sm.selectAll(true); + } + }, + + // 获取选中的行 + f_getSelectedRows: function () { + var selectedRows = []; + var sm = this.getSelectionModel(); + if (sm.getSelection) { + var selection = sm.getSelection(); + var store = this.getStore(); + + Ext.Array.each(selection, function (record, index) { + selectedRows.push(store.indexOf(record)); + }); + } + + return selectedRows; + }, + + + // 选中单元格(AllowCellEditing) + f_selectCell: function (cell) { + cell = cell || this.f_state['SelectedCell'] || []; + var sm = this.getSelectionModel(); + if (sm.select) { + if (cell.length === 2) { + sm.setCurrentPosition({ + row: cell[0], + column: cell[1] + }); + } else { + // TODO: + //sm.deselectAll(); + } + } + }, + + // 获取选中的单元格(AllowCellEditing) + f_getSelectedCell: function () { + var selectedCell = [], currentPos; + var sm = this.getSelectionModel(); + if (sm.getCurrentPosition) { + currentPos = sm.getCurrentPosition(); + if (currentPos) { + selectedCell = [currentPos.row, currentPos.columnHeader.f_columnIndex]; + } + } + return selectedCell; + }, + + + // 获取隐藏列的名称列表 + f_getHiddenColumns: function () { + var hiddens = [], columns = this.f_getColumns(); + Ext.Array.each(columns, function (column, index) { + var columnId = column.id; + + // 行扩展列需要单独处理,id属性不是 expander + if (!column.dataIndex && column.innerCls && column.innerCls.indexOf('row-expander') > 0) { + columnId = 'expander'; + + } + + if (column.isHidden()) { + hiddens.push(columnId); + } + }); + return hiddens; + }, + + // 隐藏需要隐藏的列,显示不需要隐藏的列 + f_updateColumnsHiddenStatus: function (hiddens) { + hiddens = hiddens || this.f_state['HiddenColumns'] || []; + var columns = this.f_getColumns(); + Ext.Array.each(columns, function (column, index) { + var columnId = column.id; + + // 行扩展列需要单独处理,id属性不是 expander + if (!column.dataIndex && column.innerCls && column.innerCls.indexOf('row-expander') > 0) { + columnId = 'expander'; + } + + if (Ext.Array.indexOf(hiddens, columnId) !== -1) { + column.setVisible(false); + } else { + column.setVisible(true); + } + }); + }, + + // 初始化排序列头 + f_initSortHeaders: function () { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(); + + // 为所有可排序列添加手型光标 + Ext.Array.each(columns, function (item, index) { + if (item['sortable']) { + Ext.get(item.id).addCls('cursor-pointer'); + } + }); + }, + + // 设置表格标题栏的排序图标 + f_setSortIcon: function (sortColumnID, sortDirection) { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(), headers = gridEl.select('.x-column-header'); + + // 清空所有可排序列的排序箭头 + headers.removeCls(['x-column-header-sort-DESC', 'x-column-header-sort-ASC']); + + // 为所有可排序列添加手型光标 + Ext.Array.each(columns, function (item, index) { + if (item['sortable']) { + Ext.get(item.id).addCls('cursor-pointer'); + } + }); + + // 设置当前列的排序箭头 + if (sortColumnID) { + Ext.get(sortColumnID).addCls('x-column-header-sort-' + sortDirection.toUpperCase()); + } + + }, + + // 获取表格列 + f_getColumns: function () { + /* + var columns = []; + var configColumns = this.getColumnModel().config; + Ext.Array.each(configColumns, function (item, index) { + // expander也属于表格列的一种类型,否则设置f_setSortIcon会出错 + if (item.id !== 'numberer' && item.id !== 'checker') { // && item.id !== 'expander' + columns.push(item); + } + }); + */ + + // columns 属性不包含行扩展列 + //return this.columns; + + // this.columnManager.columns 返回相同内容 + return this.headerCt.getGridColumns(); + }, + + // 这个方法用不到了,现在对States的更新会导致Values的改变,进而促使表格的重新加载 + /* + f_setRowStates: function (states) { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(), states = states || this.f_state['f_states'] || []; + + function setCheckBoxStates(columnIndex, stateColumnIndex) { + var checkboxRows = gridEl.select('.x-grid-body .x-grid-row .x-grid-td-' + columns[columnIndex].id + ' .f-grid-checkbox'); + checkboxRows.each(function (row, rows, index) { + if (states[index][stateColumnIndex]) { + if (row.hasCls('box-grid-checkbox-unchecked-disabled')) { + row.removeCls('box-grid-checkbox-unchecked-disabled'); + } else { + row.removeCls('box-grid-checkbox-unchecked'); + } + } else { + if (row.hasCls('box-grid-checkbox-disabled')) { + row.addCls('box-grid-checkbox-unchecked-disabled') + } else { + row.addCls('box-grid-checkbox-unchecked') + } + } + }); + } + + var stateColumnIndex = 0; + Ext.Array.each(columns, function (column, index) { + if (column['f_persistState']) { + if (column['f_persistStateType'] === 'checkbox') { + setCheckBoxStates(index, stateColumnIndex); + stateColumnIndex++; + } + } + }); + }, + */ + + // 获取列状态(目前只有CheckBoxField用到) + f_getStates: function () { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(), states = []; + + function getCheckBoxStates(columnIndex) { + var checkboxRows = gridEl.select('.x-grid-row .x-grid-cell-' + columns[columnIndex].id + ' .f-grid-checkbox'); + var columnStates = []; + checkboxRows.each(function (row, index) { + if (row.hasCls('unchecked')) { + columnStates.push(false); + } else { + columnStates.push(true); + } + }); + return columnStates; + } + + Ext.Array.each(columns, function (column, index) { + if (column['f_persistState']) { + if (column['f_persistStateType'] === 'checkbox') { + states.push(getCheckBoxStates(index)); + } + } + }); + + // 把列状态列表转换为行状态列表,与后台数据保持一致 + var i, resolvedStates = [], rowState, rowCount; + if (states.length > 0) { + rowCount = states[0].length; + for (i = 0; i < rowCount; i++) { + rowState = []; + Ext.Array.each(states, function (state, index) { + rowState.push(state[i]); + }); + resolvedStates.push(rowState); + } + } + + return resolvedStates; + }, + + // 提交客户端改变 + f_commitChanges: function () { + + if (this.f_cellEditing) { + this.getStore().commitChanges(); + this.f_initRecordIDs(); + } + + }, + + + // 从Store中删除选中的行(或者单元格) + f_deleteSelected: function () { + var $this = this; + var store = this.getStore(); + + var sm = this.getSelectionModel(); + if (sm.getSelection) { + var rows = this.f_getSelectedRows(); + Ext.Array.each(rows, function (rowIndex, index) { + store.removeAt(rowIndex); + }); + } else if (sm.getSelectedCell) { + var selectedCell = this.f_getSelectedCell(); + if (selectedCell.length) { + store.removeAt(selectedCell[0]); + } + } + }, + + // 添加一条新纪录 + f_addNewRecord: function (defaultObj, appendToEnd) { + var i, count, store = this.getStore(); + var newRecord = defaultObj; //new Ext.data.Model(defaultObj); + + this.f_cellEditing.cancelEdit(); + + var rowIndex = 0; + if (appendToEnd) { + store.add(newRecord); + rowIndex = store.getCount() - 1; + } else { + store.insert(0, newRecord); + rowIndex = 0; + } + this.f_cellEditing.startEditByPosition({ + row: rowIndex, + column: this.f_firstEditableColumnIndex() + }); + }, + + //// 获取新增的行索引(在修改后的列表中) + //f_getNewAddedRows: function () { + // var $this = this; + // var newAddedRows = []; + // this.getStore().each(function (record, index) { + // if (Ext.Array.indexOf($this.f_recordIDs, record.id) < 0) { + // newAddedRows.push(index); + // } + // }); + // return newAddedRows; + //}, + + // 获取删除的行索引(在原始的列表中) + f_getDeletedRows: function () { + var currentRecordIDs = [], deletedRows = []; + this.getStore().each(function (record, index) { + currentRecordIDs.push(record.id); + }); + + // 快速判断是否存在行被删除的情况 + if (currentRecordIDs.join('') === this.f_recordIDs.join('')) { + return deletedRows; + } + + Ext.Array.each(this.f_recordIDs, function (recordID, index) { + if (Ext.Array.indexOf(currentRecordIDs, recordID) < 0) { + deletedRows.push(index); + } + }); + return deletedRows; + }, + + f_firstEditableColumnIndex: function () { + var i = 0, count = this.columns.length, column; + for (; i < count; i++) { + column = this.columns[i]; + if ((column.getEditor && column.getEditor()) || column.xtype === 'checkcolumn') { + return i; + } + } + return 0; + }, + + f_columnEditable: function (columnID) { + var i = 0, count = this.columns.length, column; + for (; i < count; i++) { + column = this.columns[i]; + if (column.id === columnID) { + if ((column.getEditor && column.getEditor()) || column.xtype === 'checkcolumn') { + return true; + } else { + return false; + } + } + } + return false; + }, + + // 获取用户修改的单元格值 + f_getModifiedData: function () { + var me = this, i, j, count, columns = this.f_getColumns(); + + /* + Ext.Array.each(columns, function (column, index) { + columnMap[column.id] = column; + }); + + function checkColumnEditable(columnID) { + var column = columnMap[columnID]; + if (column && (column.hasEditor() || column.xtype === 'checkcolumn')) { + return true; + } + return false; + } + */ + + var modifiedRows = []; + var store = this.getStore(); + var modifiedRecords = store.getModifiedRecords(); + var rowIndex, rowData, newData, modifiedRecord, recordID, rowIndexOriginal; + for (i = 0, count = modifiedRecords.length; i < count; i++) { + modifiedRecord = modifiedRecords[i]; + recordID = modifiedRecord.id; + rowIndex = store.indexOf(modifiedRecord); + rowData = modifiedRecord.data; + if (rowIndex < 0) { + continue; + } + + // 本行数据在原始数据集合中的行索引 + rowIndexOriginal = Ext.Array.indexOf(this.f_recordIDs, recordID); + if (rowIndexOriginal < 0) { + var newRowData = {}; + // 删除那些不能编辑的列 + for (var columnID in rowData) { + if (this.f_columnEditable(columnID)) { + //delete rowData[columnID]; + var rowDataColumn = rowData[columnID]; + // 如果是日期对象,则转化为字符串 + if (F.util.isDate(rowDataColumn)) { + rowDataColumn = F.util.resolveGridDateToString(me.f_fields, columnID, rowDataColumn); + } + newRowData[columnID] = rowDataColumn; + } + } + // 新增数据行 + modifiedRows.push([rowIndex, -1, newRowData]); + } else { + var rowModifiedObj = {}; + for (var columnID in modifiedRecord.modified) { + if (this.f_columnEditable(columnID)) { + newData = rowData[columnID]; + // 如果是日期对象,则转化为字符串 + if (F.util.isDate(newData)) { + newData = F.util.resolveGridDateToString(me.f_fields, columnID, newData); + } + rowModifiedObj[columnID] = newData; + } + } + // 修改现有数据行 + modifiedRows.push([rowIndex, rowIndexOriginal, rowModifiedObj]); + } + } + + // 结果按照 rowIndex 升序排序 + return modifiedRows.sort(function (a, b) { return a[0] - b[0]; }); + } + + }); +} + + +if (Ext.tree.Panel) { + Ext.override(Ext.tree.Panel, { + + f_loadData: function () { + var datas = this.f_state['F_Nodes']; + var nodes = this.f_tranformData(datas); + var root = this.getRootNode(); + if (root) { + root.removeAll(); + } + this.setRootNode({ + //id: this.id + '_root', + expanded: true, + children: nodes + }); + }, + + f_tranformData: function (datas) { + var that = this, i = 0, nodes = []; + for (i = 0; i < datas.length; i++) { + var data = datas[i], node = {}; + + // 0 - Text + // 1 - Leaf + // 2 - NodeID + // 3 - Enabled + // 4 - EnableCheckBox + // 5 - Checked + // 6 - Expanded + // 7 - NavigateUrl + // 8 - Target + // 9 - href + // 10 - Icon + // 11 - IconUrl + // 12 - iconUrl + // 13 - ToolTip + // 14 - OnClientClick + // 15 - EnableClickEvent + // 16 - CommandName + // 17 - CommandArgument + + // 18 - EnableCheckEvent + // 19 - EnableExpandEvent + // 20 - EnableCollapseEvent + + // 21 - Nodes + node.text = data[0]; + node.leaf = !!data[1]; + node.id = data[2]; + node.disabled = !data[3]; + if (!!data[4]) { + // node.checked === undefined, no checkbox + node.checked = !!data[5]; + } + if (!data[1]) { + node.expanded = !!data[6]; + } + if (data[9]) { + node.href = data[9]; + node.hrefTarget = data[8]; + } + if (data[12]) { + node.icon = data[12]; + } + node.qtip = data[13]; + + if (data[14]) { + node.f_clientclick = data[14]; + } + node.f_enableclickevent = !!data[15]; + node.f_commandname = data[16]; + node.f_commandargument = data[17]; + + node.f_enablecheckevent = !!data[18]; + + node.f_enableexpandevent = !!data[19]; + node.f_enablecollapseevent = !!data[20]; + + + if (data[21] && data[21].length > 0) { + node.children = that.f_tranformData(data[21]); + } + + nodes.push(node); + } + return nodes; + }, + + f_getExpandedNodes: function (nodes) { + var i = 0, that = this, expandedNodes = []; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + if (node.isExpanded()) { + expandedNodes.push(node.getId()); + } + if (node.hasChildNodes()) { + expandedNodes = expandedNodes.concat(that.f_getExpandedNodes(node.childNodes)); + } + } + + return expandedNodes; + }, + + f_getCheckedNodes: function () { + var checkedIDs = [], checkedArray = this.getChecked(); + Ext.Array.each(checkedArray, function (node, index) { + checkedIDs.push(node.getId()); + }); + return checkedIDs; + }, + + f_getSelectedNodes: function () { + var selectedNodeIDs = []; + var sm = this.getSelectionModel(); + if (sm.getSelection) { + var selection = sm.getSelection(); + + Ext.Array.each(selection, function (node, index) { + selectedNodeIDs.push(node.getId()); + }); + } + + return selectedNodeIDs; + }, + + f_selectNodes: function () { + var nodeIDs = this.f_state['SelectedNodeIDArray'] || []; + var model = this.getSelectionModel(), store = this.getStore(), nodes = [], node; + Ext.Array.each(nodeIDs, function (nodeID, index) { + node = store.getNodeById(nodeID); + if (node) { + nodes.push(node); + } + }); + model.deselectAll(true); + model.select(nodes); + } + + + }); +} + + +if (Ext.PagingToolbar) { + // We don't use this Class in current version. + Ext.override(Ext.PagingToolbar, { + + f_hideRefresh: function () { + var index = this.items.indexOf(this.refresh); + this.items.get(index - 1).hide(); + this.refresh.hide(); + } + + }); +} + + +if (Ext.tab.Panel) { + Ext.override(Ext.tab.Panel, { + + f_autoPostBackTabsContains: function (tabId) { + var tabs = this.f_state['F_AutoPostBackTabs']; + return tabs.indexOf(tabId) !== -1; + }, + + f_setActiveTab: function () { + var tabIndex = this.f_state['ActiveTabIndex']; + this.setActiveTab(tabIndex); + }, + + f_getActiveTabIndex: function () { + return this.items.indexOf(this.getActiveTab()); + }, + + /* + activateNextTab: function (c) { + if (c == this.activeTab) { + var next = this.stack.next(); + if (next) { + this.setActiveTab(next); + } + if (next = this.items.find(function (t) { return t.tabEl.style.display !== 'none'; })) { + // Find the first visible tab and set it active tab. + this.setActiveTab(next); + } else { + this.setActiveTab(null); + } + } + }, + */ + + hideTab: function (tabId) { + var tab = F(tabId).tab; + if (tab) { + tab.hide(); + } + }, + + showTab: function (tabId) { + var tab = F(tabId).tab; + if (tab) { + tab.show(); + } + }, + + addTab: function (id, url, title, closable) { + var options = { + 'cls': 'f-tab' + }, tab; + if (typeof (id) === 'string') { + Ext.apply(options, { + 'id': id, + 'title': title, + 'closable': closable, + 'url': url + }); + } else { + // 如果id不是字符串,则id为对象并且只有一个参数 + Ext.apply(options, id); + } + + tab = this.getTab(options.id); + if (!tab) { + Ext.apply(options, { + 'f_dynamic_added_tab': true, + 'html': '", IFrameUrl, IFrameName)); - //} - - #endregion - - } - - } - - /// - /// 渲染控件的结束标签 - /// - /// 输出流 - protected override void RenderEndTag(HtmlTextWriter writer) - { - - if (RenderChildrenAsContent) - { - writer.Write(""); - } - - - base.RenderEndTag(writer); - } - #endregion - - #region AddParsedSubObject - - //protected override void AddParsedSubObject(object obj) - //{ - // if (RenderChildrenAsContent) - // { - // base.AddParsedSubObject(obj); - // } - // else - // { - // ControlBase c = obj as ControlBase; - // if (c != null) - // { - // c.RenderWrapperNode = false; - // base.AddParsedSubObject(c); - // } - // } - //} - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (EnableIFrame) - { - if (PropertyModified("IFrameUrl")) - { - sb.AppendFormat("X.wnd.updateIFrameNode({0},{1});", XID, JsHelper.Enquote(IFrameUrl)); - } - } - - AddAjaxScript(sb); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - if (EnableFrame) - { - OB.AddProperty("frame", true); - } - - if (FooterBarAlign != FooterBarAlign.Right) - { - OB.AddProperty("buttonAlign", FooterBarAlignHelper.GetName(FooterBarAlign)); - } - - #region Items - - if (!RenderChildrenAsContent) - { - if (Items.Count > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (ControlBase item in Items) - { - if (item.Visible) - { - ab.AddProperty(String.Format("{0}", item.XID), true); - } - } - - OB.AddProperty("items", ab.ToString(), true); - } - } - - #endregion - - #region Toolbars - - foreach (Toolbar bar in Toolbars) - { - string toolbarID = String.Format("{0}", bar.XID); - - string barKey = ToolbarPositionHelper.GetName(bar.Position); - OB.AddProperty(barKey, toolbarID, true); - } - - #endregion - - #region BodyStyle/ShowBorder - - string bodyStyleStr = BodyStyle; - if (!bodyStyleStr.Contains("padding")) - { - if (!String.IsNullOrEmpty(BodyPadding)) - { - bodyStyleStr += String.Format("padding:{0};", BodyPadding); - } - } - - //if (EnableBackgroundColor) - //{ - // if (!bodyStyleStr.Contains("background-color")) - // { - // string backgroundColorStyleStr = GlobalConfig.GetDefaultBackgroundColor(); - // if (!String.IsNullOrEmpty(backgroundColorStyleStr)) - // { - // bodyStyleStr += String.Format("background-color:{0};", backgroundColorStyleStr); - // } - // } - //} - - OB.AddProperty("bodyStyle", bodyStyleStr); - - OB.AddProperty("border", ShowBorder); - - - #endregion - - #region Width/Height - - //// 对于Panel,如果宽度/高度没有定义 - //if (Width == Unit.Empty && AutoWidth) - //{ - // OB.AddProperty("autoWidth", true); - //} - - //if (Height == Unit.Empty && AutoHeight) - //{ - // OB.AddProperty("autoHeight", true); - //} - - - //// 如果父控件是容器控件(不是ContentPanel),并且Layout != LayoutType.Container, - //// 则设置AutoWidth/AutoHeight都为false - //if (Parent is PanelBase) - //{ - // PanelBase parent = Parent as PanelBase; - // if (!(parent is ContentPanel) && parent.Layout != Layout.Container) - // { - // OB.RemoveProperty("autoHeight"); - // OB.RemoveProperty("autoWidth"); - // } - //} - - - - if (AutoScroll) - { - OB.AddProperty("autoScroll", true); - } - - - #region old code - //// 如果是 PageLayout 中的Panel,不能设置AutoWidth - //if (Parent is PageLayout) - //{ - // // region - // if (Region != Region_Default) OB.AddProperty(OptionName.Region, RegionTypeName.GetName(Region.Value)); - //} - //else - //{ - // // 对于Panel,如果宽度/高度没有定义,则使用自动宽度和高度 - // if (Width == Unit.Empty) - // { - // OB.AddProperty(OptionName.AutoWidth, true); - // } - - // if (Height == Unit.Empty) - // { - // OB.AddProperty(OptionName.AutoHeight, true); - // } - - //} - - //// 如果父控件是容器控件,并且Layout=Fit,则设置AutoWidth/AutoHeight都为false - //if (Parent is PanelBase) - //{ - // PanelBase parentPanel = Parent as PanelBase; - // if (parentPanel.Layout == LayoutType.Fit - // || parentPanel.Layout == LayoutType.Anchor - // || parentPanel.Layout == LayoutType.Border) - // { - // OB.RemoveProperty(OptionName.AutoHeight); - // OB.RemoveProperty(OptionName.AutoWidth); - // } - - //} - - #endregion - - #endregion - - #region EnableIFrame - - if (EnableIFrame) - { - #region old code - - //string iframeJsContent = String.Empty; - - //string frameUrl = ResolveUrl(IFrameUrl); - //JsObjectBuilder iframeBuilder = new JsObjectBuilder(); - //if (IFrameDelayLoad) - //{ - // iframeBuilder.AddProperty(OptionName.Src, "#"); - //} - //else - //{ - // iframeBuilder.AddProperty(OptionName.Src, frameUrl); - //} - //iframeBuilder.AddProperty(OptionName.LoadMask, false); - //iframeJsContent += String.Format("var {0}=new Ext.ux.ManagedIFrame('{0}',{1});", IFrameID, iframeBuilder.ToString()); - - //if (IFrameDelayLoad) - //{ - // iframeJsContent += String.Format("{0}_url='{1}';", IFrameID, frameUrl); - //} - - //iframeJsContent += "\r\n"; - - //AddStartupScript(this, iframeJsContent); - - #endregion - - // 注意: - // 如下依附于现有对象的属性名称的定义规则:x_property1 - // 存储于当前对象实例中 - OB.AddProperty("x_iframe", true); - OB.AddProperty("x_iframe_url", IFrameUrl); - OB.AddProperty("x_iframe_name", IFrameName); - - // 如果定义了IFrameUrl,则直接写到页面中,否则先缓存到此对象中 - if (!String.IsNullOrEmpty(IFrameUrl)) - { - //_writeIframeToHtmlDocument = true; - OB.AddProperty("x_iframe_loaded", true); - // 直接添加iframe属性 - OB.AddProperty("html", String.Format("", IFrameUrl, IFrameName)); - } - else - { - //_writeIframeToHtmlDocument = false; - OB.AddProperty("x_iframe_loaded", false); - } - - #region old code - - //// If current panel is Tab, then process the IFrameDelayLoad property. - //Tab tab = this as Tab; - //if (tab != null && tab.IFrameDelayLoad) - //{ - // // 如果是Tab,并且此Tab不是激活的,则不添加iframe - // //_writeIframeToHtmlDocument = false; - // OB.AddProperty("box_property_iframe_loaded", false); - //} - //else - //{ - // // 如果定义了IFrameUrl,则直接写到页面中,否则先缓存到此对象中 - // if (!String.IsNullOrEmpty(IFrameUrl)) - // { - // //_writeIframeToHtmlDocument = true; - // OB.AddProperty("box_property_iframe_loaded", true); - // // 直接添加iframe属性 - // OB.AddProperty("html", String.Format("", IFrameUrl, IFrameName)); - // } - // else - // { - // //_writeIframeToHtmlDocument = false; - // OB.AddProperty("box_property_iframe_loaded", false); - // } - //} - - #endregion - } - - #endregion - - #region RoundBorder - - //if (RoundBorder) OB.AddProperty(OptionName.Frame, true); - - #endregion - - #region oldcode - - //if (EnableLargeHeader) - //{ - // OB.AddProperty("cls", "box-panel-big-header"); - //} - - - //OB.AddProperty("animCollapse", false); - - #endregion - - #region ContentEl - - //string finallyScript = String.Empty; - - if (RenderChildrenAsContent) - { - OB.AddProperty("contentEl", ContentID); - - // 在页面元素渲染完成后,才显示容器控件的内容 - //string renderScript = String.Format("Ext.get('{0}').show();", ContentID); - //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); - - //string beforerenderScript = String.Format("Ext.get('{0}').setStyle('display','');", ChildrenContentID); - //OB.Listeners.AddProperty("beforerender", "function(component){" + beforerenderScript + "}", true); - - - // 这一段的逻辑(2008-9-1): - // 如果是页面第一次加载 + 此Panel在Tab中 + 此Tab不是当前激活Tab + 此Tab的TabStrip启用了延迟加载 - // 那么在页面加载完毕后,把此Panel给隐藏掉,等此Panel渲染到页面中时再显示出来 - - Tab tab = ControlUtil.FindParentControl(this, typeof(Tab)) as Tab; - if (tab != null) - { - TabStrip tabStrip = tab.Parent as TabStrip; - if (tabStrip.EnableDeferredRender && tabStrip.Tabs[tabStrip.ActiveTabIndex] != tab) - { - // 页面第一次加载时,在显示(控件的render事件)之前要先隐藏 - AddStartupAbsoluteScript(String.Format("Ext.get('{0}').setStyle('display','none');", ContentID)); - } - } - - } - - #endregion - } - - #region oldcode - - //protected void AddItemsToOB() - //{ - // AddItemsToOB(Controls); - //} - - - - ///// - ///// 将controls添加到此控件的Items属性 - ///// - ///// - //protected void AddItemsToOB(ControlCollection controls) - //{ - // // 运行到这里,Controls里全部是ControlBase类型了(在AddParsedSubObject中过滤的)。 - // if (controls.Count > 0) - // { - // JsArrayBuilder ab = new JsArrayBuilder(); - // foreach (Control item in controls) - // { - // // 再次检查是否ControlBase,并且只有Visible时才添加 - // // 还有一个例外情况,Window控件不作为任何控件的子控件,Window的RenderImmediately一定为true - // if (item is ControlBase && item.Visible && !(item is Window)) - // { - // string itemJSId = String.Format("{0}", (item as ControlBase).ClientJavascriptID); - // if (item is Toolbar) - // { - // Toolbar bar = item as Toolbar; - // if (bar.Position == ToolbarPosition.Top) - // { - // OB.AddProperty(OptionName.Tbar, itemJSId, true); - // } - // else - // { - // OB.AddProperty(OptionName.Bbar, itemJSId, true); - // } - // } - // else - // { - // ab.AddProperty(itemJSId, true); - // } - // } - // } - - // // 有内容时才添加items集合 - // if (ab.Count > 0) - // { - // OB.AddProperty(OptionName.Items, ab.ToString(), true); - // } - // } - //} - - - - #endregion - - #endregion - - #region ResolveIFrameUrl - - internal string ResolveIFrameUrl(string url) - { - if (String.IsNullOrEmpty(url)) - { - return String.Empty; - } - - if (url == "#" || url == "about:blank") - { - return url; - } - - //&& IFrameUrl != "#" && IFrameUrl != "about:blank" - - // 可能会通过的方式传递js参数 - if (url.Contains("<")) - { - url = url.Replace("<", "<"); - } - if (url.Contains(">")) - { - url = url.Replace(">", ">"); - } - - - // 这个在 v1.2.9 以后就不需要了 - //// 加上后缀 - //if (this is Window) - //{ - // if (!url.Contains("box_parent_client_id=")) - // { - // if (!url.Contains("?")) - // { - // url += "?"; - // } - // else - // { - // url += "&"; - // } - // url += "box_parent_client_id=" + ClientID; - // } - //} - - - // 转换为客户端Url - url = ResolveUrl(url); - - return url; - } - - #endregion - - #region RefreshIFrame GetRefreshIFrameReference - - /// - /// 刷新面板中的IFrame页面 - /// - public void RefreshIFrame() - { - PageContext.RegisterStartupScript(GetRefreshIFrameReference()); - } - - /// - /// 获取刷新面板中IFrame页面的客户端脚本 - /// - /// 客户端脚本 - public string GetRefreshIFrameReference() - { - return String.Format("{0}.body.query('iframe')[0].contentWindow.location.reload();", ScriptID); - } - - #endregion - - #region Reset - - /// - /// 重置面板中所有字段 - /// - public virtual void Reset() - { - PageContext.RegisterStartupScript(GetResetReference()); - } - - /// - /// 获取重置面板中所有字段的客户端脚本 - /// - /// - public virtual string GetResetReference() - { - return String.Format("{0}.x_reset();", ScriptID); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: PanelBase.cs + * CreatedOn: 2008-05-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Web.UI.Design; + +namespace FineUI +{ + /// + /// 面板控件基类(抽象类) + /// + public abstract class PanelBase : Container + { + #region Constructor + + /// + /// 构造函数 + /// + public PanelBase() + { + AddServerAjaxProperties("IFrameUrl"); + AddClientAjaxProperties(); + } + + #endregion + + #region virtual properties + + ///// + ///// 是否自动高度 + ///// + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(false)] + //[Description("是否自动高度")] + //public virtual bool AutoHeight + //{ + // get + // { + // object obj = FState["AutoHeight"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["AutoHeight"] = value; + // } + //} + + + ///// + ///// 是否启用自动宽度,通过设置CSS属性height:auto来实现 + ///// + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(false)] + //[Description("是否自动宽度,通过设置CSS属性height:auto来实现")] + //public virtual bool AutoWidth + //{ + // get + // { + // object obj = FState["AutoWidth"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["AutoWidth"] = value; + // } + //} + + + /// + /// 是否自动滚动 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(false)] + [Description("是否自动滚动")] + public bool AutoScroll + { + get + { + object obj = FState["AutoScroll"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoScroll"] = value; + } + } + + #endregion + + #region Properties + + + /// + /// 启用自定义的圆角边框 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(false)] + [Description("启用自定义的圆角边框")] + public bool EnableFrame + { + get + { + object obj = FState["EnableFrame"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableFrame"] = value; + } + } + + ///// + ///// 使用大的标题栏 + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue(false)] + //[Description("使用大的标题栏")] + //public bool EnableLargeHeader + //{ + // get + // { + // object obj = FState["EnableLargeHeader"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableLargeHeader"] = value; + // } + //} + + + ///// + ///// 是否显示浅色的背景色 + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示浅色的背景色")] + //public virtual bool EnableLightBackgroundColor + //{ + // get + // { + // object obj = FState["EnableLightBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableLightBackgroundColor"] = value; + // } + //} + + + ///// + ///// 废弃EnableBackgroundColor属性,以便和ExtJS保持一致。 + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue(false)] + //[Description("废弃EnableBackgroundColor属性,以便和ExtJS保持一致。")] + //[Obsolete("此属性已废除,可以使用BodyStyle来达到想要的效果")] + //public virtual bool EnableBackgroundColor + //{ + // get + // { + // object obj = FState["EnableBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableBackgroundColor"] = value; + // } + //} + + //private bool RoundBorder_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否圆角边框并")] + //public virtual bool RoundBorder + //{ + // get + // { + // object obj = BoxState["RoundBorder"]; + // return obj == null ? RoundBorder_Default : (bool)obj; + // } + // set + // { + // BoxState["RoundBorder"] = value; + // } + //} + + + /// + /// 内容区域的样式 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue("")] + [Description("内容区域的样式")] + public string BodyStyle + { + get + { + object obj = FState["BodyStyle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["BodyStyle"] = value; + } + } + + + /// + /// 内容区域的内边距,字符串类型,可以设置上下左右的内边距,比如'0px 5px'或'5px 10px 2px 2px' + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(String), "")] + [Description("内容区域的内边距,字符串类型,可以设置上下左右的内边距,比如'0px 5px'或'5px 10px 2px 2px'")] + public virtual string BodyPadding + { + get + { + object obj = FState["BodyPadding"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["BodyPadding"] = value; + } + } + + + /// + /// 是否显示边框 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("是否显示边框")] + public virtual bool ShowBorder + { + get + { + object obj = FState["ShowBorder"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowBorder"] = value; + } + } + + + + #endregion + + #region old code + //protected virtual bool IsIFramePanel + //{ + // get + // { + // return false; + // } + //} + #endregion + + #region Toolbars + + private ToolbarCollection _toolbars; + + /// + /// 工具栏控件 + /// + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Description("工具栏控件")] + public virtual ToolbarCollection Toolbars + { + get + { + if (_toolbars == null) + { + _toolbars = new ToolbarCollection(this); + } + return _toolbars; + } + } + #endregion + + #region Items + + private ControlBaseCollection items; + + /// + /// 子控件 + /// + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Description("子控件")] + [Editor(typeof(ControlBaseItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ControlBaseCollection Items + { + get + { + if (items == null) + { + items = new ControlBaseCollection(this); + } + return items; + } + } + #endregion + + #region internal RenderChildrenAsContent + + private ITemplate content = null; + + /// + /// 子控件 + /// + [Browsable(false)] + [DefaultValue(null)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("子控件")] + public virtual ITemplate Content + { + get + { + return content; + } + set + { + content = value; + } + } + + + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("渲染子控件为容器内容")] + internal virtual bool RenderChildrenAsContent + { + get + { + object obj = FState["RenderChildrenAsContent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["RenderChildrenAsContent"] = value; + } + } + #endregion + + #region IFrameUrl/IFrameName/EnableIFrame + + + /// + /// [AJAX属性]IFrame的地址 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]IFrame的地址")] + public virtual string IFrameUrl + { + get + { + object obj = FState["IFrameUrl"]; + if (obj == null) + { + return String.Empty; + } + else + { + string url = (string)obj; + return ResolveIFrameUrl(url); + } + } + set + { + FState["IFrameUrl"] = value; + } + } + + + /// + /// IFrame的名称 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue("")] + [Description("IFrame的名称")] + public virtual string IFrameName + { + get + { + object obj = FState["IFrameName"]; + if (obj == null) + { + if (DesignMode) + { + return String.Empty; + } + else + { + return String.Format("{0}_iframe", XID); + } + } + return (string)obj; + } + set + { + FState["IFrameName"] = value; + } + } + + + /// + /// 是否启用IFrame + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(false)] + [Description("是否启用IFrame")] + public virtual bool EnableIFrame + { + get + { + object obj = FState["EnableIFrame"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableIFrame"] = value; + } + } + + #endregion + + #region ContentID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string ContentID + { + get + { + return String.Format("{0}_Content", ClientID); + } + } + + //protected string _childrenContentClass = String.Empty; + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("子控件的容器的样式类(Tab用到了)")] + //protected virtual string ChildrenContentClass + //{ + // get + // { + // return _childrenContentClass; + // } + // set + // { + // _childrenContentClass = value; + // } + //} + + #endregion + + #region RenderBeginTag/RenderEndTag + + // 现在不需要这样处理Iframe了,用html属性 + ///// + ///// 是否向页面写iframe + ///// + //private bool _writeIframeToHtmlDocument = false; + /// + /// 渲染控件的开始标签 + /// + /// 输出流 + protected override void RenderBeginTag(HtmlTextWriter writer) + { + base.RenderBeginTag(writer); + + if (RenderChildrenAsContent) + { + #region old code + //HtmlNodeBuilder nodeBuilder = new HtmlNodeBuilder("div"); + //nodeBuilder.SetProperty("id", ChildrenContentID); + //nodeBuilder.SetProperty("style", "display:none;"); + + //if (!String.IsNullOrEmpty(ChildrenContentClass)) + //{ + // nodeBuilder.SetProperty("class", ChildrenContentClass); + //} + + //string startDivHtml = nodeBuilder.ToString(); + //if (startDivHtml.EndsWith("")) + //{ + // startDivHtml = startDivHtml.Substring(0, startDivHtml.Length - "".Length); + //} + //writer.Write(startDivHtml); + #endregion + + #region ChildrenContentID + + StringBuilder sb = new StringBuilder(); + sb.Append(""); + + writer.Write(sb.ToString()); + + #endregion + + #region old code + + //if (EnableIFrame && _writeIframeToHtmlDocument) + //{ + // writer.Write(String.Format("", IFrameUrl, IFrameName)); + //} + + #endregion + + } + + } + + /// + /// 渲染控件的结束标签 + /// + /// 输出流 + protected override void RenderEndTag(HtmlTextWriter writer) + { + + if (RenderChildrenAsContent) + { + writer.Write(""); + } + + + base.RenderEndTag(writer); + } + #endregion + + #region CreateChildControls + + /// + /// 创建子控件 + /// + protected override void CreateChildControls() + { + base.CreateChildControls(); + + if (Content != null) + { + WebControl ctrl = new WebControl(HtmlTextWriterTag.Div); + ctrl.ID = "Content"; + Content.InstantiateIn(ctrl); + + Controls.Add(ctrl); + } + } + + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (EnableIFrame) + { + if (PropertyModified("IFrameUrl")) + { + sb.AppendFormat("F.wnd.updateIFrameNode({0},{1});", XID, JsHelper.Enquote(IFrameUrl)); + } + } + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (EnableFrame) + { + OB.AddProperty("frame", true); + } + + + #region Items + + // 如果是 ContentPanel, 启用 IFrame 或者包含 Content, 则不生成 items + if (RenderChildrenAsContent || EnableIFrame || (Content != null)) + { + if (RenderChildrenAsContent || (Content != null)) + { + OB.AddProperty("contentEl", String.Format("{0}", ContentID)); + + } + } + else + { + if (Items.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (ControlBase item in Items) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + + OB.AddProperty("items", ab.ToString(), true); + } + } + + #endregion + + #region Toolbars + + //JsArrayBuilder dockItems = new JsArrayBuilder(); + //foreach (Toolbar bar in Toolbars) + //{ + // dockItems.AddProperty(bar.XID, true); + //} + + //if (this is Grid) + //{ + // Grid grid = this as Grid; + // if (grid.AllowPaging) + // { + // dockItems.AddProperty(grid.Render_PagingID, true); + // } + //} + + Dictionary bars = new Dictionary(); + foreach (Toolbar bar in Toolbars) + { + string barPosition = ToolbarPositionHelper.GetExtName(bar.Position); + + if (!bars.ContainsKey(barPosition)) + { + bars[barPosition] = new JsArrayBuilder(); + } + bars[barPosition].AddProperty(bar.XID, true); + } + + // 将底部工具栏的顺序反转 + if (bars.ContainsKey("bottom")) + { + bars["bottom"].Reverse(); + } + // 表格的分页工具栏 + if (this is Grid) + { + Grid grid = this as Grid; + if (grid.AllowPaging) + { + if (!bars.ContainsKey("bottom")) + { + bars["bottom"] = new JsArrayBuilder(); + } + + bars["bottom"].AddProperty(grid.Render_PagingID, true); + } + } + + + JsArrayBuilder dockItems = new JsArrayBuilder(); + foreach (string barPosition in bars.Keys) + { + foreach (string barItem in bars[barPosition].Properties) + { + dockItems.AddProperty(barItem, true); + } + } + OB.AddProperty("dockedItems", dockItems); + + + #endregion + + #region BodyStyle/ShowBorder + + string bodyStyleStr = BodyStyle; + if (!bodyStyleStr.Contains("padding")) + { + if (!String.IsNullOrEmpty(BodyPadding)) + { + bodyStyleStr += String.Format("padding:{0};", StyleUtil.GetMarginPaddingStyle(BodyPadding)); + } + } + + //if (EnableBackgroundColor) + //{ + // if (!bodyStyleStr.Contains("background-color")) + // { + // string backgroundColorStyleStr = GlobalConfig.GetDefaultBackgroundColor(); + // if (!String.IsNullOrEmpty(backgroundColorStyleStr)) + // { + // bodyStyleStr += String.Format("background-color:{0};", backgroundColorStyleStr); + // } + // } + //} + + OB.AddProperty("bodyStyle", bodyStyleStr); + + OB.AddProperty("border", ShowBorder); + + + #endregion + + #region Width/Height + + //// 对于Panel,如果宽度/高度没有定义 + //if (Width == Unit.Empty && AutoWidth) + //{ + // OB.AddProperty("autoWidth", true); + //} + + //if (Height == Unit.Empty && AutoHeight) + //{ + // OB.AddProperty("autoHeight", true); + //} + + + //// 如果父控件是容器控件(不是ContentPanel),并且Layout != LayoutType.Container, + //// 则设置AutoWidth/AutoHeight都为false + //if (Parent is PanelBase) + //{ + // PanelBase parent = Parent as PanelBase; + // if (!(parent is ContentPanel) && parent.Layout != Layout.Container) + // { + // OB.RemoveProperty("autoHeight"); + // OB.RemoveProperty("autoWidth"); + // } + //} + + + + if (AutoScroll) + { + OB.AddProperty("autoScroll", true); + } + + + #region old code + //// 如果是 PageLayout 中的Panel,不能设置AutoWidth + //if (Parent is PageLayout) + //{ + // // region + // if (Region != Region_Default) OB.AddProperty(OptionName.Region, RegionTypeName.GetName(Region.Value)); + //} + //else + //{ + // // 对于Panel,如果宽度/高度没有定义,则使用自动宽度和高度 + // if (Width == Unit.Empty) + // { + // OB.AddProperty(OptionName.AutoWidth, true); + // } + + // if (Height == Unit.Empty) + // { + // OB.AddProperty(OptionName.AutoHeight, true); + // } + + //} + + //// 如果父控件是容器控件,并且Layout=Fit,则设置AutoWidth/AutoHeight都为false + //if (Parent is PanelBase) + //{ + // PanelBase parentPanel = Parent as PanelBase; + // if (parentPanel.Layout == LayoutType.Fit + // || parentPanel.Layout == LayoutType.Anchor + // || parentPanel.Layout == LayoutType.Border) + // { + // OB.RemoveProperty(OptionName.AutoHeight); + // OB.RemoveProperty(OptionName.AutoWidth); + // } + + //} + + #endregion + + #endregion + + #region EnableIFrame + + if (EnableIFrame) + { + #region old code + + //string iframeJsContent = String.Empty; + + //string frameUrl = ResolveUrl(IFrameUrl); + //JsObjectBuilder iframeBuilder = new JsObjectBuilder(); + //if (IFrameDelayLoad) + //{ + // iframeBuilder.AddProperty(OptionName.Src, "#"); + //} + //else + //{ + // iframeBuilder.AddProperty(OptionName.Src, frameUrl); + //} + //iframeBuilder.AddProperty(OptionName.LoadMask, false); + //iframeJsContent += String.Format("var {0}=new Ext.ux.ManagedIFrame('{0}',{1});", IFrameID, iframeBuilder.ToString()); + + //if (IFrameDelayLoad) + //{ + // iframeJsContent += String.Format("{0}_url='{1}';", IFrameID, frameUrl); + //} + + //iframeJsContent += "\r\n"; + + //AddStartupScript(this, iframeJsContent); + + #endregion + + // 注意: + // 如下依附于现有对象的属性名称的定义规则:x_property1 + // 存储于当前对象实例中 + OB.AddProperty("f_iframe", true); + OB.AddProperty("f_iframe_url", IFrameUrl); + OB.AddProperty("f_iframe_name", IFrameName); + + // 如果定义了IFrameUrl,则直接写到页面中,否则先缓存到此对象中 + if (!String.IsNullOrEmpty(IFrameUrl)) + { + //_writeIframeToHtmlDocument = true; + OB.AddProperty("f_iframe_loaded", true); + // 直接添加iframe属性 + OB.AddProperty("html", String.Format("", IFrameUrl, IFrameName)); + } + else + { + //_writeIframeToHtmlDocument = false; + OB.AddProperty("f_iframe_loaded", false); + } + + #region old code + + //// If current panel is Tab, then process the IFrameDelayLoad property. + //Tab tab = this as Tab; + //if (tab != null && tab.IFrameDelayLoad) + //{ + // // 如果是Tab,并且此Tab不是激活的,则不添加iframe + // //_writeIframeToHtmlDocument = false; + // OB.AddProperty("box_property_iframe_loaded", false); + //} + //else + //{ + // // 如果定义了IFrameUrl,则直接写到页面中,否则先缓存到此对象中 + // if (!String.IsNullOrEmpty(IFrameUrl)) + // { + // //_writeIframeToHtmlDocument = true; + // OB.AddProperty("box_property_iframe_loaded", true); + // // 直接添加iframe属性 + // OB.AddProperty("html", String.Format("", IFrameUrl, IFrameName)); + // } + // else + // { + // //_writeIframeToHtmlDocument = false; + // OB.AddProperty("box_property_iframe_loaded", false); + // } + //} + + #endregion + } + + #endregion + + #region RoundBorder + + //if (RoundBorder) OB.AddProperty(OptionName.Frame, true); + + #endregion + + #region oldcode + + //if (EnableLargeHeader) + //{ + // OB.AddProperty("cls", "f-panel-big-header"); + //} + + + //OB.AddProperty("animCollapse", false); + + #endregion + + #region ContentEl + + //string finallyScript = String.Empty; + + if (RenderChildrenAsContent) + { + OB.AddProperty("contentEl", ContentID); + + // 在页面元素渲染完成后,才显示容器控件的内容 + //string renderScript = String.Format("Ext.get('{0}').show();", ContentID); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); + + //string beforerenderScript = String.Format("Ext.get('{0}').setStyle('display','');", ChildrenContentID); + //OB.Listeners.AddProperty("beforerender", "function(component){" + beforerenderScript + "}", true); + + + // 这一段的逻辑(2008-9-1): + // 如果是页面第一次加载 + 此Panel在Tab中 + 此Tab不是当前激活Tab + 此Tab的TabStrip启用了延迟加载 + // 那么在页面加载完毕后,把此Panel给隐藏掉,等此Panel渲染到页面中时再显示出来 + + //Tab tab = ControlUtil.FindParentControl(this, typeof(Tab)) as Tab; + //if (tab != null) + //{ + // TabStrip tabStrip = tab.Parent as TabStrip; + // if (tabStrip.EnableDeferredRender && tabStrip.Tabs[tabStrip.ActiveTabIndex] != tab) + // { + // // 页面第一次加载时,在显示(控件的render事件)之前要先隐藏 + // AddStartupAbsoluteScript(String.Format("Ext.get('{0}').setStyle('display','none');", ContentID)); + // } + //} + + } + + #endregion + } + + #region oldcode + + //protected void AddItemsToOB() + //{ + // AddItemsToOB(Controls); + //} + + + + ///// + ///// 将controls添加到此控件的Items属性 + ///// + ///// + //protected void AddItemsToOB(ControlCollection controls) + //{ + // // 运行到这里,Controls里全部是ControlBase类型了(在AddParsedSubObject中过滤的)。 + // if (controls.Count > 0) + // { + // JsArrayBuilder ab = new JsArrayBuilder(); + // foreach (Control item in controls) + // { + // // 再次检查是否ControlBase,并且只有Visible时才添加 + // // 还有一个例外情况,Window控件不作为任何控件的子控件,Window的RenderImmediately一定为true + // if (item is ControlBase && item.Visible && !(item is Window)) + // { + // string itemJSId = String.Format("{0}", (item as ControlBase).ClientJavascriptID); + // if (item is Toolbar) + // { + // Toolbar bar = item as Toolbar; + // if (bar.Position == ToolbarPosition.Top) + // { + // OB.AddProperty(OptionName.Tbar, itemJSId, true); + // } + // else + // { + // OB.AddProperty(OptionName.Bbar, itemJSId, true); + // } + // } + // else + // { + // ab.AddProperty(itemJSId, true); + // } + // } + // } + + // // 有内容时才添加items集合 + // if (ab.Count > 0) + // { + // OB.AddProperty(OptionName.Items, ab.ToString(), true); + // } + // } + //} + + + + #endregion + + #endregion + + #region ResolveIFrameUrl + + internal string ResolveIFrameUrl(string url) + { + if (String.IsNullOrEmpty(url)) + { + return String.Empty; + } + + if (url == "#" || url == "about:blank") + { + return url; + } + + //&& IFrameUrl != "#" && IFrameUrl != "about:blank" + + // 可能会通过的方式传递js参数 + if (url.Contains("<")) + { + url = url.Replace("<", "<"); + } + if (url.Contains(">")) + { + url = url.Replace(">", ">"); + } + + + // 这个在 v1.2.9 以后就不需要了 + //// 加上后缀 + //if (this is Window) + //{ + // if (!url.Contains("box_parent_client_id=")) + // { + // if (!url.Contains("?")) + // { + // url += "?"; + // } + // else + // { + // url += "&"; + // } + // url += "box_parent_client_id=" + ClientID; + // } + //} + + + // 转换为客户端Url + url = ResolveUrl(url); + + return url; + } + + #endregion + + #region RefreshIFrame GetRefreshIFrameReference + + /// + /// 刷新面板中的IFrame页面 + /// + public void RefreshIFrame() + { + PageContext.RegisterStartupScript(GetRefreshIFrameReference()); + } + + /// + /// 获取刷新面板中IFrame页面的客户端脚本 + /// + /// 客户端脚本 + public string GetRefreshIFrameReference() + { + return String.Format("{0}.body.query('iframe')[0].contentWindow.location.reload();", ScriptID); + } + + #endregion + + #region Reset + + /// + /// 重置面板中所有字段 + /// + public virtual void Reset() + { + PageContext.RegisterStartupScript(GetResetReference()); + } + + /// + /// 获取重置面板中所有字段的客户端脚本 + /// + /// + public virtual string GetResetReference() + { + return String.Format("{0}.f_reset();", ScriptID); + } + + #endregion + + #region GetClearDirtyReference + + /// + /// 清空面板内表单字段的改变状态 + /// + /// 客户端脚本 + public string GetClearDirtyReference() + { + return String.Format("{0}.f_clearDirty();", ScriptID); + } + + #endregion + } +} diff --git a/FineUI/BaseWebControls/BoxComponent.Container/Container.cs b/FineUI/BaseWebControls/BoxComponent.Container/Container.cs index 4947b22..b651cd2 100644 --- a/FineUI/BaseWebControls/BoxComponent.Container/Container.cs +++ b/FineUI/BaseWebControls/BoxComponent.Container/Container.cs @@ -1,176 +1,176 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Container.cs - * CreatedOn: 2008-04-14 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// - /// 容器控件基类(抽象类) - /// - public abstract class Container : BoxComponent - { - #region Constructor - - /// - /// 构造函数 - /// - public Container() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - - } - - #endregion - - #region Unsupported Properties - - /// - /// 不支持此属性 - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool FocusOnPageLoad - { - get - { - return false; - } - } - - #endregion - - #region Layout - - /// - /// 布局类型 - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(Layout.Container)] - [Description("布局类型")] - public virtual Layout Layout - { - get - { - object obj = XState["Layout"]; - return obj == null ? Layout.Container : (Layout)obj; - } - set - { - XState["Layout"] = value; - } - } - - #endregion - - - - #region OnPreRender - - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - if (Layout != Layout.Container) - { - //OB.AddProperty("layout", LayoutHelper.GetName(Layout)); - string layoutName = LayoutHelper.GetName(Layout); - - JsObjectBuilder layoutConfigOB = new JsObjectBuilder(); - if (Layout == Layout.Table) - { - layoutConfigOB.AddProperty("columns", TableConfigColumns); - - } - else if (Layout == Layout.HBox || Layout == Layout.VBox) - { - if (BoxConfigAlign != BoxLayoutAlign.Top) - { - layoutConfigOB.AddProperty("align", BoxLayoutAlignHelper.GetName(BoxConfigAlign, Layout)); - } - - if (BoxConfigPosition != BoxLayoutPosition.Left) - { - layoutConfigOB.AddProperty("pack", BoxLayoutPositionHelper.GetName(BoxConfigPosition)); - } - - if (BoxConfigPadding != "0") - { - layoutConfigOB.AddProperty("padding", BoxConfigPadding); - } - - if (BoxConfigChildMargin != "0") - { - layoutConfigOB.AddProperty("defaultMargins", BoxConfigChildMargin); - } - } - - if (layoutConfigOB.Count > 0) - { - layoutConfigOB.AddProperty("type", layoutName); - - OB.AddProperty("layout", layoutConfigOB); - } - else - { - OB.AddProperty("layout", layoutName); - } - - } - - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Container.cs + * CreatedOn: 2008-04-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// + /// 容器控件基类(抽象类) + /// + public abstract class Container : BoxComponent + { + #region Constructor + + /// + /// 构造函数 + /// + public Container() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Unsupported Properties + + /// + /// 不支持此属性 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool FocusOnPageLoad + { + get + { + return false; + } + } + + #endregion + + #region Layout + + internal override bool WrapperNodeInlineBlock + { + get + { + return false; + } + } + + + /// + /// 布局类型 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public virtual Layout Layout + { + get + { + object obj = FState["Layout"]; + return obj == null ? Layout.Container : (Layout)obj; + } + set + { + FState["Layout"] = value; + } + } + + #endregion + + #region OnPreRender + + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (Layout != Layout.Container) + { + //OB.AddProperty("layout", LayoutHelper.GetName(Layout)); + string layoutName = LayoutHelper.GetName(Layout); + + JsObjectBuilder layoutConfigOB = new JsObjectBuilder(); + if (Layout == Layout.Table) + { + layoutConfigOB.AddProperty("columns", TableConfigColumns); + + } + else if (Layout == Layout.HBox || Layout == Layout.VBox) + { + layoutConfigOB.AddProperty("align", BoxLayoutAlignHelper.GetName(BoxConfigAlign, Layout)); + + layoutConfigOB.AddProperty("pack", BoxLayoutPositionHelper.GetName(BoxConfigPosition)); + + if (BoxConfigPadding != "0") + { + layoutConfigOB.AddProperty("padding", BoxConfigPadding); + } + + if (BoxConfigChildMargin != "0") + { + layoutConfigOB.AddProperty("defaultMargins", BoxConfigChildMargin); + } + } + + if (layoutConfigOB.Count > 0) + { + layoutConfigOB.AddProperty("type", layoutName); + + OB.AddProperty("layout", layoutConfigOB); + } + else + { + OB.AddProperty("layout", layoutName); + } + + } + + } + + #endregion + + } +} diff --git a/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs b/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs index 36796ce..359fb40 100644 --- a/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs +++ b/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs @@ -1,406 +1,407 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RealTextField.cs - * CreatedOn: 2008-07-24 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing.Design; - -namespace FineUI -{ - /// - /// 表单文本输入框字段基类(抽象类) - /// - public abstract class RealTextField : TextField, IPostBackDataHandler, IPostBackEventHandler - { - #region Constructor - - /// - /// 构造函数 - /// - public RealTextField() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("Text"); - - AddGzippedAjaxProperties("Text"); - } - - #endregion - - #region EmptyText - - /// - /// 文本框为空时显示的文本 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("文本框为空时显示的文本")] - public virtual string EmptyText - { - get - { - object obj = XState["EmptyText"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["EmptyText"] = value; - } - } - - - /// - /// [AJAX属性]文本 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - /// - /// 是否自动回发(文本值改变) - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动回发(文本值改变)")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - /// - /// 启用失去焦点事件 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("启用失去焦点事件")] - public bool EnableBlurEvent - { - get - { - object obj = XState["EnableBlurEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableBlurEvent"] = value; - } - } - - ///// - ///// Enable server validate, trigger the Validate event. - ///// - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("Enable server validate, trigger the Validate event.")] - //public bool EnableServerValidate - //{ - // get - // { - // object obj = BoxState["EnableServerValidate"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["EnableServerValidate"] = value; - // } - //} - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Text")) - { - sb.AppendFormat("{0}.x_setValue();", XID); - } - - AddAjaxScript(sb); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - if (!String.IsNullOrEmpty(EmptyText)) - { - OB.AddProperty("emptyText", EmptyText); - } - - if (!String.IsNullOrEmpty(Text)) - { - OB.AddProperty("value", Text); - } - - if (AutoPostBack) - { - OB.Listeners.AddProperty("change", JsHelper.GetFunction(GetPostBackEventReference()), true); - - #region old code - //// First remove change event, because we has already register this event in super class - Field. - //OB.Listeners.RemoveProperty("change"); - - //string changeScript = "X.util.setPageStateChanged();"; - //changeScript += GetPostBackEventReference(); - //OB.Listeners.AddProperty("change", JsHelper.GetFunction(changeScript), true); - - //else if (EnableServerValidate) - //{ - // // The Validate event will not be triggered when the filed fail to pass the client side validte. - // //changeScript += String.Format("if(X.{0}.isValid()){{{1}}}", ClientJavascriptID, GetPostBackEventReference("Validate")); - //} - //else if (AutoPostBack && EnableServerValidate) - //{ - // changeScript += GetPostBackEventReference("#VALIDATE#").Replace("'#VALIDATE#'", String.Format("{0}.isValid() ? 'Validate' : ''")); - //} - #endregion - } - - if (EnableBlurEvent) - { - OB.Listeners.AddProperty("blur", JsHelper.GetFunction(GetPostBackEventReference("Blur")), true); - - } - - //if (EnableServerValidate) - //{ - // OB.Listeners.AddProperty("blur", JsHelper.GetFunctionWrapper(GetPostBackEventReference("Validate")), true); - //} - } - - #endregion - - #region IPostBackDataHandler Members - - /// - /// 处理回发数据 - /// - /// 回发数据键 - /// 回发数据集 - /// 回发数据是否改变 - public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - string postValue = postCollection[UniqueID]; - - // 只有启用表单控件时,才判断Text是否改变 - // 对于TextBox,如果禁用了(disabled="disabled")则postValue == null,也就是说此表单字段不会提交到服务器(这是浏览器行为)。 - if (Enabled) - { - // If post value is empty, null or equals to the EmptyText property, we can consider it to be String.Empty. - if (String.IsNullOrEmpty(postValue) || postValue == EmptyText) - { - postValue = String.Empty; - } - - if (Text != postValue) - { - Text = postValue; - XState.BackupPostDataProperty("Text"); - return true; - } - } - return false; - } - - /// - /// 触发回发数据改变事件 - /// - public virtual void RaisePostDataChangedEvent() - { - OnTextChanged(EventArgs.Empty); - } - - #endregion - - #region OnTextChanged - - private object _handlerKey = new object(); - - /// - /// 文本改变事件(需要启用AutoPostBack) - /// - [Category(CategoryName.ACTION)] - [Description("文本改变事件(需要启用AutoPostBack)")] - public virtual event EventHandler TextChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// - /// 触发文本改变事件 - /// - /// 事件参数 - protected virtual void OnTextChanged(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnBlur - - /// - /// 处理回发事件 - /// - /// 事件参数 - public virtual void RaisePostBackEvent(string eventArgument) - { - if (eventArgument == "Blur") - { - OnBlur(EventArgs.Empty); - } - } - - - private object _handlerKeyBlur = new object(); - - /// - /// 失去焦点事件(需要启用EnableBlurEvent) - /// - [Category(CategoryName.ACTION)] - [Description("失去焦点事件(需要启用EnableBlurEvent)")] - public virtual event EventHandler Blur - { - add - { - Events.AddHandler(_handlerKeyBlur, value); - } - remove - { - Events.RemoveHandler(_handlerKeyBlur, value); - } - } - - /// - /// 触发失去焦点事件 - /// - /// 事件参数 - protected virtual void OnBlur(EventArgs e) - { - EventHandler handler = Events[_handlerKeyBlur] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region old code - - //#region OnValidate - - ///// - ///// Form field server validate event. - ///// - //[Category(CategoryName.ACTION)] - //[Description("Form field server validate event.")] - //public virtual event EventHandler Validate - //{ - // add - // { - // Events.AddHandler(validateHandlerKey, value); - // } - // remove - // { - // Events.RemoveHandler(validateHandlerKey, value); - // } - //} - - //private object validateHandlerKey = new object(); - - //public virtual void OnValidate(EventArgs e) - //{ - // EventHandler handler = Events[validateHandlerKey] as EventHandler; - - // if (handler != null) - // { - // handler(this, e); - // } - //} - - //#endregion - - //#region IPostBackEventHandler - - //public void RaisePostBackEvent(string eventArgument) - //{ - // if (eventArgument == "Validate") - // { - // OnValidate(EventArgs.Empty); - // } - //} - - //#endregion - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RealTextField.cs + * CreatedOn: 2008-07-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing.Design; + +namespace FineUI +{ + /// + /// 表单文本输入框字段基类(抽象类) + /// + public abstract class RealTextField : TextField, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// + /// 构造函数 + /// + public RealTextField() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Text"); + + AddGzippedAjaxProperties("Text"); + } + + #endregion + + #region EmptyText + + /// + /// 文本框为空时显示的文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本框为空时显示的文本")] + public virtual string EmptyText + { + get + { + object obj = FState["EmptyText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["EmptyText"] = value; + } + } + + + /// + /// [AJAX属性]文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// + /// 是否自动回发(文本值改变) + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发(文本值改变)")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + /// + /// 启用失去焦点事件 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用失去焦点事件")] + public bool EnableBlurEvent + { + get + { + object obj = FState["EnableBlurEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableBlurEvent"] = value; + } + } + + ///// + ///// Enable server validate, trigger the Validate event. + ///// + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("Enable server validate, trigger the Validate event.")] + //public bool EnableServerValidate + //{ + // get + // { + // object obj = BoxState["EnableServerValidate"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableServerValidate"] = value; + // } + //} + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + } + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (!String.IsNullOrEmpty(EmptyText)) + { + OB.AddProperty("emptyText", EmptyText); + } + + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("value", Text); + } + + if (AutoPostBack) + { + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(GetPostBackEventReference()), true); + AddListener("change", GetPostBackEventReference()); + + #region old code + //// First remove change event, because we has already register this event in super class - Field. + //OB.Listeners.RemoveProperty("change"); + + //string changeScript = "F.util.setPageStateChanged();"; + //changeScript += GetPostBackEventReference(); + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(changeScript), true); + + //else if (EnableServerValidate) + //{ + // // The Validate event will not be triggered when the filed fail to pass the client side validte. + // //changeScript += String.Format("if(X.{0}.isValid()){{{1}}}", ClientJavascriptID, GetPostBackEventReference("Validate")); + //} + //else if (AutoPostBack && EnableServerValidate) + //{ + // changeScript += GetPostBackEventReference("#VALIDATE#").Replace("'#VALIDATE#'", String.Format("{0}.isValid() ? 'Validate' : ''")); + //} + #endregion + } + + if (EnableBlurEvent) + { + //OB.Listeners.AddProperty("blur", JsHelper.GetFunction(GetPostBackEventReference("Blur")), true); + AddListener("blur", GetPostBackEventReference("Blur")); + } + + //if (EnableServerValidate) + //{ + // OB.Listeners.AddProperty("blur", JsHelper.GetFunctionWrapper(GetPostBackEventReference("Validate")), true); + //} + } + + #endregion + + #region IPostBackDataHandler Members + + /// + /// 处理回发数据 + /// + /// 回发数据键 + /// 回发数据集 + /// 回发数据是否改变 + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postValue = postCollection[UniqueID]; + + // 只有启用表单控件时,才判断Text是否改变 + // 对于TextBox,如果禁用了(disabled="disabled")则postValue == null,也就是说此表单字段不会提交到服务器(这是浏览器行为)。 + if (Enabled) + { + // If post value is empty, null or equals to the EmptyText property, we can consider it to be String.Empty. + if (String.IsNullOrEmpty(postValue) || postValue == EmptyText) + { + postValue = String.Empty; + } + + if (Text != postValue) + { + Text = postValue; + FState.BackupPostDataProperty("Text"); + return true; + } + } + return false; + } + + /// + /// 触发回发数据改变事件 + /// + public virtual void RaisePostDataChangedEvent() + { + OnTextChanged(EventArgs.Empty); + } + + #endregion + + #region OnTextChanged + + private object _handlerKey = new object(); + + /// + /// 文本改变事件(需要启用AutoPostBack) + /// + [Category(CategoryName.ACTION)] + [Description("文本改变事件(需要启用AutoPostBack)")] + public virtual event EventHandler TextChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// + /// 触发文本改变事件 + /// + /// 事件参数 + protected virtual void OnTextChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnBlur + + /// + /// 处理回发事件 + /// + /// 事件参数 + public virtual void RaisePostBackEvent(string eventArgument) + { + if (eventArgument == "Blur") + { + OnBlur(EventArgs.Empty); + } + } + + + private object _handlerKeyBlur = new object(); + + /// + /// 失去焦点事件(需要启用EnableBlurEvent) + /// + [Category(CategoryName.ACTION)] + [Description("失去焦点事件(需要启用EnableBlurEvent)")] + public virtual event EventHandler Blur + { + add + { + Events.AddHandler(_handlerKeyBlur, value); + } + remove + { + Events.RemoveHandler(_handlerKeyBlur, value); + } + } + + /// + /// 触发失去焦点事件 + /// + /// 事件参数 + protected virtual void OnBlur(EventArgs e) + { + EventHandler handler = Events[_handlerKeyBlur] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region old code + + //#region OnValidate + + ///// + ///// Form field server validate event. + ///// + //[Category(CategoryName.ACTION)] + //[Description("Form field server validate event.")] + //public virtual event EventHandler Validate + //{ + // add + // { + // Events.AddHandler(validateHandlerKey, value); + // } + // remove + // { + // Events.RemoveHandler(validateHandlerKey, value); + // } + //} + + //private object validateHandlerKey = new object(); + + //public virtual void OnValidate(EventArgs e) + //{ + // EventHandler handler = Events[validateHandlerKey] as EventHandler; + + // if (handler != null) + // { + // handler(this, e); + // } + //} + + //#endregion + + //#region IPostBackEventHandler + + //public void RaisePostBackEvent(string eventArgument) + //{ + // if (eventArgument == "Validate") + // { + // OnValidate(EventArgs.Empty); + // } + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs b/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs index d91af02..05ecb60 100644 --- a/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs +++ b/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs @@ -1,571 +1,544 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TextField.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing.Design; - -namespace FineUI -{ - /// - /// 表单文本输入框字段基类(抽象类) - /// - public abstract class TextField : Field - { - #region Constructor - - /// - /// 构造函数 - /// - public TextField() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - - } - - #endregion - - #region Validate Properties - - /// - /// 是否必填项 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue(false)] - [Description("是否必填项")] - public bool Required - { - get - { - object obj = XState["Required"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Required"] = value; - } - } - - /// - /// 为空时提示信息 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("为空时提示信息")] - public string RequiredMessage - { - get - { - object obj = XState["RequiredMessage"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["RequiredMessage"] = value; - } - } - - /// - /// 最大长度 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最大长度")] - public int? MaxLength - { - get - { - object obj = XState["MaxLength"]; - return obj == null ? null : (int?)obj; - } - set - { - XState["MaxLength"] = value; - } - } - - /// - /// 超过最大长度时提示信息 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("超过最大长度时提示信息")] - public string MaxLengthMessage - { - get - { - object obj = XState["MaxLengthMessage"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["MaxLengthMessage"] = value; - } - } - - - /// - /// 最小长度 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最小长度")] - public int? MinLength - { - get - { - object obj = XState["MinLength"]; - return obj == null ? null : (int?)obj; - } - set - { - XState["MinLength"] = value; - } - } - - - /// - /// 少于最小长度时提示信息 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("少于最小长度时提示信息")] - public string MinLengthMessage - { - get - { - object obj = XState["MinLengthMessage"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["MinLengthMessage"] = value; - } - } - - /// - /// RegexPattern - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue(RegexPattern.None)] - [Description("正则表达式常用类型")] - public RegexPattern RegexPattern - { - get - { - object obj = XState["RegexPattern"]; - return obj == null ? RegexPattern.None : (RegexPattern)obj; - } - set - { - XState["RegexPattern"] = value; - } - } - - - /// - /// 正则表达式 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("正则表达式")] - [Editor("System.Web.UI.Design.WebControls.RegexTypeEditor", typeof(UITypeEditor))] - public string Regex - { - get - { - object obj = XState["Regex"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Regex"] = value; - } - } - - /// - /// 不满足正则表达式时提示信息 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("不满足正则表达式时提示信息")] - public string RegexMessage - { - get - { - object obj = XState["RegexMessage"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["RegexMessage"] = value; - } - } - - - - /// - /// 正则表达式是否忽略大小写 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue(true)] - [Description("正则表达式是否忽略大小写")] - public bool RegexIgnoreCase - { - get - { - object obj = XState["RegexIgnoreCase"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["RegexIgnoreCase"] = value; - } - } - - #endregion - - #region Compare - - /// - /// 需要比较的控件ID - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("需要比较的控件ID")] - public string CompareControl - { - get - { - object obj = XState["CompareControl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["CompareControl"] = value; - } - } - - - - /// - /// 需要比较的值 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("需要比较的值")] - public string CompareValue - { - get - { - object obj = XState["CompareValue"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["CompareValue"] = value; - } - } - - - /// - /// 比较操作符 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue(Operator.Equal)] - [Description("比较操作符")] - public Operator CompareOperator - { - get - { - object obj = XState["CompareOperator"]; - return obj == null ? Operator.Equal : (Operator)obj; - } - set - { - XState["CompareOperator"] = value; - } - } - - /// - /// 比较的类型 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue(CompareType.String)] - [Description("比较的类型")] - public CompareType CompareType - { - get - { - object obj = XState["CompareType"]; - return obj == null ? CompareType.String : (CompareType)obj; - } - set - { - XState["CompareType"] = value; - } - } - - /// - /// 不满足比较条件时提示信息 - /// - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("不满足比较条件时提示信息")] - public string CompareMessage - { - get - { - object obj = XState["CompareMessage"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["CompareMessage"] = value; - } - } - - #endregion - - #region NextFocusControl - - /// - /// 下一步获得焦点的控件(响应回车事件) - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("下一步获得焦点的控件(响应回车事件)")] - public string NextFocusControl - { - get - { - object obj = XState["NextFocusControl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["NextFocusControl"] = value; - } - } - - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - #region validate properties - - if (Required) - { - OB.AddProperty("allowBlank", false); - if (!String.IsNullOrEmpty(RequiredMessage)) - { - OB.AddProperty("blankText", RequiredMessage); - } - } - - if (MaxLength != null) - { - OB.AddProperty("maxLength", MaxLength.Value); - if (!String.IsNullOrEmpty(MaxLengthMessage)) - { - OB.AddProperty("maxLengthText", MaxLengthMessage); - } - } - if (MinLength != null) - { - OB.AddProperty("minLength", MinLength.Value); - if (!String.IsNullOrEmpty(MinLengthMessage)) - { - OB.AddProperty("minLengthText", MinLengthMessage); - } - } - - // Calculate regex expression via RegexPattern and Regex - string regexStr = String.Empty; - if (RegexPattern != RegexPattern.None) - { - regexStr = RegexPatternHelper.GetRegexValue(RegexPattern); - } - else if (!String.IsNullOrEmpty(Regex)) - { - regexStr = Regex; - } - - if (!String.IsNullOrEmpty(regexStr)) - { - string ignoreCaseStr = String.Empty; - if (RegexIgnoreCase) - { - ignoreCaseStr = ",'i'"; - } - - OB.AddProperty("regex", String.Format("new RegExp({0}{1})", JsHelper.Enquote(regexStr), ignoreCaseStr), true); - if (!String.IsNullOrEmpty(RegexMessage)) - { - OB.AddProperty("regexText", RegexMessage); - } - } - - #endregion - - //OB.AddProperty("enableKeyEvents", true); - - #region NextFocusControl - - if (!String.IsNullOrEmpty(NextFocusControl)) - { - Control nextControl = ControlUtil.FindControl(Page, NextFocusControl); - - if (nextControl != null && nextControl is ControlBase) - { - //// true to enable the proxying of key events for the HTML input field (defaults to false) - //OB.AddProperty("enableKeyEvents", true); - // Fires when any key related to navigation (arrows, tab, enter, esc, etc.) is pressed. - OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.focus(true,10);e.stopEvent();}}}}", (nextControl as ControlBase).XID), true); - } - } - - #endregion - - #region ControlToCompare - - string compareValue = String.Empty; - // 如果CompareControl 和 CompareValue 同时存在,则 CompareControl 拥有更高的优先级 - if (!String.IsNullOrEmpty(CompareControl)) - { - Control compareControl = ControlUtil.FindControl(Page, CompareControl); - if (compareControl != null && compareControl is ControlBase) - { - compareValue = String.Format("X.fieldValue({0})", JsHelper.Enquote((compareControl as ControlBase).ClientID)); - } - } - else if (!String.IsNullOrEmpty(CompareValue)) - { - compareValue = CompareValue; - if (CompareType == CompareType.String) - { - compareValue = JsHelper.Enquote(compareValue); - } - } - - // Check whether compareValue exist, which may produced from CompareControl or CompareValue. - if (!String.IsNullOrEmpty(compareValue)) - { - string compareOperatorJs = OperatorHelper.GetName(CompareOperator); - string compareExpressionScript = String.Empty; - if (CompareType == CompareType.String) - { - compareExpressionScript = String.Format("value{0}{1}", compareOperatorJs, compareValue); - } - else if (CompareType == CompareType.Int) - { - compareExpressionScript = String.Format("parseInt(value,10){0}parseInt({1},10)", compareOperatorJs, compareValue); - } - else if (CompareType == CompareType.Float) - { - compareExpressionScript = String.Format("parseFloat(value){0}parseFloat({1})", compareOperatorJs, compareValue); - } - - string compareScript = String.Format("if({0}){{return true;}}else{{return {1};}}", compareExpressionScript, JsHelper.Enquote(CompareMessage)); - OB.AddProperty("validator", String.Format("function(){{var value=X.fieldValue(this);{0}}}", compareScript), true); - } - - #endregion - } - - #endregion - - #region GetMarkInvalidReference GetClearInvalidReference - - /// - /// 设置字段验证失败的提示信息 - /// - /// 提示信息 - public void MarkInvalid(string message) - { - PageContext.RegisterStartupScript(GetMarkInvalidReference(message)); - } - - /// - /// 清除验证失败的提示信息 - /// - public void ClearInvalid() - { - PageContext.RegisterStartupScript(GetClearInvalidReference()); - } - - /// - /// 获取字段验证失败提示信息的客户端脚本 - /// - /// 提示信息 - /// 客户端脚本 - public string GetMarkInvalidReference(string message) - { - return String.Format("{0}.markInvalid({1});", ScriptID, JsHelper.GetJsString(message)); - } - - /// - /// 获取清除验证失败提示信息的客户端脚本 - /// - /// 客户端脚本 - public string GetClearInvalidReference() - { - return String.Format("{0}.clearInvalid();", ScriptID); - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TextField.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing.Design; + +namespace FineUI +{ + /// + /// 表单文本输入框字段基类(抽象类) + /// + public abstract class TextField : Field + { + #region Constructor + + /// + /// 构造函数 + /// + public TextField() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Validate Properties + + /// + /// 是否必填项 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("是否必填项")] + public bool Required + { + get + { + object obj = FState["Required"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Required"] = value; + } + } + + /// + /// 为空时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("为空时提示信息")] + public string RequiredMessage + { + get + { + object obj = FState["RequiredMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RequiredMessage"] = value; + } + } + + /// + /// 最大长度 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大长度")] + public int? MaxLength + { + get + { + object obj = FState["MaxLength"]; + return obj == null ? null : (int?)obj; + } + set + { + FState["MaxLength"] = value; + } + } + + /// + /// 超过最大长度时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("超过最大长度时提示信息")] + public string MaxLengthMessage + { + get + { + object obj = FState["MaxLengthMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["MaxLengthMessage"] = value; + } + } + + + /// + /// 最小长度 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小长度")] + public int? MinLength + { + get + { + object obj = FState["MinLength"]; + return obj == null ? null : (int?)obj; + } + set + { + FState["MinLength"] = value; + } + } + + + /// + /// 少于最小长度时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("少于最小长度时提示信息")] + public string MinLengthMessage + { + get + { + object obj = FState["MinLengthMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["MinLengthMessage"] = value; + } + } + + /// + /// RegexPattern + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(RegexPattern.None)] + [Description("正则表达式常用类型")] + public RegexPattern RegexPattern + { + get + { + object obj = FState["RegexPattern"]; + return obj == null ? RegexPattern.None : (RegexPattern)obj; + } + set + { + FState["RegexPattern"] = value; + } + } + + + /// + /// 正则表达式 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("正则表达式")] + [Editor("System.Web.UI.Design.WebControls.RegexTypeEditor", typeof(UITypeEditor))] + public string Regex + { + get + { + object obj = FState["Regex"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Regex"] = value; + } + } + + /// + /// 不满足正则表达式时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("不满足正则表达式时提示信息")] + public string RegexMessage + { + get + { + object obj = FState["RegexMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RegexMessage"] = value; + } + } + + + + /// + /// 正则表达式是否忽略大小写 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(true)] + [Description("正则表达式是否忽略大小写")] + public bool RegexIgnoreCase + { + get + { + object obj = FState["RegexIgnoreCase"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["RegexIgnoreCase"] = value; + } + } + + #endregion + + #region Compare + + /// + /// 需要比较的控件ID + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("需要比较的控件ID")] + public string CompareControl + { + get + { + object obj = FState["CompareControl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CompareControl"] = value; + } + } + + + + /// + /// 需要比较的值 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("需要比较的值")] + public string CompareValue + { + get + { + object obj = FState["CompareValue"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CompareValue"] = value; + } + } + + + /// + /// 比较操作符 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(Operator.Equal)] + [Description("比较操作符")] + public Operator CompareOperator + { + get + { + object obj = FState["CompareOperator"]; + return obj == null ? Operator.Equal : (Operator)obj; + } + set + { + FState["CompareOperator"] = value; + } + } + + /// + /// 比较的类型 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(CompareType.String)] + [Description("比较的类型")] + public CompareType CompareType + { + get + { + object obj = FState["CompareType"]; + return obj == null ? CompareType.String : (CompareType)obj; + } + set + { + FState["CompareType"] = value; + } + } + + /// + /// 不满足比较条件时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("不满足比较条件时提示信息")] + public string CompareMessage + { + get + { + object obj = FState["CompareMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CompareMessage"] = value; + } + } + + #endregion + + #region NextFocusControl + + /// + /// 下一步获得焦点的控件(响应回车事件) + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("下一步获得焦点的控件(响应回车事件)")] + public virtual string NextFocusControl + { + get + { + object obj = FState["NextFocusControl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["NextFocusControl"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region validate properties + + if (Required) + { + OB.AddProperty("allowBlank", false); + if (!String.IsNullOrEmpty(RequiredMessage)) + { + OB.AddProperty("blankText", RequiredMessage); + } + } + + if (MaxLength != null) + { + OB.AddProperty("maxLength", MaxLength.Value); + if (!String.IsNullOrEmpty(MaxLengthMessage)) + { + OB.AddProperty("maxLengthText", MaxLengthMessage); + } + } + if (MinLength != null) + { + OB.AddProperty("minLength", MinLength.Value); + if (!String.IsNullOrEmpty(MinLengthMessage)) + { + OB.AddProperty("minLengthText", MinLengthMessage); + } + } + + // Calculate regex expression via RegexPattern and Regex + string regexStr = String.Empty; + if (RegexPattern != RegexPattern.None) + { + regexStr = RegexPatternHelper.GetRegexValue(RegexPattern); + } + else if (!String.IsNullOrEmpty(Regex)) + { + regexStr = Regex; + } + + if (!String.IsNullOrEmpty(regexStr)) + { + string ignoreCaseStr = String.Empty; + if (RegexIgnoreCase) + { + ignoreCaseStr = ",'i'"; + } + + OB.AddProperty("regex", String.Format("new RegExp({0}{1})", JsHelper.Enquote(regexStr), ignoreCaseStr), true); + if (!String.IsNullOrEmpty(RegexMessage)) + { + OB.AddProperty("regexText", RegexMessage); + } + } + + #endregion + + //OB.AddProperty("enableKeyEvents", true); + + #region NextFocusControl + + if (!String.IsNullOrEmpty(NextFocusControl)) + { + ControlBase nextControl = ControlUtil.FindControlInUserControlOrPage(this, NextFocusControl) as ControlBase; + + if (nextControl != null) + { + //// true to enable the proxying of key events for the HTML input field (defaults to false) + //OB.AddProperty("enableKeyEvents", true); + // Fires when any key related to navigation (arrows, tab, enter, esc, etc.) is pressed. + //OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.focus(true,10);e.stopEvent();}}}}", (nextControl as ControlBase).XID), true); + + string enterScript = String.Empty; + + if (nextControl is Button) + { + enterScript = String.Format("{0}.el.dom.click();", nextControl.XID); + } + else + { + enterScript = String.Format("{0}.focus(true,10);", nextControl.XID); + } + + AddListener("specialkey", String.Format("if(e.getKey()==e.ENTER){{{0}e.stopEvent();}}", enterScript), "field","e"); + } + } + + #endregion + + #region ControlToCompare + + string compareValue = String.Empty; + // 如果CompareControl 和 CompareValue 同时存在,则 CompareControl 拥有更高的优先级 + if (!String.IsNullOrEmpty(CompareControl)) + { + Control compareControl = ControlUtil.FindControlInUserControlOrPage(this, CompareControl); + if (compareControl != null && compareControl is ControlBase) + { + compareValue = String.Format("F.fieldValue({0})", JsHelper.Enquote((compareControl as ControlBase).ClientID)); + } + } + else if (!String.IsNullOrEmpty(CompareValue)) + { + compareValue = CompareValue; + if (CompareType == CompareType.String) + { + compareValue = JsHelper.Enquote(compareValue); + } + } + + // Check whether compareValue exist, which may produced from CompareControl or CompareValue. + if (!String.IsNullOrEmpty(compareValue)) + { + string compareOperatorJs = OperatorHelper.GetName(CompareOperator); + string compareExpressionScript = String.Empty; + if (CompareType == CompareType.String) + { + compareExpressionScript = String.Format("value{0}{1}", compareOperatorJs, compareValue); + } + else if (CompareType == CompareType.Int) + { + compareExpressionScript = String.Format("parseInt(value,10){0}parseInt({1},10)", compareOperatorJs, compareValue); + } + else if (CompareType == CompareType.Float) + { + compareExpressionScript = String.Format("parseFloat(value){0}parseFloat({1})", compareOperatorJs, compareValue); + } + + string compareScript = String.Format("if({0}){{return true;}}else{{return {1};}}", compareExpressionScript, JsHelper.Enquote(CompareMessage)); + OB.AddProperty("validator", String.Format("function(){{var value=F.fieldValue(this);{0}}}", compareScript), true); + } + + #endregion + } + + #endregion + + } +} diff --git a/FineUI/BaseWebControls/BoxComponent.Field/Field.cs b/FineUI/BaseWebControls/BoxComponent.Field/Field.cs index 0e69c8f..645ee7a 100644 --- a/FineUI/BaseWebControls/BoxComponent.Field/Field.cs +++ b/FineUI/BaseWebControls/BoxComponent.Field/Field.cs @@ -1,472 +1,612 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace FineUI -{ - /// - /// 表单字段基类(抽象类) - /// - public abstract class Field : BoxComponent - { - #region Constructor - - /// - /// 构造函数 - /// - public Field() - { - AddServerAjaxProperties("Readonly", "Label"); - AddClientAjaxProperties(); - } - - #endregion - - #region Properties - - /// - /// 是否显示标签 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否显示标签")] - public virtual bool ShowLabel - { - get - { - object obj = XState["ShowLabel"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ShowLabel"] = value; - } - } - - /// - /// 是否显示空白的标签 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否显示空白的标签")] - public virtual bool ShowEmptyLabel - { - get - { - object obj = XState["ShowEmptyLabel"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ShowEmptyLabel"] = value; - } - } - - - /// - /// [AJAX属性]标签文本 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]标签文本")] - public virtual string Label - { - get - { - object obj = XState["Label"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Label"] = value; - } - } - - /// - /// 表单中字段与标签的分隔符 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(String), ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] - [Description("表单中字段与标签的分隔符")] - public virtual string LabelSeparator - { - get - { - object obj = XState["LabelSeparator"]; - if (obj == null) - { - if (DesignMode) - { - return ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT; - } - else - { - //return ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT; - return PageManager.Instance.FormLabelSeparator; - } - } - return (String)obj; - } - set - { - XState["LabelSeparator"] = value; - } - } - - /// - /// 在标签后面显示红色的星号(用来标识必填项) - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("在标签后面显示红色的星号(用来标识必填项)")] - public bool ShowRedStar - { - get - { - object obj = XState["ShowRedStar"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ShowRedStar"] = value; - } - } - - #region old code - - //private string LabelSeparator_Default = ""; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("标签分割符")] - //public string LabelSeparator - //{ - // get - // { - // object obj = BoxState["LabelSeparator"]; - // return obj == null ? LabelSeparator_Default : (string)obj; - // } - // set - // { - // BoxState["LabelSeparator"] = value; - // } - //} - - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(MsgTarget.Qtip)] - //[Description("提示消息类型")] - //public virtual MsgTarget MsgTarget - //{ - // get - // { - // object obj = BoxState["MsgTarget"]; - // return obj == null ? MsgTarget.Qtip : (MsgTarget)obj; - // } - // set - // { - // BoxState["MsgTarget"] = value; - // } - //} - - - #endregion - - - /// - /// [AJAX属性]表单控件的只读状态 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("[AJAX属性]表单控件的只读状态")] - public virtual bool Readonly - { - get - { - object obj = XState["Readonly"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Readonly"] = value; - } - } - - ///// - ///// 是否可用 - ///// - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("是否可用")] - //public virtual bool Enabled - //{ - // get - // { - // object obj = XState["Enabled"]; - // return obj == null ? true : (bool)obj; - // } - // set - // { - // XState["Enabled"] = value; - // } - //} - - /// - /// Tab按键的跳转顺序 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("Tab按键的跳转顺序")] - public virtual short? TabIndex - { - get - { - object obj = XState["TabIndex"]; - return obj == null ? null : (short?)obj; - } - set - { - XState["TabIndex"] = value; - } - } - - /// - /// 距离右侧边界的宽度 - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT_STRING)] - [Description("距离右侧边界的宽度")] - public Unit OffsetRight - { - get - { - object obj = XState["OffsetRight"]; - if (obj == null) - { - if (DesignMode) - { - return (Unit)ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT; - } - else - { - return (Unit)PageManager.Instance.FormOffsetRight; - } - } - return (Unit)obj; - } - set - { - XState["OffsetRight"] = value; - } - } - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Readonly")) - { - sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - } - - if (PropertyModified("Label")) - { - string newLabel = Label; - if (ShowRedStar) - { - newLabel += GetRedStarHtml(); - } - newLabel += LabelSeparator; - sb.AppendFormat("{0}.x_setLabel({1});", XID, JsHelper.Enquote(newLabel)); - } - - AddAjaxScript(sb); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("form"); - - // 默认隐藏空白标签 - if (ShowEmptyLabel) - { - OB.AddProperty("hideEmptyLabel", false); - } - - // 只有在表单中,有些属性才有效 - if (ShowLabel) - { - if (!String.IsNullOrEmpty(Label)) - { - if (ShowRedStar) - { - OB.AddProperty("fieldLabel", Label + GetRedStarHtml()); - } - else - { - OB.AddProperty("fieldLabel", Label); - } - - if (LabelSeparator != ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT) - { - OB.AddProperty("labelSeparator", LabelSeparator); - } - } - } - else - { - OB.AddProperty("hideLabel", true); - } - - if (Width == Unit.Empty) - { - if (OffsetRight.Value != 0) - { - OB.AddProperty("anchor", "-" + OffsetRight.Value + "px"); - } - else - { - OB.AddProperty("anchor", "100%"); - } - } - - // Every Field need a name property, which is used in form submit. - OB.AddProperty("name", UniqueID); - - // Enabled has been processed in ControlBase. - //OB.AddProperty(OptionName.Disabled, !Enabled); - //if (AjaxPropertyChanged("Enabled", Enabled)) - //{ - // AddAjaxPropertyChangedScript(String.Format("{0}.{1}();", XID, Enabled ? "enable" : "disable")); - // //AddAjaxPropertyChangedScript(String.Format("{0}.setDisabled({1});", ClientJavascriptID, !Enabled)); - //} - - if (TabIndex != null) - { - OB.AddProperty("tabIndex", TabIndex.Value); - } - - if (Readonly) - { - OB.AddProperty("readOnly", true); - } - - // We don't need to add this change event to all Field, only SimpleForm and Form has such event. - // We have enableBubble for Ext.form.Field - - //// Fires just before the field blurs if the field value has changed. - //string changeScript = "X.util.setPageStateChanged();"; - //OB.Listeners.AddProperty("change", JsHelper.GetFunction(changeScript), true); - - } - - private string GetRedStarHtml() - { - return "*"; - } - - #endregion - - #region Reset - - /// - /// 重置此字段的值(比如用来清空FileUpload的内容) - /// - public void Reset() - { - PageContext.RegisterStartupScript(GetResetReference()); - } - - /// - /// 获取重置此字段的客户端脚本 - /// - /// - public virtual string GetResetReference() - { - return String.Format("{0}.reset();", ScriptID); - } - - #endregion - - #region GetValueReference - - /// - /// 获取此字段值的客户端脚本(注意返回的脚本不带结束分号) - /// - /// 客户端脚本 - public virtual string GetValueReference() - { - // Don't add ; in the end, because we will invoke this code like this: - // windowField1.DataIFrameUrlFormatString = "grid_iframe_run_window1.aspx?id={0}&page={1}¶m1="; - return String.Format("{0}.getValue()", ScriptID); - } - - #endregion - - #region GetDesignTimeHtml - - - internal string GetDesignTimeHtml(string content) - { - StringBuilder sb = new StringBuilder(); - sb.Append("
"); - if (!ShowLabel) - { - sb.AppendFormat("{0} ", content); - } - else - { - string redstar = String.Empty; - if (ShowRedStar) - { - redstar = "*"; - } - sb.AppendFormat("
{0}{1} 
", Label + redstar, content); - } - sb.Append("
"); - return sb.ToString(); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// + /// 表单字段基类(抽象类) + /// + public abstract class Field : BoxComponent + { + #region Constructor + + /// + /// 构造函数 + /// + public Field() + { + AddServerAjaxProperties("Readonly", "Label"); + AddClientAjaxProperties(); + } + + #endregion + + #region Properties + + /// + /// 是否显示标签 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否显示标签")] + public virtual bool ShowLabel + { + get + { + object obj = FState["ShowLabel"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowLabel"] = value; + } + } + + /// + /// 是否显示空白的标签 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否显示空白的标签")] + public virtual bool ShowEmptyLabel + { + get + { + object obj = FState["ShowEmptyLabel"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ShowEmptyLabel"] = value; + } + } + + + /// + /// [AJAX属性]标签文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]标签文本")] + public virtual string Label + { + get + { + object obj = FState["Label"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Label"] = value; + } + } + + + + /// + /// 在标签后面显示红色的星号(用来标识必填项) + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("在标签后面显示红色的星号(用来标识必填项)")] + public bool ShowRedStar + { + get + { + object obj = FState["ShowRedStar"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ShowRedStar"] = value; + } + } + + #region old code + + //private string LabelSeparator_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("标签分割符")] + //public string LabelSeparator + //{ + // get + // { + // object obj = BoxState["LabelSeparator"]; + // return obj == null ? LabelSeparator_Default : (string)obj; + // } + // set + // { + // BoxState["LabelSeparator"] = value; + // } + //} + + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(MsgTarget.Qtip)] + //[Description("提示消息类型")] + //public virtual MsgTarget MsgTarget + //{ + // get + // { + // object obj = BoxState["MsgTarget"]; + // return obj == null ? MsgTarget.Qtip : (MsgTarget)obj; + // } + // set + // { + // BoxState["MsgTarget"] = value; + // } + //} + + + #endregion + + + /// + /// [AJAX属性]表单控件的只读状态 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]表单控件的只读状态")] + public virtual bool Readonly + { + get + { + object obj = FState["Readonly"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Readonly"] = value; + } + } + + ///// + ///// 是否可用 + ///// + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否可用")] + //public virtual bool Enabled + //{ + // get + // { + // object obj = FState["Enabled"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["Enabled"] = value; + // } + //} + + /// + /// Tab按键的跳转顺序 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("Tab按键的跳转顺序")] + public virtual short? TabIndex + { + get + { + object obj = FState["TabIndex"]; + return obj == null ? null : (short?)obj; + } + set + { + FState["TabIndex"] = value; + } + } + + + /// + /// 表单中字段与标签的分隔符 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(String), ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] + [Description("表单中字段与标签的分隔符")] + public virtual string LabelSeparator + { + get + { + object obj = FState["LabelSeparator"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT; + } + else + { + FormBase formBase = ControlUtil.FindParentControl(this, typeof(FormBase), true) as FormBase; + if (formBase != null) + { + return formBase.LabelSeparator; + } + else + { + return PageManager.Instance.FormLabelSeparator; + } + } + } + return (String)obj; + } + set + { + FState["LabelSeparator"] = value; + } + } + + /// + /// 距离右侧边界的宽度 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT_STRING)] + [Description("距离右侧边界的宽度")] + public Unit OffsetRight + { + get + { + object obj = FState["OffsetRight"]; + if (obj == null) + { + if (DesignMode) + { + return (Unit)ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT; + } + else + { + FormBase formBase = ControlUtil.FindParentControl(this, typeof(FormBase), true) as FormBase; + if (formBase != null) + { + return formBase.OffsetRight; + } + else + { + return PageManager.Instance.FormOffsetRight; + } + } + } + return (Unit)obj; + } + set + { + FState["OffsetRight"] = value; + } + } + + /// + /// 标签的宽度 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT_STRING)] + [Description("标签的宽度")] + public Unit LabelWidth + { + get + { + object obj = FState["LabelWidth"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT; + } + else + { + FormBase formBase = ControlUtil.FindParentControl(this, typeof(FormBase), true) as FormBase; + if (formBase != null) + { + return formBase.LabelWidth; + } + else + { + return PageManager.Instance.FormLabelWidth; + } + } + } + return (Unit)obj; + } + set + { + FState["LabelWidth"] = value; + } + } + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Readonly")) + { + sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + } + + if (PropertyModified("Label")) + { + string newLabel = Label; + if (ShowRedStar) + { + newLabel += GetRedStarHtml(); + } + //newLabel += LabelSeparator; + sb.AppendFormat("{0}.f_setLabel({1});", XID, JsHelper.Enquote(newLabel)); + } + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + // 默认隐藏空白标签 + if (ShowEmptyLabel) + { + OB.AddProperty("hideEmptyLabel", false); + } + + // 只有在表单中,有些属性才有效 + //if (ShowLabel) + //{ + // if (!String.IsNullOrEmpty(Label)) + // { + // if (ShowRedStar) + // { + // OB.AddProperty("fieldLabel", Label + GetRedStarHtml()); + // } + // else + // { + // OB.AddProperty("fieldLabel", Label); + // } + // } + //} + if (!ShowLabel) + { + OB.AddProperty("hideLabel", true); + } + + + // 即使ShowLabel=false,也要输出 Label 属性。可能会在标签验证失败对话框中用到[请为 用户名 提供有效值!]。 + if (!String.IsNullOrEmpty(Label)) + { + if (ShowRedStar) + { + OB.AddProperty("fieldLabel", Label + GetRedStarHtml()); + } + else + { + OB.AddProperty("fieldLabel", Label); + } + } + + + if (LabelSeparator != ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT) + { + OB.AddProperty("labelSeparator", LabelSeparator); + } + + if (LabelWidth != ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT) + { + OB.AddProperty("labelWidth", LabelWidth.Value); + } + + //if (Width == Unit.Empty) + ControlBase parentControl = GetParentControl(); + if (parentControl != null) + { + // 如果父控件布局是Anchor + if (parentControl is FormRow || + (parentControl is Container && (parentControl as Container).Layout == Layout.Anchor)) + { + // 如果定义了宽度,则不设置anchorValue + if (Width == Unit.Empty) + { + // 这个地方可能会覆盖 BoxComponent 中已经设置的 anchor 属性,不过没关系 + OB.AddProperty("anchor", GetAnchorValue()); + } + } + } + + + // Every Field need a name property, which is used in form submit. + OB.AddProperty("name", UniqueID); + + // Enabled has been processed in ControlBase. + //OB.AddProperty(OptionName.Disabled, !Enabled); + //if (AjaxPropertyChanged("Enabled", Enabled)) + //{ + // AddAjaxPropertyChangedScript(String.Format("{0}.{1}();", XID, Enabled ? "enable" : "disable")); + // //AddAjaxPropertyChangedScript(String.Format("{0}.setDisabled({1});", ClientJavascriptID, !Enabled)); + //} + + if (TabIndex != null) + { + OB.AddProperty("tabIndex", TabIndex.Value); + } + + if (Readonly) + { + OB.AddProperty("readOnly", true); + } + + // We don't need to add this change event to all Field, only SimpleForm and Form has such event. + // We have enableBubble for Ext.form.Field + + //// Fires just before the field blurs if the field value has changed. + //string changeScript = "F.util.setPageStateChanged();"; + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(changeScript), true); + + } + + private string GetAnchorValue() + { + string anchorValue = AnchorValue; + + if (String.IsNullOrEmpty(anchorValue)) + { + if (OffsetRight.Value != 0) + { + anchorValue = "-" + OffsetRight.Value + "px"; + } + else + { + anchorValue = "0"; + } + } + + return anchorValue; + } + + private string GetRedStarHtml() + { + return "*"; + } + + #endregion + + #region Reset + + /// + /// 重置此字段的值(比如用来清空FileUpload的内容) + /// + public void Reset() + { + PageContext.RegisterStartupScript(GetResetReference()); + } + + /// + /// 获取重置此字段的客户端脚本 + /// + /// + public virtual string GetResetReference() + { + return String.Format("{0}.reset();", ScriptID); + } + + #endregion + + #region GetValueReference + + /// + /// 获取此字段值的客户端脚本(注意返回的脚本不带结束分号) + /// + /// 客户端脚本 + public virtual string GetValueReference() + { + // Don't add ; in the end, because we will invoke this code like this: + // windowField1.DataIFrameUrlFormatString = "grid_iframe_run_window1.aspx?id={0}&page={1}¶m1="; + return String.Format("{0}.getValue()", ScriptID); + } + + #endregion + + #region GetMarkInvalidReference GetClearInvalidReference + + /// + /// 设置字段验证失败的提示信息 + /// + /// 提示信息 + public void MarkInvalid(string message) + { + PageContext.RegisterStartupScript(GetMarkInvalidReference(message)); + } + + /// + /// 清除验证失败的提示信息 + /// + public void ClearInvalid() + { + PageContext.RegisterStartupScript(GetClearInvalidReference()); + } + + /// + /// 获取字段验证失败提示信息的客户端脚本 + /// + /// 提示信息 + /// 客户端脚本 + public string GetMarkInvalidReference(string message) + { + return String.Format("{0}.markInvalid({1});", ScriptID, JsHelper.Enquote(message)); + } + + /// + /// 获取清除验证失败提示信息的客户端脚本 + /// + /// 客户端脚本 + public string GetClearInvalidReference() + { + return String.Format("{0}.clearInvalid();", ScriptID); + } + + #endregion + + #region oldcode + + //internal string GetDesignTimeHtml(string content) + //{ + // StringBuilder sb = new StringBuilder(); + // sb.Append("
"); + // if (!ShowLabel) + // { + // sb.AppendFormat("{0} ", content); + // } + // else + // { + // string redstar = String.Empty; + // if (ShowRedStar) + // { + // redstar = "*"; + // } + // sb.AppendFormat("
{0}{1} 
", Label + redstar, content); + // } + // sb.Append("
"); + // return sb.ToString(); + //} + + #endregion + } +} diff --git a/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs b/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs index e35d7b5..7eddd23 100644 --- a/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs +++ b/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs @@ -1,165 +1,165 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Label.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// - /// 支持提示的表单字段基类(抽象类) - /// - public abstract class TooltipField : Field - { - #region Constructor - - /// - /// 构造函数 - /// - public TooltipField() - { - AddServerAjaxProperties("ToolTip", "ToolTipTitle", "ToolTipAutoHide"); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - - #endregion - - #region Properties - - /// - /// [AJAX属性]提示文本 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]提示文本")] - public string ToolTip - { - get - { - object obj = XState["ToolTip"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ToolTip"] = value; - } - } - - /// - /// [AJAX属性]提示文本的标题 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]提示文本的标题")] - public string ToolTipTitle - { - get - { - object obj = XState["ToolTipTitle"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ToolTipTitle"] = value; - } - } - - /// - /// [AJAX属性]是否自动隐藏提示信息 - /// - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("[AJAX属性]是否自动隐藏提示信息")] - public bool ToolTipAutoHide - { - get - { - object obj = XState["ToolTipAutoHide"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ToolTipAutoHide"] = value; - } - } - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - } - - /// - /// 添加提示信息 - /// - /// HtmlNodeBuilder实例 - protected void ResolveTooltip(HtmlNodeBuilder htmlBuilder) - { - if (!String.IsNullOrEmpty(ToolTip)) - { - htmlBuilder.SetProperty("data-qtip", ToolTip); - - if (!String.IsNullOrEmpty(ToolTipTitle)) - { - htmlBuilder.SetProperty("data-qtitle", ToolTipTitle); - } - if (!ToolTipAutoHide) - { - htmlBuilder.SetProperty("data-hide", "user"); - } - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Label.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// + /// 支持提示的表单字段基类(抽象类) + /// + public abstract class TooltipField : Field + { + #region Constructor + + /// + /// 构造函数 + /// + public TooltipField() + { + AddServerAjaxProperties("ToolTip", "ToolTipTitle", "ToolTipAutoHide"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + + #endregion + + #region Properties + + /// + /// [AJAX属性]提示文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]提示文本")] + public string ToolTip + { + get + { + object obj = FState["ToolTip"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ToolTip"] = value; + } + } + + /// + /// [AJAX属性]提示文本的标题 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]提示文本的标题")] + public string ToolTipTitle + { + get + { + object obj = FState["ToolTipTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ToolTipTitle"] = value; + } + } + + /// + /// [AJAX属性]是否自动隐藏提示信息 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否自动隐藏提示信息")] + public bool ToolTipAutoHide + { + get + { + object obj = FState["ToolTipAutoHide"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ToolTipAutoHide"] = value; + } + } + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + } + + /// + /// 添加提示信息 + /// + /// HtmlNodeBuilder实例 + protected void ResolveTooltip(HtmlNodeBuilder htmlBuilder) + { + if (!String.IsNullOrEmpty(ToolTip)) + { + htmlBuilder.SetProperty("data-qtip", ToolTip); + + if (!String.IsNullOrEmpty(ToolTipTitle)) + { + htmlBuilder.SetProperty("data-qtitle", ToolTipTitle); + } + if (!ToolTipAutoHide) + { + htmlBuilder.SetProperty("data-hide", "user"); + } + } + } + + #endregion + } +} diff --git a/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs b/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs index 520517b..ec4e3b0 100644 --- a/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs +++ b/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs @@ -1,505 +1,568 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Component.cs - * CreatedOn: 2008-04-14 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// - /// 控件基类(抽象类) - /// - public abstract class BoxComponent : Component - { - #region Constructor - - /// - /// 构造函数 - /// - public BoxComponent() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - - } - - #endregion - - #region Properties - - /// - /// 宽度 - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(typeof(Unit), "")] - [Description("宽度")] - public Unit Width - { - get - { - object obj = XState["Width"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["Width"] = value; - } - } - - - /// - /// 高度 - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(typeof(Unit), "")] - [Description("高度")] - public Unit Height - { - get - { - object obj = XState["Height"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["Height"] = value; - } - } - - - #endregion - - #region Layout Properties - - /// - /// 锚点值(当父容器的Layout=Anchor时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue("")] - [Description("锚点值(当父容器的Layout=Anchor时有效)")] - public string AnchorValue - { - get - { - object obj = XState["AnchorValue"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["AnchorValue"] = value; - } - } - - - /// - /// 列的宽度(当父容器的Layout=Column时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue("")] - [Description("列的宽度(当父容器的Layout=Column时有效)")] - public string ColumnWidth - { - get - { - object obj = XState["ColumnWidth"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ColumnWidth"] = value; - } - } - - - /// - /// 行的宽度(当父容器的Layout=Row时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue("")] - [Description("行的宽度(当父容器的Layout=Row时有效)")] - public string RowHeight - { - get - { - object obj = XState["RowHeight"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["RowHeight"] = value; - } - } - - - /// - /// 绝对定位的X坐标(当父容器的Layout=Absolute时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(typeof(Unit), "")] - [Description("绝对定位的X坐标(当父容器的Layout=Absolute时有效)")] - public Unit AbsoluteX - { - get - { - object obj = XState["AbsoluteX"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["AbsoluteX"] = value; - } - } - - - /// - /// 绝对定位的Y坐标(当父容器的Layout=Absolute时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(typeof(Unit), "")] - [Description("绝对定位的Y坐标(当父容器的Layout=Absolute时有效)")] - public Unit AbsoluteY - { - get - { - object obj = XState["AbsoluteY"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["AbsoluteY"] = value; - } - } - - - /// - /// 表格列数(当父容器的Layout=Table时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(3)] - [Description("表格列数(当父容器的Layout=Table时有效)")] - public int TableConfigColumns - { - get - { - object obj = XState["TableConfigColumns"]; - return obj == null ? 3 : (int)obj; - } - set - { - XState["TableConfigColumns"] = value; - } - } - - /// - /// 表格合并行(当父容器的Layout=Table时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(1)] - [Description("表格合并行(当父容器的Layout=Table时有效)")] - public int TableRowspan - { - get - { - object obj = XState["TableRowspan"]; - return obj == null ? 1 : (int)obj; - } - set - { - XState["TableRowspan"] = value; - } - } - - /// - /// 表格合并列(当父容器的Layout=Table时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(1)] - [Description("表格合并列(当父容器的Layout=Table时有效)")] - public int TableColspan - { - get - { - object obj = XState["TableColspan"]; - return obj == null ? 1 : (int)obj; - } - set - { - XState["TableColspan"] = value; - } - } - - /// - /// 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(BoxLayoutAlign.Start)] - [Description("控制子控件的位置(当本容器的Layout=VBox或者HBox时有效)")] - public BoxLayoutAlign BoxConfigAlign - { - get - { - object obj = XState["BoxConfigAlign"]; - return obj == null ? BoxLayoutAlign.Start : (BoxLayoutAlign)obj; - } - set - { - XState["BoxConfigAlign"] = value; - } - } - - /// - /// 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(BoxLayoutPosition.Start)] - [Description("控制子控件的位置(当本容器的Layout=VBox或者HBox时有效)")] - public BoxLayoutPosition BoxConfigPosition - { - get - { - object obj = XState["BoxConfigPosition"]; - return obj == null ? BoxLayoutPosition.Start : (BoxLayoutPosition)obj; - } - set - { - XState["BoxConfigPosition"] = value; - } - } - - /// - /// 内边距(当本容器的Layout=VBox或者HBox时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue("0")] - [Description("内边距(当本容器的Layout=VBox或者HBox时有效)")] - public string BoxConfigPadding - { - get - { - object obj = XState["BoxConfigPadding"]; - return obj == null ? "0" : (string)obj; - } - set - { - XState["BoxConfigPadding"] = value; - } - } - - /// - /// 子控件的外边距(当本容器的Layout=VBox或者HBox时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue("0")] - [Description("子控件的外边距(当本容器的Layout=VBox或者HBox时有效)")] - public string BoxConfigChildMargin - { - get - { - object obj = XState["BoxConfigChildMargin"]; - return obj == null ? "0" : (string)obj; - } - set - { - XState["BoxConfigChildMargin"] = value; - } - } - - /// - /// 控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue(0)] - [Description("控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效)")] - public int BoxFlex - { - get - { - object obj = XState["BoxFlex"]; - return obj == null ? 0 : (int)obj; - } - set - { - XState["BoxFlex"] = value; - } - } - - - /// - /// 外边距(当父容器的Layout=VBox或者HBox时有效) - /// - [Category(CategoryName.LAYOUT)] - [DefaultValue("")] - [Description("外边距(当父容器的Layout=VBox或者HBox时有效)")] - public string BoxMargin - { - get - { - object obj = XState["BoxMargin"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["BoxMargin"] = value; - } - } - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - if (Width != Unit.Empty) - { - OB.AddProperty("width", Width.Value); - } - if (Height != Unit.Empty) - { - OB.AddProperty("height", Height.Value); - } - - - #region Controls in Layout - - Container parentControl = null; - - // 此面板放在用户控件中的情况 - if (Parent is UserControl) - { - if (Parent.Parent is UserControlConnector) - { - parentControl = Parent.Parent.Parent as Container; - } - } - else - { - parentControl = Parent as Container; - } - - - if (parentControl != null) - { - if (parentControl.Layout == Layout.Anchor) - { - // 如果父节点是Anchor布局 - if (!String.IsNullOrEmpty(AnchorValue)) - { - OB.AddProperty("anchor", AnchorValue); - } - } - else if (parentControl.Layout == Layout.Column) - { - if (!String.IsNullOrEmpty(ColumnWidth)) - { - string columnWidth = StringUtil.ConvertPercentageToDecimalString(ColumnWidth); - - // 1.00 在IE下会有BUG,把1.00转换为0.999 - if (columnWidth == "1.00") - { - columnWidth = "0.999"; - } - OB.AddProperty("columnWidth", columnWidth, true); - } - } - else if (parentControl.Layout == Layout.Absolute) - { - if (AbsoluteX != Unit.Empty) - { - OB.AddProperty("x", AbsoluteX.Value); - } - if (AbsoluteY != Unit.Empty) - { - OB.AddProperty("y", AbsoluteY.Value); - } - } - else if (parentControl.Layout == Layout.Row) - { - if (!String.IsNullOrEmpty(RowHeight)) - { - string rowHeight = StringUtil.ConvertPercentageToDecimalString(RowHeight); - - // 1.00 在IE下会有BUG,把1.00转换为0.999 - if (rowHeight == "1.00") - { - rowHeight = "0.999"; - } - OB.AddProperty("rowHeight", rowHeight, true); - } - } - else if (parentControl.Layout == Layout.Table) - { - if (TableRowspan != 1) - { - OB.AddProperty("rowspan", TableRowspan); - } - - if (TableColspan != 1) - { - OB.AddProperty("colspan", TableColspan); - } - } - else if (parentControl.Layout == Layout.HBox || parentControl.Layout == Layout.VBox) - { - if (BoxFlex != 0) - { - OB.AddProperty("flex", BoxFlex); - } - - // 用户可能会设置 BoxMargin="0" 来覆盖 BoxConfigChildMargin 属性。 - if (BoxMargin != "") - { - OB.AddProperty("margins", BoxMargin); - } - - } - } - - #endregion - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Component.cs + * CreatedOn: 2008-04-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// + /// 控件基类(抽象类) + /// + public abstract class BoxComponent : Component + { + #region Constructor + + /// + /// 构造函数 + /// + public BoxComponent() + { + AddServerAjaxProperties("Width", "Height"); + AddClientAjaxProperties(); + + } + + #endregion + + #region Properties + + /// + /// 宽度 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("宽度")] + public Unit Width + { + get + { + object obj = FState["Width"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Width"] = value; + } + } + + + /// + /// 高度 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("高度")] + public Unit Height + { + get + { + object obj = FState["Height"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Height"] = value; + } + } + + + #endregion + + #region Layout Properties + + /// + /// 锚点值(当父容器的Layout=Anchor时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("锚点值(当父容器的Layout=Anchor时有效)")] + public string AnchorValue + { + get + { + object obj = FState["AnchorValue"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AnchorValue"] = value; + } + } + + + /// + /// 列的宽度(当父容器的Layout=Column时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("列的宽度(当父容器的Layout=Column时有效)")] + public string ColumnWidth + { + get + { + object obj = FState["ColumnWidth"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ColumnWidth"] = value; + } + } + + + /// + /// 行的宽度(当父容器的Layout=Row时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("行的宽度(当父容器的Layout=Row时有效)")] + public string RowHeight + { + get + { + object obj = FState["RowHeight"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RowHeight"] = value; + } + } + + + /// + /// 绝对定位的X坐标(当父容器的Layout=Absolute时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("绝对定位的X坐标(当父容器的Layout=Absolute时有效)")] + public Unit AbsoluteX + { + get + { + object obj = FState["AbsoluteX"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["AbsoluteX"] = value; + } + } + + + /// + /// 绝对定位的Y坐标(当父容器的Layout=Absolute时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("绝对定位的Y坐标(当父容器的Layout=Absolute时有效)")] + public Unit AbsoluteY + { + get + { + object obj = FState["AbsoluteY"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["AbsoluteY"] = value; + } + } + + + /// + /// 表格列数(当父容器的Layout=Table时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(3)] + [Description("表格列数(当父容器的Layout=Table时有效)")] + public int TableConfigColumns + { + get + { + object obj = FState["TableConfigColumns"]; + return obj == null ? 3 : (int)obj; + } + set + { + FState["TableConfigColumns"] = value; + } + } + + /// + /// 表格合并行(当父容器的Layout=Table时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(1)] + [Description("表格合并行(当父容器的Layout=Table时有效)")] + public int TableRowspan + { + get + { + object obj = FState["TableRowspan"]; + return obj == null ? 1 : (int)obj; + } + set + { + FState["TableRowspan"] = value; + } + } + + /// + /// 表格合并列(当父容器的Layout=Table时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(1)] + [Description("表格合并列(当父容器的Layout=Table时有效)")] + public int TableColspan + { + get + { + object obj = FState["TableColspan"]; + return obj == null ? 1 : (int)obj; + } + set + { + FState["TableColspan"] = value; + } + } + + /// + /// 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(BoxLayoutAlign.Stretch)] + [Description("控制子控件的位置(当本容器的Layout=VBox或者HBox时有效)")] + public BoxLayoutAlign BoxConfigAlign + { + get + { + object obj = FState["BoxConfigAlign"]; + return obj == null ? BoxLayoutAlign.Stretch : (BoxLayoutAlign)obj; + } + set + { + FState["BoxConfigAlign"] = value; + } + } + + /// + /// 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(BoxLayoutPosition.Start)] + [Description("控制子控件的位置(当本容器的Layout=VBox或者HBox时有效)")] + public BoxLayoutPosition BoxConfigPosition + { + get + { + object obj = FState["BoxConfigPosition"]; + return obj == null ? BoxLayoutPosition.Start : (BoxLayoutPosition)obj; + } + set + { + FState["BoxConfigPosition"] = value; + } + } + + /// + /// 内边距(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("0")] + [Description("内边距(当本容器的Layout=VBox或者HBox时有效)")] + public string BoxConfigPadding + { + get + { + object obj = FState["BoxConfigPadding"]; + return obj == null ? "0" : (string)obj; + } + set + { + FState["BoxConfigPadding"] = value; + } + } + + /// + /// 子控件的外边距(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("0")] + [Description("子控件的外边距(当本容器的Layout=VBox或者HBox时有效)")] + public string BoxConfigChildMargin + { + get + { + object obj = FState["BoxConfigChildMargin"]; + return obj == null ? "0" : (string)obj; + } + set + { + FState["BoxConfigChildMargin"] = value; + } + } + + /// + /// 控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(0)] + [Description("控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效)")] + public int BoxFlex + { + get + { + object obj = FState["BoxFlex"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["BoxFlex"] = value; + } + } + + + ///// + ///// 外边距 + ///// + //[Category(CategoryName.LAYOUT)] + //[DefaultValue("")] + //[Description("外边距")] + //[Obsolete("已废除,请使用Margin属性")] + //public string BoxMargin + //{ + // get + // { + // return Margin; + // } + // set + // { + // Margin = value; + // } + //} + + + /// + /// 是否显示分隔条 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否显示分隔条")] + public bool RegionSplit + { + get + { + object obj = FState["RegionSplit"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["RegionSplit"] = value; + } + } + + + /// + /// 区域所在的位置 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(Position.Center)] + [Description("区域所在的位置")] + public Position RegionPosition + { + get + { + object obj = FState["RegionPosition"]; + return obj == null ? Position.Center : (Position)obj; + } + set + { + FState["RegionPosition"] = value; + } + } + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("Width")) + { + sb.AppendFormat("{0}.f_setWidth();", XID); + } + + if (PropertyModified("Height")) + { + sb.AppendFormat("{0}.f_setHeight();", XID); + } + + + AddAjaxScript(sb); + + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (Width != Unit.Empty) + { + OB.AddProperty("width", Width.Value); + } + if (Height != Unit.Empty) + { + OB.AddProperty("height", Height.Value); + } + + + #region Controls in Layout + + + Container parentControl = GetParentControl() as Container; + + if (parentControl != null) + { + if (parentControl.Layout == Layout.Anchor) + { + // 如果父节点是Anchor布局 + if (!String.IsNullOrEmpty(AnchorValue)) + { + OB.AddProperty("anchor", AnchorValue); + } + } + else if (parentControl.Layout == Layout.Column) + { + if (!String.IsNullOrEmpty(ColumnWidth)) + { + string columnWidth = StringUtil.ConvertPercentageToDecimalString(ColumnWidth); + + // 1.00 在IE下会有BUG,把1.00转换为0.999 + if (columnWidth == "1.00") + { + columnWidth = "0.999"; + } + OB.AddProperty("columnWidth", columnWidth, true); + } + } + else if (parentControl.Layout == Layout.Absolute) + { + if (AbsoluteX != Unit.Empty) + { + OB.AddProperty("x", AbsoluteX.Value); + } + if (AbsoluteY != Unit.Empty) + { + OB.AddProperty("y", AbsoluteY.Value); + } + } + else if (parentControl.Layout == Layout.Table) + { + if (TableRowspan != 1) + { + OB.AddProperty("rowspan", TableRowspan); + } + + if (TableColspan != 1) + { + OB.AddProperty("colspan", TableColspan); + } + } + else if (parentControl.Layout == Layout.HBox || parentControl.Layout == Layout.VBox) + { + if (BoxFlex != 0) + { + OB.AddProperty("flex", BoxFlex); + } + + //// 用户可能会设置 BoxMargin="0" 来覆盖 BoxConfigChildMargin 属性。 + //if (BoxMargin != "") + //{ + // OB.AddProperty("margins", BoxMargin); + //} + + } + else if (parentControl.Layout == Layout.Region) + { + OB.AddProperty("region", PositionHelper.GetName(RegionPosition)); + + if (RegionSplit) + { + OB.AddProperty("split", true); + } + + } + } + + #endregion + + } + + /// + /// 获取当前控件的父容器 + /// + /// + protected ControlBase GetParentControl() + { + ControlBase parentControl = null; + + // 此面板放在用户控件中的情况 + if (Parent is UserControl || Parent is ContentPlaceHolder) + { + if (Parent.Parent is UserControlConnector || Parent.Parent is CPHConnector) + { + parentControl = Parent.Parent.Parent as ControlBase; + } + } + else + { + parentControl = Parent as ControlBase; + } + + return parentControl; + } + + #endregion + + } +} diff --git a/FineUI/BaseWebControls/ControlBase.Component/Component.cs b/FineUI/BaseWebControls/ControlBase.Component/Component.cs index 0dfcd32..795a524 100644 --- a/FineUI/BaseWebControls/ControlBase.Component/Component.cs +++ b/FineUI/BaseWebControls/ControlBase.Component/Component.cs @@ -1,380 +1,412 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Component.cs - * CreatedOn: 2008-04-14 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// - /// 控件基类(抽象类) - /// - public abstract class Component : ControlBase - { - #region Constructor - - /// - /// 构造函数 - /// - public Component() - { - AddServerAjaxProperties("CssClass", "CssStyle"); - AddClientAjaxProperties(); - - } - - #endregion - - #region Properties - - - /// - /// 页面加载后立即获得焦点 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(false)] - [Description("页面加载后立即获得焦点")] - public virtual bool FocusOnPageLoad - { - get - { - object obj = XState["FocusOnPageLoad"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["FocusOnPageLoad"] = value; - } - } - - - /// - /// [AJAX属性]控件样式类名 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]控件样式类名")] - public virtual string CssClass - { - get - { - object obj = XState["CssClass"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["CssClass"] = value; - } - } - - ///// - ///// 控件所在容器的样式类名 - ///// - //[Category(CategoryName.BASEOPTIONS)] - //[DefaultValue("")] - //[Description("控件所在容器的样式类名")] - //public virtual string ContainerClass - //{ - // get - // { - // object obj = XState["ContainerClass"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // XState["ContainerClass"] = value; - // } - //} - - ///// - ///// [AJAX属性]表单中每一项的样式类名 - ///// - //[Category(CategoryName.BASEOPTIONS)] - //[DefaultValue("")] - //[Description("[AJAX属性]表单中每一项的样式类名")] - //public virtual string FormItemClass - //{ - // get - // { - // object obj = XState["FormItemClass"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // XState["FormItemClass"] = value; - // } - //} - - /// - /// [AJAX属性]控件样式 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]控件样式")] - public virtual string CssStyle - { - get - { - object obj = XState["CssStyle"]; - return obj == null ? String.Empty : (string)obj; - } - set - { - XState["CssStyle"] = value; - } - } - - #region old code - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("控件容器样式类")] - //public string ContainerClassName - //{ - // get - // { - // object obj = BoxState["ExtendContainerClassName"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // BoxState["ExtendContainerClassName"] = value; - // } - //} - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("extjs控件类型")] - //public string Xtype - //{ - // get - // { - // object[] xtypeAttributes = GetType().GetCustomAttributes(typeof(XTypeAttribute), true); - // if (xtypeAttributes != null && xtypeAttributes.Length == 1) - // { - // return (xtypeAttributes[0] as XTypeAttribute).Name; - // } - - // return String.Empty; - // } - //} - - //public override string AccessKey - //{ - // get - // { - // return base.AccessKey; - // } - // set - // { - // base.AccessKey = value; - // } - //} - #endregion - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("CssStyle")) - { - sb.AppendFormat("{0}.el.applyStyles({1});", XID, JsHelper.Enquote(CssStyle)); - } - - // 老的 CssClass 会在 X.state(x0,{"CssClass":"green"}) 时自动删除,并自动添加新的 CssClass。 - // 为什么不在这里先removeClass,再addClass?因为此时我们已经不知道之前的CssClass是什么了,这里取得的是已经修改过的。 - // 在X.util的setXState函数中处理的 - if (PropertyModified("CssClass")) - { - //sb.AppendFormat("{0}.el.addClass({1});", XID, JsHelper.Enquote(CssClass)); - } - - //if (PropertyModified("FormItemClass")) - //{ - // sb.AppendFormat("{0}.el.addClass({1});", XID, JsHelper.Enquote(FormItemClass)); - //} - - AddAjaxScript(sb); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - if (!String.IsNullOrEmpty(CssClass)) - { - OB.AddProperty("cls", CssClass); - } - //if (!String.IsNullOrEmpty(ContainerClass)) - //{ - // OB.AddProperty("ctCls", ContainerClass); - //} - //if (!String.IsNullOrEmpty(FormItemClass)) - //{ - // OB.AddProperty("formItemCls", FormItemClass); - //} - - if (!String.IsNullOrEmpty(CssStyle)) - { - OB.AddProperty("style", CssStyle); - } - - //// 不保持状态 - //OB.AddProperty("stateful", false); - - - #region old code - //if (ContainerClassName != "") OB.AddProperty(OptionName.CtCls, ContainerClassName); - - // 需要为控件添加 display:inline; 属性,否则控件会单独占用一行 - // 这是不可行的解决方法,会造成LayoutPanel莫名奇妙的问题,去掉 - //if (CssStyle == "") - //{ - // CssStyle = "display:inline;"; - //} - //else if (!CssStyle.ToLower().Contains("display")) - //{ - // CssStyle += "display:inline;"; - //} - #endregion - - - if (FocusOnPageLoad) - { - string focusScript = String.Format("{0}.focus(true,500);", XID); - AddStartupAbsoluteScript(focusScript); - } - } - - #endregion - - #region GetFocusReference - - /// - /// 使控件获得焦点 - /// - public new void Focus() - { - PageContext.RegisterStartupScript(GetFocusReference()); - } - - - /// - /// 使控件获得焦点,并选中控件中的文本内容 - /// - /// 是否选中控件中的文本内容 - public void Focus(bool selectText) - { - PageContext.RegisterStartupScript(GetFocusReference(selectText)); - } - - /// - /// 使控件获得焦点,并选中控件中的文本内容 - /// - /// 是否选中控件中的文本内容 - /// 使控件获得焦点前延迟的毫秒数 - public void Focus(bool selectText, int delayMilliseconds) - { - PageContext.RegisterStartupScript(GetFocusReference(selectText, delayMilliseconds)); - } - - /// - /// 获得使控件获得焦点的脚本 - /// - /// JS脚本 - public virtual string GetFocusReference() - { - return String.Format("{0}.focus();", ScriptID); - } - - /// - /// 获得使控件获得焦点,并选中控件中的文本内容的脚本 - /// - /// 是否选中控件中的文本内容 - /// JS脚本 - public virtual string GetFocusReference(bool selectText) - { - return String.Format("{0}.focus({1});", ScriptID, selectText.ToString().ToLower()); - } - - /// - /// 获得使控件获得焦点,并选中控件中的文本内容的脚本 - /// - /// 是否选中控件中的文本内容 - /// 使控件获得焦点前延迟的毫秒数 - /// JS脚本 - public virtual string GetFocusReference(bool selectText, int delayMilliseconds) - { - return String.Format("{0}.focus({1}, {2});", ScriptID, selectText.ToString().ToLower(), delayMilliseconds); - } - - #endregion - - #region AddExtraStyle - - /// - /// 为已经添加到OB中的Style增加新的样式 - /// 注意:这个key-value不会保存到属性CssStyle中 - /// - /// - /// - protected void AddExtraStyle(string key, string value) - { - // string style = OB.GetProperty(OptionName.Style); - // 这样不行,添加到OB中的字符串都是被编码过的 - // 比如"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"",在JsObjectBuilder中的AddProperty中处理的。 - // 这样做是为了在JsObjectBuilder中的ToString中,这样来添加属性:sb.AppendFormat("{0}:{1},", key, _properties[key]); - - - string style = CssStyle.ToLower(); - - if (style == "" || !style.Contains(key)) - { - style += String.Format("{0}:{1};", key, value); - } - - OB.AddProperty("style", style); - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Component.cs + * CreatedOn: 2008-04-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// + /// 控件基类(抽象类) + /// + public abstract class Component : ControlBase + { + #region Constructor + + /// + /// 构造函数 + /// + public Component() + { + AddServerAjaxProperties("CssClass", "CssStyle"); + AddClientAjaxProperties(); + + } + + #endregion + + #region Properties + + + /// + /// 页面加载后立即获得焦点 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(false)] + [Description("页面加载后立即获得焦点")] + public virtual bool FocusOnPageLoad + { + get + { + object obj = FState["FocusOnPageLoad"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["FocusOnPageLoad"] = value; + } + } + + + /// + /// [AJAX属性]控件样式类名 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]控件样式类名")] + public virtual string CssClass + { + get + { + object obj = FState["CssClass"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CssClass"] = value; + } + } + + ///// + ///// 控件所在容器的样式类名 + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue("")] + //[Description("控件所在容器的样式类名")] + //public virtual string ContainerClass + //{ + // get + // { + // object obj = FState["ContainerClass"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["ContainerClass"] = value; + // } + //} + + ///// + ///// [AJAX属性]表单中每一项的样式类名 + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue("")] + //[Description("[AJAX属性]表单中每一项的样式类名")] + //public virtual string FormItemClass + //{ + // get + // { + // object obj = FState["FormItemClass"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["FormItemClass"] = value; + // } + //} + + /// + /// [AJAX属性]控件样式 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]控件样式")] + public virtual string CssStyle + { + get + { + object obj = FState["CssStyle"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["CssStyle"] = value; + } + } + + /// + /// 外边距 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("外边距")] + public string Margin + { + get + { + object obj = FState["Margin"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Margin"] = value; + } + } + + #region old code + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("控件容器样式类")] + //public string ContainerClassName + //{ + // get + // { + // object obj = BoxState["ExtendContainerClassName"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["ExtendContainerClassName"] = value; + // } + //} + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("extjs控件类型")] + //public string Xtype + //{ + // get + // { + // object[] xtypeAttributes = GetType().GetCustomAttributes(typeof(XTypeAttribute), true); + // if (xtypeAttributes != null && xtypeAttributes.Length == 1) + // { + // return (xtypeAttributes[0] as XTypeAttribute).Name; + // } + + // return String.Empty; + // } + //} + + //public override string AccessKey + //{ + // get + // { + // return base.AccessKey; + // } + // set + // { + // base.AccessKey = value; + // } + //} + #endregion + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("CssStyle")) + { + sb.AppendFormat("{0}.el.applyStyles({1});", XID, JsHelper.Enquote(CssStyle)); + } + + // 老的 CssClass 会在 X.state(x0,{"CssClass":"green"}) 时自动删除,并自动添加新的 CssClass。 + // 为什么不在这里先removeClass,再addClass?因为此时我们已经不知道之前的CssClass是什么了,这里取得的是已经修改过的。 + // 在X.util的setFState函数中处理的 + if (PropertyModified("CssClass")) + { + //sb.AppendFormat("{0}.el.addClass({1});", XID, JsHelper.Enquote(CssClass)); + } + + //if (PropertyModified("FormItemClass")) + //{ + // sb.AppendFormat("{0}.el.addClass({1});", XID, JsHelper.Enquote(FormItemClass)); + //} + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (!String.IsNullOrEmpty(CssClass)) + { + OB.AddProperty("cls", CssClass); + } + //if (!String.IsNullOrEmpty(ContainerClass)) + //{ + // OB.AddProperty("ctCls", ContainerClass); + //} + //if (!String.IsNullOrEmpty(FormItemClass)) + //{ + // OB.AddProperty("formItemCls", FormItemClass); + //} + + if (!String.IsNullOrEmpty(CssStyle)) + { + OB.AddProperty("style", CssStyle); + } + + //// 不保持状态 + //OB.AddProperty("stateful", false); + + if (!String.IsNullOrEmpty(Margin)) + { + Container parentControl = Parent as Container; + if (parentControl != null && (parentControl.Layout == Layout.HBox || parentControl.Layout == Layout.VBox)) + { + OB.AddProperty("margins", Margin); + } + else + { + OB.AddProperty("margin", Margin); + } + } + + + #region old code + //if (ContainerClassName != "") OB.AddProperty(OptionName.CtCls, ContainerClassName); + + // 需要为控件添加 display:inline; 属性,否则控件会单独占用一行 + // 这是不可行的解决方法,会造成LayoutPanel莫名奇妙的问题,去掉 + //if (CssStyle == "") + //{ + // CssStyle = "display:inline;"; + //} + //else if (!CssStyle.ToLower().Contains("display")) + //{ + // CssStyle += "display:inline;"; + //} + #endregion + + + if (FocusOnPageLoad) + { + string focusScript = String.Format("{0}.focus(true,500);", XID); + AddStartupAbsoluteScript(focusScript); + } + } + + #endregion + + #region GetFocusReference + + /// + /// 使控件获得焦点 + /// + public new void Focus() + { + PageContext.RegisterStartupScript(GetFocusReference()); + } + + + /// + /// 使控件获得焦点,并选中控件中的文本内容 + /// + /// 是否选中控件中的文本内容 + public void Focus(bool selectText) + { + PageContext.RegisterStartupScript(GetFocusReference(selectText)); + } + + /// + /// 使控件获得焦点,并选中控件中的文本内容 + /// + /// 是否选中控件中的文本内容 + /// 使控件获得焦点前延迟的毫秒数 + public void Focus(bool selectText, int delayMilliseconds) + { + PageContext.RegisterStartupScript(GetFocusReference(selectText, delayMilliseconds)); + } + + /// + /// 获得使控件获得焦点的脚本 + /// + /// JS脚本 + public virtual string GetFocusReference() + { + return String.Format("{0}.focus();", ScriptID); + } + + /// + /// 获得使控件获得焦点,并选中控件中的文本内容的脚本 + /// + /// 是否选中控件中的文本内容 + /// JS脚本 + public virtual string GetFocusReference(bool selectText) + { + return String.Format("{0}.focus({1});", ScriptID, selectText.ToString().ToLower()); + } + + /// + /// 获得使控件获得焦点,并选中控件中的文本内容的脚本 + /// + /// 是否选中控件中的文本内容 + /// 使控件获得焦点前延迟的毫秒数 + /// JS脚本 + public virtual string GetFocusReference(bool selectText, int delayMilliseconds) + { + return String.Format("{0}.focus({1}, {2});", ScriptID, selectText.ToString().ToLower(), delayMilliseconds); + } + + #endregion + + #region AddExtraStyle + + /// + /// 为已经添加到OB中的Style增加新的样式 + /// 注意:这个key-value不会保存到属性CssStyle中 + /// + /// + /// + protected void AddExtraStyle(string key, string value) + { + // string style = OB.GetProperty(OptionName.Style); + // 这样不行,添加到OB中的字符串都是被编码过的 + // 比如"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"",在JsObjectBuilder中的AddProperty中处理的。 + // 这样做是为了在JsObjectBuilder中的ToString中,这样来添加属性:sb.AppendFormat("{0}:{1},", key, _properties[key]); + + + string style = CssStyle.ToLower(); + + if (style == "" || !style.Contains(key)) + { + style += String.Format("{0}:{1};", key, value); + } + + OB.AddProperty("style", style); + } + + #endregion + + } +} diff --git a/FineUI/BaseWebControls/ControlBase/BaseCollection.cs b/FineUI/BaseWebControls/ControlBase/BaseCollection.cs index 50c79b2..19795b4 100644 --- a/FineUI/BaseWebControls/ControlBase/BaseCollection.cs +++ b/FineUI/BaseWebControls/ControlBase/BaseCollection.cs @@ -1,137 +1,137 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: BaseCollection.cs - * CreatedOn: 2012-11-24 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// - /// 控件集合 - /// - public class BaseCollection : Collection where T : ControlBase - { - internal delegate void ItemsChangeHandler(); - internal event ItemsChangeHandler ItemsChange; - - - private ControlBase _parent; - private string _groupName; - - /// - /// 构造函数 - /// - /// 父控件实例 - public BaseCollection(ControlBase parentControl) - { - _parent = parentControl; - _groupName = Guid.NewGuid().ToString(); - } - - /// - /// 向集合中插入一个元素 - /// - /// - /// - protected override void InsertItem(int index, T item) - { - item.CollectionGroupName = _groupName; - item.RenderWrapperNode = false; - - int startIndex = GetStartIndex(); - _parent.Controls.AddAt(startIndex + index, item); - - base.InsertItem(index, item); - - if (this.ItemsChange != null) - { - this.ItemsChange(); - } - } - - /// - /// 删除集合中的一个元素 - /// - /// - protected override void RemoveItem(int index) - { - int startIndex = GetStartIndex(); - _parent.Controls.RemoveAt(startIndex + index); - - base.RemoveItem(index); - - if (this.ItemsChange != null) - { - this.ItemsChange(); - } - } - - /// - /// 清空集合 - /// - protected override void ClearItems() - { - int startIndex = GetStartIndex(); - // We should only remove this collection related controls - // Note we must loop from the last element(Count-1) to the first one(0) - for (int i = startIndex + Count - 1; i >= startIndex; i--) - { - _parent.Controls.RemoveAt(i); - } - - base.ClearItems(); - - if (this.ItemsChange != null) - { - this.ItemsChange(); - } - } - - - /// - /// 获取类型 T 在父控件子集中的开始位置 - /// - /// - private int GetStartIndex() - { - int startIndex = 0; - - foreach (Control control in _parent.Controls) - { - if (control is ControlBase && (control as ControlBase).CollectionGroupName == _groupName) - { - break; - } - startIndex++; - } - - return startIndex; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: BaseCollection.cs + * CreatedOn: 2012-11-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// + /// 控件集合 + /// + public class BaseCollection : Collection where T : ControlBase + { + internal delegate void ItemsChangeHandler(); + internal event ItemsChangeHandler ItemsChange; + + + private ControlBase _parent; + private string _groupName; + + /// + /// 构造函数 + /// + /// 父控件实例 + public BaseCollection(ControlBase parentControl) + { + _parent = parentControl; + _groupName = Guid.NewGuid().ToString(); + } + + /// + /// 向集合中插入一个元素 + /// + /// + /// + protected override void InsertItem(int index, T item) + { + item.CollectionGroupName = _groupName; + item.RenderWrapperNode = false; + + int startIndex = GetStartIndex(); + _parent.Controls.AddAt(startIndex + index, item); + + base.InsertItem(index, item); + + if (this.ItemsChange != null) + { + this.ItemsChange(); + } + } + + /// + /// 删除集合中的一个元素 + /// + /// + protected override void RemoveItem(int index) + { + int startIndex = GetStartIndex(); + _parent.Controls.RemoveAt(startIndex + index); + + base.RemoveItem(index); + + if (this.ItemsChange != null) + { + this.ItemsChange(); + } + } + + /// + /// 清空集合 + /// + protected override void ClearItems() + { + int startIndex = GetStartIndex(); + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = startIndex + Count - 1; i >= startIndex; i--) + { + _parent.Controls.RemoveAt(i); + } + + base.ClearItems(); + + if (this.ItemsChange != null) + { + this.ItemsChange(); + } + } + + + /// + /// 获取类型 T 在父控件子集中的开始位置 + /// + /// + private int GetStartIndex() + { + int startIndex = 0; + + foreach (Control control in _parent.Controls) + { + if (control is ControlBase && (control as ControlBase).CollectionGroupName == _groupName) + { + break; + } + startIndex++; + } + + return startIndex; + } + + } +} diff --git a/FineUI/BaseWebControls/ControlBase/ControlBase.cs b/FineUI/BaseWebControls/ControlBase/ControlBase.cs index 46d29ae..70342e0 100644 --- a/FineUI/BaseWebControls/ControlBase/ControlBase.cs +++ b/FineUI/BaseWebControls/ControlBase/ControlBase.cs @@ -1,2058 +1,2198 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ControlBase.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - - -using System.Reflection; -using System.Configuration; -using System.IO; -using System.Text.RegularExpressions; -using System.Security.Permissions; -using System.Collections; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.IO.Compression; - - -namespace FineUI -{ - /// - /// 控件基类(抽象类) - /// - [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public abstract class ControlBase : Control, INamingContainer - { - #region Constructor - - /// - /// 构造函数 - /// - public ControlBase() - { - - _state = new XState(this); - - AddServerAjaxProperties("Hidden", "Enabled"); - AddClientAjaxProperties(); - - } - - private XState _state = null; - - /// - /// XState用来在服务器和客户端之间持久化控件状态。 - /// - protected XState XState - { - get - { - return _state; - } - set - { - _state = value; - } - } - - /// - /// 添加服务器AJAX属性 - /// - /// 属性列表 - protected void AddServerAjaxProperties(params string[] props) - { - foreach (string prop in props) - { - if (!_serverAjaxProperties.Contains(prop)) - { - _serverAjaxProperties.Add(prop); - } - if (!_ajaxProperties.Contains(prop)) - { - _ajaxProperties.Add(prop); - } - } - - } - - /// - /// 添加客户端AJAX属性 - /// - /// 属性列表 - protected void AddClientAjaxProperties(params string[] props) - { - foreach (string prop in props) - { - if (!_clientAjaxProperties.Contains(prop)) - { - _clientAjaxProperties.Add(prop); - } - if (!_ajaxProperties.Contains(prop)) - { - _ajaxProperties.Add(prop); - } - } - - } - - /// - /// 添加Gzip压缩属性 - /// - /// 属性列表 - protected void AddGzippedAjaxProperties(params string[] props) - { - foreach (string prop in props) - { - if (!_gzippedAjaxProperties.Contains(prop)) - { - _gzippedAjaxProperties.Add(prop); - } - } - } - - - private List _ajaxProperties = new List(); - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal List AjaxProperties - { - get { return _ajaxProperties; } - set { _ajaxProperties = value; } - } - - private List _serverAjaxProperties = new List(); - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal List ServerAjaxProperties - { - get { return _serverAjaxProperties; } - set { _serverAjaxProperties = value; } - } - - private List _clientAjaxProperties = new List(); - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal List ClientAjaxProperties - { - get { return _clientAjaxProperties; } - set { _clientAjaxProperties = value; } - } - - private List _gzippedAjaxProperties = new List(); - - /// - /// 目前Gzippped的属性支持JObject/JArray/String类型 - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal List GzippedAjaxProperties - { - get { return _gzippedAjaxProperties; } - set { _gzippedAjaxProperties = value; } - } - - /// - /// 标示是否初始化完成 - /// - internal bool InitialComplete = false; - - #endregion - - #region Internal Properties - - - private string _xid = String.Empty; - - /// - /// JavaScript中使用ID(比如:x0, x1) - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal string XID - { - get - { - if (String.IsNullOrEmpty(_xid)) - { - _xid = ClientJavascriptIDManager.Instance.GetNextJavascriptID(); - } - return _xid; - } - } - - /// - /// 获取控件实例的JavaScript代码(比如:X('RegionPanel1_Button1')) - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal string ScriptID - { - get - { - return String.Format("X('{0}')", ClientID); - } - } - - - private bool _renderWrapperNode = true; - - /// - /// 是否向页面输出控件的外部容器(默认:true) - /// 否:只创建Javascript对象而不添加到页面中 - /// 是:创建Javascript对象,并添加到页面中,页面上添加占位符 - /// - internal virtual bool RenderWrapperNode - { - get - { - return _renderWrapperNode; - } - set - { - _renderWrapperNode = value; - } - } - - private OptionBuilder _optionBuilder; - - /// - /// 参数对象创建器 - /// - internal OptionBuilder OB - { - get - { - if (_optionBuilder == null) - { - _optionBuilder = new OptionBuilder(); - } - return _optionBuilder; - } - } - - - - private JObject _postBackState = null; - - /// - /// 从 HTTP 请求中恢复当前控件的状态 - /// 比如当前请求 Request.Form["X_STATE"] = {"btnClientClick":{"OnClientClick":"X.util.alert(\"This is an alert dialog\",\"\",Ext.MessageBox.INFO,'');"},"btnPressed":{"Pressed":false}} - /// 并且当前控件的 ClientID 是 "btnPressed",则返回值为 JObject 对象 {"Pressed":false} - /// - internal JObject PostBackState - { - get - { - if (_postBackState == null) - { - JObject states = ResourceManager.Instance.PostBackStates; - - _postBackState = states.Value(ClientID); - if (_postBackState == null) - { - _postBackState = new JObject(); - } - - // 启用XState压缩 - if (EnableXStateCompress) - { - foreach (string property in _gzippedAjaxProperties) - { - string gzippedString = _postBackState.Value(property + "_GZ"); - if (!String.IsNullOrEmpty(gzippedString)) - { - // 从压缩后的Gzip字符串恢复属性的值(可能为JObject/JArray/String) - PropertyInfo info = this.GetType().GetProperty(property); - if (info != null) - { - string ungzippedString = StringUtil.Ungzip(gzippedString); - if (info.PropertyType == typeof(String)) - { - _postBackState[property] = ungzippedString; - } - else if (info.PropertyType == typeof(JObject)) - { - _postBackState[property] = JObject.Parse(ungzippedString); - } - else if (info.PropertyType == typeof(JArray)) - { - _postBackState[property] = JArray.Parse(ungzippedString); - } - } - - } - } - } - } - return _postBackState; - } - } - - - private string _collectionGroupName; - - /// - /// 此控件所在的集合分组,只在BaseCollection中使用 - /// - internal string CollectionGroupName - { - get { return _collectionGroupName; } - set { _collectionGroupName = value; } - } - - #endregion - - #region ReadOnly Properties - - /// - /// 不支持此属性(禁用控件默认的ViewState) - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableViewState - { - get - { - return false; - } - } - - - /// - /// 控件的客户端ID(比如:RegionPanel1_Button1) - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string ClientID - { - get - { - return base.ClientID; - } - } - - - // ID是设计的时候所指定的ID。 - // ClientID是当这个控件生成到客户端页面时候,需要在客户端访问时候用的。 - // UniqueID是当需要参与服务端回传的时候用的。 - // 备注:当控件是子控件的时候(例如在用户控件中的Button),ClientID在HTML页面中是作为控件的ID属性, - // UniqueID是作为控件的Name属性,如果不是子控件,那么ClientID和UniqueID是相同的 - - /// - /// 控件外部容器的客户端ID(比如:Button1_wrapper) - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string WrapperID - { - get - { - return String.Format("{0}_wrapper", ClientID); - } - } - - - /// - /// 产品名称 - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string ProductName - { - get - { - return GlobalConfig.ProductName; - } - } - - /// - /// 产品版本 - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public virtual string ProductVersion - { - get - { - return GlobalConfig.ProductVersion; - } - } - - #endregion - - #region Properties - - /// - /// HTML标签属性 - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public JObject Attributes - { - get - { - object obj = XState["Attributes"]; - if (obj == null) - { - XState["Attributes"] = new JObject(); - obj = XState["Attributes"]; - } - return (JObject)obj; - } - set - { - XState["Attributes"] = value; - } - } - - - /// - /// 控件ID - /// - [Category(CategoryName.BASEOPTIONS)] - [Description("控件ID")] - public override string ID - { - get - { - return base.ID; - } - set - { - base.ID = value; - } - } - - - /// - /// [AJAX属性]是否可用 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(true)] - [Description("[AJAX属性]是否可用")] - public virtual bool Enabled - { - get - { - object obj = XState["Enabled"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["Enabled"] = value; - } - } - - - /// - /// 指示控件是否被渲染出来(如果想要显示隐藏控件,请使用Hidden属性) - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(true)] - [Description("指示控件是否被渲染出来(如果想要显示隐藏控件,请使用Hidden属性)")] - public override bool Visible - { - get - { - return base.Visible; - } - set - { - base.Visible = value; - } - } - - - /// - /// [AJAX属性]是否隐藏控件 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(false)] - [Description("[AJAX属性]是否隐藏控件")] - public virtual bool Hidden - { - get - { - object obj = XState["Hidden"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Hidden"] = value; - } - } - - /// - /// 隐藏模式 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(HideMode.Display)] - [Description("隐藏的模式")] - public virtual HideMode HideMode - { - get - { - object obj = XState["HideMode"]; - return obj == null ? HideMode.Display : (HideMode)obj; - } - set - { - XState["HideMode"] = value; - } - } - - - /// - /// 是否启用AJAX - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(true)] - [Description("是否启用AJAX")] - public virtual bool EnableAjax - { - get - { - object obj = XState["EnableAjax"]; - if (obj == null) - { - if (DesignMode) - { - return true; - } - else - { - return PageManager.Instance.EnableAjax; - } - } - return (bool)obj; - } - set - { - XState["EnableAjax"] = value; - } - } - - - /// - /// 是否启用XState压缩(默认为true) - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(true)] - [Description("是否启用XState压缩(默认为true)")] - public virtual bool EnableXStateCompress - { - get - { - object obj = XState["EnableXStateCompress"]; - if (obj == null) - { - if (DesignMode) - { - return true; - } - else - { - return PageManager.Instance.EnableXStateCompress; - } - } - return (bool)obj; - } - set - { - XState["EnableXStateCompress"] = value; - } - } - - - /// - /// 是否启用Ajax正在加载提示 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(true)] - [Description("是否启用Ajax正在加载提示")] - public bool EnableAjaxLoading - { - get - { - object obj = XState["EnableAjaxLoading"]; - if (obj == null) - { - if (DesignMode) - { - return true; - } - else - { - return PageManager.Instance.EnableAjaxLoading; - } - } - return (bool)obj; - } - set - { - XState["EnableAjaxLoading"] = value; - } - } - - - /// - /// Ajax正在加载提示的类型 - /// - [Category(CategoryName.BASEOPTIONS)] - [DefaultValue(AjaxLoadingType.Default)] - [Description("Ajax正在加载提示的类型")] - public AjaxLoadingType AjaxLoadingType - { - get - { - object obj = XState["AjaxLoadingType"]; - if (obj == null) - { - if (DesignMode) - { - return AjaxLoadingType.Default; - } - else - { - return PageManager.Instance.AjaxLoadingType; - } - } - return (AjaxLoadingType)obj; - } - set - { - XState["AjaxLoadingType"] = value; - } - } - - - /// - /// 是否处于FineUI的AJAX回发过程 - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool IsFineUIAjaxPostBack - { - get - { - return ResourceManager.Instance.IsFineUIAjaxPostBack; - } - } - - - #endregion - - #region OnInit - - /// - /// 页面初始化事件 - /// - /// - protected override void OnInit(EventArgs e) - { - base.OnInit(e); - - if (!DesignMode) - { - // 确保所有子控件都已经被创建 - EnsureChildControls(); - - // 如果控件没有设置 ID,则自动创建一个(比如:ct100) - base.EnsureID(); - - // 此时,ASPX 页面上标签定义的控件已经初始化完毕 - // 如果当前是页面回发,则从 HTTP 请求的表单数据中(X_STATE)恢复当前控件的状态 - if (Page.IsPostBack) - { - RecoverPropertiesFromJObject(PostBackState); - } - - // 向子控件公开方法,可以在备份初始化属性之前修改属性值 - OnInitControl(); - - // 备份初始化属性值 - XState.BackupInitializedProperties(); - - // 标识初始化完成 - InitialComplete = true; - - } - } - - /// - /// 在备份初始化属性之前修改属性值 - /// - /// 此时对控件的属性做修改是安全的: - /// 1. 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 - /// 2. 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 X_STATE 已经恢复完毕 - /// - protected virtual void OnInitControl() - { - - } - - #endregion - - #region RenderBeginTag RenderEndTag - - /// - /// 重载 RenderControl,为了向子控件公开 RenderBeginTag 和 RenderEndTag 两个方法 - /// - /// 服务器控件输出流 - public override void RenderControl(HtmlTextWriter writer) - { - RenderBeginTag(writer); - - base.RenderControl(writer); - - RenderEndTag(writer); - } - - - /// - /// 渲染控件的开始标签 - /// - /// 输出流 - protected virtual void RenderBeginTag(HtmlTextWriter writer) - { - if (RenderWrapperNode) - { - writer.Write(String.Format("
", WrapperID)); - } - } - - /// - /// 渲染控件的结束标签 - /// - /// 输出流 - protected virtual void RenderEndTag(HtmlTextWriter writer) - { - if (RenderWrapperNode) - { - writer.Write("
"); - } - } - - - - //protected override void Render(HtmlTextWriter writer) - //{ - // base.Render(writer); - - // if (Page != null) - // { - // Page.VerifyRenderingInServerForm(this); - // } - //} - - #endregion - - #region OnPreRender - - /// - /// 渲染 HTML 之前调用 - /// - /// - protected override void OnPreRender(EventArgs e) - { - base.OnPreRender(e); - - // 在页面第一次加载,正常的 PostBack以及 AJAX 都需要执行下面代码 - if (this is IPostBackDataHandler) - { - // 如果当前控件实现了 IPostBackDataHandler 接口,则需要调用 RegisterRequiresPostBack, - // 以便在 ControlState 中保存这个控件的 ClientID,然后下次回发时会由此调用此控件的 LoadPostData 函数 - // 主要用来处理客户端改变控件属性的情况 - Page.RegisterRequiresPostBack(this); - } - - - OnBothPreRender(); - - // 计算被修改的属性列表 - XState.CalculateModifiedProperties(); - - if (IsFineUIAjaxPostBack) - { - OnAjaxPreRender(); - - if (_ajaxScriptBuilder.Length > 0) - { - ResourceManager.Instance.AjaxScriptList.Add(_ajaxScriptBuilder.ToString()); - - // 添加在 JavaScript 中使用的控件变量的短格式(比如 x0=X('RegionPanel1_Button1')) - ResourceManager.Instance.AddAjaxShortName(ClientID, XID); - } - } - else - { - // 页面第一次加载和正常的回发两种情况 - OnFirstPreRender(); - } - } - - /// - /// 渲染 HTML 之前调用(计算被修改属性列表之前调用,可以在此修改属性) - /// - protected virtual void OnBothPreRender() - { - - } - - /// - /// 渲染 HTML 之前调用(AJAX回发) - /// - protected virtual void OnAjaxPreRender() - { - StringBuilder sb = new StringBuilder(); - #region old code - // There are new properties need to be persisted during the next postback. - // Re-write the "x_props" property of the component instance. - //if (XState.TotalModifiedProperties.Count > PostBackState.Count) - //{ - // sb.AppendFormat("{0}.x_props={1};", XID, new JArray(XState.TotalModifiedProperties)); - //} - - //foreach (string property in XState.ModifiedProperties) - //{ - // string propertyValue = String.Empty; - - // PropertyInfo info = this.GetType().GetProperty(property); - // if (info.PropertyType == typeof(String)) - // { - // propertyValue = JsHelper.Enquote(info.GetValue(this, null).ToString()); - // } - // else if (info.PropertyType == typeof(Boolean)) - // { - // // "true", "false" - // propertyValue = info.GetValue(this, null).ToString().ToLower(); - // } - // else if (info.PropertyType.BaseType == typeof(Enum)) - // { - // // ConfirmTarget -> "Self", "Parent", "Top" - // propertyValue = JsHelper.Enquote(StringUtil.GetEnumName((Enum)info.GetValue(this, null))); - // } - - // sb.AppendFormat("{0}.x_p_{1}={2};", XID, property, propertyValue); - //} - #endregion - - List currentModifiedProperties = XState.ModifiedProperties; - if (currentModifiedProperties.Count > 0) - { - // 更新当前控件的 X_STATE 状态 - sb.AppendFormat("X.state({0},{1});", XID, ConvertPropertiesToJObject(currentModifiedProperties).ToString(Formatting.None)); - } - - sb.Append(GetHiddenPropertyChangedScript()); - - sb.Append(GetEnabledPropertyChangedScript()); - - AddAjaxScript(sb); - } - - /// - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// - protected virtual void OnFirstPreRender() - { - #region old code - //foreach (string property in XState.TotalModifiedProperties) - //{ - // object propertyValue = null; - - // PropertyInfo info = this.GetType().GetProperty(property); - // if (info.PropertyType == typeof(String)) - // { - // propertyValue = info.GetValue(this, null).ToString(); - // } - // else if (info.PropertyType == typeof(Boolean)) - // { - // propertyValue = Convert.ToBoolean(info.GetValue(this, null)); - // } - // else if (info.PropertyType.BaseType == typeof(Enum)) - // { - // propertyValue = StringUtil.GetEnumName((Enum)info.GetValue(this, null)); - // } - - // OB.AddProperty("x_p_" + property, propertyValue); - - //} - - //// These properties has been modified in the past postbacks. - //// Every FineUI control should has this property. - //OB.AddProperty("x_props", new JArray(XState.TotalModifiedProperties), true); - - #endregion - - List totalModifiedProperties = XState.GetTotalModifiedProperties(); - if (totalModifiedProperties.Count > 0) - { - string xstate = ConvertPropertiesToJObject(totalModifiedProperties).ToString(Formatting.None); - AddStartupScript(String.Format("var {0}={1};", GetXStateScriptID(), xstate)); - OB.AddProperty("x_state", GetXStateScriptID(), true); - } - else - { - OB.AddProperty("x_state", "{}", true); - } - - - - // Every component need this property. - OB.AddProperty("id", ClientID); - - if (RenderWrapperNode) - { - OB.AddProperty("renderTo", WrapperID); - } - - if (Hidden) - { - OB.AddProperty("hidden", true); - } - if (HideMode != HideMode.Display) - { - OB.AddProperty("hideMode", HideModeName.GetName(HideMode)); - } - - if (!Enabled) - { - OB.AddProperty("disabled", true); - } - - - #region old code - - //if (AjaxPropertyChanged("Hidden", Hidden)) - //{ - // HiddenPropertyChanged(); - //} - - //// 渲染到客户端时的JavascriptId - //OB.AddProperty("id", ClientJavascriptID); - - // 不需要这样做, - //// 判断父控件是否用户控件(UserControl) - //if (Parent is UserControl || Parent is ContentPlaceHolder) - //{ - // if (!ResourceManagerInstance.IsStartupScriptExist(Parent as Control)) - // { - // AddStartupScript(Parent, String.Empty); - // } - //} - - #endregion - } - - - /// - /// 获取XState的JS变量 - /// - /// - protected string GetXStateScriptID() - { - return String.Format("{0}_state", XID); - } - - #endregion - - #region PropertyModified - - /// - /// 回发过程中此属性是否被改变 - /// 如果是客户端可以改变的属性,仅在服务器端改变时才返回 true, - /// (如果仅是客户端改变,则返回 false,因为客户端改变的属性不需要再输出相应的 JavaScript 脚本) - /// - /// - /// - protected bool PropertyModified(string propertyName) - { - bool modified = XState.ModifiedProperties.Contains(propertyName); - if (modified) - { - if (ClientAjaxProperties.Contains(propertyName)) - { - if (XState.ClientPropertiesModifiedInServer.Contains(propertyName)) - { - return true; - } - else - { - return false; - } - } - else - { - return true; - } - } - return false; - } - - /// - /// 回发过程中这些属性是否被改变 - /// 只要任何属性被改变,就返回 true - /// - /// - /// - protected bool PropertyModified(params string[] propertyNames) - { - foreach (string property in propertyNames) - { - if (PropertyModified(property)) - { - return true; - } - } - return false; - } - - //protected bool ClientPropertyModifiedInServer(string propertyName) - //{ - // return XState.ClientPropertiesModifiedInServer.Contains(propertyName); - //} - - - #region old code - ///// - ///// Whether the property has been changed in the past postbacks. - ///// - ///// - ///// - //protected bool TotalPropertyModified(string propertyName) - //{ - // return XState.TotalModifiedProperties.Contains(propertyName); - //} - - ///// - ///// Get client value of a property in the postback state(X_STATE). - ///// - ///// - ///// - //protected object GetPostBackClientValue(string propertyName) - //{ - // return PostBackState["X_" + propertyName]; - //} - #endregion - - #endregion - - #region RecoverPropertiesFromXState ConvertPropertiesToXState - - /// - /// 从JObject恢复控件的属性 - /// - /// 对象属性的JObject形式 - public void RecoverPropertiesFromJObject(JObject state) - { - foreach (JProperty propertyObj in state.Properties()) - { - string property = propertyObj.Name; - PropertyInfo info = this.GetType().GetProperty(property); - if (info != null) - { - if (info.PropertyType.BaseType == typeof(Enum)) - { - info.SetValue(this, Enum.Parse(info.PropertyType, state.Value(property)), null); - } - else if (info.PropertyType == typeof(Unit)) - { - info.SetValue(this, Unit.Parse(state.Value(property)), null); - } - else if (info.PropertyType.BaseType == typeof(Array)) - { - if (info.PropertyType == typeof(Int32[])) - { - info.SetValue(this, JSONUtil.IntArrayFromJArray(state.Value(property)), null); - } - else if (info.PropertyType == typeof(String[])) - { - info.SetValue(this, JSONUtil.StringArrayFromJArray(state.Value(property)), null); - } - } - else - { - JToken jtoken = state.Property(property).Value; - if (jtoken is JContainer) - { - info.SetValue(this, jtoken, null); - } - else - { - object propertyValue = ((JValue)jtoken).Value; - - // 类型“System.Int64”的对象无法转换为类型“System.Int32”。 - // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Int32]”。 - // 类型“System.Int64”的对象无法转换为类型“System.Int16”。 - // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Int16]”。 - if (propertyValue != null && propertyValue.GetType() == typeof(Int64)) - { - if (info.PropertyType == typeof(Int32) || info.PropertyType == typeof(Int32?)) - { - propertyValue = Convert.ToInt32(propertyValue); - } - - if (info.PropertyType == typeof(Int16) || info.PropertyType == typeof(Int16?)) - { - propertyValue = Convert.ToInt16(propertyValue); - } - - // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Double]”。 - // 注意:“2.0”会被解析为Int64,而“2.1”会被解析为Double,所以有可能会进入这个分支 - if (info.PropertyType == typeof(Double) || info.PropertyType == typeof(Double?)) - { - propertyValue = Convert.ToDouble(propertyValue); - } - - if (info.PropertyType == typeof(float) || info.PropertyType == typeof(float?)) - { - propertyValue = Convert.ToSingle(propertyValue); - } - } - - info.SetValue(this, propertyValue, null); - } - - } - } - - } - } - - - /// - /// 将控件的属性列表转化为JObject对象 - /// - /// 属性列表 - /// 属性列表的JObject形式 - public JObject ConvertPropertiesToJObject(List propertyList) - { - JObject jo = new JObject(); - foreach (string property in propertyList) - { - bool propertyGzippped = false; - if (EnableXStateCompress) - { - propertyGzippped = _gzippedAjaxProperties.Contains(property); - } - - object propertyValue = GetPropertyJSONValue(property); - - string propertyStringValueUsedInGzipped = String.Empty; - - if (propertyValue is JToken) - { - JToken tokenValue = propertyValue as JToken; - jo.Add(property, tokenValue); - - - // 此属性启用Gzip压缩,则先计算字符串值 - if (propertyGzippped) - { - propertyStringValueUsedInGzipped = tokenValue.ToString(Newtonsoft.Json.Formatting.None); - } - - } - else - { - if (propertyValue is String) - { - // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. - // http://www.xiaoxiaozi.com/2010/02/24/1708/ - // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string - string propertyValueStr = propertyValue.ToString().Replace("", @"<\/script>"); - jo.Add(property, propertyValueStr); - - // 此属性启用Gzip压缩,则先计算字符串值 - if (propertyGzippped) - { - propertyStringValueUsedInGzipped = propertyValueStr; - } - - } - else if (propertyValue is Unit) - { - int intValue = (Int32)((Unit)propertyValue).Value; - jo.Add(property, intValue); - } - else - { - jo.Add(property, new JValue(propertyValue)); - } - } - - - - if (propertyGzippped && !String.IsNullOrEmpty(propertyStringValueUsedInGzipped)) - { - string propertyGzippedValue = String.Empty; - - // 1. 小于500个字符,不启用Gzipped压缩 - if (propertyStringValueUsedInGzipped.Length > 500) - { - propertyGzippedValue = StringUtil.Gzip(propertyStringValueUsedInGzipped); - - // 2. 压缩效果太差(不到原始大小的50%),则不启用Gzipped压缩 - if (propertyGzippedValue.Length > (propertyStringValueUsedInGzipped.Length / 2)) - { - propertyGzippedValue = String.Empty; - } - } - - - // 无论 propertyGzippedValue 是否为空字符串,都要输出来覆盖上次的结果(因为并非每一次的GZipped都有值) - jo.Add(property + "_GZ", propertyGzippedValue); - - } - - - } - return jo; //.ToString(Formatting.None); - } - - - // 获取属性的 JSON 对象值 - internal object GetPropertyJSONValue(string prop) - { - object propValue = null; - - PropertyInfo info = this.GetType().GetProperty(prop); - if (info != null) - { - propValue = info.GetValue(this, null); - - if (info.PropertyType.BaseType == typeof(Enum)) - { - propValue = StringUtil.EnumToName((Enum)propValue); - } - else if (info.PropertyType.BaseType == typeof(Array)) - { - if (propValue == null) - { - propValue = new JArray(); - } - else - { - propValue = new JArray((Array)propValue); - } - } - } - - return propValue; - } - - #endregion - - #region AddAjaxScript - - private StringBuilder _ajaxScriptBuilder = new StringBuilder(); - - /// - /// AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 - /// - /// - protected void AddAjaxScript(string script) - { - if (!String.IsNullOrEmpty(script)) - { - _ajaxScriptBuilder.Append(script); - } - } - - /// - /// AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 - /// - /// - protected void AddAjaxScript(StringBuilder sb) - { - if (sb.Length > 0) - { - _ajaxScriptBuilder.Append(sb); - } - } - - - #endregion - - #region AddStartupCSS - - /// - /// 添加CSS样式 - /// - /// 键 - /// CSS内容 - protected void AddStartupCSS(string key, string cssContent) - { - if (!IsFineUIAjaxPostBack) - { - ResourceManager.Instance.AddStartupCSS(key, cssContent); - } - } - - /// - /// 删除CSS样式 - /// - /// 键 - protected void RemoveStartupCSS(string key) - { - if (!IsFineUIAjaxPostBack) - { - ResourceManager.Instance.RemoveStartupCSS(key); - } - } - - #endregion - - #region AddStartupScript AddStartupAbsoluteScript - - /// - /// 向页面添加控件无关脚本 - /// - /// 客户端脚本 - protected void AddStartupAbsoluteScript(string script) - { - if (!IsFineUIAjaxPostBack) - { - ResourceManager.Instance.AddAbsoluteStartupScript(script); - } - } - - /// - /// 向页面添加控件无关脚本 - /// - /// 客户端脚本 - /// 脚本层级 - protected void AddStartupAbsoluteScript(string script, int level) - { - if (!IsFineUIAjaxPostBack) - { - ResourceManager.Instance.AddAbsoluteStartupScript(script, level); - } - } - - /// - /// 添加控件相关脚本 - /// - /// 客户端脚本 - protected void AddStartupScript(string scriptContent) - { - if (!IsFineUIAjaxPostBack) - { - // 合并在基类中注册的脚本,然后整体注册 - if (ResourceManager.Instance.IsStartupScriptExist(this)) - { - scriptContent = ResourceManager.Instance.GetStartupScript(this).Script + scriptContent; - ResourceManager.Instance.RemoveStartupScript(this); - } - - if (Visible) - { - ResourceManager.Instance.AddStartupScript(this, scriptContent); - } - } - - #region old code - - //if (!IsFineUIAjaxPostBack) - //{ - // // 如果是页面第一次加载,或者不是FineUIAjax(比如是普通的PostBack或者是Asp.netAjax回发) - // AddStartupScript(this, scriptContent); - - // if (AjaxForceCompleteUpdate) - // { - // BoxState["__AllScript__"] = scriptContent.GetHashCode().ToString("X8"); - // } - // //SaveAjaxProperty("AllScript", scriptContent, true); - //} - //else - //{ - // if (AjaxForceCompleteUpdate) - // { - // // 如果强制更新控件的整个内容,并且内容变化了,则更新 - // if (BoxState["__AllScript__"].ToString() != scriptContent.GetHashCode().ToString("X8")) - // { - // AjaxCompleteUpdateControl(scriptContent); - // } - // } - // else - // { - // AjaxPartialUpdateControl(); - // } - //} - - #endregion - } - - #endregion - - #region GetHiddenPropertyChangedScript GetEnabledPropertyChangedScript - - /// - /// 获取 Hidden 属性改变的 JavaScript 脚本 - /// 有些控件可能需要特别的逻辑,因此这里为虚函数(比如 Window 控件) - /// - /// 客户端脚本 - protected virtual string GetHiddenPropertyChangedScript() - { - if (PropertyModified("Hidden")) - { - return String.Format("{0}.x_setVisible();", XID); - } - return String.Empty; - } - - /// - /// 获取 Enabled 属性改变的 JavaScript 脚本 - /// 有些控件可能需要特别的逻辑,因此这里为虚函数 - /// - /// 客户端脚本 - protected virtual string GetEnabledPropertyChangedScript() - { - if (PropertyModified("Enabled")) - { - return String.Format("{0}.x_setDisabled();", XID); - } - return String.Empty; - } - - #endregion - - #region GetPostBackEventReference - - /// - /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','');) - /// - /// 客户端脚本 - public string GetPostBackEventReference() - { - return GetPostBackEventReference(String.Empty); - } - - /// - /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) - /// - /// 事件参数 - /// 客户端脚本 - public string GetPostBackEventReference(string eventArgument) - { - #region old code - // 必须调用 Page.ClientScript.GetPostBackEventReference,不能手工返回js字符串 - ////return Page.ClientScript.GetPostBackEventReference(this, argument) + ";"; - //if (EnableAjax) - //{ - // return String.Format("__doAjaxPostBack('{0}','{1}');", this.ClientID, argument); - //} - //else - //{ - // //return String.Format("__doPostBack('{0}','{1}');", this.ClientID, argument); - // return Page.ClientScript.GetPostBackEventReference(this, argument) + ";"; - //} - - - //if (PageManager.Instance.EnableAjax && !EnableAjax) - //{ - // postBackScript += GetSetHiddenFieldValueScript(ResourceManager.DISABLE_AJAX_CONTROL_ID, this.UniqueID); - //} - #endregion - - StringBuilder sb = new StringBuilder(); - - if (EnableAjax != PageManager.Instance.EnableAjax) - { - sb.AppendFormat("X.control_enable_ajax={0};", EnableAjax ? "true" : "false"); - } - - if (EnableAjaxLoading != PageManager.Instance.EnableAjaxLoading) - { - sb.AppendFormat("X.control_enable_ajax_loading={0};", EnableAjaxLoading ? "true" : "false"); - } - - if (AjaxLoadingType != PageManager.Instance.AjaxLoadingType) - { - sb.AppendFormat("X.control_ajax_loading_type='{0}';", AjaxLoadingTypeName.GetName(AjaxLoadingType)); - } - - sb.Append(Page.ClientScript.GetPostBackEventReference(this, eventArgument)); - sb.Append(";"); - - return sb.ToString(); - } - - // This is the same as UniqueID - // Get PostBackID that can be used in postback event. - //internal string GetPostBackID() - //{ - // string postbackscript = Page.ClientScript.GetPostBackEventReference(this, String.Empty); - // // __doPostBack('regionPanel$leftRegion$Button1','') - // int start = postbackscript.IndexOf("'"), - // end = postbackscript.LastIndexOf("','')"); - // return postbackscript.Substring(start + 1, end - start - 1); - //} - - #endregion - - #region GetSetHiddenFieldValueScript - - /// - /// 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) - /// - /// 隐藏字段ID - /// 隐藏字段值 - /// - protected string GetSetHiddenFieldValueScript(string id, string value) - { - return String.Format("X.util.setHiddenFieldValue('{0}','{1}');", id, value); - } - - - /// - /// 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) - /// - /// 隐藏字段ID - /// 隐藏字段值 - /// 隐藏字段所在的页面对象(JavaScript实例window) - /// 客户端脚本 - protected string GetSetHiddenFieldValueScript(string id, string value, string windowObj) - { - if (String.IsNullOrEmpty(windowObj) || windowObj == "window") - { - return GetSetHiddenFieldValueScript(id, value); - } - return String.Format("{2}.X.util.setHiddenFieldValue('{0}','{1}');", id, value, windowObj); - } - - #endregion - - #region ResolveAttribuites - - /// - /// 添加Attributes中的属性值 - /// - /// HtmlNodeBuilder对象 - protected void ResolveAttribuites(HtmlNodeBuilder htmlBuilder) - { - foreach (JProperty propertyObj in Attributes.Properties()) - { - string propName = propertyObj.Name; - string propValue = Attributes.Value(propName); - htmlBuilder.SetProperty(propName, propValue); - } - } - - #endregion - - #region oldcode - - //// 获取客户端可用的图标 URL 地址 - //protected string GetResolvedIconUrl(Icon icon, string iconUrl) - //{ - // /* - // string url = iconUrl; - // if (String.IsNullOrEmpty(url)) - // { - // if (icon != Icon.None) - // { - // url = IconHelper.GetIconUrl(icon); - // } - // } - - // return ResolveUrl(url); - // * */ - // return IconHelper.GetResolvedIconUrl(icon, iconUrl); - //} - - #endregion - - #region oldcode - - - //private Dictionary _xProperties = new Dictionary(); - - //internal void SaveXProperty(string key, string value) - //{ - // _xProperties[key] = value; - //} - - //internal bool XPropertyModified(string key, string currentValue) - //{ - // if (_xProperties.ContainsKey(key)) - // { - // string lastValue = _xProperties[key]; - // if (lastValue != currentValue) - // { - // return true; - // } - // } - // return false; - //} - - - - - //private Dictionary _ajaxProperties__ = new Dictionary(); - - ///// - ///// - ///// - ///// - ///// - ///// - //internal bool AjaxPropertyChanged(string key, object objSource) - //{ - // // 如果不是FineUIAjax回发,则不执行此逻辑 - // if (!IsFineUIAjaxPostBack) - // { - // return false; - // } - - // if (!_ajaxProperties__.ContainsKey(key)) - // { - // // 对于在Page_Load之后动态添加的控件,肯定会运行到这里,对这些属性不做处理 - // // 所以动态添加控件,一定要在 Page_Init 中进行 - // // throw new Exception(String.Format("Please set the property [{0}] in Page_OnPreLoad.", key)); - // return false; - // } - - // string objStr = String.Empty; - // if (objSource != null) - // { - // objStr = objSource.ToString(); - // } - - // if (_ajaxProperties__[key] == objStr) - // { - // return false; - // } - // return true; - //} - - //internal void SaveAjaxProperty(string key, object objSource) - //{ - // string saveValue = String.Empty; - // if (objSource != null) - // { - // saveValue = objSource.ToString(); - // } - - // _ajaxProperties__[key] = saveValue; - //} - - - - - #endregion - - #region oldcode - - ///// - ///// 如果不是FineUIAjax回发,则保存值的改变到ViewState,同时返回false - ///// 如果是FineUIAjax回发,则判断此key存储在ViewState的值是否改变,如果改变则返回true - ///// - ///// - ///// - ///// - //internal bool AjaxPropertyChanged(string key, object objSource) - //{ - // string hashCode = CreateAjaxPropertyValue(objSource); - - // // 如果不是FineUIAjax回发,则保存值的改变到ViewState,同时返回false - // if (!IsFineUIAjaxPostBack) - // { - // SaveAjaxProperty(key, hashCode); - // return false; - // } - - // if (GetAjaxProperty(key) != hashCode) - // { - // SaveAjaxProperty(key, hashCode); - // return true; - // } - // else - // { - // return false; - // } - //} - - - ///// - ///// 保存HashCode到ViewState - ///// - ///// - ///// - ///// - //internal void SaveAjaxProperty(string key, object hashCode, bool source) - //{ - // string hashCodeStr = String.Empty; - // if (hashCode != null) - // { - // hashCodeStr = hashCode.ToString(); - // if (source) - // { - // hashCodeStr = CreateAjaxPropertyValue(hashCode); - // } - // } - - // SaveAjaxProperty(key, hashCodeStr); - //} - - ///// - ///// 生成需要保存的Ajax属性的值 - ///// 对于Boolean型的,直接返回"0"或者"1" - ///// 对于其他类型,返回其ToString后的HashCode - ///// - ///// - ///// - //private string CreateAjaxPropertyValue(object objSource) - //{ - // if (objSource is Boolean) - // { - // return (Boolean)objSource ? "1" : "0"; - // } - - // string strSource = objSource.ToString(); - // return String.IsNullOrEmpty(strSource) ? "" : strSource.GetHashCode().ToString("X8"); - //} - - ///// - ///// 保存HashCode到ViewState - ///// - ///// - ///// - //private void SaveAjaxProperty(string key, string hashCode) - //{ - // key = String.Format("{0}", key); - // ViewState[key] = hashCode; - //} - - - ///// - ///// 从ViewState读取HashCode - ///// - ///// - ///// - //private string GetAjaxProperty(string key) - //{ - // key = String.Format("{0}", key); - - // object obj = ViewState[key]; - // return obj == null ? String.Empty : (string)obj; - //} - - #endregion - - #region oldcode - - //private void RenderAjaxUpdateScript() - //{ - // if (_ajaxUpdateScriptList.Count > 0) - // { - // StringBuilder sb = new StringBuilder(); - // foreach (string script in _ajaxUpdateScriptList) - // { - // sb.Append(script); - // } - - // AddStartupScript(this, sb.ToString()); - // } - //} - - - ///// - ///// 全部更新不适用于所有控件 - ///// - ///// - //private void AjaxCompleteUpdateControl(string scriptContent) - //{ - // if (this.Controls.Count > 0) - // { - // // 如果是容器控件,则目前不支持Ajax更新 - // // TODO - // } - // else - // { - - // #region 重要说明 - - // // 这是一个复杂的过程,有两种情况需要考虑: - // // 1.直接渲染的控件,先销毁,在重新渲染 - // // 2.依赖父容器渲染的的控件,首先取得父容器,本控件在父容器的位置,然后从父容器中销毁此控件,创建新的控件,将新的控件添加到删除的位置,父容器重新布局。 - // // 第二种情况的整体结构如下 - // ////// 1.取得父容器 - // ////// var owner=X.i3.ownerCt; - // ////// 2.本控件在父容器的位置 - // ////// var insertIndex=owner.items.indexOf(X.i3); - // ////// 3.从父容器中销毁此控件 - // ////// owner.remove(X.i3); - // ////// 4.创建新的控件 - // ////// X.i3=new Ext.form.TextField({id:"SimpleForm1_tbxUserName",stateful:false,fieldLabel:"用户名2",labelSeparator:" *",anchor:"-25px",name:"SimpleForm1$tbxUserName",disabled:false,allowBlank:false,listeners:{change:function(){box_pageStateChange();}}}); - // ////// 5.将新的控件添加到删除的位置 - // ////// owner.insert(insertIndex,X.i3); - // ////// 6.父容器重新布局 - // ////// owner.doLayout(); - - - // #endregion - - // string startupScript = String.Empty; - - // // 如果是Panel,并且不使用布局,则需要把内容先移出来,否则会在Panel被重建时被清空 - // if (this is PanelBase && (this as PanelBase).RenderChildrenAsContent) - // { - // startupScript += String.Format("Ext.get(X.{0}.contentEl).hide();Ext.get(X.{0}.contentEl).appendTo(document.forms[0]);", ClientJavascriptID); - // } - - // // 更新Javascript对象和UI重新布局 - // startupScript += String.Format("X.ajax.updateObject(X.{0},{1},{2});", - // ClientJavascriptID, - // String.Format("function(){{{0}}}", scriptContent), - // RenderWrapperDiv.ToString().ToLower()); - - // AddStartupScript(this, startupScript); - // } - //} - - - //[Category(CategoryName.BASEOPTIONS)] - //[DefaultValue(false)] - //[Description("Ajax回发时强制更新此控件全部内容")] - //internal virtual bool AjaxForceCompleteUpdate - //{ - // get - // { - // object obj = BoxState["AjaxForceCompleteUpdate"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["AjaxForceCompleteUpdate"] = value; - // } - //} - - #endregion - - #region oldcode - - - //public override void RenderBeginTag(HtmlTextWriter writer) - //{ - // if (RenderImmediately) - // { - // //writer.AddAttribute(HtmlTextWriterAttribute.Id, ContainerID); - // //writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline"); - // //writer.RenderBeginTag(HtmlTextWriterTag.Div); - - // // 用上面的语句,div中间有很大的空白,看着不爽 - // writer.Write(String.Format("
", ContainerID)); - // } - //} - - //public override void RenderEndTag(HtmlTextWriter writer) - //{ - // if (RenderImmediately) - // { - // //writer.RenderEndTag(); - // writer.Write("
"); - // } - //} - - - //private string _beforeOnPreRenderScript = String.Empty; - - ///// - ///// 此控件预渲染之前需要执行的脚本 - ///// - //internal string BeforeOnPreRenderScript - //{ - // get - // { - // return _beforeOnPreRenderScript; - // } - // set - // { - // _beforeOnPreRenderScript = value; - // } - //} - - //#region IsInUpdatePanel - - ///// - ///// 此控件是否在UpdatePanel中 - ///// 注意:在局部回发时,只要在 UpdatePanel 中的控件都要更新,但有例外情况(如果UpdatePanel属性 UpdateMode="Conditional") - ///// - ///// - ///// - //public bool IsInPartialRendering() - //{ - // if (HttpContext.Current != null && HttpContext.Current.Request != null) - // { - // for (Control control = this.Parent; control != null; control = control.Parent) - // { - // if (control.GetType().FullName.Contains("System.Web.UI.UpdatePanel")) - // { - // if ((control as UpdatePanel).IsInPartialRendering) - // { - // return true; - // } - // } - // } - // } - // return false; - //} - - //#endregion - - //#region RefParentControl - - //private ControlBase _refParentControl; - - ///// - ///// 需要指定父控件,以便保持控件的JS的渲染顺序是正确的(目前只在MasterPage中使用过一次) - ///// - //internal ControlBase RefParentControl - //{ - // get { return _refParentControl; } - // set { _refParentControl = value; } - //} - - //#endregion - - - ///// - ///// 添加启动脚本 - ///// 这个方法容易让人误解,去除不用 - ///// - ///// - //protected void AddStartupScript(string script) - //{ - // #region old code - // //// 如果是局部回发,并且此控件不在UpdatePanel中,则不重新创建此控件 - // //if (ResourceHelper.IsPartialPostBack() && ResourceHelper.IsContainScriptManager(Page) && !IsInUpdatePanel()) - // //{ - // // return; - // //} - - // //if (ResourceHelper.IsPartialPostBack(Page) && !IsInPartialRendering()) - // //{ - // // return; - // //} - - // //string addOnScript = ""; - // //if (AddOnJavaScript != "" && AddOnJavaScript.Contains("{0}")) - // //{ - // // addOnScript = String.Format(AddOnJavaScript, ClientID); - // //} - // //_rm.AddStartupScript(this, scriptContent + addOnScript); - // #endregion - - // AddStartupScript(this, script); - //} - - - - //protected void AddStartupScript(Control control, string script) - //{ - // AddStartupScript(control, script, String.Empty); - //} - - ///// - ///// 添加启动脚本 - ///// - ///// - ///// - //protected void AddStartupScript(Control control, string script, string extraScript) - //{ - // // 如果控件 可见, 才渲染 javascript 到页面中 - // if (Visible) - // { - // ResourceManager.Instance.AddStartupScript(control, script, extraScript); - // } - //} - - - - //protected virtual void SetDirty() - //{ - // //ViewState.SetDirty(true); - //} - - - - ////bool IStateManager.IsTrackingViewState - ////{ - //// get - //// { - //// return IsTrackingViewState; - //// } - ////} - - ////void IStateManager.LoadViewState(object state) - ////{ - //// LoadViewState(state); - ////} - - ////object IStateManager.SaveViewState() - ////{ - //// return SaveViewState(); - ////} - - ////void IStateManager.TrackViewState() - ////{ - //// TrackViewState(); - ////} - - - //void ISetDirty.SetDirty() - //{ - // //SetDirty(); - //} - - #endregion - - #region oldcode - - ///// - ///// 在页面的Page_Load之前执行 - ///// - ///// - ///// - //protected virtual void OnPreLoad(object sender, EventArgs e) - //{ - // //SaveAjaxProperty("Hidden", Hidden); - //} - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlBase.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +using System.Reflection; +using System.Configuration; +using System.IO; +using System.Text.RegularExpressions; +using System.Security.Permissions; +using System.Collections; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.IO.Compression; +using System.ComponentModel.Design; + + +namespace FineUI +{ + /// + /// 控件基类(抽象类) + /// + [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] + [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class ControlBase : Control, INamingContainer + { + #region Constructor + + /// + /// 构造函数 + /// + public ControlBase() + { + + _state = new FState(this); + + AddServerAjaxProperties("Hidden", "Enabled"); + AddClientAjaxProperties(); + + } + + private FState _state = null; + + /// + /// FState用来在服务器和客户端之间持久化控件状态。 + /// + protected FState FState + { + get + { + return _state; + } + set + { + _state = value; + } + } + + /// + /// 添加服务器AJAX属性 + /// + /// 属性列表 + protected void AddServerAjaxProperties(params string[] props) + { + foreach (string prop in props) + { + if (!_serverAjaxProperties.Contains(prop)) + { + _serverAjaxProperties.Add(prop); + } + if (!_ajaxProperties.Contains(prop)) + { + _ajaxProperties.Add(prop); + } + } + + } + + /// + /// 添加客户端AJAX属性 + /// + /// 属性列表 + protected void AddClientAjaxProperties(params string[] props) + { + foreach (string prop in props) + { + if (!_clientAjaxProperties.Contains(prop)) + { + _clientAjaxProperties.Add(prop); + } + if (!_ajaxProperties.Contains(prop)) + { + _ajaxProperties.Add(prop); + } + } + + } + + /// + /// 添加Gzip压缩属性 + /// + /// 属性列表 + protected void AddGzippedAjaxProperties(params string[] props) + { + foreach (string prop in props) + { + if (!_gzippedAjaxProperties.Contains(prop)) + { + _gzippedAjaxProperties.Add(prop); + } + } + } + + + private List _ajaxProperties = new List(); + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal List AjaxProperties + { + get { return _ajaxProperties; } + set { _ajaxProperties = value; } + } + + private List _serverAjaxProperties = new List(); + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal List ServerAjaxProperties + { + get { return _serverAjaxProperties; } + set { _serverAjaxProperties = value; } + } + + private List _clientAjaxProperties = new List(); + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal List ClientAjaxProperties + { + get { return _clientAjaxProperties; } + set { _clientAjaxProperties = value; } + } + + private List _gzippedAjaxProperties = new List(); + + /// + /// 目前Gzippped的属性支持JObject/JArray/String类型 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal List GzippedAjaxProperties + { + get { return _gzippedAjaxProperties; } + set { _gzippedAjaxProperties = value; } + } + + /// + /// 标示是否初始化完成 + /// + internal bool InitialComplete = false; + + #endregion + + #region Internal Properties + + //private ControlBase _virtualParent; + + ///// + ///// 虚拟的父控件,为了保证生产JS脚本的顺序(比如在处理按钮的MenuID属性时使用) + ///// + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //internal ControlBase VirtualParent + //{ + // get { return _virtualParent; } + // set { _virtualParent = value; } + //} + + + private string _xid = String.Empty; + + /// + /// JavaScript中使用ID(比如:x0, x1) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string XID + { + get + { + if (String.IsNullOrEmpty(_xid)) + { + _xid = ClientJavascriptIDManager.Instance.GetNextJavascriptID(); + } + return _xid; + } + } + + /// + /// 获取控件实例的JavaScript代码(比如:F('RegionPanel1_Button1')) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string ScriptID + { + get + { + return String.Format("F('{0}')", ClientID); + } + } + + + private bool _renderWrapperNode = true; + + /// + /// 是否向页面输出控件的外部容器(默认:true) + /// 否:只创建Javascript对象而不添加到页面中 + /// 是:创建Javascript对象,并添加到页面中,页面上添加占位符 + /// + internal virtual bool RenderWrapperNode + { + get + { + return _renderWrapperNode; + } + set + { + _renderWrapperNode = value; + } + } + + + private bool _wrapperNodeInlineBlock = true; + + internal virtual bool WrapperNodeInlineBlock + { + get + { + return _wrapperNodeInlineBlock; + } + set + { + _wrapperNodeInlineBlock = value; + } + } + + + + private OptionBuilder _optionBuilder; + + /// + /// 参数对象创建器 + /// + internal OptionBuilder OB + { + get + { + if (_optionBuilder == null) + { + _optionBuilder = new OptionBuilder(); + } + return _optionBuilder; + } + } + + + + private JObject _postBackState = null; + + /// + /// 从 HTTP 请求中恢复当前控件的状态 + /// 比如当前请求 Request.Form["F_STATE"] = {"btnClientClick":{"OnClientClick":"F.util.alert(\"This is an alert dialog\",\"\",Ext.MessageBox.INFO,'');"},"btnPressed":{"Pressed":false}} + /// 并且当前控件的 ClientID 是 "btnPressed",则返回值为 JObject 对象 {"Pressed":false} + /// + internal JObject PostBackState + { + get + { + if (_postBackState == null) + { + JObject states = ResourceManager.Instance.PostBackStates; + + _postBackState = states.Value(ClientID); + if (_postBackState == null) + { + _postBackState = new JObject(); + } + + // 启用FState压缩 + if (EnableFStateCompress) + { + foreach (string property in _gzippedAjaxProperties) + { + string gzPropertyName = property + "_GZ"; + JToken gzToken = _postBackState[gzPropertyName]; + if (gzToken != null) + { + string gzippedString = gzToken.Value(); + if (!String.IsNullOrEmpty(gzippedString)) + { + // 从压缩后的Gzip字符串恢复属性的值(可能为JObject/JArray/String) + PropertyInfo info = this.GetType().GetProperty(property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (info != null) + { + string ungzippedString = StringUtil.Ungzip(gzippedString); + if (info.PropertyType == typeof(String)) + { + _postBackState[property] = ungzippedString; + } + else if (info.PropertyType == typeof(JObject)) + { + _postBackState[property] = JObject.Parse(ungzippedString); + } + else if (info.PropertyType == typeof(JArray)) + { + _postBackState[property] = JArray.Parse(ungzippedString); + } + } + } + + // 从回发的PostBackState中删除GZ属性,已经还原了压缩之前的属性 + _postBackState.Remove(gzPropertyName); + } + } + } + } + return _postBackState; + } + } + + + private string _collectionGroupName; + + /// + /// 此控件所在的集合分组,只在BaseCollection中使用 + /// + internal string CollectionGroupName + { + get { return _collectionGroupName; } + set { _collectionGroupName = value; } + } + + #endregion + + #region ReadOnly Properties + + /// + /// 不支持此属性(禁用控件默认的ViewState) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableViewState + { + get + { + return false; + } + } + + + /// + /// 控件的客户端ID(比如:RegionPanel1_Button1) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string ClientID + { + get + { + return base.ClientID; + } + } + + + // ID是设计的时候所指定的ID。 + // ClientID是当这个控件生成到客户端页面时候,需要在客户端访问时候用的。 + // UniqueID是当需要参与服务端回传的时候用的。 + // 备注:当控件是子控件的时候(例如在用户控件中的Button),ClientID在HTML页面中是作为控件的ID属性, + // UniqueID是作为控件的Name属性,如果不是子控件,那么ClientID和UniqueID是相同的 + + /// + /// 控件外部容器的客户端ID(比如:Button1_wrapper) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string WrapperID + { + get + { + return String.Format("{0}_wrapper", ClientID); + } + } + + + /// + /// 产品名称 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string ProductName + { + get + { + return GlobalConfig.ProductName; + } + } + + /// + /// 产品版本 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public virtual string ProductVersion + { + get + { + return GlobalConfig.ProductVersion; + } + } + + #endregion + + #region Properties + + /// + /// HTML标签属性 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JObject Attributes + { + get + { + object obj = FState["Attributes"]; + if (obj == null) + { + FState["Attributes"] = new JObject(); + obj = FState["Attributes"]; + } + return (JObject)obj; + } + set + { + FState["Attributes"] = value; + } + } + + + /// + /// 控件ID + /// + [Category(CategoryName.BASEOPTIONS)] + [Description("控件ID")] + public override string ID + { + get + { + return base.ID; + } + set + { + base.ID = value; + } + } + + + /// + /// [AJAX属性]是否可用 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否可用")] + public virtual bool Enabled + { + get + { + object obj = FState["Enabled"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["Enabled"] = value; + } + } + + /// + /// 指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool RenderToClient + { + get + { + return base.Visible; + } + set + { + base.Visible = value; + } + } + + + /// + /// 只读属性,指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("只读属性,指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性)")] + public override bool Visible + { + get + { + return base.Visible; + } + } + + + /// + /// [AJAX属性]是否隐藏控件 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否隐藏控件")] + public virtual bool Hidden + { + get + { + object obj = FState["Hidden"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Hidden"] = value; + } + } + + /// + /// 隐藏模式 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(HideMode.Display)] + [Description("隐藏的模式")] + public virtual HideMode HideMode + { + get + { + object obj = FState["HideMode"]; + return obj == null ? HideMode.Display : (HideMode)obj; + } + set + { + FState["HideMode"] = value; + } + } + + + /// + /// 是否启用AJAX + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("是否启用AJAX")] + public virtual bool EnableAjax + { + get + { + object obj = FState["EnableAjax"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return PageManager.Instance.EnableAjax; + } + } + return (bool)obj; + } + set + { + FState["EnableAjax"] = value; + } + } + + + /// + /// 是否启用FState压缩(默认为false) + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(false)] + [Description("是否启用FState压缩(默认为false)")] + public virtual bool EnableFStateCompress + { + get + { + object obj = FState["EnableFStateCompress"]; + if (obj == null) + { + if (DesignMode) + { + return false; + } + else + { + return PageManager.Instance.EnableFStateCompress; + } + } + return (bool)obj; + } + set + { + FState["EnableFStateCompress"] = value; + } + } + + + /// + /// 是否启用Ajax正在加载提示 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("是否启用Ajax正在加载提示")] + public bool EnableAjaxLoading + { + get + { + object obj = FState["EnableAjaxLoading"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return PageManager.Instance.EnableAjaxLoading; + } + } + return (bool)obj; + } + set + { + FState["EnableAjaxLoading"] = value; + } + } + + + /// + /// Ajax正在加载提示的类型 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(AjaxLoadingType.Default)] + [Description("Ajax正在加载提示的类型")] + public AjaxLoadingType AjaxLoadingType + { + get + { + object obj = FState["AjaxLoadingType"]; + if (obj == null) + { + if (DesignMode) + { + return AjaxLoadingType.Default; + } + else + { + return PageManager.Instance.AjaxLoadingType; + } + } + return (AjaxLoadingType)obj; + } + set + { + FState["AjaxLoadingType"] = value; + } + } + + + /// + /// 是否处于FineUI的AJAX回发过程 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool IsFineUIAjaxPostBack + { + get + { + return ResourceManager.Instance.IsFineUIAjaxPostBack; + } + } + + + #endregion + + #region Listeners + + private ListenerCollection _listeners; + + /// + /// 客户端事件列表 + /// + [Description("客户端事件列表")] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ListenerCollection Listeners + { + get + { + if (_listeners == null) + { + _listeners = new ListenerCollection(); + } + return _listeners; + } + } + + #endregion + + #region OnInit + + /// + /// 页面初始化事件 + /// + /// + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + // 确保所有子控件都已经被创建 + EnsureChildControls(); + + // 如果控件没有设置 ID,则自动创建一个(比如:ct100) + base.EnsureID(); + + // 确保ResourceManager实例的Page和当前页面一致 + ResourceManager.EnsureResourceManagerInstance(Page); + + // 如果在Page_Init之后创建的控件,则不会触发InitComplete,就需要立即调用。那么就需要判断当前页面是否已经初始化完成 + if (ResourceManager.Instance.IsPageInitCompleted) + { + Page_InitComplete(null, null); + } + else + { + // 页面初始化完毕后,再进行FState的相关操作(类似LoadViewState阶段,但LoadViewState并非每个控件都会经历,所以只能注册页面的InitComplete) + Page.InitComplete += Page_InitComplete; + } + } + } + + private void Page_InitComplete(object sender, EventArgs e) + { + // 如果是页面回发,则恢复FState + if (Page.IsPostBack) + { + RecoverPropertiesFromJObject(PostBackState); + } + + + // 向子控件公开方法,可以在备份初始化属性之前修改属性值 + OnInitControl(); + + // 备份初始化属性值 + FState.BackupInitializedProperties(); + + // 标识初始化完成 + InitialComplete = true; + + + } + + + /// + /// 在备份初始化属性之前修改属性值 + /// + /// 此时对控件的属性做修改是安全的: + /// 1. 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 + /// 2. 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 F_STATE 已经恢复完毕 + /// + protected virtual void OnInitControl() + { + + } + + #endregion + + #region RenderBeginTag RenderEndTag + + /// + /// 重载 RenderControl,为了向子控件公开 RenderBeginTag 和 RenderEndTag 两个方法 + /// + /// 服务器控件输出流 + public override void RenderControl(HtmlTextWriter writer) + { + RenderBeginTag(writer); + + base.RenderControl(writer); + + RenderEndTag(writer); + } + + + /// + /// 渲染控件的开始标签 + /// + /// 输出流 + protected virtual void RenderBeginTag(HtmlTextWriter writer) + { + if (RenderWrapperNode) + { + if (WrapperNodeInlineBlock) + { + writer.Write(String.Format("
", WrapperID)); + } + else + { + writer.Write(String.Format("
", WrapperID)); + } + } + } + + /// + /// 渲染控件的结束标签 + /// + /// 输出流 + protected virtual void RenderEndTag(HtmlTextWriter writer) + { + if (RenderWrapperNode) + { + writer.Write("
"); + } + } + + + + //protected override void Render(HtmlTextWriter writer) + //{ + // base.Render(writer); + + // if (Page != null) + // { + // Page.VerifyRenderingInServerForm(this); + // } + //} + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用 + /// + /// + protected override void OnPreRender(EventArgs e) + { + base.OnPreRender(e); + + // 在页面第一次加载,正常的 PostBack以及 AJAX 都需要执行下面代码 + if (this is IPostBackDataHandler) + { + // 如果当前控件实现了 IPostBackDataHandler 接口,则需要调用 RegisterRequiresPostBack, + // 以便在 ControlState 中保存这个控件的 ClientID,然后下次回发时会由此调用此控件的 LoadPostData 函数 + // 主要用来处理客户端改变控件属性的情况 + Page.RegisterRequiresPostBack(this); + } + + + OnBothPreRender(); + + // 计算被修改的属性列表 + FState.CalculateModifiedProperties(); + + if (IsFineUIAjaxPostBack) + { + OnAjaxPreRender(); + + if (_ajaxScriptBuilder.Length > 0) + { + ResourceManager.Instance.AjaxScriptList.Add(_ajaxScriptBuilder.ToString()); + + // 添加在 JavaScript 中使用的控件变量的短格式(比如 x0=F('RegionPanel1_Button1')) + ResourceManager.Instance.AddAjaxShortName(ClientID, XID); + } + } + else + { + // 页面第一次加载和正常的回发两种情况 + OnFirstPreRender(); + } + } + + /// + /// 渲染 HTML 之前调用(计算被修改属性列表之前调用,可以在此修改属性) + /// + protected virtual void OnBothPreRender() + { + + } + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected virtual void OnAjaxPreRender() + { + StringBuilder sb = new StringBuilder(); + #region old code + // There are new properties need to be persisted during the next postback. + // Re-write the "f_props" property of the component instance. + //if (FState.TotalModifiedProperties.Count > PostBackState.Count) + //{ + // sb.AppendFormat("{0}.f_props={1};", XID, new JArray(FState.TotalModifiedProperties)); + //} + + //foreach (string property in FState.ModifiedProperties) + //{ + // string propertyValue = String.Empty; + + // PropertyInfo info = this.GetType().GetProperty(property); + // if (info.PropertyType == typeof(String)) + // { + // propertyValue = JsHelper.Enquote(info.GetValue(this, null).ToString()); + // } + // else if (info.PropertyType == typeof(Boolean)) + // { + // // "true", "false" + // propertyValue = info.GetValue(this, null).ToString().ToLower(); + // } + // else if (info.PropertyType.BaseType == typeof(Enum)) + // { + // // ConfirmTarget -> "Self", "Parent", "Top" + // propertyValue = JsHelper.Enquote(StringUtil.GetEnumName((Enum)info.GetValue(this, null))); + // } + + // sb.AppendFormat("{0}.f_p_{1}={2};", XID, property, propertyValue); + //} + #endregion + + List currentModifiedProperties = FState.ModifiedProperties; + if (currentModifiedProperties.Count > 0) + { + // 更新当前控件的 F_STATE 状态 + sb.AppendFormat("F.state({0},{1});", XID, ConvertPropertiesToJObject(currentModifiedProperties).ToString(Formatting.None)); + } + + sb.Append(GetHiddenPropertyChangedScript()); + + sb.Append(GetEnabledPropertyChangedScript()); + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected virtual void OnFirstPreRender() + { + #region old code + //foreach (string property in FState.TotalModifiedProperties) + //{ + // object propertyValue = null; + + // PropertyInfo info = this.GetType().GetProperty(property); + // if (info.PropertyType == typeof(String)) + // { + // propertyValue = info.GetValue(this, null).ToString(); + // } + // else if (info.PropertyType == typeof(Boolean)) + // { + // propertyValue = Convert.ToBoolean(info.GetValue(this, null)); + // } + // else if (info.PropertyType.BaseType == typeof(Enum)) + // { + // propertyValue = StringUtil.GetEnumName((Enum)info.GetValue(this, null)); + // } + + // OB.AddProperty("f_p_" + property, propertyValue); + + //} + + //// These properties has been modified in the past postbacks. + //// Every FineUI control should has this property. + //OB.AddProperty("f_props", new JArray(FState.TotalModifiedProperties), true); + + #endregion + + List totalModifiedProperties = FState.GetTotalModifiedProperties(); + if (totalModifiedProperties.Count > 0) + { + string xstate = ConvertPropertiesToJObject(totalModifiedProperties).ToString(Formatting.None); + AddStartupScript(String.Format("var {0}={1};", GetFStateScriptID(), xstate)); + OB.AddProperty("f_state", GetFStateScriptID(), true); + } + else + { + OB.AddProperty("f_state", "{}", true); + } + + + + // Every component need this property. + OB.AddProperty("id", ClientID); + + if (RenderWrapperNode) + { + OB.AddProperty("renderTo", WrapperID); + } + + if (Hidden) + { + OB.AddProperty("hidden", true); + } + if (HideMode != HideMode.Display) + { + OB.AddProperty("hideMode", HideModeName.GetName(HideMode)); + } + + if (!Enabled) + { + OB.AddProperty("disabled", true); + } + + foreach (Listener listener in Listeners) + { + OB.Listeners.AddProperty(listener.Event, listener.Handler, true); + } + + #region old code + + //if (AjaxPropertyChanged("Hidden", Hidden)) + //{ + // HiddenPropertyChanged(); + //} + + //// 渲染到客户端时的JavascriptId + //OB.AddProperty("id", ClientJavascriptID); + + // 不需要这样做, + //// 判断父控件是否用户控件(UserControl) + //if (Parent is UserControl || Parent is ContentPlaceHolder) + //{ + // if (!ResourceManagerInstance.IsStartupScriptExist(Parent as Control)) + // { + // AddStartupScript(Parent, String.Empty); + // } + //} + + #endregion + } + + + /// + /// 获取FState的JS变量 + /// + /// + protected string GetFStateScriptID() + { + return String.Format("{0}_state", XID); + } + + #endregion + + #region PropertyModified + + /// + /// 回发过程中此属性是否被改变 + /// 如果是客户端可以改变的属性,仅在服务器端改变时才返回 true, + /// (如果仅是客户端改变,则返回 false,因为客户端改变的属性不需要再输出相应的 JavaScript 脚本) + /// + /// + /// + protected bool PropertyModified(string propertyName) + { + bool modified = FState.ModifiedProperties.Contains(propertyName); + if (modified) + { + if (ClientAjaxProperties.Contains(propertyName)) + { + if (FState.ClientPropertiesModifiedInServer.Contains(propertyName)) + { + return true; + } + else + { + return false; + } + } + else + { + return true; + } + } + return false; + } + + /// + /// 回发过程中这些属性是否被改变 + /// 只要任何属性被改变,就返回 true + /// + /// + /// + protected bool PropertyModified(params string[] propertyNames) + { + foreach (string property in propertyNames) + { + if (PropertyModified(property)) + { + return true; + } + } + return false; + } + + //protected bool ClientPropertyModifiedInServer(string propertyName) + //{ + // return FState.ClientPropertiesModifiedInServer.Contains(propertyName); + //} + + + #region old code + ///// + ///// Whether the property has been changed in the past postbacks. + ///// + ///// + ///// + //protected bool TotalPropertyModified(string propertyName) + //{ + // return FState.TotalModifiedProperties.Contains(propertyName); + //} + + ///// + ///// Get client value of a property in the postback state(F_STATE). + ///// + ///// + ///// + //protected object GetPostBackClientValue(string propertyName) + //{ + // return PostBackState["X_" + propertyName]; + //} + #endregion + + #endregion + + #region RecoverPropertiesFromFState ConvertPropertiesToFState + + /// + /// 从JObject恢复控件的属性 + /// + /// 对象属性的JObject形式 + public void RecoverPropertiesFromJObject(JObject state) + { + foreach (JProperty propertyObj in state.Properties()) + { + string property = propertyObj.Name; + PropertyInfo info = this.GetType().GetProperty(property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (info != null) + { + if (info.PropertyType.BaseType == typeof(Enum)) + { + info.SetValue(this, Enum.Parse(info.PropertyType, state.Value(property)), null); + } + else if (info.PropertyType == typeof(Unit)) + { + info.SetValue(this, Unit.Parse(state.Value(property)), null); + } + else if (info.PropertyType.BaseType == typeof(Array)) + { + if (info.PropertyType == typeof(Int32[])) + { + info.SetValue(this, JSONUtil.IntArrayFromJArray(state.Value(property)), null); + } + else if (info.PropertyType == typeof(String[])) + { + info.SetValue(this, JSONUtil.StringArrayFromJArray(state.Value(property)), null); + } + } + else + { + JToken jtoken = state.Property(property).Value; + if (jtoken is JContainer) + { + info.SetValue(this, jtoken, null); + } + else + { + object propertyValue = ((JValue)jtoken).Value; + + // 类型“System.Int64”的对象无法转换为类型“System.Int32”。 + // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Int32]”。 + // 类型“System.Int64”的对象无法转换为类型“System.Int16”。 + // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Int16]”。 + if (propertyValue != null && propertyValue.GetType() == typeof(Int64)) + { + if (info.PropertyType == typeof(Int32) || info.PropertyType == typeof(Int32?)) + { + propertyValue = Convert.ToInt32(propertyValue); + } + + if (info.PropertyType == typeof(Int16) || info.PropertyType == typeof(Int16?)) + { + propertyValue = Convert.ToInt16(propertyValue); + } + + // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Double]”。 + // 注意:“2.0”会被解析为Int64,而“2.1”会被解析为Double,所以有可能会进入这个分支 + if (info.PropertyType == typeof(Double) || info.PropertyType == typeof(Double?)) + { + propertyValue = Convert.ToDouble(propertyValue); + } + + if (info.PropertyType == typeof(float) || info.PropertyType == typeof(float?)) + { + propertyValue = Convert.ToSingle(propertyValue); + } + } + + info.SetValue(this, propertyValue, null); + } + + } + } + + } + } + + + /// + /// 将控件的属性列表转化为JObject对象 + /// + /// 属性列表 + /// 属性列表的JObject形式 + public JObject ConvertPropertiesToJObject(List propertyList) + { + JObject jo = new JObject(); + foreach (string property in propertyList) + { + // 如果包含压缩后的属性,则忽略 + if (property.EndsWith("_GZ")) + { + continue; + } + + string propertyStringValueUsedInGzipped = String.Empty; + bool propertyGzippped = false; + if (EnableFStateCompress) + { + propertyGzippped = _gzippedAjaxProperties.Contains(property); + } + + object propertyValue = GetPropertyJSONValue(property); + + + if (propertyValue is JToken) + { + JToken tokenValue = propertyValue as JToken; + jo.Add(property, tokenValue); + + + // 此属性启用Gzip压缩,则先计算字符串值 + if (propertyGzippped) + { + propertyStringValueUsedInGzipped = tokenValue.ToString(Newtonsoft.Json.Formatting.None); + } + + } + else + { + if (propertyValue is String) + { + // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. + // http://www.xiaoxiaozi.com/2010/02/24/1708/ + // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string + string propertyValueStr = propertyValue.ToString().Replace("", @"<\/script>"); + jo.Add(property, propertyValueStr); + + // 此属性启用Gzip压缩,则先计算字符串值 + if (propertyGzippped) + { + propertyStringValueUsedInGzipped = propertyValueStr; + } + + } + else if (propertyValue is Unit) + { + int intValue = (Int32)((Unit)propertyValue).Value; + jo.Add(property, intValue); + } + else + { + jo.Add(property, new JValue(propertyValue)); + } + } + + + + if (propertyGzippped && !String.IsNullOrEmpty(propertyStringValueUsedInGzipped)) + { + string propertyGzippedValue = String.Empty; + + // 1. 小于500个字符,不启用Gzipped压缩 + if (propertyStringValueUsedInGzipped.Length > 500) + { + propertyGzippedValue = StringUtil.Gzip(propertyStringValueUsedInGzipped); + + // 2. 压缩效果太差(不到原始大小的50%),则不启用Gzipped压缩 + if (propertyGzippedValue.Length > (propertyStringValueUsedInGzipped.Length / 2)) + { + propertyGzippedValue = String.Empty; + } + } + + + // 无论 propertyGzippedValue 是否为空字符串,都要输出来覆盖上次的结果(因为并非每一次的GZipped都有值) + jo.Add(property + "_GZ", propertyGzippedValue); + + } + + + } + return jo; //.ToString(Formatting.None); + } + + + // 获取属性的 JSON 对象值 + internal object GetPropertyJSONValue(string prop) + { + object propValue = null; + + PropertyInfo info = this.GetType().GetProperty(prop, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (info != null) + { + propValue = info.GetValue(this, null); + + if (info.PropertyType.BaseType == typeof(Enum)) + { + propValue = StringUtil.EnumToName((Enum)propValue); + } + else if (info.PropertyType.BaseType == typeof(Array)) + { + if (propValue == null) + { + propValue = new JArray(); + } + else + { + propValue = new JArray((Array)propValue); + } + } + } + + return propValue; + } + + #endregion + + #region AddAjaxScript + + private StringBuilder _ajaxScriptBuilder = new StringBuilder(); + + /// + /// AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + /// + /// + internal void AddAjaxScript(string script) + { + if (!String.IsNullOrEmpty(script)) + { + _ajaxScriptBuilder.Append(script); + } + } + + /// + /// AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + /// + /// + internal void AddAjaxScript(StringBuilder sb) + { + if (sb.Length > 0) + { + _ajaxScriptBuilder.Append(sb); + } + } + + + #endregion + + #region AddStartupCSS + + /// + /// 添加CSS样式 + /// + /// 键 + /// CSS内容 + protected void AddStartupCSS(string key, string cssContent) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.AddStartupCSS(key, cssContent); + } + } + + /// + /// 删除CSS样式 + /// + /// 键 + protected void RemoveStartupCSS(string key) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.RemoveStartupCSS(key); + } + } + + #endregion + + #region AddStartupScript AddStartupAbsoluteScript + + /// + /// 向页面添加控件无关脚本 + /// + /// 客户端脚本 + protected void AddStartupAbsoluteScript(string script) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.AddAbsoluteStartupScript(script); + } + } + + /// + /// 向页面添加控件无关脚本 + /// + /// 客户端脚本 + /// 脚本层级 + protected void AddStartupAbsoluteScript(string script, int level) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.AddAbsoluteStartupScript(script, level); + } + } + + /// + /// 添加控件相关脚本 + /// + /// 客户端脚本 + protected void AddStartupScript(string scriptContent) + { + if (!IsFineUIAjaxPostBack) + { + // 合并在基类中注册的脚本,然后整体注册 + if (ResourceManager.Instance.IsStartupScriptExist(this)) + { + scriptContent = ResourceManager.Instance.GetStartupScript(this).Script + scriptContent; + ResourceManager.Instance.RemoveStartupScript(this); + } + + if (Visible) + { + ResourceManager.Instance.AddStartupScript(this, scriptContent); + } + } + + #region old code + + //if (!IsFineUIAjaxPostBack) + //{ + // // 如果是页面第一次加载,或者不是FineUIAjax(比如是普通的PostBack或者是Asp.netAjax回发) + // AddStartupScript(this, scriptContent); + + // if (AjaxForceCompleteUpdate) + // { + // BoxState["__AllScript__"] = scriptContent.GetHashCode().ToString("X8"); + // } + // //SaveAjaxProperty("AllScript", scriptContent, true); + //} + //else + //{ + // if (AjaxForceCompleteUpdate) + // { + // // 如果强制更新控件的整个内容,并且内容变化了,则更新 + // if (BoxState["__AllScript__"].ToString() != scriptContent.GetHashCode().ToString("X8")) + // { + // AjaxCompleteUpdateControl(scriptContent); + // } + // } + // else + // { + // AjaxPartialUpdateControl(); + // } + //} + + #endregion + } + + #endregion + + #region GetHiddenPropertyChangedScript GetEnabledPropertyChangedScript + + /// + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// 有些控件可能需要特别的逻辑,因此这里为虚函数(比如 Window 控件、Tab 控件) + /// + /// 客户端脚本 + protected virtual string GetHiddenPropertyChangedScript() + { + if (PropertyModified("Hidden")) + { + return String.Format("{0}.f_setVisible();", XID); + } + return String.Empty; + } + + /// + /// 获取 Enabled 属性改变的 JavaScript 脚本 + /// 有些控件可能需要特别的逻辑,因此这里为虚函数 + /// + /// 客户端脚本 + protected virtual string GetEnabledPropertyChangedScript() + { + if (PropertyModified("Enabled")) + { + return String.Format("{0}.f_setDisabled();", XID); + } + return String.Empty; + } + + #endregion + + #region GetPostBackEventReference + + /// + /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','');) + /// + /// 客户端脚本 + public string GetPostBackEventReference() + { + return GetPostBackEventReference(String.Empty); + } + + /// + /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + /// + /// 事件参数 + /// 客户端脚本 + public string GetPostBackEventReference(string eventArgument) + { + return GetPostBackEventReference(eventArgument, EnableAjax); + } + + /// + /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + /// + /// 事件参数 + /// 是否启用AJAX + /// 客户端脚本 + public string GetPostBackEventReference(string eventArgument, bool enableAjax) + { + StringBuilder sb = new StringBuilder(); + + if (enableAjax != PageManager.Instance.EnableAjax) + { + sb.AppendFormat("F.control_enable_ajax={0};", enableAjax ? "true" : "false"); + } + + + if (EnableAjaxLoading != PageManager.Instance.EnableAjaxLoading) + { + sb.AppendFormat("F.control_enable_ajax_loading={0};", EnableAjaxLoading ? "true" : "false"); + } + + if (AjaxLoadingType != PageManager.Instance.AjaxLoadingType) + { + sb.AppendFormat("F.control_ajax_loading_type='{0}';", AjaxLoadingTypeName.GetName(AjaxLoadingType)); + } + + sb.Append(Page.ClientScript.GetPostBackEventReference(this, eventArgument)); + sb.Append(";"); + + return sb.ToString(); + } + + // This is the same as UniqueID + // Get PostBackID that can be used in postback event. + //internal string GetPostBackID() + //{ + // string postbackscript = Page.ClientScript.GetPostBackEventReference(this, String.Empty); + // // __doPostBack('regionPanel$leftRegion$Button1','') + // int start = postbackscript.IndexOf("'"), + // end = postbackscript.LastIndexOf("','')"); + // return postbackscript.Substring(start + 1, end - start - 1); + //} + + #endregion + + #region GetSetHiddenFieldValueScript + + /// + /// 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + /// + /// 隐藏字段ID + /// 隐藏字段值 + /// + protected string GetSetHiddenFieldValueScript(string id, string value) + { + return String.Format("F.setHidden('{0}','{1}');", id, value); + } + + + /// + /// 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + /// + /// 隐藏字段ID + /// 隐藏字段值 + /// 隐藏字段所在的页面对象(JavaScript实例window) + /// 客户端脚本 + protected string GetSetHiddenFieldValueScript(string id, string value, string windowObj) + { + if (String.IsNullOrEmpty(windowObj) || windowObj == "window") + { + return GetSetHiddenFieldValueScript(id, value); + } + return String.Format("{2}.F.setHidden('{0}','{1}');", id, value, windowObj); + } + + #endregion + + #region ResolveAttribuites + + /// + /// 添加Attributes中的属性值 + /// + /// HtmlNodeBuilder对象 + protected void ResolveAttribuites(HtmlNodeBuilder htmlBuilder) + { + foreach (JProperty propertyObj in Attributes.Properties()) + { + string propName = propertyObj.Name; + string propValue = Attributes.Value(propName); + htmlBuilder.SetProperty(propName, propValue); + } + } + + #endregion + + #region protected GetListenerFunction AddListener + + /// + /// 获取客户端事件处理函数 + /// + /// + /// + /// + /// + protected string GetListenerFunction(string eventName, string jsContent, params string[] funParameters) + { + var handler = Listeners.GetEventHandler(eventName); + if (!String.IsNullOrEmpty(handler)) + { + jsContent += String.Format("return {0}.apply(this,arguments);", handler); + } + + return JsHelper.GetFunction(jsContent, funParameters); + } + + /// + /// 向 OB 中添加客户端事件处理函数 + /// + /// + /// + /// + protected void AddListener(string eventName, string jsContent, params string[] funParameters) + { + OB.Listeners.AddProperty(eventName, GetListenerFunction(eventName, jsContent, funParameters), true); + } + + #endregion + + #region oldcode + + //// 获取客户端可用的图标 URL 地址 + //protected string GetResolvedIconUrl(Icon icon, string iconUrl) + //{ + // /* + // string url = iconUrl; + // if (String.IsNullOrEmpty(url)) + // { + // if (icon != Icon.None) + // { + // url = IconHelper.GetIconUrl(icon); + // } + // } + + // return ResolveUrl(url); + // * */ + // return IconHelper.GetResolvedIconUrl(icon, iconUrl); + //} + + #endregion + + #region oldcode + + + //private Dictionary _xProperties = new Dictionary(); + + //internal void SaveXProperty(string key, string value) + //{ + // _xProperties[key] = value; + //} + + //internal bool XPropertyModified(string key, string currentValue) + //{ + // if (_xProperties.ContainsKey(key)) + // { + // string lastValue = _xProperties[key]; + // if (lastValue != currentValue) + // { + // return true; + // } + // } + // return false; + //} + + + + + //private Dictionary _ajaxProperties__ = new Dictionary(); + + ///// + ///// + ///// + ///// + ///// + ///// + //internal bool AjaxPropertyChanged(string key, object objSource) + //{ + // // 如果不是FineUIAjax回发,则不执行此逻辑 + // if (!IsFineUIAjaxPostBack) + // { + // return false; + // } + + // if (!_ajaxProperties__.ContainsKey(key)) + // { + // // 对于在Page_Load之后动态添加的控件,肯定会运行到这里,对这些属性不做处理 + // // 所以动态添加控件,一定要在 Page_Init 中进行 + // // throw new Exception(String.Format("Please set the property [{0}] in Page_OnPreLoad.", key)); + // return false; + // } + + // string objStr = String.Empty; + // if (objSource != null) + // { + // objStr = objSource.ToString(); + // } + + // if (_ajaxProperties__[key] == objStr) + // { + // return false; + // } + // return true; + //} + + //internal void SaveAjaxProperty(string key, object objSource) + //{ + // string saveValue = String.Empty; + // if (objSource != null) + // { + // saveValue = objSource.ToString(); + // } + + // _ajaxProperties__[key] = saveValue; + //} + + + + + #endregion + + #region oldcode + + ///// + ///// 如果不是FineUIAjax回发,则保存值的改变到ViewState,同时返回false + ///// 如果是FineUIAjax回发,则判断此key存储在ViewState的值是否改变,如果改变则返回true + ///// + ///// + ///// + ///// + //internal bool AjaxPropertyChanged(string key, object objSource) + //{ + // string hashCode = CreateAjaxPropertyValue(objSource); + + // // 如果不是FineUIAjax回发,则保存值的改变到ViewState,同时返回false + // if (!IsFineUIAjaxPostBack) + // { + // SaveAjaxProperty(key, hashCode); + // return false; + // } + + // if (GetAjaxProperty(key) != hashCode) + // { + // SaveAjaxProperty(key, hashCode); + // return true; + // } + // else + // { + // return false; + // } + //} + + + ///// + ///// 保存HashCode到ViewState + ///// + ///// + ///// + ///// + //internal void SaveAjaxProperty(string key, object hashCode, bool source) + //{ + // string hashCodeStr = String.Empty; + // if (hashCode != null) + // { + // hashCodeStr = hashCode.ToString(); + // if (source) + // { + // hashCodeStr = CreateAjaxPropertyValue(hashCode); + // } + // } + + // SaveAjaxProperty(key, hashCodeStr); + //} + + ///// + ///// 生成需要保存的Ajax属性的值 + ///// 对于Boolean型的,直接返回"0"或者"1" + ///// 对于其他类型,返回其ToString后的HashCode + ///// + ///// + ///// + //private string CreateAjaxPropertyValue(object objSource) + //{ + // if (objSource is Boolean) + // { + // return (Boolean)objSource ? "1" : "0"; + // } + + // string strSource = objSource.ToString(); + // return String.IsNullOrEmpty(strSource) ? "" : strSource.GetHashCode().ToString("X8"); + //} + + ///// + ///// 保存HashCode到ViewState + ///// + ///// + ///// + //private void SaveAjaxProperty(string key, string hashCode) + //{ + // key = String.Format("{0}", key); + // ViewState[key] = hashCode; + //} + + + ///// + ///// 从ViewState读取HashCode + ///// + ///// + ///// + //private string GetAjaxProperty(string key) + //{ + // key = String.Format("{0}", key); + + // object obj = ViewState[key]; + // return obj == null ? String.Empty : (string)obj; + //} + + #endregion + + #region oldcode + + //private void RenderAjaxUpdateScript() + //{ + // if (_ajaxUpdateScriptList.Count > 0) + // { + // StringBuilder sb = new StringBuilder(); + // foreach (string script in _ajaxUpdateScriptList) + // { + // sb.Append(script); + // } + + // AddStartupScript(this, sb.ToString()); + // } + //} + + + ///// + ///// 全部更新不适用于所有控件 + ///// + ///// + //private void AjaxCompleteUpdateControl(string scriptContent) + //{ + // if (this.Controls.Count > 0) + // { + // // 如果是容器控件,则目前不支持Ajax更新 + // // TODO + // } + // else + // { + + // #region 重要说明 + + // // 这是一个复杂的过程,有两种情况需要考虑: + // // 1.直接渲染的控件,先销毁,在重新渲染 + // // 2.依赖父容器渲染的的控件,首先取得父容器,本控件在父容器的位置,然后从父容器中销毁此控件,创建新的控件,将新的控件添加到删除的位置,父容器重新布局。 + // // 第二种情况的整体结构如下 + // ////// 1.取得父容器 + // ////// var owner=X.i3.ownerCt; + // ////// 2.本控件在父容器的位置 + // ////// var insertIndex=owner.items.indexOf(X.i3); + // ////// 3.从父容器中销毁此控件 + // ////// owner.remove(X.i3); + // ////// 4.创建新的控件 + // ////// X.i3=new Ext.form.TextField({id:"SimpleForm1_tbxUserName",stateful:false,fieldLabel:"用户名2",labelSeparator:" *",anchor:"-25px",name:"SimpleForm1$tbxUserName",disabled:false,allowBlank:false,listeners:{change:function(){box_pageStateChange();}}}); + // ////// 5.将新的控件添加到删除的位置 + // ////// owner.insert(insertIndex,X.i3); + // ////// 6.父容器重新布局 + // ////// owner.doLayout(); + + + // #endregion + + // string startupScript = String.Empty; + + // // 如果是Panel,并且不使用布局,则需要把内容先移出来,否则会在Panel被重建时被清空 + // if (this is PanelBase && (this as PanelBase).RenderChildrenAsContent) + // { + // startupScript += String.Format("Ext.get(X.{0}.contentEl).hide();Ext.get(X.{0}.contentEl).appendTo(document.forms[0]);", ClientJavascriptID); + // } + + // // 更新Javascript对象和UI重新布局 + // startupScript += String.Format("F.ajax.updateObject(X.{0},{1},{2});", + // ClientJavascriptID, + // String.Format("function(){{{0}}}", scriptContent), + // RenderWrapperDiv.ToString().ToLower()); + + // AddStartupScript(this, startupScript); + // } + //} + + + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue(false)] + //[Description("Ajax回发时强制更新此控件全部内容")] + //internal virtual bool AjaxForceCompleteUpdate + //{ + // get + // { + // object obj = BoxState["AjaxForceCompleteUpdate"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["AjaxForceCompleteUpdate"] = value; + // } + //} + + #endregion + + #region oldcode + + + //public override void RenderBeginTag(HtmlTextWriter writer) + //{ + // if (RenderImmediately) + // { + // //writer.AddAttribute(HtmlTextWriterAttribute.Id, ContainerID); + // //writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline"); + // //writer.RenderBeginTag(HtmlTextWriterTag.Div); + + // // 用上面的语句,div中间有很大的空白,看着不爽 + // writer.Write(String.Format("
", ContainerID)); + // } + //} + + //public override void RenderEndTag(HtmlTextWriter writer) + //{ + // if (RenderImmediately) + // { + // //writer.RenderEndTag(); + // writer.Write("
"); + // } + //} + + + //private string _beforeOnPreRenderScript = String.Empty; + + ///// + ///// 此控件预渲染之前需要执行的脚本 + ///// + //internal string BeforeOnPreRenderScript + //{ + // get + // { + // return _beforeOnPreRenderScript; + // } + // set + // { + // _beforeOnPreRenderScript = value; + // } + //} + + //#region IsInUpdatePanel + + ///// + ///// 此控件是否在UpdatePanel中 + ///// 注意:在局部回发时,只要在 UpdatePanel 中的控件都要更新,但有例外情况(如果UpdatePanel属性 UpdateMode="Conditional") + ///// + ///// + ///// + //public bool IsInPartialRendering() + //{ + // if (HttpContext.Current != null && HttpContext.Current.Request != null) + // { + // for (Control control = this.Parent; control != null; control = control.Parent) + // { + // if (control.GetType().FullName.Contains("System.Web.UI.UpdatePanel")) + // { + // if ((control as UpdatePanel).IsInPartialRendering) + // { + // return true; + // } + // } + // } + // } + // return false; + //} + + //#endregion + + //#region RefParentControl + + //private ControlBase _refParentControl; + + ///// + ///// 需要指定父控件,以便保持控件的JS的渲染顺序是正确的(目前只在MasterPage中使用过一次) + ///// + //internal ControlBase RefParentControl + //{ + // get { return _refParentControl; } + // set { _refParentControl = value; } + //} + + //#endregion + + + ///// + ///// 添加启动脚本 + ///// 这个方法容易让人误解,去除不用 + ///// + ///// + //protected void AddStartupScript(string script) + //{ + // #region old code + // //// 如果是局部回发,并且此控件不在UpdatePanel中,则不重新创建此控件 + // //if (ResourceHelper.IsPartialPostBack() && ResourceHelper.IsContainScriptManager(Page) && !IsInUpdatePanel()) + // //{ + // // return; + // //} + + // //if (ResourceHelper.IsPartialPostBack(Page) && !IsInPartialRendering()) + // //{ + // // return; + // //} + + // //string addOnScript = ""; + // //if (AddOnJavaScript != "" && AddOnJavaScript.Contains("{0}")) + // //{ + // // addOnScript = String.Format(AddOnJavaScript, ClientID); + // //} + // //_rm.AddStartupScript(this, scriptContent + addOnScript); + // #endregion + + // AddStartupScript(this, script); + //} + + + + //protected void AddStartupScript(Control control, string script) + //{ + // AddStartupScript(control, script, String.Empty); + //} + + ///// + ///// 添加启动脚本 + ///// + ///// + ///// + //protected void AddStartupScript(Control control, string script, string extraScript) + //{ + // // 如果控件 可见, 才渲染 javascript 到页面中 + // if (Visible) + // { + // ResourceManager.Instance.AddStartupScript(control, script, extraScript); + // } + //} + + + + //protected virtual void SetDirty() + //{ + // //ViewState.SetDirty(true); + //} + + + + ////bool IStateManager.IsTrackingViewState + ////{ + //// get + //// { + //// return IsTrackingViewState; + //// } + ////} + + ////void IStateManager.LoadViewState(object state) + ////{ + //// LoadViewState(state); + ////} + + ////object IStateManager.SaveViewState() + ////{ + //// return SaveViewState(); + ////} + + ////void IStateManager.TrackViewState() + ////{ + //// TrackViewState(); + ////} + + + //void ISetDirty.SetDirty() + //{ + // //SetDirty(); + //} + + #endregion + + #region oldcode + + ///// + ///// 在页面的Page_Load之前执行 + ///// + ///// + ///// + //protected virtual void OnPreLoad(object sender, EventArgs e) + //{ + // //SaveAjaxProperty("Hidden", Hidden); + //} + + #endregion + } +} diff --git a/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs b/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs index 349461e..86c676f 100644 --- a/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs +++ b/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs @@ -1,78 +1,78 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ControlBaseCollection.cs - * CreatedOn: 2008-06-08 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// - /// 控件集合 - /// - public class ControlBaseCollection : BaseCollection - { - /// - /// 构造函数 - /// - /// 父控件实例 - public ControlBaseCollection(ControlBase parent) - : base(parent) - { - - } - - /* - protected override void InsertItem(int index, ControlBase item) - { - item.RenderWrapperNode = false; - _parent.Controls.AddAt(index, item); - - base.InsertItem(index, item); - } - - protected override void RemoveItem(int index) - { - _parent.Controls.RemoveAt(index); - - base.RemoveItem(index); - } - - protected override void ClearItems() - { - // We should only remove this collection related controls - // Note we must loop from the last element(Count-1) to the first one(0) - for (int i = Count - 1; i >= 0; i--) - { - _parent.Controls.RemoveAt(i); - } - - base.ClearItems(); - } - */ - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlBaseCollection.cs + * CreatedOn: 2008-06-08 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// + /// 控件集合 + /// + public class ControlBaseCollection : BaseCollection + { + /// + /// 构造函数 + /// + /// 父控件实例 + public ControlBaseCollection(ControlBase parent) + : base(parent) + { + + } + + /* + protected override void InsertItem(int index, ControlBase item) + { + item.RenderWrapperNode = false; + _parent.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + _parent.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = Count - 1; i >= 0; i--) + { + _parent.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + */ + } +} diff --git a/FineUI/BaseWebControls/ControlBase/Listener/Listener.cs b/FineUI/BaseWebControls/ControlBase/Listener/Listener.cs new file mode 100644 index 0000000..d7477bb --- /dev/null +++ b/FineUI/BaseWebControls/ControlBase/Listener/Listener.cs @@ -0,0 +1,120 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Listener.cs + * CreatedOn: 2014-09-03 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// + /// 客户端事件 + /// + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Event")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Listener + { + #region Constructor + + /// + /// 构造函数 + /// + public Listener() + { + + } + + /// + /// 构造函数 + /// + /// 客户端事件名称 + /// 客户端事件处理函数名称 + public Listener(string __event, string handler) + { + Event = __event; + Handler = handler; + } + + #endregion + + #region Properties + + private string _event = String.Empty; + /// + /// 客户端事件名称 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("客户端事件名称")] + [NotifyParentProperty(true)] + public string Event + { + get + { + return _event; + } + set + { + _event = value; + } + } + + private string _handler = String.Empty; + /// + /// 客户端事件处理函数名称 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("客户端事件处理函数名称")] + [NotifyParentProperty(true)] + public string Handler + { + get + { + return _handler; + } + set + { + _handler = value; + } + } + + #endregion + + } +} diff --git a/FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs b/FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs new file mode 100644 index 0000000..1f4002e --- /dev/null +++ b/FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs @@ -0,0 +1,60 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListenerCollection.cs + * CreatedOn: 2014-09-03 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// + /// 客户端事件集合 + /// + public class ListenerCollection : Collection + { + /// + /// 获取客户端处理函数名称 + /// + /// 事件名称 + /// 客户端处理函数名称 + public string GetEventHandler(string eventName) + { + string handler = String.Empty; + foreach (Listener item in this) + { + if (item.Event == eventName) + { + handler = item.Handler; + break; + } + } + + return handler; + } + + } +} diff --git a/FineUI/Business/Config/ConfigSection.cs b/FineUI/Business/Config/ConfigSection.cs index 809e87c..232ae93 100644 --- a/FineUI/Business/Config/ConfigSection.cs +++ b/FineUI/Business/Config/ConfigSection.cs @@ -1,325 +1,359 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: ConfigSection.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * - * - * - * - * - */ - -#endregion - - -using System; -using System.Configuration; - -namespace FineUI -{ - /// - /// FineUIWeb.configеý - /// - public class ConfigSection : ConfigurationSection - { - /// - /// - /// - [ConfigurationProperty(ConfigPropertyName.THEME, DefaultValue = ConfigPropertyValue.THEME_DEFAULT)] - public string Theme - { - get - { - return (string)base[ConfigPropertyName.THEME]; - } - set - { - base[ConfigPropertyName.THEME] = value; - } - } - - /// - /// - /// - [ConfigurationProperty(ConfigPropertyName.LANGUAGE, DefaultValue = ConfigPropertyValue.LANGUAGE_DEFAULT)] - public string Language - { - get - { - return (string)base[ConfigPropertyName.LANGUAGE]; - } - set - { - base[ConfigPropertyName.LANGUAGE] = value; - } - } - - /// - /// ֤Ϣʾλ - /// - [ConfigurationProperty(ConfigPropertyName.FROMMESSAGETARGET, DefaultValue = ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT_STRING)] - public string FormMessageTarget - { - get - { - return (string)base[ConfigPropertyName.FROMMESSAGETARGET]; - } - set - { - base[ConfigPropertyName.FROMMESSAGETARGET] = value; - } - } - - /// - /// бǩλ - /// - [ConfigurationProperty(ConfigPropertyName.FORMLABELALIGN, DefaultValue = ConfigPropertyValue.FORM_LABELALIGN_DEFAULT_STRING)] - public string FormLabelAlign - { - get - { - return (string)base[ConfigPropertyName.FORMLABELALIGN]; - } - set - { - base[ConfigPropertyName.FORMLABELALIGN] = value; - } - } - - /// - /// ؼҲ߽ľ - /// - [ConfigurationProperty(ConfigPropertyName.FORMOFFSETRIGHT, DefaultValue = ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT)] - public int FormOffsetRight - { - get - { - return (int)base[ConfigPropertyName.FORMOFFSETRIGHT]; - } - set - { - base[ConfigPropertyName.FORMOFFSETRIGHT] = value; - } - } - - /// - /// ؼǩĿ - /// - [ConfigurationProperty(ConfigPropertyName.FORMLABELWIDTH, DefaultValue = ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT)] - public int FormLabelWidth - { - get - { - return (int)base[ConfigPropertyName.FORMLABELWIDTH]; - } - set - { - base[ConfigPropertyName.FORMLABELWIDTH] = value; - } - } - - /// - /// ؼǩķָ - /// - [ConfigurationProperty(ConfigPropertyName.FORMLABELSEPARATOR, DefaultValue = ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] - public string FormLabelSeparator - { - get - { - return (string)base[ConfigPropertyName.FORMLABELSEPARATOR]; - } - set - { - base[ConfigPropertyName.FORMLABELSEPARATOR] = value; - } - } - - /// - /// AJAX - /// - [ConfigurationProperty(ConfigPropertyName.ENABLEAJAX, DefaultValue = ConfigPropertyValue.ENABLE_AJAX_DEFAULT)] - public bool EnableAjax - { - get - { - return (bool)base[ConfigPropertyName.ENABLEAJAX]; - } - set - { - base[ConfigPropertyName.ENABLEAJAX] = value; - } - } - - /// - /// AJAXʾϢ - /// - [ConfigurationProperty(ConfigPropertyName.ENABLEAJAXLOADING, DefaultValue = ConfigPropertyValue.ENABLE_AJAX_LOADING_DEFAULT)] - public bool EnableAjaxLoading - { - get - { - return (bool)base[ConfigPropertyName.ENABLEAJAXLOADING]; - } - set - { - base[ConfigPropertyName.ENABLEAJAXLOADING] = value; - } - } - - /// - /// AJAXʾϢ - /// - [ConfigurationProperty(ConfigPropertyName.AJAXLOADINGTYPE, DefaultValue = ConfigPropertyValue.AJAX_LOADING_TYPE_DEFAULT)] - public string AjaxLoadingType - { - get - { - return (string)base[ConfigPropertyName.AJAXLOADINGTYPE]; - } - set - { - base[ConfigPropertyName.AJAXLOADINGTYPE] = value; - } - } - - /// - /// ͻAJAXʱʱ - /// - [ConfigurationProperty(ConfigPropertyName.AJAXTIMEOUT, DefaultValue = ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT)] - public int AjaxTimeout - { - get - { - return (int)base[ConfigPropertyName.AJAXTIMEOUT]; - } - set - { - base[ConfigPropertyName.AJAXTIMEOUT] = value; - } - } - - /// - /// Ƿô壨ExtJS11pxΪ12px - /// - [ConfigurationProperty(ConfigPropertyName.ENABLEBIGFONT, DefaultValue = false)] - public bool EnableBigFont - { - get - { - return (bool)base[ConfigPropertyName.ENABLEBIGFONT]; - } - set - { - base[ConfigPropertyName.ENABLEBIGFONT] = value; - } - } - - /// - /// Ƿõģʽ - /// - [ConfigurationProperty(ConfigPropertyName.DEBUGMODE, DefaultValue = false)] - public bool DebugMode - { - get - { - return (bool)base[ConfigPropertyName.DEBUGMODE]; - } - set - { - base[ConfigPropertyName.DEBUGMODE] = value; - } - } - - /// - /// ExtJSļڵĸĿ¼ - /// - [ConfigurationProperty(ConfigPropertyName.EXTJSBASEPATH, DefaultValue = ConfigPropertyValue.EXTJS_BASE_PATH_DEFAULT)] - public string ExtjsBasePath - { - get - { - return (string)base[ConfigPropertyName.EXTJSBASEPATH]; - } - set - { - base[ConfigPropertyName.EXTJSBASEPATH] = value; - } - } - - /// - /// ͼڵĸĿ¼ - /// - [ConfigurationProperty(ConfigPropertyName.ICONBASEPATH, DefaultValue = ConfigPropertyValue.ICON_BASE_PATH_DEFAULT)] - public string IconBasePath - { - get - { - return (string)base[ConfigPropertyName.ICONBASEPATH]; - } - set - { - base[ConfigPropertyName.ICONBASEPATH] = value; - } - } - - /// - /// ԶڵĸĿ¼ - /// - [ConfigurationProperty(ConfigPropertyName.CUSTOMTHEMEBASEPATH, DefaultValue = ConfigPropertyValue.CUSTOM_THEME_BASE_PATH_DEFAULT)] - public string CustomThemeBasePath - { - get - { - return (string)base[ConfigPropertyName.CUSTOMTHEMEBASEPATH]; - } - set - { - base[ConfigPropertyName.CUSTOMTHEMEBASEPATH] = value; - } - } - - /// - /// Զ - /// - [ConfigurationProperty(ConfigPropertyName.CUSTOMTHEME, DefaultValue = ConfigPropertyValue.CUSTOM_THEME_DEFAULT)] - public string CustomTheme - { - get - { - return (string)base[ConfigPropertyName.CUSTOMTHEME]; - } - set - { - base[ConfigPropertyName.CUSTOMTHEME] = value; - } - } - - /// - /// ǷXStateѹĬΪtrue - /// - [ConfigurationProperty(ConfigPropertyName.ENABLEXSTATECOMPRESS, DefaultValue = ConfigPropertyValue.ENABLE_XSTATE_COMPRESS)] - public bool EnableXStateCompress - { - get - { - return (bool)base[ConfigPropertyName.ENABLEXSTATECOMPRESS]; - } - set - { - base[ConfigPropertyName.ENABLEXSTATECOMPRESS] = value; - } - } - - } -} + +#region Comment + +/* + * Project FineUI + * + * FileName: ConfigSection.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * + * + * + * + * + */ + +#endregion + + +using System; +using System.Configuration; + +namespace FineUI +{ + /// + /// FineUIWeb.configеý + /// + public class ConfigSection : ConfigurationSection + { + /// + /// + /// + [ConfigurationProperty(ConfigPropertyName.THEME, DefaultValue = ConfigPropertyValue.THEME_DEFAULT)] + public string Theme + { + get + { + return (string)base[ConfigPropertyName.THEME]; + } + set + { + base[ConfigPropertyName.THEME] = value; + } + } + + /// + /// + /// + [ConfigurationProperty(ConfigPropertyName.LANGUAGE, DefaultValue = ConfigPropertyValue.LANGUAGE_DEFAULT_STRING)] + public string Language + { + get + { + return (string)base[ConfigPropertyName.LANGUAGE]; + } + set + { + base[ConfigPropertyName.LANGUAGE] = value; + } + } + + /// + /// ֤Ϣʾλ + /// + [ConfigurationProperty(ConfigPropertyName.FROMMESSAGETARGET, DefaultValue = ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT_STRING)] + public string FormMessageTarget + { + get + { + return (string)base[ConfigPropertyName.FROMMESSAGETARGET]; + } + set + { + base[ConfigPropertyName.FROMMESSAGETARGET] = value; + } + } + + /// + /// бǩλ + /// + [ConfigurationProperty(ConfigPropertyName.FORMLABELALIGN, DefaultValue = ConfigPropertyValue.FORM_LABELALIGN_DEFAULT_STRING)] + public string FormLabelAlign + { + get + { + return (string)base[ConfigPropertyName.FORMLABELALIGN]; + } + set + { + base[ConfigPropertyName.FORMLABELALIGN] = value; + } + } + + /// + /// ؼҲ߽ľ + /// + [ConfigurationProperty(ConfigPropertyName.FORMOFFSETRIGHT, DefaultValue = ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT)] + public int FormOffsetRight + { + get + { + return (int)base[ConfigPropertyName.FORMOFFSETRIGHT]; + } + set + { + base[ConfigPropertyName.FORMOFFSETRIGHT] = value; + } + } + + /// + /// ؼǩĿ + /// + [ConfigurationProperty(ConfigPropertyName.FORMLABELWIDTH, DefaultValue = ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT)] + public int FormLabelWidth + { + get + { + return (int)base[ConfigPropertyName.FORMLABELWIDTH]; + } + set + { + base[ConfigPropertyName.FORMLABELWIDTH] = value; + } + } + + /// + /// ؼǩķָ + /// + [ConfigurationProperty(ConfigPropertyName.FORMLABELSEPARATOR, DefaultValue = ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] + public string FormLabelSeparator + { + get + { + return (string)base[ConfigPropertyName.FORMLABELSEPARATOR]; + } + set + { + base[ConfigPropertyName.FORMLABELSEPARATOR] = value; + } + } + + /// + /// AJAX + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEAJAX, DefaultValue = ConfigPropertyValue.ENABLE_AJAX_DEFAULT)] + public bool EnableAjax + { + get + { + return (bool)base[ConfigPropertyName.ENABLEAJAX]; + } + set + { + base[ConfigPropertyName.ENABLEAJAX] = value; + } + } + + /// + /// AJAXʾϢ + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEAJAXLOADING, DefaultValue = ConfigPropertyValue.ENABLE_AJAX_LOADING_DEFAULT)] + public bool EnableAjaxLoading + { + get + { + return (bool)base[ConfigPropertyName.ENABLEAJAXLOADING]; + } + set + { + base[ConfigPropertyName.ENABLEAJAXLOADING] = value; + } + } + + /// + /// AJAXʾϢ + /// + [ConfigurationProperty(ConfigPropertyName.AJAXLOADINGTYPE, DefaultValue = ConfigPropertyValue.AJAX_LOADING_TYPE_DEFAULT_STRING)] + public string AjaxLoadingType + { + get + { + return (string)base[ConfigPropertyName.AJAXLOADINGTYPE]; + } + set + { + base[ConfigPropertyName.AJAXLOADINGTYPE] = value; + } + } + + /// + /// ͻAJAXʱʱ + /// + [ConfigurationProperty(ConfigPropertyName.AJAXTIMEOUT, DefaultValue = ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT)] + public int AjaxTimeout + { + get + { + return (int)base[ConfigPropertyName.AJAXTIMEOUT]; + } + set + { + base[ConfigPropertyName.AJAXTIMEOUT] = value; + } + } + + /// + /// Ƿô壨ExtJS11pxΪ12px + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEBIGFONT, DefaultValue = false)] + public bool EnableBigFont + { + get + { + return (bool)base[ConfigPropertyName.ENABLEBIGFONT]; + } + set + { + base[ConfigPropertyName.ENABLEBIGFONT] = value; + } + } + + /// + /// Ƿõģʽ + /// + [ConfigurationProperty(ConfigPropertyName.DEBUGMODE, DefaultValue = false)] + public bool DebugMode + { + get + { + return (bool)base[ConfigPropertyName.DEBUGMODE]; + } + set + { + base[ConfigPropertyName.DEBUGMODE] = value; + } + } + + /// + /// JSļڵĸĿ¼ + /// + [ConfigurationProperty(ConfigPropertyName.JSBASEPATH, DefaultValue = ConfigPropertyValue.JS_BASE_PATH_DEFAULT)] + public string JSBasePath + { + get + { + return (string)base[ConfigPropertyName.JSBASEPATH]; + } + set + { + base[ConfigPropertyName.JSBASEPATH] = value; + } + } + + /// + /// ͼڵĸĿ¼ + /// + [ConfigurationProperty(ConfigPropertyName.ICONBASEPATH, DefaultValue = ConfigPropertyValue.ICON_BASE_PATH_DEFAULT)] + public string IconBasePath + { + get + { + return (string)base[ConfigPropertyName.ICONBASEPATH]; + } + set + { + base[ConfigPropertyName.ICONBASEPATH] = value; + } + } + + /// + /// ԶڵĸĿ¼ + /// + [ConfigurationProperty(ConfigPropertyName.CUSTOMTHEMEBASEPATH, DefaultValue = ConfigPropertyValue.CUSTOM_THEME_BASE_PATH_DEFAULT)] + public string CustomThemeBasePath + { + get + { + return (string)base[ConfigPropertyName.CUSTOMTHEMEBASEPATH]; + } + set + { + base[ConfigPropertyName.CUSTOMTHEMEBASEPATH] = value; + } + } + + /// + /// Զ + /// + [ConfigurationProperty(ConfigPropertyName.CUSTOMTHEME, DefaultValue = ConfigPropertyValue.CUSTOM_THEME_DEFAULT)] + public string CustomTheme + { + get + { + return (string)base[ConfigPropertyName.CUSTOMTHEME]; + } + set + { + base[ConfigPropertyName.CUSTOMTHEME] = value; + } + } + + /// + /// ǷFStateѹĬΪfalse + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEFSTATECOMPRESS, DefaultValue = ConfigPropertyValue.ENABLE_FSTATE_COMPRESS)] + public bool EnableFStateCompress + { + get + { + return (bool)base[ConfigPropertyName.ENABLEFSTATECOMPRESS]; + } + set + { + base[ConfigPropertyName.ENABLEFSTATECOMPRESS] = value; + } + } + + + /// + /// ǷҳIE=edgeʶ + /// + [ConfigurationProperty(ConfigPropertyName.IEEDGE, DefaultValue = true)] + public bool IEEdge + { + get + { + return (bool)base[ConfigPropertyName.IEEDGE]; + } + set + { + base[ConfigPropertyName.IEEDGE] = value; + } + } + + + /// + /// Ƿñıȷ϶Ի + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEFORMCHANGECONFIRM, DefaultValue = ConfigPropertyValue.ENABLE_FORMCHANGECONFIRM_DEFAULT)] + public bool EnableFormChangeConfirm + { + get + { + return (bool)base[ConfigPropertyName.ENABLEFORMCHANGECONFIRM]; + } + set + { + base[ConfigPropertyName.ENABLEFORMCHANGECONFIRM] = value; + } + } + + } +} diff --git a/FineUI/Business/Config/Constants.cs b/FineUI/Business/Config/Constants.cs index 2c2c2e6..6bc8c84 100644 --- a/FineUI/Business/Config/Constants.cs +++ b/FineUI/Business/Config/Constants.cs @@ -1,163 +1,228 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Constants.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 配置字段名称 - /// - internal static class ConfigSectionName - { - public const string FineUI = "FineUI"; - } - - - /// - /// 字段属性名称 - /// - internal static class ConfigPropertyName - { - public const string THEME = "Theme"; - public const string LANGUAGE = "Language"; - public const string FROMMESSAGETARGET = "FormMessageTarget"; - public const string FORMOFFSETRIGHT = "FormOffsetRight"; - public const string FORMLABELWIDTH = "FormLabelWidth"; - public const string FORMLABELSEPARATOR = "FormLabelSeparator"; - public const string FORMLABELALIGN = "FormLabelAlign"; - public const string ENABLEAJAX = "EnableAjax"; - public const string ENABLEAJAXLOADING = "EnableAjaxLoading"; - public const string AJAXLOADINGTYPE = "AjaxLoadingType"; - public const string AJAXTIMEOUT = "AjaxTimeout"; - public const string ENABLEBIGFONT = "EnableBigFont"; - public const string DEBUGMODE = "DebugMode"; - public const string ICONBASEPATH = "IconBasePath"; - public const string EXTJSBASEPATH = "ExtjsBasePath"; - public const string CUSTOMTHEMEBASEPATH = "CustomThemeBasePath"; - public const string CUSTOMTHEME = "CustomTheme"; - public const string ENABLEXSTATECOMPRESS = "EnableXStateCompress"; - } - - /// - /// 字段属性值 - /// - internal static class ConfigPropertyValue - { - public const MessageTarget FORM_MESSAGETARGET_DEFAULT = MessageTarget.Side; - public const string FORM_MESSAGETARGET_DEFAULT_STRING = "Side"; - - public const LabelAlign FORM_LABELALIGN_DEFAULT = LabelAlign.Left; - public const string FORM_LABELALIGN_DEFAULT_STRING = "Left"; - - public const int FORM_OFFSETRIGHT_DEFAULT = 5; - public const string FORM_OFFSETRIGHT_DEFAULT_STRING = "5"; - - public const int FORM_LABELWIDTH_DEFAULT = 100; - public const string FORM_LABELWIDTH_DEFAULT_STRING = "100"; - - public const string FORM_LABELSEPARATOR_DEFAULT = ":"; - - public const string THEME_DEFAULT = "neptune"; - - public const string LANGUAGE_DEFAULT = "zh_CN"; - public const string LANGUAGE_EN = "en"; - public const string LANGUAGE_ZH_CN = "zh_CN"; - public const string LANGUAGE_ZH_TW = "zh_TW"; - public const string LANGUAGE_PT_BR = "pt_BR"; - public const string LANGUAGE_TR = "tr"; - public const string LANGUAGE_RU = "ru"; - - - // Ajax 超时时间(单位:秒) - public const int AJAX_TIMEOUT_DEFAULT = 60; - - // 是否启用 Ajax - public const bool ENABLE_AJAX_DEFAULT = true; - - public const bool ENABLE_AJAX_LOADING_DEFAULT = true; - - public const string AJAX_LOADING_TYPE_DEFAULT = "default"; - public const string AJAX_LOADING_TYPE_MASK = "mask"; - - // 是否启用开发者模式(引入 JS 的非压缩版本,以及页面 JS 的格式化输出) - public const bool DEBUG_MODE_DEFAULT = false; - - - public const string ICON_BASE_PATH_DEFAULT = "~/icon"; - - public const string EXTJS_BASE_PATH_DEFAULT = "~/extjs"; - - public const string CUSTOM_THEME_BASE_PATH_DEFAULT = "~/theme"; - - public const string CUSTOM_THEME_DEFAULT = ""; - - - public const bool ENABLE_XSTATE_COMPRESS = true; - } - - - - /// - /// 属性分类的名称 - /// - internal static class CategoryName - { - /// - /// 基本属性 - /// - public const string BASEOPTIONS = "基本属性"; - - /// - /// 属性 - /// - public const string OPTIONS = "属性"; - - /// - /// 表单验证 - /// - public const string VALIDATION = "表单验证"; - - - /// - /// 布局 - /// - public const string LAYOUT = "布局"; - - - /// - /// 事件 - /// - public const string ACTION = "事件"; - - ///// - ///// 设计时 - ///// - //public const string DESIGN_TIME = "设计时"; - - } - -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Constants.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + + /// + /// 常量 + /// + public static class Constants + { + + /// + /// 绝对脚本的默认级别(仅内部使用) + /// + public static readonly int ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL = 100; + + + + // http://stackoverflow.com/questions/11832930/html-input-file-accept-attribute-file-type-csv + + /// + /// 文件类型 + /// + public static readonly string FILETYPE_CSV = ".csv"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_EXCEL = ".xls,.xlsx"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_WORD = ".doc,.docx"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_TEXT = ".txt"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_IMAGES = "image/*"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_HTML = "text/html"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_VIDEO = "video/*"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_AUDIO = "audio/*"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_PDF = ".pdf"; + + + } + + + /// + /// 配置字段名称 + /// + internal static class ConfigSectionName + { + public const string FineUI = "FineUI"; + } + + + /// + /// 字段属性名称 + /// + internal static class ConfigPropertyName + { + public const string THEME = "Theme"; + public const string LANGUAGE = "Language"; + public const string FROMMESSAGETARGET = "FormMessageTarget"; + public const string FORMOFFSETRIGHT = "FormOffsetRight"; + public const string FORMLABELWIDTH = "FormLabelWidth"; + public const string FORMLABELSEPARATOR = "FormLabelSeparator"; + public const string FORMLABELALIGN = "FormLabelAlign"; + public const string ENABLEAJAX = "EnableAjax"; + public const string ENABLEAJAXLOADING = "EnableAjaxLoading"; + public const string AJAXLOADINGTYPE = "AjaxLoadingType"; + public const string AJAXTIMEOUT = "AjaxTimeout"; + public const string ENABLEBIGFONT = "EnableBigFont"; + public const string DEBUGMODE = "DebugMode"; + public const string ICONBASEPATH = "IconBasePath"; + public const string JSBASEPATH = "JSBasePath"; + public const string CUSTOMTHEMEBASEPATH = "CustomThemeBasePath"; + public const string CUSTOMTHEME = "CustomTheme"; + public const string ENABLEFSTATECOMPRESS = "EnableFStateCompress"; + public const string IEEDGE = "IEEdge"; + public const string ENABLEFORMCHANGECONFIRM = "EnableFormChangeConfirm"; + } + + /// + /// 字段属性值 + /// + internal static class ConfigPropertyValue + { + public const MessageTarget FORM_MESSAGETARGET_DEFAULT = MessageTarget.Side; + public const string FORM_MESSAGETARGET_DEFAULT_STRING = "Side"; + + public const LabelAlign FORM_LABELALIGN_DEFAULT = LabelAlign.Left; + public const string FORM_LABELALIGN_DEFAULT_STRING = "Left"; + + public const int FORM_OFFSETRIGHT_DEFAULT = 0; + public const string FORM_OFFSETRIGHT_DEFAULT_STRING = "0"; + + public const int FORM_LABELWIDTH_DEFAULT = 100; + public const string FORM_LABELWIDTH_DEFAULT_STRING = "100"; + + public const string FORM_LABELSEPARATOR_DEFAULT = ":"; + + public const string THEME_DEFAULT = "Neptune"; + + public const Language LANGUAGE_DEFAULT = Language.ZH_CN; + public const string LANGUAGE_DEFAULT_STRING = "zh_CN"; + + public const string LANGUAGE_EN = "en"; + public const string LANGUAGE_ZH_CN = "zh_CN"; + public const string LANGUAGE_ZH_TW = "zh_TW"; + public const string LANGUAGE_PT_BR = "pt_BR"; + public const string LANGUAGE_TR = "tr"; + public const string LANGUAGE_RU = "ru"; + + + // Ajax 超时时间(单位:秒) + public const int AJAX_TIMEOUT_DEFAULT = 120; + + // 是否启用 Ajax + public const bool ENABLE_AJAX_DEFAULT = true; + + public const bool ENABLE_AJAX_LOADING_DEFAULT = true; + + public const AjaxLoadingType AJAX_LOADING_TYPE_DEFAULT = AjaxLoadingType.Default; + public const string AJAX_LOADING_TYPE_DEFAULT_STRING = "Default"; + + public const string AJAX_LOADING_TYPE_MASK = "Mask"; + + // 是否启用开发者模式(引入 JS 的非压缩版本,以及页面 JS 的格式化输出) + public const bool DEBUG_MODE_DEFAULT = false; + + + public const string ICON_BASE_PATH_DEFAULT = "~/res/icon"; + + public const string JS_BASE_PATH_DEFAULT = "~/extjs"; + + public const string CUSTOM_THEME_BASE_PATH_DEFAULT = "~/res/themes"; + + public const string CUSTOM_THEME_DEFAULT = ""; + + + public const bool ENABLE_FSTATE_COMPRESS = false; + + public const bool ENABLE_FORMCHANGECONFIRM_DEFAULT = false; + } + + + + /// + /// 属性分类的名称 + /// + internal static class CategoryName + { + /// + /// 基本属性 + /// + public const string BASEOPTIONS = "基本属性"; + + /// + /// 属性 + /// + public const string OPTIONS = "属性"; + + /// + /// 表单验证 + /// + public const string VALIDATION = "表单验证"; + + + /// + /// 布局 + /// + public const string LAYOUT = "布局"; + + + /// + /// 事件 + /// + public const string ACTION = "事件"; + + ///// + ///// 设计时 + ///// + //public const string DESIGN_TIME = "设计时"; + + } + +} diff --git a/FineUI/Business/Config/GlobalConfig.cs b/FineUI/Business/Config/GlobalConfig.cs index 9100ad6..e8c1259 100644 --- a/FineUI/Business/Config/GlobalConfig.cs +++ b/FineUI/Business/Config/GlobalConfig.cs @@ -1,363 +1,380 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: AboutConfig.cs - * CreatedOn: 2008-05-15 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Reflection; -using System.Configuration; -using System.Web.Configuration; -using System.Web.UI.Design; -using System.ComponentModel; - -namespace FineUI -{ - /// - /// 全局配置参数 - /// - public static class GlobalConfig - { - #region 静态构造函数 - - /// - /// 初始化section对象,如果在Web.config中没有定义,则初始化为空对象 - /// - static GlobalConfig() - { - section = ConfigurationManager.GetSection(ConfigSectionName.FineUI) as ConfigSection; - - if (section == null) - { - section = new ConfigSection(); - } - } - - #endregion - - #region Section - - /// - /// Runtime Section - /// - private static ConfigSection section; // = ConfigurationManager.GetSection(ConfigSectionName.FineUI) as ConfigSection; - - - /// - /// Refer:http://flimflan.com/blog/AccessingWebconfigAtDesignTimeInNET20.aspx - /// - /// - /// - public static ConfigSection GetDesignTimeSection(ISite site) - { - IWebApplication webApp = (IWebApplication)site.GetService(typeof(IWebApplication)); - if (webApp != null) - { - Configuration config = webApp.OpenWebConfiguration(false); - if (config != null) - { - ConfigurationSection section = config.GetSection(ConfigSectionName.FineUI); - if (section != null) - { - return section as ConfigSection; - } - } - } - return null; - } - - #endregion - - #region Static Methods - - /// - /// 产品名称 - /// - public static string ProductName - { - get - { - return "FineUI"; - } - } - - /// - /// 当前版本 - /// - public static string ProductVersion - { - get - { - Version v = Assembly.GetExecutingAssembly().GetName().Version; - //string vs = String.Format("{0}.{1} ", v.Major, v.Minor, v.Build); - //vs += v.Build >= 10 ? "final" : "beta" + v.Build; - //return vs; - string vStr = String.Format("{0}.{1}.{2}", v.Major, v.Minor, v.Build); - - if (v.Revision != 0) - { - vStr = String.Format("{0}.{1}", vStr, v.Revision); - } - - return vStr; - } - } - - /// - /// 主题 - /// - public static Theme GetTheme() - { - return (Theme)Enum.Parse(typeof(Theme), section.Theme, true); - } - - /// - /// 语言 - /// - public static Language GetLanguage() - { - return (Language)Enum.Parse(typeof(Language), section.Language, true); - } - - - /// - /// 表单中消息的位置 - /// - public static MessageTarget GetFormMessageTarget() - { - return (MessageTarget)Enum.Parse(typeof(MessageTarget), section.FormMessageTarget, true); - } - - /// - /// 表单中标签的位置 - /// - public static LabelAlign GetFormLabelAlign() - { - return (LabelAlign)Enum.Parse(typeof(LabelAlign), section.FormLabelAlign, true); - } - - /// - /// 表单中字段距离右侧的宽度 - /// - public static int GetFormOffsetRight() - { - return Convert.ToInt32(section.FormOffsetRight); - } - - /// - /// 表单中字段标签的宽度 - /// - public static int GetFormLabelWidth() - { - return Convert.ToInt32(section.FormLabelWidth); - } - - /// - /// 表单中字段与标签的分隔符 - /// - public static string GetFormLabelSeparator() - { - return section.FormLabelSeparator; - } - - - /// - /// AJAX超时时间(单位:秒,默认:60s) - /// - public static int GetAjaxTimeout() - { - return Convert.ToInt32(section.AjaxTimeout); - } - - - /// - /// 是否启用Ajax - /// - public static bool GetEnableAjax() - { - return Convert.ToBoolean(section.EnableAjax); - } - - - /// - /// 是否启用AJAX提示 - /// - public static bool GetEnableAjaxLoading() - { - return Convert.ToBoolean(section.EnableAjaxLoading); - } - - /// - /// AJAX提示的类型 - /// - public static AjaxLoadingType GetAjaxLoadingType() - { - return (AjaxLoadingType)Enum.Parse(typeof(AjaxLoadingType), section.AjaxLoadingType, true); - } - - - - ///// - ///// 是否启用大字体 - ///// - //public static bool GetEnableBigFont() - //{ - // return Convert.ToBoolean(section.EnableBigFont); - //} - - /// - /// DEBUG 模式 - /// - public static bool GetDebugMode() - { - return Convert.ToBoolean(section.DebugMode); - } - - /// - /// 图标的根路径 - /// - public static string GetIconBasePath() - { - return section.IconBasePath; - } - - /// - /// Extjs库的根路径 - /// - public static string GetExtjsBasePath() - { - return section.ExtjsBasePath; - } - - /// - /// 自定义样式的根路径 - /// - public static string GetCustomThemeBasePath() - { - return section.CustomThemeBasePath; - } - - /// - /// 自定义样式的名称 - /// - public static string GetCustomTheme() - { - return section.CustomTheme; - } - - - /// - /// 是否启用XState压缩 - /// - public static bool GetEnableXStateCompress() - { - return Convert.ToBoolean(section.EnableXStateCompress); - } - - - ///// - ///// 是否启用Ajax - ///// - //public static bool GetEnableAjax(ISite site) - //{ - // return Convert.ToBoolean(GetDesignTimeSection(site).EnableAjax); - //} - #endregion - - #region GetDefaultBackgroundColor - - /// - /// 获取默认的背景颜色 - /// - /// 用于CSS的背景颜色值 - [Obsolete("此方法已废除")] - public static string GetDefaultBackgroundColor() - { - string backgroundColor = String.Empty; - - if (String.IsNullOrEmpty(PageManager.Instance.CustomTheme)) - { - string theme = PageManager.Instance.Theme.ToString(); - if (theme.ToLower() == ThemeHelper.GetName(Theme.Blue)) - { - backgroundColor = "#DFE8F6"; - } - else if (theme.ToLower() == ThemeHelper.GetName(Theme.Gray)) - { - backgroundColor = "#efefef"; - } - } - - return backgroundColor; - } - - //public static string GetLightBackgroundColor(string theme) - //{ - // string backgroundColor = "#efefef"; - // if (theme.ToLower() == ThemeHelper.GetName(Theme.Blue)) - // { - // backgroundColor = "#E6F0FF"; - // } - - // return backgroundColor; - //} - - ///// - ///// 主题的默认背景色 - ///// - ///// - //public static string ThemeDefaultBackgroundColor - //{ - // get - // { - // string backgroundColor = "#efefef"; - // if (Theme == ConfigThemeValues.BLUE) - // { - // backgroundColor = "#DFE8F6"; - // } - - // return backgroundColor; - // } - //} - - ///// - ///// 主题的默认背景色 - ///// - ///// - //public static string ThemeLightBackgroundColor - //{ - // get - // { - // string backgroundColor = "#efefef"; - // if (Theme == ConfigThemeValues.BLUE) - // { - // backgroundColor = "#E6F0FF"; - // } - - // return backgroundColor; - // } - //} - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: AboutConfig.cs + * CreatedOn: 2008-05-15 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using System.Configuration; +using System.Web.Configuration; +using System.Web.UI.Design; +using System.ComponentModel; + +namespace FineUI +{ + /// + /// 全局配置参数 + /// + public static class GlobalConfig + { + #region 静态构造函数 + + /// + /// 初始化section对象,如果在Web.config中没有定义,则初始化为空对象 + /// + static GlobalConfig() + { + section = ConfigurationManager.GetSection(ConfigSectionName.FineUI) as ConfigSection; + + if (section == null) + { + section = new ConfigSection(); + } + } + + #endregion + + #region Section + + /// + /// Runtime Section + /// + private static ConfigSection section; // = ConfigurationManager.GetSection(ConfigSectionName.FineUI) as ConfigSection; + + + /// + /// Refer:http://flimflan.com/blog/AccessingWebconfigAtDesignTimeInNET20.aspx + /// + /// + /// + public static ConfigSection GetDesignTimeSection(ISite site) + { + IWebApplication webApp = (IWebApplication)site.GetService(typeof(IWebApplication)); + if (webApp != null) + { + Configuration config = webApp.OpenWebConfiguration(false); + if (config != null) + { + ConfigurationSection section = config.GetSection(ConfigSectionName.FineUI); + if (section != null) + { + return section as ConfigSection; + } + } + } + return null; + } + + #endregion + + #region Static Methods + + /// + /// 产品名称 + /// + public static string ProductName + { + get + { + return "FineUI"; + } + } + + /// + /// 当前版本 + /// + public static string ProductVersion + { + get + { + Version v = Assembly.GetExecutingAssembly().GetName().Version; + //string vs = String.Format("{0}.{1} ", v.Major, v.Minor, v.Build); + //vs += v.Build >= 10 ? "final" : "beta" + v.Build; + //return vs; + string vStr = String.Format("{0}.{1}.{2}", v.Major, v.Minor, v.Build); + + if (v.Revision != 0) + { + vStr = String.Format("{0}.{1}", vStr, v.Revision); + } + + return vStr; + } + } + + /// + /// 主题 + /// + public static Theme GetTheme() + { + return (Theme)Enum.Parse(typeof(Theme), section.Theme, true); + } + + /// + /// 语言 + /// + public static Language GetLanguage() + { + return (Language)Enum.Parse(typeof(Language), section.Language, true); + } + + + /// + /// 表单中消息的位置 + /// + public static MessageTarget GetFormMessageTarget() + { + return (MessageTarget)Enum.Parse(typeof(MessageTarget), section.FormMessageTarget, true); + } + + /// + /// 表单中标签的位置 + /// + public static LabelAlign GetFormLabelAlign() + { + return (LabelAlign)Enum.Parse(typeof(LabelAlign), section.FormLabelAlign, true); + } + + /// + /// 表单中字段距离右侧的宽度 + /// + public static int GetFormOffsetRight() + { + return Convert.ToInt32(section.FormOffsetRight); + } + + /// + /// 表单中字段标签的宽度 + /// + public static int GetFormLabelWidth() + { + return Convert.ToInt32(section.FormLabelWidth); + } + + /// + /// 表单中字段与标签的分隔符 + /// + public static string GetFormLabelSeparator() + { + return section.FormLabelSeparator; + } + + + /// + /// AJAX超时时间(单位:秒,默认:60s) + /// + public static int GetAjaxTimeout() + { + return Convert.ToInt32(section.AjaxTimeout); + } + + + /// + /// 是否启用Ajax + /// + public static bool GetEnableAjax() + { + return Convert.ToBoolean(section.EnableAjax); + } + + + /// + /// 是否启用AJAX提示 + /// + public static bool GetEnableAjaxLoading() + { + return Convert.ToBoolean(section.EnableAjaxLoading); + } + + /// + /// AJAX提示的类型 + /// + public static AjaxLoadingType GetAjaxLoadingType() + { + return (AjaxLoadingType)Enum.Parse(typeof(AjaxLoadingType), section.AjaxLoadingType, true); + } + + + + ///// + ///// 是否启用大字体 + ///// + //public static bool GetEnableBigFont() + //{ + // return Convert.ToBoolean(section.EnableBigFont); + //} + + /// + /// DEBUG 模式 + /// + public static bool GetDebugMode() + { + return Convert.ToBoolean(section.DebugMode); + } + + /// + /// 图标的根路径 + /// + public static string GetIconBasePath() + { + return section.IconBasePath; + } + + /// + /// JS库的根路径 + /// + public static string GetJSBasePath() + { + return section.JSBasePath; + } + + /// + /// 自定义样式的根路径 + /// + public static string GetCustomThemeBasePath() + { + return section.CustomThemeBasePath; + } + + /// + /// 自定义样式的名称 + /// + public static string GetCustomTheme() + { + return section.CustomTheme; + } + + + /// + /// 是否启用FState压缩 + /// + public static bool GetEnableFStateCompress() + { + return Convert.ToBoolean(section.EnableFStateCompress); + } + + /// + /// 是否向页面输出IE=edge标识 + /// + public static bool GetIEEdge() + { + return section.IEEdge; + } + + + ///// + ///// 是否启用Ajax + ///// + //public static bool GetEnableAjax(ISite site) + //{ + // return Convert.ToBoolean(GetDesignTimeSection(site).EnableAjax); + //} + + /// + /// 是否启用表单改变确认对话框 + /// + public static bool GetEnableFormChangeConfirm() + { + return section.EnableFormChangeConfirm; + } + + #endregion + + #region oldcode + + ///// + ///// 获取默认的背景颜色 + ///// + ///// 用于CSS的背景颜色值 + //[Obsolete("此方法已废除")] + //public static string GetDefaultBackgroundColor() + //{ + // string backgroundColor = String.Empty; + + // if (String.IsNullOrEmpty(PageManager.Instance.CustomTheme)) + // { + // string theme = PageManager.Instance.Theme.ToString(); + // if (theme.ToLower() == ThemeHelper.GetName(Theme.Blue)) + // { + // backgroundColor = "#DFE8F6"; + // } + // else if (theme.ToLower() == ThemeHelper.GetName(Theme.Gray)) + // { + // backgroundColor = "#efefef"; + // } + // } + + // return backgroundColor; + //} + + //public static string GetLightBackgroundColor(string theme) + //{ + // string backgroundColor = "#efefef"; + // if (theme.ToLower() == ThemeHelper.GetName(Theme.Blue)) + // { + // backgroundColor = "#E6F0FF"; + // } + + // return backgroundColor; + //} + + ///// + ///// 主题的默认背景色 + ///// + ///// + //public static string ThemeDefaultBackgroundColor + //{ + // get + // { + // string backgroundColor = "#efefef"; + // if (Theme == ConfigThemeValues.BLUE) + // { + // backgroundColor = "#DFE8F6"; + // } + + // return backgroundColor; + // } + //} + + ///// + ///// 主题的默认背景色 + ///// + ///// + //public static string ThemeLightBackgroundColor + //{ + // get + // { + // string backgroundColor = "#efefef"; + // if (Theme == ConfigThemeValues.BLUE) + // { + // backgroundColor = "#E6F0FF"; + // } + + // return backgroundColor; + // } + //} + + #endregion + } +} diff --git a/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs b/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs index 008d6ab..aa0b93e 100644 --- a/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs +++ b/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs @@ -1,75 +1,75 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ContentPanelBuilder.cs - * CreatedOn: 2012-12-31 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - - -namespace FineUI -{ - /// - /// 支持页分析器生成控件及其包含的子控件 - /// - internal class ContentPanelBuilder : ControlBuilder - { - /// - /// 允许空白字符 - /// - /// - public override bool AllowWhitespaceLiterals() - { - return true; - } - - /// - /// 不忽略游离于标签外的字符串 - /// - /// - public override void AppendLiteralString(string s) - { - base.AppendLiteralString(s); - } - - public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs) - { - return base.GetChildControlType(tagName, attribs); - } - - public override Type DeclareType - { - get - { - return base.DeclareType; - } - } - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ContentPanelBuilder.cs + * CreatedOn: 2012-12-31 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + + +namespace FineUI +{ + /// + /// 支持页分析器生成控件及其包含的子控件 + /// + internal class ContentPanelBuilder : ControlBuilder + { + /// + /// 允许空白字符 + /// + /// + public override bool AllowWhitespaceLiterals() + { + return true; + } + + /// + /// 不忽略游离于标签外的字符串 + /// + /// + public override void AppendLiteralString(string s) + { + base.AppendLiteralString(s); + } + + public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs) + { + return base.GetChildControlType(tagName, attribs); + } + + public override Type DeclareType + { + get + { + return base.DeclareType; + } + } + } +} diff --git a/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs b/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs index 8df5920..a8cbdcd 100644 --- a/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs +++ b/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs @@ -1,67 +1,67 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: NotAllowWhitespaceLiteralsBuilder.cs - * CreatedOn: 2008-06-05 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - - -namespace FineUI -{ - /// - /// 控件内部不允许存在非标签形式的字符串 - /// - internal class NotAllowWhitespaceLiteralsBuilder : ControlBuilder - { - /// - /// 不允许空白字符 - /// - /// - public override bool AllowWhitespaceLiterals() - { - return false; - } - - /// - /// 忽略游离于标签外的字符串 - /// - /// - public override void AppendLiteralString(string s) - { - } - - public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs) - { - return base.GetChildControlType(tagName, attribs); - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: NotAllowWhitespaceLiteralsBuilder.cs + * CreatedOn: 2008-06-05 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + + +namespace FineUI +{ + /// + /// 控件内部不允许存在非标签形式的字符串 + /// + internal class NotAllowWhitespaceLiteralsBuilder : ControlBuilder + { + /// + /// 不允许空白字符 + /// + /// + public override bool AllowWhitespaceLiterals() + { + return false; + } + + /// + /// 忽略游离于标签外的字符串 + /// + /// + public override void AppendLiteralString(string s) + { + } + + public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs) + { + return base.GetChildControlType(tagName, attribs); + } + + } +} diff --git a/FineUI/Business/Editor/ControlBaseItemsEditor.cs b/FineUI/Business/Editor/ControlBaseItemsEditor.cs index 112c0c5..ea8484e 100644 --- a/FineUI/Business/Editor/ControlBaseItemsEditor.cs +++ b/FineUI/Business/Editor/ControlBaseItemsEditor.cs @@ -1,95 +1,96 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ControlBaseItemsEditor.cs - * CreatedOn: 2013-01-02 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// - /// 为设计时提供集合编辑器 - /// - public class ControlBaseItemsEditor : CollectionEditor - { - private Type[] types; - - /// - /// 构造函数 - /// - /// 控件类型 - public ControlBaseItemsEditor(Type type) - : base(type) - { - types = new Type[] { - typeof(Button), - typeof(Calendar), - typeof(SplitButton), - typeof(Timer), - typeof(UserControlConnector), - typeof(CheckBox), - typeof(CheckBoxList), - typeof(HtmlEditor), - typeof(Label), - typeof(HyperLink), - typeof(Image), - typeof(LinkButton), - typeof(RadioButton), - typeof(RadioButtonList), - typeof(DropDownList), - typeof(DatePicker), - typeof(FileUpload), - typeof(HiddenField), - typeof(NumberBox), - typeof(TextArea), - typeof(TextBox), - typeof(TimePicker), - typeof(TriggerBox), - typeof(TwinTriggerBox), - typeof(Accordion), - typeof(ContentPanel), - typeof(Form), - typeof(GroupPanel), - typeof(Panel), - typeof(SimpleForm), - typeof(Tree), - typeof(Window), - typeof(Grid), - typeof(RegionPanel), - typeof(TabStrip) - }; - } - - /// - /// 获取此集合编辑器可包含的数据类型 - /// - /// 类型集合 - protected override Type[] CreateNewItemTypes() - { - return types; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlBaseItemsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供集合编辑器 + /// + public class ControlBaseItemsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public ControlBaseItemsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(Button), + typeof(Calendar), + typeof(SplitButton), + typeof(Timer), + typeof(UserControlConnector), + typeof(CPHConnector), + typeof(CheckBox), + typeof(CheckBoxList), + typeof(HtmlEditor), + typeof(Label), + typeof(HyperLink), + typeof(Image), + typeof(LinkButton), + typeof(RadioButton), + typeof(RadioButtonList), + typeof(DropDownList), + typeof(DatePicker), + typeof(FileUpload), + typeof(HiddenField), + typeof(NumberBox), + typeof(TextArea), + typeof(TextBox), + typeof(TimePicker), + typeof(TriggerBox), + typeof(TwinTriggerBox), + typeof(Accordion), + typeof(ContentPanel), + typeof(Form), + typeof(GroupPanel), + typeof(Panel), + typeof(SimpleForm), + typeof(Tree), + typeof(Window), + typeof(Grid), + typeof(RegionPanel), + typeof(TabStrip) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI/Business/Editor/GridColumnEditorEditor.cs b/FineUI/Business/Editor/GridColumnEditorEditor.cs index a1b250d..2a743e6 100644 --- a/FineUI/Business/Editor/GridColumnEditorEditor.cs +++ b/FineUI/Business/Editor/GridColumnEditorEditor.cs @@ -1,80 +1,80 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: FieldEditor.cs - * CreatedOn: 2013-05-01 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// - /// 为设计时提供的表格列编辑器集合编辑器 - /// - public class GridColumnEditorEditor : CollectionEditor - { - private Type[] types; - - /// - /// 构造函数 - /// - /// 控件类型 - public GridColumnEditorEditor(Type type) - : base(type) - { - types = new Type[] { - typeof(CheckBox), - typeof(CheckBoxList), - typeof(HtmlEditor), - typeof(Label), - typeof(HyperLink), - typeof(Image), - typeof(LinkButton), - typeof(RadioButton), - typeof(RadioButtonList), - typeof(DropDownList), - typeof(DatePicker), - typeof(FileUpload), - typeof(HiddenField), - typeof(NumberBox), - typeof(TextArea), - typeof(TextBox), - typeof(TimePicker), - typeof(TriggerBox), - typeof(TwinTriggerBox) - - }; - } - - /// - /// 获取此集合编辑器可包含的数据类型 - /// - /// 类型集合 - protected override Type[] CreateNewItemTypes() - { - return types; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: FieldEditor.cs + * CreatedOn: 2013-05-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的表格列编辑器集合编辑器 + /// + public class GridColumnEditorEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public GridColumnEditorEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(CheckBox), + typeof(CheckBoxList), + typeof(HtmlEditor), + typeof(Label), + typeof(HyperLink), + typeof(Image), + typeof(LinkButton), + typeof(RadioButton), + typeof(RadioButtonList), + typeof(DropDownList), + typeof(DatePicker), + typeof(FileUpload), + typeof(HiddenField), + typeof(NumberBox), + typeof(TextArea), + typeof(TextBox), + typeof(TimePicker), + typeof(TriggerBox), + typeof(TwinTriggerBox) + + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI/Business/Editor/GridColumnsEditor.cs b/FineUI/Business/Editor/GridColumnsEditor.cs index 9dee0bf..170df74 100644 --- a/FineUI/Business/Editor/GridColumnsEditor.cs +++ b/FineUI/Business/Editor/GridColumnsEditor.cs @@ -1,67 +1,67 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: GridColumnsEditor.cs - * CreatedOn: 2013-01-02 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// - /// 为设计时提供的表格列集合编辑器 - /// - public class GridColumnsEditor : CollectionEditor - { - private Type[] types; - - /// - /// 构造函数 - /// - /// 控件类型 - public GridColumnsEditor(Type type) - : base(type) - { - types = new Type[] { - typeof(BoundField), - typeof(CheckBoxField), - typeof(HyperLinkField), - typeof(TemplateField), - typeof(ImageField), - typeof(WindowField), - typeof(LinkButtonField) - }; - } - - /// - /// 获取此集合编辑器可包含的数据类型 - /// - /// 类型集合 - protected override Type[] CreateNewItemTypes() - { - return types; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: GridColumnsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的表格列集合编辑器 + /// + public class GridColumnsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public GridColumnsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(BoundField), + typeof(CheckBoxField), + typeof(HyperLinkField), + typeof(TemplateField), + typeof(ImageField), + typeof(WindowField), + typeof(LinkButtonField) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI/Business/Editor/MenuItemsEditor.cs b/FineUI/Business/Editor/MenuItemsEditor.cs index feae6c1..91159ea 100644 --- a/FineUI/Business/Editor/MenuItemsEditor.cs +++ b/FineUI/Business/Editor/MenuItemsEditor.cs @@ -1,65 +1,65 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuItemsEditor.cs - * CreatedOn: 2013-01-02 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// - /// 为设计时提供的菜单项集合编辑器 - /// - public class MenuItemsEditor : CollectionEditor - { - private Type[] types; - - /// - /// 构造函数 - /// - /// 控件类型 - public MenuItemsEditor(Type type) - : base(type) - { - types = new Type[] { - typeof(MenuButton), - typeof(MenuCheckBox), - typeof(MenuHyperLink), - typeof(MenuSeparator), - typeof(MenuText) - }; - } - - /// - /// 获取此集合编辑器可包含的数据类型 - /// - /// 类型集合 - protected override Type[] CreateNewItemTypes() - { - return types; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItemsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的菜单项集合编辑器 + /// + public class MenuItemsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public MenuItemsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(MenuButton), + typeof(MenuCheckBox), + typeof(MenuHyperLink), + typeof(MenuSeparator), + typeof(MenuText) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI/Business/Editor/ToolbarItemsEditor.cs b/FineUI/Business/Editor/ToolbarItemsEditor.cs index 6a519d4..10375e6 100644 --- a/FineUI/Business/Editor/ToolbarItemsEditor.cs +++ b/FineUI/Business/Editor/ToolbarItemsEditor.cs @@ -1,83 +1,83 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ToolbarItemsEditor.cs - * CreatedOn: 2013-01-02 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// - /// 为设计时提供的工具栏项集合编辑器 - /// - public class ToolbarItemsEditor : CollectionEditor - { - private Type[] types; - - /// - /// 构造函数 - /// - /// 控件类型 - public ToolbarItemsEditor(Type type) - : base(type) - { - types = new Type[] { - typeof(ToolbarFill), - typeof(ToolbarSeparator), - typeof(ToolbarText), - typeof(Button), - typeof(SplitButton), - typeof(CheckBox), - typeof(CheckBoxList), - typeof(Label), - typeof(HyperLink), - typeof(Image), - typeof(LinkButton), - typeof(RadioButton), - typeof(RadioButtonList), - typeof(DropDownList), - typeof(DatePicker), - typeof(FileUpload), - typeof(HiddenField), - typeof(NumberBox), - typeof(TextArea), - typeof(TextBox), - typeof(TimePicker), - typeof(TriggerBox), - typeof(TwinTriggerBox) - }; - } - - /// - /// 获取此集合编辑器可包含的数据类型 - /// - /// 类型集合 - protected override Type[] CreateNewItemTypes() - { - return types; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarItemsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的工具栏项集合编辑器 + /// + public class ToolbarItemsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public ToolbarItemsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(ToolbarFill), + typeof(ToolbarSeparator), + typeof(ToolbarText), + typeof(Button), + typeof(SplitButton), + typeof(CheckBox), + typeof(CheckBoxList), + typeof(Label), + typeof(HyperLink), + typeof(Image), + typeof(LinkButton), + typeof(RadioButton), + typeof(RadioButtonList), + typeof(DropDownList), + typeof(DatePicker), + typeof(FileUpload), + typeof(HiddenField), + typeof(NumberBox), + typeof(TextArea), + typeof(TextBox), + typeof(TimePicker), + typeof(TriggerBox), + typeof(TwinTriggerBox) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI/Business/Enums/AjaxLoadingType.cs b/FineUI/Business/Enums/AjaxLoadingType.cs index 2418035..7360d11 100644 --- a/FineUI/Business/Enums/AjaxLoadingType.cs +++ b/FineUI/Business/Enums/AjaxLoadingType.cs @@ -1,70 +1,70 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: AjaxLoadingType.cs - * CreatedOn: 2012-05-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// Ajax提示信息的类型 - /// - public enum AjaxLoadingType - { - /// - /// 在页面顶部显示黄色提示框(默认值) - /// - Default, - /// - /// Extjs的页面遮罩提示框 - /// - Mask - } - - - /// - /// Ajax提示信息的类型名称 - /// - internal static class AjaxLoadingTypeName - { - public static string GetName(AjaxLoadingType type) - { - string result = String.Empty; - - switch (type) - { - case AjaxLoadingType.Default: - result = "default"; - break; - case AjaxLoadingType.Mask: - result = "mask"; - break; - } - - return result; - } - } - + +#region Comment + +/* + * Project: FineUI + * + * FileName: AjaxLoadingType.cs + * CreatedOn: 2012-05-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// Ajax提示信息的类型 + /// + public enum AjaxLoadingType + { + /// + /// 在页面顶部显示黄色提示框(默认值) + /// + Default, + /// + /// Extjs的页面遮罩提示框 + /// + Mask + } + + + /// + /// Ajax提示信息的类型名称 + /// + internal static class AjaxLoadingTypeName + { + public static string GetName(AjaxLoadingType type) + { + string result = String.Empty; + + switch (type) + { + case AjaxLoadingType.Default: + result = "default"; + break; + case AjaxLoadingType.Mask: + result = "mask"; + break; + } + + return result; + } + } + } \ No newline at end of file diff --git a/FineUI/Business/Enums/BoxLayoutAlign.cs b/FineUI/Business/Enums/BoxLayoutAlign.cs index 867d30d..a37aad5 100644 --- a/FineUI/Business/Enums/BoxLayoutAlign.cs +++ b/FineUI/Business/Enums/BoxLayoutAlign.cs @@ -1,106 +1,108 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: BoxLayoutAlign.cs - * CreatedOn: 2012-01-10 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 在HBox布局或者VBox布局中,用来控制容器子控件的位置 - /// - public enum BoxLayoutAlign - { - /// - /// 所有子控件位于父容器的开始位置(废弃,请使用Start代替) - /// - Top, - /// - /// 所有子控件位于父容器的中间位置(废弃,请使用Center代替) - /// - Middle, - /// - /// 所有子控件位于父容器的开始位置(默认值) - /// - Start, - /// - /// 所有子控件位于父容器的中间位置 - /// - Center, - /// - /// 所有子控件被拉伸至父容器的大小 - /// - Stretch, - /// - /// 所有子控件被拉伸至最大子控件的大小 - /// - StretchMax - } - - /// - /// HBox或者VBox的位置的名称 - /// - internal static class BoxLayoutAlignHelper - { - public static string GetName(BoxLayoutAlign type, Layout theLayout) - { - string result = String.Empty; - - switch (type) - { - case BoxLayoutAlign.Top: - case BoxLayoutAlign.Start: - if (theLayout == Layout.HBox) - { - result = "top"; - } - else - { - result = "left"; - } - break; - case BoxLayoutAlign.Middle: - case BoxLayoutAlign.Center: - if (theLayout == Layout.HBox) - { - result = "middle"; - } - else - { - result = "center"; - } - break; - case BoxLayoutAlign.Stretch: - result = "stretch"; - break; - case BoxLayoutAlign.StretchMax: - result = "stretchmax"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: BoxLayoutAlign.cs + * CreatedOn: 2012-01-10 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + /// + public enum BoxLayoutAlign + { + /// + /// 所有子控件位于父容器的开始位置(废弃,请使用Start代替) + /// + Top, + /// + /// 所有子控件位于父容器的中间位置(废弃,请使用Center代替) + /// + Middle, + + + /// + /// 所有子控件位于父容器的开始位置 + /// + Start, + /// + /// 所有子控件位于父容器的中间位置 + /// + Center, + /// + /// 所有子控件被拉伸至父容器的大小(默认值) + /// + Stretch, + /// + /// 所有子控件被拉伸至最大子控件的大小 + /// + StretchMax + } + + /// + /// HBox或者VBox的位置的名称 + /// + internal static class BoxLayoutAlignHelper + { + public static string GetName(BoxLayoutAlign type, Layout theLayout) + { + string result = String.Empty; + + switch (type) + { + case BoxLayoutAlign.Top: + case BoxLayoutAlign.Start: + if (theLayout == Layout.HBox) + { + result = "top"; + } + else + { + result = "left"; + } + break; + case BoxLayoutAlign.Middle: + case BoxLayoutAlign.Center: + if (theLayout == Layout.HBox) + { + result = "middle"; + } + else + { + result = "center"; + } + break; + case BoxLayoutAlign.Stretch: + result = "stretch"; + break; + case BoxLayoutAlign.StretchMax: + result = "stretchmax"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/BoxLayoutPosition.cs b/FineUI/Business/Enums/BoxLayoutPosition.cs index a0f90cb..59cadf6 100644 --- a/FineUI/Business/Enums/BoxLayoutPosition.cs +++ b/FineUI/Business/Enums/BoxLayoutPosition.cs @@ -1,85 +1,86 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: BoxLayoutPosition.cs - * CreatedOn: 2012-01-10 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 在HBox布局或者VBox布局中,用来控制容器子控件的位置 - /// - public enum BoxLayoutPosition - { - /// - /// 子控件靠父容器的开始位置排列(废弃,请使用Start代替) - /// - Left, - /// - /// 子控件靠父容器的中间位置排列 - /// - Center, - /// - /// 子控件靠父容器的结束位置排列(废弃,请使用End代替) - /// - Right, - /// - /// 子控件靠父容器的开始位置排列(默认值) - /// - Start, - /// - /// 子控件靠父容器的结束位置排列 - /// - End - } - - /// - /// HBox或者VBox的位置的名称 - /// - internal static class BoxLayoutPositionHelper - { - public static string GetName(BoxLayoutPosition type) - { - string result = String.Empty; - - switch (type) - { - case BoxLayoutPosition.Left: - case BoxLayoutPosition.Start: - result = "start"; - break; - case BoxLayoutPosition.Center: - result = "center"; - break; - case BoxLayoutPosition.Right: - case BoxLayoutPosition.End: - result = "end"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: BoxLayoutPosition.cs + * CreatedOn: 2012-01-10 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + /// + public enum BoxLayoutPosition + { + /// + /// 子控件靠父容器的开始位置排列(废弃,请使用Start代替) + /// + Left, + /// + /// 子控件靠父容器的结束位置排列(废弃,请使用End代替) + /// + Right, + + /// + /// 子控件靠父容器的中间位置排列 + /// + Center, + /// + /// 子控件靠父容器的开始位置排列(默认值) + /// + Start, + /// + /// 子控件靠父容器的结束位置排列 + /// + End + } + + /// + /// HBox或者VBox的位置的名称 + /// + internal static class BoxLayoutPositionHelper + { + public static string GetName(BoxLayoutPosition type) + { + string result = String.Empty; + + switch (type) + { + case BoxLayoutPosition.Left: + case BoxLayoutPosition.Start: + result = "start"; + break; + case BoxLayoutPosition.Center: + result = "center"; + break; + case BoxLayoutPosition.Right: + case BoxLayoutPosition.End: + result = "end"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/ButtonAlign.cs b/FineUI/Business/Enums/ButtonAlign.cs index 3d0ff44..0eb010f 100644 --- a/FineUI/Business/Enums/ButtonAlign.cs +++ b/FineUI/Business/Enums/ButtonAlign.cs @@ -1,45 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - ///// - ///// 按钮排列位置 - ///// - //public enum ButtonAlign - //{ - // /// - // /// - // /// - // Left, - // Right, - // Center - //} - - ///// - ///// 按钮排列位置名称 - ///// - //internal static class ButtonAlignHelper - //{ - // public static string GetName(ButtonAlign type) - // { - // string result = String.Empty; - - // switch (type) - // { - // case ButtonAlign.Left: - // result = "left"; - // break; - // case ButtonAlign.Right: - // result = "right"; - // break; - // case ButtonAlign.Center: - // result = "center"; - // break; - // } - - // return result; - // } - //} +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + ///// + ///// 按钮排列位置 + ///// + //public enum ButtonAlign + //{ + // /// + // /// + // /// + // Left, + // Right, + // Center + //} + + ///// + ///// 按钮排列位置名称 + ///// + //internal static class ButtonAlignHelper + //{ + // public static string GetName(ButtonAlign type) + // { + // string result = String.Empty; + + // switch (type) + // { + // case ButtonAlign.Left: + // result = "left"; + // break; + // case ButtonAlign.Right: + // result = "right"; + // break; + // case ButtonAlign.Center: + // result = "center"; + // break; + // } + + // return result; + // } + //} } \ No newline at end of file diff --git a/FineUI/Business/Enums/ButtonSize.cs b/FineUI/Business/Enums/ButtonSize.cs index 8da6034..1e2c02f 100644 --- a/FineUI/Business/Enums/ButtonSize.cs +++ b/FineUI/Business/Enums/ButtonSize.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 按钮的大小 - /// - public enum ButtonSize - { - /// - /// 小尺寸(默认值) - /// - Small, - /// - /// 中等尺寸 - /// - Medium, - /// - /// 大尺寸 - /// - Large - } - - /// - /// 按钮的大小名称 - /// - internal static class ButtonSizeName - { - public static string GetName(ButtonSize type) - { - string result = String.Empty; - - switch (type) - { - case ButtonSize.Small: - result = "small"; - break; - case ButtonSize.Medium: - result = "medium"; - break; - case ButtonSize.Large: - result = "large"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 按钮的大小 + /// + public enum ButtonSize + { + /// + /// 小尺寸(默认值) + /// + Small, + /// + /// 中等尺寸 + /// + Medium, + /// + /// 大尺寸 + /// + Large + } + + /// + /// 按钮的大小名称 + /// + internal static class ButtonSizeName + { + public static string GetName(ButtonSize type) + { + string result = String.Empty; + + switch (type) + { + case ButtonSize.Small: + result = "small"; + break; + case ButtonSize.Medium: + result = "medium"; + break; + case ButtonSize.Large: + result = "large"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/ButtonType.cs b/FineUI/Business/Enums/ButtonType.cs index f99688b..3b6c597 100644 --- a/FineUI/Business/Enums/ButtonType.cs +++ b/FineUI/Business/Enums/ButtonType.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 按钮类型 - /// - public enum ButtonType - { - /// - /// 普通按钮(默认值) - /// - Button, - /// - /// 提交按钮(会为生成的input标签添加type="submit") - /// - Submit, - /// - /// 重置按钮(会为生成的input标签添加type="reset") - /// - Reset - } - - /// - /// 按钮类型名称 - /// - internal static class ButtonTypeName - { - public static string GetName(ButtonType type) - { - string result = String.Empty; - - switch (type) - { - case ButtonType.Button: - result = "button"; - break; - case ButtonType.Reset: - result = "reset"; - break; - case ButtonType.Submit: - result = "submit"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 按钮类型 + /// + public enum ButtonType + { + /// + /// 普通按钮(默认值) + /// + Button, + /// + /// 提交按钮(会为生成的input标签添加type="submit") + /// + Submit, + /// + /// 重置按钮(会为生成的input标签添加type="reset") + /// + Reset + } + + /// + /// 按钮类型名称 + /// + internal static class ButtonTypeName + { + public static string GetName(ButtonType type) + { + string result = String.Empty; + + switch (type) + { + case ButtonType.Button: + result = "button"; + break; + case ButtonType.Reset: + result = "reset"; + break; + case ButtonType.Submit: + result = "submit"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/CloseAction.cs b/FineUI/Business/Enums/CloseAction.cs index 3bcd8ca..151bacb 100644 --- a/FineUI/Business/Enums/CloseAction.cs +++ b/FineUI/Business/Enums/CloseAction.cs @@ -1,76 +1,76 @@ - - -#region Comment - -/* - * Project: FineUI - * - * FileName: CloseAction.cs - * CreatedOn: 2010-01-25 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 关闭窗体的动作 - /// - public enum CloseAction - { - /// - /// 关闭窗体(默认值) - /// - Hide, - /// - /// 关闭窗体后刷新父页面 - /// - HideRefresh, - /// - /// 关闭窗体后会发父页面(需要注册OnClose事件处理函数) - /// - HidePostBack - } - - /// - /// 关闭窗体的动作 - /// - internal static class CloseActionName - { - public static string GetName(CloseAction type) - { - string result = String.Empty; - - switch (type) - { - case CloseAction.Hide: - result = "hide"; - break; - case CloseAction.HideRefresh: - result = "hide_refresh"; - break; - case CloseAction.HidePostBack: - result = "hide_postback"; - break; - } - - return result; - } - } + + +#region Comment + +/* + * Project: FineUI + * + * FileName: CloseAction.cs + * CreatedOn: 2010-01-25 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 关闭窗体的动作 + /// + public enum CloseAction + { + /// + /// 关闭窗体(默认值) + /// + Hide, + /// + /// 关闭窗体后刷新父页面 + /// + HideRefresh, + /// + /// 关闭窗体后会发父页面(需要注册OnClose事件处理函数) + /// + HidePostBack + } + + /// + /// 关闭窗体的动作 + /// + internal static class CloseActionName + { + public static string GetName(CloseAction type) + { + string result = String.Empty; + + switch (type) + { + case CloseAction.Hide: + result = "hide"; + break; + case CloseAction.HideRefresh: + result = "hide_refresh"; + break; + case CloseAction.HidePostBack: + result = "hide_postback"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/CollapseMode.cs b/FineUI/Business/Enums/CollapseMode.cs index 7b0d260..4ac32c0 100644 --- a/FineUI/Business/Enums/CollapseMode.cs +++ b/FineUI/Business/Enums/CollapseMode.cs @@ -1,70 +1,70 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: HideMode.cs - * CreatedOn: 2008-09-16 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 折叠模式(用于Region控件) - /// - public enum CollapseMode - { - - /// - /// 通过点击工具栏上的按钮来折叠展开面板(默认值) - /// - Default, - - /// - /// 通过点击面板分隔条上的迷你按钮来折叠展开面板 - /// - Mini - } - - /// - /// 折叠模式(用于Region控件)的名称 - /// - internal static class CollapseModeName - { - public static string GetName(CollapseMode type) - { - string result = String.Empty; - - switch (type) - { - case CollapseMode.Default: - result = "default"; - break; - case CollapseMode.Mini: - result = "mini"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: HideMode.cs + * CreatedOn: 2008-09-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 折叠模式(用于Region控件) + /// + public enum CollapseMode + { + + /// + /// 通过点击工具栏上的按钮来折叠展开面板(默认值) + /// + Default, + + /// + /// 通过点击面板分隔条上的迷你按钮来折叠展开面板 + /// + Mini + } + + /// + /// 折叠模式(用于Region控件)的名称 + /// + internal static class CollapseModeName + { + public static string GetName(CollapseMode type) + { + string result = String.Empty; + + switch (type) + { + case CollapseMode.Default: + result = "default"; + break; + case CollapseMode.Mini: + result = "mini"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/CompareType.cs b/FineUI/Business/Enums/CompareType.cs index b61c403..9bcc4cb 100644 --- a/FineUI/Business/Enums/CompareType.cs +++ b/FineUI/Business/Enums/CompareType.cs @@ -1,84 +1,84 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: CompareType.cs - * CreatedOn: 2008-07-10 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 相比较的数据类型(用于表单控件的客户端验证) - /// - public enum CompareType - { - /// - /// 浮点数 - /// - Float, - /// - /// 整形 - /// - Int, - /// - /// 字符串(默认值) - /// - String - } - - ///// - ///// 操作符名称 - ///// - //internal static class OperatorName - //{ - // public static string GetName(Operator type) - // { - // string result = String.Empty; - - // switch (type) - // { - // case Operator.Equal: - // result = "=="; - // break; - // case Operator.GreaterThan: - // result = ">"; - // break; - // case Operator.GreaterThanEqual: - // result = ">="; - // break; - // case Operator.LessThan: - // result = "<"; - // break; - // case Operator.LessThanEqual: - // result = "<="; - // break; - // case Operator.NotEqual: - // result = "!="; - // break; - // } - - // return result; - // } - //} + +#region Comment + +/* + * Project: FineUI + * + * FileName: CompareType.cs + * CreatedOn: 2008-07-10 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 相比较的数据类型(用于表单控件的客户端验证) + /// + public enum CompareType + { + /// + /// 浮点数 + /// + Float, + /// + /// 整形 + /// + Int, + /// + /// 字符串(默认值) + /// + String + } + + ///// + ///// 操作符名称 + ///// + //internal static class OperatorName + //{ + // public static string GetName(Operator type) + // { + // string result = String.Empty; + + // switch (type) + // { + // case Operator.Equal: + // result = "=="; + // break; + // case Operator.GreaterThan: + // result = ">"; + // break; + // case Operator.GreaterThanEqual: + // result = ">="; + // break; + // case Operator.LessThan: + // result = "<"; + // break; + // case Operator.LessThanEqual: + // result = "<="; + // break; + // case Operator.NotEqual: + // result = "!="; + // break; + // } + + // return result; + // } + //} } \ No newline at end of file diff --git a/FineUI/Business/Enums/FooterBarAlign.cs b/FineUI/Business/Enums/FooterBarAlign.cs index c51f504..8ae54e9 100644 --- a/FineUI/Business/Enums/FooterBarAlign.cs +++ b/FineUI/Business/Enums/FooterBarAlign.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 页脚工具栏的排列位置 - /// - public enum FooterBarAlign - { - /// - /// 靠右(默认值) - /// - Right, - /// - /// 靠左 - /// - Left, - /// - /// 居中 - /// - Center - } - - /// - /// 页脚工具栏的排列位置名称 - /// - internal static class FooterBarAlignHelper - { - public static string GetName(FooterBarAlign type) - { - string result = String.Empty; - - switch (type) - { - case FooterBarAlign.Left: - result = "left"; - break; - case FooterBarAlign.Right: - result = "right"; - break; - case FooterBarAlign.Center: - result = "center"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 页脚工具栏的排列位置 + /// + public enum FooterBarAlign + { + /// + /// 靠右(默认值) + /// + Right, + /// + /// 靠左 + /// + Left, + /// + /// 居中 + /// + Center + } + + /// + /// 页脚工具栏的排列位置名称 + /// + internal static class FooterBarAlignHelper + { + public static string GetName(FooterBarAlign type) + { + string result = String.Empty; + + switch (type) + { + case FooterBarAlign.Left: + result = "left"; + break; + case FooterBarAlign.Right: + result = "right"; + break; + case FooterBarAlign.Center: + result = "center"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Grid/FieldType.cs b/FineUI/Business/Enums/Grid/FieldType.cs index 5cdd663..f8d9321 100644 --- a/FineUI/Business/Enums/Grid/FieldType.cs +++ b/FineUI/Business/Enums/Grid/FieldType.cs @@ -1,72 +1,72 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 表格可编辑字段的类型 - /// - public enum FieldType - { - /// - /// 自动(默认值) - /// - Auto, - /// - /// 字符串 - /// - String, - /// - /// 整型 - /// - Int, - /// - /// 浮点数 - /// - Float, - /// - /// 布尔型 - /// - Boolean, - /// - /// 日期 - /// - Date - } - - /// - /// 表格可编辑字段的类型名称 - /// - internal static class FieldTypeName - { - public static string GetName(FieldType type) - { - string result = String.Empty; - - switch (type) - { - case FieldType.Auto: - result = "auto"; - break; - case FieldType.String: - result = "string"; - break; - case FieldType.Int: - result = "int"; - break; - case FieldType.Float: - result = "float"; - break; - case FieldType.Boolean: - result = "boolean"; - break; - case FieldType.Date: - result = "date"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表格可编辑字段的类型 + /// + public enum FieldType + { + /// + /// 自动(默认值) + /// + Auto, + /// + /// 字符串 + /// + String, + /// + /// 整型 + /// + Int, + /// + /// 浮点数 + /// + Float, + /// + /// 布尔型 + /// + Boolean, + /// + /// 日期 + /// + Date + } + + /// + /// 表格可编辑字段的类型名称 + /// + internal static class FieldTypeName + { + public static string GetName(FieldType type) + { + string result = String.Empty; + + switch (type) + { + case FieldType.Auto: + result = "auto"; + break; + case FieldType.String: + result = "string"; + break; + case FieldType.Int: + result = "int"; + break; + case FieldType.Float: + result = "float"; + break; + case FieldType.Boolean: + result = "boolean"; + break; + case FieldType.Date: + result = "date"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Grid/Renderer.cs b/FineUI/Business/Enums/Grid/Renderer.cs index 84a5993..ed820e5 100644 --- a/FineUI/Business/Enums/Grid/Renderer.cs +++ b/FineUI/Business/Enums/Grid/Renderer.cs @@ -1,153 +1,153 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 表格可编辑字段渲染器 - /// - public enum Renderer - { - /// - /// 无(默认值) - /// - None, - /// - /// 首字母大写 - /// - Capitalize, - /// - /// 日期(RendererArgument来指定日期格式化字符串) - /// RendererArgument: - /// 1. d 月中的某一天。一位数的日期没有前导零。 - /// 2. dd 月中的某一天。一位数的日期有一个前导零。 - /// 3. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 - /// 4. dddd 周中某天的完整名称,在 DayNames 中定义。 - /// 5. M 月份数字。一位数的月份没有前导零。 - /// 6. MM 月份数字。一位数的月份有一个前导零。 - /// 7. MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 - /// 8. MMMM 月份的完整名称,在 MonthNames 中定义。 - /// 9. y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 - /// 10. yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 - /// 11. yyyy 包括纪元的四位数的年份。 - /// - Date, - /// - /// 截断字符串并添加省略号(RendererArgument来指定最大长度) - /// - Ellipsis, - /// - /// 文件大小 - /// - FileSize, - /// - /// HTML编码 - /// - HtmlEncode, - /// - /// HTML解码 - /// - HtmlDecode, - /// - /// 转化为小写字符 - /// - Lowercase, - /// - /// 转化为大写字符 - /// - Uppercase, - /// - /// 换行符转换为HTML标签
- ///
- NL2BR, - /// - /// 格式化为数字(RendererArgument来指定数字的显示格式) - /// RendererArgument: - /// 1. 0 - (123456) 只显示数字,没有精度 - /// 2. 0.00 - (123456.78) 只显示数字,两位精度 - /// 3. 0.0000 - (123456.7890) 只显示数字,四位精度 - /// 4. 0,000 - (123,456) 显示数字和逗号,没有精度 - /// 5. 0,000.00 - (123,456.78) 显示数字和逗号,两位精度 - /// - Number, - /// - /// 删除所有的脚本标签 - /// - StripScripts, - /// - /// 删除所有的标签 - /// - StripTags, - /// - /// 清除字符串两端的空白字符 - /// - Trim, - /// - /// 美元 - /// - UsMoney - } - - /// - /// 表格可编辑字段渲染器名称 - /// - internal static class RendererName - { - public static string GetName(Renderer type) - { - string result = String.Empty; - - switch (type) - { - case Renderer.None: - result = ""; - break; - case Renderer.Capitalize: - result = "capitalize"; - break; - case Renderer.Date: - result = "date"; - break; - case Renderer.Ellipsis: - result = "ellipsis"; - break; - case Renderer.FileSize: - result = "fileSize"; - break; - case Renderer.HtmlDecode: - result = "htmlDecode"; - break; - case Renderer.HtmlEncode: - result = "htmlEncode"; - break; - case Renderer.Lowercase: - result = "lowercase"; - break; - case Renderer.NL2BR: - result = "nl2br"; - break; - case Renderer.Number: - result = "number"; - break; - case Renderer.StripScripts: - result = "stripScripts"; - break; - case Renderer.StripTags: - result = "stripTags"; - break; - case Renderer.Trim: - result = "trim"; - break; - case Renderer.Uppercase: - result = "uppercase"; - break; - case Renderer.UsMoney: - result = "usMoney"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表格可编辑字段渲染器 + /// + public enum Renderer + { + /// + /// 无(默认值) + /// + None, + /// + /// 首字母大写 + /// + Capitalize, + /// + /// 日期(RendererArgument来指定日期格式化字符串) + /// RendererArgument: + /// 1. d 月中的某一天。一位数的日期没有前导零。 + /// 2. dd 月中的某一天。一位数的日期有一个前导零。 + /// 3. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 + /// 4. dddd 周中某天的完整名称,在 DayNames 中定义。 + /// 5. M 月份数字。一位数的月份没有前导零。 + /// 6. MM 月份数字。一位数的月份有一个前导零。 + /// 7. MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 + /// 8. MMMM 月份的完整名称,在 MonthNames 中定义。 + /// 9. y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 + /// 10. yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 + /// 11. yyyy 包括纪元的四位数的年份。 + /// + Date, + /// + /// 截断字符串并添加省略号(RendererArgument来指定最大长度) + /// + Ellipsis, + /// + /// 文件大小 + /// + FileSize, + /// + /// HTML编码 + /// + HtmlEncode, + /// + /// HTML解码 + /// + HtmlDecode, + /// + /// 转化为小写字符 + /// + Lowercase, + /// + /// 转化为大写字符 + /// + Uppercase, + /// + /// 换行符转换为HTML标签
+ ///
+ NL2BR, + ///// + ///// 格式化为数字(RendererArgument来指定数字的显示格式) + ///// RendererArgument: + ///// 1. 0 - (123456) 只显示数字,没有精度 + ///// 2. 0.00 - (123456.78) 只显示数字,两位精度 + ///// 3. 0.0000 - (123456.7890) 只显示数字,四位精度 + ///// 4. 0,000 - (123,456) 显示数字和逗号,没有精度 + ///// 5. 0,000.00 - (123,456.78) 显示数字和逗号,两位精度 + ///// + //Number, + /// + /// 删除所有的脚本标签 + /// + StripScripts, + /// + /// 删除所有的标签 + /// + StripTags, + /// + /// 清除字符串两端的空白字符 + /// + Trim + ///// + ///// 美元 + ///// + //UsMoney + } + + /// + /// 表格可编辑字段渲染器名称 + /// + internal static class RendererName + { + public static string GetName(Renderer type) + { + string result = String.Empty; + + switch (type) + { + case Renderer.None: + result = ""; + break; + case Renderer.Capitalize: + result = "capitalize"; + break; + case Renderer.Date: + result = "date"; + break; + case Renderer.Ellipsis: + result = "ellipsis"; + break; + case Renderer.FileSize: + result = "fileSize"; + break; + case Renderer.HtmlDecode: + result = "htmlDecode"; + break; + case Renderer.HtmlEncode: + result = "htmlEncode"; + break; + case Renderer.Lowercase: + result = "lowercase"; + break; + case Renderer.NL2BR: + result = "nl2br"; + break; + //case Renderer.Number: + // result = "number"; + // break; + case Renderer.StripScripts: + result = "stripScripts"; + break; + case Renderer.StripTags: + result = "stripTags"; + break; + case Renderer.Trim: + result = "trim"; + break; + case Renderer.Uppercase: + result = "uppercase"; + break; + //case Renderer.UsMoney: + // result = "usMoney"; + // break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/HideMode.cs b/FineUI/Business/Enums/HideMode.cs index 5eabaca..e1d221f 100644 --- a/FineUI/Business/Enums/HideMode.cs +++ b/FineUI/Business/Enums/HideMode.cs @@ -1,75 +1,75 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: HideMode.cs - * CreatedOn: 2008-09-16 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 隐藏的模式 - /// - public enum HideMode - { - /// - /// 通过设置CSS属性visibility来控制显示隐藏 - /// - Visibility, - /// - /// 通过设置CSS属性top/left来控制显示隐藏 - /// - Offsets, - /// - /// 通过设置CSS属性display来控制显示隐藏(默认值) - /// - Display - } - - /// - /// 隐藏的模式名称 - /// - internal static class HideModeName - { - public static string GetName(HideMode type) - { - string result = String.Empty; - - switch (type) - { - case HideMode.Visibility: - result = "visibility"; - break; - case HideMode.Offsets: - result = "offsets"; - break; - case HideMode.Display: - result = "display"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: HideMode.cs + * CreatedOn: 2008-09-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 隐藏的模式 + /// + public enum HideMode + { + /// + /// 通过设置CSS属性visibility来控制显示隐藏 + /// + Visibility, + /// + /// 通过设置CSS属性top/left来控制显示隐藏 + /// + Offsets, + /// + /// 通过设置CSS属性display来控制显示隐藏(默认值) + /// + Display + } + + /// + /// 隐藏的模式名称 + /// + internal static class HideModeName + { + public static string GetName(HideMode type) + { + string result = String.Empty; + + switch (type) + { + case HideMode.Visibility: + result = "visibility"; + break; + case HideMode.Offsets: + result = "offsets"; + break; + case HideMode.Display: + result = "display"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Icon.cs b/FineUI/Business/Enums/Icon.cs index b52d462..989909b 100644 --- a/FineUI/Business/Enums/Icon.cs +++ b/FineUI/Business/Enums/Icon.cs @@ -1,13820 +1,13820 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: IconType.cs - * CreatedOn: 2009-09-18 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web; -using System.Web.UI; - -namespace FineUI -{ - /// - /// 预定义图标 - /// - public enum Icon - { - /// - /// None - /// - None, - - /// - /// Accept - /// - Accept, - - /// - /// Add - /// - Add, - - /// - /// Anchor - /// - Anchor, - - /// - /// Application - /// - Application, - - /// - /// ApplicationAdd - /// - ApplicationAdd, - - /// - /// ApplicationCascade - /// - ApplicationCascade, - - /// - /// ApplicationDelete - /// - ApplicationDelete, - - /// - /// ApplicationDouble - /// - ApplicationDouble, - - /// - /// ApplicationEdit - /// - ApplicationEdit, - - /// - /// ApplicationError - /// - ApplicationError, - - /// - /// ApplicationForm - /// - ApplicationForm, - - /// - /// ApplicationFormAdd - /// - ApplicationFormAdd, - - /// - /// ApplicationFormDelete - /// - ApplicationFormDelete, - - /// - /// ApplicationFormEdit - /// - ApplicationFormEdit, - - /// - /// ApplicationFormMagnify - /// - ApplicationFormMagnify, - - /// - /// ApplicationGet - /// - ApplicationGet, - - /// - /// ApplicationGo - /// - ApplicationGo, - - /// - /// ApplicationHome - /// - ApplicationHome, - - /// - /// ApplicationKey - /// - ApplicationKey, - - /// - /// ApplicationLightning - /// - ApplicationLightning, - - /// - /// ApplicationLink - /// - ApplicationLink, - - /// - /// ApplicationOsx - /// - ApplicationOsx, - - /// - /// ApplicationOsxAdd - /// - ApplicationOsxAdd, - - /// - /// ApplicationOsxCascade - /// - ApplicationOsxCascade, - - /// - /// ApplicationOsxDelete - /// - ApplicationOsxDelete, - - /// - /// ApplicationOsxDouble - /// - ApplicationOsxDouble, - - /// - /// ApplicationOsxError - /// - ApplicationOsxError, - - /// - /// ApplicationOsxGet - /// - ApplicationOsxGet, - - /// - /// ApplicationOsxGo - /// - ApplicationOsxGo, - - /// - /// ApplicationOsxHome - /// - ApplicationOsxHome, - - /// - /// ApplicationOsxKey - /// - ApplicationOsxKey, - - /// - /// ApplicationOsxLightning - /// - ApplicationOsxLightning, - - /// - /// ApplicationOsxLink - /// - ApplicationOsxLink, - - /// - /// ApplicationOsxSplit - /// - ApplicationOsxSplit, - - /// - /// ApplicationOsxStart - /// - ApplicationOsxStart, - - /// - /// ApplicationOsxStop - /// - ApplicationOsxStop, - - /// - /// ApplicationOsxTerminal - /// - ApplicationOsxTerminal, - - /// - /// ApplicationPut - /// - ApplicationPut, - - /// - /// ApplicationSideBoxes - /// - ApplicationSideBoxes, - - /// - /// ApplicationSideContract - /// - ApplicationSideContract, - - /// - /// ApplicationSideExpand - /// - ApplicationSideExpand, - - /// - /// ApplicationSideList - /// - ApplicationSideList, - - /// - /// ApplicationSideTree - /// - ApplicationSideTree, - - /// - /// ApplicationSplit - /// - ApplicationSplit, - - /// - /// ApplicationStart - /// - ApplicationStart, - - /// - /// ApplicationStop - /// - ApplicationStop, - - /// - /// ApplicationTileHorizontal - /// - ApplicationTileHorizontal, - - /// - /// ApplicationTileVertical - /// - ApplicationTileVertical, - - /// - /// ApplicationViewColumns - /// - ApplicationViewColumns, - - /// - /// ApplicationViewDetail - /// - ApplicationViewDetail, - - /// - /// ApplicationViewGallery - /// - ApplicationViewGallery, - - /// - /// ApplicationViewIcons - /// - ApplicationViewIcons, - - /// - /// ApplicationViewList - /// - ApplicationViewList, - - /// - /// ApplicationViewTile - /// - ApplicationViewTile, - - /// - /// ApplicationXp - /// - ApplicationXp, - - /// - /// ApplicationXpTerminal - /// - ApplicationXpTerminal, - - /// - /// ArrowBranch - /// - ArrowBranch, - - /// - /// ArrowDivide - /// - ArrowDivide, - - /// - /// ArrowDown - /// - ArrowDown, - - /// - /// ArrowEw - /// - ArrowEw, - - /// - /// ArrowIn - /// - ArrowIn, - - /// - /// ArrowInout - /// - ArrowInout, - - /// - /// ArrowInLonger - /// - ArrowInLonger, - - /// - /// ArrowJoin - /// - ArrowJoin, - - /// - /// ArrowLeft - /// - ArrowLeft, - - /// - /// ArrowMerge - /// - ArrowMerge, - - /// - /// ArrowNe - /// - ArrowNe, - - /// - /// ArrowNs - /// - ArrowNs, - - /// - /// ArrowNsew - /// - ArrowNsew, - - /// - /// ArrowNw - /// - ArrowNw, - - /// - /// ArrowNwNeSwSe - /// - ArrowNwNeSwSe, - - /// - /// ArrowNwSe - /// - ArrowNwSe, - - /// - /// ArrowOut - /// - ArrowOut, - - /// - /// ArrowOutLonger - /// - ArrowOutLonger, - - /// - /// ArrowRedo - /// - ArrowRedo, - - /// - /// ArrowRefresh - /// - ArrowRefresh, - - /// - /// ArrowRefreshSmall - /// - ArrowRefreshSmall, - - /// - /// ArrowRight - /// - ArrowRight, - - /// - /// ArrowRotateAnticlockwise - /// - ArrowRotateAnticlockwise, - - /// - /// ArrowRotateClockwise - /// - ArrowRotateClockwise, - - /// - /// ArrowSe - /// - ArrowSe, - - /// - /// ArrowSw - /// - ArrowSw, - - /// - /// ArrowSwitch - /// - ArrowSwitch, - - /// - /// ArrowSwitchBluegreen - /// - ArrowSwitchBluegreen, - - /// - /// ArrowSwNe - /// - ArrowSwNe, - - /// - /// ArrowTurnLeft - /// - ArrowTurnLeft, - - /// - /// ArrowTurnRight - /// - ArrowTurnRight, - - /// - /// ArrowUndo - /// - ArrowUndo, - - /// - /// ArrowUp - /// - ArrowUp, - - /// - /// AsteriskOrange - /// - AsteriskOrange, - - /// - /// AsteriskRed - /// - AsteriskRed, - - /// - /// AsteriskYellow - /// - AsteriskYellow, - - /// - /// Attach - /// - Attach, - - /// - /// AwardStarAdd - /// - AwardStarAdd, - - /// - /// AwardStarBronze1 - /// - AwardStarBronze1, - - /// - /// AwardStarBronze2 - /// - AwardStarBronze2, - - /// - /// AwardStarBronze3 - /// - AwardStarBronze3, - - /// - /// AwardStarDelete - /// - AwardStarDelete, - - /// - /// AwardStarGold1 - /// - AwardStarGold1, - - /// - /// AwardStarGold2 - /// - AwardStarGold2, - - /// - /// AwardStarGold3 - /// - AwardStarGold3, - - /// - /// AwardStarSilver1 - /// - AwardStarSilver1, - - /// - /// AwardStarSilver2 - /// - AwardStarSilver2, - - /// - /// AwardStarSilver3 - /// - AwardStarSilver3, - - /// - /// Basket - /// - Basket, - - /// - /// BasketAdd - /// - BasketAdd, - - /// - /// BasketDelete - /// - BasketDelete, - - /// - /// BasketEdit - /// - BasketEdit, - - /// - /// BasketError - /// - BasketError, - - /// - /// BasketGo - /// - BasketGo, - - /// - /// BasketPut - /// - BasketPut, - - /// - /// BasketRemove - /// - BasketRemove, - - /// - /// Bell - /// - Bell, - - /// - /// BellAdd - /// - BellAdd, - - /// - /// BellDelete - /// - BellDelete, - - /// - /// BellError - /// - BellError, - - /// - /// BellGo - /// - BellGo, - - /// - /// BellLink - /// - BellLink, - - /// - /// BellSilver - /// - BellSilver, - - /// - /// BellSilverStart - /// - BellSilverStart, - - /// - /// BellSilverStop - /// - BellSilverStop, - - /// - /// BellStart - /// - BellStart, - - /// - /// BellStop - /// - BellStop, - - /// - /// Bin - /// - Bin, - - /// - /// BinClosed - /// - BinClosed, - - /// - /// BinEmpty - /// - BinEmpty, - - /// - /// Blank - /// - Blank, - - /// - /// Bomb - /// - Bomb, - - /// - /// Book - /// - Book, - - /// - /// Bookmark - /// - Bookmark, - - /// - /// BookmarkAdd - /// - BookmarkAdd, - - /// - /// BookmarkDelete - /// - BookmarkDelete, - - /// - /// BookmarkEdit - /// - BookmarkEdit, - - /// - /// BookmarkError - /// - BookmarkError, - - /// - /// BookmarkGo - /// - BookmarkGo, - - /// - /// BookAdd - /// - BookAdd, - - /// - /// BookAddresses - /// - BookAddresses, - - /// - /// BookAddressesAdd - /// - BookAddressesAdd, - - /// - /// BookAddressesDelete - /// - BookAddressesDelete, - - /// - /// BookAddressesEdit - /// - BookAddressesEdit, - - /// - /// BookAddressesError - /// - BookAddressesError, - - /// - /// BookAddressesKey - /// - BookAddressesKey, - - /// - /// BookDelete - /// - BookDelete, - - /// - /// BookEdit - /// - BookEdit, - - /// - /// BookError - /// - BookError, - - /// - /// BookGo - /// - BookGo, - - /// - /// BookKey - /// - BookKey, - - /// - /// BookLink - /// - BookLink, - - /// - /// BookMagnify - /// - BookMagnify, - - /// - /// BookNext - /// - BookNext, - - /// - /// BookOpen - /// - BookOpen, - - /// - /// BookOpenMark - /// - BookOpenMark, - - /// - /// BookPrevious - /// - BookPrevious, - - /// - /// BookRed - /// - BookRed, - - /// - /// BookTabs - /// - BookTabs, - - /// - /// BorderAll - /// - BorderAll, - - /// - /// BorderBottom - /// - BorderBottom, - - /// - /// BorderDraw - /// - BorderDraw, - - /// - /// BorderInner - /// - BorderInner, - - /// - /// BorderInnerHorizontal - /// - BorderInnerHorizontal, - - /// - /// BorderInnerVertical - /// - BorderInnerVertical, - - /// - /// BorderLeft - /// - BorderLeft, - - /// - /// BorderNone - /// - BorderNone, - - /// - /// BorderOuter - /// - BorderOuter, - - /// - /// BorderRight - /// - BorderRight, - - /// - /// BorderTop - /// - BorderTop, - - /// - /// Box - /// - Box, - - /// - /// BoxError - /// - BoxError, - - /// - /// BoxPicture - /// - BoxPicture, - - /// - /// BoxWorld - /// - BoxWorld, - - /// - /// Brick - /// - Brick, - - /// - /// Bricks - /// - Bricks, - - /// - /// BrickAdd - /// - BrickAdd, - - /// - /// BrickDelete - /// - BrickDelete, - - /// - /// BrickEdit - /// - BrickEdit, - - /// - /// BrickError - /// - BrickError, - - /// - /// BrickGo - /// - BrickGo, - - /// - /// BrickLink - /// - BrickLink, - - /// - /// BrickMagnify - /// - BrickMagnify, - - /// - /// Briefcase - /// - Briefcase, - - /// - /// Bug - /// - Bug, - - /// - /// BugAdd - /// - BugAdd, - - /// - /// BugDelete - /// - BugDelete, - - /// - /// BugEdit - /// - BugEdit, - - /// - /// BugError - /// - BugError, - - /// - /// BugFix - /// - BugFix, - - /// - /// BugGo - /// - BugGo, - - /// - /// BugLink - /// - BugLink, - - /// - /// BugMagnify - /// - BugMagnify, - - /// - /// Build - /// - Build, - - /// - /// Building - /// - Building, - - /// - /// BuildingAdd - /// - BuildingAdd, - - /// - /// BuildingDelete - /// - BuildingDelete, - - /// - /// BuildingEdit - /// - BuildingEdit, - - /// - /// BuildingError - /// - BuildingError, - - /// - /// BuildingGo - /// - BuildingGo, - - /// - /// BuildingKey - /// - BuildingKey, - - /// - /// BuildingLink - /// - BuildingLink, - - /// - /// BuildCancel - /// - BuildCancel, - - /// - /// BulletAdd - /// - BulletAdd, - - /// - /// BulletArrowBottom - /// - BulletArrowBottom, - - /// - /// BulletArrowDown - /// - BulletArrowDown, - - /// - /// BulletArrowTop - /// - BulletArrowTop, - - /// - /// BulletArrowUp - /// - BulletArrowUp, - - /// - /// BulletBlack - /// - BulletBlack, - - /// - /// BulletBlue - /// - BulletBlue, - - /// - /// BulletConnect - /// - BulletConnect, - - /// - /// BulletCross - /// - BulletCross, - - /// - /// BulletDatabase - /// - BulletDatabase, - - /// - /// BulletDatabaseYellow - /// - BulletDatabaseYellow, - - /// - /// BulletDelete - /// - BulletDelete, - - /// - /// BulletDisk - /// - BulletDisk, - - /// - /// BulletEarth - /// - BulletEarth, - - /// - /// BulletEdit - /// - BulletEdit, - - /// - /// BulletEject - /// - BulletEject, - - /// - /// BulletError - /// - BulletError, - - /// - /// BulletFeed - /// - BulletFeed, - - /// - /// BulletGet - /// - BulletGet, - - /// - /// BulletGo - /// - BulletGo, - - /// - /// BulletGreen - /// - BulletGreen, - - /// - /// BulletHome - /// - BulletHome, - - /// - /// BulletKey - /// - BulletKey, - - /// - /// BulletLeft - /// - BulletLeft, - - /// - /// BulletLightning - /// - BulletLightning, - - /// - /// BulletMagnify - /// - BulletMagnify, - - /// - /// BulletMinus - /// - BulletMinus, - - /// - /// BulletOrange - /// - BulletOrange, - - /// - /// BulletPageWhite - /// - BulletPageWhite, - - /// - /// BulletPicture - /// - BulletPicture, - - /// - /// BulletPink - /// - BulletPink, - - /// - /// BulletPlus - /// - BulletPlus, - - /// - /// BulletPurple - /// - BulletPurple, - - /// - /// BulletRed - /// - BulletRed, - - /// - /// BulletRight - /// - BulletRight, - - /// - /// BulletShape - /// - BulletShape, - - /// - /// BulletSparkle - /// - BulletSparkle, - - /// - /// BulletStar - /// - BulletStar, - - /// - /// BulletStart - /// - BulletStart, - - /// - /// BulletStop - /// - BulletStop, - - /// - /// BulletStopAlt - /// - BulletStopAlt, - - /// - /// BulletTick - /// - BulletTick, - - /// - /// BulletToggleMinus - /// - BulletToggleMinus, - - /// - /// BulletTogglePlus - /// - BulletTogglePlus, - - /// - /// BulletWhite - /// - BulletWhite, - - /// - /// BulletWrench - /// - BulletWrench, - - /// - /// BulletWrenchRed - /// - BulletWrenchRed, - - /// - /// BulletYellow - /// - BulletYellow, - - /// - /// Button - /// - Button, - - /// - /// Cake - /// - Cake, - - /// - /// CakeOut - /// - CakeOut, - - /// - /// CakeSliced - /// - CakeSliced, - - /// - /// Calculator - /// - Calculator, - - /// - /// CalculatorAdd - /// - CalculatorAdd, - - /// - /// CalculatorDelete - /// - CalculatorDelete, - - /// - /// CalculatorEdit - /// - CalculatorEdit, - - /// - /// CalculatorError - /// - CalculatorError, - - /// - /// CalculatorLink - /// - CalculatorLink, - - /// - /// Calendar - /// - Calendar, - - /// - /// CalendarAdd - /// - CalendarAdd, - - /// - /// CalendarDelete - /// - CalendarDelete, - - /// - /// CalendarEdit - /// - CalendarEdit, - - /// - /// CalendarLink - /// - CalendarLink, - - /// - /// CalendarSelectDay - /// - CalendarSelectDay, - - /// - /// CalendarSelectNone - /// - CalendarSelectNone, - - /// - /// CalendarSelectWeek - /// - CalendarSelectWeek, - - /// - /// CalendarStar - /// - CalendarStar, - - /// - /// CalendarViewDay - /// - CalendarViewDay, - - /// - /// CalendarViewMonth - /// - CalendarViewMonth, - - /// - /// CalendarViewWeek - /// - CalendarViewWeek, - - /// - /// Camera - /// - Camera, - - /// - /// CameraAdd - /// - CameraAdd, - - /// - /// CameraConnect - /// - CameraConnect, - - /// - /// CameraDelete - /// - CameraDelete, - - /// - /// CameraEdit - /// - CameraEdit, - - /// - /// CameraError - /// - CameraError, - - /// - /// CameraGo - /// - CameraGo, - - /// - /// CameraLink - /// - CameraLink, - - /// - /// CameraMagnify - /// - CameraMagnify, - - /// - /// CameraPicture - /// - CameraPicture, - - /// - /// CameraSmall - /// - CameraSmall, - - /// - /// CameraStart - /// - CameraStart, - - /// - /// CameraStop - /// - CameraStop, - - /// - /// Cancel - /// - Cancel, - - /// - /// Car - /// - Car, - - /// - /// Cart - /// - Cart, - - /// - /// CartAdd - /// - CartAdd, - - /// - /// CartDelete - /// - CartDelete, - - /// - /// CartEdit - /// - CartEdit, - - /// - /// CartError - /// - CartError, - - /// - /// CartFull - /// - CartFull, - - /// - /// CartGo - /// - CartGo, - - /// - /// CartMagnify - /// - CartMagnify, - - /// - /// CartPut - /// - CartPut, - - /// - /// CartRemove - /// - CartRemove, - - /// - /// CarAdd - /// - CarAdd, - - /// - /// CarDelete - /// - CarDelete, - - /// - /// CarError - /// - CarError, - - /// - /// CarRed - /// - CarRed, - - /// - /// CarStart - /// - CarStart, - - /// - /// CarStop - /// - CarStop, - - /// - /// Cd - /// - Cd, - - /// - /// Cdr - /// - Cdr, - - /// - /// CdrAdd - /// - CdrAdd, - - /// - /// CdrBurn - /// - CdrBurn, - - /// - /// CdrCross - /// - CdrCross, - - /// - /// CdrDelete - /// - CdrDelete, - - /// - /// CdrEdit - /// - CdrEdit, - - /// - /// CdrEject - /// - CdrEject, - - /// - /// CdrError - /// - CdrError, - - /// - /// CdrGo - /// - CdrGo, - - /// - /// CdrMagnify - /// - CdrMagnify, - - /// - /// CdrPlay - /// - CdrPlay, - - /// - /// CdrStart - /// - CdrStart, - - /// - /// CdrStop - /// - CdrStop, - - /// - /// CdrStopAlt - /// - CdrStopAlt, - - /// - /// CdrTick - /// - CdrTick, - - /// - /// CdAdd - /// - CdAdd, - - /// - /// CdBurn - /// - CdBurn, - - /// - /// CdDelete - /// - CdDelete, - - /// - /// CdEdit - /// - CdEdit, - - /// - /// CdEject - /// - CdEject, - - /// - /// CdGo - /// - CdGo, - - /// - /// CdMagnify - /// - CdMagnify, - - /// - /// CdPlay - /// - CdPlay, - - /// - /// CdStop - /// - CdStop, - - /// - /// CdStopAlt - /// - CdStopAlt, - - /// - /// CdTick - /// - CdTick, - - /// - /// ChartBar - /// - ChartBar, - - /// - /// ChartBarAdd - /// - ChartBarAdd, - - /// - /// ChartBarDelete - /// - ChartBarDelete, - - /// - /// ChartBarEdit - /// - ChartBarEdit, - - /// - /// ChartBarError - /// - ChartBarError, - - /// - /// ChartBarLink - /// - ChartBarLink, - - /// - /// ChartCurve - /// - ChartCurve, - - /// - /// ChartCurveAdd - /// - ChartCurveAdd, - - /// - /// ChartCurveDelete - /// - ChartCurveDelete, - - /// - /// ChartCurveEdit - /// - ChartCurveEdit, - - /// - /// ChartCurveError - /// - ChartCurveError, - - /// - /// ChartCurveGo - /// - ChartCurveGo, - - /// - /// ChartCurveLink - /// - ChartCurveLink, - - /// - /// ChartLine - /// - ChartLine, - - /// - /// ChartLineAdd - /// - ChartLineAdd, - - /// - /// ChartLineDelete - /// - ChartLineDelete, - - /// - /// ChartLineEdit - /// - ChartLineEdit, - - /// - /// ChartLineError - /// - ChartLineError, - - /// - /// ChartLineLink - /// - ChartLineLink, - - /// - /// ChartOrganisation - /// - ChartOrganisation, - - /// - /// ChartOrganisationAdd - /// - ChartOrganisationAdd, - - /// - /// ChartOrganisationDelete - /// - ChartOrganisationDelete, - - /// - /// ChartOrgInverted - /// - ChartOrgInverted, - - /// - /// ChartPie - /// - ChartPie, - - /// - /// ChartPieAdd - /// - ChartPieAdd, - - /// - /// ChartPieDelete - /// - ChartPieDelete, - - /// - /// ChartPieEdit - /// - ChartPieEdit, - - /// - /// ChartPieError - /// - ChartPieError, - - /// - /// ChartPieLightning - /// - ChartPieLightning, - - /// - /// ChartPieLink - /// - ChartPieLink, - - /// - /// CheckError - /// - CheckError, - - /// - /// Clipboard - /// - Clipboard, - - /// - /// Clock - /// - Clock, - - /// - /// ClockAdd - /// - ClockAdd, - - /// - /// ClockDelete - /// - ClockDelete, - - /// - /// ClockEdit - /// - ClockEdit, - - /// - /// ClockError - /// - ClockError, - - /// - /// ClockGo - /// - ClockGo, - - /// - /// ClockLink - /// - ClockLink, - - /// - /// ClockPause - /// - ClockPause, - - /// - /// ClockPlay - /// - ClockPlay, - - /// - /// ClockRed - /// - ClockRed, - - /// - /// ClockStart - /// - ClockStart, - - /// - /// ClockStop - /// - ClockStop, - - /// - /// ClockStop2 - /// - ClockStop2, - - /// - /// Cmy - /// - Cmy, - - /// - /// Cog - /// - Cog, - - /// - /// CogAdd - /// - CogAdd, - - /// - /// CogDelete - /// - CogDelete, - - /// - /// CogEdit - /// - CogEdit, - - /// - /// CogError - /// - CogError, - - /// - /// CogGo - /// - CogGo, - - /// - /// CogStart - /// - CogStart, - - /// - /// CogStop - /// - CogStop, - - /// - /// Coins - /// - Coins, - - /// - /// CoinsAdd - /// - CoinsAdd, - - /// - /// CoinsDelete - /// - CoinsDelete, - - /// - /// Color - /// - Color, - - /// - /// ColorSwatch - /// - ColorSwatch, - - /// - /// ColorWheel - /// - ColorWheel, - - /// - /// Comment - /// - Comment, - - /// - /// Comments - /// - Comments, - - /// - /// CommentsAdd - /// - CommentsAdd, - - /// - /// CommentsDelete - /// - CommentsDelete, - - /// - /// CommentAdd - /// - CommentAdd, - - /// - /// CommentDelete - /// - CommentDelete, - - /// - /// CommentDull - /// - CommentDull, - - /// - /// CommentEdit - /// - CommentEdit, - - /// - /// CommentPlay - /// - CommentPlay, - - /// - /// CommentRecord - /// - CommentRecord, - - /// - /// Compass - /// - Compass, - - /// - /// Compress - /// - Compress, - - /// - /// Computer - /// - Computer, - - /// - /// ComputerAdd - /// - ComputerAdd, - - /// - /// ComputerConnect - /// - ComputerConnect, - - /// - /// ComputerDelete - /// - ComputerDelete, - - /// - /// ComputerEdit - /// - ComputerEdit, - - /// - /// ComputerError - /// - ComputerError, - - /// - /// ComputerGo - /// - ComputerGo, - - /// - /// ComputerKey - /// - ComputerKey, - - /// - /// ComputerLink - /// - ComputerLink, - - /// - /// ComputerMagnify - /// - ComputerMagnify, - - /// - /// ComputerOff - /// - ComputerOff, - - /// - /// ComputerStart - /// - ComputerStart, - - /// - /// ComputerStop - /// - ComputerStop, - - /// - /// ComputerWrench - /// - ComputerWrench, - - /// - /// Connect - /// - Connect, - - /// - /// Contrast - /// - Contrast, - - /// - /// ContrastDecrease - /// - ContrastDecrease, - - /// - /// ContrastHigh - /// - ContrastHigh, - - /// - /// ContrastIncrease - /// - ContrastIncrease, - - /// - /// ContrastLow - /// - ContrastLow, - - /// - /// Controller - /// - Controller, - - /// - /// ControllerAdd - /// - ControllerAdd, - - /// - /// ControllerDelete - /// - ControllerDelete, - - /// - /// ControllerError - /// - ControllerError, - - /// - /// ControlAdd - /// - ControlAdd, - - /// - /// ControlAddBlue - /// - ControlAddBlue, - - /// - /// ControlBlank - /// - ControlBlank, - - /// - /// ControlBlankBlue - /// - ControlBlankBlue, - - /// - /// ControlEject - /// - ControlEject, - - /// - /// ControlEjectBlue - /// - ControlEjectBlue, - - /// - /// ControlEnd - /// - ControlEnd, - - /// - /// ControlEndBlue - /// - ControlEndBlue, - - /// - /// ControlEqualizer - /// - ControlEqualizer, - - /// - /// ControlEqualizerBlue - /// - ControlEqualizerBlue, - - /// - /// ControlFastforward - /// - ControlFastforward, - - /// - /// ControlFastforwardBlue - /// - ControlFastforwardBlue, - - /// - /// ControlPause - /// - ControlPause, - - /// - /// ControlPauseBlue - /// - ControlPauseBlue, - - /// - /// ControlPlay - /// - ControlPlay, - - /// - /// ControlPlayBlue - /// - ControlPlayBlue, - - /// - /// ControlPower - /// - ControlPower, - - /// - /// ControlPowerBlue - /// - ControlPowerBlue, - - /// - /// ControlRecord - /// - ControlRecord, - - /// - /// ControlRecordBlue - /// - ControlRecordBlue, - - /// - /// ControlRemove - /// - ControlRemove, - - /// - /// ControlRemoveBlue - /// - ControlRemoveBlue, - - /// - /// ControlRepeat - /// - ControlRepeat, - - /// - /// ControlRepeatBlue - /// - ControlRepeatBlue, - - /// - /// ControlRewind - /// - ControlRewind, - - /// - /// ControlRewindBlue - /// - ControlRewindBlue, - - /// - /// ControlStart - /// - ControlStart, - - /// - /// ControlStartBlue - /// - ControlStartBlue, - - /// - /// ControlStop - /// - ControlStop, - - /// - /// ControlStopBlue - /// - ControlStopBlue, - - /// - /// Creditcards - /// - Creditcards, - - /// - /// Cross - /// - Cross, - - /// - /// Css - /// - Css, - - /// - /// CssAdd - /// - CssAdd, - - /// - /// CssDelete - /// - CssDelete, - - /// - /// CssError - /// - CssError, - - /// - /// CssGo - /// - CssGo, - - /// - /// CssValid - /// - CssValid, - - /// - /// Cup - /// - Cup, - - /// - /// CupAdd - /// - CupAdd, - - /// - /// CupBlack - /// - CupBlack, - - /// - /// CupDelete - /// - CupDelete, - - /// - /// CupEdit - /// - CupEdit, - - /// - /// CupError - /// - CupError, - - /// - /// CupGo - /// - CupGo, - - /// - /// CupGreen - /// - CupGreen, - - /// - /// CupKey - /// - CupKey, - - /// - /// CupLink - /// - CupLink, - - /// - /// CupTea - /// - CupTea, - - /// - /// Cursor - /// - Cursor, - - /// - /// CursorSmall - /// - CursorSmall, - - /// - /// Cut - /// - Cut, - - /// - /// CutRed - /// - CutRed, - - /// - /// Database - /// - Database, - - /// - /// DatabaseAdd - /// - DatabaseAdd, - - /// - /// DatabaseConnect - /// - DatabaseConnect, - - /// - /// DatabaseCopy - /// - DatabaseCopy, - - /// - /// DatabaseDelete - /// - DatabaseDelete, - - /// - /// DatabaseEdit - /// - DatabaseEdit, - - /// - /// DatabaseError - /// - DatabaseError, - - /// - /// DatabaseGear - /// - DatabaseGear, - - /// - /// DatabaseGo - /// - DatabaseGo, - - /// - /// DatabaseKey - /// - DatabaseKey, - - /// - /// DatabaseLightning - /// - DatabaseLightning, - - /// - /// DatabaseLink - /// - DatabaseLink, - - /// - /// DatabaseRefresh - /// - DatabaseRefresh, - - /// - /// DatabaseSave - /// - DatabaseSave, - - /// - /// DatabaseStart - /// - DatabaseStart, - - /// - /// DatabaseStop - /// - DatabaseStop, - - /// - /// DatabaseTable - /// - DatabaseTable, - - /// - /// DatabaseWrench - /// - DatabaseWrench, - - /// - /// DatabaseYellow - /// - DatabaseYellow, - - /// - /// DatabaseYellowStart - /// - DatabaseYellowStart, - - /// - /// DatabaseYellowStop - /// - DatabaseYellowStop, - - /// - /// Date - /// - Date, - - /// - /// DateAdd - /// - DateAdd, - - /// - /// DateDelete - /// - DateDelete, - - /// - /// DateEdit - /// - DateEdit, - - /// - /// DateError - /// - DateError, - - /// - /// DateGo - /// - DateGo, - - /// - /// DateLink - /// - DateLink, - - /// - /// DateMagnify - /// - DateMagnify, - - /// - /// DateNext - /// - DateNext, - - /// - /// DatePrevious - /// - DatePrevious, - - /// - /// Decline - /// - Decline, - - /// - /// Delete - /// - Delete, - - /// - /// DeviceStylus - /// - DeviceStylus, - - /// - /// Disconnect - /// - Disconnect, - - /// - /// Disk - /// - Disk, - - /// - /// DiskBlack - /// - DiskBlack, - - /// - /// DiskBlackError - /// - DiskBlackError, - - /// - /// DiskBlackMagnify - /// - DiskBlackMagnify, - - /// - /// DiskDownload - /// - DiskDownload, - - /// - /// DiskEdit - /// - DiskEdit, - - /// - /// DiskError - /// - DiskError, - - /// - /// DiskMagnify - /// - DiskMagnify, - - /// - /// DiskMultiple - /// - DiskMultiple, - - /// - /// DiskUpload - /// - DiskUpload, - - /// - /// Door - /// - Door, - - /// - /// DoorError - /// - DoorError, - - /// - /// DoorIn - /// - DoorIn, - - /// - /// DoorOpen - /// - DoorOpen, - - /// - /// DoorOut - /// - DoorOut, - - /// - /// Drink - /// - Drink, - - /// - /// DrinkEmpty - /// - DrinkEmpty, - - /// - /// DrinkRed - /// - DrinkRed, - - /// - /// Drive - /// - Drive, - - /// - /// DriveAdd - /// - DriveAdd, - - /// - /// DriveBurn - /// - DriveBurn, - - /// - /// DriveCd - /// - DriveCd, - - /// - /// DriveCdr - /// - DriveCdr, - - /// - /// DriveCdEmpty - /// - DriveCdEmpty, - - /// - /// DriveDelete - /// - DriveDelete, - - /// - /// DriveDisk - /// - DriveDisk, - - /// - /// DriveEdit - /// - DriveEdit, - - /// - /// DriveError - /// - DriveError, - - /// - /// DriveGo - /// - DriveGo, - - /// - /// DriveKey - /// - DriveKey, - - /// - /// DriveLink - /// - DriveLink, - - /// - /// DriveMagnify - /// - DriveMagnify, - - /// - /// DriveNetwork - /// - DriveNetwork, - - /// - /// DriveNetworkError - /// - DriveNetworkError, - - /// - /// DriveNetworkStop - /// - DriveNetworkStop, - - /// - /// DriveRename - /// - DriveRename, - - /// - /// DriveUser - /// - DriveUser, - - /// - /// DriveWeb - /// - DriveWeb, - - /// - /// Dvd - /// - Dvd, - - /// - /// DvdAdd - /// - DvdAdd, - - /// - /// DvdDelete - /// - DvdDelete, - - /// - /// DvdEdit - /// - DvdEdit, - - /// - /// DvdError - /// - DvdError, - - /// - /// DvdGo - /// - DvdGo, - - /// - /// DvdKey - /// - DvdKey, - - /// - /// DvdLink - /// - DvdLink, - - /// - /// DvdStart - /// - DvdStart, - - /// - /// DvdStop - /// - DvdStop, - - /// - /// EjectBlue - /// - EjectBlue, - - /// - /// EjectGreen - /// - EjectGreen, - - /// - /// Email - /// - Email, - - /// - /// EmailAdd - /// - EmailAdd, - - /// - /// EmailAttach - /// - EmailAttach, - - /// - /// EmailDelete - /// - EmailDelete, - - /// - /// EmailEdit - /// - EmailEdit, - - /// - /// EmailError - /// - EmailError, - - /// - /// EmailGo - /// - EmailGo, - - /// - /// EmailLink - /// - EmailLink, - - /// - /// EmailMagnify - /// - EmailMagnify, - - /// - /// EmailOpen - /// - EmailOpen, - - /// - /// EmailOpenImage - /// - EmailOpenImage, - - /// - /// EmailStar - /// - EmailStar, - - /// - /// EmailStart - /// - EmailStart, - - /// - /// EmailStop - /// - EmailStop, - - /// - /// EmailTransfer - /// - EmailTransfer, - - /// - /// EmoticonEvilgrin - /// - EmoticonEvilgrin, - - /// - /// EmoticonGrin - /// - EmoticonGrin, - - /// - /// EmoticonHappy - /// - EmoticonHappy, - - /// - /// EmoticonSmile - /// - EmoticonSmile, - - /// - /// EmoticonSurprised - /// - EmoticonSurprised, - - /// - /// EmoticonTongue - /// - EmoticonTongue, - - /// - /// EmoticonUnhappy - /// - EmoticonUnhappy, - - /// - /// EmoticonWaii - /// - EmoticonWaii, - - /// - /// EmoticonWink - /// - EmoticonWink, - - /// - /// Erase - /// - Erase, - - /// - /// Error - /// - Error, - - /// - /// ErrorAdd - /// - ErrorAdd, - - /// - /// ErrorDelete - /// - ErrorDelete, - - /// - /// ErrorGo - /// - ErrorGo, - - /// - /// Exclamation - /// - Exclamation, - - /// - /// Eye - /// - Eye, - - /// - /// Eyes - /// - Eyes, - - /// - /// Feed - /// - Feed, - - /// - /// FeedAdd - /// - FeedAdd, - - /// - /// FeedDelete - /// - FeedDelete, - - /// - /// FeedDisk - /// - FeedDisk, - - /// - /// FeedEdit - /// - FeedEdit, - - /// - /// FeedError - /// - FeedError, - - /// - /// FeedGo - /// - FeedGo, - - /// - /// FeedKey - /// - FeedKey, - - /// - /// FeedLink - /// - FeedLink, - - /// - /// FeedMagnify - /// - FeedMagnify, - - /// - /// FeedStar - /// - FeedStar, - - /// - /// Female - /// - Female, - - /// - /// Film - /// - Film, - - /// - /// FilmAdd - /// - FilmAdd, - - /// - /// FilmDelete - /// - FilmDelete, - - /// - /// FilmEdit - /// - FilmEdit, - - /// - /// FilmEject - /// - FilmEject, - - /// - /// FilmError - /// - FilmError, - - /// - /// FilmGo - /// - FilmGo, - - /// - /// FilmKey - /// - FilmKey, - - /// - /// FilmLink - /// - FilmLink, - - /// - /// FilmMagnify - /// - FilmMagnify, - - /// - /// FilmSave - /// - FilmSave, - - /// - /// FilmStar - /// - FilmStar, - - /// - /// FilmStart - /// - FilmStart, - - /// - /// FilmStop - /// - FilmStop, - - /// - /// Find - /// - Find, - - /// - /// FingerPoint - /// - FingerPoint, - - /// - /// FlagAd - /// - FlagAd, - - /// - /// FlagAe - /// - FlagAe, - - /// - /// FlagAf - /// - FlagAf, - - /// - /// FlagAg - /// - FlagAg, - - /// - /// FlagAi - /// - FlagAi, - - /// - /// FlagAl - /// - FlagAl, - - /// - /// FlagAm - /// - FlagAm, - - /// - /// FlagAn - /// - FlagAn, - - /// - /// FlagAo - /// - FlagAo, - - /// - /// FlagAr - /// - FlagAr, - - /// - /// FlagAs - /// - FlagAs, - - /// - /// FlagAt - /// - FlagAt, - - /// - /// FlagAu - /// - FlagAu, - - /// - /// FlagAw - /// - FlagAw, - - /// - /// FlagAx - /// - FlagAx, - - /// - /// FlagAz - /// - FlagAz, - - /// - /// FlagBa - /// - FlagBa, - - /// - /// FlagBb - /// - FlagBb, - - /// - /// FlagBd - /// - FlagBd, - - /// - /// FlagBe - /// - FlagBe, - - /// - /// FlagBf - /// - FlagBf, - - /// - /// FlagBg - /// - FlagBg, - - /// - /// FlagBh - /// - FlagBh, - - /// - /// FlagBi - /// - FlagBi, - - /// - /// FlagBj - /// - FlagBj, - - /// - /// FlagBlack - /// - FlagBlack, - - /// - /// FlagBlue - /// - FlagBlue, - - /// - /// FlagBm - /// - FlagBm, - - /// - /// FlagBn - /// - FlagBn, - - /// - /// FlagBo - /// - FlagBo, - - /// - /// FlagBr - /// - FlagBr, - - /// - /// FlagBs - /// - FlagBs, - - /// - /// FlagBt - /// - FlagBt, - - /// - /// FlagBv - /// - FlagBv, - - /// - /// FlagBw - /// - FlagBw, - - /// - /// FlagBy - /// - FlagBy, - - /// - /// FlagBz - /// - FlagBz, - - /// - /// FlagCa - /// - FlagCa, - - /// - /// FlagCatalonia - /// - FlagCatalonia, - - /// - /// FlagCc - /// - FlagCc, - - /// - /// FlagCd - /// - FlagCd, - - /// - /// FlagCf - /// - FlagCf, - - /// - /// FlagCg - /// - FlagCg, - - /// - /// FlagCh - /// - FlagCh, - - /// - /// FlagChecked - /// - FlagChecked, - - /// - /// FlagCi - /// - FlagCi, - - /// - /// FlagCk - /// - FlagCk, - - /// - /// FlagCl - /// - FlagCl, - - /// - /// FlagCm - /// - FlagCm, - - /// - /// FlagCn - /// - FlagCn, - - /// - /// FlagCo - /// - FlagCo, - - /// - /// FlagCr - /// - FlagCr, - - /// - /// FlagCs - /// - FlagCs, - - /// - /// FlagCu - /// - FlagCu, - - /// - /// FlagCv - /// - FlagCv, - - /// - /// FlagCx - /// - FlagCx, - - /// - /// FlagCy - /// - FlagCy, - - /// - /// FlagCz - /// - FlagCz, - - /// - /// FlagDe - /// - FlagDe, - - /// - /// FlagDj - /// - FlagDj, - - /// - /// FlagDk - /// - FlagDk, - - /// - /// FlagDm - /// - FlagDm, - - /// - /// FlagDo - /// - FlagDo, - - /// - /// FlagDz - /// - FlagDz, - - /// - /// FlagEc - /// - FlagEc, - - /// - /// FlagEe - /// - FlagEe, - - /// - /// FlagEg - /// - FlagEg, - - /// - /// FlagEh - /// - FlagEh, - - /// - /// FlagEngland - /// - FlagEngland, - - /// - /// FlagEr - /// - FlagEr, - - /// - /// FlagEs - /// - FlagEs, - - /// - /// FlagEt - /// - FlagEt, - - /// - /// FlagEuropeanunion - /// - FlagEuropeanunion, - - /// - /// FlagFam - /// - FlagFam, - - /// - /// FlagFi - /// - FlagFi, - - /// - /// FlagFj - /// - FlagFj, - - /// - /// FlagFk - /// - FlagFk, - - /// - /// FlagFm - /// - FlagFm, - - /// - /// FlagFo - /// - FlagFo, - - /// - /// FlagFr - /// - FlagFr, - - /// - /// FlagFrance - /// - FlagFrance, - - /// - /// FlagGa - /// - FlagGa, - - /// - /// FlagGb - /// - FlagGb, - - /// - /// FlagGd - /// - FlagGd, - - /// - /// FlagGe - /// - FlagGe, - - /// - /// FlagGf - /// - FlagGf, - - /// - /// FlagGg - /// - FlagGg, - - /// - /// FlagGh - /// - FlagGh, - - /// - /// FlagGi - /// - FlagGi, - - /// - /// FlagGl - /// - FlagGl, - - /// - /// FlagGm - /// - FlagGm, - - /// - /// FlagGn - /// - FlagGn, - - /// - /// FlagGp - /// - FlagGp, - - /// - /// FlagGq - /// - FlagGq, - - /// - /// FlagGr - /// - FlagGr, - - /// - /// FlagGreen - /// - FlagGreen, - - /// - /// FlagGrey - /// - FlagGrey, - - /// - /// FlagGs - /// - FlagGs, - - /// - /// FlagGt - /// - FlagGt, - - /// - /// FlagGu - /// - FlagGu, - - /// - /// FlagGw - /// - FlagGw, - - /// - /// FlagGy - /// - FlagGy, - - /// - /// FlagHk - /// - FlagHk, - - /// - /// FlagHm - /// - FlagHm, - - /// - /// FlagHn - /// - FlagHn, - - /// - /// FlagHr - /// - FlagHr, - - /// - /// FlagHt - /// - FlagHt, - - /// - /// FlagHu - /// - FlagHu, - - /// - /// FlagId - /// - FlagId, - - /// - /// FlagIe - /// - FlagIe, - - /// - /// FlagIl - /// - FlagIl, - - /// - /// FlagIn - /// - FlagIn, - - /// - /// FlagIo - /// - FlagIo, - - /// - /// FlagIq - /// - FlagIq, - - /// - /// FlagIr - /// - FlagIr, - - /// - /// FlagIs - /// - FlagIs, - - /// - /// FlagIt - /// - FlagIt, - - /// - /// FlagJm - /// - FlagJm, - - /// - /// FlagJo - /// - FlagJo, - - /// - /// FlagJp - /// - FlagJp, - - /// - /// FlagKe - /// - FlagKe, - - /// - /// FlagKg - /// - FlagKg, - - /// - /// FlagKh - /// - FlagKh, - - /// - /// FlagKi - /// - FlagKi, - - /// - /// FlagKm - /// - FlagKm, - - /// - /// FlagKn - /// - FlagKn, - - /// - /// FlagKp - /// - FlagKp, - - /// - /// FlagKr - /// - FlagKr, - - /// - /// FlagKw - /// - FlagKw, - - /// - /// FlagKy - /// - FlagKy, - - /// - /// FlagKz - /// - FlagKz, - - /// - /// FlagLa - /// - FlagLa, - - /// - /// FlagLb - /// - FlagLb, - - /// - /// FlagLc - /// - FlagLc, - - /// - /// FlagLi - /// - FlagLi, - - /// - /// FlagLk - /// - FlagLk, - - /// - /// FlagLr - /// - FlagLr, - - /// - /// FlagLs - /// - FlagLs, - - /// - /// FlagLt - /// - FlagLt, - - /// - /// FlagLu - /// - FlagLu, - - /// - /// FlagLv - /// - FlagLv, - - /// - /// FlagLy - /// - FlagLy, - - /// - /// FlagMa - /// - FlagMa, - - /// - /// FlagMc - /// - FlagMc, - - /// - /// FlagMd - /// - FlagMd, - - /// - /// FlagMe - /// - FlagMe, - - /// - /// FlagMg - /// - FlagMg, - - /// - /// FlagMh - /// - FlagMh, - - /// - /// FlagMk - /// - FlagMk, - - /// - /// FlagMl - /// - FlagMl, - - /// - /// FlagMm - /// - FlagMm, - - /// - /// FlagMn - /// - FlagMn, - - /// - /// FlagMo - /// - FlagMo, - - /// - /// FlagMp - /// - FlagMp, - - /// - /// FlagMq - /// - FlagMq, - - /// - /// FlagMr - /// - FlagMr, - - /// - /// FlagMs - /// - FlagMs, - - /// - /// FlagMt - /// - FlagMt, - - /// - /// FlagMu - /// - FlagMu, - - /// - /// FlagMv - /// - FlagMv, - - /// - /// FlagMw - /// - FlagMw, - - /// - /// FlagMx - /// - FlagMx, - - /// - /// FlagMy - /// - FlagMy, - - /// - /// FlagMz - /// - FlagMz, - - /// - /// FlagNa - /// - FlagNa, - - /// - /// FlagNc - /// - FlagNc, - - /// - /// FlagNe - /// - FlagNe, - - /// - /// FlagNf - /// - FlagNf, - - /// - /// FlagNg - /// - FlagNg, - - /// - /// FlagNi - /// - FlagNi, - - /// - /// FlagNl - /// - FlagNl, - - /// - /// FlagNo - /// - FlagNo, - - /// - /// FlagNp - /// - FlagNp, - - /// - /// FlagNr - /// - FlagNr, - - /// - /// FlagNu - /// - FlagNu, - - /// - /// FlagNz - /// - FlagNz, - - /// - /// FlagOm - /// - FlagOm, - - /// - /// FlagOrange - /// - FlagOrange, - - /// - /// FlagPa - /// - FlagPa, - - /// - /// FlagPe - /// - FlagPe, - - /// - /// FlagPf - /// - FlagPf, - - /// - /// FlagPg - /// - FlagPg, - - /// - /// FlagPh - /// - FlagPh, - - /// - /// FlagPink - /// - FlagPink, - - /// - /// FlagPk - /// - FlagPk, - - /// - /// FlagPl - /// - FlagPl, - - /// - /// FlagPm - /// - FlagPm, - - /// - /// FlagPn - /// - FlagPn, - - /// - /// FlagPr - /// - FlagPr, - - /// - /// FlagPs - /// - FlagPs, - - /// - /// FlagPt - /// - FlagPt, - - /// - /// FlagPurple - /// - FlagPurple, - - /// - /// FlagPw - /// - FlagPw, - - /// - /// FlagPy - /// - FlagPy, - - /// - /// FlagQa - /// - FlagQa, - - /// - /// FlagRe - /// - FlagRe, - - /// - /// FlagRed - /// - FlagRed, - - /// - /// FlagRo - /// - FlagRo, - - /// - /// FlagRs - /// - FlagRs, - - /// - /// FlagRu - /// - FlagRu, - - /// - /// FlagRw - /// - FlagRw, - - /// - /// FlagSa - /// - FlagSa, - - /// - /// FlagSb - /// - FlagSb, - - /// - /// FlagSc - /// - FlagSc, - - /// - /// FlagScotland - /// - FlagScotland, - - /// - /// FlagSd - /// - FlagSd, - - /// - /// FlagSe - /// - FlagSe, - - /// - /// FlagSg - /// - FlagSg, - - /// - /// FlagSh - /// - FlagSh, - - /// - /// FlagSi - /// - FlagSi, - - /// - /// FlagSj - /// - FlagSj, - - /// - /// FlagSk - /// - FlagSk, - - /// - /// FlagSl - /// - FlagSl, - - /// - /// FlagSm - /// - FlagSm, - - /// - /// FlagSn - /// - FlagSn, - - /// - /// FlagSo - /// - FlagSo, - - /// - /// FlagSr - /// - FlagSr, - - /// - /// FlagSt - /// - FlagSt, - - /// - /// FlagSv - /// - FlagSv, - - /// - /// FlagSy - /// - FlagSy, - - /// - /// FlagSz - /// - FlagSz, - - /// - /// FlagTc - /// - FlagTc, - - /// - /// FlagTd - /// - FlagTd, - - /// - /// FlagTf - /// - FlagTf, - - /// - /// FlagTg - /// - FlagTg, - - /// - /// FlagTh - /// - FlagTh, - - /// - /// FlagTj - /// - FlagTj, - - /// - /// FlagTk - /// - FlagTk, - - /// - /// FlagTl - /// - FlagTl, - - /// - /// FlagTm - /// - FlagTm, - - /// - /// FlagTn - /// - FlagTn, - - /// - /// FlagTo - /// - FlagTo, - - /// - /// FlagTr - /// - FlagTr, - - /// - /// FlagTt - /// - FlagTt, - - /// - /// FlagTv - /// - FlagTv, - - /// - /// FlagTw - /// - FlagTw, - - /// - /// FlagTz - /// - FlagTz, - - /// - /// FlagUa - /// - FlagUa, - - /// - /// FlagUg - /// - FlagUg, - - /// - /// FlagUm - /// - FlagUm, - - /// - /// FlagUs - /// - FlagUs, - - /// - /// FlagUy - /// - FlagUy, - - /// - /// FlagUz - /// - FlagUz, - - /// - /// FlagVa - /// - FlagVa, - - /// - /// FlagVc - /// - FlagVc, - - /// - /// FlagVe - /// - FlagVe, - - /// - /// FlagVg - /// - FlagVg, - - /// - /// FlagVi - /// - FlagVi, - - /// - /// FlagVn - /// - FlagVn, - - /// - /// FlagVu - /// - FlagVu, - - /// - /// FlagWales - /// - FlagWales, - - /// - /// FlagWf - /// - FlagWf, - - /// - /// FlagWhite - /// - FlagWhite, - - /// - /// FlagWs - /// - FlagWs, - - /// - /// FlagYe - /// - FlagYe, - - /// - /// FlagYellow - /// - FlagYellow, - - /// - /// FlagYt - /// - FlagYt, - - /// - /// FlagZa - /// - FlagZa, - - /// - /// FlagZm - /// - FlagZm, - - /// - /// FlagZw - /// - FlagZw, - - /// - /// FlowerDaisy - /// - FlowerDaisy, - - /// - /// Folder - /// - Folder, - - /// - /// FolderAdd - /// - FolderAdd, - - /// - /// FolderBell - /// - FolderBell, - - /// - /// FolderBookmark - /// - FolderBookmark, - - /// - /// FolderBrick - /// - FolderBrick, - - /// - /// FolderBug - /// - FolderBug, - - /// - /// FolderCamera - /// - FolderCamera, - - /// - /// FolderConnect - /// - FolderConnect, - - /// - /// FolderDatabase - /// - FolderDatabase, - - /// - /// FolderDelete - /// - FolderDelete, - - /// - /// FolderEdit - /// - FolderEdit, - - /// - /// FolderError - /// - FolderError, - - /// - /// FolderExplore - /// - FolderExplore, - - /// - /// FolderFeed - /// - FolderFeed, - - /// - /// FolderFilm - /// - FolderFilm, - - /// - /// FolderFind - /// - FolderFind, - - /// - /// FolderFont - /// - FolderFont, - - /// - /// FolderGo - /// - FolderGo, - - /// - /// FolderHeart - /// - FolderHeart, - - /// - /// FolderHome - /// - FolderHome, - - /// - /// FolderImage - /// - FolderImage, - - /// - /// FolderKey - /// - FolderKey, - - /// - /// FolderLightbulb - /// - FolderLightbulb, - - /// - /// FolderLink - /// - FolderLink, - - /// - /// FolderMagnify - /// - FolderMagnify, - - /// - /// FolderPage - /// - FolderPage, - - /// - /// FolderPageWhite - /// - FolderPageWhite, - - /// - /// FolderPalette - /// - FolderPalette, - - /// - /// FolderPicture - /// - FolderPicture, - - /// - /// FolderStar - /// - FolderStar, - - /// - /// FolderTable - /// - FolderTable, - - /// - /// FolderUp - /// - FolderUp, - - /// - /// FolderUser - /// - FolderUser, - - /// - /// FolderWrench - /// - FolderWrench, - - /// - /// Font - /// - Font, - - /// - /// FontAdd - /// - FontAdd, - - /// - /// FontColor - /// - FontColor, - - /// - /// FontDelete - /// - FontDelete, - - /// - /// FontGo - /// - FontGo, - - /// - /// FontLarger - /// - FontLarger, - - /// - /// FontSmaller - /// - FontSmaller, - - /// - /// ForwardBlue - /// - ForwardBlue, - - /// - /// ForwardGreen - /// - ForwardGreen, - - /// - /// Group - /// - Group, - - /// - /// GroupAdd - /// - GroupAdd, - - /// - /// GroupDelete - /// - GroupDelete, - - /// - /// GroupEdit - /// - GroupEdit, - - /// - /// GroupError - /// - GroupError, - - /// - /// GroupGear - /// - GroupGear, - - /// - /// GroupGo - /// - GroupGo, - - /// - /// GroupKey - /// - GroupKey, - - /// - /// GroupLink - /// - GroupLink, - - /// - /// Heart - /// - Heart, - - /// - /// HeartAdd - /// - HeartAdd, - - /// - /// HeartBroken - /// - HeartBroken, - - /// - /// HeartConnect - /// - HeartConnect, - - /// - /// HeartDelete - /// - HeartDelete, - - /// - /// Help - /// - Help, - - /// - /// Hourglass - /// - Hourglass, - - /// - /// HourglassAdd - /// - HourglassAdd, - - /// - /// HourglassDelete - /// - HourglassDelete, - - /// - /// HourglassGo - /// - HourglassGo, - - /// - /// HourglassLink - /// - HourglassLink, - - /// - /// House - /// - House, - - /// - /// HouseConnect - /// - HouseConnect, - - /// - /// HouseGo - /// - HouseGo, - - /// - /// HouseKey - /// - HouseKey, - - /// - /// HouseLink - /// - HouseLink, - - /// - /// HouseStar - /// - HouseStar, - - /// - /// Html - /// - Html, - - /// - /// HtmlAdd - /// - HtmlAdd, - - /// - /// HtmlDelete - /// - HtmlDelete, - - /// - /// HtmlError - /// - HtmlError, - - /// - /// HtmlGo - /// - HtmlGo, - - /// - /// HtmlValid - /// - HtmlValid, - - /// - /// Image - /// - Image, - - /// - /// Images - /// - Images, - - /// - /// ImageAdd - /// - ImageAdd, - - /// - /// ImageDelete - /// - ImageDelete, - - /// - /// ImageEdit - /// - ImageEdit, - - /// - /// ImageLink - /// - ImageLink, - - /// - /// ImageMagnify - /// - ImageMagnify, - - /// - /// ImageStar - /// - ImageStar, - - /// - /// Information - /// - Information, - - /// - /// Ipod - /// - Ipod, - - /// - /// IpodCast - /// - IpodCast, - - /// - /// IpodCastAdd - /// - IpodCastAdd, - - /// - /// IpodCastDelete - /// - IpodCastDelete, - - /// - /// IpodConnect - /// - IpodConnect, - - /// - /// IpodNano - /// - IpodNano, - - /// - /// IpodNanoConnect - /// - IpodNanoConnect, - - /// - /// IpodSound - /// - IpodSound, - - /// - /// Joystick - /// - Joystick, - - /// - /// JoystickAdd - /// - JoystickAdd, - - /// - /// JoystickConnect - /// - JoystickConnect, - - /// - /// JoystickDelete - /// - JoystickDelete, - - /// - /// JoystickError - /// - JoystickError, - - /// - /// Key - /// - Key, - - /// - /// Keyboard - /// - Keyboard, - - /// - /// KeyboardAdd - /// - KeyboardAdd, - - /// - /// KeyboardConnect - /// - KeyboardConnect, - - /// - /// KeyboardDelete - /// - KeyboardDelete, - - /// - /// KeyboardMagnify - /// - KeyboardMagnify, - - /// - /// KeyAdd - /// - KeyAdd, - - /// - /// KeyDelete - /// - KeyDelete, - - /// - /// KeyGo - /// - KeyGo, - - /// - /// KeyStart - /// - KeyStart, - - /// - /// KeyStop - /// - KeyStop, - - /// - /// Laptop - /// - Laptop, - - /// - /// LaptopAdd - /// - LaptopAdd, - - /// - /// LaptopConnect - /// - LaptopConnect, - - /// - /// LaptopDelete - /// - LaptopDelete, - - /// - /// LaptopDisk - /// - LaptopDisk, - - /// - /// LaptopEdit - /// - LaptopEdit, - - /// - /// LaptopError - /// - LaptopError, - - /// - /// LaptopGo - /// - LaptopGo, - - /// - /// LaptopKey - /// - LaptopKey, - - /// - /// LaptopLink - /// - LaptopLink, - - /// - /// LaptopMagnify - /// - LaptopMagnify, - - /// - /// LaptopStart - /// - LaptopStart, - - /// - /// LaptopStop - /// - LaptopStop, - - /// - /// LaptopWrench - /// - LaptopWrench, - - /// - /// Layers - /// - Layers, - - /// - /// Layout - /// - Layout, - - /// - /// LayoutAdd - /// - LayoutAdd, - - /// - /// LayoutContent - /// - LayoutContent, - - /// - /// LayoutDelete - /// - LayoutDelete, - - /// - /// LayoutEdit - /// - LayoutEdit, - - /// - /// LayoutError - /// - LayoutError, - - /// - /// LayoutHeader - /// - LayoutHeader, - - /// - /// LayoutKey - /// - LayoutKey, - - /// - /// LayoutLightning - /// - LayoutLightning, - - /// - /// LayoutLink - /// - LayoutLink, - - /// - /// LayoutSidebar - /// - LayoutSidebar, - - /// - /// Lightbulb - /// - Lightbulb, - - /// - /// LightbulbAdd - /// - LightbulbAdd, - - /// - /// LightbulbDelete - /// - LightbulbDelete, - - /// - /// LightbulbOff - /// - LightbulbOff, - - /// - /// Lightning - /// - Lightning, - - /// - /// LightningAdd - /// - LightningAdd, - - /// - /// LightningDelete - /// - LightningDelete, - - /// - /// LightningGo - /// - LightningGo, - - /// - /// Link - /// - Link, - - /// - /// LinkAdd - /// - LinkAdd, - - /// - /// LinkBreak - /// - LinkBreak, - - /// - /// LinkDelete - /// - LinkDelete, - - /// - /// LinkEdit - /// - LinkEdit, - - /// - /// LinkError - /// - LinkError, - - /// - /// LinkGo - /// - LinkGo, - - /// - /// Lock - /// - Lock, - - /// - /// LockAdd - /// - LockAdd, - - /// - /// LockBreak - /// - LockBreak, - - /// - /// LockDelete - /// - LockDelete, - - /// - /// LockEdit - /// - LockEdit, - - /// - /// LockGo - /// - LockGo, - - /// - /// LockKey - /// - LockKey, - - /// - /// LockOpen - /// - LockOpen, - - /// - /// LockStart - /// - LockStart, - - /// - /// LockStop - /// - LockStop, - - /// - /// Lorry - /// - Lorry, - - /// - /// LorryAdd - /// - LorryAdd, - - /// - /// LorryDelete - /// - LorryDelete, - - /// - /// LorryError - /// - LorryError, - - /// - /// LorryFlatbed - /// - LorryFlatbed, - - /// - /// LorryGo - /// - LorryGo, - - /// - /// LorryLink - /// - LorryLink, - - /// - /// LorryStart - /// - LorryStart, - - /// - /// LorryStop - /// - LorryStop, - - /// - /// MagifierZoomOut - /// - MagifierZoomOut, - - /// - /// Magnifier - /// - Magnifier, - - /// - /// MagnifierZoomIn - /// - MagnifierZoomIn, - - /// - /// Mail - /// - Mail, - - /// - /// Male - /// - Male, - - /// - /// Map - /// - Map, - - /// - /// MapAdd - /// - MapAdd, - - /// - /// MapClipboard - /// - MapClipboard, - - /// - /// MapCursor - /// - MapCursor, - - /// - /// MapDelete - /// - MapDelete, - - /// - /// MapEdit - /// - MapEdit, - - /// - /// MapError - /// - MapError, - - /// - /// MapGo - /// - MapGo, - - /// - /// MapLink - /// - MapLink, - - /// - /// MapMagnify - /// - MapMagnify, - - /// - /// MapStart - /// - MapStart, - - /// - /// MapStop - /// - MapStop, - - /// - /// MedalBronze1 - /// - MedalBronze1, - - /// - /// MedalBronze2 - /// - MedalBronze2, - - /// - /// MedalBronze3 - /// - MedalBronze3, - - /// - /// MedalBronzeAdd - /// - MedalBronzeAdd, - - /// - /// MedalBronzeDelete - /// - MedalBronzeDelete, - - /// - /// MedalGold1 - /// - MedalGold1, - - /// - /// MedalGold2 - /// - MedalGold2, - - /// - /// MedalGold3 - /// - MedalGold3, - - /// - /// MedalGoldAdd - /// - MedalGoldAdd, - - /// - /// MedalGoldDelete - /// - MedalGoldDelete, - - /// - /// MedalSilver1 - /// - MedalSilver1, - - /// - /// MedalSilver2 - /// - MedalSilver2, - - /// - /// MedalSilver3 - /// - MedalSilver3, - - /// - /// MedalSilverAdd - /// - MedalSilverAdd, - - /// - /// MedalSilverDelete - /// - MedalSilverDelete, - - /// - /// Money - /// - Money, - - /// - /// MoneyAdd - /// - MoneyAdd, - - /// - /// MoneyDelete - /// - MoneyDelete, - - /// - /// MoneyDollar - /// - MoneyDollar, - - /// - /// MoneyEuro - /// - MoneyEuro, - - /// - /// MoneyPound - /// - MoneyPound, - - /// - /// MoneyYen - /// - MoneyYen, - - /// - /// Monitor - /// - Monitor, - - /// - /// MonitorAdd - /// - MonitorAdd, - - /// - /// MonitorDelete - /// - MonitorDelete, - - /// - /// MonitorEdit - /// - MonitorEdit, - - /// - /// MonitorError - /// - MonitorError, - - /// - /// MonitorGo - /// - MonitorGo, - - /// - /// MonitorKey - /// - MonitorKey, - - /// - /// MonitorLightning - /// - MonitorLightning, - - /// - /// MonitorLink - /// - MonitorLink, - - /// - /// MoonFull - /// - MoonFull, - - /// - /// Mouse - /// - Mouse, - - /// - /// MouseAdd - /// - MouseAdd, - - /// - /// MouseDelete - /// - MouseDelete, - - /// - /// MouseError - /// - MouseError, - - /// - /// Music - /// - Music, - - /// - /// MusicNote - /// - MusicNote, - - /// - /// Neighbourhood - /// - Neighbourhood, - - /// - /// New - /// - New, - - /// - /// Newspaper - /// - Newspaper, - - /// - /// NewspaperAdd - /// - NewspaperAdd, - - /// - /// NewspaperDelete - /// - NewspaperDelete, - - /// - /// NewspaperGo - /// - NewspaperGo, - - /// - /// NewspaperLink - /// - NewspaperLink, - - /// - /// NewBlue - /// - NewBlue, - - /// - /// NewRed - /// - NewRed, - - /// - /// NextBlue - /// - NextBlue, - - /// - /// NextGreen - /// - NextGreen, - - /// - /// Note - /// - Note, - - /// - /// NoteAdd - /// - NoteAdd, - - /// - /// NoteDelete - /// - NoteDelete, - - /// - /// NoteEdit - /// - NoteEdit, - - /// - /// NoteError - /// - NoteError, - - /// - /// NoteGo - /// - NoteGo, - - /// - /// Outline - /// - Outline, - - /// - /// Overlays - /// - Overlays, - - /// - /// Package - /// - Package, - - /// - /// PackageAdd - /// - PackageAdd, - - /// - /// PackageDelete - /// - PackageDelete, - - /// - /// PackageDown - /// - PackageDown, - - /// - /// PackageGo - /// - PackageGo, - - /// - /// PackageGreen - /// - PackageGreen, - - /// - /// PackageIn - /// - PackageIn, - - /// - /// PackageLink - /// - PackageLink, - - /// - /// PackageSe - /// - PackageSe, - - /// - /// PackageStart - /// - PackageStart, - - /// - /// PackageStop - /// - PackageStop, - - /// - /// PackageWhite - /// - PackageWhite, - - /// - /// Page - /// - Page, - - /// - /// PageAdd - /// - PageAdd, - - /// - /// PageAttach - /// - PageAttach, - - /// - /// PageBack - /// - PageBack, - - /// - /// PageBreak - /// - PageBreak, - - /// - /// PageBreakInsert - /// - PageBreakInsert, - - /// - /// PageCancel - /// - PageCancel, - - /// - /// PageCode - /// - PageCode, - - /// - /// PageCopy - /// - PageCopy, - - /// - /// PageDelete - /// - PageDelete, - - /// - /// PageEdit - /// - PageEdit, - - /// - /// PageError - /// - PageError, - - /// - /// PageExcel - /// - PageExcel, - - /// - /// PageFind - /// - PageFind, - - /// - /// PageForward - /// - PageForward, - - /// - /// PageGear - /// - PageGear, - - /// - /// PageGo - /// - PageGo, - - /// - /// PageGreen - /// - PageGreen, - - /// - /// PageHeaderFooter - /// - PageHeaderFooter, - - /// - /// PageKey - /// - PageKey, - - /// - /// PageLandscape - /// - PageLandscape, - - /// - /// PageLandscapeShot - /// - PageLandscapeShot, - - /// - /// PageLightning - /// - PageLightning, - - /// - /// PageLink - /// - PageLink, - - /// - /// PageMagnify - /// - PageMagnify, - - /// - /// PagePaintbrush - /// - PagePaintbrush, - - /// - /// PagePaste - /// - PagePaste, - - /// - /// PagePortrait - /// - PagePortrait, - - /// - /// PagePortraitShot - /// - PagePortraitShot, - - /// - /// PageRed - /// - PageRed, - - /// - /// PageRefresh - /// - PageRefresh, - - /// - /// PageSave - /// - PageSave, - - /// - /// PageWhite - /// - PageWhite, - - /// - /// PageWhiteAcrobat - /// - PageWhiteAcrobat, - - /// - /// PageWhiteActionscript - /// - PageWhiteActionscript, - - /// - /// PageWhiteAdd - /// - PageWhiteAdd, - - /// - /// PageWhiteBreak - /// - PageWhiteBreak, - - /// - /// PageWhiteC - /// - PageWhiteC, - - /// - /// PageWhiteCamera - /// - PageWhiteCamera, - - /// - /// PageWhiteCd - /// - PageWhiteCd, - - /// - /// PageWhiteCdr - /// - PageWhiteCdr, - - /// - /// PageWhiteCode - /// - PageWhiteCode, - - /// - /// PageWhiteCodeRed - /// - PageWhiteCodeRed, - - /// - /// PageWhiteColdfusion - /// - PageWhiteColdfusion, - - /// - /// PageWhiteCompressed - /// - PageWhiteCompressed, - - /// - /// PageWhiteConnect - /// - PageWhiteConnect, - - /// - /// PageWhiteCopy - /// - PageWhiteCopy, - - /// - /// PageWhiteCplusplus - /// - PageWhiteCplusplus, - - /// - /// PageWhiteCsharp - /// - PageWhiteCsharp, - - /// - /// PageWhiteCup - /// - PageWhiteCup, - - /// - /// PageWhiteDatabase - /// - PageWhiteDatabase, - - /// - /// PageWhiteDatabaseYellow - /// - PageWhiteDatabaseYellow, - - /// - /// PageWhiteDelete - /// - PageWhiteDelete, - - /// - /// PageWhiteDvd - /// - PageWhiteDvd, - - /// - /// PageWhiteEdit - /// - PageWhiteEdit, - - /// - /// PageWhiteError - /// - PageWhiteError, - - /// - /// PageWhiteExcel - /// - PageWhiteExcel, - - /// - /// PageWhiteFind - /// - PageWhiteFind, - - /// - /// PageWhiteFlash - /// - PageWhiteFlash, - - /// - /// PageWhiteFont - /// - PageWhiteFont, - - /// - /// PageWhiteFreehand - /// - PageWhiteFreehand, - - /// - /// PageWhiteGear - /// - PageWhiteGear, - - /// - /// PageWhiteGet - /// - PageWhiteGet, - - /// - /// PageWhiteGo - /// - PageWhiteGo, - - /// - /// PageWhiteH - /// - PageWhiteH, - - /// - /// PageWhiteHorizontal - /// - PageWhiteHorizontal, - - /// - /// PageWhiteKey - /// - PageWhiteKey, - - /// - /// PageWhiteLightning - /// - PageWhiteLightning, - - /// - /// PageWhiteLink - /// - PageWhiteLink, - - /// - /// PageWhiteMagnify - /// - PageWhiteMagnify, - - /// - /// PageWhiteMedal - /// - PageWhiteMedal, - - /// - /// PageWhiteOffice - /// - PageWhiteOffice, - - /// - /// PageWhitePaint - /// - PageWhitePaint, - - /// - /// PageWhitePaintbrush - /// - PageWhitePaintbrush, - - /// - /// PageWhitePaint2 - /// - PageWhitePaint2, - - /// - /// PageWhitePaste - /// - PageWhitePaste, - - /// - /// PageWhitePasteTable - /// - PageWhitePasteTable, - - /// - /// PageWhitePhp - /// - PageWhitePhp, - - /// - /// PageWhitePicture - /// - PageWhitePicture, - - /// - /// PageWhitePowerpoint - /// - PageWhitePowerpoint, - - /// - /// PageWhitePut - /// - PageWhitePut, - - /// - /// PageWhiteRefresh - /// - PageWhiteRefresh, - - /// - /// PageWhiteRuby - /// - PageWhiteRuby, - - /// - /// PageWhiteSideBySide - /// - PageWhiteSideBySide, - - /// - /// PageWhiteStack - /// - PageWhiteStack, - - /// - /// PageWhiteStar - /// - PageWhiteStar, - - /// - /// PageWhiteSwoosh - /// - PageWhiteSwoosh, - - /// - /// PageWhiteText - /// - PageWhiteText, - - /// - /// PageWhiteTextWidth - /// - PageWhiteTextWidth, - - /// - /// PageWhiteTux - /// - PageWhiteTux, - - /// - /// PageWhiteVector - /// - PageWhiteVector, - - /// - /// PageWhiteVisualstudio - /// - PageWhiteVisualstudio, - - /// - /// PageWhiteWidth - /// - PageWhiteWidth, - - /// - /// PageWhiteWord - /// - PageWhiteWord, - - /// - /// PageWhiteWorld - /// - PageWhiteWorld, - - /// - /// PageWhiteWrench - /// - PageWhiteWrench, - - /// - /// PageWhiteZip - /// - PageWhiteZip, - - /// - /// PageWord - /// - PageWord, - - /// - /// PageWorld - /// - PageWorld, - - /// - /// Paint - /// - Paint, - - /// - /// Paintbrush - /// - Paintbrush, - - /// - /// PaintbrushColor - /// - PaintbrushColor, - - /// - /// Paintcan - /// - Paintcan, - - /// - /// PaintcanRed - /// - PaintcanRed, - - /// - /// PaintCanBrush - /// - PaintCanBrush, - - /// - /// Palette - /// - Palette, - - /// - /// PastePlain - /// - PastePlain, - - /// - /// PasteWord - /// - PasteWord, - - /// - /// PauseBlue - /// - PauseBlue, - - /// - /// PauseGreen - /// - PauseGreen, - - /// - /// PauseRecord - /// - PauseRecord, - - /// - /// Pencil - /// - Pencil, - - /// - /// PencilAdd - /// - PencilAdd, - - /// - /// PencilDelete - /// - PencilDelete, - - /// - /// PencilGo - /// - PencilGo, - - /// - /// Phone - /// - Phone, - - /// - /// PhoneAdd - /// - PhoneAdd, - - /// - /// PhoneDelete - /// - PhoneDelete, - - /// - /// PhoneEdit - /// - PhoneEdit, - - /// - /// PhoneError - /// - PhoneError, - - /// - /// PhoneGo - /// - PhoneGo, - - /// - /// PhoneKey - /// - PhoneKey, - - /// - /// PhoneLink - /// - PhoneLink, - - /// - /// PhoneSound - /// - PhoneSound, - - /// - /// PhoneStart - /// - PhoneStart, - - /// - /// PhoneStop - /// - PhoneStop, - - /// - /// Photo - /// - Photo, - - /// - /// Photos - /// - Photos, - - /// - /// PhotoAdd - /// - PhotoAdd, - - /// - /// PhotoDelete - /// - PhotoDelete, - - /// - /// PhotoEdit - /// - PhotoEdit, - - /// - /// PhotoLink - /// - PhotoLink, - - /// - /// PhotoPaint - /// - PhotoPaint, - - /// - /// Picture - /// - Picture, - - /// - /// Pictures - /// - Pictures, - - /// - /// PicturesThumbs - /// - PicturesThumbs, - - /// - /// PictureAdd - /// - PictureAdd, - - /// - /// PictureClipboard - /// - PictureClipboard, - - /// - /// PictureDelete - /// - PictureDelete, - - /// - /// PictureEdit - /// - PictureEdit, - - /// - /// PictureEmpty - /// - PictureEmpty, - - /// - /// PictureError - /// - PictureError, - - /// - /// PictureGo - /// - PictureGo, - - /// - /// PictureKey - /// - PictureKey, - - /// - /// PictureLink - /// - PictureLink, - - /// - /// PictureSave - /// - PictureSave, - - /// - /// Pilcrow - /// - Pilcrow, - - /// - /// Pill - /// - Pill, - - /// - /// PillAdd - /// - PillAdd, - - /// - /// PillDelete - /// - PillDelete, - - /// - /// PillError - /// - PillError, - - /// - /// PillGo - /// - PillGo, - - /// - /// PlayBlue - /// - PlayBlue, - - /// - /// PlayGreen - /// - PlayGreen, - - /// - /// Plugin - /// - Plugin, - - /// - /// PluginAdd - /// - PluginAdd, - - /// - /// PluginDelete - /// - PluginDelete, - - /// - /// PluginDisabled - /// - PluginDisabled, - - /// - /// PluginEdit - /// - PluginEdit, - - /// - /// PluginError - /// - PluginError, - - /// - /// PluginGo - /// - PluginGo, - - /// - /// PluginKey - /// - PluginKey, - - /// - /// PluginLink - /// - PluginLink, - - /// - /// PreviousGreen - /// - PreviousGreen, - - /// - /// Printer - /// - Printer, - - /// - /// PrinterAdd - /// - PrinterAdd, - - /// - /// PrinterCancel - /// - PrinterCancel, - - /// - /// PrinterColor - /// - PrinterColor, - - /// - /// PrinterConnect - /// - PrinterConnect, - - /// - /// PrinterDelete - /// - PrinterDelete, - - /// - /// PrinterEmpty - /// - PrinterEmpty, - - /// - /// PrinterError - /// - PrinterError, - - /// - /// PrinterGo - /// - PrinterGo, - - /// - /// PrinterKey - /// - PrinterKey, - - /// - /// PrinterMono - /// - PrinterMono, - - /// - /// PrinterStart - /// - PrinterStart, - - /// - /// PrinterStop - /// - PrinterStop, - - /// - /// Rainbow - /// - Rainbow, - - /// - /// RainbowStar - /// - RainbowStar, - - /// - /// RecordBlue - /// - RecordBlue, - - /// - /// RecordGreen - /// - RecordGreen, - - /// - /// RecordRed - /// - RecordRed, - - /// - /// Reload - /// - Reload, - - /// - /// Report - /// - Report, - - /// - /// ReportAdd - /// - ReportAdd, - - /// - /// ReportDelete - /// - ReportDelete, - - /// - /// ReportDisk - /// - ReportDisk, - - /// - /// ReportEdit - /// - ReportEdit, - - /// - /// ReportGo - /// - ReportGo, - - /// - /// ReportKey - /// - ReportKey, - - /// - /// ReportLink - /// - ReportLink, - - /// - /// ReportMagnify - /// - ReportMagnify, - - /// - /// ReportPicture - /// - ReportPicture, - - /// - /// ReportStart - /// - ReportStart, - - /// - /// ReportStop - /// - ReportStop, - - /// - /// ReportUser - /// - ReportUser, - - /// - /// ReportWord - /// - ReportWord, - - /// - /// ResultsetFirst - /// - ResultsetFirst, - - /// - /// ResultsetLast - /// - ResultsetLast, - - /// - /// ResultsetNext - /// - ResultsetNext, - - /// - /// ResultsetPrevious - /// - ResultsetPrevious, - - /// - /// ReverseBlue - /// - ReverseBlue, - - /// - /// ReverseGreen - /// - ReverseGreen, - - /// - /// RewindBlue - /// - RewindBlue, - - /// - /// RewindGreen - /// - RewindGreen, - - /// - /// Rgb - /// - Rgb, - - /// - /// Rosette - /// - Rosette, - - /// - /// RosetteBlue - /// - RosetteBlue, - - /// - /// Rss - /// - Rss, - - /// - /// RssAdd - /// - RssAdd, - - /// - /// RssDelete - /// - RssDelete, - - /// - /// RssError - /// - RssError, - - /// - /// RssGo - /// - RssGo, - - /// - /// RssValid - /// - RssValid, - - /// - /// Ruby - /// - Ruby, - - /// - /// RubyAdd - /// - RubyAdd, - - /// - /// RubyDelete - /// - RubyDelete, - - /// - /// RubyGear - /// - RubyGear, - - /// - /// RubyGet - /// - RubyGet, - - /// - /// RubyGo - /// - RubyGo, - - /// - /// RubyKey - /// - RubyKey, - - /// - /// RubyLink - /// - RubyLink, - - /// - /// RubyPut - /// - RubyPut, - - /// - /// Script - /// - Script, - - /// - /// ScriptAdd - /// - ScriptAdd, - - /// - /// ScriptCode - /// - ScriptCode, - - /// - /// ScriptCodeOriginal - /// - ScriptCodeOriginal, - - /// - /// ScriptCodeRed - /// - ScriptCodeRed, - - /// - /// ScriptDelete - /// - ScriptDelete, - - /// - /// ScriptEdit - /// - ScriptEdit, - - /// - /// ScriptError - /// - ScriptError, - - /// - /// ScriptGear - /// - ScriptGear, - - /// - /// ScriptGo - /// - ScriptGo, - - /// - /// ScriptKey - /// - ScriptKey, - - /// - /// ScriptLightning - /// - ScriptLightning, - - /// - /// ScriptLink - /// - ScriptLink, - - /// - /// ScriptPalette - /// - ScriptPalette, - - /// - /// ScriptSave - /// - ScriptSave, - - /// - /// ScriptStart - /// - ScriptStart, - - /// - /// ScriptStop - /// - ScriptStop, - - /// - /// Seasons - /// - Seasons, - - /// - /// SectionCollapsed - /// - SectionCollapsed, - - /// - /// SectionExpanded - /// - SectionExpanded, - - /// - /// Server - /// - Server, - - /// - /// ServerAdd - /// - ServerAdd, - - /// - /// ServerChart - /// - ServerChart, - - /// - /// ServerCompressed - /// - ServerCompressed, - - /// - /// ServerConnect - /// - ServerConnect, - - /// - /// ServerDatabase - /// - ServerDatabase, - - /// - /// ServerDelete - /// - ServerDelete, - - /// - /// ServerEdit - /// - ServerEdit, - - /// - /// ServerError - /// - ServerError, - - /// - /// ServerGo - /// - ServerGo, - - /// - /// ServerKey - /// - ServerKey, - - /// - /// ServerLightning - /// - ServerLightning, - - /// - /// ServerLink - /// - ServerLink, - - /// - /// ServerStart - /// - ServerStart, - - /// - /// ServerStop - /// - ServerStop, - - /// - /// ServerUncompressed - /// - ServerUncompressed, - - /// - /// ServerWrench - /// - ServerWrench, - - /// - /// Shading - /// - Shading, - - /// - /// ShapesMany - /// - ShapesMany, - - /// - /// ShapesManySelect - /// - ShapesManySelect, - - /// - /// Shape3d - /// - Shape3d, - - /// - /// ShapeAlignBottom - /// - ShapeAlignBottom, - - /// - /// ShapeAlignCenter - /// - ShapeAlignCenter, - - /// - /// ShapeAlignLeft - /// - ShapeAlignLeft, - - /// - /// ShapeAlignMiddle - /// - ShapeAlignMiddle, - - /// - /// ShapeAlignRight - /// - ShapeAlignRight, - - /// - /// ShapeAlignTop - /// - ShapeAlignTop, - - /// - /// ShapeFlipHorizontal - /// - ShapeFlipHorizontal, - - /// - /// ShapeFlipVertical - /// - ShapeFlipVertical, - - /// - /// ShapeGroup - /// - ShapeGroup, - - /// - /// ShapeHandles - /// - ShapeHandles, - - /// - /// ShapeMoveBack - /// - ShapeMoveBack, - - /// - /// ShapeMoveBackwards - /// - ShapeMoveBackwards, - - /// - /// ShapeMoveForwards - /// - ShapeMoveForwards, - - /// - /// ShapeMoveFront - /// - ShapeMoveFront, - - /// - /// ShapeRotateAnticlockwise - /// - ShapeRotateAnticlockwise, - - /// - /// ShapeRotateClockwise - /// - ShapeRotateClockwise, - - /// - /// ShapeShadeA - /// - ShapeShadeA, - - /// - /// ShapeShadeB - /// - ShapeShadeB, - - /// - /// ShapeShadeC - /// - ShapeShadeC, - - /// - /// ShapeShadow - /// - ShapeShadow, - - /// - /// ShapeShadowToggle - /// - ShapeShadowToggle, - - /// - /// ShapeSquare - /// - ShapeSquare, - - /// - /// ShapeSquareAdd - /// - ShapeSquareAdd, - - /// - /// ShapeSquareDelete - /// - ShapeSquareDelete, - - /// - /// ShapeSquareEdit - /// - ShapeSquareEdit, - - /// - /// ShapeSquareError - /// - ShapeSquareError, - - /// - /// ShapeSquareGo - /// - ShapeSquareGo, - - /// - /// ShapeSquareKey - /// - ShapeSquareKey, - - /// - /// ShapeSquareLink - /// - ShapeSquareLink, - - /// - /// ShapeSquareSelect - /// - ShapeSquareSelect, - - /// - /// ShapeUngroup - /// - ShapeUngroup, - - /// - /// Share - /// - Share, - - /// - /// Shield - /// - Shield, - - /// - /// ShieldAdd - /// - ShieldAdd, - - /// - /// ShieldDelete - /// - ShieldDelete, - - /// - /// ShieldError - /// - ShieldError, - - /// - /// ShieldGo - /// - ShieldGo, - - /// - /// ShieldRainbow - /// - ShieldRainbow, - - /// - /// ShieldSilver - /// - ShieldSilver, - - /// - /// ShieldStart - /// - ShieldStart, - - /// - /// ShieldStop - /// - ShieldStop, - - /// - /// Sitemap - /// - Sitemap, - - /// - /// SitemapColor - /// - SitemapColor, - - /// - /// Smartphone - /// - Smartphone, - - /// - /// SmartphoneAdd - /// - SmartphoneAdd, - - /// - /// SmartphoneConnect - /// - SmartphoneConnect, - - /// - /// SmartphoneDelete - /// - SmartphoneDelete, - - /// - /// SmartphoneDisk - /// - SmartphoneDisk, - - /// - /// SmartphoneEdit - /// - SmartphoneEdit, - - /// - /// SmartphoneError - /// - SmartphoneError, - - /// - /// SmartphoneGo - /// - SmartphoneGo, - - /// - /// SmartphoneKey - /// - SmartphoneKey, - - /// - /// SmartphoneWrench - /// - SmartphoneWrench, - - /// - /// SortAscending - /// - SortAscending, - - /// - /// SortDescending - /// - SortDescending, - - /// - /// Sound - /// - Sound, - - /// - /// SoundAdd - /// - SoundAdd, - - /// - /// SoundDelete - /// - SoundDelete, - - /// - /// SoundHigh - /// - SoundHigh, - - /// - /// SoundIn - /// - SoundIn, - - /// - /// SoundLow - /// - SoundLow, - - /// - /// SoundMute - /// - SoundMute, - - /// - /// SoundNone - /// - SoundNone, - - /// - /// SoundOut - /// - SoundOut, - - /// - /// Spellcheck - /// - Spellcheck, - - /// - /// Sport8ball - /// - Sport8ball, - - /// - /// SportBasketball - /// - SportBasketball, - - /// - /// SportFootball - /// - SportFootball, - - /// - /// SportGolf - /// - SportGolf, - - /// - /// SportGolfPractice - /// - SportGolfPractice, - - /// - /// SportRaquet - /// - SportRaquet, - - /// - /// SportShuttlecock - /// - SportShuttlecock, - - /// - /// SportSoccer - /// - SportSoccer, - - /// - /// SportTennis - /// - SportTennis, - - /// - /// Star - /// - Star, - - /// - /// StarBronze - /// - StarBronze, - - /// - /// StarBronzeHalfGrey - /// - StarBronzeHalfGrey, - - /// - /// StarGold - /// - StarGold, - - /// - /// StarGoldHalfGrey - /// - StarGoldHalfGrey, - - /// - /// StarGoldHalfSilver - /// - StarGoldHalfSilver, - - /// - /// StarGrey - /// - StarGrey, - - /// - /// StarHalfGrey - /// - StarHalfGrey, - - /// - /// StarSilver - /// - StarSilver, - - /// - /// StatusAway - /// - StatusAway, - - /// - /// StatusBeRightBack - /// - StatusBeRightBack, - - /// - /// StatusBusy - /// - StatusBusy, - - /// - /// StatusInvisible - /// - StatusInvisible, - - /// - /// StatusOffline - /// - StatusOffline, - - /// - /// StatusOnline - /// - StatusOnline, - - /// - /// Stop - /// - Stop, - - /// - /// StopBlue - /// - StopBlue, - - /// - /// StopGreen - /// - StopGreen, - - /// - /// StopRed - /// - StopRed, - - /// - /// Style - /// - Style, - - /// - /// StyleAdd - /// - StyleAdd, - - /// - /// StyleDelete - /// - StyleDelete, - - /// - /// StyleEdit - /// - StyleEdit, - - /// - /// StyleGo - /// - StyleGo, - - /// - /// Sum - /// - Sum, - - /// - /// Tab - /// - Tab, - - /// - /// Table - /// - Table, - - /// - /// TableAdd - /// - TableAdd, - - /// - /// TableCell - /// - TableCell, - - /// - /// TableColumn - /// - TableColumn, - - /// - /// TableColumnAdd - /// - TableColumnAdd, - - /// - /// TableColumnDelete - /// - TableColumnDelete, - - /// - /// TableConnect - /// - TableConnect, - - /// - /// TableDelete - /// - TableDelete, - - /// - /// TableEdit - /// - TableEdit, - - /// - /// TableError - /// - TableError, - - /// - /// TableGear - /// - TableGear, - - /// - /// TableGo - /// - TableGo, - - /// - /// TableKey - /// - TableKey, - - /// - /// TableLightning - /// - TableLightning, - - /// - /// TableLink - /// - TableLink, - - /// - /// TableMultiple - /// - TableMultiple, - - /// - /// TableRefresh - /// - TableRefresh, - - /// - /// TableRelationship - /// - TableRelationship, - - /// - /// TableRow - /// - TableRow, - - /// - /// TableRowDelete - /// - TableRowDelete, - - /// - /// TableRowInsert - /// - TableRowInsert, - - /// - /// TableSave - /// - TableSave, - - /// - /// TableSort - /// - TableSort, - - /// - /// TabAdd - /// - TabAdd, - - /// - /// TabBlue - /// - TabBlue, - - /// - /// TabDelete - /// - TabDelete, - - /// - /// TabEdit - /// - TabEdit, - - /// - /// TabGo - /// - TabGo, - - /// - /// TabGreen - /// - TabGreen, - - /// - /// TabRed - /// - TabRed, - - /// - /// Tag - /// - Tag, - - /// - /// TagsGrey - /// - TagsGrey, - - /// - /// TagsRed - /// - TagsRed, - - /// - /// TagBlue - /// - TagBlue, - - /// - /// TagBlueAdd - /// - TagBlueAdd, - - /// - /// TagBlueDelete - /// - TagBlueDelete, - - /// - /// TagBlueEdit - /// - TagBlueEdit, - - /// - /// TagGreen - /// - TagGreen, - - /// - /// TagOrange - /// - TagOrange, - - /// - /// TagPink - /// - TagPink, - - /// - /// TagPurple - /// - TagPurple, - - /// - /// TagRed - /// - TagRed, - - /// - /// TagYellow - /// - TagYellow, - - /// - /// Telephone - /// - Telephone, - - /// - /// TelephoneAdd - /// - TelephoneAdd, - - /// - /// TelephoneDelete - /// - TelephoneDelete, - - /// - /// TelephoneEdit - /// - TelephoneEdit, - - /// - /// TelephoneError - /// - TelephoneError, - - /// - /// TelephoneGo - /// - TelephoneGo, - - /// - /// TelephoneKey - /// - TelephoneKey, - - /// - /// TelephoneLink - /// - TelephoneLink, - - /// - /// TelephoneRed - /// - TelephoneRed, - - /// - /// Television - /// - Television, - - /// - /// TelevisionAdd - /// - TelevisionAdd, - - /// - /// TelevisionDelete - /// - TelevisionDelete, - - /// - /// TelevisionIn - /// - TelevisionIn, - - /// - /// TelevisionOff - /// - TelevisionOff, - - /// - /// TelevisionOut - /// - TelevisionOut, - - /// - /// TelevisionStar - /// - TelevisionStar, - - /// - /// Textfield - /// - Textfield, - - /// - /// TextfieldAdd - /// - TextfieldAdd, - - /// - /// TextfieldDelete - /// - TextfieldDelete, - - /// - /// TextfieldKey - /// - TextfieldKey, - - /// - /// TextfieldRename - /// - TextfieldRename, - - /// - /// TextAb - /// - TextAb, - - /// - /// TextAlignCenter - /// - TextAlignCenter, - - /// - /// TextAlignJustify - /// - TextAlignJustify, - - /// - /// TextAlignLeft - /// - TextAlignLeft, - - /// - /// TextAlignRight - /// - TextAlignRight, - - /// - /// TextAllcaps - /// - TextAllcaps, - - /// - /// TextBold - /// - TextBold, - - /// - /// TextColumns - /// - TextColumns, - - /// - /// TextComplete - /// - TextComplete, - - /// - /// TextDirection - /// - TextDirection, - - /// - /// TextDoubleUnderline - /// - TextDoubleUnderline, - - /// - /// TextDropcaps - /// - TextDropcaps, - - /// - /// TextFit - /// - TextFit, - - /// - /// TextFlip - /// - TextFlip, - - /// - /// TextFontDefault - /// - TextFontDefault, - - /// - /// TextHeading1 - /// - TextHeading1, - - /// - /// TextHeading2 - /// - TextHeading2, - - /// - /// TextHeading3 - /// - TextHeading3, - - /// - /// TextHeading4 - /// - TextHeading4, - - /// - /// TextHeading5 - /// - TextHeading5, - - /// - /// TextHeading6 - /// - TextHeading6, - - /// - /// TextHorizontalrule - /// - TextHorizontalrule, - - /// - /// TextIndent - /// - TextIndent, - - /// - /// TextIndentRemove - /// - TextIndentRemove, - - /// - /// TextInverse - /// - TextInverse, - - /// - /// TextItalic - /// - TextItalic, - - /// - /// TextKerning - /// - TextKerning, - - /// - /// TextLeftToRight - /// - TextLeftToRight, - - /// - /// TextLetterspacing - /// - TextLetterspacing, - - /// - /// TextLetterOmega - /// - TextLetterOmega, - - /// - /// TextLinespacing - /// - TextLinespacing, - - /// - /// TextListBullets - /// - TextListBullets, - - /// - /// TextListNumbers - /// - TextListNumbers, - - /// - /// TextLowercase - /// - TextLowercase, - - /// - /// TextLowercaseA - /// - TextLowercaseA, - - /// - /// TextMirror - /// - TextMirror, - - /// - /// TextPaddingBottom - /// - TextPaddingBottom, - - /// - /// TextPaddingLeft - /// - TextPaddingLeft, - - /// - /// TextPaddingRight - /// - TextPaddingRight, - - /// - /// TextPaddingTop - /// - TextPaddingTop, - - /// - /// TextReplace - /// - TextReplace, - - /// - /// TextRightToLeft - /// - TextRightToLeft, - - /// - /// TextRotate0 - /// - TextRotate0, - - /// - /// TextRotate180 - /// - TextRotate180, - - /// - /// TextRotate270 - /// - TextRotate270, - - /// - /// TextRotate90 - /// - TextRotate90, - - /// - /// TextRuler - /// - TextRuler, - - /// - /// TextShading - /// - TextShading, - - /// - /// TextSignature - /// - TextSignature, - - /// - /// TextSmallcaps - /// - TextSmallcaps, - - /// - /// TextSpelling - /// - TextSpelling, - - /// - /// TextStrikethrough - /// - TextStrikethrough, - - /// - /// TextSubscript - /// - TextSubscript, - - /// - /// TextSuperscript - /// - TextSuperscript, - - /// - /// TextTab - /// - TextTab, - - /// - /// TextUnderline - /// - TextUnderline, - - /// - /// TextUppercase - /// - TextUppercase, - - /// - /// Theme - /// - Theme, - - /// - /// ThumbDown - /// - ThumbDown, - - /// - /// ThumbUp - /// - ThumbUp, - - /// - /// Tick - /// - Tick, - - /// - /// Time - /// - Time, - - /// - /// TimelineMarker - /// - TimelineMarker, - - /// - /// TimeAdd - /// - TimeAdd, - - /// - /// TimeDelete - /// - TimeDelete, - - /// - /// TimeGo - /// - TimeGo, - - /// - /// TimeGreen - /// - TimeGreen, - - /// - /// TimeRed - /// - TimeRed, - - /// - /// Transmit - /// - Transmit, - - /// - /// TransmitAdd - /// - TransmitAdd, - - /// - /// TransmitBlue - /// - TransmitBlue, - - /// - /// TransmitDelete - /// - TransmitDelete, - - /// - /// TransmitEdit - /// - TransmitEdit, - - /// - /// TransmitError - /// - TransmitError, - - /// - /// TransmitGo - /// - TransmitGo, - - /// - /// TransmitRed - /// - TransmitRed, - - /// - /// Tux - /// - Tux, - - /// - /// User - /// - User, - - /// - /// UserAdd - /// - UserAdd, - - /// - /// UserAlert - /// - UserAlert, - - /// - /// UserB - /// - UserB, - - /// - /// UserBrown - /// - UserBrown, - - /// - /// UserComment - /// - UserComment, - - /// - /// UserCross - /// - UserCross, - - /// - /// UserDelete - /// - UserDelete, - - /// - /// UserEarth - /// - UserEarth, - - /// - /// UserEdit - /// - UserEdit, - - /// - /// UserFemale - /// - UserFemale, - - /// - /// UserGo - /// - UserGo, - - /// - /// UserGray - /// - UserGray, - - /// - /// UserGrayCool - /// - UserGrayCool, - - /// - /// UserGreen - /// - UserGreen, - - /// - /// UserHome - /// - UserHome, - - /// - /// UserKey - /// - UserKey, - - /// - /// UserMagnify - /// - UserMagnify, - - /// - /// UserMature - /// - UserMature, - - /// - /// UserOrange - /// - UserOrange, - - /// - /// UserRed - /// - UserRed, - - /// - /// UserStar - /// - UserStar, - - /// - /// UserSuit - /// - UserSuit, - - /// - /// UserSuitBlack - /// - UserSuitBlack, - - /// - /// UserTick - /// - UserTick, - - /// - /// Vcard - /// - Vcard, - - /// - /// VcardAdd - /// - VcardAdd, - - /// - /// VcardDelete - /// - VcardDelete, - - /// - /// VcardEdit - /// - VcardEdit, - - /// - /// VcardKey - /// - VcardKey, - - /// - /// Vector - /// - Vector, - - /// - /// VectorAdd - /// - VectorAdd, - - /// - /// VectorDelete - /// - VectorDelete, - - /// - /// VectorKey - /// - VectorKey, - - /// - /// Wand - /// - Wand, - - /// - /// WeatherCloud - /// - WeatherCloud, - - /// - /// WeatherClouds - /// - WeatherClouds, - - /// - /// WeatherCloudy - /// - WeatherCloudy, - - /// - /// WeatherCloudyRain - /// - WeatherCloudyRain, - - /// - /// WeatherLightning - /// - WeatherLightning, - - /// - /// WeatherRain - /// - WeatherRain, - - /// - /// WeatherSnow - /// - WeatherSnow, - - /// - /// WeatherSun - /// - WeatherSun, - - /// - /// Webcam - /// - Webcam, - - /// - /// WebcamAdd - /// - WebcamAdd, - - /// - /// WebcamConnect - /// - WebcamConnect, - - /// - /// WebcamDelete - /// - WebcamDelete, - - /// - /// WebcamError - /// - WebcamError, - - /// - /// WebcamStart - /// - WebcamStart, - - /// - /// WebcamStop - /// - WebcamStop, - - /// - /// World - /// - World, - - /// - /// WorldAdd - /// - WorldAdd, - - /// - /// WorldConnect - /// - WorldConnect, - - /// - /// WorldDawn - /// - WorldDawn, - - /// - /// WorldDelete - /// - WorldDelete, - - /// - /// WorldEdit - /// - WorldEdit, - - /// - /// WorldGo - /// - WorldGo, - - /// - /// WorldKey - /// - WorldKey, - - /// - /// WorldLink - /// - WorldLink, - - /// - /// WorldNight - /// - WorldNight, - - /// - /// WorldOrbit - /// - WorldOrbit, - - /// - /// Wrench - /// - Wrench, - - /// - /// WrenchOrange - /// - WrenchOrange, - - /// - /// Xhtml - /// - Xhtml, - - /// - /// XhtmlAdd - /// - XhtmlAdd, - - /// - /// XhtmlDelete - /// - XhtmlDelete, - - /// - /// XhtmlError - /// - XhtmlError, - - /// - /// XhtmlGo - /// - XhtmlGo, - - /// - /// XhtmlValid - /// - XhtmlValid, - - /// - /// Zoom - /// - Zoom, - - /// - /// ZoomIn - /// - ZoomIn, - - /// - /// ZoomOut - /// - ZoomOut, - - /// - /// SystemClose - /// - SystemClose, - - /// - /// SystemNew - /// - SystemNew, - - /// - /// SystemSave - /// - SystemSave, - - /// - /// SystemSaveClose - /// - SystemSaveClose, - - /// - /// SystemSaveNew - /// - SystemSaveNew, - - /// - /// SystemSearch - /// - SystemSearch - } - - /// - /// 预定义图标名称 - /// - public static partial class IconHelper - { - /// - /// 获取图标名称 - /// - /// - /// - public static string GetName(Icon type) - { - string result = String.Empty; - - switch (type) - { - case Icon.None: - result = ""; - break; - case Icon.Accept: - result = "accept.png"; - break; - case Icon.Add: - result = "add.png"; - break; - case Icon.Anchor: - result = "anchor.png"; - break; - case Icon.Application: - result = "application.png"; - break; - case Icon.ApplicationAdd: - result = "application_add.png"; - break; - case Icon.ApplicationCascade: - result = "application_cascade.png"; - break; - case Icon.ApplicationDelete: - result = "application_delete.png"; - break; - case Icon.ApplicationDouble: - result = "application_double.png"; - break; - case Icon.ApplicationEdit: - result = "application_edit.png"; - break; - case Icon.ApplicationError: - result = "application_error.png"; - break; - case Icon.ApplicationForm: - result = "application_form.png"; - break; - case Icon.ApplicationFormAdd: - result = "application_form_add.png"; - break; - case Icon.ApplicationFormDelete: - result = "application_form_delete.png"; - break; - case Icon.ApplicationFormEdit: - result = "application_form_edit.png"; - break; - case Icon.ApplicationFormMagnify: - result = "application_form_magnify.png"; - break; - case Icon.ApplicationGet: - result = "application_get.png"; - break; - case Icon.ApplicationGo: - result = "application_go.png"; - break; - case Icon.ApplicationHome: - result = "application_home.png"; - break; - case Icon.ApplicationKey: - result = "application_key.png"; - break; - case Icon.ApplicationLightning: - result = "application_lightning.png"; - break; - case Icon.ApplicationLink: - result = "application_link.png"; - break; - case Icon.ApplicationOsx: - result = "application_osx.png"; - break; - case Icon.ApplicationOsxAdd: - result = "application_osx_add.png"; - break; - case Icon.ApplicationOsxCascade: - result = "application_osx_cascade.png"; - break; - case Icon.ApplicationOsxDelete: - result = "application_osx_delete.png"; - break; - case Icon.ApplicationOsxDouble: - result = "application_osx_double.png"; - break; - case Icon.ApplicationOsxError: - result = "application_osx_error.png"; - break; - case Icon.ApplicationOsxGet: - result = "application_osx_get.png"; - break; - case Icon.ApplicationOsxGo: - result = "application_osx_go.png"; - break; - case Icon.ApplicationOsxHome: - result = "application_osx_home.png"; - break; - case Icon.ApplicationOsxKey: - result = "application_osx_key.png"; - break; - case Icon.ApplicationOsxLightning: - result = "application_osx_lightning.png"; - break; - case Icon.ApplicationOsxLink: - result = "application_osx_link.png"; - break; - case Icon.ApplicationOsxSplit: - result = "application_osx_split.png"; - break; - case Icon.ApplicationOsxStart: - result = "application_osx_start.png"; - break; - case Icon.ApplicationOsxStop: - result = "application_osx_stop.png"; - break; - case Icon.ApplicationOsxTerminal: - result = "application_osx_terminal.png"; - break; - case Icon.ApplicationPut: - result = "application_put.png"; - break; - case Icon.ApplicationSideBoxes: - result = "application_side_boxes.png"; - break; - case Icon.ApplicationSideContract: - result = "application_side_contract.png"; - break; - case Icon.ApplicationSideExpand: - result = "application_side_expand.png"; - break; - case Icon.ApplicationSideList: - result = "application_side_list.png"; - break; - case Icon.ApplicationSideTree: - result = "application_side_tree.png"; - break; - case Icon.ApplicationSplit: - result = "application_split.png"; - break; - case Icon.ApplicationStart: - result = "application_start.png"; - break; - case Icon.ApplicationStop: - result = "application_stop.png"; - break; - case Icon.ApplicationTileHorizontal: - result = "application_tile_horizontal.png"; - break; - case Icon.ApplicationTileVertical: - result = "application_tile_vertical.png"; - break; - case Icon.ApplicationViewColumns: - result = "application_view_columns.png"; - break; - case Icon.ApplicationViewDetail: - result = "application_view_detail.png"; - break; - case Icon.ApplicationViewGallery: - result = "application_view_gallery.png"; - break; - case Icon.ApplicationViewIcons: - result = "application_view_icons.png"; - break; - case Icon.ApplicationViewList: - result = "application_view_list.png"; - break; - case Icon.ApplicationViewTile: - result = "application_view_tile.png"; - break; - case Icon.ApplicationXp: - result = "application_xp.png"; - break; - case Icon.ApplicationXpTerminal: - result = "application_xp_terminal.png"; - break; - case Icon.ArrowBranch: - result = "arrow_branch.png"; - break; - case Icon.ArrowDivide: - result = "arrow_divide.png"; - break; - case Icon.ArrowDown: - result = "arrow_down.png"; - break; - case Icon.ArrowEw: - result = "arrow_ew.png"; - break; - case Icon.ArrowIn: - result = "arrow_in.png"; - break; - case Icon.ArrowInout: - result = "arrow_inout.png"; - break; - case Icon.ArrowInLonger: - result = "arrow_in_longer.png"; - break; - case Icon.ArrowJoin: - result = "arrow_join.png"; - break; - case Icon.ArrowLeft: - result = "arrow_left.png"; - break; - case Icon.ArrowMerge: - result = "arrow_merge.png"; - break; - case Icon.ArrowNe: - result = "arrow_ne.png"; - break; - case Icon.ArrowNs: - result = "arrow_ns.png"; - break; - case Icon.ArrowNsew: - result = "arrow_nsew.png"; - break; - case Icon.ArrowNw: - result = "arrow_nw.png"; - break; - case Icon.ArrowNwNeSwSe: - result = "arrow_nw_ne_sw_se.png"; - break; - case Icon.ArrowNwSe: - result = "arrow_nw_se.png"; - break; - case Icon.ArrowOut: - result = "arrow_out.png"; - break; - case Icon.ArrowOutLonger: - result = "arrow_out_longer.png"; - break; - case Icon.ArrowRedo: - result = "arrow_redo.png"; - break; - case Icon.ArrowRefresh: - result = "arrow_refresh.png"; - break; - case Icon.ArrowRefreshSmall: - result = "arrow_refresh_small.png"; - break; - case Icon.ArrowRight: - result = "arrow_right.png"; - break; - case Icon.ArrowRotateAnticlockwise: - result = "arrow_rotate_anticlockwise.png"; - break; - case Icon.ArrowRotateClockwise: - result = "arrow_rotate_clockwise.png"; - break; - case Icon.ArrowSe: - result = "arrow_se.png"; - break; - case Icon.ArrowSw: - result = "arrow_sw.png"; - break; - case Icon.ArrowSwitch: - result = "arrow_switch.png"; - break; - case Icon.ArrowSwitchBluegreen: - result = "arrow_switch_bluegreen.png"; - break; - case Icon.ArrowSwNe: - result = "arrow_sw_ne.png"; - break; - case Icon.ArrowTurnLeft: - result = "arrow_turn_left.png"; - break; - case Icon.ArrowTurnRight: - result = "arrow_turn_right.png"; - break; - case Icon.ArrowUndo: - result = "arrow_undo.png"; - break; - case Icon.ArrowUp: - result = "arrow_up.png"; - break; - case Icon.AsteriskOrange: - result = "asterisk_orange.png"; - break; - case Icon.AsteriskRed: - result = "asterisk_red.png"; - break; - case Icon.AsteriskYellow: - result = "asterisk_yellow.png"; - break; - case Icon.Attach: - result = "attach.png"; - break; - case Icon.AwardStarAdd: - result = "award_star_add.png"; - break; - case Icon.AwardStarBronze1: - result = "award_star_bronze_1.png"; - break; - case Icon.AwardStarBronze2: - result = "award_star_bronze_2.png"; - break; - case Icon.AwardStarBronze3: - result = "award_star_bronze_3.png"; - break; - case Icon.AwardStarDelete: - result = "award_star_delete.png"; - break; - case Icon.AwardStarGold1: - result = "award_star_gold_1.png"; - break; - case Icon.AwardStarGold2: - result = "award_star_gold_2.png"; - break; - case Icon.AwardStarGold3: - result = "award_star_gold_3.png"; - break; - case Icon.AwardStarSilver1: - result = "award_star_silver_1.png"; - break; - case Icon.AwardStarSilver2: - result = "award_star_silver_2.png"; - break; - case Icon.AwardStarSilver3: - result = "award_star_silver_3.png"; - break; - case Icon.Basket: - result = "basket.png"; - break; - case Icon.BasketAdd: - result = "basket_add.png"; - break; - case Icon.BasketDelete: - result = "basket_delete.png"; - break; - case Icon.BasketEdit: - result = "basket_edit.png"; - break; - case Icon.BasketError: - result = "basket_error.png"; - break; - case Icon.BasketGo: - result = "basket_go.png"; - break; - case Icon.BasketPut: - result = "basket_put.png"; - break; - case Icon.BasketRemove: - result = "basket_remove.png"; - break; - case Icon.Bell: - result = "bell.png"; - break; - case Icon.BellAdd: - result = "bell_add.png"; - break; - case Icon.BellDelete: - result = "bell_delete.png"; - break; - case Icon.BellError: - result = "bell_error.png"; - break; - case Icon.BellGo: - result = "bell_go.png"; - break; - case Icon.BellLink: - result = "bell_link.png"; - break; - case Icon.BellSilver: - result = "bell_silver.png"; - break; - case Icon.BellSilverStart: - result = "bell_silver_start.png"; - break; - case Icon.BellSilverStop: - result = "bell_silver_stop.png"; - break; - case Icon.BellStart: - result = "bell_start.png"; - break; - case Icon.BellStop: - result = "bell_stop.png"; - break; - case Icon.Bin: - result = "bin.png"; - break; - case Icon.BinClosed: - result = "bin_closed.png"; - break; - case Icon.BinEmpty: - result = "bin_empty.png"; - break; - case Icon.Blank: - result = "blank.png"; - break; - case Icon.Bomb: - result = "bomb.png"; - break; - case Icon.Book: - result = "book.png"; - break; - case Icon.Bookmark: - result = "bookmark.png"; - break; - case Icon.BookmarkAdd: - result = "bookmark_add.png"; - break; - case Icon.BookmarkDelete: - result = "bookmark_delete.png"; - break; - case Icon.BookmarkEdit: - result = "bookmark_edit.png"; - break; - case Icon.BookmarkError: - result = "bookmark_error.png"; - break; - case Icon.BookmarkGo: - result = "bookmark_go.png"; - break; - case Icon.BookAdd: - result = "book_add.png"; - break; - case Icon.BookAddresses: - result = "book_addresses.png"; - break; - case Icon.BookAddressesAdd: - result = "book_addresses_add.png"; - break; - case Icon.BookAddressesDelete: - result = "book_addresses_delete.png"; - break; - case Icon.BookAddressesEdit: - result = "book_addresses_edit.png"; - break; - case Icon.BookAddressesError: - result = "book_addresses_error.png"; - break; - case Icon.BookAddressesKey: - result = "book_addresses_key.png"; - break; - case Icon.BookDelete: - result = "book_delete.png"; - break; - case Icon.BookEdit: - result = "book_edit.png"; - break; - case Icon.BookError: - result = "book_error.png"; - break; - case Icon.BookGo: - result = "book_go.png"; - break; - case Icon.BookKey: - result = "book_key.png"; - break; - case Icon.BookLink: - result = "book_link.png"; - break; - case Icon.BookMagnify: - result = "book_magnify.png"; - break; - case Icon.BookNext: - result = "book_next.png"; - break; - case Icon.BookOpen: - result = "book_open.png"; - break; - case Icon.BookOpenMark: - result = "book_open_mark.png"; - break; - case Icon.BookPrevious: - result = "book_previous.png"; - break; - case Icon.BookRed: - result = "book_red.png"; - break; - case Icon.BookTabs: - result = "book_tabs.png"; - break; - case Icon.BorderAll: - result = "border_all.png"; - break; - case Icon.BorderBottom: - result = "border_bottom.png"; - break; - case Icon.BorderDraw: - result = "border_draw.png"; - break; - case Icon.BorderInner: - result = "border_inner.png"; - break; - case Icon.BorderInnerHorizontal: - result = "border_inner_horizontal.png"; - break; - case Icon.BorderInnerVertical: - result = "border_inner_vertical.png"; - break; - case Icon.BorderLeft: - result = "border_left.png"; - break; - case Icon.BorderNone: - result = "border_none.png"; - break; - case Icon.BorderOuter: - result = "border_outer.png"; - break; - case Icon.BorderRight: - result = "border_right.png"; - break; - case Icon.BorderTop: - result = "border_top.png"; - break; - case Icon.Box: - result = "box.png"; - break; - case Icon.BoxError: - result = "box_error.png"; - break; - case Icon.BoxPicture: - result = "box_picture.png"; - break; - case Icon.BoxWorld: - result = "box_world.png"; - break; - case Icon.Brick: - result = "brick.png"; - break; - case Icon.Bricks: - result = "bricks.png"; - break; - case Icon.BrickAdd: - result = "brick_add.png"; - break; - case Icon.BrickDelete: - result = "brick_delete.png"; - break; - case Icon.BrickEdit: - result = "brick_edit.png"; - break; - case Icon.BrickError: - result = "brick_error.png"; - break; - case Icon.BrickGo: - result = "brick_go.png"; - break; - case Icon.BrickLink: - result = "brick_link.png"; - break; - case Icon.BrickMagnify: - result = "brick_magnify.png"; - break; - case Icon.Briefcase: - result = "briefcase.png"; - break; - case Icon.Bug: - result = "bug.png"; - break; - case Icon.BugAdd: - result = "bug_add.png"; - break; - case Icon.BugDelete: - result = "bug_delete.png"; - break; - case Icon.BugEdit: - result = "bug_edit.png"; - break; - case Icon.BugError: - result = "bug_error.png"; - break; - case Icon.BugFix: - result = "bug_fix.png"; - break; - case Icon.BugGo: - result = "bug_go.png"; - break; - case Icon.BugLink: - result = "bug_link.png"; - break; - case Icon.BugMagnify: - result = "bug_magnify.png"; - break; - case Icon.Build: - result = "build.png"; - break; - case Icon.Building: - result = "building.png"; - break; - case Icon.BuildingAdd: - result = "building_add.png"; - break; - case Icon.BuildingDelete: - result = "building_delete.png"; - break; - case Icon.BuildingEdit: - result = "building_edit.png"; - break; - case Icon.BuildingError: - result = "building_error.png"; - break; - case Icon.BuildingGo: - result = "building_go.png"; - break; - case Icon.BuildingKey: - result = "building_key.png"; - break; - case Icon.BuildingLink: - result = "building_link.png"; - break; - case Icon.BuildCancel: - result = "build_cancel.png"; - break; - case Icon.BulletAdd: - result = "bullet_add.png"; - break; - case Icon.BulletArrowBottom: - result = "bullet_arrow_bottom.png"; - break; - case Icon.BulletArrowDown: - result = "bullet_arrow_down.png"; - break; - case Icon.BulletArrowTop: - result = "bullet_arrow_top.png"; - break; - case Icon.BulletArrowUp: - result = "bullet_arrow_up.png"; - break; - case Icon.BulletBlack: - result = "bullet_black.png"; - break; - case Icon.BulletBlue: - result = "bullet_blue.png"; - break; - case Icon.BulletConnect: - result = "bullet_connect.png"; - break; - case Icon.BulletCross: - result = "bullet_cross.png"; - break; - case Icon.BulletDatabase: - result = "bullet_database.png"; - break; - case Icon.BulletDatabaseYellow: - result = "bullet_database_yellow.png"; - break; - case Icon.BulletDelete: - result = "bullet_delete.png"; - break; - case Icon.BulletDisk: - result = "bullet_disk.png"; - break; - case Icon.BulletEarth: - result = "bullet_earth.png"; - break; - case Icon.BulletEdit: - result = "bullet_edit.png"; - break; - case Icon.BulletEject: - result = "bullet_eject.png"; - break; - case Icon.BulletError: - result = "bullet_error.png"; - break; - case Icon.BulletFeed: - result = "bullet_feed.png"; - break; - case Icon.BulletGet: - result = "bullet_get.png"; - break; - case Icon.BulletGo: - result = "bullet_go.png"; - break; - case Icon.BulletGreen: - result = "bullet_green.png"; - break; - case Icon.BulletHome: - result = "bullet_home.png"; - break; - case Icon.BulletKey: - result = "bullet_key.png"; - break; - case Icon.BulletLeft: - result = "bullet_left.png"; - break; - case Icon.BulletLightning: - result = "bullet_lightning.png"; - break; - case Icon.BulletMagnify: - result = "bullet_magnify.png"; - break; - case Icon.BulletMinus: - result = "bullet_minus.png"; - break; - case Icon.BulletOrange: - result = "bullet_orange.png"; - break; - case Icon.BulletPageWhite: - result = "bullet_page_white.png"; - break; - case Icon.BulletPicture: - result = "bullet_picture.png"; - break; - case Icon.BulletPink: - result = "bullet_pink.png"; - break; - case Icon.BulletPlus: - result = "bullet_plus.png"; - break; - case Icon.BulletPurple: - result = "bullet_purple.png"; - break; - case Icon.BulletRed: - result = "bullet_red.png"; - break; - case Icon.BulletRight: - result = "bullet_right.png"; - break; - case Icon.BulletShape: - result = "bullet_shape.png"; - break; - case Icon.BulletSparkle: - result = "bullet_sparkle.png"; - break; - case Icon.BulletStar: - result = "bullet_star.png"; - break; - case Icon.BulletStart: - result = "bullet_start.png"; - break; - case Icon.BulletStop: - result = "bullet_stop.png"; - break; - case Icon.BulletStopAlt: - result = "bullet_stop_alt.png"; - break; - case Icon.BulletTick: - result = "bullet_tick.png"; - break; - case Icon.BulletToggleMinus: - result = "bullet_toggle_minus.png"; - break; - case Icon.BulletTogglePlus: - result = "bullet_toggle_plus.png"; - break; - case Icon.BulletWhite: - result = "bullet_white.png"; - break; - case Icon.BulletWrench: - result = "bullet_wrench.png"; - break; - case Icon.BulletWrenchRed: - result = "bullet_wrench_red.png"; - break; - case Icon.BulletYellow: - result = "bullet_yellow.png"; - break; - case Icon.Button: - result = "button.png"; - break; - case Icon.Cake: - result = "cake.png"; - break; - case Icon.CakeOut: - result = "cake_out.png"; - break; - case Icon.CakeSliced: - result = "cake_sliced.png"; - break; - case Icon.Calculator: - result = "calculator.png"; - break; - case Icon.CalculatorAdd: - result = "calculator_add.png"; - break; - case Icon.CalculatorDelete: - result = "calculator_delete.png"; - break; - case Icon.CalculatorEdit: - result = "calculator_edit.png"; - break; - case Icon.CalculatorError: - result = "calculator_error.png"; - break; - case Icon.CalculatorLink: - result = "calculator_link.png"; - break; - case Icon.Calendar: - result = "calendar.png"; - break; - case Icon.CalendarAdd: - result = "calendar_add.png"; - break; - case Icon.CalendarDelete: - result = "calendar_delete.png"; - break; - case Icon.CalendarEdit: - result = "calendar_edit.png"; - break; - case Icon.CalendarLink: - result = "calendar_link.png"; - break; - case Icon.CalendarSelectDay: - result = "calendar_select_day.png"; - break; - case Icon.CalendarSelectNone: - result = "calendar_select_none.png"; - break; - case Icon.CalendarSelectWeek: - result = "calendar_select_week.png"; - break; - case Icon.CalendarStar: - result = "calendar_star.png"; - break; - case Icon.CalendarViewDay: - result = "calendar_view_day.png"; - break; - case Icon.CalendarViewMonth: - result = "calendar_view_month.png"; - break; - case Icon.CalendarViewWeek: - result = "calendar_view_week.png"; - break; - case Icon.Camera: - result = "camera.png"; - break; - case Icon.CameraAdd: - result = "camera_add.png"; - break; - case Icon.CameraConnect: - result = "camera_connect.png"; - break; - case Icon.CameraDelete: - result = "camera_delete.png"; - break; - case Icon.CameraEdit: - result = "camera_edit.png"; - break; - case Icon.CameraError: - result = "camera_error.png"; - break; - case Icon.CameraGo: - result = "camera_go.png"; - break; - case Icon.CameraLink: - result = "camera_link.png"; - break; - case Icon.CameraMagnify: - result = "camera_magnify.png"; - break; - case Icon.CameraPicture: - result = "camera_picture.png"; - break; - case Icon.CameraSmall: - result = "camera_small.png"; - break; - case Icon.CameraStart: - result = "camera_start.png"; - break; - case Icon.CameraStop: - result = "camera_stop.png"; - break; - case Icon.Cancel: - result = "cancel.png"; - break; - case Icon.Car: - result = "car.png"; - break; - case Icon.Cart: - result = "cart.png"; - break; - case Icon.CartAdd: - result = "cart_add.png"; - break; - case Icon.CartDelete: - result = "cart_delete.png"; - break; - case Icon.CartEdit: - result = "cart_edit.png"; - break; - case Icon.CartError: - result = "cart_error.png"; - break; - case Icon.CartFull: - result = "cart_full.png"; - break; - case Icon.CartGo: - result = "cart_go.png"; - break; - case Icon.CartMagnify: - result = "cart_magnify.png"; - break; - case Icon.CartPut: - result = "cart_put.png"; - break; - case Icon.CartRemove: - result = "cart_remove.png"; - break; - case Icon.CarAdd: - result = "car_add.png"; - break; - case Icon.CarDelete: - result = "car_delete.png"; - break; - case Icon.CarError: - result = "car_error.png"; - break; - case Icon.CarRed: - result = "car_red.png"; - break; - case Icon.CarStart: - result = "car_start.png"; - break; - case Icon.CarStop: - result = "car_stop.png"; - break; - case Icon.Cd: - result = "cd.png"; - break; - case Icon.Cdr: - result = "cdr.png"; - break; - case Icon.CdrAdd: - result = "cdr_add.png"; - break; - case Icon.CdrBurn: - result = "cdr_burn.png"; - break; - case Icon.CdrCross: - result = "cdr_cross.png"; - break; - case Icon.CdrDelete: - result = "cdr_delete.png"; - break; - case Icon.CdrEdit: - result = "cdr_edit.png"; - break; - case Icon.CdrEject: - result = "cdr_eject.png"; - break; - case Icon.CdrError: - result = "cdr_error.png"; - break; - case Icon.CdrGo: - result = "cdr_go.png"; - break; - case Icon.CdrMagnify: - result = "cdr_magnify.png"; - break; - case Icon.CdrPlay: - result = "cdr_play.png"; - break; - case Icon.CdrStart: - result = "cdr_start.png"; - break; - case Icon.CdrStop: - result = "cdr_stop.png"; - break; - case Icon.CdrStopAlt: - result = "cdr_stop_alt.png"; - break; - case Icon.CdrTick: - result = "cdr_tick.png"; - break; - case Icon.CdAdd: - result = "cd_add.png"; - break; - case Icon.CdBurn: - result = "cd_burn.png"; - break; - case Icon.CdDelete: - result = "cd_delete.png"; - break; - case Icon.CdEdit: - result = "cd_edit.png"; - break; - case Icon.CdEject: - result = "cd_eject.png"; - break; - case Icon.CdGo: - result = "cd_go.png"; - break; - case Icon.CdMagnify: - result = "cd_magnify.png"; - break; - case Icon.CdPlay: - result = "cd_play.png"; - break; - case Icon.CdStop: - result = "cd_stop.png"; - break; - case Icon.CdStopAlt: - result = "cd_stop_alt.png"; - break; - case Icon.CdTick: - result = "cd_tick.png"; - break; - case Icon.ChartBar: - result = "chart_bar.png"; - break; - case Icon.ChartBarAdd: - result = "chart_bar_add.png"; - break; - case Icon.ChartBarDelete: - result = "chart_bar_delete.png"; - break; - case Icon.ChartBarEdit: - result = "chart_bar_edit.png"; - break; - case Icon.ChartBarError: - result = "chart_bar_error.png"; - break; - case Icon.ChartBarLink: - result = "chart_bar_link.png"; - break; - case Icon.ChartCurve: - result = "chart_curve.png"; - break; - case Icon.ChartCurveAdd: - result = "chart_curve_add.png"; - break; - case Icon.ChartCurveDelete: - result = "chart_curve_delete.png"; - break; - case Icon.ChartCurveEdit: - result = "chart_curve_edit.png"; - break; - case Icon.ChartCurveError: - result = "chart_curve_error.png"; - break; - case Icon.ChartCurveGo: - result = "chart_curve_go.png"; - break; - case Icon.ChartCurveLink: - result = "chart_curve_link.png"; - break; - case Icon.ChartLine: - result = "chart_line.png"; - break; - case Icon.ChartLineAdd: - result = "chart_line_add.png"; - break; - case Icon.ChartLineDelete: - result = "chart_line_delete.png"; - break; - case Icon.ChartLineEdit: - result = "chart_line_edit.png"; - break; - case Icon.ChartLineError: - result = "chart_line_error.png"; - break; - case Icon.ChartLineLink: - result = "chart_line_link.png"; - break; - case Icon.ChartOrganisation: - result = "chart_organisation.png"; - break; - case Icon.ChartOrganisationAdd: - result = "chart_organisation_add.png"; - break; - case Icon.ChartOrganisationDelete: - result = "chart_organisation_delete.png"; - break; - case Icon.ChartOrgInverted: - result = "chart_org_inverted.png"; - break; - case Icon.ChartPie: - result = "chart_pie.png"; - break; - case Icon.ChartPieAdd: - result = "chart_pie_add.png"; - break; - case Icon.ChartPieDelete: - result = "chart_pie_delete.png"; - break; - case Icon.ChartPieEdit: - result = "chart_pie_edit.png"; - break; - case Icon.ChartPieError: - result = "chart_pie_error.png"; - break; - case Icon.ChartPieLightning: - result = "chart_pie_lightning.png"; - break; - case Icon.ChartPieLink: - result = "chart_pie_link.png"; - break; - case Icon.CheckError: - result = "check_error.png"; - break; - case Icon.Clipboard: - result = "clipboard.png"; - break; - case Icon.Clock: - result = "clock.png"; - break; - case Icon.ClockAdd: - result = "clock_add.png"; - break; - case Icon.ClockDelete: - result = "clock_delete.png"; - break; - case Icon.ClockEdit: - result = "clock_edit.png"; - break; - case Icon.ClockError: - result = "clock_error.png"; - break; - case Icon.ClockGo: - result = "clock_go.png"; - break; - case Icon.ClockLink: - result = "clock_link.png"; - break; - case Icon.ClockPause: - result = "clock_pause.png"; - break; - case Icon.ClockPlay: - result = "clock_play.png"; - break; - case Icon.ClockRed: - result = "clock_red.png"; - break; - case Icon.ClockStart: - result = "clock_start.png"; - break; - case Icon.ClockStop: - result = "clock_stop.png"; - break; - case Icon.ClockStop2: - result = "clock_stop_2.png"; - break; - case Icon.Cmy: - result = "cmy.png"; - break; - case Icon.Cog: - result = "cog.png"; - break; - case Icon.CogAdd: - result = "cog_add.png"; - break; - case Icon.CogDelete: - result = "cog_delete.png"; - break; - case Icon.CogEdit: - result = "cog_edit.png"; - break; - case Icon.CogError: - result = "cog_error.png"; - break; - case Icon.CogGo: - result = "cog_go.png"; - break; - case Icon.CogStart: - result = "cog_start.png"; - break; - case Icon.CogStop: - result = "cog_stop.png"; - break; - case Icon.Coins: - result = "coins.png"; - break; - case Icon.CoinsAdd: - result = "coins_add.png"; - break; - case Icon.CoinsDelete: - result = "coins_delete.png"; - break; - case Icon.Color: - result = "color.png"; - break; - case Icon.ColorSwatch: - result = "color_swatch.png"; - break; - case Icon.ColorWheel: - result = "color_wheel.png"; - break; - case Icon.Comment: - result = "comment.png"; - break; - case Icon.Comments: - result = "comments.png"; - break; - case Icon.CommentsAdd: - result = "comments_add.png"; - break; - case Icon.CommentsDelete: - result = "comments_delete.png"; - break; - case Icon.CommentAdd: - result = "comment_add.png"; - break; - case Icon.CommentDelete: - result = "comment_delete.png"; - break; - case Icon.CommentDull: - result = "comment_dull.png"; - break; - case Icon.CommentEdit: - result = "comment_edit.png"; - break; - case Icon.CommentPlay: - result = "comment_play.png"; - break; - case Icon.CommentRecord: - result = "comment_record.png"; - break; - case Icon.Compass: - result = "compass.png"; - break; - case Icon.Compress: - result = "compress.png"; - break; - case Icon.Computer: - result = "computer.png"; - break; - case Icon.ComputerAdd: - result = "computer_add.png"; - break; - case Icon.ComputerConnect: - result = "computer_connect.png"; - break; - case Icon.ComputerDelete: - result = "computer_delete.png"; - break; - case Icon.ComputerEdit: - result = "computer_edit.png"; - break; - case Icon.ComputerError: - result = "computer_error.png"; - break; - case Icon.ComputerGo: - result = "computer_go.png"; - break; - case Icon.ComputerKey: - result = "computer_key.png"; - break; - case Icon.ComputerLink: - result = "computer_link.png"; - break; - case Icon.ComputerMagnify: - result = "computer_magnify.png"; - break; - case Icon.ComputerOff: - result = "computer_off.png"; - break; - case Icon.ComputerStart: - result = "computer_start.png"; - break; - case Icon.ComputerStop: - result = "computer_stop.png"; - break; - case Icon.ComputerWrench: - result = "computer_wrench.png"; - break; - case Icon.Connect: - result = "connect.png"; - break; - case Icon.Contrast: - result = "contrast.png"; - break; - case Icon.ContrastDecrease: - result = "contrast_decrease.png"; - break; - case Icon.ContrastHigh: - result = "contrast_high.png"; - break; - case Icon.ContrastIncrease: - result = "contrast_increase.png"; - break; - case Icon.ContrastLow: - result = "contrast_low.png"; - break; - case Icon.Controller: - result = "controller.png"; - break; - case Icon.ControllerAdd: - result = "controller_add.png"; - break; - case Icon.ControllerDelete: - result = "controller_delete.png"; - break; - case Icon.ControllerError: - result = "controller_error.png"; - break; - case Icon.ControlAdd: - result = "control_add.png"; - break; - case Icon.ControlAddBlue: - result = "control_add_blue.png"; - break; - case Icon.ControlBlank: - result = "control_blank.png"; - break; - case Icon.ControlBlankBlue: - result = "control_blank_blue.png"; - break; - case Icon.ControlEject: - result = "control_eject.png"; - break; - case Icon.ControlEjectBlue: - result = "control_eject_blue.png"; - break; - case Icon.ControlEnd: - result = "control_end.png"; - break; - case Icon.ControlEndBlue: - result = "control_end_blue.png"; - break; - case Icon.ControlEqualizer: - result = "control_equalizer.png"; - break; - case Icon.ControlEqualizerBlue: - result = "control_equalizer_blue.png"; - break; - case Icon.ControlFastforward: - result = "control_fastforward.png"; - break; - case Icon.ControlFastforwardBlue: - result = "control_fastforward_blue.png"; - break; - case Icon.ControlPause: - result = "control_pause.png"; - break; - case Icon.ControlPauseBlue: - result = "control_pause_blue.png"; - break; - case Icon.ControlPlay: - result = "control_play.png"; - break; - case Icon.ControlPlayBlue: - result = "control_play_blue.png"; - break; - case Icon.ControlPower: - result = "control_power.png"; - break; - case Icon.ControlPowerBlue: - result = "control_power_blue.png"; - break; - case Icon.ControlRecord: - result = "control_record.png"; - break; - case Icon.ControlRecordBlue: - result = "control_record_blue.png"; - break; - case Icon.ControlRemove: - result = "control_remove.png"; - break; - case Icon.ControlRemoveBlue: - result = "control_remove_blue.png"; - break; - case Icon.ControlRepeat: - result = "control_repeat.png"; - break; - case Icon.ControlRepeatBlue: - result = "control_repeat_blue.png"; - break; - case Icon.ControlRewind: - result = "control_rewind.png"; - break; - case Icon.ControlRewindBlue: - result = "control_rewind_blue.png"; - break; - case Icon.ControlStart: - result = "control_start.png"; - break; - case Icon.ControlStartBlue: - result = "control_start_blue.png"; - break; - case Icon.ControlStop: - result = "control_stop.png"; - break; - case Icon.ControlStopBlue: - result = "control_stop_blue.png"; - break; - case Icon.Creditcards: - result = "creditcards.png"; - break; - case Icon.Cross: - result = "cross.png"; - break; - case Icon.Css: - result = "css.png"; - break; - case Icon.CssAdd: - result = "css_add.png"; - break; - case Icon.CssDelete: - result = "css_delete.png"; - break; - case Icon.CssError: - result = "css_error.png"; - break; - case Icon.CssGo: - result = "css_go.png"; - break; - case Icon.CssValid: - result = "css_valid.png"; - break; - case Icon.Cup: - result = "cup.png"; - break; - case Icon.CupAdd: - result = "cup_add.png"; - break; - case Icon.CupBlack: - result = "cup_black.png"; - break; - case Icon.CupDelete: - result = "cup_delete.png"; - break; - case Icon.CupEdit: - result = "cup_edit.png"; - break; - case Icon.CupError: - result = "cup_error.png"; - break; - case Icon.CupGo: - result = "cup_go.png"; - break; - case Icon.CupGreen: - result = "cup_green.png"; - break; - case Icon.CupKey: - result = "cup_key.png"; - break; - case Icon.CupLink: - result = "cup_link.png"; - break; - case Icon.CupTea: - result = "cup_tea.png"; - break; - case Icon.Cursor: - result = "cursor.png"; - break; - case Icon.CursorSmall: - result = "cursor_small.png"; - break; - case Icon.Cut: - result = "cut.png"; - break; - case Icon.CutRed: - result = "cut_red.png"; - break; - case Icon.Database: - result = "database.png"; - break; - case Icon.DatabaseAdd: - result = "database_add.png"; - break; - case Icon.DatabaseConnect: - result = "database_connect.png"; - break; - case Icon.DatabaseCopy: - result = "database_copy.png"; - break; - case Icon.DatabaseDelete: - result = "database_delete.png"; - break; - case Icon.DatabaseEdit: - result = "database_edit.png"; - break; - case Icon.DatabaseError: - result = "database_error.png"; - break; - case Icon.DatabaseGear: - result = "database_gear.png"; - break; - case Icon.DatabaseGo: - result = "database_go.png"; - break; - case Icon.DatabaseKey: - result = "database_key.png"; - break; - case Icon.DatabaseLightning: - result = "database_lightning.png"; - break; - case Icon.DatabaseLink: - result = "database_link.png"; - break; - case Icon.DatabaseRefresh: - result = "database_refresh.png"; - break; - case Icon.DatabaseSave: - result = "database_save.png"; - break; - case Icon.DatabaseStart: - result = "database_start.png"; - break; - case Icon.DatabaseStop: - result = "database_stop.png"; - break; - case Icon.DatabaseTable: - result = "database_table.png"; - break; - case Icon.DatabaseWrench: - result = "database_wrench.png"; - break; - case Icon.DatabaseYellow: - result = "database_yellow.png"; - break; - case Icon.DatabaseYellowStart: - result = "database_yellow_start.png"; - break; - case Icon.DatabaseYellowStop: - result = "database_yellow_stop.png"; - break; - case Icon.Date: - result = "date.png"; - break; - case Icon.DateAdd: - result = "date_add.png"; - break; - case Icon.DateDelete: - result = "date_delete.png"; - break; - case Icon.DateEdit: - result = "date_edit.png"; - break; - case Icon.DateError: - result = "date_error.png"; - break; - case Icon.DateGo: - result = "date_go.png"; - break; - case Icon.DateLink: - result = "date_link.png"; - break; - case Icon.DateMagnify: - result = "date_magnify.png"; - break; - case Icon.DateNext: - result = "date_next.png"; - break; - case Icon.DatePrevious: - result = "date_previous.png"; - break; - case Icon.Decline: - result = "decline.png"; - break; - case Icon.Delete: - result = "delete.png"; - break; - case Icon.DeviceStylus: - result = "device_stylus.png"; - break; - case Icon.Disconnect: - result = "disconnect.png"; - break; - case Icon.Disk: - result = "disk.png"; - break; - case Icon.DiskBlack: - result = "disk_black.png"; - break; - case Icon.DiskBlackError: - result = "disk_black_error.png"; - break; - case Icon.DiskBlackMagnify: - result = "disk_black_magnify.png"; - break; - case Icon.DiskDownload: - result = "disk_download.png"; - break; - case Icon.DiskEdit: - result = "disk_edit.png"; - break; - case Icon.DiskError: - result = "disk_error.png"; - break; - case Icon.DiskMagnify: - result = "disk_magnify.png"; - break; - case Icon.DiskMultiple: - result = "disk_multiple.png"; - break; - case Icon.DiskUpload: - result = "disk_upload.png"; - break; - case Icon.Door: - result = "door.png"; - break; - case Icon.DoorError: - result = "door_error.png"; - break; - case Icon.DoorIn: - result = "door_in.png"; - break; - case Icon.DoorOpen: - result = "door_open.png"; - break; - case Icon.DoorOut: - result = "door_out.png"; - break; - case Icon.Drink: - result = "drink.png"; - break; - case Icon.DrinkEmpty: - result = "drink_empty.png"; - break; - case Icon.DrinkRed: - result = "drink_red.png"; - break; - case Icon.Drive: - result = "drive.png"; - break; - case Icon.DriveAdd: - result = "drive_add.png"; - break; - case Icon.DriveBurn: - result = "drive_burn.png"; - break; - case Icon.DriveCd: - result = "drive_cd.png"; - break; - case Icon.DriveCdr: - result = "drive_cdr.png"; - break; - case Icon.DriveCdEmpty: - result = "drive_cd_empty.png"; - break; - case Icon.DriveDelete: - result = "drive_delete.png"; - break; - case Icon.DriveDisk: - result = "drive_disk.png"; - break; - case Icon.DriveEdit: - result = "drive_edit.png"; - break; - case Icon.DriveError: - result = "drive_error.png"; - break; - case Icon.DriveGo: - result = "drive_go.png"; - break; - case Icon.DriveKey: - result = "drive_key.png"; - break; - case Icon.DriveLink: - result = "drive_link.png"; - break; - case Icon.DriveMagnify: - result = "drive_magnify.png"; - break; - case Icon.DriveNetwork: - result = "drive_network.png"; - break; - case Icon.DriveNetworkError: - result = "drive_network_error.png"; - break; - case Icon.DriveNetworkStop: - result = "drive_network_stop.png"; - break; - case Icon.DriveRename: - result = "drive_rename.png"; - break; - case Icon.DriveUser: - result = "drive_user.png"; - break; - case Icon.DriveWeb: - result = "drive_web.png"; - break; - case Icon.Dvd: - result = "dvd.png"; - break; - case Icon.DvdAdd: - result = "dvd_add.png"; - break; - case Icon.DvdDelete: - result = "dvd_delete.png"; - break; - case Icon.DvdEdit: - result = "dvd_edit.png"; - break; - case Icon.DvdError: - result = "dvd_error.png"; - break; - case Icon.DvdGo: - result = "dvd_go.png"; - break; - case Icon.DvdKey: - result = "dvd_key.png"; - break; - case Icon.DvdLink: - result = "dvd_link.png"; - break; - case Icon.DvdStart: - result = "dvd_start.png"; - break; - case Icon.DvdStop: - result = "dvd_stop.png"; - break; - case Icon.EjectBlue: - result = "eject_blue.png"; - break; - case Icon.EjectGreen: - result = "eject_green.png"; - break; - case Icon.Email: - result = "email.png"; - break; - case Icon.EmailAdd: - result = "email_add.png"; - break; - case Icon.EmailAttach: - result = "email_attach.png"; - break; - case Icon.EmailDelete: - result = "email_delete.png"; - break; - case Icon.EmailEdit: - result = "email_edit.png"; - break; - case Icon.EmailError: - result = "email_error.png"; - break; - case Icon.EmailGo: - result = "email_go.png"; - break; - case Icon.EmailLink: - result = "email_link.png"; - break; - case Icon.EmailMagnify: - result = "email_magnify.png"; - break; - case Icon.EmailOpen: - result = "email_open.png"; - break; - case Icon.EmailOpenImage: - result = "email_open_image.png"; - break; - case Icon.EmailStar: - result = "email_star.png"; - break; - case Icon.EmailStart: - result = "email_start.png"; - break; - case Icon.EmailStop: - result = "email_stop.png"; - break; - case Icon.EmailTransfer: - result = "email_transfer.png"; - break; - case Icon.EmoticonEvilgrin: - result = "emoticon_evilgrin.png"; - break; - case Icon.EmoticonGrin: - result = "emoticon_grin.png"; - break; - case Icon.EmoticonHappy: - result = "emoticon_happy.png"; - break; - case Icon.EmoticonSmile: - result = "emoticon_smile.png"; - break; - case Icon.EmoticonSurprised: - result = "emoticon_surprised.png"; - break; - case Icon.EmoticonTongue: - result = "emoticon_tongue.png"; - break; - case Icon.EmoticonUnhappy: - result = "emoticon_unhappy.png"; - break; - case Icon.EmoticonWaii: - result = "emoticon_waii.png"; - break; - case Icon.EmoticonWink: - result = "emoticon_wink.png"; - break; - case Icon.Erase: - result = "erase.png"; - break; - case Icon.Error: - result = "error.png"; - break; - case Icon.ErrorAdd: - result = "error_add.png"; - break; - case Icon.ErrorDelete: - result = "error_delete.png"; - break; - case Icon.ErrorGo: - result = "error_go.png"; - break; - case Icon.Exclamation: - result = "exclamation.png"; - break; - case Icon.Eye: - result = "eye.png"; - break; - case Icon.Eyes: - result = "eyes.png"; - break; - case Icon.Feed: - result = "feed.png"; - break; - case Icon.FeedAdd: - result = "feed_add.png"; - break; - case Icon.FeedDelete: - result = "feed_delete.png"; - break; - case Icon.FeedDisk: - result = "feed_disk.png"; - break; - case Icon.FeedEdit: - result = "feed_edit.png"; - break; - case Icon.FeedError: - result = "feed_error.png"; - break; - case Icon.FeedGo: - result = "feed_go.png"; - break; - case Icon.FeedKey: - result = "feed_key.png"; - break; - case Icon.FeedLink: - result = "feed_link.png"; - break; - case Icon.FeedMagnify: - result = "feed_magnify.png"; - break; - case Icon.FeedStar: - result = "feed_star.png"; - break; - case Icon.Female: - result = "female.png"; - break; - case Icon.Film: - result = "film.png"; - break; - case Icon.FilmAdd: - result = "film_add.png"; - break; - case Icon.FilmDelete: - result = "film_delete.png"; - break; - case Icon.FilmEdit: - result = "film_edit.png"; - break; - case Icon.FilmEject: - result = "film_eject.png"; - break; - case Icon.FilmError: - result = "film_error.png"; - break; - case Icon.FilmGo: - result = "film_go.png"; - break; - case Icon.FilmKey: - result = "film_key.png"; - break; - case Icon.FilmLink: - result = "film_link.png"; - break; - case Icon.FilmMagnify: - result = "film_magnify.png"; - break; - case Icon.FilmSave: - result = "film_save.png"; - break; - case Icon.FilmStar: - result = "film_star.png"; - break; - case Icon.FilmStart: - result = "film_start.png"; - break; - case Icon.FilmStop: - result = "film_stop.png"; - break; - case Icon.Find: - result = "find.png"; - break; - case Icon.FingerPoint: - result = "finger_point.png"; - break; - case Icon.FlagAd: - result = "flag_ad.png"; - break; - case Icon.FlagAe: - result = "flag_ae.png"; - break; - case Icon.FlagAf: - result = "flag_af.png"; - break; - case Icon.FlagAg: - result = "flag_ag.png"; - break; - case Icon.FlagAi: - result = "flag_ai.png"; - break; - case Icon.FlagAl: - result = "flag_al.png"; - break; - case Icon.FlagAm: - result = "flag_am.png"; - break; - case Icon.FlagAn: - result = "flag_an.png"; - break; - case Icon.FlagAo: - result = "flag_ao.png"; - break; - case Icon.FlagAr: - result = "flag_ar.png"; - break; - case Icon.FlagAs: - result = "flag_as.png"; - break; - case Icon.FlagAt: - result = "flag_at.png"; - break; - case Icon.FlagAu: - result = "flag_au.png"; - break; - case Icon.FlagAw: - result = "flag_aw.png"; - break; - case Icon.FlagAx: - result = "flag_ax.png"; - break; - case Icon.FlagAz: - result = "flag_az.png"; - break; - case Icon.FlagBa: - result = "flag_ba.png"; - break; - case Icon.FlagBb: - result = "flag_bb.png"; - break; - case Icon.FlagBd: - result = "flag_bd.png"; - break; - case Icon.FlagBe: - result = "flag_be.png"; - break; - case Icon.FlagBf: - result = "flag_bf.png"; - break; - case Icon.FlagBg: - result = "flag_bg.png"; - break; - case Icon.FlagBh: - result = "flag_bh.png"; - break; - case Icon.FlagBi: - result = "flag_bi.png"; - break; - case Icon.FlagBj: - result = "flag_bj.png"; - break; - case Icon.FlagBlack: - result = "flag_black.png"; - break; - case Icon.FlagBlue: - result = "flag_blue.png"; - break; - case Icon.FlagBm: - result = "flag_bm.png"; - break; - case Icon.FlagBn: - result = "flag_bn.png"; - break; - case Icon.FlagBo: - result = "flag_bo.png"; - break; - case Icon.FlagBr: - result = "flag_br.png"; - break; - case Icon.FlagBs: - result = "flag_bs.png"; - break; - case Icon.FlagBt: - result = "flag_bt.png"; - break; - case Icon.FlagBv: - result = "flag_bv.png"; - break; - case Icon.FlagBw: - result = "flag_bw.png"; - break; - case Icon.FlagBy: - result = "flag_by.png"; - break; - case Icon.FlagBz: - result = "flag_bz.png"; - break; - case Icon.FlagCa: - result = "flag_ca.png"; - break; - case Icon.FlagCatalonia: - result = "flag_catalonia.png"; - break; - case Icon.FlagCc: - result = "flag_cc.png"; - break; - case Icon.FlagCd: - result = "flag_cd.png"; - break; - case Icon.FlagCf: - result = "flag_cf.png"; - break; - case Icon.FlagCg: - result = "flag_cg.png"; - break; - case Icon.FlagCh: - result = "flag_ch.png"; - break; - case Icon.FlagChecked: - result = "flag_checked.png"; - break; - case Icon.FlagCi: - result = "flag_ci.png"; - break; - case Icon.FlagCk: - result = "flag_ck.png"; - break; - case Icon.FlagCl: - result = "flag_cl.png"; - break; - case Icon.FlagCm: - result = "flag_cm.png"; - break; - case Icon.FlagCn: - result = "flag_cn.png"; - break; - case Icon.FlagCo: - result = "flag_co.png"; - break; - case Icon.FlagCr: - result = "flag_cr.png"; - break; - case Icon.FlagCs: - result = "flag_cs.png"; - break; - case Icon.FlagCu: - result = "flag_cu.png"; - break; - case Icon.FlagCv: - result = "flag_cv.png"; - break; - case Icon.FlagCx: - result = "flag_cx.png"; - break; - case Icon.FlagCy: - result = "flag_cy.png"; - break; - case Icon.FlagCz: - result = "flag_cz.png"; - break; - case Icon.FlagDe: - result = "flag_de.png"; - break; - case Icon.FlagDj: - result = "flag_dj.png"; - break; - case Icon.FlagDk: - result = "flag_dk.png"; - break; - case Icon.FlagDm: - result = "flag_dm.png"; - break; - case Icon.FlagDo: - result = "flag_do.png"; - break; - case Icon.FlagDz: - result = "flag_dz.png"; - break; - case Icon.FlagEc: - result = "flag_ec.png"; - break; - case Icon.FlagEe: - result = "flag_ee.png"; - break; - case Icon.FlagEg: - result = "flag_eg.png"; - break; - case Icon.FlagEh: - result = "flag_eh.png"; - break; - case Icon.FlagEngland: - result = "flag_england.png"; - break; - case Icon.FlagEr: - result = "flag_er.png"; - break; - case Icon.FlagEs: - result = "flag_es.png"; - break; - case Icon.FlagEt: - result = "flag_et.png"; - break; - case Icon.FlagEuropeanunion: - result = "flag_europeanunion.png"; - break; - case Icon.FlagFam: - result = "flag_fam.png"; - break; - case Icon.FlagFi: - result = "flag_fi.png"; - break; - case Icon.FlagFj: - result = "flag_fj.png"; - break; - case Icon.FlagFk: - result = "flag_fk.png"; - break; - case Icon.FlagFm: - result = "flag_fm.png"; - break; - case Icon.FlagFo: - result = "flag_fo.png"; - break; - case Icon.FlagFr: - result = "flag_fr.png"; - break; - case Icon.FlagFrance: - result = "flag_france.png"; - break; - case Icon.FlagGa: - result = "flag_ga.png"; - break; - case Icon.FlagGb: - result = "flag_gb.png"; - break; - case Icon.FlagGd: - result = "flag_gd.png"; - break; - case Icon.FlagGe: - result = "flag_ge.png"; - break; - case Icon.FlagGf: - result = "flag_gf.png"; - break; - case Icon.FlagGg: - result = "flag_gg.png"; - break; - case Icon.FlagGh: - result = "flag_gh.png"; - break; - case Icon.FlagGi: - result = "flag_gi.png"; - break; - case Icon.FlagGl: - result = "flag_gl.png"; - break; - case Icon.FlagGm: - result = "flag_gm.png"; - break; - case Icon.FlagGn: - result = "flag_gn.png"; - break; - case Icon.FlagGp: - result = "flag_gp.png"; - break; - case Icon.FlagGq: - result = "flag_gq.png"; - break; - case Icon.FlagGr: - result = "flag_gr.png"; - break; - case Icon.FlagGreen: - result = "flag_green.png"; - break; - case Icon.FlagGrey: - result = "flag_grey.png"; - break; - case Icon.FlagGs: - result = "flag_gs.png"; - break; - case Icon.FlagGt: - result = "flag_gt.png"; - break; - case Icon.FlagGu: - result = "flag_gu.png"; - break; - case Icon.FlagGw: - result = "flag_gw.png"; - break; - case Icon.FlagGy: - result = "flag_gy.png"; - break; - case Icon.FlagHk: - result = "flag_hk.png"; - break; - case Icon.FlagHm: - result = "flag_hm.png"; - break; - case Icon.FlagHn: - result = "flag_hn.png"; - break; - case Icon.FlagHr: - result = "flag_hr.png"; - break; - case Icon.FlagHt: - result = "flag_ht.png"; - break; - case Icon.FlagHu: - result = "flag_hu.png"; - break; - case Icon.FlagId: - result = "flag_id.png"; - break; - case Icon.FlagIe: - result = "flag_ie.png"; - break; - case Icon.FlagIl: - result = "flag_il.png"; - break; - case Icon.FlagIn: - result = "flag_in.png"; - break; - case Icon.FlagIo: - result = "flag_io.png"; - break; - case Icon.FlagIq: - result = "flag_iq.png"; - break; - case Icon.FlagIr: - result = "flag_ir.png"; - break; - case Icon.FlagIs: - result = "flag_is.png"; - break; - case Icon.FlagIt: - result = "flag_it.png"; - break; - case Icon.FlagJm: - result = "flag_jm.png"; - break; - case Icon.FlagJo: - result = "flag_jo.png"; - break; - case Icon.FlagJp: - result = "flag_jp.png"; - break; - case Icon.FlagKe: - result = "flag_ke.png"; - break; - case Icon.FlagKg: - result = "flag_kg.png"; - break; - case Icon.FlagKh: - result = "flag_kh.png"; - break; - case Icon.FlagKi: - result = "flag_ki.png"; - break; - case Icon.FlagKm: - result = "flag_km.png"; - break; - case Icon.FlagKn: - result = "flag_kn.png"; - break; - case Icon.FlagKp: - result = "flag_kp.png"; - break; - case Icon.FlagKr: - result = "flag_kr.png"; - break; - case Icon.FlagKw: - result = "flag_kw.png"; - break; - case Icon.FlagKy: - result = "flag_ky.png"; - break; - case Icon.FlagKz: - result = "flag_kz.png"; - break; - case Icon.FlagLa: - result = "flag_la.png"; - break; - case Icon.FlagLb: - result = "flag_lb.png"; - break; - case Icon.FlagLc: - result = "flag_lc.png"; - break; - case Icon.FlagLi: - result = "flag_li.png"; - break; - case Icon.FlagLk: - result = "flag_lk.png"; - break; - case Icon.FlagLr: - result = "flag_lr.png"; - break; - case Icon.FlagLs: - result = "flag_ls.png"; - break; - case Icon.FlagLt: - result = "flag_lt.png"; - break; - case Icon.FlagLu: - result = "flag_lu.png"; - break; - case Icon.FlagLv: - result = "flag_lv.png"; - break; - case Icon.FlagLy: - result = "flag_ly.png"; - break; - case Icon.FlagMa: - result = "flag_ma.png"; - break; - case Icon.FlagMc: - result = "flag_mc.png"; - break; - case Icon.FlagMd: - result = "flag_md.png"; - break; - case Icon.FlagMe: - result = "flag_me.png"; - break; - case Icon.FlagMg: - result = "flag_mg.png"; - break; - case Icon.FlagMh: - result = "flag_mh.png"; - break; - case Icon.FlagMk: - result = "flag_mk.png"; - break; - case Icon.FlagMl: - result = "flag_ml.png"; - break; - case Icon.FlagMm: - result = "flag_mm.png"; - break; - case Icon.FlagMn: - result = "flag_mn.png"; - break; - case Icon.FlagMo: - result = "flag_mo.png"; - break; - case Icon.FlagMp: - result = "flag_mp.png"; - break; - case Icon.FlagMq: - result = "flag_mq.png"; - break; - case Icon.FlagMr: - result = "flag_mr.png"; - break; - case Icon.FlagMs: - result = "flag_ms.png"; - break; - case Icon.FlagMt: - result = "flag_mt.png"; - break; - case Icon.FlagMu: - result = "flag_mu.png"; - break; - case Icon.FlagMv: - result = "flag_mv.png"; - break; - case Icon.FlagMw: - result = "flag_mw.png"; - break; - case Icon.FlagMx: - result = "flag_mx.png"; - break; - case Icon.FlagMy: - result = "flag_my.png"; - break; - case Icon.FlagMz: - result = "flag_mz.png"; - break; - case Icon.FlagNa: - result = "flag_na.png"; - break; - case Icon.FlagNc: - result = "flag_nc.png"; - break; - case Icon.FlagNe: - result = "flag_ne.png"; - break; - case Icon.FlagNf: - result = "flag_nf.png"; - break; - case Icon.FlagNg: - result = "flag_ng.png"; - break; - case Icon.FlagNi: - result = "flag_ni.png"; - break; - case Icon.FlagNl: - result = "flag_nl.png"; - break; - case Icon.FlagNo: - result = "flag_no.png"; - break; - case Icon.FlagNp: - result = "flag_np.png"; - break; - case Icon.FlagNr: - result = "flag_nr.png"; - break; - case Icon.FlagNu: - result = "flag_nu.png"; - break; - case Icon.FlagNz: - result = "flag_nz.png"; - break; - case Icon.FlagOm: - result = "flag_om.png"; - break; - case Icon.FlagOrange: - result = "flag_orange.png"; - break; - case Icon.FlagPa: - result = "flag_pa.png"; - break; - case Icon.FlagPe: - result = "flag_pe.png"; - break; - case Icon.FlagPf: - result = "flag_pf.png"; - break; - case Icon.FlagPg: - result = "flag_pg.png"; - break; - case Icon.FlagPh: - result = "flag_ph.png"; - break; - case Icon.FlagPink: - result = "flag_pink.png"; - break; - case Icon.FlagPk: - result = "flag_pk.png"; - break; - case Icon.FlagPl: - result = "flag_pl.png"; - break; - case Icon.FlagPm: - result = "flag_pm.png"; - break; - case Icon.FlagPn: - result = "flag_pn.png"; - break; - case Icon.FlagPr: - result = "flag_pr.png"; - break; - case Icon.FlagPs: - result = "flag_ps.png"; - break; - case Icon.FlagPt: - result = "flag_pt.png"; - break; - case Icon.FlagPurple: - result = "flag_purple.png"; - break; - case Icon.FlagPw: - result = "flag_pw.png"; - break; - case Icon.FlagPy: - result = "flag_py.png"; - break; - case Icon.FlagQa: - result = "flag_qa.png"; - break; - case Icon.FlagRe: - result = "flag_re.png"; - break; - case Icon.FlagRed: - result = "flag_red.png"; - break; - case Icon.FlagRo: - result = "flag_ro.png"; - break; - case Icon.FlagRs: - result = "flag_rs.png"; - break; - case Icon.FlagRu: - result = "flag_ru.png"; - break; - case Icon.FlagRw: - result = "flag_rw.png"; - break; - case Icon.FlagSa: - result = "flag_sa.png"; - break; - case Icon.FlagSb: - result = "flag_sb.png"; - break; - case Icon.FlagSc: - result = "flag_sc.png"; - break; - case Icon.FlagScotland: - result = "flag_scotland.png"; - break; - case Icon.FlagSd: - result = "flag_sd.png"; - break; - case Icon.FlagSe: - result = "flag_se.png"; - break; - case Icon.FlagSg: - result = "flag_sg.png"; - break; - case Icon.FlagSh: - result = "flag_sh.png"; - break; - case Icon.FlagSi: - result = "flag_si.png"; - break; - case Icon.FlagSj: - result = "flag_sj.png"; - break; - case Icon.FlagSk: - result = "flag_sk.png"; - break; - case Icon.FlagSl: - result = "flag_sl.png"; - break; - case Icon.FlagSm: - result = "flag_sm.png"; - break; - case Icon.FlagSn: - result = "flag_sn.png"; - break; - case Icon.FlagSo: - result = "flag_so.png"; - break; - case Icon.FlagSr: - result = "flag_sr.png"; - break; - case Icon.FlagSt: - result = "flag_st.png"; - break; - case Icon.FlagSv: - result = "flag_sv.png"; - break; - case Icon.FlagSy: - result = "flag_sy.png"; - break; - case Icon.FlagSz: - result = "flag_sz.png"; - break; - case Icon.FlagTc: - result = "flag_tc.png"; - break; - case Icon.FlagTd: - result = "flag_td.png"; - break; - case Icon.FlagTf: - result = "flag_tf.png"; - break; - case Icon.FlagTg: - result = "flag_tg.png"; - break; - case Icon.FlagTh: - result = "flag_th.png"; - break; - case Icon.FlagTj: - result = "flag_tj.png"; - break; - case Icon.FlagTk: - result = "flag_tk.png"; - break; - case Icon.FlagTl: - result = "flag_tl.png"; - break; - case Icon.FlagTm: - result = "flag_tm.png"; - break; - case Icon.FlagTn: - result = "flag_tn.png"; - break; - case Icon.FlagTo: - result = "flag_to.png"; - break; - case Icon.FlagTr: - result = "flag_tr.png"; - break; - case Icon.FlagTt: - result = "flag_tt.png"; - break; - case Icon.FlagTv: - result = "flag_tv.png"; - break; - case Icon.FlagTw: - result = "flag_tw.png"; - break; - case Icon.FlagTz: - result = "flag_tz.png"; - break; - case Icon.FlagUa: - result = "flag_ua.png"; - break; - case Icon.FlagUg: - result = "flag_ug.png"; - break; - case Icon.FlagUm: - result = "flag_um.png"; - break; - case Icon.FlagUs: - result = "flag_us.png"; - break; - case Icon.FlagUy: - result = "flag_uy.png"; - break; - case Icon.FlagUz: - result = "flag_uz.png"; - break; - case Icon.FlagVa: - result = "flag_va.png"; - break; - case Icon.FlagVc: - result = "flag_vc.png"; - break; - case Icon.FlagVe: - result = "flag_ve.png"; - break; - case Icon.FlagVg: - result = "flag_vg.png"; - break; - case Icon.FlagVi: - result = "flag_vi.png"; - break; - case Icon.FlagVn: - result = "flag_vn.png"; - break; - case Icon.FlagVu: - result = "flag_vu.png"; - break; - case Icon.FlagWales: - result = "flag_wales.png"; - break; - case Icon.FlagWf: - result = "flag_wf.png"; - break; - case Icon.FlagWhite: - result = "flag_white.png"; - break; - case Icon.FlagWs: - result = "flag_ws.png"; - break; - case Icon.FlagYe: - result = "flag_ye.png"; - break; - case Icon.FlagYellow: - result = "flag_yellow.png"; - break; - case Icon.FlagYt: - result = "flag_yt.png"; - break; - case Icon.FlagZa: - result = "flag_za.png"; - break; - case Icon.FlagZm: - result = "flag_zm.png"; - break; - case Icon.FlagZw: - result = "flag_zw.png"; - break; - case Icon.FlowerDaisy: - result = "flower_daisy.png"; - break; - case Icon.Folder: - result = "folder.png"; - break; - case Icon.FolderAdd: - result = "folder_add.png"; - break; - case Icon.FolderBell: - result = "folder_bell.png"; - break; - case Icon.FolderBookmark: - result = "folder_bookmark.png"; - break; - case Icon.FolderBrick: - result = "folder_brick.png"; - break; - case Icon.FolderBug: - result = "folder_bug.png"; - break; - case Icon.FolderCamera: - result = "folder_camera.png"; - break; - case Icon.FolderConnect: - result = "folder_connect.png"; - break; - case Icon.FolderDatabase: - result = "folder_database.png"; - break; - case Icon.FolderDelete: - result = "folder_delete.png"; - break; - case Icon.FolderEdit: - result = "folder_edit.png"; - break; - case Icon.FolderError: - result = "folder_error.png"; - break; - case Icon.FolderExplore: - result = "folder_explore.png"; - break; - case Icon.FolderFeed: - result = "folder_feed.png"; - break; - case Icon.FolderFilm: - result = "folder_film.png"; - break; - case Icon.FolderFind: - result = "folder_find.png"; - break; - case Icon.FolderFont: - result = "folder_font.png"; - break; - case Icon.FolderGo: - result = "folder_go.png"; - break; - case Icon.FolderHeart: - result = "folder_heart.png"; - break; - case Icon.FolderHome: - result = "folder_home.png"; - break; - case Icon.FolderImage: - result = "folder_image.png"; - break; - case Icon.FolderKey: - result = "folder_key.png"; - break; - case Icon.FolderLightbulb: - result = "folder_lightbulb.png"; - break; - case Icon.FolderLink: - result = "folder_link.png"; - break; - case Icon.FolderMagnify: - result = "folder_magnify.png"; - break; - case Icon.FolderPage: - result = "folder_page.png"; - break; - case Icon.FolderPageWhite: - result = "folder_page_white.png"; - break; - case Icon.FolderPalette: - result = "folder_palette.png"; - break; - case Icon.FolderPicture: - result = "folder_picture.png"; - break; - case Icon.FolderStar: - result = "folder_star.png"; - break; - case Icon.FolderTable: - result = "folder_table.png"; - break; - case Icon.FolderUp: - result = "folder_up.png"; - break; - case Icon.FolderUser: - result = "folder_user.png"; - break; - case Icon.FolderWrench: - result = "folder_wrench.png"; - break; - case Icon.Font: - result = "font.png"; - break; - case Icon.FontAdd: - result = "font_add.png"; - break; - case Icon.FontColor: - result = "font_color.png"; - break; - case Icon.FontDelete: - result = "font_delete.png"; - break; - case Icon.FontGo: - result = "font_go.png"; - break; - case Icon.FontLarger: - result = "font_larger.png"; - break; - case Icon.FontSmaller: - result = "font_smaller.png"; - break; - case Icon.ForwardBlue: - result = "forward_blue.png"; - break; - case Icon.ForwardGreen: - result = "forward_green.png"; - break; - case Icon.Group: - result = "group.png"; - break; - case Icon.GroupAdd: - result = "group_add.png"; - break; - case Icon.GroupDelete: - result = "group_delete.png"; - break; - case Icon.GroupEdit: - result = "group_edit.png"; - break; - case Icon.GroupError: - result = "group_error.png"; - break; - case Icon.GroupGear: - result = "group_gear.png"; - break; - case Icon.GroupGo: - result = "group_go.png"; - break; - case Icon.GroupKey: - result = "group_key.png"; - break; - case Icon.GroupLink: - result = "group_link.png"; - break; - case Icon.Heart: - result = "heart.png"; - break; - case Icon.HeartAdd: - result = "heart_add.png"; - break; - case Icon.HeartBroken: - result = "heart_broken.png"; - break; - case Icon.HeartConnect: - result = "heart_connect.png"; - break; - case Icon.HeartDelete: - result = "heart_delete.png"; - break; - case Icon.Help: - result = "help.png"; - break; - case Icon.Hourglass: - result = "hourglass.png"; - break; - case Icon.HourglassAdd: - result = "hourglass_add.png"; - break; - case Icon.HourglassDelete: - result = "hourglass_delete.png"; - break; - case Icon.HourglassGo: - result = "hourglass_go.png"; - break; - case Icon.HourglassLink: - result = "hourglass_link.png"; - break; - case Icon.House: - result = "house.png"; - break; - case Icon.HouseConnect: - result = "house_connect.png"; - break; - case Icon.HouseGo: - result = "house_go.png"; - break; - case Icon.HouseKey: - result = "house_key.png"; - break; - case Icon.HouseLink: - result = "house_link.png"; - break; - case Icon.HouseStar: - result = "house_star.png"; - break; - case Icon.Html: - result = "html.png"; - break; - case Icon.HtmlAdd: - result = "html_add.png"; - break; - case Icon.HtmlDelete: - result = "html_delete.png"; - break; - case Icon.HtmlError: - result = "html_error.png"; - break; - case Icon.HtmlGo: - result = "html_go.png"; - break; - case Icon.HtmlValid: - result = "html_valid.png"; - break; - case Icon.Image: - result = "image.png"; - break; - case Icon.Images: - result = "images.png"; - break; - case Icon.ImageAdd: - result = "image_add.png"; - break; - case Icon.ImageDelete: - result = "image_delete.png"; - break; - case Icon.ImageEdit: - result = "image_edit.png"; - break; - case Icon.ImageLink: - result = "image_link.png"; - break; - case Icon.ImageMagnify: - result = "image_magnify.png"; - break; - case Icon.ImageStar: - result = "image_star.png"; - break; - case Icon.Information: - result = "information.png"; - break; - case Icon.Ipod: - result = "ipod.png"; - break; - case Icon.IpodCast: - result = "ipod_cast.png"; - break; - case Icon.IpodCastAdd: - result = "ipod_cast_add.png"; - break; - case Icon.IpodCastDelete: - result = "ipod_cast_delete.png"; - break; - case Icon.IpodConnect: - result = "ipod_connect.png"; - break; - case Icon.IpodNano: - result = "ipod_nano.png"; - break; - case Icon.IpodNanoConnect: - result = "ipod_nano_connect.png"; - break; - case Icon.IpodSound: - result = "ipod_sound.png"; - break; - case Icon.Joystick: - result = "joystick.png"; - break; - case Icon.JoystickAdd: - result = "joystick_add.png"; - break; - case Icon.JoystickConnect: - result = "joystick_connect.png"; - break; - case Icon.JoystickDelete: - result = "joystick_delete.png"; - break; - case Icon.JoystickError: - result = "joystick_error.png"; - break; - case Icon.Key: - result = "key.png"; - break; - case Icon.Keyboard: - result = "keyboard.png"; - break; - case Icon.KeyboardAdd: - result = "keyboard_add.png"; - break; - case Icon.KeyboardConnect: - result = "keyboard_connect.png"; - break; - case Icon.KeyboardDelete: - result = "keyboard_delete.png"; - break; - case Icon.KeyboardMagnify: - result = "keyboard_magnify.png"; - break; - case Icon.KeyAdd: - result = "key_add.png"; - break; - case Icon.KeyDelete: - result = "key_delete.png"; - break; - case Icon.KeyGo: - result = "key_go.png"; - break; - case Icon.KeyStart: - result = "key_start.png"; - break; - case Icon.KeyStop: - result = "key_stop.png"; - break; - case Icon.Laptop: - result = "laptop.png"; - break; - case Icon.LaptopAdd: - result = "laptop_add.png"; - break; - case Icon.LaptopConnect: - result = "laptop_connect.png"; - break; - case Icon.LaptopDelete: - result = "laptop_delete.png"; - break; - case Icon.LaptopDisk: - result = "laptop_disk.png"; - break; - case Icon.LaptopEdit: - result = "laptop_edit.png"; - break; - case Icon.LaptopError: - result = "laptop_error.png"; - break; - case Icon.LaptopGo: - result = "laptop_go.png"; - break; - case Icon.LaptopKey: - result = "laptop_key.png"; - break; - case Icon.LaptopLink: - result = "laptop_link.png"; - break; - case Icon.LaptopMagnify: - result = "laptop_magnify.png"; - break; - case Icon.LaptopStart: - result = "laptop_start.png"; - break; - case Icon.LaptopStop: - result = "laptop_stop.png"; - break; - case Icon.LaptopWrench: - result = "laptop_wrench.png"; - break; - case Icon.Layers: - result = "layers.png"; - break; - case Icon.Layout: - result = "layout.png"; - break; - case Icon.LayoutAdd: - result = "layout_add.png"; - break; - case Icon.LayoutContent: - result = "layout_content.png"; - break; - case Icon.LayoutDelete: - result = "layout_delete.png"; - break; - case Icon.LayoutEdit: - result = "layout_edit.png"; - break; - case Icon.LayoutError: - result = "layout_error.png"; - break; - case Icon.LayoutHeader: - result = "layout_header.png"; - break; - case Icon.LayoutKey: - result = "layout_key.png"; - break; - case Icon.LayoutLightning: - result = "layout_lightning.png"; - break; - case Icon.LayoutLink: - result = "layout_link.png"; - break; - case Icon.LayoutSidebar: - result = "layout_sidebar.png"; - break; - case Icon.Lightbulb: - result = "lightbulb.png"; - break; - case Icon.LightbulbAdd: - result = "lightbulb_add.png"; - break; - case Icon.LightbulbDelete: - result = "lightbulb_delete.png"; - break; - case Icon.LightbulbOff: - result = "lightbulb_off.png"; - break; - case Icon.Lightning: - result = "lightning.png"; - break; - case Icon.LightningAdd: - result = "lightning_add.png"; - break; - case Icon.LightningDelete: - result = "lightning_delete.png"; - break; - case Icon.LightningGo: - result = "lightning_go.png"; - break; - case Icon.Link: - result = "link.png"; - break; - case Icon.LinkAdd: - result = "link_add.png"; - break; - case Icon.LinkBreak: - result = "link_break.png"; - break; - case Icon.LinkDelete: - result = "link_delete.png"; - break; - case Icon.LinkEdit: - result = "link_edit.png"; - break; - case Icon.LinkError: - result = "link_error.png"; - break; - case Icon.LinkGo: - result = "link_go.png"; - break; - case Icon.Lock: - result = "lock.png"; - break; - case Icon.LockAdd: - result = "lock_add.png"; - break; - case Icon.LockBreak: - result = "lock_break.png"; - break; - case Icon.LockDelete: - result = "lock_delete.png"; - break; - case Icon.LockEdit: - result = "lock_edit.png"; - break; - case Icon.LockGo: - result = "lock_go.png"; - break; - case Icon.LockKey: - result = "lock_key.png"; - break; - case Icon.LockOpen: - result = "lock_open.png"; - break; - case Icon.LockStart: - result = "lock_start.png"; - break; - case Icon.LockStop: - result = "lock_stop.png"; - break; - case Icon.Lorry: - result = "lorry.png"; - break; - case Icon.LorryAdd: - result = "lorry_add.png"; - break; - case Icon.LorryDelete: - result = "lorry_delete.png"; - break; - case Icon.LorryError: - result = "lorry_error.png"; - break; - case Icon.LorryFlatbed: - result = "lorry_flatbed.png"; - break; - case Icon.LorryGo: - result = "lorry_go.png"; - break; - case Icon.LorryLink: - result = "lorry_link.png"; - break; - case Icon.LorryStart: - result = "lorry_start.png"; - break; - case Icon.LorryStop: - result = "lorry_stop.png"; - break; - case Icon.MagifierZoomOut: - result = "magifier_zoom_out.png"; - break; - case Icon.Magnifier: - result = "magnifier.png"; - break; - case Icon.MagnifierZoomIn: - result = "magnifier_zoom_in.png"; - break; - case Icon.Mail: - result = "mail.png"; - break; - case Icon.Male: - result = "male.png"; - break; - case Icon.Map: - result = "map.png"; - break; - case Icon.MapAdd: - result = "map_add.png"; - break; - case Icon.MapClipboard: - result = "map_clipboard.png"; - break; - case Icon.MapCursor: - result = "map_cursor.png"; - break; - case Icon.MapDelete: - result = "map_delete.png"; - break; - case Icon.MapEdit: - result = "map_edit.png"; - break; - case Icon.MapError: - result = "map_error.png"; - break; - case Icon.MapGo: - result = "map_go.png"; - break; - case Icon.MapLink: - result = "map_link.png"; - break; - case Icon.MapMagnify: - result = "map_magnify.png"; - break; - case Icon.MapStart: - result = "map_start.png"; - break; - case Icon.MapStop: - result = "map_stop.png"; - break; - case Icon.MedalBronze1: - result = "medal_bronze_1.png"; - break; - case Icon.MedalBronze2: - result = "medal_bronze_2.png"; - break; - case Icon.MedalBronze3: - result = "medal_bronze_3.png"; - break; - case Icon.MedalBronzeAdd: - result = "medal_bronze_add.png"; - break; - case Icon.MedalBronzeDelete: - result = "medal_bronze_delete.png"; - break; - case Icon.MedalGold1: - result = "medal_gold_1.png"; - break; - case Icon.MedalGold2: - result = "medal_gold_2.png"; - break; - case Icon.MedalGold3: - result = "medal_gold_3.png"; - break; - case Icon.MedalGoldAdd: - result = "medal_gold_add.png"; - break; - case Icon.MedalGoldDelete: - result = "medal_gold_delete.png"; - break; - case Icon.MedalSilver1: - result = "medal_silver_1.png"; - break; - case Icon.MedalSilver2: - result = "medal_silver_2.png"; - break; - case Icon.MedalSilver3: - result = "medal_silver_3.png"; - break; - case Icon.MedalSilverAdd: - result = "medal_silver_add.png"; - break; - case Icon.MedalSilverDelete: - result = "medal_silver_delete.png"; - break; - case Icon.Money: - result = "money.png"; - break; - case Icon.MoneyAdd: - result = "money_add.png"; - break; - case Icon.MoneyDelete: - result = "money_delete.png"; - break; - case Icon.MoneyDollar: - result = "money_dollar.png"; - break; - case Icon.MoneyEuro: - result = "money_euro.png"; - break; - case Icon.MoneyPound: - result = "money_pound.png"; - break; - case Icon.MoneyYen: - result = "money_yen.png"; - break; - case Icon.Monitor: - result = "monitor.png"; - break; - case Icon.MonitorAdd: - result = "monitor_add.png"; - break; - case Icon.MonitorDelete: - result = "monitor_delete.png"; - break; - case Icon.MonitorEdit: - result = "monitor_edit.png"; - break; - case Icon.MonitorError: - result = "monitor_error.png"; - break; - case Icon.MonitorGo: - result = "monitor_go.png"; - break; - case Icon.MonitorKey: - result = "monitor_key.png"; - break; - case Icon.MonitorLightning: - result = "monitor_lightning.png"; - break; - case Icon.MonitorLink: - result = "monitor_link.png"; - break; - case Icon.MoonFull: - result = "moon_full.png"; - break; - case Icon.Mouse: - result = "mouse.png"; - break; - case Icon.MouseAdd: - result = "mouse_add.png"; - break; - case Icon.MouseDelete: - result = "mouse_delete.png"; - break; - case Icon.MouseError: - result = "mouse_error.png"; - break; - case Icon.Music: - result = "music.png"; - break; - case Icon.MusicNote: - result = "music_note.png"; - break; - case Icon.Neighbourhood: - result = "neighbourhood.png"; - break; - case Icon.New: - result = "new.png"; - break; - case Icon.Newspaper: - result = "newspaper.png"; - break; - case Icon.NewspaperAdd: - result = "newspaper_add.png"; - break; - case Icon.NewspaperDelete: - result = "newspaper_delete.png"; - break; - case Icon.NewspaperGo: - result = "newspaper_go.png"; - break; - case Icon.NewspaperLink: - result = "newspaper_link.png"; - break; - case Icon.NewBlue: - result = "new_blue.png"; - break; - case Icon.NewRed: - result = "new_red.png"; - break; - case Icon.NextBlue: - result = "next_blue.png"; - break; - case Icon.NextGreen: - result = "next_green.png"; - break; - case Icon.Note: - result = "note.png"; - break; - case Icon.NoteAdd: - result = "note_add.png"; - break; - case Icon.NoteDelete: - result = "note_delete.png"; - break; - case Icon.NoteEdit: - result = "note_edit.png"; - break; - case Icon.NoteError: - result = "note_error.png"; - break; - case Icon.NoteGo: - result = "note_go.png"; - break; - case Icon.Outline: - result = "outline.png"; - break; - case Icon.Overlays: - result = "overlays.png"; - break; - case Icon.Package: - result = "package.png"; - break; - case Icon.PackageAdd: - result = "package_add.png"; - break; - case Icon.PackageDelete: - result = "package_delete.png"; - break; - case Icon.PackageDown: - result = "package_down.png"; - break; - case Icon.PackageGo: - result = "package_go.png"; - break; - case Icon.PackageGreen: - result = "package_green.png"; - break; - case Icon.PackageIn: - result = "package_in.png"; - break; - case Icon.PackageLink: - result = "package_link.png"; - break; - case Icon.PackageSe: - result = "package_se.png"; - break; - case Icon.PackageStart: - result = "package_start.png"; - break; - case Icon.PackageStop: - result = "package_stop.png"; - break; - case Icon.PackageWhite: - result = "package_white.png"; - break; - case Icon.Page: - result = "page.png"; - break; - case Icon.PageAdd: - result = "page_add.png"; - break; - case Icon.PageAttach: - result = "page_attach.png"; - break; - case Icon.PageBack: - result = "page_back.png"; - break; - case Icon.PageBreak: - result = "page_break.png"; - break; - case Icon.PageBreakInsert: - result = "page_break_insert.png"; - break; - case Icon.PageCancel: - result = "page_cancel.png"; - break; - case Icon.PageCode: - result = "page_code.png"; - break; - case Icon.PageCopy: - result = "page_copy.png"; - break; - case Icon.PageDelete: - result = "page_delete.png"; - break; - case Icon.PageEdit: - result = "page_edit.png"; - break; - case Icon.PageError: - result = "page_error.png"; - break; - case Icon.PageExcel: - result = "page_excel.png"; - break; - case Icon.PageFind: - result = "page_find.png"; - break; - case Icon.PageForward: - result = "page_forward.png"; - break; - case Icon.PageGear: - result = "page_gear.png"; - break; - case Icon.PageGo: - result = "page_go.png"; - break; - case Icon.PageGreen: - result = "page_green.png"; - break; - case Icon.PageHeaderFooter: - result = "page_header_footer.png"; - break; - case Icon.PageKey: - result = "page_key.png"; - break; - case Icon.PageLandscape: - result = "page_landscape.png"; - break; - case Icon.PageLandscapeShot: - result = "page_landscape_shot.png"; - break; - case Icon.PageLightning: - result = "page_lightning.png"; - break; - case Icon.PageLink: - result = "page_link.png"; - break; - case Icon.PageMagnify: - result = "page_magnify.png"; - break; - case Icon.PagePaintbrush: - result = "page_paintbrush.png"; - break; - case Icon.PagePaste: - result = "page_paste.png"; - break; - case Icon.PagePortrait: - result = "page_portrait.png"; - break; - case Icon.PagePortraitShot: - result = "page_portrait_shot.png"; - break; - case Icon.PageRed: - result = "page_red.png"; - break; - case Icon.PageRefresh: - result = "page_refresh.png"; - break; - case Icon.PageSave: - result = "page_save.png"; - break; - case Icon.PageWhite: - result = "page_white.png"; - break; - case Icon.PageWhiteAcrobat: - result = "page_white_acrobat.png"; - break; - case Icon.PageWhiteActionscript: - result = "page_white_actionscript.png"; - break; - case Icon.PageWhiteAdd: - result = "page_white_add.png"; - break; - case Icon.PageWhiteBreak: - result = "page_white_break.png"; - break; - case Icon.PageWhiteC: - result = "page_white_c.png"; - break; - case Icon.PageWhiteCamera: - result = "page_white_camera.png"; - break; - case Icon.PageWhiteCd: - result = "page_white_cd.png"; - break; - case Icon.PageWhiteCdr: - result = "page_white_cdr.png"; - break; - case Icon.PageWhiteCode: - result = "page_white_code.png"; - break; - case Icon.PageWhiteCodeRed: - result = "page_white_code_red.png"; - break; - case Icon.PageWhiteColdfusion: - result = "page_white_coldfusion.png"; - break; - case Icon.PageWhiteCompressed: - result = "page_white_compressed.png"; - break; - case Icon.PageWhiteConnect: - result = "page_white_connect.png"; - break; - case Icon.PageWhiteCopy: - result = "page_white_copy.png"; - break; - case Icon.PageWhiteCplusplus: - result = "page_white_cplusplus.png"; - break; - case Icon.PageWhiteCsharp: - result = "page_white_csharp.png"; - break; - case Icon.PageWhiteCup: - result = "page_white_cup.png"; - break; - case Icon.PageWhiteDatabase: - result = "page_white_database.png"; - break; - case Icon.PageWhiteDatabaseYellow: - result = "page_white_database_yellow.png"; - break; - case Icon.PageWhiteDelete: - result = "page_white_delete.png"; - break; - case Icon.PageWhiteDvd: - result = "page_white_dvd.png"; - break; - case Icon.PageWhiteEdit: - result = "page_white_edit.png"; - break; - case Icon.PageWhiteError: - result = "page_white_error.png"; - break; - case Icon.PageWhiteExcel: - result = "page_white_excel.png"; - break; - case Icon.PageWhiteFind: - result = "page_white_find.png"; - break; - case Icon.PageWhiteFlash: - result = "page_white_flash.png"; - break; - case Icon.PageWhiteFont: - result = "page_white_font.png"; - break; - case Icon.PageWhiteFreehand: - result = "page_white_freehand.png"; - break; - case Icon.PageWhiteGear: - result = "page_white_gear.png"; - break; - case Icon.PageWhiteGet: - result = "page_white_get.png"; - break; - case Icon.PageWhiteGo: - result = "page_white_go.png"; - break; - case Icon.PageWhiteH: - result = "page_white_h.png"; - break; - case Icon.PageWhiteHorizontal: - result = "page_white_horizontal.png"; - break; - case Icon.PageWhiteKey: - result = "page_white_key.png"; - break; - case Icon.PageWhiteLightning: - result = "page_white_lightning.png"; - break; - case Icon.PageWhiteLink: - result = "page_white_link.png"; - break; - case Icon.PageWhiteMagnify: - result = "page_white_magnify.png"; - break; - case Icon.PageWhiteMedal: - result = "page_white_medal.png"; - break; - case Icon.PageWhiteOffice: - result = "page_white_office.png"; - break; - case Icon.PageWhitePaint: - result = "page_white_paint.png"; - break; - case Icon.PageWhitePaintbrush: - result = "page_white_paintbrush.png"; - break; - case Icon.PageWhitePaint2: - result = "page_white_paint_2.png"; - break; - case Icon.PageWhitePaste: - result = "page_white_paste.png"; - break; - case Icon.PageWhitePasteTable: - result = "page_white_paste_table.png"; - break; - case Icon.PageWhitePhp: - result = "page_white_php.png"; - break; - case Icon.PageWhitePicture: - result = "page_white_picture.png"; - break; - case Icon.PageWhitePowerpoint: - result = "page_white_powerpoint.png"; - break; - case Icon.PageWhitePut: - result = "page_white_put.png"; - break; - case Icon.PageWhiteRefresh: - result = "page_white_refresh.png"; - break; - case Icon.PageWhiteRuby: - result = "page_white_ruby.png"; - break; - case Icon.PageWhiteSideBySide: - result = "page_white_side_by_side.png"; - break; - case Icon.PageWhiteStack: - result = "page_white_stack.png"; - break; - case Icon.PageWhiteStar: - result = "page_white_star.png"; - break; - case Icon.PageWhiteSwoosh: - result = "page_white_swoosh.png"; - break; - case Icon.PageWhiteText: - result = "page_white_text.png"; - break; - case Icon.PageWhiteTextWidth: - result = "page_white_text_width.png"; - break; - case Icon.PageWhiteTux: - result = "page_white_tux.png"; - break; - case Icon.PageWhiteVector: - result = "page_white_vector.png"; - break; - case Icon.PageWhiteVisualstudio: - result = "page_white_visualstudio.png"; - break; - case Icon.PageWhiteWidth: - result = "page_white_width.png"; - break; - case Icon.PageWhiteWord: - result = "page_white_word.png"; - break; - case Icon.PageWhiteWorld: - result = "page_white_world.png"; - break; - case Icon.PageWhiteWrench: - result = "page_white_wrench.png"; - break; - case Icon.PageWhiteZip: - result = "page_white_zip.png"; - break; - case Icon.PageWord: - result = "page_word.png"; - break; - case Icon.PageWorld: - result = "page_world.png"; - break; - case Icon.Paint: - result = "paint.png"; - break; - case Icon.Paintbrush: - result = "paintbrush.png"; - break; - case Icon.PaintbrushColor: - result = "paintbrush_color.png"; - break; - case Icon.Paintcan: - result = "paintcan.png"; - break; - case Icon.PaintcanRed: - result = "paintcan_red.png"; - break; - case Icon.PaintCanBrush: - result = "paint_can_brush.png"; - break; - case Icon.Palette: - result = "palette.png"; - break; - case Icon.PastePlain: - result = "paste_plain.png"; - break; - case Icon.PasteWord: - result = "paste_word.png"; - break; - case Icon.PauseBlue: - result = "pause_blue.png"; - break; - case Icon.PauseGreen: - result = "pause_green.png"; - break; - case Icon.PauseRecord: - result = "pause_record.png"; - break; - case Icon.Pencil: - result = "pencil.png"; - break; - case Icon.PencilAdd: - result = "pencil_add.png"; - break; - case Icon.PencilDelete: - result = "pencil_delete.png"; - break; - case Icon.PencilGo: - result = "pencil_go.png"; - break; - case Icon.Phone: - result = "phone.png"; - break; - case Icon.PhoneAdd: - result = "phone_add.png"; - break; - case Icon.PhoneDelete: - result = "phone_delete.png"; - break; - case Icon.PhoneEdit: - result = "phone_edit.png"; - break; - case Icon.PhoneError: - result = "phone_error.png"; - break; - case Icon.PhoneGo: - result = "phone_go.png"; - break; - case Icon.PhoneKey: - result = "phone_key.png"; - break; - case Icon.PhoneLink: - result = "phone_link.png"; - break; - case Icon.PhoneSound: - result = "phone_sound.png"; - break; - case Icon.PhoneStart: - result = "phone_start.png"; - break; - case Icon.PhoneStop: - result = "phone_stop.png"; - break; - case Icon.Photo: - result = "photo.png"; - break; - case Icon.Photos: - result = "photos.png"; - break; - case Icon.PhotoAdd: - result = "photo_add.png"; - break; - case Icon.PhotoDelete: - result = "photo_delete.png"; - break; - case Icon.PhotoEdit: - result = "photo_edit.png"; - break; - case Icon.PhotoLink: - result = "photo_link.png"; - break; - case Icon.PhotoPaint: - result = "photo_paint.png"; - break; - case Icon.Picture: - result = "picture.png"; - break; - case Icon.Pictures: - result = "pictures.png"; - break; - case Icon.PicturesThumbs: - result = "pictures_thumbs.png"; - break; - case Icon.PictureAdd: - result = "picture_add.png"; - break; - case Icon.PictureClipboard: - result = "picture_clipboard.png"; - break; - case Icon.PictureDelete: - result = "picture_delete.png"; - break; - case Icon.PictureEdit: - result = "picture_edit.png"; - break; - case Icon.PictureEmpty: - result = "picture_empty.png"; - break; - case Icon.PictureError: - result = "picture_error.png"; - break; - case Icon.PictureGo: - result = "picture_go.png"; - break; - case Icon.PictureKey: - result = "picture_key.png"; - break; - case Icon.PictureLink: - result = "picture_link.png"; - break; - case Icon.PictureSave: - result = "picture_save.png"; - break; - case Icon.Pilcrow: - result = "pilcrow.png"; - break; - case Icon.Pill: - result = "pill.png"; - break; - case Icon.PillAdd: - result = "pill_add.png"; - break; - case Icon.PillDelete: - result = "pill_delete.png"; - break; - case Icon.PillError: - result = "pill_error.png"; - break; - case Icon.PillGo: - result = "pill_go.png"; - break; - case Icon.PlayBlue: - result = "play_blue.png"; - break; - case Icon.PlayGreen: - result = "play_green.png"; - break; - case Icon.Plugin: - result = "plugin.png"; - break; - case Icon.PluginAdd: - result = "plugin_add.png"; - break; - case Icon.PluginDelete: - result = "plugin_delete.png"; - break; - case Icon.PluginDisabled: - result = "plugin_disabled.png"; - break; - case Icon.PluginEdit: - result = "plugin_edit.png"; - break; - case Icon.PluginError: - result = "plugin_error.png"; - break; - case Icon.PluginGo: - result = "plugin_go.png"; - break; - case Icon.PluginKey: - result = "plugin_key.png"; - break; - case Icon.PluginLink: - result = "plugin_link.png"; - break; - case Icon.PreviousGreen: - result = "previous_green.png"; - break; - case Icon.Printer: - result = "printer.png"; - break; - case Icon.PrinterAdd: - result = "printer_add.png"; - break; - case Icon.PrinterCancel: - result = "printer_cancel.png"; - break; - case Icon.PrinterColor: - result = "printer_color.png"; - break; - case Icon.PrinterConnect: - result = "printer_connect.png"; - break; - case Icon.PrinterDelete: - result = "printer_delete.png"; - break; - case Icon.PrinterEmpty: - result = "printer_empty.png"; - break; - case Icon.PrinterError: - result = "printer_error.png"; - break; - case Icon.PrinterGo: - result = "printer_go.png"; - break; - case Icon.PrinterKey: - result = "printer_key.png"; - break; - case Icon.PrinterMono: - result = "printer_mono.png"; - break; - case Icon.PrinterStart: - result = "printer_start.png"; - break; - case Icon.PrinterStop: - result = "printer_stop.png"; - break; - case Icon.Rainbow: - result = "rainbow.png"; - break; - case Icon.RainbowStar: - result = "rainbow_star.png"; - break; - case Icon.RecordBlue: - result = "record_blue.png"; - break; - case Icon.RecordGreen: - result = "record_green.png"; - break; - case Icon.RecordRed: - result = "record_red.png"; - break; - case Icon.Reload: - result = "reload.png"; - break; - case Icon.Report: - result = "report.png"; - break; - case Icon.ReportAdd: - result = "report_add.png"; - break; - case Icon.ReportDelete: - result = "report_delete.png"; - break; - case Icon.ReportDisk: - result = "report_disk.png"; - break; - case Icon.ReportEdit: - result = "report_edit.png"; - break; - case Icon.ReportGo: - result = "report_go.png"; - break; - case Icon.ReportKey: - result = "report_key.png"; - break; - case Icon.ReportLink: - result = "report_link.png"; - break; - case Icon.ReportMagnify: - result = "report_magnify.png"; - break; - case Icon.ReportPicture: - result = "report_picture.png"; - break; - case Icon.ReportStart: - result = "report_start.png"; - break; - case Icon.ReportStop: - result = "report_stop.png"; - break; - case Icon.ReportUser: - result = "report_user.png"; - break; - case Icon.ReportWord: - result = "report_word.png"; - break; - case Icon.ResultsetFirst: - result = "resultset_first.png"; - break; - case Icon.ResultsetLast: - result = "resultset_last.png"; - break; - case Icon.ResultsetNext: - result = "resultset_next.png"; - break; - case Icon.ResultsetPrevious: - result = "resultset_previous.png"; - break; - case Icon.ReverseBlue: - result = "reverse_blue.png"; - break; - case Icon.ReverseGreen: - result = "reverse_green.png"; - break; - case Icon.RewindBlue: - result = "rewind_blue.png"; - break; - case Icon.RewindGreen: - result = "rewind_green.png"; - break; - case Icon.Rgb: - result = "rgb.png"; - break; - case Icon.Rosette: - result = "rosette.png"; - break; - case Icon.RosetteBlue: - result = "rosette_blue.png"; - break; - case Icon.Rss: - result = "rss.png"; - break; - case Icon.RssAdd: - result = "rss_add.png"; - break; - case Icon.RssDelete: - result = "rss_delete.png"; - break; - case Icon.RssError: - result = "rss_error.png"; - break; - case Icon.RssGo: - result = "rss_go.png"; - break; - case Icon.RssValid: - result = "rss_valid.png"; - break; - case Icon.Ruby: - result = "ruby.png"; - break; - case Icon.RubyAdd: - result = "ruby_add.png"; - break; - case Icon.RubyDelete: - result = "ruby_delete.png"; - break; - case Icon.RubyGear: - result = "ruby_gear.png"; - break; - case Icon.RubyGet: - result = "ruby_get.png"; - break; - case Icon.RubyGo: - result = "ruby_go.png"; - break; - case Icon.RubyKey: - result = "ruby_key.png"; - break; - case Icon.RubyLink: - result = "ruby_link.png"; - break; - case Icon.RubyPut: - result = "ruby_put.png"; - break; - case Icon.Script: - result = "script.png"; - break; - case Icon.ScriptAdd: - result = "script_add.png"; - break; - case Icon.ScriptCode: - result = "script_code.png"; - break; - case Icon.ScriptCodeOriginal: - result = "script_code_original.png"; - break; - case Icon.ScriptCodeRed: - result = "script_code_red.png"; - break; - case Icon.ScriptDelete: - result = "script_delete.png"; - break; - case Icon.ScriptEdit: - result = "script_edit.png"; - break; - case Icon.ScriptError: - result = "script_error.png"; - break; - case Icon.ScriptGear: - result = "script_gear.png"; - break; - case Icon.ScriptGo: - result = "script_go.png"; - break; - case Icon.ScriptKey: - result = "script_key.png"; - break; - case Icon.ScriptLightning: - result = "script_lightning.png"; - break; - case Icon.ScriptLink: - result = "script_link.png"; - break; - case Icon.ScriptPalette: - result = "script_palette.png"; - break; - case Icon.ScriptSave: - result = "script_save.png"; - break; - case Icon.ScriptStart: - result = "script_start.png"; - break; - case Icon.ScriptStop: - result = "script_stop.png"; - break; - case Icon.Seasons: - result = "seasons.png"; - break; - case Icon.SectionCollapsed: - result = "section_collapsed.png"; - break; - case Icon.SectionExpanded: - result = "section_expanded.png"; - break; - case Icon.Server: - result = "server.png"; - break; - case Icon.ServerAdd: - result = "server_add.png"; - break; - case Icon.ServerChart: - result = "server_chart.png"; - break; - case Icon.ServerCompressed: - result = "server_compressed.png"; - break; - case Icon.ServerConnect: - result = "server_connect.png"; - break; - case Icon.ServerDatabase: - result = "server_database.png"; - break; - case Icon.ServerDelete: - result = "server_delete.png"; - break; - case Icon.ServerEdit: - result = "server_edit.png"; - break; - case Icon.ServerError: - result = "server_error.png"; - break; - case Icon.ServerGo: - result = "server_go.png"; - break; - case Icon.ServerKey: - result = "server_key.png"; - break; - case Icon.ServerLightning: - result = "server_lightning.png"; - break; - case Icon.ServerLink: - result = "server_link.png"; - break; - case Icon.ServerStart: - result = "server_start.png"; - break; - case Icon.ServerStop: - result = "server_stop.png"; - break; - case Icon.ServerUncompressed: - result = "server_uncompressed.png"; - break; - case Icon.ServerWrench: - result = "server_wrench.png"; - break; - case Icon.Shading: - result = "shading.png"; - break; - case Icon.ShapesMany: - result = "shapes_many.png"; - break; - case Icon.ShapesManySelect: - result = "shapes_many_select.png"; - break; - case Icon.Shape3d: - result = "shape_3d.png"; - break; - case Icon.ShapeAlignBottom: - result = "shape_align_bottom.png"; - break; - case Icon.ShapeAlignCenter: - result = "shape_align_center.png"; - break; - case Icon.ShapeAlignLeft: - result = "shape_align_left.png"; - break; - case Icon.ShapeAlignMiddle: - result = "shape_align_middle.png"; - break; - case Icon.ShapeAlignRight: - result = "shape_align_right.png"; - break; - case Icon.ShapeAlignTop: - result = "shape_align_top.png"; - break; - case Icon.ShapeFlipHorizontal: - result = "shape_flip_horizontal.png"; - break; - case Icon.ShapeFlipVertical: - result = "shape_flip_vertical.png"; - break; - case Icon.ShapeGroup: - result = "shape_group.png"; - break; - case Icon.ShapeHandles: - result = "shape_handles.png"; - break; - case Icon.ShapeMoveBack: - result = "shape_move_back.png"; - break; - case Icon.ShapeMoveBackwards: - result = "shape_move_backwards.png"; - break; - case Icon.ShapeMoveForwards: - result = "shape_move_forwards.png"; - break; - case Icon.ShapeMoveFront: - result = "shape_move_front.png"; - break; - case Icon.ShapeRotateAnticlockwise: - result = "shape_rotate_anticlockwise.png"; - break; - case Icon.ShapeRotateClockwise: - result = "shape_rotate_clockwise.png"; - break; - case Icon.ShapeShadeA: - result = "shape_shade_a.png"; - break; - case Icon.ShapeShadeB: - result = "shape_shade_b.png"; - break; - case Icon.ShapeShadeC: - result = "shape_shade_c.png"; - break; - case Icon.ShapeShadow: - result = "shape_shadow.png"; - break; - case Icon.ShapeShadowToggle: - result = "shape_shadow_toggle.png"; - break; - case Icon.ShapeSquare: - result = "shape_square.png"; - break; - case Icon.ShapeSquareAdd: - result = "shape_square_add.png"; - break; - case Icon.ShapeSquareDelete: - result = "shape_square_delete.png"; - break; - case Icon.ShapeSquareEdit: - result = "shape_square_edit.png"; - break; - case Icon.ShapeSquareError: - result = "shape_square_error.png"; - break; - case Icon.ShapeSquareGo: - result = "shape_square_go.png"; - break; - case Icon.ShapeSquareKey: - result = "shape_square_key.png"; - break; - case Icon.ShapeSquareLink: - result = "shape_square_link.png"; - break; - case Icon.ShapeSquareSelect: - result = "shape_square_select.png"; - break; - case Icon.ShapeUngroup: - result = "shape_ungroup.png"; - break; - case Icon.Share: - result = "share.png"; - break; - case Icon.Shield: - result = "shield.png"; - break; - case Icon.ShieldAdd: - result = "shield_add.png"; - break; - case Icon.ShieldDelete: - result = "shield_delete.png"; - break; - case Icon.ShieldError: - result = "shield_error.png"; - break; - case Icon.ShieldGo: - result = "shield_go.png"; - break; - case Icon.ShieldRainbow: - result = "shield_rainbow.png"; - break; - case Icon.ShieldSilver: - result = "shield_silver.png"; - break; - case Icon.ShieldStart: - result = "shield_start.png"; - break; - case Icon.ShieldStop: - result = "shield_stop.png"; - break; - case Icon.Sitemap: - result = "sitemap.png"; - break; - case Icon.SitemapColor: - result = "sitemap_color.png"; - break; - case Icon.Smartphone: - result = "smartphone.png"; - break; - case Icon.SmartphoneAdd: - result = "smartphone_add.png"; - break; - case Icon.SmartphoneConnect: - result = "smartphone_connect.png"; - break; - case Icon.SmartphoneDelete: - result = "smartphone_delete.png"; - break; - case Icon.SmartphoneDisk: - result = "smartphone_disk.png"; - break; - case Icon.SmartphoneEdit: - result = "smartphone_edit.png"; - break; - case Icon.SmartphoneError: - result = "smartphone_error.png"; - break; - case Icon.SmartphoneGo: - result = "smartphone_go.png"; - break; - case Icon.SmartphoneKey: - result = "smartphone_key.png"; - break; - case Icon.SmartphoneWrench: - result = "smartphone_wrench.png"; - break; - case Icon.SortAscending: - result = "sort_ascending.png"; - break; - case Icon.SortDescending: - result = "sort_descending.png"; - break; - case Icon.Sound: - result = "sound.png"; - break; - case Icon.SoundAdd: - result = "sound_add.png"; - break; - case Icon.SoundDelete: - result = "sound_delete.png"; - break; - case Icon.SoundHigh: - result = "sound_high.png"; - break; - case Icon.SoundIn: - result = "sound_in.png"; - break; - case Icon.SoundLow: - result = "sound_low.png"; - break; - case Icon.SoundMute: - result = "sound_mute.png"; - break; - case Icon.SoundNone: - result = "sound_none.png"; - break; - case Icon.SoundOut: - result = "sound_out.png"; - break; - case Icon.Spellcheck: - result = "spellcheck.png"; - break; - case Icon.Sport8ball: - result = "sport_8ball.png"; - break; - case Icon.SportBasketball: - result = "sport_basketball.png"; - break; - case Icon.SportFootball: - result = "sport_football.png"; - break; - case Icon.SportGolf: - result = "sport_golf.png"; - break; - case Icon.SportGolfPractice: - result = "sport_golf_practice.png"; - break; - case Icon.SportRaquet: - result = "sport_raquet.png"; - break; - case Icon.SportShuttlecock: - result = "sport_shuttlecock.png"; - break; - case Icon.SportSoccer: - result = "sport_soccer.png"; - break; - case Icon.SportTennis: - result = "sport_tennis.png"; - break; - case Icon.Star: - result = "star.png"; - break; - case Icon.StarBronze: - result = "star_bronze.png"; - break; - case Icon.StarBronzeHalfGrey: - result = "star_bronze_half_grey.png"; - break; - case Icon.StarGold: - result = "star_gold.png"; - break; - case Icon.StarGoldHalfGrey: - result = "star_gold_half_grey.png"; - break; - case Icon.StarGoldHalfSilver: - result = "star_gold_half_silver.png"; - break; - case Icon.StarGrey: - result = "star_grey.png"; - break; - case Icon.StarHalfGrey: - result = "star_half_grey.png"; - break; - case Icon.StarSilver: - result = "star_silver.png"; - break; - case Icon.StatusAway: - result = "status_away.png"; - break; - case Icon.StatusBeRightBack: - result = "status_be_right_back.png"; - break; - case Icon.StatusBusy: - result = "status_busy.png"; - break; - case Icon.StatusInvisible: - result = "status_invisible.png"; - break; - case Icon.StatusOffline: - result = "status_offline.png"; - break; - case Icon.StatusOnline: - result = "status_online.png"; - break; - case Icon.Stop: - result = "stop.png"; - break; - case Icon.StopBlue: - result = "stop_blue.png"; - break; - case Icon.StopGreen: - result = "stop_green.png"; - break; - case Icon.StopRed: - result = "stop_red.png"; - break; - case Icon.Style: - result = "style.png"; - break; - case Icon.StyleAdd: - result = "style_add.png"; - break; - case Icon.StyleDelete: - result = "style_delete.png"; - break; - case Icon.StyleEdit: - result = "style_edit.png"; - break; - case Icon.StyleGo: - result = "style_go.png"; - break; - case Icon.Sum: - result = "sum.png"; - break; - case Icon.Tab: - result = "tab.png"; - break; - case Icon.Table: - result = "table.png"; - break; - case Icon.TableAdd: - result = "table_add.png"; - break; - case Icon.TableCell: - result = "table_cell.png"; - break; - case Icon.TableColumn: - result = "table_column.png"; - break; - case Icon.TableColumnAdd: - result = "table_column_add.png"; - break; - case Icon.TableColumnDelete: - result = "table_column_delete.png"; - break; - case Icon.TableConnect: - result = "table_connect.png"; - break; - case Icon.TableDelete: - result = "table_delete.png"; - break; - case Icon.TableEdit: - result = "table_edit.png"; - break; - case Icon.TableError: - result = "table_error.png"; - break; - case Icon.TableGear: - result = "table_gear.png"; - break; - case Icon.TableGo: - result = "table_go.png"; - break; - case Icon.TableKey: - result = "table_key.png"; - break; - case Icon.TableLightning: - result = "table_lightning.png"; - break; - case Icon.TableLink: - result = "table_link.png"; - break; - case Icon.TableMultiple: - result = "table_multiple.png"; - break; - case Icon.TableRefresh: - result = "table_refresh.png"; - break; - case Icon.TableRelationship: - result = "table_relationship.png"; - break; - case Icon.TableRow: - result = "table_row.png"; - break; - case Icon.TableRowDelete: - result = "table_row_delete.png"; - break; - case Icon.TableRowInsert: - result = "table_row_insert.png"; - break; - case Icon.TableSave: - result = "table_save.png"; - break; - case Icon.TableSort: - result = "table_sort.png"; - break; - case Icon.TabAdd: - result = "tab_add.png"; - break; - case Icon.TabBlue: - result = "tab_blue.png"; - break; - case Icon.TabDelete: - result = "tab_delete.png"; - break; - case Icon.TabEdit: - result = "tab_edit.png"; - break; - case Icon.TabGo: - result = "tab_go.png"; - break; - case Icon.TabGreen: - result = "tab_green.png"; - break; - case Icon.TabRed: - result = "tab_red.png"; - break; - case Icon.Tag: - result = "tag.png"; - break; - case Icon.TagsGrey: - result = "tags_grey.png"; - break; - case Icon.TagsRed: - result = "tags_red.png"; - break; - case Icon.TagBlue: - result = "tag_blue.png"; - break; - case Icon.TagBlueAdd: - result = "tag_blue_add.png"; - break; - case Icon.TagBlueDelete: - result = "tag_blue_delete.png"; - break; - case Icon.TagBlueEdit: - result = "tag_blue_edit.png"; - break; - case Icon.TagGreen: - result = "tag_green.png"; - break; - case Icon.TagOrange: - result = "tag_orange.png"; - break; - case Icon.TagPink: - result = "tag_pink.png"; - break; - case Icon.TagPurple: - result = "tag_purple.png"; - break; - case Icon.TagRed: - result = "tag_red.png"; - break; - case Icon.TagYellow: - result = "tag_yellow.png"; - break; - case Icon.Telephone: - result = "telephone.png"; - break; - case Icon.TelephoneAdd: - result = "telephone_add.png"; - break; - case Icon.TelephoneDelete: - result = "telephone_delete.png"; - break; - case Icon.TelephoneEdit: - result = "telephone_edit.png"; - break; - case Icon.TelephoneError: - result = "telephone_error.png"; - break; - case Icon.TelephoneGo: - result = "telephone_go.png"; - break; - case Icon.TelephoneKey: - result = "telephone_key.png"; - break; - case Icon.TelephoneLink: - result = "telephone_link.png"; - break; - case Icon.TelephoneRed: - result = "telephone_red.png"; - break; - case Icon.Television: - result = "television.png"; - break; - case Icon.TelevisionAdd: - result = "television_add.png"; - break; - case Icon.TelevisionDelete: - result = "television_delete.png"; - break; - case Icon.TelevisionIn: - result = "television_in.png"; - break; - case Icon.TelevisionOff: - result = "television_off.png"; - break; - case Icon.TelevisionOut: - result = "television_out.png"; - break; - case Icon.TelevisionStar: - result = "television_star.png"; - break; - case Icon.Textfield: - result = "textfield.png"; - break; - case Icon.TextfieldAdd: - result = "textfield_add.png"; - break; - case Icon.TextfieldDelete: - result = "textfield_delete.png"; - break; - case Icon.TextfieldKey: - result = "textfield_key.png"; - break; - case Icon.TextfieldRename: - result = "textfield_rename.png"; - break; - case Icon.TextAb: - result = "text_ab.png"; - break; - case Icon.TextAlignCenter: - result = "text_align_center.png"; - break; - case Icon.TextAlignJustify: - result = "text_align_justify.png"; - break; - case Icon.TextAlignLeft: - result = "text_align_left.png"; - break; - case Icon.TextAlignRight: - result = "text_align_right.png"; - break; - case Icon.TextAllcaps: - result = "text_allcaps.png"; - break; - case Icon.TextBold: - result = "text_bold.png"; - break; - case Icon.TextColumns: - result = "text_columns.png"; - break; - case Icon.TextComplete: - result = "text_complete.png"; - break; - case Icon.TextDirection: - result = "text_direction.png"; - break; - case Icon.TextDoubleUnderline: - result = "text_double_underline.png"; - break; - case Icon.TextDropcaps: - result = "text_dropcaps.png"; - break; - case Icon.TextFit: - result = "text_fit.png"; - break; - case Icon.TextFlip: - result = "text_flip.png"; - break; - case Icon.TextFontDefault: - result = "text_font_default.png"; - break; - case Icon.TextHeading1: - result = "text_heading_1.png"; - break; - case Icon.TextHeading2: - result = "text_heading_2.png"; - break; - case Icon.TextHeading3: - result = "text_heading_3.png"; - break; - case Icon.TextHeading4: - result = "text_heading_4.png"; - break; - case Icon.TextHeading5: - result = "text_heading_5.png"; - break; - case Icon.TextHeading6: - result = "text_heading_6.png"; - break; - case Icon.TextHorizontalrule: - result = "text_horizontalrule.png"; - break; - case Icon.TextIndent: - result = "text_indent.png"; - break; - case Icon.TextIndentRemove: - result = "text_indent_remove.png"; - break; - case Icon.TextInverse: - result = "text_inverse.png"; - break; - case Icon.TextItalic: - result = "text_italic.png"; - break; - case Icon.TextKerning: - result = "text_kerning.png"; - break; - case Icon.TextLeftToRight: - result = "text_left_to_right.png"; - break; - case Icon.TextLetterspacing: - result = "text_letterspacing.png"; - break; - case Icon.TextLetterOmega: - result = "text_letter_omega.png"; - break; - case Icon.TextLinespacing: - result = "text_linespacing.png"; - break; - case Icon.TextListBullets: - result = "text_list_bullets.png"; - break; - case Icon.TextListNumbers: - result = "text_list_numbers.png"; - break; - case Icon.TextLowercase: - result = "text_lowercase.png"; - break; - case Icon.TextLowercaseA: - result = "text_lowercase_a.png"; - break; - case Icon.TextMirror: - result = "text_mirror.png"; - break; - case Icon.TextPaddingBottom: - result = "text_padding_bottom.png"; - break; - case Icon.TextPaddingLeft: - result = "text_padding_left.png"; - break; - case Icon.TextPaddingRight: - result = "text_padding_right.png"; - break; - case Icon.TextPaddingTop: - result = "text_padding_top.png"; - break; - case Icon.TextReplace: - result = "text_replace.png"; - break; - case Icon.TextRightToLeft: - result = "text_right_to_left.png"; - break; - case Icon.TextRotate0: - result = "text_rotate_0.png"; - break; - case Icon.TextRotate180: - result = "text_rotate_180.png"; - break; - case Icon.TextRotate270: - result = "text_rotate_270.png"; - break; - case Icon.TextRotate90: - result = "text_rotate_90.png"; - break; - case Icon.TextRuler: - result = "text_ruler.png"; - break; - case Icon.TextShading: - result = "text_shading.png"; - break; - case Icon.TextSignature: - result = "text_signature.png"; - break; - case Icon.TextSmallcaps: - result = "text_smallcaps.png"; - break; - case Icon.TextSpelling: - result = "text_spelling.png"; - break; - case Icon.TextStrikethrough: - result = "text_strikethrough.png"; - break; - case Icon.TextSubscript: - result = "text_subscript.png"; - break; - case Icon.TextSuperscript: - result = "text_superscript.png"; - break; - case Icon.TextTab: - result = "text_tab.png"; - break; - case Icon.TextUnderline: - result = "text_underline.png"; - break; - case Icon.TextUppercase: - result = "text_uppercase.png"; - break; - case Icon.Theme: - result = "theme.png"; - break; - case Icon.ThumbDown: - result = "thumb_down.png"; - break; - case Icon.ThumbUp: - result = "thumb_up.png"; - break; - case Icon.Tick: - result = "tick.png"; - break; - case Icon.Time: - result = "time.png"; - break; - case Icon.TimelineMarker: - result = "timeline_marker.png"; - break; - case Icon.TimeAdd: - result = "time_add.png"; - break; - case Icon.TimeDelete: - result = "time_delete.png"; - break; - case Icon.TimeGo: - result = "time_go.png"; - break; - case Icon.TimeGreen: - result = "time_green.png"; - break; - case Icon.TimeRed: - result = "time_red.png"; - break; - case Icon.Transmit: - result = "transmit.png"; - break; - case Icon.TransmitAdd: - result = "transmit_add.png"; - break; - case Icon.TransmitBlue: - result = "transmit_blue.png"; - break; - case Icon.TransmitDelete: - result = "transmit_delete.png"; - break; - case Icon.TransmitEdit: - result = "transmit_edit.png"; - break; - case Icon.TransmitError: - result = "transmit_error.png"; - break; - case Icon.TransmitGo: - result = "transmit_go.png"; - break; - case Icon.TransmitRed: - result = "transmit_red.png"; - break; - case Icon.Tux: - result = "tux.png"; - break; - case Icon.User: - result = "user.png"; - break; - case Icon.UserAdd: - result = "user_add.png"; - break; - case Icon.UserAlert: - result = "user_alert.png"; - break; - case Icon.UserB: - result = "user_b.png"; - break; - case Icon.UserBrown: - result = "user_brown.png"; - break; - case Icon.UserComment: - result = "user_comment.png"; - break; - case Icon.UserCross: - result = "user_cross.png"; - break; - case Icon.UserDelete: - result = "user_delete.png"; - break; - case Icon.UserEarth: - result = "user_earth.png"; - break; - case Icon.UserEdit: - result = "user_edit.png"; - break; - case Icon.UserFemale: - result = "user_female.png"; - break; - case Icon.UserGo: - result = "user_go.png"; - break; - case Icon.UserGray: - result = "user_gray.png"; - break; - case Icon.UserGrayCool: - result = "user_gray_cool.png"; - break; - case Icon.UserGreen: - result = "user_green.png"; - break; - case Icon.UserHome: - result = "user_home.png"; - break; - case Icon.UserKey: - result = "user_key.png"; - break; - case Icon.UserMagnify: - result = "user_magnify.png"; - break; - case Icon.UserMature: - result = "user_mature.png"; - break; - case Icon.UserOrange: - result = "user_orange.png"; - break; - case Icon.UserRed: - result = "user_red.png"; - break; - case Icon.UserStar: - result = "user_star.png"; - break; - case Icon.UserSuit: - result = "user_suit.png"; - break; - case Icon.UserSuitBlack: - result = "user_suit_black.png"; - break; - case Icon.UserTick: - result = "user_tick.png"; - break; - case Icon.Vcard: - result = "vcard.png"; - break; - case Icon.VcardAdd: - result = "vcard_add.png"; - break; - case Icon.VcardDelete: - result = "vcard_delete.png"; - break; - case Icon.VcardEdit: - result = "vcard_edit.png"; - break; - case Icon.VcardKey: - result = "vcard_key.png"; - break; - case Icon.Vector: - result = "vector.png"; - break; - case Icon.VectorAdd: - result = "vector_add.png"; - break; - case Icon.VectorDelete: - result = "vector_delete.png"; - break; - case Icon.VectorKey: - result = "vector_key.png"; - break; - case Icon.Wand: - result = "wand.png"; - break; - case Icon.WeatherCloud: - result = "weather_cloud.png"; - break; - case Icon.WeatherClouds: - result = "weather_clouds.png"; - break; - case Icon.WeatherCloudy: - result = "weather_cloudy.png"; - break; - case Icon.WeatherCloudyRain: - result = "weather_cloudy_rain.png"; - break; - case Icon.WeatherLightning: - result = "weather_lightning.png"; - break; - case Icon.WeatherRain: - result = "weather_rain.png"; - break; - case Icon.WeatherSnow: - result = "weather_snow.png"; - break; - case Icon.WeatherSun: - result = "weather_sun.png"; - break; - case Icon.Webcam: - result = "webcam.png"; - break; - case Icon.WebcamAdd: - result = "webcam_add.png"; - break; - case Icon.WebcamConnect: - result = "webcam_connect.png"; - break; - case Icon.WebcamDelete: - result = "webcam_delete.png"; - break; - case Icon.WebcamError: - result = "webcam_error.png"; - break; - case Icon.WebcamStart: - result = "webcam_start.png"; - break; - case Icon.WebcamStop: - result = "webcam_stop.png"; - break; - case Icon.World: - result = "world.png"; - break; - case Icon.WorldAdd: - result = "world_add.png"; - break; - case Icon.WorldConnect: - result = "world_connect.png"; - break; - case Icon.WorldDawn: - result = "world_dawn.png"; - break; - case Icon.WorldDelete: - result = "world_delete.png"; - break; - case Icon.WorldEdit: - result = "world_edit.png"; - break; - case Icon.WorldGo: - result = "world_go.png"; - break; - case Icon.WorldKey: - result = "world_key.png"; - break; - case Icon.WorldLink: - result = "world_link.png"; - break; - case Icon.WorldNight: - result = "world_night.png"; - break; - case Icon.WorldOrbit: - result = "world_orbit.png"; - break; - case Icon.Wrench: - result = "wrench.png"; - break; - case Icon.WrenchOrange: - result = "wrench_orange.png"; - break; - case Icon.Xhtml: - result = "xhtml.png"; - break; - case Icon.XhtmlAdd: - result = "xhtml_add.png"; - break; - case Icon.XhtmlDelete: - result = "xhtml_delete.png"; - break; - case Icon.XhtmlError: - result = "xhtml_error.png"; - break; - case Icon.XhtmlGo: - result = "xhtml_go.png"; - break; - case Icon.XhtmlValid: - result = "xhtml_valid.png"; - break; - case Icon.Zoom: - result = "zoom.png"; - break; - case Icon.ZoomIn: - result = "zoom_in.png"; - break; - case Icon.ZoomOut: - result = "zoom_out.png"; - break; - case Icon.SystemClose: - result = "system_close.gif"; - break; - case Icon.SystemNew: - result = "system_new.gif"; - break; - case Icon.SystemSave: - result = "system_save.gif"; - break; - case Icon.SystemSaveClose: - result = "system_saveclose.gif"; - break; - case Icon.SystemSaveNew: - result = "system_savenew.gif"; - break; - case Icon.SystemSearch: - result = "system_search.gif"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: IconType.cs + * CreatedOn: 2009-09-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.UI; + +namespace FineUI +{ + /// + /// 预定义图标 + /// + public enum Icon + { + /// + /// None + /// + None, + + /// + /// Accept + /// + Accept, + + /// + /// Add + /// + Add, + + /// + /// Anchor + /// + Anchor, + + /// + /// Application + /// + Application, + + /// + /// ApplicationAdd + /// + ApplicationAdd, + + /// + /// ApplicationCascade + /// + ApplicationCascade, + + /// + /// ApplicationDelete + /// + ApplicationDelete, + + /// + /// ApplicationDouble + /// + ApplicationDouble, + + /// + /// ApplicationEdit + /// + ApplicationEdit, + + /// + /// ApplicationError + /// + ApplicationError, + + /// + /// ApplicationForm + /// + ApplicationForm, + + /// + /// ApplicationFormAdd + /// + ApplicationFormAdd, + + /// + /// ApplicationFormDelete + /// + ApplicationFormDelete, + + /// + /// ApplicationFormEdit + /// + ApplicationFormEdit, + + /// + /// ApplicationFormMagnify + /// + ApplicationFormMagnify, + + /// + /// ApplicationGet + /// + ApplicationGet, + + /// + /// ApplicationGo + /// + ApplicationGo, + + /// + /// ApplicationHome + /// + ApplicationHome, + + /// + /// ApplicationKey + /// + ApplicationKey, + + /// + /// ApplicationLightning + /// + ApplicationLightning, + + /// + /// ApplicationLink + /// + ApplicationLink, + + /// + /// ApplicationOsx + /// + ApplicationOsx, + + /// + /// ApplicationOsxAdd + /// + ApplicationOsxAdd, + + /// + /// ApplicationOsxCascade + /// + ApplicationOsxCascade, + + /// + /// ApplicationOsxDelete + /// + ApplicationOsxDelete, + + /// + /// ApplicationOsxDouble + /// + ApplicationOsxDouble, + + /// + /// ApplicationOsxError + /// + ApplicationOsxError, + + /// + /// ApplicationOsxGet + /// + ApplicationOsxGet, + + /// + /// ApplicationOsxGo + /// + ApplicationOsxGo, + + /// + /// ApplicationOsxHome + /// + ApplicationOsxHome, + + /// + /// ApplicationOsxKey + /// + ApplicationOsxKey, + + /// + /// ApplicationOsxLightning + /// + ApplicationOsxLightning, + + /// + /// ApplicationOsxLink + /// + ApplicationOsxLink, + + /// + /// ApplicationOsxSplit + /// + ApplicationOsxSplit, + + /// + /// ApplicationOsxStart + /// + ApplicationOsxStart, + + /// + /// ApplicationOsxStop + /// + ApplicationOsxStop, + + /// + /// ApplicationOsxTerminal + /// + ApplicationOsxTerminal, + + /// + /// ApplicationPut + /// + ApplicationPut, + + /// + /// ApplicationSideBoxes + /// + ApplicationSideBoxes, + + /// + /// ApplicationSideContract + /// + ApplicationSideContract, + + /// + /// ApplicationSideExpand + /// + ApplicationSideExpand, + + /// + /// ApplicationSideList + /// + ApplicationSideList, + + /// + /// ApplicationSideTree + /// + ApplicationSideTree, + + /// + /// ApplicationSplit + /// + ApplicationSplit, + + /// + /// ApplicationStart + /// + ApplicationStart, + + /// + /// ApplicationStop + /// + ApplicationStop, + + /// + /// ApplicationTileHorizontal + /// + ApplicationTileHorizontal, + + /// + /// ApplicationTileVertical + /// + ApplicationTileVertical, + + /// + /// ApplicationViewColumns + /// + ApplicationViewColumns, + + /// + /// ApplicationViewDetail + /// + ApplicationViewDetail, + + /// + /// ApplicationViewGallery + /// + ApplicationViewGallery, + + /// + /// ApplicationViewIcons + /// + ApplicationViewIcons, + + /// + /// ApplicationViewList + /// + ApplicationViewList, + + /// + /// ApplicationViewTile + /// + ApplicationViewTile, + + /// + /// ApplicationXp + /// + ApplicationXp, + + /// + /// ApplicationXpTerminal + /// + ApplicationXpTerminal, + + /// + /// ArrowBranch + /// + ArrowBranch, + + /// + /// ArrowDivide + /// + ArrowDivide, + + /// + /// ArrowDown + /// + ArrowDown, + + /// + /// ArrowEw + /// + ArrowEw, + + /// + /// ArrowIn + /// + ArrowIn, + + /// + /// ArrowInout + /// + ArrowInout, + + /// + /// ArrowInLonger + /// + ArrowInLonger, + + /// + /// ArrowJoin + /// + ArrowJoin, + + /// + /// ArrowLeft + /// + ArrowLeft, + + /// + /// ArrowMerge + /// + ArrowMerge, + + /// + /// ArrowNe + /// + ArrowNe, + + /// + /// ArrowNs + /// + ArrowNs, + + /// + /// ArrowNsew + /// + ArrowNsew, + + /// + /// ArrowNw + /// + ArrowNw, + + /// + /// ArrowNwNeSwSe + /// + ArrowNwNeSwSe, + + /// + /// ArrowNwSe + /// + ArrowNwSe, + + /// + /// ArrowOut + /// + ArrowOut, + + /// + /// ArrowOutLonger + /// + ArrowOutLonger, + + /// + /// ArrowRedo + /// + ArrowRedo, + + /// + /// ArrowRefresh + /// + ArrowRefresh, + + /// + /// ArrowRefreshSmall + /// + ArrowRefreshSmall, + + /// + /// ArrowRight + /// + ArrowRight, + + /// + /// ArrowRotateAnticlockwise + /// + ArrowRotateAnticlockwise, + + /// + /// ArrowRotateClockwise + /// + ArrowRotateClockwise, + + /// + /// ArrowSe + /// + ArrowSe, + + /// + /// ArrowSw + /// + ArrowSw, + + /// + /// ArrowSwitch + /// + ArrowSwitch, + + /// + /// ArrowSwitchBluegreen + /// + ArrowSwitchBluegreen, + + /// + /// ArrowSwNe + /// + ArrowSwNe, + + /// + /// ArrowTurnLeft + /// + ArrowTurnLeft, + + /// + /// ArrowTurnRight + /// + ArrowTurnRight, + + /// + /// ArrowUndo + /// + ArrowUndo, + + /// + /// ArrowUp + /// + ArrowUp, + + /// + /// AsteriskOrange + /// + AsteriskOrange, + + /// + /// AsteriskRed + /// + AsteriskRed, + + /// + /// AsteriskYellow + /// + AsteriskYellow, + + /// + /// Attach + /// + Attach, + + /// + /// AwardStarAdd + /// + AwardStarAdd, + + /// + /// AwardStarBronze1 + /// + AwardStarBronze1, + + /// + /// AwardStarBronze2 + /// + AwardStarBronze2, + + /// + /// AwardStarBronze3 + /// + AwardStarBronze3, + + /// + /// AwardStarDelete + /// + AwardStarDelete, + + /// + /// AwardStarGold1 + /// + AwardStarGold1, + + /// + /// AwardStarGold2 + /// + AwardStarGold2, + + /// + /// AwardStarGold3 + /// + AwardStarGold3, + + /// + /// AwardStarSilver1 + /// + AwardStarSilver1, + + /// + /// AwardStarSilver2 + /// + AwardStarSilver2, + + /// + /// AwardStarSilver3 + /// + AwardStarSilver3, + + /// + /// Basket + /// + Basket, + + /// + /// BasketAdd + /// + BasketAdd, + + /// + /// BasketDelete + /// + BasketDelete, + + /// + /// BasketEdit + /// + BasketEdit, + + /// + /// BasketError + /// + BasketError, + + /// + /// BasketGo + /// + BasketGo, + + /// + /// BasketPut + /// + BasketPut, + + /// + /// BasketRemove + /// + BasketRemove, + + /// + /// Bell + /// + Bell, + + /// + /// BellAdd + /// + BellAdd, + + /// + /// BellDelete + /// + BellDelete, + + /// + /// BellError + /// + BellError, + + /// + /// BellGo + /// + BellGo, + + /// + /// BellLink + /// + BellLink, + + /// + /// BellSilver + /// + BellSilver, + + /// + /// BellSilverStart + /// + BellSilverStart, + + /// + /// BellSilverStop + /// + BellSilverStop, + + /// + /// BellStart + /// + BellStart, + + /// + /// BellStop + /// + BellStop, + + /// + /// Bin + /// + Bin, + + /// + /// BinClosed + /// + BinClosed, + + /// + /// BinEmpty + /// + BinEmpty, + + /// + /// Blank + /// + Blank, + + /// + /// Bomb + /// + Bomb, + + /// + /// Book + /// + Book, + + /// + /// Bookmark + /// + Bookmark, + + /// + /// BookmarkAdd + /// + BookmarkAdd, + + /// + /// BookmarkDelete + /// + BookmarkDelete, + + /// + /// BookmarkEdit + /// + BookmarkEdit, + + /// + /// BookmarkError + /// + BookmarkError, + + /// + /// BookmarkGo + /// + BookmarkGo, + + /// + /// BookAdd + /// + BookAdd, + + /// + /// BookAddresses + /// + BookAddresses, + + /// + /// BookAddressesAdd + /// + BookAddressesAdd, + + /// + /// BookAddressesDelete + /// + BookAddressesDelete, + + /// + /// BookAddressesEdit + /// + BookAddressesEdit, + + /// + /// BookAddressesError + /// + BookAddressesError, + + /// + /// BookAddressesKey + /// + BookAddressesKey, + + /// + /// BookDelete + /// + BookDelete, + + /// + /// BookEdit + /// + BookEdit, + + /// + /// BookError + /// + BookError, + + /// + /// BookGo + /// + BookGo, + + /// + /// BookKey + /// + BookKey, + + /// + /// BookLink + /// + BookLink, + + /// + /// BookMagnify + /// + BookMagnify, + + /// + /// BookNext + /// + BookNext, + + /// + /// BookOpen + /// + BookOpen, + + /// + /// BookOpenMark + /// + BookOpenMark, + + /// + /// BookPrevious + /// + BookPrevious, + + /// + /// BookRed + /// + BookRed, + + /// + /// BookTabs + /// + BookTabs, + + /// + /// BorderAll + /// + BorderAll, + + /// + /// BorderBottom + /// + BorderBottom, + + /// + /// BorderDraw + /// + BorderDraw, + + /// + /// BorderInner + /// + BorderInner, + + /// + /// BorderInnerHorizontal + /// + BorderInnerHorizontal, + + /// + /// BorderInnerVertical + /// + BorderInnerVertical, + + /// + /// BorderLeft + /// + BorderLeft, + + /// + /// BorderNone + /// + BorderNone, + + /// + /// BorderOuter + /// + BorderOuter, + + /// + /// BorderRight + /// + BorderRight, + + /// + /// BorderTop + /// + BorderTop, + + /// + /// Box + /// + Box, + + /// + /// BoxError + /// + BoxError, + + /// + /// BoxPicture + /// + BoxPicture, + + /// + /// BoxWorld + /// + BoxWorld, + + /// + /// Brick + /// + Brick, + + /// + /// Bricks + /// + Bricks, + + /// + /// BrickAdd + /// + BrickAdd, + + /// + /// BrickDelete + /// + BrickDelete, + + /// + /// BrickEdit + /// + BrickEdit, + + /// + /// BrickError + /// + BrickError, + + /// + /// BrickGo + /// + BrickGo, + + /// + /// BrickLink + /// + BrickLink, + + /// + /// BrickMagnify + /// + BrickMagnify, + + /// + /// Briefcase + /// + Briefcase, + + /// + /// Bug + /// + Bug, + + /// + /// BugAdd + /// + BugAdd, + + /// + /// BugDelete + /// + BugDelete, + + /// + /// BugEdit + /// + BugEdit, + + /// + /// BugError + /// + BugError, + + /// + /// BugFix + /// + BugFix, + + /// + /// BugGo + /// + BugGo, + + /// + /// BugLink + /// + BugLink, + + /// + /// BugMagnify + /// + BugMagnify, + + /// + /// Build + /// + Build, + + /// + /// Building + /// + Building, + + /// + /// BuildingAdd + /// + BuildingAdd, + + /// + /// BuildingDelete + /// + BuildingDelete, + + /// + /// BuildingEdit + /// + BuildingEdit, + + /// + /// BuildingError + /// + BuildingError, + + /// + /// BuildingGo + /// + BuildingGo, + + /// + /// BuildingKey + /// + BuildingKey, + + /// + /// BuildingLink + /// + BuildingLink, + + /// + /// BuildCancel + /// + BuildCancel, + + /// + /// BulletAdd + /// + BulletAdd, + + /// + /// BulletArrowBottom + /// + BulletArrowBottom, + + /// + /// BulletArrowDown + /// + BulletArrowDown, + + /// + /// BulletArrowTop + /// + BulletArrowTop, + + /// + /// BulletArrowUp + /// + BulletArrowUp, + + /// + /// BulletBlack + /// + BulletBlack, + + /// + /// BulletBlue + /// + BulletBlue, + + /// + /// BulletConnect + /// + BulletConnect, + + /// + /// BulletCross + /// + BulletCross, + + /// + /// BulletDatabase + /// + BulletDatabase, + + /// + /// BulletDatabaseYellow + /// + BulletDatabaseYellow, + + /// + /// BulletDelete + /// + BulletDelete, + + /// + /// BulletDisk + /// + BulletDisk, + + /// + /// BulletEarth + /// + BulletEarth, + + /// + /// BulletEdit + /// + BulletEdit, + + /// + /// BulletEject + /// + BulletEject, + + /// + /// BulletError + /// + BulletError, + + /// + /// BulletFeed + /// + BulletFeed, + + /// + /// BulletGet + /// + BulletGet, + + /// + /// BulletGo + /// + BulletGo, + + /// + /// BulletGreen + /// + BulletGreen, + + /// + /// BulletHome + /// + BulletHome, + + /// + /// BulletKey + /// + BulletKey, + + /// + /// BulletLeft + /// + BulletLeft, + + /// + /// BulletLightning + /// + BulletLightning, + + /// + /// BulletMagnify + /// + BulletMagnify, + + /// + /// BulletMinus + /// + BulletMinus, + + /// + /// BulletOrange + /// + BulletOrange, + + /// + /// BulletPageWhite + /// + BulletPageWhite, + + /// + /// BulletPicture + /// + BulletPicture, + + /// + /// BulletPink + /// + BulletPink, + + /// + /// BulletPlus + /// + BulletPlus, + + /// + /// BulletPurple + /// + BulletPurple, + + /// + /// BulletRed + /// + BulletRed, + + /// + /// BulletRight + /// + BulletRight, + + /// + /// BulletShape + /// + BulletShape, + + /// + /// BulletSparkle + /// + BulletSparkle, + + /// + /// BulletStar + /// + BulletStar, + + /// + /// BulletStart + /// + BulletStart, + + /// + /// BulletStop + /// + BulletStop, + + /// + /// BulletStopAlt + /// + BulletStopAlt, + + /// + /// BulletTick + /// + BulletTick, + + /// + /// BulletToggleMinus + /// + BulletToggleMinus, + + /// + /// BulletTogglePlus + /// + BulletTogglePlus, + + /// + /// BulletWhite + /// + BulletWhite, + + /// + /// BulletWrench + /// + BulletWrench, + + /// + /// BulletWrenchRed + /// + BulletWrenchRed, + + /// + /// BulletYellow + /// + BulletYellow, + + /// + /// Button + /// + Button, + + /// + /// Cake + /// + Cake, + + /// + /// CakeOut + /// + CakeOut, + + /// + /// CakeSliced + /// + CakeSliced, + + /// + /// Calculator + /// + Calculator, + + /// + /// CalculatorAdd + /// + CalculatorAdd, + + /// + /// CalculatorDelete + /// + CalculatorDelete, + + /// + /// CalculatorEdit + /// + CalculatorEdit, + + /// + /// CalculatorError + /// + CalculatorError, + + /// + /// CalculatorLink + /// + CalculatorLink, + + /// + /// Calendar + /// + Calendar, + + /// + /// CalendarAdd + /// + CalendarAdd, + + /// + /// CalendarDelete + /// + CalendarDelete, + + /// + /// CalendarEdit + /// + CalendarEdit, + + /// + /// CalendarLink + /// + CalendarLink, + + /// + /// CalendarSelectDay + /// + CalendarSelectDay, + + /// + /// CalendarSelectNone + /// + CalendarSelectNone, + + /// + /// CalendarSelectWeek + /// + CalendarSelectWeek, + + /// + /// CalendarStar + /// + CalendarStar, + + /// + /// CalendarViewDay + /// + CalendarViewDay, + + /// + /// CalendarViewMonth + /// + CalendarViewMonth, + + /// + /// CalendarViewWeek + /// + CalendarViewWeek, + + /// + /// Camera + /// + Camera, + + /// + /// CameraAdd + /// + CameraAdd, + + /// + /// CameraConnect + /// + CameraConnect, + + /// + /// CameraDelete + /// + CameraDelete, + + /// + /// CameraEdit + /// + CameraEdit, + + /// + /// CameraError + /// + CameraError, + + /// + /// CameraGo + /// + CameraGo, + + /// + /// CameraLink + /// + CameraLink, + + /// + /// CameraMagnify + /// + CameraMagnify, + + /// + /// CameraPicture + /// + CameraPicture, + + /// + /// CameraSmall + /// + CameraSmall, + + /// + /// CameraStart + /// + CameraStart, + + /// + /// CameraStop + /// + CameraStop, + + /// + /// Cancel + /// + Cancel, + + /// + /// Car + /// + Car, + + /// + /// Cart + /// + Cart, + + /// + /// CartAdd + /// + CartAdd, + + /// + /// CartDelete + /// + CartDelete, + + /// + /// CartEdit + /// + CartEdit, + + /// + /// CartError + /// + CartError, + + /// + /// CartFull + /// + CartFull, + + /// + /// CartGo + /// + CartGo, + + /// + /// CartMagnify + /// + CartMagnify, + + /// + /// CartPut + /// + CartPut, + + /// + /// CartRemove + /// + CartRemove, + + /// + /// CarAdd + /// + CarAdd, + + /// + /// CarDelete + /// + CarDelete, + + /// + /// CarError + /// + CarError, + + /// + /// CarRed + /// + CarRed, + + /// + /// CarStart + /// + CarStart, + + /// + /// CarStop + /// + CarStop, + + /// + /// Cd + /// + Cd, + + /// + /// Cdr + /// + Cdr, + + /// + /// CdrAdd + /// + CdrAdd, + + /// + /// CdrBurn + /// + CdrBurn, + + /// + /// CdrCross + /// + CdrCross, + + /// + /// CdrDelete + /// + CdrDelete, + + /// + /// CdrEdit + /// + CdrEdit, + + /// + /// CdrEject + /// + CdrEject, + + /// + /// CdrError + /// + CdrError, + + /// + /// CdrGo + /// + CdrGo, + + /// + /// CdrMagnify + /// + CdrMagnify, + + /// + /// CdrPlay + /// + CdrPlay, + + /// + /// CdrStart + /// + CdrStart, + + /// + /// CdrStop + /// + CdrStop, + + /// + /// CdrStopAlt + /// + CdrStopAlt, + + /// + /// CdrTick + /// + CdrTick, + + /// + /// CdAdd + /// + CdAdd, + + /// + /// CdBurn + /// + CdBurn, + + /// + /// CdDelete + /// + CdDelete, + + /// + /// CdEdit + /// + CdEdit, + + /// + /// CdEject + /// + CdEject, + + /// + /// CdGo + /// + CdGo, + + /// + /// CdMagnify + /// + CdMagnify, + + /// + /// CdPlay + /// + CdPlay, + + /// + /// CdStop + /// + CdStop, + + /// + /// CdStopAlt + /// + CdStopAlt, + + /// + /// CdTick + /// + CdTick, + + /// + /// ChartBar + /// + ChartBar, + + /// + /// ChartBarAdd + /// + ChartBarAdd, + + /// + /// ChartBarDelete + /// + ChartBarDelete, + + /// + /// ChartBarEdit + /// + ChartBarEdit, + + /// + /// ChartBarError + /// + ChartBarError, + + /// + /// ChartBarLink + /// + ChartBarLink, + + /// + /// ChartCurve + /// + ChartCurve, + + /// + /// ChartCurveAdd + /// + ChartCurveAdd, + + /// + /// ChartCurveDelete + /// + ChartCurveDelete, + + /// + /// ChartCurveEdit + /// + ChartCurveEdit, + + /// + /// ChartCurveError + /// + ChartCurveError, + + /// + /// ChartCurveGo + /// + ChartCurveGo, + + /// + /// ChartCurveLink + /// + ChartCurveLink, + + /// + /// ChartLine + /// + ChartLine, + + /// + /// ChartLineAdd + /// + ChartLineAdd, + + /// + /// ChartLineDelete + /// + ChartLineDelete, + + /// + /// ChartLineEdit + /// + ChartLineEdit, + + /// + /// ChartLineError + /// + ChartLineError, + + /// + /// ChartLineLink + /// + ChartLineLink, + + /// + /// ChartOrganisation + /// + ChartOrganisation, + + /// + /// ChartOrganisationAdd + /// + ChartOrganisationAdd, + + /// + /// ChartOrganisationDelete + /// + ChartOrganisationDelete, + + /// + /// ChartOrgInverted + /// + ChartOrgInverted, + + /// + /// ChartPie + /// + ChartPie, + + /// + /// ChartPieAdd + /// + ChartPieAdd, + + /// + /// ChartPieDelete + /// + ChartPieDelete, + + /// + /// ChartPieEdit + /// + ChartPieEdit, + + /// + /// ChartPieError + /// + ChartPieError, + + /// + /// ChartPieLightning + /// + ChartPieLightning, + + /// + /// ChartPieLink + /// + ChartPieLink, + + /// + /// CheckError + /// + CheckError, + + /// + /// Clipboard + /// + Clipboard, + + /// + /// Clock + /// + Clock, + + /// + /// ClockAdd + /// + ClockAdd, + + /// + /// ClockDelete + /// + ClockDelete, + + /// + /// ClockEdit + /// + ClockEdit, + + /// + /// ClockError + /// + ClockError, + + /// + /// ClockGo + /// + ClockGo, + + /// + /// ClockLink + /// + ClockLink, + + /// + /// ClockPause + /// + ClockPause, + + /// + /// ClockPlay + /// + ClockPlay, + + /// + /// ClockRed + /// + ClockRed, + + /// + /// ClockStart + /// + ClockStart, + + /// + /// ClockStop + /// + ClockStop, + + /// + /// ClockStop2 + /// + ClockStop2, + + /// + /// Cmy + /// + Cmy, + + /// + /// Cog + /// + Cog, + + /// + /// CogAdd + /// + CogAdd, + + /// + /// CogDelete + /// + CogDelete, + + /// + /// CogEdit + /// + CogEdit, + + /// + /// CogError + /// + CogError, + + /// + /// CogGo + /// + CogGo, + + /// + /// CogStart + /// + CogStart, + + /// + /// CogStop + /// + CogStop, + + /// + /// Coins + /// + Coins, + + /// + /// CoinsAdd + /// + CoinsAdd, + + /// + /// CoinsDelete + /// + CoinsDelete, + + /// + /// Color + /// + Color, + + /// + /// ColorSwatch + /// + ColorSwatch, + + /// + /// ColorWheel + /// + ColorWheel, + + /// + /// Comment + /// + Comment, + + /// + /// Comments + /// + Comments, + + /// + /// CommentsAdd + /// + CommentsAdd, + + /// + /// CommentsDelete + /// + CommentsDelete, + + /// + /// CommentAdd + /// + CommentAdd, + + /// + /// CommentDelete + /// + CommentDelete, + + /// + /// CommentDull + /// + CommentDull, + + /// + /// CommentEdit + /// + CommentEdit, + + /// + /// CommentPlay + /// + CommentPlay, + + /// + /// CommentRecord + /// + CommentRecord, + + /// + /// Compass + /// + Compass, + + /// + /// Compress + /// + Compress, + + /// + /// Computer + /// + Computer, + + /// + /// ComputerAdd + /// + ComputerAdd, + + /// + /// ComputerConnect + /// + ComputerConnect, + + /// + /// ComputerDelete + /// + ComputerDelete, + + /// + /// ComputerEdit + /// + ComputerEdit, + + /// + /// ComputerError + /// + ComputerError, + + /// + /// ComputerGo + /// + ComputerGo, + + /// + /// ComputerKey + /// + ComputerKey, + + /// + /// ComputerLink + /// + ComputerLink, + + /// + /// ComputerMagnify + /// + ComputerMagnify, + + /// + /// ComputerOff + /// + ComputerOff, + + /// + /// ComputerStart + /// + ComputerStart, + + /// + /// ComputerStop + /// + ComputerStop, + + /// + /// ComputerWrench + /// + ComputerWrench, + + /// + /// Connect + /// + Connect, + + /// + /// Contrast + /// + Contrast, + + /// + /// ContrastDecrease + /// + ContrastDecrease, + + /// + /// ContrastHigh + /// + ContrastHigh, + + /// + /// ContrastIncrease + /// + ContrastIncrease, + + /// + /// ContrastLow + /// + ContrastLow, + + /// + /// Controller + /// + Controller, + + /// + /// ControllerAdd + /// + ControllerAdd, + + /// + /// ControllerDelete + /// + ControllerDelete, + + /// + /// ControllerError + /// + ControllerError, + + /// + /// ControlAdd + /// + ControlAdd, + + /// + /// ControlAddBlue + /// + ControlAddBlue, + + /// + /// ControlBlank + /// + ControlBlank, + + /// + /// ControlBlankBlue + /// + ControlBlankBlue, + + /// + /// ControlEject + /// + ControlEject, + + /// + /// ControlEjectBlue + /// + ControlEjectBlue, + + /// + /// ControlEnd + /// + ControlEnd, + + /// + /// ControlEndBlue + /// + ControlEndBlue, + + /// + /// ControlEqualizer + /// + ControlEqualizer, + + /// + /// ControlEqualizerBlue + /// + ControlEqualizerBlue, + + /// + /// ControlFastforward + /// + ControlFastforward, + + /// + /// ControlFastforwardBlue + /// + ControlFastforwardBlue, + + /// + /// ControlPause + /// + ControlPause, + + /// + /// ControlPauseBlue + /// + ControlPauseBlue, + + /// + /// ControlPlay + /// + ControlPlay, + + /// + /// ControlPlayBlue + /// + ControlPlayBlue, + + /// + /// ControlPower + /// + ControlPower, + + /// + /// ControlPowerBlue + /// + ControlPowerBlue, + + /// + /// ControlRecord + /// + ControlRecord, + + /// + /// ControlRecordBlue + /// + ControlRecordBlue, + + /// + /// ControlRemove + /// + ControlRemove, + + /// + /// ControlRemoveBlue + /// + ControlRemoveBlue, + + /// + /// ControlRepeat + /// + ControlRepeat, + + /// + /// ControlRepeatBlue + /// + ControlRepeatBlue, + + /// + /// ControlRewind + /// + ControlRewind, + + /// + /// ControlRewindBlue + /// + ControlRewindBlue, + + /// + /// ControlStart + /// + ControlStart, + + /// + /// ControlStartBlue + /// + ControlStartBlue, + + /// + /// ControlStop + /// + ControlStop, + + /// + /// ControlStopBlue + /// + ControlStopBlue, + + /// + /// Creditcards + /// + Creditcards, + + /// + /// Cross + /// + Cross, + + /// + /// Css + /// + Css, + + /// + /// CssAdd + /// + CssAdd, + + /// + /// CssDelete + /// + CssDelete, + + /// + /// CssError + /// + CssError, + + /// + /// CssGo + /// + CssGo, + + /// + /// CssValid + /// + CssValid, + + /// + /// Cup + /// + Cup, + + /// + /// CupAdd + /// + CupAdd, + + /// + /// CupBlack + /// + CupBlack, + + /// + /// CupDelete + /// + CupDelete, + + /// + /// CupEdit + /// + CupEdit, + + /// + /// CupError + /// + CupError, + + /// + /// CupGo + /// + CupGo, + + /// + /// CupGreen + /// + CupGreen, + + /// + /// CupKey + /// + CupKey, + + /// + /// CupLink + /// + CupLink, + + /// + /// CupTea + /// + CupTea, + + /// + /// Cursor + /// + Cursor, + + /// + /// CursorSmall + /// + CursorSmall, + + /// + /// Cut + /// + Cut, + + /// + /// CutRed + /// + CutRed, + + /// + /// Database + /// + Database, + + /// + /// DatabaseAdd + /// + DatabaseAdd, + + /// + /// DatabaseConnect + /// + DatabaseConnect, + + /// + /// DatabaseCopy + /// + DatabaseCopy, + + /// + /// DatabaseDelete + /// + DatabaseDelete, + + /// + /// DatabaseEdit + /// + DatabaseEdit, + + /// + /// DatabaseError + /// + DatabaseError, + + /// + /// DatabaseGear + /// + DatabaseGear, + + /// + /// DatabaseGo + /// + DatabaseGo, + + /// + /// DatabaseKey + /// + DatabaseKey, + + /// + /// DatabaseLightning + /// + DatabaseLightning, + + /// + /// DatabaseLink + /// + DatabaseLink, + + /// + /// DatabaseRefresh + /// + DatabaseRefresh, + + /// + /// DatabaseSave + /// + DatabaseSave, + + /// + /// DatabaseStart + /// + DatabaseStart, + + /// + /// DatabaseStop + /// + DatabaseStop, + + /// + /// DatabaseTable + /// + DatabaseTable, + + /// + /// DatabaseWrench + /// + DatabaseWrench, + + /// + /// DatabaseYellow + /// + DatabaseYellow, + + /// + /// DatabaseYellowStart + /// + DatabaseYellowStart, + + /// + /// DatabaseYellowStop + /// + DatabaseYellowStop, + + /// + /// Date + /// + Date, + + /// + /// DateAdd + /// + DateAdd, + + /// + /// DateDelete + /// + DateDelete, + + /// + /// DateEdit + /// + DateEdit, + + /// + /// DateError + /// + DateError, + + /// + /// DateGo + /// + DateGo, + + /// + /// DateLink + /// + DateLink, + + /// + /// DateMagnify + /// + DateMagnify, + + /// + /// DateNext + /// + DateNext, + + /// + /// DatePrevious + /// + DatePrevious, + + /// + /// Decline + /// + Decline, + + /// + /// Delete + /// + Delete, + + /// + /// DeviceStylus + /// + DeviceStylus, + + /// + /// Disconnect + /// + Disconnect, + + /// + /// Disk + /// + Disk, + + /// + /// DiskBlack + /// + DiskBlack, + + /// + /// DiskBlackError + /// + DiskBlackError, + + /// + /// DiskBlackMagnify + /// + DiskBlackMagnify, + + /// + /// DiskDownload + /// + DiskDownload, + + /// + /// DiskEdit + /// + DiskEdit, + + /// + /// DiskError + /// + DiskError, + + /// + /// DiskMagnify + /// + DiskMagnify, + + /// + /// DiskMultiple + /// + DiskMultiple, + + /// + /// DiskUpload + /// + DiskUpload, + + /// + /// Door + /// + Door, + + /// + /// DoorError + /// + DoorError, + + /// + /// DoorIn + /// + DoorIn, + + /// + /// DoorOpen + /// + DoorOpen, + + /// + /// DoorOut + /// + DoorOut, + + /// + /// Drink + /// + Drink, + + /// + /// DrinkEmpty + /// + DrinkEmpty, + + /// + /// DrinkRed + /// + DrinkRed, + + /// + /// Drive + /// + Drive, + + /// + /// DriveAdd + /// + DriveAdd, + + /// + /// DriveBurn + /// + DriveBurn, + + /// + /// DriveCd + /// + DriveCd, + + /// + /// DriveCdr + /// + DriveCdr, + + /// + /// DriveCdEmpty + /// + DriveCdEmpty, + + /// + /// DriveDelete + /// + DriveDelete, + + /// + /// DriveDisk + /// + DriveDisk, + + /// + /// DriveEdit + /// + DriveEdit, + + /// + /// DriveError + /// + DriveError, + + /// + /// DriveGo + /// + DriveGo, + + /// + /// DriveKey + /// + DriveKey, + + /// + /// DriveLink + /// + DriveLink, + + /// + /// DriveMagnify + /// + DriveMagnify, + + /// + /// DriveNetwork + /// + DriveNetwork, + + /// + /// DriveNetworkError + /// + DriveNetworkError, + + /// + /// DriveNetworkStop + /// + DriveNetworkStop, + + /// + /// DriveRename + /// + DriveRename, + + /// + /// DriveUser + /// + DriveUser, + + /// + /// DriveWeb + /// + DriveWeb, + + /// + /// Dvd + /// + Dvd, + + /// + /// DvdAdd + /// + DvdAdd, + + /// + /// DvdDelete + /// + DvdDelete, + + /// + /// DvdEdit + /// + DvdEdit, + + /// + /// DvdError + /// + DvdError, + + /// + /// DvdGo + /// + DvdGo, + + /// + /// DvdKey + /// + DvdKey, + + /// + /// DvdLink + /// + DvdLink, + + /// + /// DvdStart + /// + DvdStart, + + /// + /// DvdStop + /// + DvdStop, + + /// + /// EjectBlue + /// + EjectBlue, + + /// + /// EjectGreen + /// + EjectGreen, + + /// + /// Email + /// + Email, + + /// + /// EmailAdd + /// + EmailAdd, + + /// + /// EmailAttach + /// + EmailAttach, + + /// + /// EmailDelete + /// + EmailDelete, + + /// + /// EmailEdit + /// + EmailEdit, + + /// + /// EmailError + /// + EmailError, + + /// + /// EmailGo + /// + EmailGo, + + /// + /// EmailLink + /// + EmailLink, + + /// + /// EmailMagnify + /// + EmailMagnify, + + /// + /// EmailOpen + /// + EmailOpen, + + /// + /// EmailOpenImage + /// + EmailOpenImage, + + /// + /// EmailStar + /// + EmailStar, + + /// + /// EmailStart + /// + EmailStart, + + /// + /// EmailStop + /// + EmailStop, + + /// + /// EmailTransfer + /// + EmailTransfer, + + /// + /// EmoticonEvilgrin + /// + EmoticonEvilgrin, + + /// + /// EmoticonGrin + /// + EmoticonGrin, + + /// + /// EmoticonHappy + /// + EmoticonHappy, + + /// + /// EmoticonSmile + /// + EmoticonSmile, + + /// + /// EmoticonSurprised + /// + EmoticonSurprised, + + /// + /// EmoticonTongue + /// + EmoticonTongue, + + /// + /// EmoticonUnhappy + /// + EmoticonUnhappy, + + /// + /// EmoticonWaii + /// + EmoticonWaii, + + /// + /// EmoticonWink + /// + EmoticonWink, + + /// + /// Erase + /// + Erase, + + /// + /// Error + /// + Error, + + /// + /// ErrorAdd + /// + ErrorAdd, + + /// + /// ErrorDelete + /// + ErrorDelete, + + /// + /// ErrorGo + /// + ErrorGo, + + /// + /// Exclamation + /// + Exclamation, + + /// + /// Eye + /// + Eye, + + /// + /// Eyes + /// + Eyes, + + /// + /// Feed + /// + Feed, + + /// + /// FeedAdd + /// + FeedAdd, + + /// + /// FeedDelete + /// + FeedDelete, + + /// + /// FeedDisk + /// + FeedDisk, + + /// + /// FeedEdit + /// + FeedEdit, + + /// + /// FeedError + /// + FeedError, + + /// + /// FeedGo + /// + FeedGo, + + /// + /// FeedKey + /// + FeedKey, + + /// + /// FeedLink + /// + FeedLink, + + /// + /// FeedMagnify + /// + FeedMagnify, + + /// + /// FeedStar + /// + FeedStar, + + /// + /// Female + /// + Female, + + /// + /// Film + /// + Film, + + /// + /// FilmAdd + /// + FilmAdd, + + /// + /// FilmDelete + /// + FilmDelete, + + /// + /// FilmEdit + /// + FilmEdit, + + /// + /// FilmEject + /// + FilmEject, + + /// + /// FilmError + /// + FilmError, + + /// + /// FilmGo + /// + FilmGo, + + /// + /// FilmKey + /// + FilmKey, + + /// + /// FilmLink + /// + FilmLink, + + /// + /// FilmMagnify + /// + FilmMagnify, + + /// + /// FilmSave + /// + FilmSave, + + /// + /// FilmStar + /// + FilmStar, + + /// + /// FilmStart + /// + FilmStart, + + /// + /// FilmStop + /// + FilmStop, + + /// + /// Find + /// + Find, + + /// + /// FingerPoint + /// + FingerPoint, + + /// + /// FlagAd + /// + FlagAd, + + /// + /// FlagAe + /// + FlagAe, + + /// + /// FlagAf + /// + FlagAf, + + /// + /// FlagAg + /// + FlagAg, + + /// + /// FlagAi + /// + FlagAi, + + /// + /// FlagAl + /// + FlagAl, + + /// + /// FlagAm + /// + FlagAm, + + /// + /// FlagAn + /// + FlagAn, + + /// + /// FlagAo + /// + FlagAo, + + /// + /// FlagAr + /// + FlagAr, + + /// + /// FlagAs + /// + FlagAs, + + /// + /// FlagAt + /// + FlagAt, + + /// + /// FlagAu + /// + FlagAu, + + /// + /// FlagAw + /// + FlagAw, + + /// + /// FlagAx + /// + FlagAx, + + /// + /// FlagAz + /// + FlagAz, + + /// + /// FlagBa + /// + FlagBa, + + /// + /// FlagBb + /// + FlagBb, + + /// + /// FlagBd + /// + FlagBd, + + /// + /// FlagBe + /// + FlagBe, + + /// + /// FlagBf + /// + FlagBf, + + /// + /// FlagBg + /// + FlagBg, + + /// + /// FlagBh + /// + FlagBh, + + /// + /// FlagBi + /// + FlagBi, + + /// + /// FlagBj + /// + FlagBj, + + /// + /// FlagBlack + /// + FlagBlack, + + /// + /// FlagBlue + /// + FlagBlue, + + /// + /// FlagBm + /// + FlagBm, + + /// + /// FlagBn + /// + FlagBn, + + /// + /// FlagBo + /// + FlagBo, + + /// + /// FlagBr + /// + FlagBr, + + /// + /// FlagBs + /// + FlagBs, + + /// + /// FlagBt + /// + FlagBt, + + /// + /// FlagBv + /// + FlagBv, + + /// + /// FlagBw + /// + FlagBw, + + /// + /// FlagBy + /// + FlagBy, + + /// + /// FlagBz + /// + FlagBz, + + /// + /// FlagCa + /// + FlagCa, + + /// + /// FlagCatalonia + /// + FlagCatalonia, + + /// + /// FlagCc + /// + FlagCc, + + /// + /// FlagCd + /// + FlagCd, + + /// + /// FlagCf + /// + FlagCf, + + /// + /// FlagCg + /// + FlagCg, + + /// + /// FlagCh + /// + FlagCh, + + /// + /// FlagChecked + /// + FlagChecked, + + /// + /// FlagCi + /// + FlagCi, + + /// + /// FlagCk + /// + FlagCk, + + /// + /// FlagCl + /// + FlagCl, + + /// + /// FlagCm + /// + FlagCm, + + /// + /// FlagCn + /// + FlagCn, + + /// + /// FlagCo + /// + FlagCo, + + /// + /// FlagCr + /// + FlagCr, + + /// + /// FlagCs + /// + FlagCs, + + /// + /// FlagCu + /// + FlagCu, + + /// + /// FlagCv + /// + FlagCv, + + /// + /// FlagCx + /// + FlagCx, + + /// + /// FlagCy + /// + FlagCy, + + /// + /// FlagCz + /// + FlagCz, + + /// + /// FlagDe + /// + FlagDe, + + /// + /// FlagDj + /// + FlagDj, + + /// + /// FlagDk + /// + FlagDk, + + /// + /// FlagDm + /// + FlagDm, + + /// + /// FlagDo + /// + FlagDo, + + /// + /// FlagDz + /// + FlagDz, + + /// + /// FlagEc + /// + FlagEc, + + /// + /// FlagEe + /// + FlagEe, + + /// + /// FlagEg + /// + FlagEg, + + /// + /// FlagEh + /// + FlagEh, + + /// + /// FlagEngland + /// + FlagEngland, + + /// + /// FlagEr + /// + FlagEr, + + /// + /// FlagEs + /// + FlagEs, + + /// + /// FlagEt + /// + FlagEt, + + /// + /// FlagEuropeanunion + /// + FlagEuropeanunion, + + /// + /// FlagFam + /// + FlagFam, + + /// + /// FlagFi + /// + FlagFi, + + /// + /// FlagFj + /// + FlagFj, + + /// + /// FlagFk + /// + FlagFk, + + /// + /// FlagFm + /// + FlagFm, + + /// + /// FlagFo + /// + FlagFo, + + /// + /// FlagFr + /// + FlagFr, + + /// + /// FlagFrance + /// + FlagFrance, + + /// + /// FlagGa + /// + FlagGa, + + /// + /// FlagGb + /// + FlagGb, + + /// + /// FlagGd + /// + FlagGd, + + /// + /// FlagGe + /// + FlagGe, + + /// + /// FlagGf + /// + FlagGf, + + /// + /// FlagGg + /// + FlagGg, + + /// + /// FlagGh + /// + FlagGh, + + /// + /// FlagGi + /// + FlagGi, + + /// + /// FlagGl + /// + FlagGl, + + /// + /// FlagGm + /// + FlagGm, + + /// + /// FlagGn + /// + FlagGn, + + /// + /// FlagGp + /// + FlagGp, + + /// + /// FlagGq + /// + FlagGq, + + /// + /// FlagGr + /// + FlagGr, + + /// + /// FlagGreen + /// + FlagGreen, + + /// + /// FlagGrey + /// + FlagGrey, + + /// + /// FlagGs + /// + FlagGs, + + /// + /// FlagGt + /// + FlagGt, + + /// + /// FlagGu + /// + FlagGu, + + /// + /// FlagGw + /// + FlagGw, + + /// + /// FlagGy + /// + FlagGy, + + /// + /// FlagHk + /// + FlagHk, + + /// + /// FlagHm + /// + FlagHm, + + /// + /// FlagHn + /// + FlagHn, + + /// + /// FlagHr + /// + FlagHr, + + /// + /// FlagHt + /// + FlagHt, + + /// + /// FlagHu + /// + FlagHu, + + /// + /// FlagId + /// + FlagId, + + /// + /// FlagIe + /// + FlagIe, + + /// + /// FlagIl + /// + FlagIl, + + /// + /// FlagIn + /// + FlagIn, + + /// + /// FlagIo + /// + FlagIo, + + /// + /// FlagIq + /// + FlagIq, + + /// + /// FlagIr + /// + FlagIr, + + /// + /// FlagIs + /// + FlagIs, + + /// + /// FlagIt + /// + FlagIt, + + /// + /// FlagJm + /// + FlagJm, + + /// + /// FlagJo + /// + FlagJo, + + /// + /// FlagJp + /// + FlagJp, + + /// + /// FlagKe + /// + FlagKe, + + /// + /// FlagKg + /// + FlagKg, + + /// + /// FlagKh + /// + FlagKh, + + /// + /// FlagKi + /// + FlagKi, + + /// + /// FlagKm + /// + FlagKm, + + /// + /// FlagKn + /// + FlagKn, + + /// + /// FlagKp + /// + FlagKp, + + /// + /// FlagKr + /// + FlagKr, + + /// + /// FlagKw + /// + FlagKw, + + /// + /// FlagKy + /// + FlagKy, + + /// + /// FlagKz + /// + FlagKz, + + /// + /// FlagLa + /// + FlagLa, + + /// + /// FlagLb + /// + FlagLb, + + /// + /// FlagLc + /// + FlagLc, + + /// + /// FlagLi + /// + FlagLi, + + /// + /// FlagLk + /// + FlagLk, + + /// + /// FlagLr + /// + FlagLr, + + /// + /// FlagLs + /// + FlagLs, + + /// + /// FlagLt + /// + FlagLt, + + /// + /// FlagLu + /// + FlagLu, + + /// + /// FlagLv + /// + FlagLv, + + /// + /// FlagLy + /// + FlagLy, + + /// + /// FlagMa + /// + FlagMa, + + /// + /// FlagMc + /// + FlagMc, + + /// + /// FlagMd + /// + FlagMd, + + /// + /// FlagMe + /// + FlagMe, + + /// + /// FlagMg + /// + FlagMg, + + /// + /// FlagMh + /// + FlagMh, + + /// + /// FlagMk + /// + FlagMk, + + /// + /// FlagMl + /// + FlagMl, + + /// + /// FlagMm + /// + FlagMm, + + /// + /// FlagMn + /// + FlagMn, + + /// + /// FlagMo + /// + FlagMo, + + /// + /// FlagMp + /// + FlagMp, + + /// + /// FlagMq + /// + FlagMq, + + /// + /// FlagMr + /// + FlagMr, + + /// + /// FlagMs + /// + FlagMs, + + /// + /// FlagMt + /// + FlagMt, + + /// + /// FlagMu + /// + FlagMu, + + /// + /// FlagMv + /// + FlagMv, + + /// + /// FlagMw + /// + FlagMw, + + /// + /// FlagMx + /// + FlagMx, + + /// + /// FlagMy + /// + FlagMy, + + /// + /// FlagMz + /// + FlagMz, + + /// + /// FlagNa + /// + FlagNa, + + /// + /// FlagNc + /// + FlagNc, + + /// + /// FlagNe + /// + FlagNe, + + /// + /// FlagNf + /// + FlagNf, + + /// + /// FlagNg + /// + FlagNg, + + /// + /// FlagNi + /// + FlagNi, + + /// + /// FlagNl + /// + FlagNl, + + /// + /// FlagNo + /// + FlagNo, + + /// + /// FlagNp + /// + FlagNp, + + /// + /// FlagNr + /// + FlagNr, + + /// + /// FlagNu + /// + FlagNu, + + /// + /// FlagNz + /// + FlagNz, + + /// + /// FlagOm + /// + FlagOm, + + /// + /// FlagOrange + /// + FlagOrange, + + /// + /// FlagPa + /// + FlagPa, + + /// + /// FlagPe + /// + FlagPe, + + /// + /// FlagPf + /// + FlagPf, + + /// + /// FlagPg + /// + FlagPg, + + /// + /// FlagPh + /// + FlagPh, + + /// + /// FlagPink + /// + FlagPink, + + /// + /// FlagPk + /// + FlagPk, + + /// + /// FlagPl + /// + FlagPl, + + /// + /// FlagPm + /// + FlagPm, + + /// + /// FlagPn + /// + FlagPn, + + /// + /// FlagPr + /// + FlagPr, + + /// + /// FlagPs + /// + FlagPs, + + /// + /// FlagPt + /// + FlagPt, + + /// + /// FlagPurple + /// + FlagPurple, + + /// + /// FlagPw + /// + FlagPw, + + /// + /// FlagPy + /// + FlagPy, + + /// + /// FlagQa + /// + FlagQa, + + /// + /// FlagRe + /// + FlagRe, + + /// + /// FlagRed + /// + FlagRed, + + /// + /// FlagRo + /// + FlagRo, + + /// + /// FlagRs + /// + FlagRs, + + /// + /// FlagRu + /// + FlagRu, + + /// + /// FlagRw + /// + FlagRw, + + /// + /// FlagSa + /// + FlagSa, + + /// + /// FlagSb + /// + FlagSb, + + /// + /// FlagSc + /// + FlagSc, + + /// + /// FlagScotland + /// + FlagScotland, + + /// + /// FlagSd + /// + FlagSd, + + /// + /// FlagSe + /// + FlagSe, + + /// + /// FlagSg + /// + FlagSg, + + /// + /// FlagSh + /// + FlagSh, + + /// + /// FlagSi + /// + FlagSi, + + /// + /// FlagSj + /// + FlagSj, + + /// + /// FlagSk + /// + FlagSk, + + /// + /// FlagSl + /// + FlagSl, + + /// + /// FlagSm + /// + FlagSm, + + /// + /// FlagSn + /// + FlagSn, + + /// + /// FlagSo + /// + FlagSo, + + /// + /// FlagSr + /// + FlagSr, + + /// + /// FlagSt + /// + FlagSt, + + /// + /// FlagSv + /// + FlagSv, + + /// + /// FlagSy + /// + FlagSy, + + /// + /// FlagSz + /// + FlagSz, + + /// + /// FlagTc + /// + FlagTc, + + /// + /// FlagTd + /// + FlagTd, + + /// + /// FlagTf + /// + FlagTf, + + /// + /// FlagTg + /// + FlagTg, + + /// + /// FlagTh + /// + FlagTh, + + /// + /// FlagTj + /// + FlagTj, + + /// + /// FlagTk + /// + FlagTk, + + /// + /// FlagTl + /// + FlagTl, + + /// + /// FlagTm + /// + FlagTm, + + /// + /// FlagTn + /// + FlagTn, + + /// + /// FlagTo + /// + FlagTo, + + /// + /// FlagTr + /// + FlagTr, + + /// + /// FlagTt + /// + FlagTt, + + /// + /// FlagTv + /// + FlagTv, + + /// + /// FlagTw + /// + FlagTw, + + /// + /// FlagTz + /// + FlagTz, + + /// + /// FlagUa + /// + FlagUa, + + /// + /// FlagUg + /// + FlagUg, + + /// + /// FlagUm + /// + FlagUm, + + /// + /// FlagUs + /// + FlagUs, + + /// + /// FlagUy + /// + FlagUy, + + /// + /// FlagUz + /// + FlagUz, + + /// + /// FlagVa + /// + FlagVa, + + /// + /// FlagVc + /// + FlagVc, + + /// + /// FlagVe + /// + FlagVe, + + /// + /// FlagVg + /// + FlagVg, + + /// + /// FlagVi + /// + FlagVi, + + /// + /// FlagVn + /// + FlagVn, + + /// + /// FlagVu + /// + FlagVu, + + /// + /// FlagWales + /// + FlagWales, + + /// + /// FlagWf + /// + FlagWf, + + /// + /// FlagWhite + /// + FlagWhite, + + /// + /// FlagWs + /// + FlagWs, + + /// + /// FlagYe + /// + FlagYe, + + /// + /// FlagYellow + /// + FlagYellow, + + /// + /// FlagYt + /// + FlagYt, + + /// + /// FlagZa + /// + FlagZa, + + /// + /// FlagZm + /// + FlagZm, + + /// + /// FlagZw + /// + FlagZw, + + /// + /// FlowerDaisy + /// + FlowerDaisy, + + /// + /// Folder + /// + Folder, + + /// + /// FolderAdd + /// + FolderAdd, + + /// + /// FolderBell + /// + FolderBell, + + /// + /// FolderBookmark + /// + FolderBookmark, + + /// + /// FolderBrick + /// + FolderBrick, + + /// + /// FolderBug + /// + FolderBug, + + /// + /// FolderCamera + /// + FolderCamera, + + /// + /// FolderConnect + /// + FolderConnect, + + /// + /// FolderDatabase + /// + FolderDatabase, + + /// + /// FolderDelete + /// + FolderDelete, + + /// + /// FolderEdit + /// + FolderEdit, + + /// + /// FolderError + /// + FolderError, + + /// + /// FolderExplore + /// + FolderExplore, + + /// + /// FolderFeed + /// + FolderFeed, + + /// + /// FolderFilm + /// + FolderFilm, + + /// + /// FolderFind + /// + FolderFind, + + /// + /// FolderFont + /// + FolderFont, + + /// + /// FolderGo + /// + FolderGo, + + /// + /// FolderHeart + /// + FolderHeart, + + /// + /// FolderHome + /// + FolderHome, + + /// + /// FolderImage + /// + FolderImage, + + /// + /// FolderKey + /// + FolderKey, + + /// + /// FolderLightbulb + /// + FolderLightbulb, + + /// + /// FolderLink + /// + FolderLink, + + /// + /// FolderMagnify + /// + FolderMagnify, + + /// + /// FolderPage + /// + FolderPage, + + /// + /// FolderPageWhite + /// + FolderPageWhite, + + /// + /// FolderPalette + /// + FolderPalette, + + /// + /// FolderPicture + /// + FolderPicture, + + /// + /// FolderStar + /// + FolderStar, + + /// + /// FolderTable + /// + FolderTable, + + /// + /// FolderUp + /// + FolderUp, + + /// + /// FolderUser + /// + FolderUser, + + /// + /// FolderWrench + /// + FolderWrench, + + /// + /// Font + /// + Font, + + /// + /// FontAdd + /// + FontAdd, + + /// + /// FontColor + /// + FontColor, + + /// + /// FontDelete + /// + FontDelete, + + /// + /// FontGo + /// + FontGo, + + /// + /// FontLarger + /// + FontLarger, + + /// + /// FontSmaller + /// + FontSmaller, + + /// + /// ForwardBlue + /// + ForwardBlue, + + /// + /// ForwardGreen + /// + ForwardGreen, + + /// + /// Group + /// + Group, + + /// + /// GroupAdd + /// + GroupAdd, + + /// + /// GroupDelete + /// + GroupDelete, + + /// + /// GroupEdit + /// + GroupEdit, + + /// + /// GroupError + /// + GroupError, + + /// + /// GroupGear + /// + GroupGear, + + /// + /// GroupGo + /// + GroupGo, + + /// + /// GroupKey + /// + GroupKey, + + /// + /// GroupLink + /// + GroupLink, + + /// + /// Heart + /// + Heart, + + /// + /// HeartAdd + /// + HeartAdd, + + /// + /// HeartBroken + /// + HeartBroken, + + /// + /// HeartConnect + /// + HeartConnect, + + /// + /// HeartDelete + /// + HeartDelete, + + /// + /// Help + /// + Help, + + /// + /// Hourglass + /// + Hourglass, + + /// + /// HourglassAdd + /// + HourglassAdd, + + /// + /// HourglassDelete + /// + HourglassDelete, + + /// + /// HourglassGo + /// + HourglassGo, + + /// + /// HourglassLink + /// + HourglassLink, + + /// + /// House + /// + House, + + /// + /// HouseConnect + /// + HouseConnect, + + /// + /// HouseGo + /// + HouseGo, + + /// + /// HouseKey + /// + HouseKey, + + /// + /// HouseLink + /// + HouseLink, + + /// + /// HouseStar + /// + HouseStar, + + /// + /// Html + /// + Html, + + /// + /// HtmlAdd + /// + HtmlAdd, + + /// + /// HtmlDelete + /// + HtmlDelete, + + /// + /// HtmlError + /// + HtmlError, + + /// + /// HtmlGo + /// + HtmlGo, + + /// + /// HtmlValid + /// + HtmlValid, + + /// + /// Image + /// + Image, + + /// + /// Images + /// + Images, + + /// + /// ImageAdd + /// + ImageAdd, + + /// + /// ImageDelete + /// + ImageDelete, + + /// + /// ImageEdit + /// + ImageEdit, + + /// + /// ImageLink + /// + ImageLink, + + /// + /// ImageMagnify + /// + ImageMagnify, + + /// + /// ImageStar + /// + ImageStar, + + /// + /// Information + /// + Information, + + /// + /// Ipod + /// + Ipod, + + /// + /// IpodCast + /// + IpodCast, + + /// + /// IpodCastAdd + /// + IpodCastAdd, + + /// + /// IpodCastDelete + /// + IpodCastDelete, + + /// + /// IpodConnect + /// + IpodConnect, + + /// + /// IpodNano + /// + IpodNano, + + /// + /// IpodNanoConnect + /// + IpodNanoConnect, + + /// + /// IpodSound + /// + IpodSound, + + /// + /// Joystick + /// + Joystick, + + /// + /// JoystickAdd + /// + JoystickAdd, + + /// + /// JoystickConnect + /// + JoystickConnect, + + /// + /// JoystickDelete + /// + JoystickDelete, + + /// + /// JoystickError + /// + JoystickError, + + /// + /// Key + /// + Key, + + /// + /// Keyboard + /// + Keyboard, + + /// + /// KeyboardAdd + /// + KeyboardAdd, + + /// + /// KeyboardConnect + /// + KeyboardConnect, + + /// + /// KeyboardDelete + /// + KeyboardDelete, + + /// + /// KeyboardMagnify + /// + KeyboardMagnify, + + /// + /// KeyAdd + /// + KeyAdd, + + /// + /// KeyDelete + /// + KeyDelete, + + /// + /// KeyGo + /// + KeyGo, + + /// + /// KeyStart + /// + KeyStart, + + /// + /// KeyStop + /// + KeyStop, + + /// + /// Laptop + /// + Laptop, + + /// + /// LaptopAdd + /// + LaptopAdd, + + /// + /// LaptopConnect + /// + LaptopConnect, + + /// + /// LaptopDelete + /// + LaptopDelete, + + /// + /// LaptopDisk + /// + LaptopDisk, + + /// + /// LaptopEdit + /// + LaptopEdit, + + /// + /// LaptopError + /// + LaptopError, + + /// + /// LaptopGo + /// + LaptopGo, + + /// + /// LaptopKey + /// + LaptopKey, + + /// + /// LaptopLink + /// + LaptopLink, + + /// + /// LaptopMagnify + /// + LaptopMagnify, + + /// + /// LaptopStart + /// + LaptopStart, + + /// + /// LaptopStop + /// + LaptopStop, + + /// + /// LaptopWrench + /// + LaptopWrench, + + /// + /// Layers + /// + Layers, + + /// + /// Layout + /// + Layout, + + /// + /// LayoutAdd + /// + LayoutAdd, + + /// + /// LayoutContent + /// + LayoutContent, + + /// + /// LayoutDelete + /// + LayoutDelete, + + /// + /// LayoutEdit + /// + LayoutEdit, + + /// + /// LayoutError + /// + LayoutError, + + /// + /// LayoutHeader + /// + LayoutHeader, + + /// + /// LayoutKey + /// + LayoutKey, + + /// + /// LayoutLightning + /// + LayoutLightning, + + /// + /// LayoutLink + /// + LayoutLink, + + /// + /// LayoutSidebar + /// + LayoutSidebar, + + /// + /// Lightbulb + /// + Lightbulb, + + /// + /// LightbulbAdd + /// + LightbulbAdd, + + /// + /// LightbulbDelete + /// + LightbulbDelete, + + /// + /// LightbulbOff + /// + LightbulbOff, + + /// + /// Lightning + /// + Lightning, + + /// + /// LightningAdd + /// + LightningAdd, + + /// + /// LightningDelete + /// + LightningDelete, + + /// + /// LightningGo + /// + LightningGo, + + /// + /// Link + /// + Link, + + /// + /// LinkAdd + /// + LinkAdd, + + /// + /// LinkBreak + /// + LinkBreak, + + /// + /// LinkDelete + /// + LinkDelete, + + /// + /// LinkEdit + /// + LinkEdit, + + /// + /// LinkError + /// + LinkError, + + /// + /// LinkGo + /// + LinkGo, + + /// + /// Lock + /// + Lock, + + /// + /// LockAdd + /// + LockAdd, + + /// + /// LockBreak + /// + LockBreak, + + /// + /// LockDelete + /// + LockDelete, + + /// + /// LockEdit + /// + LockEdit, + + /// + /// LockGo + /// + LockGo, + + /// + /// LockKey + /// + LockKey, + + /// + /// LockOpen + /// + LockOpen, + + /// + /// LockStart + /// + LockStart, + + /// + /// LockStop + /// + LockStop, + + /// + /// Lorry + /// + Lorry, + + /// + /// LorryAdd + /// + LorryAdd, + + /// + /// LorryDelete + /// + LorryDelete, + + /// + /// LorryError + /// + LorryError, + + /// + /// LorryFlatbed + /// + LorryFlatbed, + + /// + /// LorryGo + /// + LorryGo, + + /// + /// LorryLink + /// + LorryLink, + + /// + /// LorryStart + /// + LorryStart, + + /// + /// LorryStop + /// + LorryStop, + + /// + /// MagifierZoomOut + /// + MagifierZoomOut, + + /// + /// Magnifier + /// + Magnifier, + + /// + /// MagnifierZoomIn + /// + MagnifierZoomIn, + + /// + /// Mail + /// + Mail, + + /// + /// Male + /// + Male, + + /// + /// Map + /// + Map, + + /// + /// MapAdd + /// + MapAdd, + + /// + /// MapClipboard + /// + MapClipboard, + + /// + /// MapCursor + /// + MapCursor, + + /// + /// MapDelete + /// + MapDelete, + + /// + /// MapEdit + /// + MapEdit, + + /// + /// MapError + /// + MapError, + + /// + /// MapGo + /// + MapGo, + + /// + /// MapLink + /// + MapLink, + + /// + /// MapMagnify + /// + MapMagnify, + + /// + /// MapStart + /// + MapStart, + + /// + /// MapStop + /// + MapStop, + + /// + /// MedalBronze1 + /// + MedalBronze1, + + /// + /// MedalBronze2 + /// + MedalBronze2, + + /// + /// MedalBronze3 + /// + MedalBronze3, + + /// + /// MedalBronzeAdd + /// + MedalBronzeAdd, + + /// + /// MedalBronzeDelete + /// + MedalBronzeDelete, + + /// + /// MedalGold1 + /// + MedalGold1, + + /// + /// MedalGold2 + /// + MedalGold2, + + /// + /// MedalGold3 + /// + MedalGold3, + + /// + /// MedalGoldAdd + /// + MedalGoldAdd, + + /// + /// MedalGoldDelete + /// + MedalGoldDelete, + + /// + /// MedalSilver1 + /// + MedalSilver1, + + /// + /// MedalSilver2 + /// + MedalSilver2, + + /// + /// MedalSilver3 + /// + MedalSilver3, + + /// + /// MedalSilverAdd + /// + MedalSilverAdd, + + /// + /// MedalSilverDelete + /// + MedalSilverDelete, + + /// + /// Money + /// + Money, + + /// + /// MoneyAdd + /// + MoneyAdd, + + /// + /// MoneyDelete + /// + MoneyDelete, + + /// + /// MoneyDollar + /// + MoneyDollar, + + /// + /// MoneyEuro + /// + MoneyEuro, + + /// + /// MoneyPound + /// + MoneyPound, + + /// + /// MoneyYen + /// + MoneyYen, + + /// + /// Monitor + /// + Monitor, + + /// + /// MonitorAdd + /// + MonitorAdd, + + /// + /// MonitorDelete + /// + MonitorDelete, + + /// + /// MonitorEdit + /// + MonitorEdit, + + /// + /// MonitorError + /// + MonitorError, + + /// + /// MonitorGo + /// + MonitorGo, + + /// + /// MonitorKey + /// + MonitorKey, + + /// + /// MonitorLightning + /// + MonitorLightning, + + /// + /// MonitorLink + /// + MonitorLink, + + /// + /// MoonFull + /// + MoonFull, + + /// + /// Mouse + /// + Mouse, + + /// + /// MouseAdd + /// + MouseAdd, + + /// + /// MouseDelete + /// + MouseDelete, + + /// + /// MouseError + /// + MouseError, + + /// + /// Music + /// + Music, + + /// + /// MusicNote + /// + MusicNote, + + /// + /// Neighbourhood + /// + Neighbourhood, + + /// + /// New + /// + New, + + /// + /// Newspaper + /// + Newspaper, + + /// + /// NewspaperAdd + /// + NewspaperAdd, + + /// + /// NewspaperDelete + /// + NewspaperDelete, + + /// + /// NewspaperGo + /// + NewspaperGo, + + /// + /// NewspaperLink + /// + NewspaperLink, + + /// + /// NewBlue + /// + NewBlue, + + /// + /// NewRed + /// + NewRed, + + /// + /// NextBlue + /// + NextBlue, + + /// + /// NextGreen + /// + NextGreen, + + /// + /// Note + /// + Note, + + /// + /// NoteAdd + /// + NoteAdd, + + /// + /// NoteDelete + /// + NoteDelete, + + /// + /// NoteEdit + /// + NoteEdit, + + /// + /// NoteError + /// + NoteError, + + /// + /// NoteGo + /// + NoteGo, + + /// + /// Outline + /// + Outline, + + /// + /// Overlays + /// + Overlays, + + /// + /// Package + /// + Package, + + /// + /// PackageAdd + /// + PackageAdd, + + /// + /// PackageDelete + /// + PackageDelete, + + /// + /// PackageDown + /// + PackageDown, + + /// + /// PackageGo + /// + PackageGo, + + /// + /// PackageGreen + /// + PackageGreen, + + /// + /// PackageIn + /// + PackageIn, + + /// + /// PackageLink + /// + PackageLink, + + /// + /// PackageSe + /// + PackageSe, + + /// + /// PackageStart + /// + PackageStart, + + /// + /// PackageStop + /// + PackageStop, + + /// + /// PackageWhite + /// + PackageWhite, + + /// + /// Page + /// + Page, + + /// + /// PageAdd + /// + PageAdd, + + /// + /// PageAttach + /// + PageAttach, + + /// + /// PageBack + /// + PageBack, + + /// + /// PageBreak + /// + PageBreak, + + /// + /// PageBreakInsert + /// + PageBreakInsert, + + /// + /// PageCancel + /// + PageCancel, + + /// + /// PageCode + /// + PageCode, + + /// + /// PageCopy + /// + PageCopy, + + /// + /// PageDelete + /// + PageDelete, + + /// + /// PageEdit + /// + PageEdit, + + /// + /// PageError + /// + PageError, + + /// + /// PageExcel + /// + PageExcel, + + /// + /// PageFind + /// + PageFind, + + /// + /// PageForward + /// + PageForward, + + /// + /// PageGear + /// + PageGear, + + /// + /// PageGo + /// + PageGo, + + /// + /// PageGreen + /// + PageGreen, + + /// + /// PageHeaderFooter + /// + PageHeaderFooter, + + /// + /// PageKey + /// + PageKey, + + /// + /// PageLandscape + /// + PageLandscape, + + /// + /// PageLandscapeShot + /// + PageLandscapeShot, + + /// + /// PageLightning + /// + PageLightning, + + /// + /// PageLink + /// + PageLink, + + /// + /// PageMagnify + /// + PageMagnify, + + /// + /// PagePaintbrush + /// + PagePaintbrush, + + /// + /// PagePaste + /// + PagePaste, + + /// + /// PagePortrait + /// + PagePortrait, + + /// + /// PagePortraitShot + /// + PagePortraitShot, + + /// + /// PageRed + /// + PageRed, + + /// + /// PageRefresh + /// + PageRefresh, + + /// + /// PageSave + /// + PageSave, + + /// + /// PageWhite + /// + PageWhite, + + /// + /// PageWhiteAcrobat + /// + PageWhiteAcrobat, + + /// + /// PageWhiteActionscript + /// + PageWhiteActionscript, + + /// + /// PageWhiteAdd + /// + PageWhiteAdd, + + /// + /// PageWhiteBreak + /// + PageWhiteBreak, + + /// + /// PageWhiteC + /// + PageWhiteC, + + /// + /// PageWhiteCamera + /// + PageWhiteCamera, + + /// + /// PageWhiteCd + /// + PageWhiteCd, + + /// + /// PageWhiteCdr + /// + PageWhiteCdr, + + /// + /// PageWhiteCode + /// + PageWhiteCode, + + /// + /// PageWhiteCodeRed + /// + PageWhiteCodeRed, + + /// + /// PageWhiteColdfusion + /// + PageWhiteColdfusion, + + /// + /// PageWhiteCompressed + /// + PageWhiteCompressed, + + /// + /// PageWhiteConnect + /// + PageWhiteConnect, + + /// + /// PageWhiteCopy + /// + PageWhiteCopy, + + /// + /// PageWhiteCplusplus + /// + PageWhiteCplusplus, + + /// + /// PageWhiteCsharp + /// + PageWhiteCsharp, + + /// + /// PageWhiteCup + /// + PageWhiteCup, + + /// + /// PageWhiteDatabase + /// + PageWhiteDatabase, + + /// + /// PageWhiteDatabaseYellow + /// + PageWhiteDatabaseYellow, + + /// + /// PageWhiteDelete + /// + PageWhiteDelete, + + /// + /// PageWhiteDvd + /// + PageWhiteDvd, + + /// + /// PageWhiteEdit + /// + PageWhiteEdit, + + /// + /// PageWhiteError + /// + PageWhiteError, + + /// + /// PageWhiteExcel + /// + PageWhiteExcel, + + /// + /// PageWhiteFind + /// + PageWhiteFind, + + /// + /// PageWhiteFlash + /// + PageWhiteFlash, + + /// + /// PageWhiteFont + /// + PageWhiteFont, + + /// + /// PageWhiteFreehand + /// + PageWhiteFreehand, + + /// + /// PageWhiteGear + /// + PageWhiteGear, + + /// + /// PageWhiteGet + /// + PageWhiteGet, + + /// + /// PageWhiteGo + /// + PageWhiteGo, + + /// + /// PageWhiteH + /// + PageWhiteH, + + /// + /// PageWhiteHorizontal + /// + PageWhiteHorizontal, + + /// + /// PageWhiteKey + /// + PageWhiteKey, + + /// + /// PageWhiteLightning + /// + PageWhiteLightning, + + /// + /// PageWhiteLink + /// + PageWhiteLink, + + /// + /// PageWhiteMagnify + /// + PageWhiteMagnify, + + /// + /// PageWhiteMedal + /// + PageWhiteMedal, + + /// + /// PageWhiteOffice + /// + PageWhiteOffice, + + /// + /// PageWhitePaint + /// + PageWhitePaint, + + /// + /// PageWhitePaintbrush + /// + PageWhitePaintbrush, + + /// + /// PageWhitePaint2 + /// + PageWhitePaint2, + + /// + /// PageWhitePaste + /// + PageWhitePaste, + + /// + /// PageWhitePasteTable + /// + PageWhitePasteTable, + + /// + /// PageWhitePhp + /// + PageWhitePhp, + + /// + /// PageWhitePicture + /// + PageWhitePicture, + + /// + /// PageWhitePowerpoint + /// + PageWhitePowerpoint, + + /// + /// PageWhitePut + /// + PageWhitePut, + + /// + /// PageWhiteRefresh + /// + PageWhiteRefresh, + + /// + /// PageWhiteRuby + /// + PageWhiteRuby, + + /// + /// PageWhiteSideBySide + /// + PageWhiteSideBySide, + + /// + /// PageWhiteStack + /// + PageWhiteStack, + + /// + /// PageWhiteStar + /// + PageWhiteStar, + + /// + /// PageWhiteSwoosh + /// + PageWhiteSwoosh, + + /// + /// PageWhiteText + /// + PageWhiteText, + + /// + /// PageWhiteTextWidth + /// + PageWhiteTextWidth, + + /// + /// PageWhiteTux + /// + PageWhiteTux, + + /// + /// PageWhiteVector + /// + PageWhiteVector, + + /// + /// PageWhiteVisualstudio + /// + PageWhiteVisualstudio, + + /// + /// PageWhiteWidth + /// + PageWhiteWidth, + + /// + /// PageWhiteWord + /// + PageWhiteWord, + + /// + /// PageWhiteWorld + /// + PageWhiteWorld, + + /// + /// PageWhiteWrench + /// + PageWhiteWrench, + + /// + /// PageWhiteZip + /// + PageWhiteZip, + + /// + /// PageWord + /// + PageWord, + + /// + /// PageWorld + /// + PageWorld, + + /// + /// Paint + /// + Paint, + + /// + /// Paintbrush + /// + Paintbrush, + + /// + /// PaintbrushColor + /// + PaintbrushColor, + + /// + /// Paintcan + /// + Paintcan, + + /// + /// PaintcanRed + /// + PaintcanRed, + + /// + /// PaintCanBrush + /// + PaintCanBrush, + + /// + /// Palette + /// + Palette, + + /// + /// PastePlain + /// + PastePlain, + + /// + /// PasteWord + /// + PasteWord, + + /// + /// PauseBlue + /// + PauseBlue, + + /// + /// PauseGreen + /// + PauseGreen, + + /// + /// PauseRecord + /// + PauseRecord, + + /// + /// Pencil + /// + Pencil, + + /// + /// PencilAdd + /// + PencilAdd, + + /// + /// PencilDelete + /// + PencilDelete, + + /// + /// PencilGo + /// + PencilGo, + + /// + /// Phone + /// + Phone, + + /// + /// PhoneAdd + /// + PhoneAdd, + + /// + /// PhoneDelete + /// + PhoneDelete, + + /// + /// PhoneEdit + /// + PhoneEdit, + + /// + /// PhoneError + /// + PhoneError, + + /// + /// PhoneGo + /// + PhoneGo, + + /// + /// PhoneKey + /// + PhoneKey, + + /// + /// PhoneLink + /// + PhoneLink, + + /// + /// PhoneSound + /// + PhoneSound, + + /// + /// PhoneStart + /// + PhoneStart, + + /// + /// PhoneStop + /// + PhoneStop, + + /// + /// Photo + /// + Photo, + + /// + /// Photos + /// + Photos, + + /// + /// PhotoAdd + /// + PhotoAdd, + + /// + /// PhotoDelete + /// + PhotoDelete, + + /// + /// PhotoEdit + /// + PhotoEdit, + + /// + /// PhotoLink + /// + PhotoLink, + + /// + /// PhotoPaint + /// + PhotoPaint, + + /// + /// Picture + /// + Picture, + + /// + /// Pictures + /// + Pictures, + + /// + /// PicturesThumbs + /// + PicturesThumbs, + + /// + /// PictureAdd + /// + PictureAdd, + + /// + /// PictureClipboard + /// + PictureClipboard, + + /// + /// PictureDelete + /// + PictureDelete, + + /// + /// PictureEdit + /// + PictureEdit, + + /// + /// PictureEmpty + /// + PictureEmpty, + + /// + /// PictureError + /// + PictureError, + + /// + /// PictureGo + /// + PictureGo, + + /// + /// PictureKey + /// + PictureKey, + + /// + /// PictureLink + /// + PictureLink, + + /// + /// PictureSave + /// + PictureSave, + + /// + /// Pilcrow + /// + Pilcrow, + + /// + /// Pill + /// + Pill, + + /// + /// PillAdd + /// + PillAdd, + + /// + /// PillDelete + /// + PillDelete, + + /// + /// PillError + /// + PillError, + + /// + /// PillGo + /// + PillGo, + + /// + /// PlayBlue + /// + PlayBlue, + + /// + /// PlayGreen + /// + PlayGreen, + + /// + /// Plugin + /// + Plugin, + + /// + /// PluginAdd + /// + PluginAdd, + + /// + /// PluginDelete + /// + PluginDelete, + + /// + /// PluginDisabled + /// + PluginDisabled, + + /// + /// PluginEdit + /// + PluginEdit, + + /// + /// PluginError + /// + PluginError, + + /// + /// PluginGo + /// + PluginGo, + + /// + /// PluginKey + /// + PluginKey, + + /// + /// PluginLink + /// + PluginLink, + + /// + /// PreviousGreen + /// + PreviousGreen, + + /// + /// Printer + /// + Printer, + + /// + /// PrinterAdd + /// + PrinterAdd, + + /// + /// PrinterCancel + /// + PrinterCancel, + + /// + /// PrinterColor + /// + PrinterColor, + + /// + /// PrinterConnect + /// + PrinterConnect, + + /// + /// PrinterDelete + /// + PrinterDelete, + + /// + /// PrinterEmpty + /// + PrinterEmpty, + + /// + /// PrinterError + /// + PrinterError, + + /// + /// PrinterGo + /// + PrinterGo, + + /// + /// PrinterKey + /// + PrinterKey, + + /// + /// PrinterMono + /// + PrinterMono, + + /// + /// PrinterStart + /// + PrinterStart, + + /// + /// PrinterStop + /// + PrinterStop, + + /// + /// Rainbow + /// + Rainbow, + + /// + /// RainbowStar + /// + RainbowStar, + + /// + /// RecordBlue + /// + RecordBlue, + + /// + /// RecordGreen + /// + RecordGreen, + + /// + /// RecordRed + /// + RecordRed, + + /// + /// Reload + /// + Reload, + + /// + /// Report + /// + Report, + + /// + /// ReportAdd + /// + ReportAdd, + + /// + /// ReportDelete + /// + ReportDelete, + + /// + /// ReportDisk + /// + ReportDisk, + + /// + /// ReportEdit + /// + ReportEdit, + + /// + /// ReportGo + /// + ReportGo, + + /// + /// ReportKey + /// + ReportKey, + + /// + /// ReportLink + /// + ReportLink, + + /// + /// ReportMagnify + /// + ReportMagnify, + + /// + /// ReportPicture + /// + ReportPicture, + + /// + /// ReportStart + /// + ReportStart, + + /// + /// ReportStop + /// + ReportStop, + + /// + /// ReportUser + /// + ReportUser, + + /// + /// ReportWord + /// + ReportWord, + + /// + /// ResultsetFirst + /// + ResultsetFirst, + + /// + /// ResultsetLast + /// + ResultsetLast, + + /// + /// ResultsetNext + /// + ResultsetNext, + + /// + /// ResultsetPrevious + /// + ResultsetPrevious, + + /// + /// ReverseBlue + /// + ReverseBlue, + + /// + /// ReverseGreen + /// + ReverseGreen, + + /// + /// RewindBlue + /// + RewindBlue, + + /// + /// RewindGreen + /// + RewindGreen, + + /// + /// Rgb + /// + Rgb, + + /// + /// Rosette + /// + Rosette, + + /// + /// RosetteBlue + /// + RosetteBlue, + + /// + /// Rss + /// + Rss, + + /// + /// RssAdd + /// + RssAdd, + + /// + /// RssDelete + /// + RssDelete, + + /// + /// RssError + /// + RssError, + + /// + /// RssGo + /// + RssGo, + + /// + /// RssValid + /// + RssValid, + + /// + /// Ruby + /// + Ruby, + + /// + /// RubyAdd + /// + RubyAdd, + + /// + /// RubyDelete + /// + RubyDelete, + + /// + /// RubyGear + /// + RubyGear, + + /// + /// RubyGet + /// + RubyGet, + + /// + /// RubyGo + /// + RubyGo, + + /// + /// RubyKey + /// + RubyKey, + + /// + /// RubyLink + /// + RubyLink, + + /// + /// RubyPut + /// + RubyPut, + + /// + /// Script + /// + Script, + + /// + /// ScriptAdd + /// + ScriptAdd, + + /// + /// ScriptCode + /// + ScriptCode, + + /// + /// ScriptCodeOriginal + /// + ScriptCodeOriginal, + + /// + /// ScriptCodeRed + /// + ScriptCodeRed, + + /// + /// ScriptDelete + /// + ScriptDelete, + + /// + /// ScriptEdit + /// + ScriptEdit, + + /// + /// ScriptError + /// + ScriptError, + + /// + /// ScriptGear + /// + ScriptGear, + + /// + /// ScriptGo + /// + ScriptGo, + + /// + /// ScriptKey + /// + ScriptKey, + + /// + /// ScriptLightning + /// + ScriptLightning, + + /// + /// ScriptLink + /// + ScriptLink, + + /// + /// ScriptPalette + /// + ScriptPalette, + + /// + /// ScriptSave + /// + ScriptSave, + + /// + /// ScriptStart + /// + ScriptStart, + + /// + /// ScriptStop + /// + ScriptStop, + + /// + /// Seasons + /// + Seasons, + + /// + /// SectionCollapsed + /// + SectionCollapsed, + + /// + /// SectionExpanded + /// + SectionExpanded, + + /// + /// Server + /// + Server, + + /// + /// ServerAdd + /// + ServerAdd, + + /// + /// ServerChart + /// + ServerChart, + + /// + /// ServerCompressed + /// + ServerCompressed, + + /// + /// ServerConnect + /// + ServerConnect, + + /// + /// ServerDatabase + /// + ServerDatabase, + + /// + /// ServerDelete + /// + ServerDelete, + + /// + /// ServerEdit + /// + ServerEdit, + + /// + /// ServerError + /// + ServerError, + + /// + /// ServerGo + /// + ServerGo, + + /// + /// ServerKey + /// + ServerKey, + + /// + /// ServerLightning + /// + ServerLightning, + + /// + /// ServerLink + /// + ServerLink, + + /// + /// ServerStart + /// + ServerStart, + + /// + /// ServerStop + /// + ServerStop, + + /// + /// ServerUncompressed + /// + ServerUncompressed, + + /// + /// ServerWrench + /// + ServerWrench, + + /// + /// Shading + /// + Shading, + + /// + /// ShapesMany + /// + ShapesMany, + + /// + /// ShapesManySelect + /// + ShapesManySelect, + + /// + /// Shape3d + /// + Shape3d, + + /// + /// ShapeAlignBottom + /// + ShapeAlignBottom, + + /// + /// ShapeAlignCenter + /// + ShapeAlignCenter, + + /// + /// ShapeAlignLeft + /// + ShapeAlignLeft, + + /// + /// ShapeAlignMiddle + /// + ShapeAlignMiddle, + + /// + /// ShapeAlignRight + /// + ShapeAlignRight, + + /// + /// ShapeAlignTop + /// + ShapeAlignTop, + + /// + /// ShapeFlipHorizontal + /// + ShapeFlipHorizontal, + + /// + /// ShapeFlipVertical + /// + ShapeFlipVertical, + + /// + /// ShapeGroup + /// + ShapeGroup, + + /// + /// ShapeHandles + /// + ShapeHandles, + + /// + /// ShapeMoveBack + /// + ShapeMoveBack, + + /// + /// ShapeMoveBackwards + /// + ShapeMoveBackwards, + + /// + /// ShapeMoveForwards + /// + ShapeMoveForwards, + + /// + /// ShapeMoveFront + /// + ShapeMoveFront, + + /// + /// ShapeRotateAnticlockwise + /// + ShapeRotateAnticlockwise, + + /// + /// ShapeRotateClockwise + /// + ShapeRotateClockwise, + + /// + /// ShapeShadeA + /// + ShapeShadeA, + + /// + /// ShapeShadeB + /// + ShapeShadeB, + + /// + /// ShapeShadeC + /// + ShapeShadeC, + + /// + /// ShapeShadow + /// + ShapeShadow, + + /// + /// ShapeShadowToggle + /// + ShapeShadowToggle, + + /// + /// ShapeSquare + /// + ShapeSquare, + + /// + /// ShapeSquareAdd + /// + ShapeSquareAdd, + + /// + /// ShapeSquareDelete + /// + ShapeSquareDelete, + + /// + /// ShapeSquareEdit + /// + ShapeSquareEdit, + + /// + /// ShapeSquareError + /// + ShapeSquareError, + + /// + /// ShapeSquareGo + /// + ShapeSquareGo, + + /// + /// ShapeSquareKey + /// + ShapeSquareKey, + + /// + /// ShapeSquareLink + /// + ShapeSquareLink, + + /// + /// ShapeSquareSelect + /// + ShapeSquareSelect, + + /// + /// ShapeUngroup + /// + ShapeUngroup, + + /// + /// Share + /// + Share, + + /// + /// Shield + /// + Shield, + + /// + /// ShieldAdd + /// + ShieldAdd, + + /// + /// ShieldDelete + /// + ShieldDelete, + + /// + /// ShieldError + /// + ShieldError, + + /// + /// ShieldGo + /// + ShieldGo, + + /// + /// ShieldRainbow + /// + ShieldRainbow, + + /// + /// ShieldSilver + /// + ShieldSilver, + + /// + /// ShieldStart + /// + ShieldStart, + + /// + /// ShieldStop + /// + ShieldStop, + + /// + /// Sitemap + /// + Sitemap, + + /// + /// SitemapColor + /// + SitemapColor, + + /// + /// Smartphone + /// + Smartphone, + + /// + /// SmartphoneAdd + /// + SmartphoneAdd, + + /// + /// SmartphoneConnect + /// + SmartphoneConnect, + + /// + /// SmartphoneDelete + /// + SmartphoneDelete, + + /// + /// SmartphoneDisk + /// + SmartphoneDisk, + + /// + /// SmartphoneEdit + /// + SmartphoneEdit, + + /// + /// SmartphoneError + /// + SmartphoneError, + + /// + /// SmartphoneGo + /// + SmartphoneGo, + + /// + /// SmartphoneKey + /// + SmartphoneKey, + + /// + /// SmartphoneWrench + /// + SmartphoneWrench, + + /// + /// SortAscending + /// + SortAscending, + + /// + /// SortDescending + /// + SortDescending, + + /// + /// Sound + /// + Sound, + + /// + /// SoundAdd + /// + SoundAdd, + + /// + /// SoundDelete + /// + SoundDelete, + + /// + /// SoundHigh + /// + SoundHigh, + + /// + /// SoundIn + /// + SoundIn, + + /// + /// SoundLow + /// + SoundLow, + + /// + /// SoundMute + /// + SoundMute, + + /// + /// SoundNone + /// + SoundNone, + + /// + /// SoundOut + /// + SoundOut, + + /// + /// Spellcheck + /// + Spellcheck, + + /// + /// Sport8ball + /// + Sport8ball, + + /// + /// SportBasketball + /// + SportBasketball, + + /// + /// SportFootball + /// + SportFootball, + + /// + /// SportGolf + /// + SportGolf, + + /// + /// SportGolfPractice + /// + SportGolfPractice, + + /// + /// SportRaquet + /// + SportRaquet, + + /// + /// SportShuttlecock + /// + SportShuttlecock, + + /// + /// SportSoccer + /// + SportSoccer, + + /// + /// SportTennis + /// + SportTennis, + + /// + /// Star + /// + Star, + + /// + /// StarBronze + /// + StarBronze, + + /// + /// StarBronzeHalfGrey + /// + StarBronzeHalfGrey, + + /// + /// StarGold + /// + StarGold, + + /// + /// StarGoldHalfGrey + /// + StarGoldHalfGrey, + + /// + /// StarGoldHalfSilver + /// + StarGoldHalfSilver, + + /// + /// StarGrey + /// + StarGrey, + + /// + /// StarHalfGrey + /// + StarHalfGrey, + + /// + /// StarSilver + /// + StarSilver, + + /// + /// StatusAway + /// + StatusAway, + + /// + /// StatusBeRightBack + /// + StatusBeRightBack, + + /// + /// StatusBusy + /// + StatusBusy, + + /// + /// StatusInvisible + /// + StatusInvisible, + + /// + /// StatusOffline + /// + StatusOffline, + + /// + /// StatusOnline + /// + StatusOnline, + + /// + /// Stop + /// + Stop, + + /// + /// StopBlue + /// + StopBlue, + + /// + /// StopGreen + /// + StopGreen, + + /// + /// StopRed + /// + StopRed, + + /// + /// Style + /// + Style, + + /// + /// StyleAdd + /// + StyleAdd, + + /// + /// StyleDelete + /// + StyleDelete, + + /// + /// StyleEdit + /// + StyleEdit, + + /// + /// StyleGo + /// + StyleGo, + + /// + /// Sum + /// + Sum, + + /// + /// Tab + /// + Tab, + + /// + /// Table + /// + Table, + + /// + /// TableAdd + /// + TableAdd, + + /// + /// TableCell + /// + TableCell, + + /// + /// TableColumn + /// + TableColumn, + + /// + /// TableColumnAdd + /// + TableColumnAdd, + + /// + /// TableColumnDelete + /// + TableColumnDelete, + + /// + /// TableConnect + /// + TableConnect, + + /// + /// TableDelete + /// + TableDelete, + + /// + /// TableEdit + /// + TableEdit, + + /// + /// TableError + /// + TableError, + + /// + /// TableGear + /// + TableGear, + + /// + /// TableGo + /// + TableGo, + + /// + /// TableKey + /// + TableKey, + + /// + /// TableLightning + /// + TableLightning, + + /// + /// TableLink + /// + TableLink, + + /// + /// TableMultiple + /// + TableMultiple, + + /// + /// TableRefresh + /// + TableRefresh, + + /// + /// TableRelationship + /// + TableRelationship, + + /// + /// TableRow + /// + TableRow, + + /// + /// TableRowDelete + /// + TableRowDelete, + + /// + /// TableRowInsert + /// + TableRowInsert, + + /// + /// TableSave + /// + TableSave, + + /// + /// TableSort + /// + TableSort, + + /// + /// TabAdd + /// + TabAdd, + + /// + /// TabBlue + /// + TabBlue, + + /// + /// TabDelete + /// + TabDelete, + + /// + /// TabEdit + /// + TabEdit, + + /// + /// TabGo + /// + TabGo, + + /// + /// TabGreen + /// + TabGreen, + + /// + /// TabRed + /// + TabRed, + + /// + /// Tag + /// + Tag, + + /// + /// TagsGrey + /// + TagsGrey, + + /// + /// TagsRed + /// + TagsRed, + + /// + /// TagBlue + /// + TagBlue, + + /// + /// TagBlueAdd + /// + TagBlueAdd, + + /// + /// TagBlueDelete + /// + TagBlueDelete, + + /// + /// TagBlueEdit + /// + TagBlueEdit, + + /// + /// TagGreen + /// + TagGreen, + + /// + /// TagOrange + /// + TagOrange, + + /// + /// TagPink + /// + TagPink, + + /// + /// TagPurple + /// + TagPurple, + + /// + /// TagRed + /// + TagRed, + + /// + /// TagYellow + /// + TagYellow, + + /// + /// Telephone + /// + Telephone, + + /// + /// TelephoneAdd + /// + TelephoneAdd, + + /// + /// TelephoneDelete + /// + TelephoneDelete, + + /// + /// TelephoneEdit + /// + TelephoneEdit, + + /// + /// TelephoneError + /// + TelephoneError, + + /// + /// TelephoneGo + /// + TelephoneGo, + + /// + /// TelephoneKey + /// + TelephoneKey, + + /// + /// TelephoneLink + /// + TelephoneLink, + + /// + /// TelephoneRed + /// + TelephoneRed, + + /// + /// Television + /// + Television, + + /// + /// TelevisionAdd + /// + TelevisionAdd, + + /// + /// TelevisionDelete + /// + TelevisionDelete, + + /// + /// TelevisionIn + /// + TelevisionIn, + + /// + /// TelevisionOff + /// + TelevisionOff, + + /// + /// TelevisionOut + /// + TelevisionOut, + + /// + /// TelevisionStar + /// + TelevisionStar, + + /// + /// Textfield + /// + Textfield, + + /// + /// TextfieldAdd + /// + TextfieldAdd, + + /// + /// TextfieldDelete + /// + TextfieldDelete, + + /// + /// TextfieldKey + /// + TextfieldKey, + + /// + /// TextfieldRename + /// + TextfieldRename, + + /// + /// TextAb + /// + TextAb, + + /// + /// TextAlignCenter + /// + TextAlignCenter, + + /// + /// TextAlignJustify + /// + TextAlignJustify, + + /// + /// TextAlignLeft + /// + TextAlignLeft, + + /// + /// TextAlignRight + /// + TextAlignRight, + + /// + /// TextAllcaps + /// + TextAllcaps, + + /// + /// TextBold + /// + TextBold, + + /// + /// TextColumns + /// + TextColumns, + + /// + /// TextComplete + /// + TextComplete, + + /// + /// TextDirection + /// + TextDirection, + + /// + /// TextDoubleUnderline + /// + TextDoubleUnderline, + + /// + /// TextDropcaps + /// + TextDropcaps, + + /// + /// TextFit + /// + TextFit, + + /// + /// TextFlip + /// + TextFlip, + + /// + /// TextFontDefault + /// + TextFontDefault, + + /// + /// TextHeading1 + /// + TextHeading1, + + /// + /// TextHeading2 + /// + TextHeading2, + + /// + /// TextHeading3 + /// + TextHeading3, + + /// + /// TextHeading4 + /// + TextHeading4, + + /// + /// TextHeading5 + /// + TextHeading5, + + /// + /// TextHeading6 + /// + TextHeading6, + + /// + /// TextHorizontalrule + /// + TextHorizontalrule, + + /// + /// TextIndent + /// + TextIndent, + + /// + /// TextIndentRemove + /// + TextIndentRemove, + + /// + /// TextInverse + /// + TextInverse, + + /// + /// TextItalic + /// + TextItalic, + + /// + /// TextKerning + /// + TextKerning, + + /// + /// TextLeftToRight + /// + TextLeftToRight, + + /// + /// TextLetterspacing + /// + TextLetterspacing, + + /// + /// TextLetterOmega + /// + TextLetterOmega, + + /// + /// TextLinespacing + /// + TextLinespacing, + + /// + /// TextListBullets + /// + TextListBullets, + + /// + /// TextListNumbers + /// + TextListNumbers, + + /// + /// TextLowercase + /// + TextLowercase, + + /// + /// TextLowercaseA + /// + TextLowercaseA, + + /// + /// TextMirror + /// + TextMirror, + + /// + /// TextPaddingBottom + /// + TextPaddingBottom, + + /// + /// TextPaddingLeft + /// + TextPaddingLeft, + + /// + /// TextPaddingRight + /// + TextPaddingRight, + + /// + /// TextPaddingTop + /// + TextPaddingTop, + + /// + /// TextReplace + /// + TextReplace, + + /// + /// TextRightToLeft + /// + TextRightToLeft, + + /// + /// TextRotate0 + /// + TextRotate0, + + /// + /// TextRotate180 + /// + TextRotate180, + + /// + /// TextRotate270 + /// + TextRotate270, + + /// + /// TextRotate90 + /// + TextRotate90, + + /// + /// TextRuler + /// + TextRuler, + + /// + /// TextShading + /// + TextShading, + + /// + /// TextSignature + /// + TextSignature, + + /// + /// TextSmallcaps + /// + TextSmallcaps, + + /// + /// TextSpelling + /// + TextSpelling, + + /// + /// TextStrikethrough + /// + TextStrikethrough, + + /// + /// TextSubscript + /// + TextSubscript, + + /// + /// TextSuperscript + /// + TextSuperscript, + + /// + /// TextTab + /// + TextTab, + + /// + /// TextUnderline + /// + TextUnderline, + + /// + /// TextUppercase + /// + TextUppercase, + + /// + /// Theme + /// + Theme, + + /// + /// ThumbDown + /// + ThumbDown, + + /// + /// ThumbUp + /// + ThumbUp, + + /// + /// Tick + /// + Tick, + + /// + /// Time + /// + Time, + + /// + /// TimelineMarker + /// + TimelineMarker, + + /// + /// TimeAdd + /// + TimeAdd, + + /// + /// TimeDelete + /// + TimeDelete, + + /// + /// TimeGo + /// + TimeGo, + + /// + /// TimeGreen + /// + TimeGreen, + + /// + /// TimeRed + /// + TimeRed, + + /// + /// Transmit + /// + Transmit, + + /// + /// TransmitAdd + /// + TransmitAdd, + + /// + /// TransmitBlue + /// + TransmitBlue, + + /// + /// TransmitDelete + /// + TransmitDelete, + + /// + /// TransmitEdit + /// + TransmitEdit, + + /// + /// TransmitError + /// + TransmitError, + + /// + /// TransmitGo + /// + TransmitGo, + + /// + /// TransmitRed + /// + TransmitRed, + + /// + /// Tux + /// + Tux, + + /// + /// User + /// + User, + + /// + /// UserAdd + /// + UserAdd, + + /// + /// UserAlert + /// + UserAlert, + + /// + /// UserB + /// + UserB, + + /// + /// UserBrown + /// + UserBrown, + + /// + /// UserComment + /// + UserComment, + + /// + /// UserCross + /// + UserCross, + + /// + /// UserDelete + /// + UserDelete, + + /// + /// UserEarth + /// + UserEarth, + + /// + /// UserEdit + /// + UserEdit, + + /// + /// UserFemale + /// + UserFemale, + + /// + /// UserGo + /// + UserGo, + + /// + /// UserGray + /// + UserGray, + + /// + /// UserGrayCool + /// + UserGrayCool, + + /// + /// UserGreen + /// + UserGreen, + + /// + /// UserHome + /// + UserHome, + + /// + /// UserKey + /// + UserKey, + + /// + /// UserMagnify + /// + UserMagnify, + + /// + /// UserMature + /// + UserMature, + + /// + /// UserOrange + /// + UserOrange, + + /// + /// UserRed + /// + UserRed, + + /// + /// UserStar + /// + UserStar, + + /// + /// UserSuit + /// + UserSuit, + + /// + /// UserSuitBlack + /// + UserSuitBlack, + + /// + /// UserTick + /// + UserTick, + + /// + /// Vcard + /// + Vcard, + + /// + /// VcardAdd + /// + VcardAdd, + + /// + /// VcardDelete + /// + VcardDelete, + + /// + /// VcardEdit + /// + VcardEdit, + + /// + /// VcardKey + /// + VcardKey, + + /// + /// Vector + /// + Vector, + + /// + /// VectorAdd + /// + VectorAdd, + + /// + /// VectorDelete + /// + VectorDelete, + + /// + /// VectorKey + /// + VectorKey, + + /// + /// Wand + /// + Wand, + + /// + /// WeatherCloud + /// + WeatherCloud, + + /// + /// WeatherClouds + /// + WeatherClouds, + + /// + /// WeatherCloudy + /// + WeatherCloudy, + + /// + /// WeatherCloudyRain + /// + WeatherCloudyRain, + + /// + /// WeatherLightning + /// + WeatherLightning, + + /// + /// WeatherRain + /// + WeatherRain, + + /// + /// WeatherSnow + /// + WeatherSnow, + + /// + /// WeatherSun + /// + WeatherSun, + + /// + /// Webcam + /// + Webcam, + + /// + /// WebcamAdd + /// + WebcamAdd, + + /// + /// WebcamConnect + /// + WebcamConnect, + + /// + /// WebcamDelete + /// + WebcamDelete, + + /// + /// WebcamError + /// + WebcamError, + + /// + /// WebcamStart + /// + WebcamStart, + + /// + /// WebcamStop + /// + WebcamStop, + + /// + /// World + /// + World, + + /// + /// WorldAdd + /// + WorldAdd, + + /// + /// WorldConnect + /// + WorldConnect, + + /// + /// WorldDawn + /// + WorldDawn, + + /// + /// WorldDelete + /// + WorldDelete, + + /// + /// WorldEdit + /// + WorldEdit, + + /// + /// WorldGo + /// + WorldGo, + + /// + /// WorldKey + /// + WorldKey, + + /// + /// WorldLink + /// + WorldLink, + + /// + /// WorldNight + /// + WorldNight, + + /// + /// WorldOrbit + /// + WorldOrbit, + + /// + /// Wrench + /// + Wrench, + + /// + /// WrenchOrange + /// + WrenchOrange, + + /// + /// Xhtml + /// + Xhtml, + + /// + /// XhtmlAdd + /// + XhtmlAdd, + + /// + /// XhtmlDelete + /// + XhtmlDelete, + + /// + /// XhtmlError + /// + XhtmlError, + + /// + /// XhtmlGo + /// + XhtmlGo, + + /// + /// XhtmlValid + /// + XhtmlValid, + + /// + /// Zoom + /// + Zoom, + + /// + /// ZoomIn + /// + ZoomIn, + + /// + /// ZoomOut + /// + ZoomOut, + + /// + /// SystemClose + /// + SystemClose, + + /// + /// SystemNew + /// + SystemNew, + + /// + /// SystemSave + /// + SystemSave, + + /// + /// SystemSaveClose + /// + SystemSaveClose, + + /// + /// SystemSaveNew + /// + SystemSaveNew, + + /// + /// SystemSearch + /// + SystemSearch + } + + /// + /// 预定义图标名称 + /// + public static partial class IconHelper + { + /// + /// 获取图标名称 + /// + /// + /// + public static string GetName(Icon type) + { + string result = String.Empty; + + switch (type) + { + case Icon.None: + result = ""; + break; + case Icon.Accept: + result = "accept.png"; + break; + case Icon.Add: + result = "add.png"; + break; + case Icon.Anchor: + result = "anchor.png"; + break; + case Icon.Application: + result = "application.png"; + break; + case Icon.ApplicationAdd: + result = "application_add.png"; + break; + case Icon.ApplicationCascade: + result = "application_cascade.png"; + break; + case Icon.ApplicationDelete: + result = "application_delete.png"; + break; + case Icon.ApplicationDouble: + result = "application_double.png"; + break; + case Icon.ApplicationEdit: + result = "application_edit.png"; + break; + case Icon.ApplicationError: + result = "application_error.png"; + break; + case Icon.ApplicationForm: + result = "application_form.png"; + break; + case Icon.ApplicationFormAdd: + result = "application_form_add.png"; + break; + case Icon.ApplicationFormDelete: + result = "application_form_delete.png"; + break; + case Icon.ApplicationFormEdit: + result = "application_form_edit.png"; + break; + case Icon.ApplicationFormMagnify: + result = "application_form_magnify.png"; + break; + case Icon.ApplicationGet: + result = "application_get.png"; + break; + case Icon.ApplicationGo: + result = "application_go.png"; + break; + case Icon.ApplicationHome: + result = "application_home.png"; + break; + case Icon.ApplicationKey: + result = "application_key.png"; + break; + case Icon.ApplicationLightning: + result = "application_lightning.png"; + break; + case Icon.ApplicationLink: + result = "application_link.png"; + break; + case Icon.ApplicationOsx: + result = "application_osx.png"; + break; + case Icon.ApplicationOsxAdd: + result = "application_osx_add.png"; + break; + case Icon.ApplicationOsxCascade: + result = "application_osx_cascade.png"; + break; + case Icon.ApplicationOsxDelete: + result = "application_osx_delete.png"; + break; + case Icon.ApplicationOsxDouble: + result = "application_osx_double.png"; + break; + case Icon.ApplicationOsxError: + result = "application_osx_error.png"; + break; + case Icon.ApplicationOsxGet: + result = "application_osx_get.png"; + break; + case Icon.ApplicationOsxGo: + result = "application_osx_go.png"; + break; + case Icon.ApplicationOsxHome: + result = "application_osx_home.png"; + break; + case Icon.ApplicationOsxKey: + result = "application_osx_key.png"; + break; + case Icon.ApplicationOsxLightning: + result = "application_osx_lightning.png"; + break; + case Icon.ApplicationOsxLink: + result = "application_osx_link.png"; + break; + case Icon.ApplicationOsxSplit: + result = "application_osx_split.png"; + break; + case Icon.ApplicationOsxStart: + result = "application_osx_start.png"; + break; + case Icon.ApplicationOsxStop: + result = "application_osx_stop.png"; + break; + case Icon.ApplicationOsxTerminal: + result = "application_osx_terminal.png"; + break; + case Icon.ApplicationPut: + result = "application_put.png"; + break; + case Icon.ApplicationSideBoxes: + result = "application_side_boxes.png"; + break; + case Icon.ApplicationSideContract: + result = "application_side_contract.png"; + break; + case Icon.ApplicationSideExpand: + result = "application_side_expand.png"; + break; + case Icon.ApplicationSideList: + result = "application_side_list.png"; + break; + case Icon.ApplicationSideTree: + result = "application_side_tree.png"; + break; + case Icon.ApplicationSplit: + result = "application_split.png"; + break; + case Icon.ApplicationStart: + result = "application_start.png"; + break; + case Icon.ApplicationStop: + result = "application_stop.png"; + break; + case Icon.ApplicationTileHorizontal: + result = "application_tile_horizontal.png"; + break; + case Icon.ApplicationTileVertical: + result = "application_tile_vertical.png"; + break; + case Icon.ApplicationViewColumns: + result = "application_view_columns.png"; + break; + case Icon.ApplicationViewDetail: + result = "application_view_detail.png"; + break; + case Icon.ApplicationViewGallery: + result = "application_view_gallery.png"; + break; + case Icon.ApplicationViewIcons: + result = "application_view_icons.png"; + break; + case Icon.ApplicationViewList: + result = "application_view_list.png"; + break; + case Icon.ApplicationViewTile: + result = "application_view_tile.png"; + break; + case Icon.ApplicationXp: + result = "application_xp.png"; + break; + case Icon.ApplicationXpTerminal: + result = "application_xp_terminal.png"; + break; + case Icon.ArrowBranch: + result = "arrow_branch.png"; + break; + case Icon.ArrowDivide: + result = "arrow_divide.png"; + break; + case Icon.ArrowDown: + result = "arrow_down.png"; + break; + case Icon.ArrowEw: + result = "arrow_ew.png"; + break; + case Icon.ArrowIn: + result = "arrow_in.png"; + break; + case Icon.ArrowInout: + result = "arrow_inout.png"; + break; + case Icon.ArrowInLonger: + result = "arrow_in_longer.png"; + break; + case Icon.ArrowJoin: + result = "arrow_join.png"; + break; + case Icon.ArrowLeft: + result = "arrow_left.png"; + break; + case Icon.ArrowMerge: + result = "arrow_merge.png"; + break; + case Icon.ArrowNe: + result = "arrow_ne.png"; + break; + case Icon.ArrowNs: + result = "arrow_ns.png"; + break; + case Icon.ArrowNsew: + result = "arrow_nsew.png"; + break; + case Icon.ArrowNw: + result = "arrow_nw.png"; + break; + case Icon.ArrowNwNeSwSe: + result = "arrow_nw_ne_sw_se.png"; + break; + case Icon.ArrowNwSe: + result = "arrow_nw_se.png"; + break; + case Icon.ArrowOut: + result = "arrow_out.png"; + break; + case Icon.ArrowOutLonger: + result = "arrow_out_longer.png"; + break; + case Icon.ArrowRedo: + result = "arrow_redo.png"; + break; + case Icon.ArrowRefresh: + result = "arrow_refresh.png"; + break; + case Icon.ArrowRefreshSmall: + result = "arrow_refresh_small.png"; + break; + case Icon.ArrowRight: + result = "arrow_right.png"; + break; + case Icon.ArrowRotateAnticlockwise: + result = "arrow_rotate_anticlockwise.png"; + break; + case Icon.ArrowRotateClockwise: + result = "arrow_rotate_clockwise.png"; + break; + case Icon.ArrowSe: + result = "arrow_se.png"; + break; + case Icon.ArrowSw: + result = "arrow_sw.png"; + break; + case Icon.ArrowSwitch: + result = "arrow_switch.png"; + break; + case Icon.ArrowSwitchBluegreen: + result = "arrow_switch_bluegreen.png"; + break; + case Icon.ArrowSwNe: + result = "arrow_sw_ne.png"; + break; + case Icon.ArrowTurnLeft: + result = "arrow_turn_left.png"; + break; + case Icon.ArrowTurnRight: + result = "arrow_turn_right.png"; + break; + case Icon.ArrowUndo: + result = "arrow_undo.png"; + break; + case Icon.ArrowUp: + result = "arrow_up.png"; + break; + case Icon.AsteriskOrange: + result = "asterisk_orange.png"; + break; + case Icon.AsteriskRed: + result = "asterisk_red.png"; + break; + case Icon.AsteriskYellow: + result = "asterisk_yellow.png"; + break; + case Icon.Attach: + result = "attach.png"; + break; + case Icon.AwardStarAdd: + result = "award_star_add.png"; + break; + case Icon.AwardStarBronze1: + result = "award_star_bronze_1.png"; + break; + case Icon.AwardStarBronze2: + result = "award_star_bronze_2.png"; + break; + case Icon.AwardStarBronze3: + result = "award_star_bronze_3.png"; + break; + case Icon.AwardStarDelete: + result = "award_star_delete.png"; + break; + case Icon.AwardStarGold1: + result = "award_star_gold_1.png"; + break; + case Icon.AwardStarGold2: + result = "award_star_gold_2.png"; + break; + case Icon.AwardStarGold3: + result = "award_star_gold_3.png"; + break; + case Icon.AwardStarSilver1: + result = "award_star_silver_1.png"; + break; + case Icon.AwardStarSilver2: + result = "award_star_silver_2.png"; + break; + case Icon.AwardStarSilver3: + result = "award_star_silver_3.png"; + break; + case Icon.Basket: + result = "basket.png"; + break; + case Icon.BasketAdd: + result = "basket_add.png"; + break; + case Icon.BasketDelete: + result = "basket_delete.png"; + break; + case Icon.BasketEdit: + result = "basket_edit.png"; + break; + case Icon.BasketError: + result = "basket_error.png"; + break; + case Icon.BasketGo: + result = "basket_go.png"; + break; + case Icon.BasketPut: + result = "basket_put.png"; + break; + case Icon.BasketRemove: + result = "basket_remove.png"; + break; + case Icon.Bell: + result = "bell.png"; + break; + case Icon.BellAdd: + result = "bell_add.png"; + break; + case Icon.BellDelete: + result = "bell_delete.png"; + break; + case Icon.BellError: + result = "bell_error.png"; + break; + case Icon.BellGo: + result = "bell_go.png"; + break; + case Icon.BellLink: + result = "bell_link.png"; + break; + case Icon.BellSilver: + result = "bell_silver.png"; + break; + case Icon.BellSilverStart: + result = "bell_silver_start.png"; + break; + case Icon.BellSilverStop: + result = "bell_silver_stop.png"; + break; + case Icon.BellStart: + result = "bell_start.png"; + break; + case Icon.BellStop: + result = "bell_stop.png"; + break; + case Icon.Bin: + result = "bin.png"; + break; + case Icon.BinClosed: + result = "bin_closed.png"; + break; + case Icon.BinEmpty: + result = "bin_empty.png"; + break; + case Icon.Blank: + result = "blank.png"; + break; + case Icon.Bomb: + result = "bomb.png"; + break; + case Icon.Book: + result = "book.png"; + break; + case Icon.Bookmark: + result = "bookmark.png"; + break; + case Icon.BookmarkAdd: + result = "bookmark_add.png"; + break; + case Icon.BookmarkDelete: + result = "bookmark_delete.png"; + break; + case Icon.BookmarkEdit: + result = "bookmark_edit.png"; + break; + case Icon.BookmarkError: + result = "bookmark_error.png"; + break; + case Icon.BookmarkGo: + result = "bookmark_go.png"; + break; + case Icon.BookAdd: + result = "book_add.png"; + break; + case Icon.BookAddresses: + result = "book_addresses.png"; + break; + case Icon.BookAddressesAdd: + result = "book_addresses_add.png"; + break; + case Icon.BookAddressesDelete: + result = "book_addresses_delete.png"; + break; + case Icon.BookAddressesEdit: + result = "book_addresses_edit.png"; + break; + case Icon.BookAddressesError: + result = "book_addresses_error.png"; + break; + case Icon.BookAddressesKey: + result = "book_addresses_key.png"; + break; + case Icon.BookDelete: + result = "book_delete.png"; + break; + case Icon.BookEdit: + result = "book_edit.png"; + break; + case Icon.BookError: + result = "book_error.png"; + break; + case Icon.BookGo: + result = "book_go.png"; + break; + case Icon.BookKey: + result = "book_key.png"; + break; + case Icon.BookLink: + result = "book_link.png"; + break; + case Icon.BookMagnify: + result = "book_magnify.png"; + break; + case Icon.BookNext: + result = "book_next.png"; + break; + case Icon.BookOpen: + result = "book_open.png"; + break; + case Icon.BookOpenMark: + result = "book_open_mark.png"; + break; + case Icon.BookPrevious: + result = "book_previous.png"; + break; + case Icon.BookRed: + result = "book_red.png"; + break; + case Icon.BookTabs: + result = "book_tabs.png"; + break; + case Icon.BorderAll: + result = "border_all.png"; + break; + case Icon.BorderBottom: + result = "border_bottom.png"; + break; + case Icon.BorderDraw: + result = "border_draw.png"; + break; + case Icon.BorderInner: + result = "border_inner.png"; + break; + case Icon.BorderInnerHorizontal: + result = "border_inner_horizontal.png"; + break; + case Icon.BorderInnerVertical: + result = "border_inner_vertical.png"; + break; + case Icon.BorderLeft: + result = "border_left.png"; + break; + case Icon.BorderNone: + result = "border_none.png"; + break; + case Icon.BorderOuter: + result = "border_outer.png"; + break; + case Icon.BorderRight: + result = "border_right.png"; + break; + case Icon.BorderTop: + result = "border_top.png"; + break; + case Icon.Box: + result = "box.png"; + break; + case Icon.BoxError: + result = "box_error.png"; + break; + case Icon.BoxPicture: + result = "box_picture.png"; + break; + case Icon.BoxWorld: + result = "box_world.png"; + break; + case Icon.Brick: + result = "brick.png"; + break; + case Icon.Bricks: + result = "bricks.png"; + break; + case Icon.BrickAdd: + result = "brick_add.png"; + break; + case Icon.BrickDelete: + result = "brick_delete.png"; + break; + case Icon.BrickEdit: + result = "brick_edit.png"; + break; + case Icon.BrickError: + result = "brick_error.png"; + break; + case Icon.BrickGo: + result = "brick_go.png"; + break; + case Icon.BrickLink: + result = "brick_link.png"; + break; + case Icon.BrickMagnify: + result = "brick_magnify.png"; + break; + case Icon.Briefcase: + result = "briefcase.png"; + break; + case Icon.Bug: + result = "bug.png"; + break; + case Icon.BugAdd: + result = "bug_add.png"; + break; + case Icon.BugDelete: + result = "bug_delete.png"; + break; + case Icon.BugEdit: + result = "bug_edit.png"; + break; + case Icon.BugError: + result = "bug_error.png"; + break; + case Icon.BugFix: + result = "bug_fix.png"; + break; + case Icon.BugGo: + result = "bug_go.png"; + break; + case Icon.BugLink: + result = "bug_link.png"; + break; + case Icon.BugMagnify: + result = "bug_magnify.png"; + break; + case Icon.Build: + result = "build.png"; + break; + case Icon.Building: + result = "building.png"; + break; + case Icon.BuildingAdd: + result = "building_add.png"; + break; + case Icon.BuildingDelete: + result = "building_delete.png"; + break; + case Icon.BuildingEdit: + result = "building_edit.png"; + break; + case Icon.BuildingError: + result = "building_error.png"; + break; + case Icon.BuildingGo: + result = "building_go.png"; + break; + case Icon.BuildingKey: + result = "building_key.png"; + break; + case Icon.BuildingLink: + result = "building_link.png"; + break; + case Icon.BuildCancel: + result = "build_cancel.png"; + break; + case Icon.BulletAdd: + result = "bullet_add.png"; + break; + case Icon.BulletArrowBottom: + result = "bullet_arrow_bottom.png"; + break; + case Icon.BulletArrowDown: + result = "bullet_arrow_down.png"; + break; + case Icon.BulletArrowTop: + result = "bullet_arrow_top.png"; + break; + case Icon.BulletArrowUp: + result = "bullet_arrow_up.png"; + break; + case Icon.BulletBlack: + result = "bullet_black.png"; + break; + case Icon.BulletBlue: + result = "bullet_blue.png"; + break; + case Icon.BulletConnect: + result = "bullet_connect.png"; + break; + case Icon.BulletCross: + result = "bullet_cross.png"; + break; + case Icon.BulletDatabase: + result = "bullet_database.png"; + break; + case Icon.BulletDatabaseYellow: + result = "bullet_database_yellow.png"; + break; + case Icon.BulletDelete: + result = "bullet_delete.png"; + break; + case Icon.BulletDisk: + result = "bullet_disk.png"; + break; + case Icon.BulletEarth: + result = "bullet_earth.png"; + break; + case Icon.BulletEdit: + result = "bullet_edit.png"; + break; + case Icon.BulletEject: + result = "bullet_eject.png"; + break; + case Icon.BulletError: + result = "bullet_error.png"; + break; + case Icon.BulletFeed: + result = "bullet_feed.png"; + break; + case Icon.BulletGet: + result = "bullet_get.png"; + break; + case Icon.BulletGo: + result = "bullet_go.png"; + break; + case Icon.BulletGreen: + result = "bullet_green.png"; + break; + case Icon.BulletHome: + result = "bullet_home.png"; + break; + case Icon.BulletKey: + result = "bullet_key.png"; + break; + case Icon.BulletLeft: + result = "bullet_left.png"; + break; + case Icon.BulletLightning: + result = "bullet_lightning.png"; + break; + case Icon.BulletMagnify: + result = "bullet_magnify.png"; + break; + case Icon.BulletMinus: + result = "bullet_minus.png"; + break; + case Icon.BulletOrange: + result = "bullet_orange.png"; + break; + case Icon.BulletPageWhite: + result = "bullet_page_white.png"; + break; + case Icon.BulletPicture: + result = "bullet_picture.png"; + break; + case Icon.BulletPink: + result = "bullet_pink.png"; + break; + case Icon.BulletPlus: + result = "bullet_plus.png"; + break; + case Icon.BulletPurple: + result = "bullet_purple.png"; + break; + case Icon.BulletRed: + result = "bullet_red.png"; + break; + case Icon.BulletRight: + result = "bullet_right.png"; + break; + case Icon.BulletShape: + result = "bullet_shape.png"; + break; + case Icon.BulletSparkle: + result = "bullet_sparkle.png"; + break; + case Icon.BulletStar: + result = "bullet_star.png"; + break; + case Icon.BulletStart: + result = "bullet_start.png"; + break; + case Icon.BulletStop: + result = "bullet_stop.png"; + break; + case Icon.BulletStopAlt: + result = "bullet_stop_alt.png"; + break; + case Icon.BulletTick: + result = "bullet_tick.png"; + break; + case Icon.BulletToggleMinus: + result = "bullet_toggle_minus.png"; + break; + case Icon.BulletTogglePlus: + result = "bullet_toggle_plus.png"; + break; + case Icon.BulletWhite: + result = "bullet_white.png"; + break; + case Icon.BulletWrench: + result = "bullet_wrench.png"; + break; + case Icon.BulletWrenchRed: + result = "bullet_wrench_red.png"; + break; + case Icon.BulletYellow: + result = "bullet_yellow.png"; + break; + case Icon.Button: + result = "button.png"; + break; + case Icon.Cake: + result = "cake.png"; + break; + case Icon.CakeOut: + result = "cake_out.png"; + break; + case Icon.CakeSliced: + result = "cake_sliced.png"; + break; + case Icon.Calculator: + result = "calculator.png"; + break; + case Icon.CalculatorAdd: + result = "calculator_add.png"; + break; + case Icon.CalculatorDelete: + result = "calculator_delete.png"; + break; + case Icon.CalculatorEdit: + result = "calculator_edit.png"; + break; + case Icon.CalculatorError: + result = "calculator_error.png"; + break; + case Icon.CalculatorLink: + result = "calculator_link.png"; + break; + case Icon.Calendar: + result = "calendar.png"; + break; + case Icon.CalendarAdd: + result = "calendar_add.png"; + break; + case Icon.CalendarDelete: + result = "calendar_delete.png"; + break; + case Icon.CalendarEdit: + result = "calendar_edit.png"; + break; + case Icon.CalendarLink: + result = "calendar_link.png"; + break; + case Icon.CalendarSelectDay: + result = "calendar_select_day.png"; + break; + case Icon.CalendarSelectNone: + result = "calendar_select_none.png"; + break; + case Icon.CalendarSelectWeek: + result = "calendar_select_week.png"; + break; + case Icon.CalendarStar: + result = "calendar_star.png"; + break; + case Icon.CalendarViewDay: + result = "calendar_view_day.png"; + break; + case Icon.CalendarViewMonth: + result = "calendar_view_month.png"; + break; + case Icon.CalendarViewWeek: + result = "calendar_view_week.png"; + break; + case Icon.Camera: + result = "camera.png"; + break; + case Icon.CameraAdd: + result = "camera_add.png"; + break; + case Icon.CameraConnect: + result = "camera_connect.png"; + break; + case Icon.CameraDelete: + result = "camera_delete.png"; + break; + case Icon.CameraEdit: + result = "camera_edit.png"; + break; + case Icon.CameraError: + result = "camera_error.png"; + break; + case Icon.CameraGo: + result = "camera_go.png"; + break; + case Icon.CameraLink: + result = "camera_link.png"; + break; + case Icon.CameraMagnify: + result = "camera_magnify.png"; + break; + case Icon.CameraPicture: + result = "camera_picture.png"; + break; + case Icon.CameraSmall: + result = "camera_small.png"; + break; + case Icon.CameraStart: + result = "camera_start.png"; + break; + case Icon.CameraStop: + result = "camera_stop.png"; + break; + case Icon.Cancel: + result = "cancel.png"; + break; + case Icon.Car: + result = "car.png"; + break; + case Icon.Cart: + result = "cart.png"; + break; + case Icon.CartAdd: + result = "cart_add.png"; + break; + case Icon.CartDelete: + result = "cart_delete.png"; + break; + case Icon.CartEdit: + result = "cart_edit.png"; + break; + case Icon.CartError: + result = "cart_error.png"; + break; + case Icon.CartFull: + result = "cart_full.png"; + break; + case Icon.CartGo: + result = "cart_go.png"; + break; + case Icon.CartMagnify: + result = "cart_magnify.png"; + break; + case Icon.CartPut: + result = "cart_put.png"; + break; + case Icon.CartRemove: + result = "cart_remove.png"; + break; + case Icon.CarAdd: + result = "car_add.png"; + break; + case Icon.CarDelete: + result = "car_delete.png"; + break; + case Icon.CarError: + result = "car_error.png"; + break; + case Icon.CarRed: + result = "car_red.png"; + break; + case Icon.CarStart: + result = "car_start.png"; + break; + case Icon.CarStop: + result = "car_stop.png"; + break; + case Icon.Cd: + result = "cd.png"; + break; + case Icon.Cdr: + result = "cdr.png"; + break; + case Icon.CdrAdd: + result = "cdr_add.png"; + break; + case Icon.CdrBurn: + result = "cdr_burn.png"; + break; + case Icon.CdrCross: + result = "cdr_cross.png"; + break; + case Icon.CdrDelete: + result = "cdr_delete.png"; + break; + case Icon.CdrEdit: + result = "cdr_edit.png"; + break; + case Icon.CdrEject: + result = "cdr_eject.png"; + break; + case Icon.CdrError: + result = "cdr_error.png"; + break; + case Icon.CdrGo: + result = "cdr_go.png"; + break; + case Icon.CdrMagnify: + result = "cdr_magnify.png"; + break; + case Icon.CdrPlay: + result = "cdr_play.png"; + break; + case Icon.CdrStart: + result = "cdr_start.png"; + break; + case Icon.CdrStop: + result = "cdr_stop.png"; + break; + case Icon.CdrStopAlt: + result = "cdr_stop_alt.png"; + break; + case Icon.CdrTick: + result = "cdr_tick.png"; + break; + case Icon.CdAdd: + result = "cd_add.png"; + break; + case Icon.CdBurn: + result = "cd_burn.png"; + break; + case Icon.CdDelete: + result = "cd_delete.png"; + break; + case Icon.CdEdit: + result = "cd_edit.png"; + break; + case Icon.CdEject: + result = "cd_eject.png"; + break; + case Icon.CdGo: + result = "cd_go.png"; + break; + case Icon.CdMagnify: + result = "cd_magnify.png"; + break; + case Icon.CdPlay: + result = "cd_play.png"; + break; + case Icon.CdStop: + result = "cd_stop.png"; + break; + case Icon.CdStopAlt: + result = "cd_stop_alt.png"; + break; + case Icon.CdTick: + result = "cd_tick.png"; + break; + case Icon.ChartBar: + result = "chart_bar.png"; + break; + case Icon.ChartBarAdd: + result = "chart_bar_add.png"; + break; + case Icon.ChartBarDelete: + result = "chart_bar_delete.png"; + break; + case Icon.ChartBarEdit: + result = "chart_bar_edit.png"; + break; + case Icon.ChartBarError: + result = "chart_bar_error.png"; + break; + case Icon.ChartBarLink: + result = "chart_bar_link.png"; + break; + case Icon.ChartCurve: + result = "chart_curve.png"; + break; + case Icon.ChartCurveAdd: + result = "chart_curve_add.png"; + break; + case Icon.ChartCurveDelete: + result = "chart_curve_delete.png"; + break; + case Icon.ChartCurveEdit: + result = "chart_curve_edit.png"; + break; + case Icon.ChartCurveError: + result = "chart_curve_error.png"; + break; + case Icon.ChartCurveGo: + result = "chart_curve_go.png"; + break; + case Icon.ChartCurveLink: + result = "chart_curve_link.png"; + break; + case Icon.ChartLine: + result = "chart_line.png"; + break; + case Icon.ChartLineAdd: + result = "chart_line_add.png"; + break; + case Icon.ChartLineDelete: + result = "chart_line_delete.png"; + break; + case Icon.ChartLineEdit: + result = "chart_line_edit.png"; + break; + case Icon.ChartLineError: + result = "chart_line_error.png"; + break; + case Icon.ChartLineLink: + result = "chart_line_link.png"; + break; + case Icon.ChartOrganisation: + result = "chart_organisation.png"; + break; + case Icon.ChartOrganisationAdd: + result = "chart_organisation_add.png"; + break; + case Icon.ChartOrganisationDelete: + result = "chart_organisation_delete.png"; + break; + case Icon.ChartOrgInverted: + result = "chart_org_inverted.png"; + break; + case Icon.ChartPie: + result = "chart_pie.png"; + break; + case Icon.ChartPieAdd: + result = "chart_pie_add.png"; + break; + case Icon.ChartPieDelete: + result = "chart_pie_delete.png"; + break; + case Icon.ChartPieEdit: + result = "chart_pie_edit.png"; + break; + case Icon.ChartPieError: + result = "chart_pie_error.png"; + break; + case Icon.ChartPieLightning: + result = "chart_pie_lightning.png"; + break; + case Icon.ChartPieLink: + result = "chart_pie_link.png"; + break; + case Icon.CheckError: + result = "check_error.png"; + break; + case Icon.Clipboard: + result = "clipboard.png"; + break; + case Icon.Clock: + result = "clock.png"; + break; + case Icon.ClockAdd: + result = "clock_add.png"; + break; + case Icon.ClockDelete: + result = "clock_delete.png"; + break; + case Icon.ClockEdit: + result = "clock_edit.png"; + break; + case Icon.ClockError: + result = "clock_error.png"; + break; + case Icon.ClockGo: + result = "clock_go.png"; + break; + case Icon.ClockLink: + result = "clock_link.png"; + break; + case Icon.ClockPause: + result = "clock_pause.png"; + break; + case Icon.ClockPlay: + result = "clock_play.png"; + break; + case Icon.ClockRed: + result = "clock_red.png"; + break; + case Icon.ClockStart: + result = "clock_start.png"; + break; + case Icon.ClockStop: + result = "clock_stop.png"; + break; + case Icon.ClockStop2: + result = "clock_stop_2.png"; + break; + case Icon.Cmy: + result = "cmy.png"; + break; + case Icon.Cog: + result = "cog.png"; + break; + case Icon.CogAdd: + result = "cog_add.png"; + break; + case Icon.CogDelete: + result = "cog_delete.png"; + break; + case Icon.CogEdit: + result = "cog_edit.png"; + break; + case Icon.CogError: + result = "cog_error.png"; + break; + case Icon.CogGo: + result = "cog_go.png"; + break; + case Icon.CogStart: + result = "cog_start.png"; + break; + case Icon.CogStop: + result = "cog_stop.png"; + break; + case Icon.Coins: + result = "coins.png"; + break; + case Icon.CoinsAdd: + result = "coins_add.png"; + break; + case Icon.CoinsDelete: + result = "coins_delete.png"; + break; + case Icon.Color: + result = "color.png"; + break; + case Icon.ColorSwatch: + result = "color_swatch.png"; + break; + case Icon.ColorWheel: + result = "color_wheel.png"; + break; + case Icon.Comment: + result = "comment.png"; + break; + case Icon.Comments: + result = "comments.png"; + break; + case Icon.CommentsAdd: + result = "comments_add.png"; + break; + case Icon.CommentsDelete: + result = "comments_delete.png"; + break; + case Icon.CommentAdd: + result = "comment_add.png"; + break; + case Icon.CommentDelete: + result = "comment_delete.png"; + break; + case Icon.CommentDull: + result = "comment_dull.png"; + break; + case Icon.CommentEdit: + result = "comment_edit.png"; + break; + case Icon.CommentPlay: + result = "comment_play.png"; + break; + case Icon.CommentRecord: + result = "comment_record.png"; + break; + case Icon.Compass: + result = "compass.png"; + break; + case Icon.Compress: + result = "compress.png"; + break; + case Icon.Computer: + result = "computer.png"; + break; + case Icon.ComputerAdd: + result = "computer_add.png"; + break; + case Icon.ComputerConnect: + result = "computer_connect.png"; + break; + case Icon.ComputerDelete: + result = "computer_delete.png"; + break; + case Icon.ComputerEdit: + result = "computer_edit.png"; + break; + case Icon.ComputerError: + result = "computer_error.png"; + break; + case Icon.ComputerGo: + result = "computer_go.png"; + break; + case Icon.ComputerKey: + result = "computer_key.png"; + break; + case Icon.ComputerLink: + result = "computer_link.png"; + break; + case Icon.ComputerMagnify: + result = "computer_magnify.png"; + break; + case Icon.ComputerOff: + result = "computer_off.png"; + break; + case Icon.ComputerStart: + result = "computer_start.png"; + break; + case Icon.ComputerStop: + result = "computer_stop.png"; + break; + case Icon.ComputerWrench: + result = "computer_wrench.png"; + break; + case Icon.Connect: + result = "connect.png"; + break; + case Icon.Contrast: + result = "contrast.png"; + break; + case Icon.ContrastDecrease: + result = "contrast_decrease.png"; + break; + case Icon.ContrastHigh: + result = "contrast_high.png"; + break; + case Icon.ContrastIncrease: + result = "contrast_increase.png"; + break; + case Icon.ContrastLow: + result = "contrast_low.png"; + break; + case Icon.Controller: + result = "controller.png"; + break; + case Icon.ControllerAdd: + result = "controller_add.png"; + break; + case Icon.ControllerDelete: + result = "controller_delete.png"; + break; + case Icon.ControllerError: + result = "controller_error.png"; + break; + case Icon.ControlAdd: + result = "control_add.png"; + break; + case Icon.ControlAddBlue: + result = "control_add_blue.png"; + break; + case Icon.ControlBlank: + result = "control_blank.png"; + break; + case Icon.ControlBlankBlue: + result = "control_blank_blue.png"; + break; + case Icon.ControlEject: + result = "control_eject.png"; + break; + case Icon.ControlEjectBlue: + result = "control_eject_blue.png"; + break; + case Icon.ControlEnd: + result = "control_end.png"; + break; + case Icon.ControlEndBlue: + result = "control_end_blue.png"; + break; + case Icon.ControlEqualizer: + result = "control_equalizer.png"; + break; + case Icon.ControlEqualizerBlue: + result = "control_equalizer_blue.png"; + break; + case Icon.ControlFastforward: + result = "control_fastforward.png"; + break; + case Icon.ControlFastforwardBlue: + result = "control_fastforward_blue.png"; + break; + case Icon.ControlPause: + result = "control_pause.png"; + break; + case Icon.ControlPauseBlue: + result = "control_pause_blue.png"; + break; + case Icon.ControlPlay: + result = "control_play.png"; + break; + case Icon.ControlPlayBlue: + result = "control_play_blue.png"; + break; + case Icon.ControlPower: + result = "control_power.png"; + break; + case Icon.ControlPowerBlue: + result = "control_power_blue.png"; + break; + case Icon.ControlRecord: + result = "control_record.png"; + break; + case Icon.ControlRecordBlue: + result = "control_record_blue.png"; + break; + case Icon.ControlRemove: + result = "control_remove.png"; + break; + case Icon.ControlRemoveBlue: + result = "control_remove_blue.png"; + break; + case Icon.ControlRepeat: + result = "control_repeat.png"; + break; + case Icon.ControlRepeatBlue: + result = "control_repeat_blue.png"; + break; + case Icon.ControlRewind: + result = "control_rewind.png"; + break; + case Icon.ControlRewindBlue: + result = "control_rewind_blue.png"; + break; + case Icon.ControlStart: + result = "control_start.png"; + break; + case Icon.ControlStartBlue: + result = "control_start_blue.png"; + break; + case Icon.ControlStop: + result = "control_stop.png"; + break; + case Icon.ControlStopBlue: + result = "control_stop_blue.png"; + break; + case Icon.Creditcards: + result = "creditcards.png"; + break; + case Icon.Cross: + result = "cross.png"; + break; + case Icon.Css: + result = "css.png"; + break; + case Icon.CssAdd: + result = "css_add.png"; + break; + case Icon.CssDelete: + result = "css_delete.png"; + break; + case Icon.CssError: + result = "css_error.png"; + break; + case Icon.CssGo: + result = "css_go.png"; + break; + case Icon.CssValid: + result = "css_valid.png"; + break; + case Icon.Cup: + result = "cup.png"; + break; + case Icon.CupAdd: + result = "cup_add.png"; + break; + case Icon.CupBlack: + result = "cup_black.png"; + break; + case Icon.CupDelete: + result = "cup_delete.png"; + break; + case Icon.CupEdit: + result = "cup_edit.png"; + break; + case Icon.CupError: + result = "cup_error.png"; + break; + case Icon.CupGo: + result = "cup_go.png"; + break; + case Icon.CupGreen: + result = "cup_green.png"; + break; + case Icon.CupKey: + result = "cup_key.png"; + break; + case Icon.CupLink: + result = "cup_link.png"; + break; + case Icon.CupTea: + result = "cup_tea.png"; + break; + case Icon.Cursor: + result = "cursor.png"; + break; + case Icon.CursorSmall: + result = "cursor_small.png"; + break; + case Icon.Cut: + result = "cut.png"; + break; + case Icon.CutRed: + result = "cut_red.png"; + break; + case Icon.Database: + result = "database.png"; + break; + case Icon.DatabaseAdd: + result = "database_add.png"; + break; + case Icon.DatabaseConnect: + result = "database_connect.png"; + break; + case Icon.DatabaseCopy: + result = "database_copy.png"; + break; + case Icon.DatabaseDelete: + result = "database_delete.png"; + break; + case Icon.DatabaseEdit: + result = "database_edit.png"; + break; + case Icon.DatabaseError: + result = "database_error.png"; + break; + case Icon.DatabaseGear: + result = "database_gear.png"; + break; + case Icon.DatabaseGo: + result = "database_go.png"; + break; + case Icon.DatabaseKey: + result = "database_key.png"; + break; + case Icon.DatabaseLightning: + result = "database_lightning.png"; + break; + case Icon.DatabaseLink: + result = "database_link.png"; + break; + case Icon.DatabaseRefresh: + result = "database_refresh.png"; + break; + case Icon.DatabaseSave: + result = "database_save.png"; + break; + case Icon.DatabaseStart: + result = "database_start.png"; + break; + case Icon.DatabaseStop: + result = "database_stop.png"; + break; + case Icon.DatabaseTable: + result = "database_table.png"; + break; + case Icon.DatabaseWrench: + result = "database_wrench.png"; + break; + case Icon.DatabaseYellow: + result = "database_yellow.png"; + break; + case Icon.DatabaseYellowStart: + result = "database_yellow_start.png"; + break; + case Icon.DatabaseYellowStop: + result = "database_yellow_stop.png"; + break; + case Icon.Date: + result = "date.png"; + break; + case Icon.DateAdd: + result = "date_add.png"; + break; + case Icon.DateDelete: + result = "date_delete.png"; + break; + case Icon.DateEdit: + result = "date_edit.png"; + break; + case Icon.DateError: + result = "date_error.png"; + break; + case Icon.DateGo: + result = "date_go.png"; + break; + case Icon.DateLink: + result = "date_link.png"; + break; + case Icon.DateMagnify: + result = "date_magnify.png"; + break; + case Icon.DateNext: + result = "date_next.png"; + break; + case Icon.DatePrevious: + result = "date_previous.png"; + break; + case Icon.Decline: + result = "decline.png"; + break; + case Icon.Delete: + result = "delete.png"; + break; + case Icon.DeviceStylus: + result = "device_stylus.png"; + break; + case Icon.Disconnect: + result = "disconnect.png"; + break; + case Icon.Disk: + result = "disk.png"; + break; + case Icon.DiskBlack: + result = "disk_black.png"; + break; + case Icon.DiskBlackError: + result = "disk_black_error.png"; + break; + case Icon.DiskBlackMagnify: + result = "disk_black_magnify.png"; + break; + case Icon.DiskDownload: + result = "disk_download.png"; + break; + case Icon.DiskEdit: + result = "disk_edit.png"; + break; + case Icon.DiskError: + result = "disk_error.png"; + break; + case Icon.DiskMagnify: + result = "disk_magnify.png"; + break; + case Icon.DiskMultiple: + result = "disk_multiple.png"; + break; + case Icon.DiskUpload: + result = "disk_upload.png"; + break; + case Icon.Door: + result = "door.png"; + break; + case Icon.DoorError: + result = "door_error.png"; + break; + case Icon.DoorIn: + result = "door_in.png"; + break; + case Icon.DoorOpen: + result = "door_open.png"; + break; + case Icon.DoorOut: + result = "door_out.png"; + break; + case Icon.Drink: + result = "drink.png"; + break; + case Icon.DrinkEmpty: + result = "drink_empty.png"; + break; + case Icon.DrinkRed: + result = "drink_red.png"; + break; + case Icon.Drive: + result = "drive.png"; + break; + case Icon.DriveAdd: + result = "drive_add.png"; + break; + case Icon.DriveBurn: + result = "drive_burn.png"; + break; + case Icon.DriveCd: + result = "drive_cd.png"; + break; + case Icon.DriveCdr: + result = "drive_cdr.png"; + break; + case Icon.DriveCdEmpty: + result = "drive_cd_empty.png"; + break; + case Icon.DriveDelete: + result = "drive_delete.png"; + break; + case Icon.DriveDisk: + result = "drive_disk.png"; + break; + case Icon.DriveEdit: + result = "drive_edit.png"; + break; + case Icon.DriveError: + result = "drive_error.png"; + break; + case Icon.DriveGo: + result = "drive_go.png"; + break; + case Icon.DriveKey: + result = "drive_key.png"; + break; + case Icon.DriveLink: + result = "drive_link.png"; + break; + case Icon.DriveMagnify: + result = "drive_magnify.png"; + break; + case Icon.DriveNetwork: + result = "drive_network.png"; + break; + case Icon.DriveNetworkError: + result = "drive_network_error.png"; + break; + case Icon.DriveNetworkStop: + result = "drive_network_stop.png"; + break; + case Icon.DriveRename: + result = "drive_rename.png"; + break; + case Icon.DriveUser: + result = "drive_user.png"; + break; + case Icon.DriveWeb: + result = "drive_web.png"; + break; + case Icon.Dvd: + result = "dvd.png"; + break; + case Icon.DvdAdd: + result = "dvd_add.png"; + break; + case Icon.DvdDelete: + result = "dvd_delete.png"; + break; + case Icon.DvdEdit: + result = "dvd_edit.png"; + break; + case Icon.DvdError: + result = "dvd_error.png"; + break; + case Icon.DvdGo: + result = "dvd_go.png"; + break; + case Icon.DvdKey: + result = "dvd_key.png"; + break; + case Icon.DvdLink: + result = "dvd_link.png"; + break; + case Icon.DvdStart: + result = "dvd_start.png"; + break; + case Icon.DvdStop: + result = "dvd_stop.png"; + break; + case Icon.EjectBlue: + result = "eject_blue.png"; + break; + case Icon.EjectGreen: + result = "eject_green.png"; + break; + case Icon.Email: + result = "email.png"; + break; + case Icon.EmailAdd: + result = "email_add.png"; + break; + case Icon.EmailAttach: + result = "email_attach.png"; + break; + case Icon.EmailDelete: + result = "email_delete.png"; + break; + case Icon.EmailEdit: + result = "email_edit.png"; + break; + case Icon.EmailError: + result = "email_error.png"; + break; + case Icon.EmailGo: + result = "email_go.png"; + break; + case Icon.EmailLink: + result = "email_link.png"; + break; + case Icon.EmailMagnify: + result = "email_magnify.png"; + break; + case Icon.EmailOpen: + result = "email_open.png"; + break; + case Icon.EmailOpenImage: + result = "email_open_image.png"; + break; + case Icon.EmailStar: + result = "email_star.png"; + break; + case Icon.EmailStart: + result = "email_start.png"; + break; + case Icon.EmailStop: + result = "email_stop.png"; + break; + case Icon.EmailTransfer: + result = "email_transfer.png"; + break; + case Icon.EmoticonEvilgrin: + result = "emoticon_evilgrin.png"; + break; + case Icon.EmoticonGrin: + result = "emoticon_grin.png"; + break; + case Icon.EmoticonHappy: + result = "emoticon_happy.png"; + break; + case Icon.EmoticonSmile: + result = "emoticon_smile.png"; + break; + case Icon.EmoticonSurprised: + result = "emoticon_surprised.png"; + break; + case Icon.EmoticonTongue: + result = "emoticon_tongue.png"; + break; + case Icon.EmoticonUnhappy: + result = "emoticon_unhappy.png"; + break; + case Icon.EmoticonWaii: + result = "emoticon_waii.png"; + break; + case Icon.EmoticonWink: + result = "emoticon_wink.png"; + break; + case Icon.Erase: + result = "erase.png"; + break; + case Icon.Error: + result = "error.png"; + break; + case Icon.ErrorAdd: + result = "error_add.png"; + break; + case Icon.ErrorDelete: + result = "error_delete.png"; + break; + case Icon.ErrorGo: + result = "error_go.png"; + break; + case Icon.Exclamation: + result = "exclamation.png"; + break; + case Icon.Eye: + result = "eye.png"; + break; + case Icon.Eyes: + result = "eyes.png"; + break; + case Icon.Feed: + result = "feed.png"; + break; + case Icon.FeedAdd: + result = "feed_add.png"; + break; + case Icon.FeedDelete: + result = "feed_delete.png"; + break; + case Icon.FeedDisk: + result = "feed_disk.png"; + break; + case Icon.FeedEdit: + result = "feed_edit.png"; + break; + case Icon.FeedError: + result = "feed_error.png"; + break; + case Icon.FeedGo: + result = "feed_go.png"; + break; + case Icon.FeedKey: + result = "feed_key.png"; + break; + case Icon.FeedLink: + result = "feed_link.png"; + break; + case Icon.FeedMagnify: + result = "feed_magnify.png"; + break; + case Icon.FeedStar: + result = "feed_star.png"; + break; + case Icon.Female: + result = "female.png"; + break; + case Icon.Film: + result = "film.png"; + break; + case Icon.FilmAdd: + result = "film_add.png"; + break; + case Icon.FilmDelete: + result = "film_delete.png"; + break; + case Icon.FilmEdit: + result = "film_edit.png"; + break; + case Icon.FilmEject: + result = "film_eject.png"; + break; + case Icon.FilmError: + result = "film_error.png"; + break; + case Icon.FilmGo: + result = "film_go.png"; + break; + case Icon.FilmKey: + result = "film_key.png"; + break; + case Icon.FilmLink: + result = "film_link.png"; + break; + case Icon.FilmMagnify: + result = "film_magnify.png"; + break; + case Icon.FilmSave: + result = "film_save.png"; + break; + case Icon.FilmStar: + result = "film_star.png"; + break; + case Icon.FilmStart: + result = "film_start.png"; + break; + case Icon.FilmStop: + result = "film_stop.png"; + break; + case Icon.Find: + result = "find.png"; + break; + case Icon.FingerPoint: + result = "finger_point.png"; + break; + case Icon.FlagAd: + result = "flag_ad.png"; + break; + case Icon.FlagAe: + result = "flag_ae.png"; + break; + case Icon.FlagAf: + result = "flag_af.png"; + break; + case Icon.FlagAg: + result = "flag_ag.png"; + break; + case Icon.FlagAi: + result = "flag_ai.png"; + break; + case Icon.FlagAl: + result = "flag_al.png"; + break; + case Icon.FlagAm: + result = "flag_am.png"; + break; + case Icon.FlagAn: + result = "flag_an.png"; + break; + case Icon.FlagAo: + result = "flag_ao.png"; + break; + case Icon.FlagAr: + result = "flag_ar.png"; + break; + case Icon.FlagAs: + result = "flag_as.png"; + break; + case Icon.FlagAt: + result = "flag_at.png"; + break; + case Icon.FlagAu: + result = "flag_au.png"; + break; + case Icon.FlagAw: + result = "flag_aw.png"; + break; + case Icon.FlagAx: + result = "flag_ax.png"; + break; + case Icon.FlagAz: + result = "flag_az.png"; + break; + case Icon.FlagBa: + result = "flag_ba.png"; + break; + case Icon.FlagBb: + result = "flag_bb.png"; + break; + case Icon.FlagBd: + result = "flag_bd.png"; + break; + case Icon.FlagBe: + result = "flag_be.png"; + break; + case Icon.FlagBf: + result = "flag_bf.png"; + break; + case Icon.FlagBg: + result = "flag_bg.png"; + break; + case Icon.FlagBh: + result = "flag_bh.png"; + break; + case Icon.FlagBi: + result = "flag_bi.png"; + break; + case Icon.FlagBj: + result = "flag_bj.png"; + break; + case Icon.FlagBlack: + result = "flag_black.png"; + break; + case Icon.FlagBlue: + result = "flag_blue.png"; + break; + case Icon.FlagBm: + result = "flag_bm.png"; + break; + case Icon.FlagBn: + result = "flag_bn.png"; + break; + case Icon.FlagBo: + result = "flag_bo.png"; + break; + case Icon.FlagBr: + result = "flag_br.png"; + break; + case Icon.FlagBs: + result = "flag_bs.png"; + break; + case Icon.FlagBt: + result = "flag_bt.png"; + break; + case Icon.FlagBv: + result = "flag_bv.png"; + break; + case Icon.FlagBw: + result = "flag_bw.png"; + break; + case Icon.FlagBy: + result = "flag_by.png"; + break; + case Icon.FlagBz: + result = "flag_bz.png"; + break; + case Icon.FlagCa: + result = "flag_ca.png"; + break; + case Icon.FlagCatalonia: + result = "flag_catalonia.png"; + break; + case Icon.FlagCc: + result = "flag_cc.png"; + break; + case Icon.FlagCd: + result = "flag_cd.png"; + break; + case Icon.FlagCf: + result = "flag_cf.png"; + break; + case Icon.FlagCg: + result = "flag_cg.png"; + break; + case Icon.FlagCh: + result = "flag_ch.png"; + break; + case Icon.FlagChecked: + result = "flag_checked.png"; + break; + case Icon.FlagCi: + result = "flag_ci.png"; + break; + case Icon.FlagCk: + result = "flag_ck.png"; + break; + case Icon.FlagCl: + result = "flag_cl.png"; + break; + case Icon.FlagCm: + result = "flag_cm.png"; + break; + case Icon.FlagCn: + result = "flag_cn.png"; + break; + case Icon.FlagCo: + result = "flag_co.png"; + break; + case Icon.FlagCr: + result = "flag_cr.png"; + break; + case Icon.FlagCs: + result = "flag_cs.png"; + break; + case Icon.FlagCu: + result = "flag_cu.png"; + break; + case Icon.FlagCv: + result = "flag_cv.png"; + break; + case Icon.FlagCx: + result = "flag_cx.png"; + break; + case Icon.FlagCy: + result = "flag_cy.png"; + break; + case Icon.FlagCz: + result = "flag_cz.png"; + break; + case Icon.FlagDe: + result = "flag_de.png"; + break; + case Icon.FlagDj: + result = "flag_dj.png"; + break; + case Icon.FlagDk: + result = "flag_dk.png"; + break; + case Icon.FlagDm: + result = "flag_dm.png"; + break; + case Icon.FlagDo: + result = "flag_do.png"; + break; + case Icon.FlagDz: + result = "flag_dz.png"; + break; + case Icon.FlagEc: + result = "flag_ec.png"; + break; + case Icon.FlagEe: + result = "flag_ee.png"; + break; + case Icon.FlagEg: + result = "flag_eg.png"; + break; + case Icon.FlagEh: + result = "flag_eh.png"; + break; + case Icon.FlagEngland: + result = "flag_england.png"; + break; + case Icon.FlagEr: + result = "flag_er.png"; + break; + case Icon.FlagEs: + result = "flag_es.png"; + break; + case Icon.FlagEt: + result = "flag_et.png"; + break; + case Icon.FlagEuropeanunion: + result = "flag_europeanunion.png"; + break; + case Icon.FlagFam: + result = "flag_fam.png"; + break; + case Icon.FlagFi: + result = "flag_fi.png"; + break; + case Icon.FlagFj: + result = "flag_fj.png"; + break; + case Icon.FlagFk: + result = "flag_fk.png"; + break; + case Icon.FlagFm: + result = "flag_fm.png"; + break; + case Icon.FlagFo: + result = "flag_fo.png"; + break; + case Icon.FlagFr: + result = "flag_fr.png"; + break; + case Icon.FlagFrance: + result = "flag_france.png"; + break; + case Icon.FlagGa: + result = "flag_ga.png"; + break; + case Icon.FlagGb: + result = "flag_gb.png"; + break; + case Icon.FlagGd: + result = "flag_gd.png"; + break; + case Icon.FlagGe: + result = "flag_ge.png"; + break; + case Icon.FlagGf: + result = "flag_gf.png"; + break; + case Icon.FlagGg: + result = "flag_gg.png"; + break; + case Icon.FlagGh: + result = "flag_gh.png"; + break; + case Icon.FlagGi: + result = "flag_gi.png"; + break; + case Icon.FlagGl: + result = "flag_gl.png"; + break; + case Icon.FlagGm: + result = "flag_gm.png"; + break; + case Icon.FlagGn: + result = "flag_gn.png"; + break; + case Icon.FlagGp: + result = "flag_gp.png"; + break; + case Icon.FlagGq: + result = "flag_gq.png"; + break; + case Icon.FlagGr: + result = "flag_gr.png"; + break; + case Icon.FlagGreen: + result = "flag_green.png"; + break; + case Icon.FlagGrey: + result = "flag_grey.png"; + break; + case Icon.FlagGs: + result = "flag_gs.png"; + break; + case Icon.FlagGt: + result = "flag_gt.png"; + break; + case Icon.FlagGu: + result = "flag_gu.png"; + break; + case Icon.FlagGw: + result = "flag_gw.png"; + break; + case Icon.FlagGy: + result = "flag_gy.png"; + break; + case Icon.FlagHk: + result = "flag_hk.png"; + break; + case Icon.FlagHm: + result = "flag_hm.png"; + break; + case Icon.FlagHn: + result = "flag_hn.png"; + break; + case Icon.FlagHr: + result = "flag_hr.png"; + break; + case Icon.FlagHt: + result = "flag_ht.png"; + break; + case Icon.FlagHu: + result = "flag_hu.png"; + break; + case Icon.FlagId: + result = "flag_id.png"; + break; + case Icon.FlagIe: + result = "flag_ie.png"; + break; + case Icon.FlagIl: + result = "flag_il.png"; + break; + case Icon.FlagIn: + result = "flag_in.png"; + break; + case Icon.FlagIo: + result = "flag_io.png"; + break; + case Icon.FlagIq: + result = "flag_iq.png"; + break; + case Icon.FlagIr: + result = "flag_ir.png"; + break; + case Icon.FlagIs: + result = "flag_is.png"; + break; + case Icon.FlagIt: + result = "flag_it.png"; + break; + case Icon.FlagJm: + result = "flag_jm.png"; + break; + case Icon.FlagJo: + result = "flag_jo.png"; + break; + case Icon.FlagJp: + result = "flag_jp.png"; + break; + case Icon.FlagKe: + result = "flag_ke.png"; + break; + case Icon.FlagKg: + result = "flag_kg.png"; + break; + case Icon.FlagKh: + result = "flag_kh.png"; + break; + case Icon.FlagKi: + result = "flag_ki.png"; + break; + case Icon.FlagKm: + result = "flag_km.png"; + break; + case Icon.FlagKn: + result = "flag_kn.png"; + break; + case Icon.FlagKp: + result = "flag_kp.png"; + break; + case Icon.FlagKr: + result = "flag_kr.png"; + break; + case Icon.FlagKw: + result = "flag_kw.png"; + break; + case Icon.FlagKy: + result = "flag_ky.png"; + break; + case Icon.FlagKz: + result = "flag_kz.png"; + break; + case Icon.FlagLa: + result = "flag_la.png"; + break; + case Icon.FlagLb: + result = "flag_lb.png"; + break; + case Icon.FlagLc: + result = "flag_lc.png"; + break; + case Icon.FlagLi: + result = "flag_li.png"; + break; + case Icon.FlagLk: + result = "flag_lk.png"; + break; + case Icon.FlagLr: + result = "flag_lr.png"; + break; + case Icon.FlagLs: + result = "flag_ls.png"; + break; + case Icon.FlagLt: + result = "flag_lt.png"; + break; + case Icon.FlagLu: + result = "flag_lu.png"; + break; + case Icon.FlagLv: + result = "flag_lv.png"; + break; + case Icon.FlagLy: + result = "flag_ly.png"; + break; + case Icon.FlagMa: + result = "flag_ma.png"; + break; + case Icon.FlagMc: + result = "flag_mc.png"; + break; + case Icon.FlagMd: + result = "flag_md.png"; + break; + case Icon.FlagMe: + result = "flag_me.png"; + break; + case Icon.FlagMg: + result = "flag_mg.png"; + break; + case Icon.FlagMh: + result = "flag_mh.png"; + break; + case Icon.FlagMk: + result = "flag_mk.png"; + break; + case Icon.FlagMl: + result = "flag_ml.png"; + break; + case Icon.FlagMm: + result = "flag_mm.png"; + break; + case Icon.FlagMn: + result = "flag_mn.png"; + break; + case Icon.FlagMo: + result = "flag_mo.png"; + break; + case Icon.FlagMp: + result = "flag_mp.png"; + break; + case Icon.FlagMq: + result = "flag_mq.png"; + break; + case Icon.FlagMr: + result = "flag_mr.png"; + break; + case Icon.FlagMs: + result = "flag_ms.png"; + break; + case Icon.FlagMt: + result = "flag_mt.png"; + break; + case Icon.FlagMu: + result = "flag_mu.png"; + break; + case Icon.FlagMv: + result = "flag_mv.png"; + break; + case Icon.FlagMw: + result = "flag_mw.png"; + break; + case Icon.FlagMx: + result = "flag_mx.png"; + break; + case Icon.FlagMy: + result = "flag_my.png"; + break; + case Icon.FlagMz: + result = "flag_mz.png"; + break; + case Icon.FlagNa: + result = "flag_na.png"; + break; + case Icon.FlagNc: + result = "flag_nc.png"; + break; + case Icon.FlagNe: + result = "flag_ne.png"; + break; + case Icon.FlagNf: + result = "flag_nf.png"; + break; + case Icon.FlagNg: + result = "flag_ng.png"; + break; + case Icon.FlagNi: + result = "flag_ni.png"; + break; + case Icon.FlagNl: + result = "flag_nl.png"; + break; + case Icon.FlagNo: + result = "flag_no.png"; + break; + case Icon.FlagNp: + result = "flag_np.png"; + break; + case Icon.FlagNr: + result = "flag_nr.png"; + break; + case Icon.FlagNu: + result = "flag_nu.png"; + break; + case Icon.FlagNz: + result = "flag_nz.png"; + break; + case Icon.FlagOm: + result = "flag_om.png"; + break; + case Icon.FlagOrange: + result = "flag_orange.png"; + break; + case Icon.FlagPa: + result = "flag_pa.png"; + break; + case Icon.FlagPe: + result = "flag_pe.png"; + break; + case Icon.FlagPf: + result = "flag_pf.png"; + break; + case Icon.FlagPg: + result = "flag_pg.png"; + break; + case Icon.FlagPh: + result = "flag_ph.png"; + break; + case Icon.FlagPink: + result = "flag_pink.png"; + break; + case Icon.FlagPk: + result = "flag_pk.png"; + break; + case Icon.FlagPl: + result = "flag_pl.png"; + break; + case Icon.FlagPm: + result = "flag_pm.png"; + break; + case Icon.FlagPn: + result = "flag_pn.png"; + break; + case Icon.FlagPr: + result = "flag_pr.png"; + break; + case Icon.FlagPs: + result = "flag_ps.png"; + break; + case Icon.FlagPt: + result = "flag_pt.png"; + break; + case Icon.FlagPurple: + result = "flag_purple.png"; + break; + case Icon.FlagPw: + result = "flag_pw.png"; + break; + case Icon.FlagPy: + result = "flag_py.png"; + break; + case Icon.FlagQa: + result = "flag_qa.png"; + break; + case Icon.FlagRe: + result = "flag_re.png"; + break; + case Icon.FlagRed: + result = "flag_red.png"; + break; + case Icon.FlagRo: + result = "flag_ro.png"; + break; + case Icon.FlagRs: + result = "flag_rs.png"; + break; + case Icon.FlagRu: + result = "flag_ru.png"; + break; + case Icon.FlagRw: + result = "flag_rw.png"; + break; + case Icon.FlagSa: + result = "flag_sa.png"; + break; + case Icon.FlagSb: + result = "flag_sb.png"; + break; + case Icon.FlagSc: + result = "flag_sc.png"; + break; + case Icon.FlagScotland: + result = "flag_scotland.png"; + break; + case Icon.FlagSd: + result = "flag_sd.png"; + break; + case Icon.FlagSe: + result = "flag_se.png"; + break; + case Icon.FlagSg: + result = "flag_sg.png"; + break; + case Icon.FlagSh: + result = "flag_sh.png"; + break; + case Icon.FlagSi: + result = "flag_si.png"; + break; + case Icon.FlagSj: + result = "flag_sj.png"; + break; + case Icon.FlagSk: + result = "flag_sk.png"; + break; + case Icon.FlagSl: + result = "flag_sl.png"; + break; + case Icon.FlagSm: + result = "flag_sm.png"; + break; + case Icon.FlagSn: + result = "flag_sn.png"; + break; + case Icon.FlagSo: + result = "flag_so.png"; + break; + case Icon.FlagSr: + result = "flag_sr.png"; + break; + case Icon.FlagSt: + result = "flag_st.png"; + break; + case Icon.FlagSv: + result = "flag_sv.png"; + break; + case Icon.FlagSy: + result = "flag_sy.png"; + break; + case Icon.FlagSz: + result = "flag_sz.png"; + break; + case Icon.FlagTc: + result = "flag_tc.png"; + break; + case Icon.FlagTd: + result = "flag_td.png"; + break; + case Icon.FlagTf: + result = "flag_tf.png"; + break; + case Icon.FlagTg: + result = "flag_tg.png"; + break; + case Icon.FlagTh: + result = "flag_th.png"; + break; + case Icon.FlagTj: + result = "flag_tj.png"; + break; + case Icon.FlagTk: + result = "flag_tk.png"; + break; + case Icon.FlagTl: + result = "flag_tl.png"; + break; + case Icon.FlagTm: + result = "flag_tm.png"; + break; + case Icon.FlagTn: + result = "flag_tn.png"; + break; + case Icon.FlagTo: + result = "flag_to.png"; + break; + case Icon.FlagTr: + result = "flag_tr.png"; + break; + case Icon.FlagTt: + result = "flag_tt.png"; + break; + case Icon.FlagTv: + result = "flag_tv.png"; + break; + case Icon.FlagTw: + result = "flag_tw.png"; + break; + case Icon.FlagTz: + result = "flag_tz.png"; + break; + case Icon.FlagUa: + result = "flag_ua.png"; + break; + case Icon.FlagUg: + result = "flag_ug.png"; + break; + case Icon.FlagUm: + result = "flag_um.png"; + break; + case Icon.FlagUs: + result = "flag_us.png"; + break; + case Icon.FlagUy: + result = "flag_uy.png"; + break; + case Icon.FlagUz: + result = "flag_uz.png"; + break; + case Icon.FlagVa: + result = "flag_va.png"; + break; + case Icon.FlagVc: + result = "flag_vc.png"; + break; + case Icon.FlagVe: + result = "flag_ve.png"; + break; + case Icon.FlagVg: + result = "flag_vg.png"; + break; + case Icon.FlagVi: + result = "flag_vi.png"; + break; + case Icon.FlagVn: + result = "flag_vn.png"; + break; + case Icon.FlagVu: + result = "flag_vu.png"; + break; + case Icon.FlagWales: + result = "flag_wales.png"; + break; + case Icon.FlagWf: + result = "flag_wf.png"; + break; + case Icon.FlagWhite: + result = "flag_white.png"; + break; + case Icon.FlagWs: + result = "flag_ws.png"; + break; + case Icon.FlagYe: + result = "flag_ye.png"; + break; + case Icon.FlagYellow: + result = "flag_yellow.png"; + break; + case Icon.FlagYt: + result = "flag_yt.png"; + break; + case Icon.FlagZa: + result = "flag_za.png"; + break; + case Icon.FlagZm: + result = "flag_zm.png"; + break; + case Icon.FlagZw: + result = "flag_zw.png"; + break; + case Icon.FlowerDaisy: + result = "flower_daisy.png"; + break; + case Icon.Folder: + result = "folder.png"; + break; + case Icon.FolderAdd: + result = "folder_add.png"; + break; + case Icon.FolderBell: + result = "folder_bell.png"; + break; + case Icon.FolderBookmark: + result = "folder_bookmark.png"; + break; + case Icon.FolderBrick: + result = "folder_brick.png"; + break; + case Icon.FolderBug: + result = "folder_bug.png"; + break; + case Icon.FolderCamera: + result = "folder_camera.png"; + break; + case Icon.FolderConnect: + result = "folder_connect.png"; + break; + case Icon.FolderDatabase: + result = "folder_database.png"; + break; + case Icon.FolderDelete: + result = "folder_delete.png"; + break; + case Icon.FolderEdit: + result = "folder_edit.png"; + break; + case Icon.FolderError: + result = "folder_error.png"; + break; + case Icon.FolderExplore: + result = "folder_explore.png"; + break; + case Icon.FolderFeed: + result = "folder_feed.png"; + break; + case Icon.FolderFilm: + result = "folder_film.png"; + break; + case Icon.FolderFind: + result = "folder_find.png"; + break; + case Icon.FolderFont: + result = "folder_font.png"; + break; + case Icon.FolderGo: + result = "folder_go.png"; + break; + case Icon.FolderHeart: + result = "folder_heart.png"; + break; + case Icon.FolderHome: + result = "folder_home.png"; + break; + case Icon.FolderImage: + result = "folder_image.png"; + break; + case Icon.FolderKey: + result = "folder_key.png"; + break; + case Icon.FolderLightbulb: + result = "folder_lightbulb.png"; + break; + case Icon.FolderLink: + result = "folder_link.png"; + break; + case Icon.FolderMagnify: + result = "folder_magnify.png"; + break; + case Icon.FolderPage: + result = "folder_page.png"; + break; + case Icon.FolderPageWhite: + result = "folder_page_white.png"; + break; + case Icon.FolderPalette: + result = "folder_palette.png"; + break; + case Icon.FolderPicture: + result = "folder_picture.png"; + break; + case Icon.FolderStar: + result = "folder_star.png"; + break; + case Icon.FolderTable: + result = "folder_table.png"; + break; + case Icon.FolderUp: + result = "folder_up.png"; + break; + case Icon.FolderUser: + result = "folder_user.png"; + break; + case Icon.FolderWrench: + result = "folder_wrench.png"; + break; + case Icon.Font: + result = "font.png"; + break; + case Icon.FontAdd: + result = "font_add.png"; + break; + case Icon.FontColor: + result = "font_color.png"; + break; + case Icon.FontDelete: + result = "font_delete.png"; + break; + case Icon.FontGo: + result = "font_go.png"; + break; + case Icon.FontLarger: + result = "font_larger.png"; + break; + case Icon.FontSmaller: + result = "font_smaller.png"; + break; + case Icon.ForwardBlue: + result = "forward_blue.png"; + break; + case Icon.ForwardGreen: + result = "forward_green.png"; + break; + case Icon.Group: + result = "group.png"; + break; + case Icon.GroupAdd: + result = "group_add.png"; + break; + case Icon.GroupDelete: + result = "group_delete.png"; + break; + case Icon.GroupEdit: + result = "group_edit.png"; + break; + case Icon.GroupError: + result = "group_error.png"; + break; + case Icon.GroupGear: + result = "group_gear.png"; + break; + case Icon.GroupGo: + result = "group_go.png"; + break; + case Icon.GroupKey: + result = "group_key.png"; + break; + case Icon.GroupLink: + result = "group_link.png"; + break; + case Icon.Heart: + result = "heart.png"; + break; + case Icon.HeartAdd: + result = "heart_add.png"; + break; + case Icon.HeartBroken: + result = "heart_broken.png"; + break; + case Icon.HeartConnect: + result = "heart_connect.png"; + break; + case Icon.HeartDelete: + result = "heart_delete.png"; + break; + case Icon.Help: + result = "help.png"; + break; + case Icon.Hourglass: + result = "hourglass.png"; + break; + case Icon.HourglassAdd: + result = "hourglass_add.png"; + break; + case Icon.HourglassDelete: + result = "hourglass_delete.png"; + break; + case Icon.HourglassGo: + result = "hourglass_go.png"; + break; + case Icon.HourglassLink: + result = "hourglass_link.png"; + break; + case Icon.House: + result = "house.png"; + break; + case Icon.HouseConnect: + result = "house_connect.png"; + break; + case Icon.HouseGo: + result = "house_go.png"; + break; + case Icon.HouseKey: + result = "house_key.png"; + break; + case Icon.HouseLink: + result = "house_link.png"; + break; + case Icon.HouseStar: + result = "house_star.png"; + break; + case Icon.Html: + result = "html.png"; + break; + case Icon.HtmlAdd: + result = "html_add.png"; + break; + case Icon.HtmlDelete: + result = "html_delete.png"; + break; + case Icon.HtmlError: + result = "html_error.png"; + break; + case Icon.HtmlGo: + result = "html_go.png"; + break; + case Icon.HtmlValid: + result = "html_valid.png"; + break; + case Icon.Image: + result = "image.png"; + break; + case Icon.Images: + result = "images.png"; + break; + case Icon.ImageAdd: + result = "image_add.png"; + break; + case Icon.ImageDelete: + result = "image_delete.png"; + break; + case Icon.ImageEdit: + result = "image_edit.png"; + break; + case Icon.ImageLink: + result = "image_link.png"; + break; + case Icon.ImageMagnify: + result = "image_magnify.png"; + break; + case Icon.ImageStar: + result = "image_star.png"; + break; + case Icon.Information: + result = "information.png"; + break; + case Icon.Ipod: + result = "ipod.png"; + break; + case Icon.IpodCast: + result = "ipod_cast.png"; + break; + case Icon.IpodCastAdd: + result = "ipod_cast_add.png"; + break; + case Icon.IpodCastDelete: + result = "ipod_cast_delete.png"; + break; + case Icon.IpodConnect: + result = "ipod_connect.png"; + break; + case Icon.IpodNano: + result = "ipod_nano.png"; + break; + case Icon.IpodNanoConnect: + result = "ipod_nano_connect.png"; + break; + case Icon.IpodSound: + result = "ipod_sound.png"; + break; + case Icon.Joystick: + result = "joystick.png"; + break; + case Icon.JoystickAdd: + result = "joystick_add.png"; + break; + case Icon.JoystickConnect: + result = "joystick_connect.png"; + break; + case Icon.JoystickDelete: + result = "joystick_delete.png"; + break; + case Icon.JoystickError: + result = "joystick_error.png"; + break; + case Icon.Key: + result = "key.png"; + break; + case Icon.Keyboard: + result = "keyboard.png"; + break; + case Icon.KeyboardAdd: + result = "keyboard_add.png"; + break; + case Icon.KeyboardConnect: + result = "keyboard_connect.png"; + break; + case Icon.KeyboardDelete: + result = "keyboard_delete.png"; + break; + case Icon.KeyboardMagnify: + result = "keyboard_magnify.png"; + break; + case Icon.KeyAdd: + result = "key_add.png"; + break; + case Icon.KeyDelete: + result = "key_delete.png"; + break; + case Icon.KeyGo: + result = "key_go.png"; + break; + case Icon.KeyStart: + result = "key_start.png"; + break; + case Icon.KeyStop: + result = "key_stop.png"; + break; + case Icon.Laptop: + result = "laptop.png"; + break; + case Icon.LaptopAdd: + result = "laptop_add.png"; + break; + case Icon.LaptopConnect: + result = "laptop_connect.png"; + break; + case Icon.LaptopDelete: + result = "laptop_delete.png"; + break; + case Icon.LaptopDisk: + result = "laptop_disk.png"; + break; + case Icon.LaptopEdit: + result = "laptop_edit.png"; + break; + case Icon.LaptopError: + result = "laptop_error.png"; + break; + case Icon.LaptopGo: + result = "laptop_go.png"; + break; + case Icon.LaptopKey: + result = "laptop_key.png"; + break; + case Icon.LaptopLink: + result = "laptop_link.png"; + break; + case Icon.LaptopMagnify: + result = "laptop_magnify.png"; + break; + case Icon.LaptopStart: + result = "laptop_start.png"; + break; + case Icon.LaptopStop: + result = "laptop_stop.png"; + break; + case Icon.LaptopWrench: + result = "laptop_wrench.png"; + break; + case Icon.Layers: + result = "layers.png"; + break; + case Icon.Layout: + result = "layout.png"; + break; + case Icon.LayoutAdd: + result = "layout_add.png"; + break; + case Icon.LayoutContent: + result = "layout_content.png"; + break; + case Icon.LayoutDelete: + result = "layout_delete.png"; + break; + case Icon.LayoutEdit: + result = "layout_edit.png"; + break; + case Icon.LayoutError: + result = "layout_error.png"; + break; + case Icon.LayoutHeader: + result = "layout_header.png"; + break; + case Icon.LayoutKey: + result = "layout_key.png"; + break; + case Icon.LayoutLightning: + result = "layout_lightning.png"; + break; + case Icon.LayoutLink: + result = "layout_link.png"; + break; + case Icon.LayoutSidebar: + result = "layout_sidebar.png"; + break; + case Icon.Lightbulb: + result = "lightbulb.png"; + break; + case Icon.LightbulbAdd: + result = "lightbulb_add.png"; + break; + case Icon.LightbulbDelete: + result = "lightbulb_delete.png"; + break; + case Icon.LightbulbOff: + result = "lightbulb_off.png"; + break; + case Icon.Lightning: + result = "lightning.png"; + break; + case Icon.LightningAdd: + result = "lightning_add.png"; + break; + case Icon.LightningDelete: + result = "lightning_delete.png"; + break; + case Icon.LightningGo: + result = "lightning_go.png"; + break; + case Icon.Link: + result = "link.png"; + break; + case Icon.LinkAdd: + result = "link_add.png"; + break; + case Icon.LinkBreak: + result = "link_break.png"; + break; + case Icon.LinkDelete: + result = "link_delete.png"; + break; + case Icon.LinkEdit: + result = "link_edit.png"; + break; + case Icon.LinkError: + result = "link_error.png"; + break; + case Icon.LinkGo: + result = "link_go.png"; + break; + case Icon.Lock: + result = "lock.png"; + break; + case Icon.LockAdd: + result = "lock_add.png"; + break; + case Icon.LockBreak: + result = "lock_break.png"; + break; + case Icon.LockDelete: + result = "lock_delete.png"; + break; + case Icon.LockEdit: + result = "lock_edit.png"; + break; + case Icon.LockGo: + result = "lock_go.png"; + break; + case Icon.LockKey: + result = "lock_key.png"; + break; + case Icon.LockOpen: + result = "lock_open.png"; + break; + case Icon.LockStart: + result = "lock_start.png"; + break; + case Icon.LockStop: + result = "lock_stop.png"; + break; + case Icon.Lorry: + result = "lorry.png"; + break; + case Icon.LorryAdd: + result = "lorry_add.png"; + break; + case Icon.LorryDelete: + result = "lorry_delete.png"; + break; + case Icon.LorryError: + result = "lorry_error.png"; + break; + case Icon.LorryFlatbed: + result = "lorry_flatbed.png"; + break; + case Icon.LorryGo: + result = "lorry_go.png"; + break; + case Icon.LorryLink: + result = "lorry_link.png"; + break; + case Icon.LorryStart: + result = "lorry_start.png"; + break; + case Icon.LorryStop: + result = "lorry_stop.png"; + break; + case Icon.MagifierZoomOut: + result = "magifier_zoom_out.png"; + break; + case Icon.Magnifier: + result = "magnifier.png"; + break; + case Icon.MagnifierZoomIn: + result = "magnifier_zoom_in.png"; + break; + case Icon.Mail: + result = "mail.png"; + break; + case Icon.Male: + result = "male.png"; + break; + case Icon.Map: + result = "map.png"; + break; + case Icon.MapAdd: + result = "map_add.png"; + break; + case Icon.MapClipboard: + result = "map_clipboard.png"; + break; + case Icon.MapCursor: + result = "map_cursor.png"; + break; + case Icon.MapDelete: + result = "map_delete.png"; + break; + case Icon.MapEdit: + result = "map_edit.png"; + break; + case Icon.MapError: + result = "map_error.png"; + break; + case Icon.MapGo: + result = "map_go.png"; + break; + case Icon.MapLink: + result = "map_link.png"; + break; + case Icon.MapMagnify: + result = "map_magnify.png"; + break; + case Icon.MapStart: + result = "map_start.png"; + break; + case Icon.MapStop: + result = "map_stop.png"; + break; + case Icon.MedalBronze1: + result = "medal_bronze_1.png"; + break; + case Icon.MedalBronze2: + result = "medal_bronze_2.png"; + break; + case Icon.MedalBronze3: + result = "medal_bronze_3.png"; + break; + case Icon.MedalBronzeAdd: + result = "medal_bronze_add.png"; + break; + case Icon.MedalBronzeDelete: + result = "medal_bronze_delete.png"; + break; + case Icon.MedalGold1: + result = "medal_gold_1.png"; + break; + case Icon.MedalGold2: + result = "medal_gold_2.png"; + break; + case Icon.MedalGold3: + result = "medal_gold_3.png"; + break; + case Icon.MedalGoldAdd: + result = "medal_gold_add.png"; + break; + case Icon.MedalGoldDelete: + result = "medal_gold_delete.png"; + break; + case Icon.MedalSilver1: + result = "medal_silver_1.png"; + break; + case Icon.MedalSilver2: + result = "medal_silver_2.png"; + break; + case Icon.MedalSilver3: + result = "medal_silver_3.png"; + break; + case Icon.MedalSilverAdd: + result = "medal_silver_add.png"; + break; + case Icon.MedalSilverDelete: + result = "medal_silver_delete.png"; + break; + case Icon.Money: + result = "money.png"; + break; + case Icon.MoneyAdd: + result = "money_add.png"; + break; + case Icon.MoneyDelete: + result = "money_delete.png"; + break; + case Icon.MoneyDollar: + result = "money_dollar.png"; + break; + case Icon.MoneyEuro: + result = "money_euro.png"; + break; + case Icon.MoneyPound: + result = "money_pound.png"; + break; + case Icon.MoneyYen: + result = "money_yen.png"; + break; + case Icon.Monitor: + result = "monitor.png"; + break; + case Icon.MonitorAdd: + result = "monitor_add.png"; + break; + case Icon.MonitorDelete: + result = "monitor_delete.png"; + break; + case Icon.MonitorEdit: + result = "monitor_edit.png"; + break; + case Icon.MonitorError: + result = "monitor_error.png"; + break; + case Icon.MonitorGo: + result = "monitor_go.png"; + break; + case Icon.MonitorKey: + result = "monitor_key.png"; + break; + case Icon.MonitorLightning: + result = "monitor_lightning.png"; + break; + case Icon.MonitorLink: + result = "monitor_link.png"; + break; + case Icon.MoonFull: + result = "moon_full.png"; + break; + case Icon.Mouse: + result = "mouse.png"; + break; + case Icon.MouseAdd: + result = "mouse_add.png"; + break; + case Icon.MouseDelete: + result = "mouse_delete.png"; + break; + case Icon.MouseError: + result = "mouse_error.png"; + break; + case Icon.Music: + result = "music.png"; + break; + case Icon.MusicNote: + result = "music_note.png"; + break; + case Icon.Neighbourhood: + result = "neighbourhood.png"; + break; + case Icon.New: + result = "new.png"; + break; + case Icon.Newspaper: + result = "newspaper.png"; + break; + case Icon.NewspaperAdd: + result = "newspaper_add.png"; + break; + case Icon.NewspaperDelete: + result = "newspaper_delete.png"; + break; + case Icon.NewspaperGo: + result = "newspaper_go.png"; + break; + case Icon.NewspaperLink: + result = "newspaper_link.png"; + break; + case Icon.NewBlue: + result = "new_blue.png"; + break; + case Icon.NewRed: + result = "new_red.png"; + break; + case Icon.NextBlue: + result = "next_blue.png"; + break; + case Icon.NextGreen: + result = "next_green.png"; + break; + case Icon.Note: + result = "note.png"; + break; + case Icon.NoteAdd: + result = "note_add.png"; + break; + case Icon.NoteDelete: + result = "note_delete.png"; + break; + case Icon.NoteEdit: + result = "note_edit.png"; + break; + case Icon.NoteError: + result = "note_error.png"; + break; + case Icon.NoteGo: + result = "note_go.png"; + break; + case Icon.Outline: + result = "outline.png"; + break; + case Icon.Overlays: + result = "overlays.png"; + break; + case Icon.Package: + result = "package.png"; + break; + case Icon.PackageAdd: + result = "package_add.png"; + break; + case Icon.PackageDelete: + result = "package_delete.png"; + break; + case Icon.PackageDown: + result = "package_down.png"; + break; + case Icon.PackageGo: + result = "package_go.png"; + break; + case Icon.PackageGreen: + result = "package_green.png"; + break; + case Icon.PackageIn: + result = "package_in.png"; + break; + case Icon.PackageLink: + result = "package_link.png"; + break; + case Icon.PackageSe: + result = "package_se.png"; + break; + case Icon.PackageStart: + result = "package_start.png"; + break; + case Icon.PackageStop: + result = "package_stop.png"; + break; + case Icon.PackageWhite: + result = "package_white.png"; + break; + case Icon.Page: + result = "page.png"; + break; + case Icon.PageAdd: + result = "page_add.png"; + break; + case Icon.PageAttach: + result = "page_attach.png"; + break; + case Icon.PageBack: + result = "page_back.png"; + break; + case Icon.PageBreak: + result = "page_break.png"; + break; + case Icon.PageBreakInsert: + result = "page_break_insert.png"; + break; + case Icon.PageCancel: + result = "page_cancel.png"; + break; + case Icon.PageCode: + result = "page_code.png"; + break; + case Icon.PageCopy: + result = "page_copy.png"; + break; + case Icon.PageDelete: + result = "page_delete.png"; + break; + case Icon.PageEdit: + result = "page_edit.png"; + break; + case Icon.PageError: + result = "page_error.png"; + break; + case Icon.PageExcel: + result = "page_excel.png"; + break; + case Icon.PageFind: + result = "page_find.png"; + break; + case Icon.PageForward: + result = "page_forward.png"; + break; + case Icon.PageGear: + result = "page_gear.png"; + break; + case Icon.PageGo: + result = "page_go.png"; + break; + case Icon.PageGreen: + result = "page_green.png"; + break; + case Icon.PageHeaderFooter: + result = "page_header_footer.png"; + break; + case Icon.PageKey: + result = "page_key.png"; + break; + case Icon.PageLandscape: + result = "page_landscape.png"; + break; + case Icon.PageLandscapeShot: + result = "page_landscape_shot.png"; + break; + case Icon.PageLightning: + result = "page_lightning.png"; + break; + case Icon.PageLink: + result = "page_link.png"; + break; + case Icon.PageMagnify: + result = "page_magnify.png"; + break; + case Icon.PagePaintbrush: + result = "page_paintbrush.png"; + break; + case Icon.PagePaste: + result = "page_paste.png"; + break; + case Icon.PagePortrait: + result = "page_portrait.png"; + break; + case Icon.PagePortraitShot: + result = "page_portrait_shot.png"; + break; + case Icon.PageRed: + result = "page_red.png"; + break; + case Icon.PageRefresh: + result = "page_refresh.png"; + break; + case Icon.PageSave: + result = "page_save.png"; + break; + case Icon.PageWhite: + result = "page_white.png"; + break; + case Icon.PageWhiteAcrobat: + result = "page_white_acrobat.png"; + break; + case Icon.PageWhiteActionscript: + result = "page_white_actionscript.png"; + break; + case Icon.PageWhiteAdd: + result = "page_white_add.png"; + break; + case Icon.PageWhiteBreak: + result = "page_white_break.png"; + break; + case Icon.PageWhiteC: + result = "page_white_c.png"; + break; + case Icon.PageWhiteCamera: + result = "page_white_camera.png"; + break; + case Icon.PageWhiteCd: + result = "page_white_cd.png"; + break; + case Icon.PageWhiteCdr: + result = "page_white_cdr.png"; + break; + case Icon.PageWhiteCode: + result = "page_white_code.png"; + break; + case Icon.PageWhiteCodeRed: + result = "page_white_code_red.png"; + break; + case Icon.PageWhiteColdfusion: + result = "page_white_coldfusion.png"; + break; + case Icon.PageWhiteCompressed: + result = "page_white_compressed.png"; + break; + case Icon.PageWhiteConnect: + result = "page_white_connect.png"; + break; + case Icon.PageWhiteCopy: + result = "page_white_copy.png"; + break; + case Icon.PageWhiteCplusplus: + result = "page_white_cplusplus.png"; + break; + case Icon.PageWhiteCsharp: + result = "page_white_csharp.png"; + break; + case Icon.PageWhiteCup: + result = "page_white_cup.png"; + break; + case Icon.PageWhiteDatabase: + result = "page_white_database.png"; + break; + case Icon.PageWhiteDatabaseYellow: + result = "page_white_database_yellow.png"; + break; + case Icon.PageWhiteDelete: + result = "page_white_delete.png"; + break; + case Icon.PageWhiteDvd: + result = "page_white_dvd.png"; + break; + case Icon.PageWhiteEdit: + result = "page_white_edit.png"; + break; + case Icon.PageWhiteError: + result = "page_white_error.png"; + break; + case Icon.PageWhiteExcel: + result = "page_white_excel.png"; + break; + case Icon.PageWhiteFind: + result = "page_white_find.png"; + break; + case Icon.PageWhiteFlash: + result = "page_white_flash.png"; + break; + case Icon.PageWhiteFont: + result = "page_white_font.png"; + break; + case Icon.PageWhiteFreehand: + result = "page_white_freehand.png"; + break; + case Icon.PageWhiteGear: + result = "page_white_gear.png"; + break; + case Icon.PageWhiteGet: + result = "page_white_get.png"; + break; + case Icon.PageWhiteGo: + result = "page_white_go.png"; + break; + case Icon.PageWhiteH: + result = "page_white_h.png"; + break; + case Icon.PageWhiteHorizontal: + result = "page_white_horizontal.png"; + break; + case Icon.PageWhiteKey: + result = "page_white_key.png"; + break; + case Icon.PageWhiteLightning: + result = "page_white_lightning.png"; + break; + case Icon.PageWhiteLink: + result = "page_white_link.png"; + break; + case Icon.PageWhiteMagnify: + result = "page_white_magnify.png"; + break; + case Icon.PageWhiteMedal: + result = "page_white_medal.png"; + break; + case Icon.PageWhiteOffice: + result = "page_white_office.png"; + break; + case Icon.PageWhitePaint: + result = "page_white_paint.png"; + break; + case Icon.PageWhitePaintbrush: + result = "page_white_paintbrush.png"; + break; + case Icon.PageWhitePaint2: + result = "page_white_paint_2.png"; + break; + case Icon.PageWhitePaste: + result = "page_white_paste.png"; + break; + case Icon.PageWhitePasteTable: + result = "page_white_paste_table.png"; + break; + case Icon.PageWhitePhp: + result = "page_white_php.png"; + break; + case Icon.PageWhitePicture: + result = "page_white_picture.png"; + break; + case Icon.PageWhitePowerpoint: + result = "page_white_powerpoint.png"; + break; + case Icon.PageWhitePut: + result = "page_white_put.png"; + break; + case Icon.PageWhiteRefresh: + result = "page_white_refresh.png"; + break; + case Icon.PageWhiteRuby: + result = "page_white_ruby.png"; + break; + case Icon.PageWhiteSideBySide: + result = "page_white_side_by_side.png"; + break; + case Icon.PageWhiteStack: + result = "page_white_stack.png"; + break; + case Icon.PageWhiteStar: + result = "page_white_star.png"; + break; + case Icon.PageWhiteSwoosh: + result = "page_white_swoosh.png"; + break; + case Icon.PageWhiteText: + result = "page_white_text.png"; + break; + case Icon.PageWhiteTextWidth: + result = "page_white_text_width.png"; + break; + case Icon.PageWhiteTux: + result = "page_white_tux.png"; + break; + case Icon.PageWhiteVector: + result = "page_white_vector.png"; + break; + case Icon.PageWhiteVisualstudio: + result = "page_white_visualstudio.png"; + break; + case Icon.PageWhiteWidth: + result = "page_white_width.png"; + break; + case Icon.PageWhiteWord: + result = "page_white_word.png"; + break; + case Icon.PageWhiteWorld: + result = "page_white_world.png"; + break; + case Icon.PageWhiteWrench: + result = "page_white_wrench.png"; + break; + case Icon.PageWhiteZip: + result = "page_white_zip.png"; + break; + case Icon.PageWord: + result = "page_word.png"; + break; + case Icon.PageWorld: + result = "page_world.png"; + break; + case Icon.Paint: + result = "paint.png"; + break; + case Icon.Paintbrush: + result = "paintbrush.png"; + break; + case Icon.PaintbrushColor: + result = "paintbrush_color.png"; + break; + case Icon.Paintcan: + result = "paintcan.png"; + break; + case Icon.PaintcanRed: + result = "paintcan_red.png"; + break; + case Icon.PaintCanBrush: + result = "paint_can_brush.png"; + break; + case Icon.Palette: + result = "palette.png"; + break; + case Icon.PastePlain: + result = "paste_plain.png"; + break; + case Icon.PasteWord: + result = "paste_word.png"; + break; + case Icon.PauseBlue: + result = "pause_blue.png"; + break; + case Icon.PauseGreen: + result = "pause_green.png"; + break; + case Icon.PauseRecord: + result = "pause_record.png"; + break; + case Icon.Pencil: + result = "pencil.png"; + break; + case Icon.PencilAdd: + result = "pencil_add.png"; + break; + case Icon.PencilDelete: + result = "pencil_delete.png"; + break; + case Icon.PencilGo: + result = "pencil_go.png"; + break; + case Icon.Phone: + result = "phone.png"; + break; + case Icon.PhoneAdd: + result = "phone_add.png"; + break; + case Icon.PhoneDelete: + result = "phone_delete.png"; + break; + case Icon.PhoneEdit: + result = "phone_edit.png"; + break; + case Icon.PhoneError: + result = "phone_error.png"; + break; + case Icon.PhoneGo: + result = "phone_go.png"; + break; + case Icon.PhoneKey: + result = "phone_key.png"; + break; + case Icon.PhoneLink: + result = "phone_link.png"; + break; + case Icon.PhoneSound: + result = "phone_sound.png"; + break; + case Icon.PhoneStart: + result = "phone_start.png"; + break; + case Icon.PhoneStop: + result = "phone_stop.png"; + break; + case Icon.Photo: + result = "photo.png"; + break; + case Icon.Photos: + result = "photos.png"; + break; + case Icon.PhotoAdd: + result = "photo_add.png"; + break; + case Icon.PhotoDelete: + result = "photo_delete.png"; + break; + case Icon.PhotoEdit: + result = "photo_edit.png"; + break; + case Icon.PhotoLink: + result = "photo_link.png"; + break; + case Icon.PhotoPaint: + result = "photo_paint.png"; + break; + case Icon.Picture: + result = "picture.png"; + break; + case Icon.Pictures: + result = "pictures.png"; + break; + case Icon.PicturesThumbs: + result = "pictures_thumbs.png"; + break; + case Icon.PictureAdd: + result = "picture_add.png"; + break; + case Icon.PictureClipboard: + result = "picture_clipboard.png"; + break; + case Icon.PictureDelete: + result = "picture_delete.png"; + break; + case Icon.PictureEdit: + result = "picture_edit.png"; + break; + case Icon.PictureEmpty: + result = "picture_empty.png"; + break; + case Icon.PictureError: + result = "picture_error.png"; + break; + case Icon.PictureGo: + result = "picture_go.png"; + break; + case Icon.PictureKey: + result = "picture_key.png"; + break; + case Icon.PictureLink: + result = "picture_link.png"; + break; + case Icon.PictureSave: + result = "picture_save.png"; + break; + case Icon.Pilcrow: + result = "pilcrow.png"; + break; + case Icon.Pill: + result = "pill.png"; + break; + case Icon.PillAdd: + result = "pill_add.png"; + break; + case Icon.PillDelete: + result = "pill_delete.png"; + break; + case Icon.PillError: + result = "pill_error.png"; + break; + case Icon.PillGo: + result = "pill_go.png"; + break; + case Icon.PlayBlue: + result = "play_blue.png"; + break; + case Icon.PlayGreen: + result = "play_green.png"; + break; + case Icon.Plugin: + result = "plugin.png"; + break; + case Icon.PluginAdd: + result = "plugin_add.png"; + break; + case Icon.PluginDelete: + result = "plugin_delete.png"; + break; + case Icon.PluginDisabled: + result = "plugin_disabled.png"; + break; + case Icon.PluginEdit: + result = "plugin_edit.png"; + break; + case Icon.PluginError: + result = "plugin_error.png"; + break; + case Icon.PluginGo: + result = "plugin_go.png"; + break; + case Icon.PluginKey: + result = "plugin_key.png"; + break; + case Icon.PluginLink: + result = "plugin_link.png"; + break; + case Icon.PreviousGreen: + result = "previous_green.png"; + break; + case Icon.Printer: + result = "printer.png"; + break; + case Icon.PrinterAdd: + result = "printer_add.png"; + break; + case Icon.PrinterCancel: + result = "printer_cancel.png"; + break; + case Icon.PrinterColor: + result = "printer_color.png"; + break; + case Icon.PrinterConnect: + result = "printer_connect.png"; + break; + case Icon.PrinterDelete: + result = "printer_delete.png"; + break; + case Icon.PrinterEmpty: + result = "printer_empty.png"; + break; + case Icon.PrinterError: + result = "printer_error.png"; + break; + case Icon.PrinterGo: + result = "printer_go.png"; + break; + case Icon.PrinterKey: + result = "printer_key.png"; + break; + case Icon.PrinterMono: + result = "printer_mono.png"; + break; + case Icon.PrinterStart: + result = "printer_start.png"; + break; + case Icon.PrinterStop: + result = "printer_stop.png"; + break; + case Icon.Rainbow: + result = "rainbow.png"; + break; + case Icon.RainbowStar: + result = "rainbow_star.png"; + break; + case Icon.RecordBlue: + result = "record_blue.png"; + break; + case Icon.RecordGreen: + result = "record_green.png"; + break; + case Icon.RecordRed: + result = "record_red.png"; + break; + case Icon.Reload: + result = "reload.png"; + break; + case Icon.Report: + result = "report.png"; + break; + case Icon.ReportAdd: + result = "report_add.png"; + break; + case Icon.ReportDelete: + result = "report_delete.png"; + break; + case Icon.ReportDisk: + result = "report_disk.png"; + break; + case Icon.ReportEdit: + result = "report_edit.png"; + break; + case Icon.ReportGo: + result = "report_go.png"; + break; + case Icon.ReportKey: + result = "report_key.png"; + break; + case Icon.ReportLink: + result = "report_link.png"; + break; + case Icon.ReportMagnify: + result = "report_magnify.png"; + break; + case Icon.ReportPicture: + result = "report_picture.png"; + break; + case Icon.ReportStart: + result = "report_start.png"; + break; + case Icon.ReportStop: + result = "report_stop.png"; + break; + case Icon.ReportUser: + result = "report_user.png"; + break; + case Icon.ReportWord: + result = "report_word.png"; + break; + case Icon.ResultsetFirst: + result = "resultset_first.png"; + break; + case Icon.ResultsetLast: + result = "resultset_last.png"; + break; + case Icon.ResultsetNext: + result = "resultset_next.png"; + break; + case Icon.ResultsetPrevious: + result = "resultset_previous.png"; + break; + case Icon.ReverseBlue: + result = "reverse_blue.png"; + break; + case Icon.ReverseGreen: + result = "reverse_green.png"; + break; + case Icon.RewindBlue: + result = "rewind_blue.png"; + break; + case Icon.RewindGreen: + result = "rewind_green.png"; + break; + case Icon.Rgb: + result = "rgb.png"; + break; + case Icon.Rosette: + result = "rosette.png"; + break; + case Icon.RosetteBlue: + result = "rosette_blue.png"; + break; + case Icon.Rss: + result = "rss.png"; + break; + case Icon.RssAdd: + result = "rss_add.png"; + break; + case Icon.RssDelete: + result = "rss_delete.png"; + break; + case Icon.RssError: + result = "rss_error.png"; + break; + case Icon.RssGo: + result = "rss_go.png"; + break; + case Icon.RssValid: + result = "rss_valid.png"; + break; + case Icon.Ruby: + result = "ruby.png"; + break; + case Icon.RubyAdd: + result = "ruby_add.png"; + break; + case Icon.RubyDelete: + result = "ruby_delete.png"; + break; + case Icon.RubyGear: + result = "ruby_gear.png"; + break; + case Icon.RubyGet: + result = "ruby_get.png"; + break; + case Icon.RubyGo: + result = "ruby_go.png"; + break; + case Icon.RubyKey: + result = "ruby_key.png"; + break; + case Icon.RubyLink: + result = "ruby_link.png"; + break; + case Icon.RubyPut: + result = "ruby_put.png"; + break; + case Icon.Script: + result = "script.png"; + break; + case Icon.ScriptAdd: + result = "script_add.png"; + break; + case Icon.ScriptCode: + result = "script_code.png"; + break; + case Icon.ScriptCodeOriginal: + result = "script_code_original.png"; + break; + case Icon.ScriptCodeRed: + result = "script_code_red.png"; + break; + case Icon.ScriptDelete: + result = "script_delete.png"; + break; + case Icon.ScriptEdit: + result = "script_edit.png"; + break; + case Icon.ScriptError: + result = "script_error.png"; + break; + case Icon.ScriptGear: + result = "script_gear.png"; + break; + case Icon.ScriptGo: + result = "script_go.png"; + break; + case Icon.ScriptKey: + result = "script_key.png"; + break; + case Icon.ScriptLightning: + result = "script_lightning.png"; + break; + case Icon.ScriptLink: + result = "script_link.png"; + break; + case Icon.ScriptPalette: + result = "script_palette.png"; + break; + case Icon.ScriptSave: + result = "script_save.png"; + break; + case Icon.ScriptStart: + result = "script_start.png"; + break; + case Icon.ScriptStop: + result = "script_stop.png"; + break; + case Icon.Seasons: + result = "seasons.png"; + break; + case Icon.SectionCollapsed: + result = "section_collapsed.png"; + break; + case Icon.SectionExpanded: + result = "section_expanded.png"; + break; + case Icon.Server: + result = "server.png"; + break; + case Icon.ServerAdd: + result = "server_add.png"; + break; + case Icon.ServerChart: + result = "server_chart.png"; + break; + case Icon.ServerCompressed: + result = "server_compressed.png"; + break; + case Icon.ServerConnect: + result = "server_connect.png"; + break; + case Icon.ServerDatabase: + result = "server_database.png"; + break; + case Icon.ServerDelete: + result = "server_delete.png"; + break; + case Icon.ServerEdit: + result = "server_edit.png"; + break; + case Icon.ServerError: + result = "server_error.png"; + break; + case Icon.ServerGo: + result = "server_go.png"; + break; + case Icon.ServerKey: + result = "server_key.png"; + break; + case Icon.ServerLightning: + result = "server_lightning.png"; + break; + case Icon.ServerLink: + result = "server_link.png"; + break; + case Icon.ServerStart: + result = "server_start.png"; + break; + case Icon.ServerStop: + result = "server_stop.png"; + break; + case Icon.ServerUncompressed: + result = "server_uncompressed.png"; + break; + case Icon.ServerWrench: + result = "server_wrench.png"; + break; + case Icon.Shading: + result = "shading.png"; + break; + case Icon.ShapesMany: + result = "shapes_many.png"; + break; + case Icon.ShapesManySelect: + result = "shapes_many_select.png"; + break; + case Icon.Shape3d: + result = "shape_3d.png"; + break; + case Icon.ShapeAlignBottom: + result = "shape_align_bottom.png"; + break; + case Icon.ShapeAlignCenter: + result = "shape_align_center.png"; + break; + case Icon.ShapeAlignLeft: + result = "shape_align_left.png"; + break; + case Icon.ShapeAlignMiddle: + result = "shape_align_middle.png"; + break; + case Icon.ShapeAlignRight: + result = "shape_align_right.png"; + break; + case Icon.ShapeAlignTop: + result = "shape_align_top.png"; + break; + case Icon.ShapeFlipHorizontal: + result = "shape_flip_horizontal.png"; + break; + case Icon.ShapeFlipVertical: + result = "shape_flip_vertical.png"; + break; + case Icon.ShapeGroup: + result = "shape_group.png"; + break; + case Icon.ShapeHandles: + result = "shape_handles.png"; + break; + case Icon.ShapeMoveBack: + result = "shape_move_back.png"; + break; + case Icon.ShapeMoveBackwards: + result = "shape_move_backwards.png"; + break; + case Icon.ShapeMoveForwards: + result = "shape_move_forwards.png"; + break; + case Icon.ShapeMoveFront: + result = "shape_move_front.png"; + break; + case Icon.ShapeRotateAnticlockwise: + result = "shape_rotate_anticlockwise.png"; + break; + case Icon.ShapeRotateClockwise: + result = "shape_rotate_clockwise.png"; + break; + case Icon.ShapeShadeA: + result = "shape_shade_a.png"; + break; + case Icon.ShapeShadeB: + result = "shape_shade_b.png"; + break; + case Icon.ShapeShadeC: + result = "shape_shade_c.png"; + break; + case Icon.ShapeShadow: + result = "shape_shadow.png"; + break; + case Icon.ShapeShadowToggle: + result = "shape_shadow_toggle.png"; + break; + case Icon.ShapeSquare: + result = "shape_square.png"; + break; + case Icon.ShapeSquareAdd: + result = "shape_square_add.png"; + break; + case Icon.ShapeSquareDelete: + result = "shape_square_delete.png"; + break; + case Icon.ShapeSquareEdit: + result = "shape_square_edit.png"; + break; + case Icon.ShapeSquareError: + result = "shape_square_error.png"; + break; + case Icon.ShapeSquareGo: + result = "shape_square_go.png"; + break; + case Icon.ShapeSquareKey: + result = "shape_square_key.png"; + break; + case Icon.ShapeSquareLink: + result = "shape_square_link.png"; + break; + case Icon.ShapeSquareSelect: + result = "shape_square_select.png"; + break; + case Icon.ShapeUngroup: + result = "shape_ungroup.png"; + break; + case Icon.Share: + result = "share.png"; + break; + case Icon.Shield: + result = "shield.png"; + break; + case Icon.ShieldAdd: + result = "shield_add.png"; + break; + case Icon.ShieldDelete: + result = "shield_delete.png"; + break; + case Icon.ShieldError: + result = "shield_error.png"; + break; + case Icon.ShieldGo: + result = "shield_go.png"; + break; + case Icon.ShieldRainbow: + result = "shield_rainbow.png"; + break; + case Icon.ShieldSilver: + result = "shield_silver.png"; + break; + case Icon.ShieldStart: + result = "shield_start.png"; + break; + case Icon.ShieldStop: + result = "shield_stop.png"; + break; + case Icon.Sitemap: + result = "sitemap.png"; + break; + case Icon.SitemapColor: + result = "sitemap_color.png"; + break; + case Icon.Smartphone: + result = "smartphone.png"; + break; + case Icon.SmartphoneAdd: + result = "smartphone_add.png"; + break; + case Icon.SmartphoneConnect: + result = "smartphone_connect.png"; + break; + case Icon.SmartphoneDelete: + result = "smartphone_delete.png"; + break; + case Icon.SmartphoneDisk: + result = "smartphone_disk.png"; + break; + case Icon.SmartphoneEdit: + result = "smartphone_edit.png"; + break; + case Icon.SmartphoneError: + result = "smartphone_error.png"; + break; + case Icon.SmartphoneGo: + result = "smartphone_go.png"; + break; + case Icon.SmartphoneKey: + result = "smartphone_key.png"; + break; + case Icon.SmartphoneWrench: + result = "smartphone_wrench.png"; + break; + case Icon.SortAscending: + result = "sort_ascending.png"; + break; + case Icon.SortDescending: + result = "sort_descending.png"; + break; + case Icon.Sound: + result = "sound.png"; + break; + case Icon.SoundAdd: + result = "sound_add.png"; + break; + case Icon.SoundDelete: + result = "sound_delete.png"; + break; + case Icon.SoundHigh: + result = "sound_high.png"; + break; + case Icon.SoundIn: + result = "sound_in.png"; + break; + case Icon.SoundLow: + result = "sound_low.png"; + break; + case Icon.SoundMute: + result = "sound_mute.png"; + break; + case Icon.SoundNone: + result = "sound_none.png"; + break; + case Icon.SoundOut: + result = "sound_out.png"; + break; + case Icon.Spellcheck: + result = "spellcheck.png"; + break; + case Icon.Sport8ball: + result = "sport_8ball.png"; + break; + case Icon.SportBasketball: + result = "sport_basketball.png"; + break; + case Icon.SportFootball: + result = "sport_football.png"; + break; + case Icon.SportGolf: + result = "sport_golf.png"; + break; + case Icon.SportGolfPractice: + result = "sport_golf_practice.png"; + break; + case Icon.SportRaquet: + result = "sport_raquet.png"; + break; + case Icon.SportShuttlecock: + result = "sport_shuttlecock.png"; + break; + case Icon.SportSoccer: + result = "sport_soccer.png"; + break; + case Icon.SportTennis: + result = "sport_tennis.png"; + break; + case Icon.Star: + result = "star.png"; + break; + case Icon.StarBronze: + result = "star_bronze.png"; + break; + case Icon.StarBronzeHalfGrey: + result = "star_bronze_half_grey.png"; + break; + case Icon.StarGold: + result = "star_gold.png"; + break; + case Icon.StarGoldHalfGrey: + result = "star_gold_half_grey.png"; + break; + case Icon.StarGoldHalfSilver: + result = "star_gold_half_silver.png"; + break; + case Icon.StarGrey: + result = "star_grey.png"; + break; + case Icon.StarHalfGrey: + result = "star_half_grey.png"; + break; + case Icon.StarSilver: + result = "star_silver.png"; + break; + case Icon.StatusAway: + result = "status_away.png"; + break; + case Icon.StatusBeRightBack: + result = "status_be_right_back.png"; + break; + case Icon.StatusBusy: + result = "status_busy.png"; + break; + case Icon.StatusInvisible: + result = "status_invisible.png"; + break; + case Icon.StatusOffline: + result = "status_offline.png"; + break; + case Icon.StatusOnline: + result = "status_online.png"; + break; + case Icon.Stop: + result = "stop.png"; + break; + case Icon.StopBlue: + result = "stop_blue.png"; + break; + case Icon.StopGreen: + result = "stop_green.png"; + break; + case Icon.StopRed: + result = "stop_red.png"; + break; + case Icon.Style: + result = "style.png"; + break; + case Icon.StyleAdd: + result = "style_add.png"; + break; + case Icon.StyleDelete: + result = "style_delete.png"; + break; + case Icon.StyleEdit: + result = "style_edit.png"; + break; + case Icon.StyleGo: + result = "style_go.png"; + break; + case Icon.Sum: + result = "sum.png"; + break; + case Icon.Tab: + result = "tab.png"; + break; + case Icon.Table: + result = "table.png"; + break; + case Icon.TableAdd: + result = "table_add.png"; + break; + case Icon.TableCell: + result = "table_cell.png"; + break; + case Icon.TableColumn: + result = "table_column.png"; + break; + case Icon.TableColumnAdd: + result = "table_column_add.png"; + break; + case Icon.TableColumnDelete: + result = "table_column_delete.png"; + break; + case Icon.TableConnect: + result = "table_connect.png"; + break; + case Icon.TableDelete: + result = "table_delete.png"; + break; + case Icon.TableEdit: + result = "table_edit.png"; + break; + case Icon.TableError: + result = "table_error.png"; + break; + case Icon.TableGear: + result = "table_gear.png"; + break; + case Icon.TableGo: + result = "table_go.png"; + break; + case Icon.TableKey: + result = "table_key.png"; + break; + case Icon.TableLightning: + result = "table_lightning.png"; + break; + case Icon.TableLink: + result = "table_link.png"; + break; + case Icon.TableMultiple: + result = "table_multiple.png"; + break; + case Icon.TableRefresh: + result = "table_refresh.png"; + break; + case Icon.TableRelationship: + result = "table_relationship.png"; + break; + case Icon.TableRow: + result = "table_row.png"; + break; + case Icon.TableRowDelete: + result = "table_row_delete.png"; + break; + case Icon.TableRowInsert: + result = "table_row_insert.png"; + break; + case Icon.TableSave: + result = "table_save.png"; + break; + case Icon.TableSort: + result = "table_sort.png"; + break; + case Icon.TabAdd: + result = "tab_add.png"; + break; + case Icon.TabBlue: + result = "tab_blue.png"; + break; + case Icon.TabDelete: + result = "tab_delete.png"; + break; + case Icon.TabEdit: + result = "tab_edit.png"; + break; + case Icon.TabGo: + result = "tab_go.png"; + break; + case Icon.TabGreen: + result = "tab_green.png"; + break; + case Icon.TabRed: + result = "tab_red.png"; + break; + case Icon.Tag: + result = "tag.png"; + break; + case Icon.TagsGrey: + result = "tags_grey.png"; + break; + case Icon.TagsRed: + result = "tags_red.png"; + break; + case Icon.TagBlue: + result = "tag_blue.png"; + break; + case Icon.TagBlueAdd: + result = "tag_blue_add.png"; + break; + case Icon.TagBlueDelete: + result = "tag_blue_delete.png"; + break; + case Icon.TagBlueEdit: + result = "tag_blue_edit.png"; + break; + case Icon.TagGreen: + result = "tag_green.png"; + break; + case Icon.TagOrange: + result = "tag_orange.png"; + break; + case Icon.TagPink: + result = "tag_pink.png"; + break; + case Icon.TagPurple: + result = "tag_purple.png"; + break; + case Icon.TagRed: + result = "tag_red.png"; + break; + case Icon.TagYellow: + result = "tag_yellow.png"; + break; + case Icon.Telephone: + result = "telephone.png"; + break; + case Icon.TelephoneAdd: + result = "telephone_add.png"; + break; + case Icon.TelephoneDelete: + result = "telephone_delete.png"; + break; + case Icon.TelephoneEdit: + result = "telephone_edit.png"; + break; + case Icon.TelephoneError: + result = "telephone_error.png"; + break; + case Icon.TelephoneGo: + result = "telephone_go.png"; + break; + case Icon.TelephoneKey: + result = "telephone_key.png"; + break; + case Icon.TelephoneLink: + result = "telephone_link.png"; + break; + case Icon.TelephoneRed: + result = "telephone_red.png"; + break; + case Icon.Television: + result = "television.png"; + break; + case Icon.TelevisionAdd: + result = "television_add.png"; + break; + case Icon.TelevisionDelete: + result = "television_delete.png"; + break; + case Icon.TelevisionIn: + result = "television_in.png"; + break; + case Icon.TelevisionOff: + result = "television_off.png"; + break; + case Icon.TelevisionOut: + result = "television_out.png"; + break; + case Icon.TelevisionStar: + result = "television_star.png"; + break; + case Icon.Textfield: + result = "textfield.png"; + break; + case Icon.TextfieldAdd: + result = "textfield_add.png"; + break; + case Icon.TextfieldDelete: + result = "textfield_delete.png"; + break; + case Icon.TextfieldKey: + result = "textfield_key.png"; + break; + case Icon.TextfieldRename: + result = "textfield_rename.png"; + break; + case Icon.TextAb: + result = "text_ab.png"; + break; + case Icon.TextAlignCenter: + result = "text_align_center.png"; + break; + case Icon.TextAlignJustify: + result = "text_align_justify.png"; + break; + case Icon.TextAlignLeft: + result = "text_align_left.png"; + break; + case Icon.TextAlignRight: + result = "text_align_right.png"; + break; + case Icon.TextAllcaps: + result = "text_allcaps.png"; + break; + case Icon.TextBold: + result = "text_bold.png"; + break; + case Icon.TextColumns: + result = "text_columns.png"; + break; + case Icon.TextComplete: + result = "text_complete.png"; + break; + case Icon.TextDirection: + result = "text_direction.png"; + break; + case Icon.TextDoubleUnderline: + result = "text_double_underline.png"; + break; + case Icon.TextDropcaps: + result = "text_dropcaps.png"; + break; + case Icon.TextFit: + result = "text_fit.png"; + break; + case Icon.TextFlip: + result = "text_flip.png"; + break; + case Icon.TextFontDefault: + result = "text_font_default.png"; + break; + case Icon.TextHeading1: + result = "text_heading_1.png"; + break; + case Icon.TextHeading2: + result = "text_heading_2.png"; + break; + case Icon.TextHeading3: + result = "text_heading_3.png"; + break; + case Icon.TextHeading4: + result = "text_heading_4.png"; + break; + case Icon.TextHeading5: + result = "text_heading_5.png"; + break; + case Icon.TextHeading6: + result = "text_heading_6.png"; + break; + case Icon.TextHorizontalrule: + result = "text_horizontalrule.png"; + break; + case Icon.TextIndent: + result = "text_indent.png"; + break; + case Icon.TextIndentRemove: + result = "text_indent_remove.png"; + break; + case Icon.TextInverse: + result = "text_inverse.png"; + break; + case Icon.TextItalic: + result = "text_italic.png"; + break; + case Icon.TextKerning: + result = "text_kerning.png"; + break; + case Icon.TextLeftToRight: + result = "text_left_to_right.png"; + break; + case Icon.TextLetterspacing: + result = "text_letterspacing.png"; + break; + case Icon.TextLetterOmega: + result = "text_letter_omega.png"; + break; + case Icon.TextLinespacing: + result = "text_linespacing.png"; + break; + case Icon.TextListBullets: + result = "text_list_bullets.png"; + break; + case Icon.TextListNumbers: + result = "text_list_numbers.png"; + break; + case Icon.TextLowercase: + result = "text_lowercase.png"; + break; + case Icon.TextLowercaseA: + result = "text_lowercase_a.png"; + break; + case Icon.TextMirror: + result = "text_mirror.png"; + break; + case Icon.TextPaddingBottom: + result = "text_padding_bottom.png"; + break; + case Icon.TextPaddingLeft: + result = "text_padding_left.png"; + break; + case Icon.TextPaddingRight: + result = "text_padding_right.png"; + break; + case Icon.TextPaddingTop: + result = "text_padding_top.png"; + break; + case Icon.TextReplace: + result = "text_replace.png"; + break; + case Icon.TextRightToLeft: + result = "text_right_to_left.png"; + break; + case Icon.TextRotate0: + result = "text_rotate_0.png"; + break; + case Icon.TextRotate180: + result = "text_rotate_180.png"; + break; + case Icon.TextRotate270: + result = "text_rotate_270.png"; + break; + case Icon.TextRotate90: + result = "text_rotate_90.png"; + break; + case Icon.TextRuler: + result = "text_ruler.png"; + break; + case Icon.TextShading: + result = "text_shading.png"; + break; + case Icon.TextSignature: + result = "text_signature.png"; + break; + case Icon.TextSmallcaps: + result = "text_smallcaps.png"; + break; + case Icon.TextSpelling: + result = "text_spelling.png"; + break; + case Icon.TextStrikethrough: + result = "text_strikethrough.png"; + break; + case Icon.TextSubscript: + result = "text_subscript.png"; + break; + case Icon.TextSuperscript: + result = "text_superscript.png"; + break; + case Icon.TextTab: + result = "text_tab.png"; + break; + case Icon.TextUnderline: + result = "text_underline.png"; + break; + case Icon.TextUppercase: + result = "text_uppercase.png"; + break; + case Icon.Theme: + result = "theme.png"; + break; + case Icon.ThumbDown: + result = "thumb_down.png"; + break; + case Icon.ThumbUp: + result = "thumb_up.png"; + break; + case Icon.Tick: + result = "tick.png"; + break; + case Icon.Time: + result = "time.png"; + break; + case Icon.TimelineMarker: + result = "timeline_marker.png"; + break; + case Icon.TimeAdd: + result = "time_add.png"; + break; + case Icon.TimeDelete: + result = "time_delete.png"; + break; + case Icon.TimeGo: + result = "time_go.png"; + break; + case Icon.TimeGreen: + result = "time_green.png"; + break; + case Icon.TimeRed: + result = "time_red.png"; + break; + case Icon.Transmit: + result = "transmit.png"; + break; + case Icon.TransmitAdd: + result = "transmit_add.png"; + break; + case Icon.TransmitBlue: + result = "transmit_blue.png"; + break; + case Icon.TransmitDelete: + result = "transmit_delete.png"; + break; + case Icon.TransmitEdit: + result = "transmit_edit.png"; + break; + case Icon.TransmitError: + result = "transmit_error.png"; + break; + case Icon.TransmitGo: + result = "transmit_go.png"; + break; + case Icon.TransmitRed: + result = "transmit_red.png"; + break; + case Icon.Tux: + result = "tux.png"; + break; + case Icon.User: + result = "user.png"; + break; + case Icon.UserAdd: + result = "user_add.png"; + break; + case Icon.UserAlert: + result = "user_alert.png"; + break; + case Icon.UserB: + result = "user_b.png"; + break; + case Icon.UserBrown: + result = "user_brown.png"; + break; + case Icon.UserComment: + result = "user_comment.png"; + break; + case Icon.UserCross: + result = "user_cross.png"; + break; + case Icon.UserDelete: + result = "user_delete.png"; + break; + case Icon.UserEarth: + result = "user_earth.png"; + break; + case Icon.UserEdit: + result = "user_edit.png"; + break; + case Icon.UserFemale: + result = "user_female.png"; + break; + case Icon.UserGo: + result = "user_go.png"; + break; + case Icon.UserGray: + result = "user_gray.png"; + break; + case Icon.UserGrayCool: + result = "user_gray_cool.png"; + break; + case Icon.UserGreen: + result = "user_green.png"; + break; + case Icon.UserHome: + result = "user_home.png"; + break; + case Icon.UserKey: + result = "user_key.png"; + break; + case Icon.UserMagnify: + result = "user_magnify.png"; + break; + case Icon.UserMature: + result = "user_mature.png"; + break; + case Icon.UserOrange: + result = "user_orange.png"; + break; + case Icon.UserRed: + result = "user_red.png"; + break; + case Icon.UserStar: + result = "user_star.png"; + break; + case Icon.UserSuit: + result = "user_suit.png"; + break; + case Icon.UserSuitBlack: + result = "user_suit_black.png"; + break; + case Icon.UserTick: + result = "user_tick.png"; + break; + case Icon.Vcard: + result = "vcard.png"; + break; + case Icon.VcardAdd: + result = "vcard_add.png"; + break; + case Icon.VcardDelete: + result = "vcard_delete.png"; + break; + case Icon.VcardEdit: + result = "vcard_edit.png"; + break; + case Icon.VcardKey: + result = "vcard_key.png"; + break; + case Icon.Vector: + result = "vector.png"; + break; + case Icon.VectorAdd: + result = "vector_add.png"; + break; + case Icon.VectorDelete: + result = "vector_delete.png"; + break; + case Icon.VectorKey: + result = "vector_key.png"; + break; + case Icon.Wand: + result = "wand.png"; + break; + case Icon.WeatherCloud: + result = "weather_cloud.png"; + break; + case Icon.WeatherClouds: + result = "weather_clouds.png"; + break; + case Icon.WeatherCloudy: + result = "weather_cloudy.png"; + break; + case Icon.WeatherCloudyRain: + result = "weather_cloudy_rain.png"; + break; + case Icon.WeatherLightning: + result = "weather_lightning.png"; + break; + case Icon.WeatherRain: + result = "weather_rain.png"; + break; + case Icon.WeatherSnow: + result = "weather_snow.png"; + break; + case Icon.WeatherSun: + result = "weather_sun.png"; + break; + case Icon.Webcam: + result = "webcam.png"; + break; + case Icon.WebcamAdd: + result = "webcam_add.png"; + break; + case Icon.WebcamConnect: + result = "webcam_connect.png"; + break; + case Icon.WebcamDelete: + result = "webcam_delete.png"; + break; + case Icon.WebcamError: + result = "webcam_error.png"; + break; + case Icon.WebcamStart: + result = "webcam_start.png"; + break; + case Icon.WebcamStop: + result = "webcam_stop.png"; + break; + case Icon.World: + result = "world.png"; + break; + case Icon.WorldAdd: + result = "world_add.png"; + break; + case Icon.WorldConnect: + result = "world_connect.png"; + break; + case Icon.WorldDawn: + result = "world_dawn.png"; + break; + case Icon.WorldDelete: + result = "world_delete.png"; + break; + case Icon.WorldEdit: + result = "world_edit.png"; + break; + case Icon.WorldGo: + result = "world_go.png"; + break; + case Icon.WorldKey: + result = "world_key.png"; + break; + case Icon.WorldLink: + result = "world_link.png"; + break; + case Icon.WorldNight: + result = "world_night.png"; + break; + case Icon.WorldOrbit: + result = "world_orbit.png"; + break; + case Icon.Wrench: + result = "wrench.png"; + break; + case Icon.WrenchOrange: + result = "wrench_orange.png"; + break; + case Icon.Xhtml: + result = "xhtml.png"; + break; + case Icon.XhtmlAdd: + result = "xhtml_add.png"; + break; + case Icon.XhtmlDelete: + result = "xhtml_delete.png"; + break; + case Icon.XhtmlError: + result = "xhtml_error.png"; + break; + case Icon.XhtmlGo: + result = "xhtml_go.png"; + break; + case Icon.XhtmlValid: + result = "xhtml_valid.png"; + break; + case Icon.Zoom: + result = "zoom.png"; + break; + case Icon.ZoomIn: + result = "zoom_in.png"; + break; + case Icon.ZoomOut: + result = "zoom_out.png"; + break; + case Icon.SystemClose: + result = "system_close.gif"; + break; + case Icon.SystemNew: + result = "system_new.gif"; + break; + case Icon.SystemSave: + result = "system_save.gif"; + break; + case Icon.SystemSaveClose: + result = "system_saveclose.gif"; + break; + case Icon.SystemSaveNew: + result = "system_savenew.gif"; + break; + case Icon.SystemSearch: + result = "system_search.gif"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/IconAlign.cs b/FineUI/Business/Enums/IconAlign.cs index a8d1478..e1b18eb 100644 --- a/FineUI/Business/Enums/IconAlign.cs +++ b/FineUI/Business/Enums/IconAlign.cs @@ -1,85 +1,85 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: IconAlign.cs - * CreatedOn: 2011-05-15 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 按钮上图标的摆放位置 - /// - public enum IconAlign - { - /// - /// 靠上 - /// - Top, - /// - /// 靠右 - /// - Right, - /// - /// 靠下 - /// - Bottom, - /// - /// 靠左(默认值) - /// - Left - } - - /// - /// 图标摆放位置的名称 - /// - internal static class IconAlignHelper - { - public static string GetName(IconAlign type) - { - string result = String.Empty; - - switch (type) - { - case IconAlign.Top: - result = "top"; - break; - case IconAlign.Left: - result = "left"; - break; - case IconAlign.Bottom: - result = "bottom"; - break; - case IconAlign.Right: - result = "right"; - break; - default: - result = "left"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: IconAlign.cs + * CreatedOn: 2011-05-15 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 按钮上图标的摆放位置 + /// + public enum IconAlign + { + /// + /// 靠上 + /// + Top, + /// + /// 靠右 + /// + Right, + /// + /// 靠下 + /// + Bottom, + /// + /// 靠左(默认值) + /// + Left + } + + /// + /// 图标摆放位置的名称 + /// + internal static class IconAlignHelper + { + public static string GetName(IconAlign type) + { + string result = String.Empty; + + switch (type) + { + case IconAlign.Top: + result = "top"; + break; + case IconAlign.Left: + result = "left"; + break; + case IconAlign.Bottom: + result = "bottom"; + break; + case IconAlign.Right: + result = "right"; + break; + default: + result = "left"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/IconHelper.cs b/FineUI/Business/Enums/IconHelper.cs index 8a3b1e8..af6244b 100644 --- a/FineUI/Business/Enums/IconHelper.cs +++ b/FineUI/Business/Enums/IconHelper.cs @@ -1,120 +1,120 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: IconHelper.cs - * CreatedOn: 2012-05-26 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web; -using System.Web.UI; - -namespace FineUI -{ - public static partial class IconHelper - { - /// - /// 获得图标的服务器地址 - /// - /// 图标 - /// 图标的服务器地址 - public static string GetIconUrl(Icon icon) - { - //return ResourceHelper.GetWebResourceUrl(String.Format("FineUI.res.icon.{0}", IconHelper.GetName(icon))); - if (icon == Icon.None) - { - return String.Empty; - } - else - { - return String.Format("{0}/{1}", GlobalConfig.GetIconBasePath(), IconHelper.GetName(icon)); - } - } - - /// - /// 获取客户端可用的图标URL地址 - /// - /// 图标 - /// URL地址 - public static string GetResolvedIconUrl(Icon icon) - { - return GetResolvedIconUrl(icon, String.Empty); - } - - /// - /// 获取客户端可用的图标URL地址 - /// - /// 图标 - /// 图标地址 - /// URL地址 - public static string GetResolvedIconUrl(Icon icon, string iconUrl) - { - string url = iconUrl; - if (String.IsNullOrEmpty(url)) - { - if (icon != Icon.None) - { - url = IconHelper.GetIconUrl(icon); - } - } - if (String.IsNullOrEmpty(url)) - { - return String.Empty; - } - else - { - Page page = HttpContext.Current.Handler as Page; - return page.ResolveUrl(url); - } - } - - /// - /// 将图标字符串转换为图标 - /// - /// 图标字符串 - /// 是否忽略大小写 - /// 图标 - public static Icon String2Icon(string text, bool ignoreCase) - { - if (Enum.IsDefined(typeof(Icon), text)) - { - return (Icon)Enum.Parse(typeof(Icon), text, ignoreCase); - } - else - { - return Icon.None; - } - } - - /// - /// 将图标转换为图标字符串 - /// - /// 图标 - /// 图标字符串 - public static String Icon2String(Icon type) - { - return type.ToString(); - } - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: IconHelper.cs + * CreatedOn: 2012-05-26 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.UI; + +namespace FineUI +{ + public static partial class IconHelper + { + /// + /// 获得图标的服务器地址 + /// + /// 图标 + /// 图标的服务器地址 + public static string GetIconUrl(Icon icon) + { + //return ResourceHelper.GetWebResourceUrl(String.Format("FineUI.res.icon.{0}", IconHelper.GetName(icon))); + if (icon == Icon.None) + { + return String.Empty; + } + else + { + return String.Format("{0}/{1}", GlobalConfig.GetIconBasePath(), IconHelper.GetName(icon)); + } + } + + /// + /// 获取客户端可用的图标URL地址 + /// + /// 图标 + /// URL地址 + public static string GetResolvedIconUrl(Icon icon) + { + return GetResolvedIconUrl(icon, String.Empty); + } + + /// + /// 获取客户端可用的图标URL地址 + /// + /// 图标 + /// 图标地址 + /// URL地址 + public static string GetResolvedIconUrl(Icon icon, string iconUrl) + { + string url = iconUrl; + if (String.IsNullOrEmpty(url)) + { + if (icon != Icon.None) + { + url = IconHelper.GetIconUrl(icon); + } + } + if (String.IsNullOrEmpty(url)) + { + return String.Empty; + } + else + { + Page page = HttpContext.Current.Handler as Page; + return page.ResolveUrl(url); + } + } + + /// + /// 将图标字符串转换为图标 + /// + /// 图标字符串 + /// 是否忽略大小写 + /// 图标 + public static Icon String2Icon(string text, bool ignoreCase) + { + if (Enum.IsDefined(typeof(Icon), text)) + { + return (Icon)Enum.Parse(typeof(Icon), text, ignoreCase); + } + else + { + return Icon.None; + } + } + + /// + /// 将图标转换为图标字符串 + /// + /// 图标 + /// 图标字符串 + public static String Icon2String(Icon type) + { + return type.ToString(); + } + + + } +} diff --git a/FineUI/Business/Enums/LabelAlign.cs b/FineUI/Business/Enums/LabelAlign.cs index 5b91f70..8c9a9bc 100644 --- a/FineUI/Business/Enums/LabelAlign.cs +++ b/FineUI/Business/Enums/LabelAlign.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 表单中标签的排列位置 - /// - public enum LabelAlign - { - /// - /// 靠左(默认值) - /// - Left, - /// - /// 靠右 - /// - Right, - /// - /// 靠上 - /// - Top - } - - /// - /// 表单中标签的排列位置名称 - /// - internal static class LabelAlignHelper - { - public static string GetName(LabelAlign type) - { - string result = String.Empty; - - switch (type) - { - case LabelAlign.Left: - result = "left"; - break; - case LabelAlign.Right: - result = "right"; - break; - case LabelAlign.Top: - result = "top"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表单中标签的排列位置 + /// + public enum LabelAlign + { + /// + /// 靠左(默认值) + /// + Left, + /// + /// 靠右 + /// + Right, + /// + /// 靠上 + /// + Top + } + + /// + /// 表单中标签的排列位置名称 + /// + internal static class LabelAlignHelper + { + public static string GetName(LabelAlign type) + { + string result = String.Empty; + + switch (type) + { + case LabelAlign.Left: + result = "left"; + break; + case LabelAlign.Right: + result = "right"; + break; + case LabelAlign.Top: + result = "top"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Language.cs b/FineUI/Business/Enums/Language.cs index 095f949..03f2951 100644 --- a/FineUI/Business/Enums/Language.cs +++ b/FineUI/Business/Enums/Language.cs @@ -1,265 +1,265 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: LanguageType.cs - * CreatedOn: 2008-08-20 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 语言 - /// - public enum Language - { - /// - /// 英文 - /// - EN, - /// - /// 中文(默认值) - /// - ZH_CN, - /// - /// 中文(台湾) - /// - ZH_TW, - /// - /// 葡萄牙文(巴西) - /// - PT_BR, - /// - /// 土耳其文 - /// - TR, - /// - /// 俄文 - /// - RU - - //AF, - //BG, - //CA, - //CS, - //DA, - //DE, - //EL_GR, - - //EN_GB, - //ES, - //FA, - //FI, - //FR, - //FR_CA, - //GR, - //HE, - //HR, - //HU, - //ID, - //IT, - //JA, - //KO, - //LT, - //LV, - //MK, - //NL, - //NO_NB, - //NO_NN, - //PL, - //PT, - - //PT_PT, - //RO, - //RU, - //SK, - //SL, - //SR, - //SR_RS, - //SV_SE, - //TH, - //UKR, - //VN - - } - - /// - /// 语言的类型名称 - /// - internal static class LanguageHelper - { - public static string GetName(Language type) - { - string result = String.Empty; - - switch (type) - { - case Language.EN: - result = "en"; - break; - case Language.ZH_CN: - result = "zh_CN"; - break; - case Language.ZH_TW: - result = "zh_TW"; - break; - case Language.PT_BR: - result = "pt_BR"; - break; - case Language.TR: - result = "tr"; - break; - case Language.RU: - result = "ru"; - break; - - //case Language.AF: - // result = "af"; - // break; - //case Language.BG: - // result = "bg"; - // break; - //case Language.CA: - // result = "ca"; - // break; - //case Language.CS: - // result = "cs"; - // break; - //case Language.DA: - // result = "da"; - // break; - //case Language.DE: - // result = "de"; - // break; - //case Language.EL_GR: - // result = "el_GR"; - // break; - - //case Language.EN_GB: - // result = "en_GB"; - // break; - //case Language.ES: - // result = "es"; - // break; - //case Language.FA: - // result = "fa"; - // break; - //case Language.FI: - // result = "fi"; - // break; - //case Language.FR: - // result = "fr"; - // break; - //case Language.FR_CA: - // result = "fr_CA"; - // break; - //case Language.GR: - // result = "gr"; - // break; - //case Language.HE: - // result = "he"; - // break; - //case Language.HR: - // result = "hr"; - // break; - //case Language.HU: - // result = "hu"; - // break; - //case Language.ID: - // result = "id"; - // break; - //case Language.IT: - // result = "it"; - // break; - //case Language.JA: - // result = "ja"; - // break; - //case Language.KO: - // result = "ko"; - // break; - //case Language.LT: - // result = "lt"; - // break; - //case Language.LV: - // result = "lv"; - // break; - //case Language.MK: - // result = "mk"; - // break; - //case Language.NL: - // result = "nl"; - // break; - //case Language.NO_NB: - // result = "no_NB"; - // break; - //case Language.NO_NN: - // result = "no_NN"; - // break; - //case Language.PL: - // result = "pl"; - // break; - //case Language.PT: - // result = "pt"; - // break; - - //case Language.PT_PT: - // result = "pt_PT"; - // break; - //case Language.RO: - // result = "ro"; - // break; - //case Language.RU: - // result = "ru"; - // break; - //case Language.SK: - // result = "sk"; - // break; - //case Language.SL: - // result = "sl"; - // break; - //case Language.SR: - // result = "sr"; - // break; - //case Language.SR_RS: - // result = "sr_RS"; - // break; - //case Language.SV_SE: - // result = "sv_SE"; - // break; - //case Language.TH: - // result = "th"; - // break; - - //case Language.UKR: - // result = "ukr"; - // break; - //case Language.VN: - // result = "vn"; - // break; - - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: LanguageType.cs + * CreatedOn: 2008-08-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 语言 + /// + public enum Language + { + /// + /// 英文 + /// + EN, + /// + /// 中文(默认值) + /// + ZH_CN, + /// + /// 中文(台湾) + /// + ZH_TW, + /// + /// 葡萄牙文(巴西) + /// + PT_BR, + /// + /// 土耳其文 + /// + TR, + /// + /// 俄文 + /// + RU + + //AF, + //BG, + //CA, + //CS, + //DA, + //DE, + //EL_GR, + + //EN_GB, + //ES, + //FA, + //FI, + //FR, + //FR_CA, + //GR, + //HE, + //HR, + //HU, + //ID, + //IT, + //JA, + //KO, + //LT, + //LV, + //MK, + //NL, + //NO_NB, + //NO_NN, + //PL, + //PT, + + //PT_PT, + //RO, + //RU, + //SK, + //SL, + //SR, + //SR_RS, + //SV_SE, + //TH, + //UKR, + //VN + + } + + /// + /// 语言的类型名称 + /// + internal static class LanguageHelper + { + public static string GetName(Language type) + { + string result = String.Empty; + + switch (type) + { + case Language.EN: + result = "en"; + break; + case Language.ZH_CN: + result = "zh_CN"; + break; + case Language.ZH_TW: + result = "zh_TW"; + break; + case Language.PT_BR: + result = "pt_BR"; + break; + case Language.TR: + result = "tr"; + break; + case Language.RU: + result = "ru"; + break; + + //case Language.AF: + // result = "af"; + // break; + //case Language.BG: + // result = "bg"; + // break; + //case Language.CA: + // result = "ca"; + // break; + //case Language.CS: + // result = "cs"; + // break; + //case Language.DA: + // result = "da"; + // break; + //case Language.DE: + // result = "de"; + // break; + //case Language.EL_GR: + // result = "el_GR"; + // break; + + //case Language.EN_GB: + // result = "en_GB"; + // break; + //case Language.ES: + // result = "es"; + // break; + //case Language.FA: + // result = "fa"; + // break; + //case Language.FI: + // result = "fi"; + // break; + //case Language.FR: + // result = "fr"; + // break; + //case Language.FR_CA: + // result = "fr_CA"; + // break; + //case Language.GR: + // result = "gr"; + // break; + //case Language.HE: + // result = "he"; + // break; + //case Language.HR: + // result = "hr"; + // break; + //case Language.HU: + // result = "hu"; + // break; + //case Language.ID: + // result = "id"; + // break; + //case Language.IT: + // result = "it"; + // break; + //case Language.JA: + // result = "ja"; + // break; + //case Language.KO: + // result = "ko"; + // break; + //case Language.LT: + // result = "lt"; + // break; + //case Language.LV: + // result = "lv"; + // break; + //case Language.MK: + // result = "mk"; + // break; + //case Language.NL: + // result = "nl"; + // break; + //case Language.NO_NB: + // result = "no_NB"; + // break; + //case Language.NO_NN: + // result = "no_NN"; + // break; + //case Language.PL: + // result = "pl"; + // break; + //case Language.PT: + // result = "pt"; + // break; + + //case Language.PT_PT: + // result = "pt_PT"; + // break; + //case Language.RO: + // result = "ro"; + // break; + //case Language.RU: + // result = "ru"; + // break; + //case Language.SK: + // result = "sk"; + // break; + //case Language.SL: + // result = "sl"; + // break; + //case Language.SR: + // result = "sr"; + // break; + //case Language.SR_RS: + // result = "sr_RS"; + // break; + //case Language.SV_SE: + // result = "sv_SE"; + // break; + //case Language.TH: + // result = "th"; + // break; + + //case Language.UKR: + // result = "ukr"; + // break; + //case Language.VN: + // result = "vn"; + // break; + + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Layout.cs b/FineUI/Business/Enums/Layout.cs index ea6ae41..4749a43 100644 --- a/FineUI/Business/Enums/Layout.cs +++ b/FineUI/Business/Enums/Layout.cs @@ -1,148 +1,138 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: LayoutType.cs - * CreatedOn: 2008-06-11 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 布局类型 - /// - public enum Layout - { - /// - /// 容器布局(默认值) - /// - Container, - /// - /// 锚点布局 - /// - Anchor, - /// - /// 边框布局(只用于RegionPanel控件) - /// - Border, - /// - /// 自适应布局(用于只有一个子控件的情况) - /// - Fit, - /// - /// 手风琴布局(只用于Accordion控件) - /// - Accordion, - /// - /// 表单布局(用于SimpleForm和Form控件) - /// - Form, - /// - /// 卡片布局(只用于TabStrip控件) - /// - Card, - /// - /// 列布局 - /// - Column, - /// - /// 绝对定位布局 - /// - Absolute, - /// - /// 行布局 - /// - Row, - /// - /// 表格布局 - /// - Table, - /// - /// 垂直盒子布局 - /// - VBox, - /// - /// 水平盒子布局 - /// - HBox - } - - /// - /// 布局类型名称 - /// - internal static class LayoutHelper - { - public static string GetName(Layout type) - { - string result = String.Empty; - - switch (type) - { - case Layout.Container: - result = "container"; - break; - case Layout.Accordion: - result = "accordion"; - break; - case Layout.Anchor: - result = "anchor"; - break; - case Layout.Border: - result = "border"; - break; - case Layout.Card: - result = "card"; - break; - case Layout.Column: - result = "column"; - break; - case Layout.Fit: - result = "fit"; - break; - case Layout.Form: - result = "form"; - break; - case Layout.Absolute: - result = "absolute"; - break; - //case LayoutType.Center: - // result = "ux.center"; - // break; - case Layout.Row: - result = "ux.row"; - break; - case Layout.Table: - result = "table"; - break; - case Layout.VBox: - result = "vbox"; - break; - case Layout.HBox: - result = "hbox"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: LayoutType.cs + * CreatedOn: 2008-06-11 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 布局类型 + /// + public enum Layout + { + /// + /// 容器布局(默认值) + /// + Container, + /// + /// 锚点布局 + /// + Anchor, + /// + /// 区域布局 + /// + Region, + /// + /// 自适应布局(用于只有一个子控件的情况) + /// + Fit, + /// + /// 手风琴布局(只用于Accordion控件) + /// + Accordion, + /// + /// 表单布局(用于SimpleForm和Form控件) + /// + Form, + /// + /// 卡片布局(只用于TabStrip控件) + /// + Card, + /// + /// 列布局 + /// + Column, + /// + /// 绝对定位布局 + /// + Absolute, + /// + /// 表格布局 + /// + Table, + /// + /// 垂直盒子布局 + /// + VBox, + /// + /// 水平盒子布局 + /// + HBox + } + + /// + /// 布局类型名称 + /// + internal static class LayoutHelper + { + public static string GetName(Layout type) + { + string result = String.Empty; + + switch (type) + { + case Layout.Container: + result = "container"; + break; + case Layout.Accordion: + result = "accordion"; + break; + case Layout.Anchor: + result = "anchor"; + break; + case Layout.Region: + result = "border"; + break; + case Layout.Card: + result = "card"; + break; + case Layout.Column: + result = "column"; + break; + case Layout.Fit: + result = "fit"; + break; + case Layout.Form: + result = "form"; + break; + case Layout.Absolute: + result = "absolute"; + break; + case Layout.Table: + result = "table"; + break; + case Layout.VBox: + result = "vbox"; + break; + case Layout.HBox: + result = "hbox"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/MessageBoxIcon.cs b/FineUI/Business/Enums/MessageBoxIcon.cs index 44e5fb9..1d8c9be 100644 --- a/FineUI/Business/Enums/MessageBoxIcon.cs +++ b/FineUI/Business/Enums/MessageBoxIcon.cs @@ -1,110 +1,110 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 消息框图标类型 - /// - public enum MessageBoxIcon - { - /// - /// 信息(默认值) - /// - Information, - /// - /// 警告 - /// - Warning, - /// - /// 问题 - /// - Question, - /// - /// 错误 - /// - Error - } - - /// - /// 消息框图标类型名称 - /// - internal static class MessageBoxIconHelper - { - public static string GetName(MessageBoxIcon type) - { - string result = String.Empty; - - switch (type) - { - case MessageBoxIcon.Information: - //result = "ext-mb-info"; - result = "Ext.MessageBox.INFO"; - break; - case MessageBoxIcon.Warning: - //result = "ext-mb-warning"; - result = "Ext.MessageBox.WARNING"; - break; - case MessageBoxIcon.Question: - //result = "ext-mb-question"; - result = "Ext.MessageBox.QUESTION"; - break; - case MessageBoxIcon.Error: - //result = "ext-mb-error"; - result = "Ext.MessageBox.ERROR"; - break; - } - - return result; - } - - - public static string GetShortName(MessageBoxIcon type) - { - string result = String.Empty; - - switch (type) - { - case MessageBoxIcon.Information: - result = "info"; - break; - case MessageBoxIcon.Warning: - result = "warning"; - break; - case MessageBoxIcon.Question: - result = "question"; - break; - case MessageBoxIcon.Error: - result = "error"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 消息框图标类型 + /// + public enum MessageBoxIcon + { + /// + /// 信息(默认值) + /// + Information, + /// + /// 警告 + /// + Warning, + /// + /// 问题 + /// + Question, + /// + /// 错误 + /// + Error + } + + /// + /// 消息框图标类型名称 + /// + internal static class MessageBoxIconHelper + { + public static string GetName(MessageBoxIcon type) + { + string result = String.Empty; + + switch (type) + { + case MessageBoxIcon.Information: + //result = "ext-mb-info"; + result = "Ext.MessageBox.INFO"; + break; + case MessageBoxIcon.Warning: + //result = "ext-mb-warning"; + result = "Ext.MessageBox.WARNING"; + break; + case MessageBoxIcon.Question: + //result = "ext-mb-question"; + result = "Ext.MessageBox.QUESTION"; + break; + case MessageBoxIcon.Error: + //result = "ext-mb-error"; + result = "Ext.MessageBox.ERROR"; + break; + } + + return result; + } + + + public static string GetShortName(MessageBoxIcon type) + { + string result = String.Empty; + + switch (type) + { + case MessageBoxIcon.Information: + result = "info"; + break; + case MessageBoxIcon.Warning: + result = "warning"; + break; + case MessageBoxIcon.Question: + result = "question"; + break; + case MessageBoxIcon.Error: + result = "error"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/MessageTarget.cs b/FineUI/Business/Enums/MessageTarget.cs index 6d3c71e..60c8218 100644 --- a/FineUI/Business/Enums/MessageTarget.cs +++ b/FineUI/Business/Enums/MessageTarget.cs @@ -1,89 +1,89 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 表单客户端验证提示消息的类型 - /// - public enum MessageTarget - { - /// - /// 浮动提示(默认值) - /// - Qtip, - /// - /// 使用HTML标签的title属性 - /// - Title, - /// - /// 在字段下面通过一个div层来显示消息 - /// - Under, - /// - /// 在字段右侧显示一个错误图标 - /// - Side, - /// - /// 不显示错误信息 - /// - None - } - - /// - /// 提示消息的类型名称 - /// - internal static class MessageTargetHelper - { - public static string GetName(MessageTarget type) - { - string result = String.Empty; - - switch (type) - { - case MessageTarget.Qtip: - result = "qtip"; - break; - case MessageTarget.Title: - result = "title"; - break; - case MessageTarget.Under: - result = "under"; - break; - case MessageTarget.Side: - result = "side"; - break; - case MessageTarget.None: - result = "none"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表单客户端验证提示消息的类型 + /// + public enum MessageTarget + { + /// + /// 浮动提示(默认值) + /// + Qtip, + /// + /// 使用HTML标签的title属性 + /// + Title, + /// + /// 在字段下面通过一个div层来显示消息 + /// + Under, + /// + /// 在字段右侧显示一个错误图标 + /// + Side, + /// + /// 不显示错误信息 + /// + None + } + + /// + /// 提示消息的类型名称 + /// + internal static class MessageTargetHelper + { + public static string GetName(MessageTarget type) + { + string result = String.Empty; + + switch (type) + { + case MessageTarget.Qtip: + result = "qtip"; + break; + case MessageTarget.Title: + result = "title"; + break; + case MessageTarget.Under: + result = "under"; + break; + case MessageTarget.Side: + result = "side"; + break; + case MessageTarget.None: + result = "none"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Operator.cs b/FineUI/Business/Enums/Operator.cs index 4a9cc5b..7156e5e 100644 --- a/FineUI/Business/Enums/Operator.cs +++ b/FineUI/Business/Enums/Operator.cs @@ -1,96 +1,96 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Operator.cs - * CreatedOn: 2008-07-08 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 操作符(用于表单控件的客户端验证) - /// - public enum Operator - { - /// - /// 等于(默认值) - /// - Equal, - /// - /// 大于 - /// - GreaterThan, - /// - /// 大于等于 - /// - GreaterThanEqual, - /// - /// 小于 - /// - LessThan, - /// - /// 小于等于 - /// - LessThanEqual, - /// - /// 不等于 - /// - NotEqual - } - - /// - /// 操作符名称 - /// - internal static class OperatorHelper - { - public static string GetName(Operator type) - { - string result = String.Empty; - - switch (type) - { - case Operator.Equal: - result = "=="; - break; - case Operator.GreaterThan: - result = ">"; - break; - case Operator.GreaterThanEqual: - result = ">="; - break; - case Operator.LessThan: - result = "<"; - break; - case Operator.LessThanEqual: - result = "<="; - break; - case Operator.NotEqual: - result = "!="; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: Operator.cs + * CreatedOn: 2008-07-08 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 操作符(用于表单控件的客户端验证) + /// + public enum Operator + { + /// + /// 等于(默认值) + /// + Equal, + /// + /// 大于 + /// + GreaterThan, + /// + /// 大于等于 + /// + GreaterThanEqual, + /// + /// 小于 + /// + LessThan, + /// + /// 小于等于 + /// + LessThanEqual, + /// + /// 不等于 + /// + NotEqual + } + + /// + /// 操作符名称 + /// + internal static class OperatorHelper + { + public static string GetName(Operator type) + { + string result = String.Empty; + + switch (type) + { + case Operator.Equal: + result = "=="; + break; + case Operator.GreaterThan: + result = ">"; + break; + case Operator.GreaterThanEqual: + result = ">="; + break; + case Operator.LessThan: + result = "<"; + break; + case Operator.LessThanEqual: + result = "<="; + break; + case Operator.NotEqual: + result = "!="; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Position.cs b/FineUI/Business/Enums/Position.cs index 09e65fa..f81eaab 100644 --- a/FineUI/Business/Enums/Position.cs +++ b/FineUI/Business/Enums/Position.cs @@ -1,90 +1,90 @@ - - -#region Comment - -/* - * Project: FineUI - * - * FileName: PositionType.cs - * CreatedOn: 2008-06-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// Region控件所在RegionPanel中的位置 - /// - public enum Position - { - /// - /// 上方 - /// - Top, - /// - /// 底部 - /// - Bottom, - /// - /// 左侧 - /// - Left, - /// - /// 右侧 - /// - Right, - /// - /// 中部(默认值) - /// - Center - } - - /// - /// 布局类型名称 - /// - internal static class PositionHelper - { - public static string GetName(Position type) - { - string result = String.Empty; - - switch (type) - { - case Position.Top: - result = "north"; - break; - case Position.Bottom: - result = "south"; - break; - case Position.Left: - result = "west"; - break; - case Position.Right: - result = "east"; - break; - case Position.Center: - result = "center"; - break; - } - - return result; - } - } + + +#region Comment + +/* + * Project: FineUI + * + * FileName: PositionType.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// Region控件所在RegionPanel中的位置 + /// + public enum Position + { + /// + /// 上方 + /// + Top, + /// + /// 底部 + /// + Bottom, + /// + /// 左侧 + /// + Left, + /// + /// 右侧 + /// + Right, + /// + /// 中部(默认值) + /// + Center + } + + /// + /// 布局类型名称 + /// + internal static class PositionHelper + { + public static string GetName(Position type) + { + string result = String.Empty; + + switch (type) + { + case Position.Top: + result = "north"; + break; + case Position.Bottom: + result = "south"; + break; + case Position.Left: + result = "west"; + break; + case Position.Right: + result = "east"; + break; + case Position.Center: + result = "center"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/RegexPattern.cs b/FineUI/Business/Enums/RegexPattern.cs index dd5be5f..0ce7b4d 100644 --- a/FineUI/Business/Enums/RegexPattern.cs +++ b/FineUI/Business/Enums/RegexPattern.cs @@ -1,160 +1,160 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RegexPattern.cs - * CreatedOn: 2008-04-24 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - - /// - /// 正则表达式常用类型(用于表单控件的客户端验证) - /// - public enum RegexPattern - { - /// - /// 无(默认值) - /// - None, - /// - /// 数字 - /// - NUMBER, - /// - /// 字母 - /// - ALPHA, - /// - /// 字母数字 - /// - ALPHA_NUMERIC, - /// - /// 字母下划线 - /// - ALPHA_UNDERLINE, - /// - /// 字母数字下划线 - /// - ALPHA_NUMERIC_UNDERLINE, - /// - /// 小写字母 - /// - ALPHA_LOWER_CASE, - /// - /// 大写字母 - /// - ALPHA_UPPER_CASE, - /// - /// 电子邮箱 - /// - EMAIL, - /// - /// 网址 - /// - URL, - /// - /// 邮政编码(中华人民共和国) - /// - POSTAL_CODE, - /// - /// IP地址 - /// - IP_ADDRESS, - /// - /// 身份证(中华人民共和国) - /// - IDENTITY_CARD - } - - /// - /// 正则表达式常用类型 内容 - /// - internal static class RegexPatternHelper - { - private const string NUMBER = "^[0-9]+$"; - private const string ALPHA = "^[a-zA-Z]+$"; - private const string ALPHA_NUMERIC = "^[a-zA-Z0-9]+$"; - private const string ALPHA_UNDERLINE = "^[a-zA-Z_]+$"; - private const string ALPHA_NUMERIC_UNDERLINE = "^[a-zA-Z0-9_]+$"; - private const string ALPHA_LOWER_CASE = @"^[a-z]+$"; - private const string ALPHA_UPPER_CASE = @"^[A-Z]+$"; - private const string EMAIL = @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"; - private const string URL = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$"; - private const string POSTAL_CODE = @"^\d{6}$"; - private const string IP_ADDRESS = @"^(\d+)\.(\d+)\.(\d+)\.(\d+)$"; - private const string IDENTITY_CARD = @"^(\d{15}|\d{17}[x0-9])$"; - - public static string GetRegexValue(RegexPattern type) - { - string result = String.Empty; - - switch (type) - { - case RegexPattern.None: - result = String.Empty; - break; - case RegexPattern.NUMBER: - result = NUMBER; - break; - case RegexPattern.ALPHA: - result = ALPHA; - break; - case RegexPattern.ALPHA_NUMERIC: - result = ALPHA_NUMERIC; - break; - case RegexPattern.ALPHA_UNDERLINE: - result = ALPHA_UNDERLINE; - break; - case RegexPattern.ALPHA_NUMERIC_UNDERLINE: - result = ALPHA_NUMERIC_UNDERLINE; - break; - case RegexPattern.ALPHA_LOWER_CASE: - result = ALPHA_LOWER_CASE; - break; - case RegexPattern.ALPHA_UPPER_CASE: - result = ALPHA_UPPER_CASE; - break; - case RegexPattern.EMAIL: - result = EMAIL; - break; - case RegexPattern.URL: - result = URL; - break; - case RegexPattern.POSTAL_CODE: - result = POSTAL_CODE; - break; - case RegexPattern.IP_ADDRESS: - result = IP_ADDRESS; - break; - case RegexPattern.IDENTITY_CARD: - result = IDENTITY_CARD; - break; - } - - return result; - } - } - -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegexPattern.cs + * CreatedOn: 2008-04-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + + /// + /// 正则表达式常用类型(用于表单控件的客户端验证) + /// + public enum RegexPattern + { + /// + /// 无(默认值) + /// + None, + /// + /// 数字 + /// + NUMBER, + /// + /// 字母 + /// + ALPHA, + /// + /// 字母数字 + /// + ALPHA_NUMERIC, + /// + /// 字母下划线 + /// + ALPHA_UNDERLINE, + /// + /// 字母数字下划线 + /// + ALPHA_NUMERIC_UNDERLINE, + /// + /// 小写字母 + /// + ALPHA_LOWER_CASE, + /// + /// 大写字母 + /// + ALPHA_UPPER_CASE, + /// + /// 电子邮箱 + /// + EMAIL, + /// + /// 网址 + /// + URL, + /// + /// 邮政编码(中华人民共和国) + /// + POSTAL_CODE, + /// + /// IP地址 + /// + IP_ADDRESS, + /// + /// 身份证(中华人民共和国) + /// + IDENTITY_CARD + } + + /// + /// 正则表达式常用类型 内容 + /// + internal static class RegexPatternHelper + { + private const string NUMBER = "^[0-9]+$"; + private const string ALPHA = "^[a-zA-Z]+$"; + private const string ALPHA_NUMERIC = "^[a-zA-Z0-9]+$"; + private const string ALPHA_UNDERLINE = "^[a-zA-Z_]+$"; + private const string ALPHA_NUMERIC_UNDERLINE = "^[a-zA-Z0-9_]+$"; + private const string ALPHA_LOWER_CASE = @"^[a-z]+$"; + private const string ALPHA_UPPER_CASE = @"^[A-Z]+$"; + private const string EMAIL = @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"; + private const string URL = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$"; + private const string POSTAL_CODE = @"^\d{6}$"; + private const string IP_ADDRESS = @"^(\d+)\.(\d+)\.(\d+)\.(\d+)$"; + private const string IDENTITY_CARD = @"^(\d{15}|\d{17}[x0-9])$"; + + public static string GetRegexValue(RegexPattern type) + { + string result = String.Empty; + + switch (type) + { + case RegexPattern.None: + result = String.Empty; + break; + case RegexPattern.NUMBER: + result = NUMBER; + break; + case RegexPattern.ALPHA: + result = ALPHA; + break; + case RegexPattern.ALPHA_NUMERIC: + result = ALPHA_NUMERIC; + break; + case RegexPattern.ALPHA_UNDERLINE: + result = ALPHA_UNDERLINE; + break; + case RegexPattern.ALPHA_NUMERIC_UNDERLINE: + result = ALPHA_NUMERIC_UNDERLINE; + break; + case RegexPattern.ALPHA_LOWER_CASE: + result = ALPHA_LOWER_CASE; + break; + case RegexPattern.ALPHA_UPPER_CASE: + result = ALPHA_UPPER_CASE; + break; + case RegexPattern.EMAIL: + result = EMAIL; + break; + case RegexPattern.URL: + result = URL; + break; + case RegexPattern.POSTAL_CODE: + result = POSTAL_CODE; + break; + case RegexPattern.IP_ADDRESS: + result = IP_ADDRESS; + break; + case RegexPattern.IDENTITY_CARD: + result = IDENTITY_CARD; + break; + } + + return result; + } + } + +} diff --git a/FineUI/Business/Enums/SummaryPosition.cs b/FineUI/Business/Enums/SummaryPosition.cs new file mode 100644 index 0000000..908bcfe --- /dev/null +++ b/FineUI/Business/Enums/SummaryPosition.cs @@ -0,0 +1,76 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: SummaryPosition.cs + * CreatedOn: 2013-10-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表格合计行的位置 + /// + public enum SummaryPosition + { + /// + /// 紧跟数据行(默认值) + /// + Flow, + /// + /// 表格顶部 + /// + Top, + /// + /// 表格底部 + /// + Bottom + } + + /// + /// 表格合计行的位置名称 + /// + internal static class SummaryPositionHelper + { + public static string GetName(SummaryPosition type) + { + string result = String.Empty; + + switch (type) + { + case SummaryPosition.Flow: + result = ""; + break; + case SummaryPosition.Top: + result = "top"; + break; + case SummaryPosition.Bottom: + result = "bottom"; + break; + } + + return result; + } + } + +} \ No newline at end of file diff --git a/FineUI/Business/Enums/TabPosition.cs b/FineUI/Business/Enums/TabPosition.cs index 0bc9fef..4e39209 100644 --- a/FineUI/Business/Enums/TabPosition.cs +++ b/FineUI/Business/Enums/TabPosition.cs @@ -1,59 +1,59 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// Tab标签的显示位置 - /// - public enum TabPosition - { - /// - /// 顶部(默认值) - /// - Top, - /// - /// 底部 - /// - Bottom, - /// - /// 左侧 - /// - Left, - /// - /// 右侧 - /// - Right - - } - - /// - /// Tab显示的位置名称 - /// - internal static class TabPositionHelper - { - public static string GetName(TabPosition type) - { - string result = String.Empty; - - switch (type) - { - case TabPosition.Top: - result = "top"; - break; - case TabPosition.Bottom: - result = "bottom"; - break; - case TabPosition.Left: - result = "left"; - break; - case TabPosition.Right: - result = "right"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// Tab标签的显示位置 + /// + public enum TabPosition + { + /// + /// 顶部(默认值) + /// + Top, + /// + /// 底部 + /// + Bottom, + /// + /// 左侧 + /// + Left, + /// + /// 右侧 + /// + Right + + } + + /// + /// Tab显示的位置名称 + /// + internal static class TabPositionHelper + { + public static string GetName(TabPosition type) + { + string result = String.Empty; + + switch (type) + { + case TabPosition.Top: + result = "top"; + break; + case TabPosition.Bottom: + result = "bottom"; + break; + case TabPosition.Left: + result = "left"; + break; + case TabPosition.Right: + result = "right"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Target.cs b/FineUI/Business/Enums/Target.cs index 4133ca6..453ae16 100644 --- a/FineUI/Business/Enums/Target.cs +++ b/FineUI/Business/Enums/Target.cs @@ -1,100 +1,100 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Target.cs - * CreatedOn: 2010-01-30 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 窗体以及对话框的显示位置 - /// - public enum Target - { - /// - /// 当前页面(默认值) - /// - Self, - /// - /// 父页面 - /// - Parent, - /// - /// 最外层页面 - /// - Top - } - - /// - /// Alert,Confirm,Window显示的位置 - /// - internal static class TargetHelper - { - public static string GetName(Target type) - { - string result = String.Empty; - - switch (type) - { - case Target.Self: - result = "_self"; - break; - case Target.Parent: - result = "_parent"; - break; - case Target.Top: - result = "_top"; - break; - } - - return result; - } - - /// - /// Get target name used inside JavaScript code. - /// - /// - /// - public static string GetScriptName(Target type) - { - string result = String.Empty; - - switch (type) - { - case Target.Self: - result = "window"; - break; - case Target.Parent: - result = "parent"; - break; - case Target.Top: - result = "top"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: Target.cs + * CreatedOn: 2010-01-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 窗体以及对话框的显示位置 + /// + public enum Target + { + /// + /// 当前页面(默认值) + /// + Self, + /// + /// 父页面 + /// + Parent, + /// + /// 最外层页面 + /// + Top + } + + /// + /// Alert,Confirm,Window显示的位置 + /// + internal static class TargetHelper + { + public static string GetName(Target type) + { + string result = String.Empty; + + switch (type) + { + case Target.Self: + result = "_self"; + break; + case Target.Parent: + result = "_parent"; + break; + case Target.Top: + result = "_top"; + break; + } + + return result; + } + + /// + /// Get target name used inside JavaScript code. + /// + /// + /// + public static string GetScriptName(Target type) + { + string result = String.Empty; + + switch (type) + { + case Target.Self: + result = "window"; + break; + case Target.Parent: + result = "parent"; + break; + case Target.Top: + result = "top"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/TextAlign.cs b/FineUI/Business/Enums/TextAlign.cs index 99909d0..5e3f8cd 100644 --- a/FineUI/Business/Enums/TextAlign.cs +++ b/FineUI/Business/Enums/TextAlign.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 文本排列位置 - /// - public enum TextAlign - { - /// - /// 靠左排列(默认值) - /// - Left, - /// - /// 居中排列 - /// - Center, - /// - /// 靠右排列 - /// - Right - } - - /// - /// 文本排列位置名称 - /// - internal static class TextAlignName - { - public static string GetName(TextAlign type) - { - string result = String.Empty; - - switch (type) - { - case TextAlign.Left: - result = "left"; - break; - case TextAlign.Center: - result = "center"; - break; - case TextAlign.Right: - result = "right"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 文本排列位置 + /// + public enum TextAlign + { + /// + /// 靠左排列(默认值) + /// + Left, + /// + /// 居中排列 + /// + Center, + /// + /// 靠右排列 + /// + Right + } + + /// + /// 文本排列位置名称 + /// + internal static class TextAlignName + { + public static string GetName(TextAlign type) + { + string result = String.Empty; + + switch (type) + { + case TextAlign.Left: + result = "left"; + break; + case TextAlign.Center: + result = "center"; + break; + case TextAlign.Right: + result = "right"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/TextMode.cs b/FineUI/Business/Enums/TextMode.cs index 49810a2..8ef06ee 100644 --- a/FineUI/Business/Enums/TextMode.cs +++ b/FineUI/Business/Enums/TextMode.cs @@ -1,68 +1,68 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 文本框类型 - /// - public enum TextMode - { - /// - /// 普通文本框(默认值) - /// - Text, - /// - /// 密码输入框 - /// - Password - } - - /// - /// 文本框类型名称 - /// - internal static class TextModeHelper - { - public static string GetName(TextMode type) - { - string result = String.Empty; - - switch (type) - { - case TextMode.Text: - result = "text"; - break; - case TextMode.Password: - result = "password"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 文本框类型 + /// + public enum TextMode + { + /// + /// 普通文本框(默认值) + /// + Text, + /// + /// 密码输入框 + /// + Password + } + + /// + /// 文本框类型名称 + /// + internal static class TextModeHelper + { + public static string GetName(TextMode type) + { + string result = String.Empty; + + switch (type) + { + case TextMode.Text: + result = "text"; + break; + case TextMode.Password: + result = "password"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/Theme.cs b/FineUI/Business/Enums/Theme.cs index 8265a91..6bcf96b 100644 --- a/FineUI/Business/Enums/Theme.cs +++ b/FineUI/Business/Enums/Theme.cs @@ -1,82 +1,82 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ThemeType.cs - * CreatedOn: 2008-08-20 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 样式 - /// - public enum Theme - { - /// - /// 蓝色 - /// - Blue, - /// - /// 银灰色 - /// - Gray, - /// - /// 高对比度 - /// - Access, - /// - /// 海王星(默认值) - /// - Neptune - } - - /// - /// 样式的类型名称 - /// - internal static class ThemeHelper - { - public static string GetName(Theme type) - { - string result = String.Empty; - - switch (type) - { - case Theme.Blue: - result = "blue"; - break; - case Theme.Gray: - result = "gray"; - break; - case Theme.Access: - result = "access"; - break; - case Theme.Neptune: - result = "neptune"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: ThemeType.cs + * CreatedOn: 2008-08-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 样式 + /// + public enum Theme + { + /// + /// 蓝色 + /// + Blue, + /// + /// 银灰色 + /// + Gray, + /// + /// 高对比度 + /// + Access, + /// + /// 海王星(默认值) + /// + Neptune + } + + /// + /// 样式的类型名称 + /// + internal static class ThemeHelper + { + public static string GetName(Theme type) + { + string result = String.Empty; + + switch (type) + { + case Theme.Blue: + result = "blue"; + break; + case Theme.Gray: + result = "gray"; + break; + case Theme.Access: + result = "access"; + break; + case Theme.Neptune: + result = "neptune"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/ToolTipType.cs b/FineUI/Business/Enums/ToolTipType.cs index 5ba9c35..68bcaaf 100644 --- a/FineUI/Business/Enums/ToolTipType.cs +++ b/FineUI/Business/Enums/ToolTipType.cs @@ -1,68 +1,68 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 提示框的类型 - /// - public enum ToolTipType - { - /// - /// Extjs的浮动提示框(默认值) - /// - Qtip, - /// - /// HTML标签的title属性 - /// - Title - } - - /// - /// 提示框的类型名称 - /// - internal static class ToolTipTypeName - { - public static string GetName(ToolTipType type) - { - string result = String.Empty; - - switch (type) - { - case ToolTipType.Qtip: - result = "qtip"; - break; - case ToolTipType.Title: - result = "title"; - break; - } - - return result; - } - } + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 提示框的类型 + /// + public enum ToolTipType + { + /// + /// Extjs的浮动提示框(默认值) + /// + Qtip, + /// + /// HTML标签的title属性 + /// + Title + } + + /// + /// 提示框的类型名称 + /// + internal static class ToolTipTypeName + { + public static string GetName(ToolTipType type) + { + string result = String.Empty; + + switch (type) + { + case ToolTipType.Qtip: + result = "qtip"; + break; + case ToolTipType.Title: + result = "title"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/ToolbarAlign.cs b/FineUI/Business/Enums/ToolbarAlign.cs new file mode 100644 index 0000000..f053af3 --- /dev/null +++ b/FineUI/Business/Enums/ToolbarAlign.cs @@ -0,0 +1,74 @@ +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarAlign.cs + * CreatedOn: 2013-12-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 工具栏的排列位置 + /// + public enum ToolbarAlign + { + /// + /// 靠右 + /// + Right, + /// + /// 靠左(默认值) + /// + Left, + /// + /// 居中 + /// + Center + } + + /// + /// 工具栏的排列位置名称 + /// + internal static class ToolbarAlignHelper + { + public static string GetName(ToolbarAlign type) + { + string result = String.Empty; + + switch (type) + { + case ToolbarAlign.Left: + result = "start"; + break; + case ToolbarAlign.Right: + result = "end"; + break; + case ToolbarAlign.Center: + result = "center"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI/Business/Enums/ToolbarPosition.cs b/FineUI/Business/Enums/ToolbarPosition.cs index fdaef44..d607091 100644 --- a/FineUI/Business/Enums/ToolbarPosition.cs +++ b/FineUI/Business/Enums/ToolbarPosition.cs @@ -1,98 +1,122 @@ - - -#region Comment - -/* - * Project: FineUI - * - * FileName: ToolbarPosition.cs - * CreatedOn: 2008-05-30 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 工具条的位置 - /// - public enum ToolbarPosition - { - /// - /// 顶部(默认值) - /// - Top, - /// - /// 底部 - /// - Bottom, - /// - /// 页脚 - /// - Footer, - /// - /// 左侧 - /// - Left, - /// - /// 右侧 - /// - Right, - /// - /// 底部按钮 - /// - Buttons - } - - /// - /// 工具条的位置名称 - /// - internal static class ToolbarPositionHelper - { - public static string GetName(ToolbarPosition type) - { - string result = String.Empty; - - switch (type) - { - case ToolbarPosition.Top: - result = "tbar"; - break; - case ToolbarPosition.Bottom: - result = "bbar"; - break; - case ToolbarPosition.Footer: - result = "fbar"; - break; - case ToolbarPosition.Left: - result = "lbar"; - break; - case ToolbarPosition.Right: - result = "rbar"; - break; - case ToolbarPosition.Buttons: - result = "buttons"; - break; - } - - return result; - } - } - + + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarPosition.cs + * CreatedOn: 2008-05-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 工具条的位置 + /// + public enum ToolbarPosition + { + /// + /// 顶部(默认值) + /// + Top, + /// + /// 底部 + /// + Bottom, + ///// + ///// 页脚 + ///// + //Footer, + /// + /// 左侧 + /// + Left, + /// + /// 右侧 + /// + Right + ///// + ///// 底部按钮 + ///// + //Buttons + } + + /// + /// 工具条的位置名称 + /// + internal static class ToolbarPositionHelper + { + public static string GetName(ToolbarPosition type) + { + string result = String.Empty; + + switch (type) + { + case ToolbarPosition.Top: + result = "tbar"; + break; + case ToolbarPosition.Bottom: + result = "bbar"; + break; + //case ToolbarPosition.Footer: + // result = "fbar"; + // break; + case ToolbarPosition.Left: + result = "lbar"; + break; + case ToolbarPosition.Right: + result = "rbar"; + break; + //case ToolbarPosition.Buttons: + // result = "buttons"; + // break; + } + + return result; + } + + + public static string GetExtName(ToolbarPosition type) + { + string result = String.Empty; + + switch (type) + { + case ToolbarPosition.Top: + result = "top"; + break; + case ToolbarPosition.Bottom: + result = "bottom"; + break; + case ToolbarPosition.Left: + result = "left"; + break; + case ToolbarPosition.Right: + result = "right"; + break; + } + + return result; + } + } + } \ No newline at end of file diff --git a/FineUI/Business/Enums/TriggerIcon.cs b/FineUI/Business/Enums/TriggerIcon.cs index 30d538b..112e82e 100644 --- a/FineUI/Business/Enums/TriggerIcon.cs +++ b/FineUI/Business/Enums/TriggerIcon.cs @@ -1,81 +1,81 @@ - - -#region Comment - -/* - * Project: FineUI - * - * FileName: TriggerIconType.cs - * CreatedOn: 2008-06-18 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 触发器输入框右侧图标的类型 - /// - public enum TriggerIcon - { - /// - /// 无(默认值) - /// - None, - /// - /// 搜索图标 - /// - Search, - /// - /// 清空图标 - /// - Clear, - /// - /// 日期图标 - /// - Date - } - - /// - /// 系统图标名称 - /// - internal static class TriggerIconHelper - { - public static string GetName(TriggerIcon type) - { - string result = String.Empty; - - switch (type) - { - case TriggerIcon.Search: - result = "x-form-search-trigger"; - break; - case TriggerIcon.Clear: - result = "x-form-clear-trigger"; - break; - case TriggerIcon.Date: - result = "x-form-date-trigger"; - break; - } - - return result; - } - } + + +#region Comment + +/* + * Project: FineUI + * + * FileName: TriggerIconType.cs + * CreatedOn: 2008-06-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 触发器输入框右侧图标的类型 + /// + public enum TriggerIcon + { + /// + /// 无(默认值) + /// + None, + /// + /// 搜索图标 + /// + Search, + /// + /// 清空图标 + /// + Clear, + /// + /// 日期图标 + /// + Date + } + + /// + /// 系统图标名称 + /// + internal static class TriggerIconHelper + { + public static string GetName(TriggerIcon type) + { + string result = String.Empty; + + switch (type) + { + case TriggerIcon.Search: + result = "x-form-search-trigger"; + break; + case TriggerIcon.Clear: + result = "x-form-clear-trigger"; + break; + case TriggerIcon.Date: + result = "x-form-date-trigger"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/VerticalAlign.cs b/FineUI/Business/Enums/VerticalAlign.cs index 5bbf7cb..da90317 100644 --- a/FineUI/Business/Enums/VerticalAlign.cs +++ b/FineUI/Business/Enums/VerticalAlign.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 垂直排列位置 - /// - public enum VerticalAlign - { - /// - /// 居中排列(默认值) - /// - Middle, - /// - /// 靠上排列 - /// - Top, - /// - /// 靠下排列 - /// - Bottom - } - - /// - /// 垂直排列位置名称 - /// - internal static class VerticalAlignName - { - public static string GetName(VerticalAlign type) - { - string result = String.Empty; - - switch (type) - { - case VerticalAlign.Middle: - result = "middle"; - break; - case VerticalAlign.Top: - result = "top"; - break; - case VerticalAlign.Bottom: - result = "bottom"; - break; - } - - return result; - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 垂直排列位置 + /// + public enum VerticalAlign + { + /// + /// 居中排列(默认值) + /// + Middle, + /// + /// 靠上排列 + /// + Top, + /// + /// 靠下排列 + /// + Bottom + } + + /// + /// 垂直排列位置名称 + /// + internal static class VerticalAlignName + { + public static string GetName(VerticalAlign type) + { + string result = String.Empty; + + switch (type) + { + case VerticalAlign.Middle: + result = "middle"; + break; + case VerticalAlign.Top: + result = "top"; + break; + case VerticalAlign.Bottom: + result = "bottom"; + break; + } + + return result; + } + } } \ No newline at end of file diff --git a/FineUI/Business/Enums/WindowPosition.cs b/FineUI/Business/Enums/WindowPosition.cs index 0965e59..49b910e 100644 --- a/FineUI/Business/Enums/WindowPosition.cs +++ b/FineUI/Business/Enums/WindowPosition.cs @@ -1,46 +1,46 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: WindowPositionType.cs - * CreatedOn: 2008-06-17 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// - /// 窗体的初始显示位置 - /// - public enum WindowPosition - { - /// - /// 页面的中部 - /// - Center, - /// - /// 页面的黄金分割点处(默认值) - /// - GoldenSection - } - + +#region Comment + +/* + * Project: FineUI + * + * FileName: WindowPosition.cs + * CreatedOn: 2008-06-17 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 窗体的初始显示位置 + /// + public enum WindowPosition + { + /// + /// 页面的中部 + /// + Center, + /// + /// 页面的黄金分割点处(默认值) + /// + GoldenSection + } + } \ No newline at end of file diff --git a/FineUI/Business/JsHelper/JsArrayBuilder.cs b/FineUI/Business/JsHelper/JsArrayBuilder.cs index 411e761..af33496 100644 --- a/FineUI/Business/JsHelper/JsArrayBuilder.cs +++ b/FineUI/Business/JsHelper/JsArrayBuilder.cs @@ -1,175 +1,190 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: JsArrayBuilder.cs - * CreatedOn: 2008-04-21 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.Specialized; - -namespace FineUI -{ - /// - /// 创建Javascript数组参数的帮助类 - /// - public class JsArrayBuilder - { - #region fields - - private List _properties = new List(); - - //public List Properties - //{ - // get { return _properties; } - // set { _properties = value; } - //} - - #endregion - - #region Constructor - - /// - /// 构造函数 - /// - public JsArrayBuilder() - { - } - - /// - /// 构造函数 - /// - /// 初始属性值 - public JsArrayBuilder(object propertyValue) - { - AddProperty(propertyValue, false); - } - - /// - /// 构造函数 - /// - /// 初始属性值 - /// 是否保持原样 - public JsArrayBuilder(object propertyValue, bool persistOriginal) - { - AddProperty(propertyValue, persistOriginal); - } - - #endregion - - #region RemoveProperty - - /// - /// 删除属性 - /// - /// 属性值 - public void RemoveProperty(string propertyValue) - { - if (_properties.Contains(propertyValue)) - { - _properties.Remove(propertyValue); - } - } - - #endregion - - #region AddProperty - - /// - /// 添加属性 - /// - /// 属性值 - public void AddProperty(object propertyValue) - { - AddProperty(propertyValue, false); - } - - /// - /// 添加属性 - /// - /// 属性值 - /// 是否保持原样 - public void AddProperty(object propertyValue, bool persistOriginal) - { - if (persistOriginal) - { - _properties.Add(propertyValue.ToString()); - } - else - { - if (propertyValue is string) - { - _properties.Add(JsHelper.Enquote(propertyValue.ToString())); - } - else if (propertyValue is bool) - { - _properties.Add(propertyValue.ToString().ToLower()); - } - else if (propertyValue is float || propertyValue is double) - { - _properties.Add(JsHelper.NumberToString(propertyValue)); - } - else - { - _properties.Add(propertyValue.ToString()); - } - } - } - - #endregion - - #region Count - - /// - /// 已经添加属性的个数 - /// - public int Count - { - get - { - return _properties.Count; - } - } - - #endregion - - #region override ToString - - /// - /// 返回对象的JSON字符串形式 - /// - /// 对象的JSON形式 - public override string ToString() - { - StringBuilder sb = new StringBuilder(); - - foreach (string item in _properties) - { - sb.AppendFormat("{0},", item); - } - - return "[" + sb.ToString().TrimEnd(',') + "]"; - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: JsArrayBuilder.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.Specialized; + +namespace FineUI +{ + /// + /// 创建Javascript数组参数的帮助类 + /// + public class JsArrayBuilder + { + #region fields + + private List _properties = new List(); + + /// + /// 内部保存的数据 + /// + public List Properties + { + get { return _properties; } + set { _properties = value; } + } + + #endregion + + #region Constructor + + /// + /// 构造函数 + /// + public JsArrayBuilder() + { + } + + /// + /// 构造函数 + /// + /// 初始属性值 + public JsArrayBuilder(object propertyValue) + { + AddProperty(propertyValue, false); + } + + /// + /// 构造函数 + /// + /// 初始属性值 + /// 是否保持原样 + public JsArrayBuilder(object propertyValue, bool persistOriginal) + { + AddProperty(propertyValue, persistOriginal); + } + + #endregion + + #region RemoveProperty + + /// + /// 删除属性 + /// + /// 属性值 + public void RemoveProperty(string propertyValue) + { + if (_properties.Contains(propertyValue)) + { + _properties.Remove(propertyValue); + } + } + + #endregion + + #region AddProperty + + /// + /// 添加属性 + /// + /// 属性值 + public void AddProperty(object propertyValue) + { + AddProperty(propertyValue, false); + } + + /// + /// 添加属性 + /// + /// 属性值 + /// 是否保持原样 + public void AddProperty(object propertyValue, bool persistOriginal) + { + if (persistOriginal) + { + _properties.Add(propertyValue.ToString()); + } + else + { + if (propertyValue is string) + { + _properties.Add(JsHelper.Enquote(propertyValue.ToString())); + } + else if (propertyValue is bool) + { + _properties.Add(propertyValue.ToString().ToLower()); + } + else if (propertyValue is float || propertyValue is double) + { + _properties.Add(JsHelper.NumberToString(propertyValue)); + } + else + { + _properties.Add(propertyValue.ToString()); + } + } + } + + #endregion + + #region bars["bottom"] + + /// + /// 将整个数组中元素顺序反转 + /// + public void Reverse() + { + _properties.Reverse(); + } + + #endregion + + #region Count + + /// + /// 已经添加属性的个数 + /// + public int Count + { + get + { + return _properties.Count; + } + } + + #endregion + + #region override ToString + + /// + /// 返回对象的JSON字符串形式 + /// + /// 对象的JSON形式 + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + + foreach (string item in _properties) + { + sb.AppendFormat("{0},", item); + } + + return "[" + sb.ToString().TrimEnd(',') + "]"; + } + + #endregion + } +} diff --git a/FineUI/Business/JsHelper/JsHelper.cs b/FineUI/Business/JsHelper/JsHelper.cs index a5bd7c3..7ae62d5 100644 --- a/FineUI/Business/JsHelper/JsHelper.cs +++ b/FineUI/Business/JsHelper/JsHelper.cs @@ -1,316 +1,297 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Globalization; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - - -namespace FineUI -{ - /// - /// JavaScript帮助类 - /// - public class JsHelper - { - //// Self-execute function template in JavaScript. - //public static string T_SELF_EXECUTE_FUNCTION = "(function(){{{0}}})();"; - - #region GetStringWithJsBlock GetJsStringArray - - /// - /// 将包含JavaScript代码块的字符串转换为可以使用的客户端脚本 - /// - /// 包含JavaScript代码块的字符串 - /// 转换后的客户端脚本 - public static string GetJsStringWithScriptTag(string text) - { - //string result = text.Replace("\\", "\\\\").Replace("'", "\\'"); - //if (result.Contains("<script>")) - //{ - // result = result.Replace("<script>", "'+"); - // result = result.Replace("</script>", "+'"); - //} - //if (result.Contains("", "+'"); - //} - - //return String.Format("'{0}'", result); - - if (text.Contains("<script>")) - { - text = text.Replace("<script>", ""); - } - - string[] splits = text.Split(new string[] { "" }, StringSplitOptions.None); - if (subSplits.Length == 2) - { - sb.AppendFormat("+{0}+", subSplits[0]); - sb.Append(GetJsString(subSplits[1])); - } - else - { - sb.Append(GetJsString(subSplits[0])); - } - } - - return sb.ToString(); - } - - /// - /// 获取单引号括起来的JavaScript字符串,一般用在GetReference函数中 - /// 你好 -> '你好' - /// 你'好 -> '你\'好' - /// 你\好 -> '你\\好' - /// - /// 源字符串 - /// 单引号括起来的字符串 - public static string GetJsString(string text) - { - string result = text.Replace("\\", "\\\\").Replace("'", "\\'"); - - return String.Format("'{0}'", result); - } - - /// - /// 获取字符串数组的脚本字符串形式 - /// - /// 字符串数组 - /// 字符串数组的脚本字符串 - public static string GetJsStringArray(string[] values) - { - StringBuilder sb = new StringBuilder(); - foreach (string value in values) - { - sb.AppendFormat("{0},", JsHelper.GetJsString(value)); - } - return String.Format("[{0}]", sb.ToString().TrimEnd(',')); - } - - - /// - /// 获取整形数组的脚本字符串形式 - /// - /// 整数数组 - /// 整形数组的脚本字符串 - public static string GetJsIntArray(int[] values) - { - StringBuilder sb = new StringBuilder(); - foreach (int value in values) - { - sb.AppendFormat("{0},", value); - } - return String.Format("[{0}]", sb.ToString().TrimEnd(',')); - } - - #endregion - - #region GetFunction GetDeferScript - - /// - /// 获取一段完成的JavaScript函数 - /// - /// 函数主体 - /// 函数参数 - /// 字符串表示的JavaScript函数 - public static string GetFunction(string jsContent, params string[] funParameters) - { - StringBuilder sb = new StringBuilder(); - sb.Append("function("); - if (funParameters.Length > 0) - { - for (int i = 0, count = funParameters.Length; i < count; i++) - { - sb.Append(funParameters[i]); - if (i != count - 1) - { - sb.Append(","); - } - } - } - sb.Append("){"); - sb.Append(jsContent); - sb.Append("}"); - return sb.ToString(); - } - - /// - /// 获取延迟执行JavaScript脚本的字符串 - /// - /// 需要执行的脚本内容 - /// 延迟毫秒数 - /// 延迟执行的客户端脚本 - public static string GetDeferScript(string jsContent, int milliseconds) - { - return String.Format("Ext.defer({0},{1});", GetFunction(jsContent), milliseconds); - } - - /// - /// 获取延迟执行JavaScript脚本的字符串 - /// - /// 需要执行的脚本内容 - /// 延迟毫秒数 - /// 执行脚本时的函数上下文 - /// 延迟执行的客户端脚本 - public static string GetDeferScript(string jsContent, int milliseconds, string scope) - { - return String.Format("Ext.defer({0},{1},{2});", GetFunction(jsContent), milliseconds, scope); - } - #endregion - - #region Enquote - - ///// - ///// Produce a string in double quotes with backslash sequences in all the right places. - ///// - ///// 常用的用法:String.Format("{0}.setValue({1});", ClientJavascriptID, JsHelper.Enquote(Text)) - ///// 大部分情况下,可以使用 GetJsString 函数代替此函数 - ///// 此函数返回的是双引号括起来的字符串,用来作为JSON属性比较合适,一般用在OnAjaxPreRender - ///// 但是作为HTML属性时,由于HTML属性本身就是双引号括起来的,就容易引起冲突 - ///// - ///// - ///// A String - ///// A String correctly formatted for insertion in a JSON message. - - /// - /// 返回的是双引号括起来的字符串,用来作为JSON属性比较合适 - /// - /// 源字符串 - /// 双引号括起来的字符串 - public static string Enquote(string s) - { - string jsonString = new JValue(s).ToString(Formatting.None); - - // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. - // http://www.xiaoxiaozi.com/2010/02/24/1708/ - // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string - jsonString = jsonString.Replace("", @"<\/script>"); - - return jsonString; - /* - if (s == null || s.Length == 0) - { - return "\"\""; - } - char c; - int i; - int len = s.Length; - StringBuilder sb = new StringBuilder(len + 4); - string t; - - sb.Append('"'); - for (i = 0; i < len; i += 1) - { - c = s[i]; - if ((c == '\\') || (c == '"') || (c == '>')) - { - sb.Append('\\'); - sb.Append(c); - } - else if (c == '\b') - sb.Append("\\b"); - else if (c == '\t') - sb.Append("\\t"); - else if (c == '\n') - sb.Append("\\n"); - else if (c == '\f') - sb.Append("\\f"); - else if (c == '\r') - sb.Append("\\r"); - else - { - if (c < ' ') - { - //t = "000" + Integer.toHexString(c); - string tmp = new string(c, 1); - t = "000" + int.Parse(tmp, System.Globalization.NumberStyles.HexNumber); - sb.Append("\\u" + t.Substring(t.Length - 4)); - } - else - { - sb.Append(c); - } - } - } - sb.Append('"'); - return sb.ToString(); - * */ - } - - - #endregion - - #region NumberToString - - /// - /// 将数字对象转化为字符串 - /// - /// 数字对象 - /// 字符串 - public static string NumberToString(object number) - { - if (number is float && ((float)number) == float.NaN) - { - string msg = string.Format(""); - throw new ArgumentException("object must be a valid number", "number"); - } - if (number is double && ((double)number) == double.NaN) - { - string msg = string.Format(""); - throw new ArgumentException("object must be a valid number", "number"); - } - - // Shave off trailing zeros and decimal point, if possible - - string s = ((double)number).ToString(NumberFormatInfo.InvariantInfo).ToLower(); - - if (s.IndexOf('e') < 0 && s.IndexOf('.') > 0) - { - while (s.EndsWith("0")) - { - s.Substring(0, s.Length - 1); - } - if (s.EndsWith(".")) - { - s.Substring(0, s.Length - 1); - } - } - return s; - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Globalization; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI +{ + /// + /// JavaScript帮助类 + /// + public class JsHelper + { + + #region GetFunction GetDeferScript + + /// + /// 获取一段完成的JavaScript函数 + /// + /// 函数主体 + /// 函数参数 + /// 字符串表示的JavaScript函数 + public static string GetFunction(string jsContent, params string[] funParameters) + { + StringBuilder sb = new StringBuilder(); + sb.Append("function("); + if (funParameters.Length > 0) + { + for (int i = 0, count = funParameters.Length; i < count; i++) + { + sb.Append(funParameters[i]); + if (i != count - 1) + { + sb.Append(","); + } + } + } + sb.Append("){"); + sb.Append(jsContent); + sb.Append("}"); + return sb.ToString(); + } + + /// + /// 获取延迟执行JavaScript脚本的字符串 + /// + /// 需要执行的脚本内容 + /// 延迟毫秒数 + /// 延迟执行的客户端脚本 + public static string GetDeferScript(string jsContent, int milliseconds) + { + return String.Format("Ext.defer({0},{1});", GetFunction(jsContent), milliseconds); + } + + /// + /// 获取延迟执行JavaScript脚本的字符串 + /// + /// 需要执行的脚本内容 + /// 延迟毫秒数 + /// 执行脚本时的函数上下文 + /// 延迟执行的客户端脚本 + public static string GetDeferScript(string jsContent, int milliseconds, string scope) + { + return String.Format("Ext.defer({0},{1},{2});", GetFunction(jsContent), milliseconds, scope); + } + #endregion + + #region Enquote + + ///// + ///// Produce a string in double quotes with backslash sequences in all the right places. + ///// + ///// 常用的用法:String.Format("{0}.setValue({1});", ClientJavascriptID, JsHelper.Enquote(Text)) + ///// 大部分情况下,可以使用 GetJsString 函数代替此函数 + ///// 此函数返回的是双引号括起来的字符串,用来作为JSON属性比较合适,一般用在OnAjaxPreRender + ///// 但是作为HTML属性时,由于HTML属性本身就是双引号括起来的,就容易引起冲突 + ///// + ///// + ///// A String + ///// A String correctly formatted for insertion in a JSON message. + + /// + /// 返回的是单引号括起来的字符串,用来作为JSON属性比较合适 + /// + /// 源字符串 + /// 单引号括起来的字符串 + public static string Enquote(string s) + { + /* + string jsonString = new JValue(s).ToString(Formatting.None); + + // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. + // http://www.xiaoxiaozi.com/2010/02/24/1708/ + // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string + jsonString = jsonString.Replace("", @"<\/script>"); + + return jsonString; + */ + + if (s == null || s.Length == 0) + { + return "''"; + } + + char c; + StringBuilder sb = new StringBuilder(); + + sb.Append('\''); + for (int i = 0, len = s.Length; i < len; i++) + { + c = s[i]; + if ((c == '\\') || (c == '\'') || (c == '>')) + { + sb.Append('\\'); + sb.Append(c); + } + else if (c == '\b') + { + sb.Append("\\b"); + } + else if (c == '\t') + { + sb.Append("\\t"); + } + else if (c == '\n') + { + sb.Append("\\n"); + } + else if (c == '\f') + { + sb.Append("\\f"); + } + else if (c == '\r') + { + sb.Append("\\r"); + } + else + { + sb.Append(c); + /* + if (c < ' ') + { + //t = "000" + Integer.toHexString(c); + string tmp = new string(c, 1); + string t = "000" + int.Parse(tmp, System.Globalization.NumberStyles.HexNumber); + sb.Append("\\u" + t.Substring(t.Length - 4)); + } + else + { + sb.Append(c); + } + */ + } + } + sb.Append('\''); + + // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. + // http://www.xiaoxiaozi.com/2010/02/24/1708/ + // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string + + return sb.ToString().Replace("", @"<\/script>"); + } + + /// + /// 将包含JavaScript代码块的字符串转换为可以使用的客户端脚本 + /// + /// 包含JavaScript代码块的字符串 + /// 转换后的客户端脚本 + public static string EnquoteWithScriptTag(string text) + { + if (text.Contains("<script>")) + { + text = text.Replace("<script>", ""); + } + + string[] splits = text.Split(new string[] { "" }, StringSplitOptions.None); + if (subSplits.Length == 2) + { + sb.AppendFormat("+{0}+", subSplits[0]); + sb.Append(Enquote(subSplits[1])); + } + else + { + sb.Append(Enquote(subSplits[0])); + } + } + + return sb.ToString(); + } + + /// + /// 获取字符串数组的脚本字符串形式 + /// + /// 字符串数组 + /// 字符串数组的脚本字符串 + public static string EnquoteStringArray(string[] values) + { + StringBuilder sb = new StringBuilder(); + foreach (string value in values) + { + sb.AppendFormat("{0},", JsHelper.Enquote(value)); + } + return String.Format("[{0}]", sb.ToString().TrimEnd(',')); + } + + + /// + /// 获取整形数组的脚本字符串形式 + /// + /// 整数数组 + /// 整形数组的脚本字符串 + public static string EnquoteIntArray(int[] values) + { + StringBuilder sb = new StringBuilder(); + foreach (int value in values) + { + sb.AppendFormat("{0},", value); + } + return String.Format("[{0}]", sb.ToString().TrimEnd(',')); + } + + #endregion + + #region NumberToString + + /// + /// 将数字对象转化为字符串 + /// + /// 数字对象 + /// 字符串 + public static string NumberToString(object number) + { + if (number is float && ((float)number) == float.NaN) + { + string msg = string.Format(""); + throw new ArgumentException("object must be a valid number", "number"); + } + if (number is double && ((double)number) == double.NaN) + { + string msg = string.Format(""); + throw new ArgumentException("object must be a valid number", "number"); + } + + // Shave off trailing zeros and decimal point, if possible + + string s = ((double)number).ToString(NumberFormatInfo.InvariantInfo).ToLower(); + + if (s.IndexOf('e') < 0 && s.IndexOf('.') > 0) + { + while (s.EndsWith("0")) + { + s.Substring(0, s.Length - 1); + } + if (s.EndsWith(".")) + { + s.Substring(0, s.Length - 1); + } + } + return s; + } + + #endregion + } +} diff --git a/FineUI/Business/JsHelper/JsObjectBuilder.cs b/FineUI/Business/JsHelper/JsObjectBuilder.cs index 85a6bdb..297702d 100644 --- a/FineUI/Business/JsHelper/JsObjectBuilder.cs +++ b/FineUI/Business/JsHelper/JsObjectBuilder.cs @@ -1,206 +1,216 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.Specialized; - -namespace FineUI -{ - /// - /// 创建Javascript对象参数的帮助类 - /// - public class JsObjectBuilder - { - #region fields - - private Dictionary _properties = new Dictionary(); - - #endregion - - #region Properties - - /// - /// 已经添加属性的个数 - /// - public int Count - { - get - { - return _properties.Count; - } - } - - #endregion - - #region Constructor - - /// - /// 构造函数 - /// - public JsObjectBuilder() - { - } - - /// - /// 构造函数 - /// - /// 属性名 - /// 属性值 - public JsObjectBuilder(string propertyName, object propertyValue) - { - AddProperty(propertyName, propertyValue, false); - } - - /// - /// 构造函数 - /// - /// 属性名 - /// 属性值 - /// 是否保持原样 - public JsObjectBuilder(string propertyName, object propertyValue, bool persistOriginal) - { - AddProperty(propertyName, propertyValue, persistOriginal); - } - - #endregion - - #region RemoveProperty - - /// - /// 删除属性 - /// - /// 属性名 - public void RemoveProperty(string propertyName) - { - if (_properties.ContainsKey(propertyName)) - { - _properties.Remove(propertyName); - } - } - - #endregion - - #region HasProperty - - /// - /// 是否包含属性 - /// - /// 属性名 - /// - public bool ContainsProperty(string propertyName) - { - return _properties.ContainsKey(propertyName); - } - - #endregion - - #region AddProperty - - /// - /// 添加属性 - /// - /// 属性名 - /// 属性值 - public void AddProperty(string propertyName, object propertyValue) - { - AddProperty(propertyName, propertyValue, false); - } - - /// - /// 添加属性 - /// - /// 属性名 - /// 属性值 - /// 是否保持原样 - public void AddProperty(string propertyName, object propertyValue, bool persistOriginal) - { - if (persistOriginal) - { - _properties.Add(propertyName, propertyValue.ToString()); - } - else - { - if (propertyValue is string) - { - _properties.Add(propertyName, JsHelper.Enquote(propertyValue.ToString())); - } - else if (propertyValue is bool) - { - _properties.Add(propertyName, propertyValue.ToString().ToLower()); - } - else if (propertyValue is float || propertyValue is double) - { - _properties.Add(propertyName, JsHelper.NumberToString(propertyValue)); - } - else - { - _properties.Add(propertyName, propertyValue.ToString()); - } - } - } - - #endregion - - #region GetProperty - - /// - /// 获取属性 - /// - /// 属性名 - /// 属性值 - public string GetProperty(string propertyName) - { - if (_properties.ContainsKey(propertyName)) - { - return _properties[propertyName]; - } - - return String.Empty; - } - - #endregion - - #region override ToString - - /// - /// 返回对象的JSON字符串形式 - /// - /// 对象的JSON形式 - public override string ToString() - { - StringBuilder sb = new StringBuilder(); - - foreach (string key in _properties.Keys) - { - sb.AppendFormat("{0}:{1},", key, _properties[key]); - } - - return "{" + sb.ToString().TrimEnd(',') + "}"; - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.Specialized; + +namespace FineUI +{ + /// + /// 创建Javascript对象参数的帮助类 + /// + public class JsObjectBuilder + { + #region fields + + private Dictionary _properties = new Dictionary(); + + #endregion + + #region Properties + + /// + /// 已经添加属性的个数 + /// + public int Count + { + get + { + return _properties.Count; + } + } + + #endregion + + #region Constructor + + /// + /// 构造函数 + /// + public JsObjectBuilder() + { + } + + /// + /// 构造函数 + /// + /// 属性名 + /// 属性值 + public JsObjectBuilder(string propertyName, object propertyValue) + { + AddProperty(propertyName, propertyValue, false); + } + + /// + /// 构造函数 + /// + /// 属性名 + /// 属性值 + /// 是否保持原样 + public JsObjectBuilder(string propertyName, object propertyValue, bool persistOriginal) + { + AddProperty(propertyName, propertyValue, persistOriginal); + } + + #endregion + + #region RemoveProperty + + /// + /// 删除属性 + /// + /// 属性名 + public void RemoveProperty(string propertyName) + { + if (_properties.ContainsKey(propertyName)) + { + _properties.Remove(propertyName); + } + } + + #endregion + + #region HasProperty + + /// + /// 是否包含属性 + /// + /// 属性名 + /// + public bool ContainsProperty(string propertyName) + { + return _properties.ContainsKey(propertyName); + } + + #endregion + + #region AddProperty + + /// + /// 添加属性 + /// + /// 属性名 + /// 属性值 + public void AddProperty(string propertyName, object propertyValue) + { + AddProperty(propertyName, propertyValue, false); + } + + /// + /// 添加属性 + /// + /// 属性名 + /// 属性值 + /// 是否保持原样 + public void AddProperty(string propertyName, object propertyValue, bool persistOriginal) + { + // 容错处理(如果 propertyValue 为空,则不添加) + if (propertyValue == null) + { + return; + } + + + // 添加属性之前,要先删除之前已经添加的属性,否则会出粗 + RemoveProperty(propertyName); + + if (persistOriginal) + { + _properties.Add(propertyName, propertyValue.ToString()); + } + else + { + if (propertyValue is string) + { + _properties.Add(propertyName, JsHelper.Enquote(propertyValue.ToString())); + } + else if (propertyValue is bool) + { + _properties.Add(propertyName, propertyValue.ToString().ToLower()); + } + else if (propertyValue is float || propertyValue is double) + { + _properties.Add(propertyName, JsHelper.NumberToString(propertyValue)); + } + else + { + _properties.Add(propertyName, propertyValue.ToString()); + } + } + } + + #endregion + + #region GetProperty + + /// + /// 获取属性 + /// + /// 属性名 + /// 属性值 + public string GetProperty(string propertyName) + { + if (_properties.ContainsKey(propertyName)) + { + return _properties[propertyName]; + } + + return String.Empty; + } + + #endregion + + #region override ToString + + /// + /// 返回对象的JSON字符串形式 + /// + /// 对象的JSON形式 + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + + foreach (string key in _properties.Keys) + { + sb.AppendFormat("{0}:{1},", key, _properties[key]); + } + + return "{" + sb.ToString().TrimEnd(',') + "}"; + } + + #endregion + } +} diff --git a/FineUI/Business/JsHelper/OptionBuilder.cs b/FineUI/Business/JsHelper/OptionBuilder.cs index a20b760..c76c777 100644 --- a/FineUI/Business/JsHelper/OptionBuilder.cs +++ b/FineUI/Business/JsHelper/OptionBuilder.cs @@ -1,126 +1,128 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - internal class OptionBuilder - { - #region fields - - private JsObjectBuilder _defaultBuilder = new JsObjectBuilder(); - - #endregion - - #region Listeners - - private JsObjectBuilder _listeners = new JsObjectBuilder(); - - public JsObjectBuilder Listeners - { - get { return _listeners; } - set { _listeners = value; } - } - - - #endregion - - #region Constructor - - public OptionBuilder() - { - } - - public OptionBuilder(string propertyName, object propertyValue) - { - _defaultBuilder.AddProperty(propertyName, propertyValue, false); - } - - public OptionBuilder(string propertyName, object propertyValue, bool persistOriginal) - { - _defaultBuilder.AddProperty(propertyName, propertyValue, persistOriginal); - } - - #endregion - - #region RemoveProperty - - /// - /// 删除属性 - /// - /// - public void RemoveProperty(string propertyName) - { - _defaultBuilder.RemoveProperty(propertyName); - } - - #endregion - - #region AddProperty - - /// - /// 添加属性 - /// - /// - /// - public void AddProperty(string propertyName, object propertyValue) - { - AddProperty(propertyName, propertyValue, false); - } - - /// - /// 添加属性 - /// - /// - /// - /// 是否保持原样 - public void AddProperty(string propertyName, object propertyValue, bool persistOriginal) - { - if (_defaultBuilder.ContainsProperty(propertyName)) - { - _defaultBuilder.RemoveProperty(propertyName); - } - - _defaultBuilder.AddProperty(propertyName, propertyValue, persistOriginal); - } - - #endregion - - #region GetProperty - - /// - /// 使用这个方法需要特别注意,因为这里返回的不是设置的属性了 - /// 比如:"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"" - /// - /// - /// - internal string GetProperty(string propertyName) - { - return _defaultBuilder.GetProperty(propertyName); - } - - #endregion - - #region override ToString - /// - /// 返回对象的Json字符串表示 - /// - /// - public override string ToString() - { - if (Listeners.Count > 0) - { - //// 如果在 Listeners 中没有添加上下文,则添加默认的 this - //if (!Listeners.ContainsProperty(OptionName.Scope)) - //{ - // Listeners.AddProperty(OptionName.Scope, "box", true); - //} - - AddProperty("listeners", Listeners.ToString(), true); - } - - return _defaultBuilder.ToString(); - } - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + internal class OptionBuilder + { + #region fields + + private JsObjectBuilder _defaultBuilder = new JsObjectBuilder(); + + #endregion + + #region Listeners + + private JsObjectBuilder _listeners = new JsObjectBuilder(); + + public JsObjectBuilder Listeners + { + get { return _listeners; } + set { _listeners = value; } + } + + + #endregion + + #region Constructor + + public OptionBuilder() + { + } + + public OptionBuilder(string propertyName, object propertyValue) + { + _defaultBuilder.AddProperty(propertyName, propertyValue, false); + } + + public OptionBuilder(string propertyName, object propertyValue, bool persistOriginal) + { + _defaultBuilder.AddProperty(propertyName, propertyValue, persistOriginal); + } + + #endregion + + #region RemoveProperty + + /// + /// 删除属性 + /// + /// + public void RemoveProperty(string propertyName) + { + if (_defaultBuilder.ContainsProperty(propertyName)) + { + _defaultBuilder.RemoveProperty(propertyName); + } + } + + #endregion + + #region AddProperty + + /// + /// 添加属性 + /// + /// + /// + public void AddProperty(string propertyName, object propertyValue) + { + AddProperty(propertyName, propertyValue, false); + } + + /// + /// 添加属性 + /// + /// + /// + /// 是否保持原样 + public void AddProperty(string propertyName, object propertyValue, bool persistOriginal) + { + //// 添加属性之前,要先删除之前已经添加的属性,否则会出粗 + //RemoveProperty(propertyName); + + + _defaultBuilder.AddProperty(propertyName, propertyValue, persistOriginal); + } + + #endregion + + #region GetProperty + + /// + /// 使用这个方法需要特别注意,因为这里返回的不是设置的属性了 + /// 比如:"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"" + /// + /// + /// + internal string GetProperty(string propertyName) + { + return _defaultBuilder.GetProperty(propertyName); + } + + #endregion + + #region override ToString + /// + /// 返回对象的Json字符串表示 + /// + /// + public override string ToString() + { + if (Listeners.Count > 0) + { + //// 如果在 Listeners 中没有添加上下文,则添加默认的 this + //if (!Listeners.ContainsProperty(OptionName.Scope)) + //{ + // Listeners.AddProperty(OptionName.Scope, "box", true); + //} + + AddProperty("listeners", Listeners.ToString(), true); + } + + return _defaultBuilder.ToString(); + } + #endregion + } +} diff --git a/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs b/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs index 1cbfbae..c54d31d 100644 --- a/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs +++ b/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs @@ -1,57 +1,57 @@ -using System; -using System.Collections.Generic; -using System.Text; - -using System.Web.UI; - -namespace FineUI -{ - /// - /// 脚本(不和控件关联的脚本) - /// - internal class AbsoluteScriptBlock - { - - private string _script; - - /// - /// 脚本 - /// - public string Script - { - get { return _script; } - set { _script = value; } - } - - - - private int _level; - - /// - /// 层次(层次越高,注册越靠后)(缺省100) - /// 负值表示在所有注册脚本之前执行 - /// - public int Level - { - get { return _level; } - set { _level = value; } - } - - - - public AbsoluteScriptBlock(string script) - { - _script = script; - _level = 100; - } - - - public AbsoluteScriptBlock(string script, int level) - { - _script = script; - _level = level; - } - - - } -} +using System; +using System.Collections.Generic; +using System.Text; + +using System.Web.UI; + +namespace FineUI +{ + /// + /// 脚本(不和控件关联的脚本) + /// + internal class AbsoluteScriptBlock + { + + private string _script; + + /// + /// 脚本 + /// + public string Script + { + get { return _script; } + set { _script = value; } + } + + + + private int _level; + + /// + /// 层次(层次越高,注册越靠后)(缺省100) + /// 负值表示在所有注册脚本之前执行 + /// + public int Level + { + get { return _level; } + set { _level = value; } + } + + + + public AbsoluteScriptBlock(string script) + { + _script = script; + _level = Constants.ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL; + } + + + public AbsoluteScriptBlock(string script, int level) + { + _script = script; + _level = level; + } + + + } +} diff --git a/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs b/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs index b3f47be..3ee20ec 100644 --- a/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs +++ b/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs @@ -1,81 +1,81 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ClientJavascriptIDManager.cs - * CreatedOn: 2008-08-01 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Configuration; -using System.Reflection; -using System.Collections; - -namespace FineUI -{ - /// - /// 存在 Page.Items 上下文中,用于生成JavascriptID - /// - internal class ClientJavascriptIDManager - { - #region static fields - public static readonly string CONTEXT_NAME = "ClientJavascriptIDManagerContextName"; - - #endregion - - #region Instance - - public static ClientJavascriptIDManager Instance - { - get - { - if (HttpContext.Current != null) - { - ClientJavascriptIDManager manager = HttpContext.Current.Items[CONTEXT_NAME] as ClientJavascriptIDManager; - if (manager == null) - { - manager = new ClientJavascriptIDManager(); - HttpContext.Current.Items[CONTEXT_NAME] = manager; - } - return manager; - } - return null; - } - } - - #endregion - - #region methods - - private int _num = 0; - - public string GetNextJavascriptID() - { - return String.Format("x{0}", _num++); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ClientJavascriptIDManager.cs + * CreatedOn: 2008-08-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Configuration; +using System.Reflection; +using System.Collections; + +namespace FineUI +{ + /// + /// 存在 Page.Items 上下文中,用于生成JavascriptID + /// + internal class ClientJavascriptIDManager + { + #region static fields + public static readonly string CONTEXT_NAME = "ClientJavascriptIDManagerContextName"; + + #endregion + + #region Instance + + public static ClientJavascriptIDManager Instance + { + get + { + if (HttpContext.Current != null) + { + ClientJavascriptIDManager manager = HttpContext.Current.Items[CONTEXT_NAME] as ClientJavascriptIDManager; + if (manager == null) + { + manager = new ClientJavascriptIDManager(); + HttpContext.Current.Items[CONTEXT_NAME] = manager; + } + return manager; + } + return null; + } + } + + #endregion + + #region methods + + private int _num = 0; + + public string GetNextJavascriptID() + { + return String.Format("f{0}", _num++); + } + + #endregion + } +} diff --git a/FineUI/Business/ResourceManager/CommonResourceHelper.cs b/FineUI/Business/ResourceManager/CommonResourceHelper.cs index 5ef8bb7..0d793fa 100644 --- a/FineUI/Business/ResourceManager/CommonResourceHelper.cs +++ b/FineUI/Business/ResourceManager/CommonResourceHelper.cs @@ -1,330 +1,338 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: HeaderResourceHelper.cs - * CreatedOn: 2008-05-04 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Configuration; -using System.Reflection; -using System.Web.UI; -using System.IO; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - internal static class CommonResourceHelper - { - #region static - - public static readonly string CONTROL_ID_PREFIX = "FineUI_"; - - //private static readonly string HeaderCommentId = HeaderControlIdPrefix + "comment"; - //private static readonly string HeaderDefaultCssId = HeaderControlIdPrefix + "ext-all-css"; - //private static readonly string HeaderGrayCssId = HeaderControlIdPrefix + "xtheme-gray-css"; - //private static readonly string HeaderExtBaseJsId = HeaderControlIdPrefix + "ext-base-js"; - //private static readonly string HeaderExtAllJsId = HeaderControlIdPrefix + "ext-all-js"; - - - - public static readonly string COMMENT_INCLUDE_TEMPLATE = "\r\n"; - public static readonly string SCRIPT_INCLUDE_TEMPLATE = "\r\n"; - //public static readonly string SCRIPT_CONTENT_TEMPLATE = "\r\n\r\n"; - public static readonly string STYLE_INCLUDE_TEMPLATE = "\r\n"; - public static readonly string STYLE_CONTENT_TEMPLATE = "\r\n"; - public static readonly string META_TEMPLATE = "\r\n\r\n"; - - - #endregion - - #region RegisterCommonResource - - internal static void RegisterCommonResource(Page page) - { - #region powered-by - - string metaName = "powered-by"; - string metaContent = String.Format("FineUI v{0} - 基于 ExtJS 的专业 ASP.NET 控件库 - http://fineui.com/", GlobalConfig.ProductVersion); - AddContentToHead(page, CONTROL_ID_PREFIX + "comments", String.Format(META_TEMPLATE, metaName, metaContent)); - - #endregion - - // ExtJS CSS & JS 版本号,只有升级更新CSS或者JS时才需要更新。 - //string extjsCSSJSVersion = "3"; - //string fineuiVersion = GlobalConfig.ProductVersion; - string extjsBasePath = page.ResolveUrl(GlobalConfig.GetExtjsBasePath()); - - #region css - - if (!String.IsNullOrEmpty(PageManager.Instance.CustomTheme)) - { - /* - AddCssPathToHead(page, CONTROL_ID_PREFIX + "notheme.css", String.Format("{0}/res/css/notheme.css", extjsBasePath)); - - string themePath = String.Format("{0}/css/xtheme-{1}.css", page.ResolveUrl(PageManager.Instance.CustomThemeBasePath), PageManager.Instance.CustomTheme); - AddCssPathToHead(page, CONTROL_ID_PREFIX + "custom-theme.css", themePath); - - AddCssPathToHead(page, CONTROL_ID_PREFIX + "ux.css", String.Format("{0}/res/css/ux.css", extjsBasePath)); - */ - - string themeName = PageManager.Instance.CustomTheme; - - AddCssPathToHead(page, CONTROL_ID_PREFIX + themeName + ".css", String.Format("{0}/ext-theme-{1}/all.css", page.ResolveUrl(PageManager.Instance.CustomThemeBasePath), themeName)); - } - else - { - string themeName = ThemeHelper.GetName(PageManager.Instance.Theme); - - if (themeName == "blue") - { - themeName = "classic"; - } - - AddCssPathToHead(page, CONTROL_ID_PREFIX + themeName + ".css", String.Format("{0}/res/ext-theme-{1}/all.css", extjsBasePath, themeName)); - - //AddCssPathToHead(page, CONTROL_ID_PREFIX + "ux.css", String.Format("{0}/res/css/ux.css", extjsBasePath)); - } - - - - #endregion - - #region javascript - - if (GlobalConfig.GetDebugMode()) - { - AddJavascriptPathToPageBottom(page, "ext-part1.js", String.Format("{0}/ext-part1.js", extjsBasePath)); - AddJavascriptPathToPageBottom(page, "ext-part2.js", String.Format("{0}/ext-part2.js", extjsBasePath)); - - } - else - { - AddJavascriptPathToPageBottom(page, "ext-all.js", String.Format("{0}/ext-all.js", extjsBasePath)); - } - - // Neptune需要额外的JavaScript文件 - if (String.IsNullOrEmpty(PageManager.Instance.CustomTheme) && PageManager.Instance.Theme == Theme.Neptune) - { - AddJavascriptPathToPageBottom(page, "ext-theme-neptune.js", String.Format("{0}/ext-theme-neptune.js", extjsBasePath)); - } - - - // 语言资源应该放在最后,其中包含对 X.js 的语言定义 - string langName = LanguageHelper.GetName(PageManager.Instance.Language); - AddJavascriptPathToPageBottom(page, langName + ".js", String.Format("{0}/lang/{1}.js", extjsBasePath, langName)); - - #endregion - } - - #endregion - - #region GetResourceUrlFromName - - private static string GetResourceUrlFromName(Page page, string resName) - { - return ResourceHelper.GetWebResourceUrlResAxd(page, resName); - } - - #endregion - - #region AddJavascriptIncludeToPageBottom - - public static void AddJavascriptPathToPageBottom(Page page, string controlId, string jsPath) - { - if (!page.ClientScript.IsClientScriptIncludeRegistered(controlId)) - { - page.ClientScript.RegisterStartupScript(page.GetType(), controlId, String.Format(SCRIPT_INCLUDE_TEMPLATE, jsPath), false); - } - } - - /// - /// 添加JS文件到页面的底部 - /// - /// - /// - /// - public static void AddJavascriptIncludeToPageBottom(Page page, string controlId, string resourceName) - { - if (!page.ClientScript.IsClientScriptIncludeRegistered(controlId)) - { - page.ClientScript.RegisterStartupScript(page.GetType(), controlId, String.Format(SCRIPT_INCLUDE_TEMPLATE, GetResourceUrlFromName(page, resourceName)), false); - } - } - - public static void AddCssPathToHead(Page page, string controlId, string cssPath) - { - if (!IsHeaderContains(page, controlId)) - { - LiteralControl control = new LiteralControl(); - control.ID = controlId; - control.Text = String.Format(STYLE_INCLUDE_TEMPLATE, cssPath); - - page.Header.Controls.AddAt(GetNextControlIndex(page), control); - } - } - - /// - /// 添加样式表到页头 - /// - /// - /// - /// - public static void AddCssResourceToHead(Page page, string controlId, string resourceName) - { - AddCssPathToHead(page, controlId, GetResourceUrlFromName(page, resourceName)); - } - - public static void AddCssContentToHead(Page page, string controlId, string cssContent) - { - if (!IsHeaderContains(page, controlId)) - { - LiteralControl control = new LiteralControl(); - control.ID = controlId; - control.Text = String.Format(STYLE_CONTENT_TEMPLATE, cssContent); - - page.Header.Controls.AddAt(GetNextControlIndex(page), control); - } - } - - /// - /// 向页面头部添加内容 - /// - /// - /// - /// - public static void AddContentToHead(Page page, string controlId, string msg) - { - if (!IsHeaderContains(page, controlId)) - { - LiteralControl control = new LiteralControl(); - control.ID = controlId; - control.Text = msg; - - page.Header.Controls.AddAt(GetNextControlIndex(page), control); - } - } - - /// - /// 页头是否包含控件 - /// - /// - /// - /// - public static bool IsHeaderContains(Page page, string controlId) - { - foreach (Control c in page.Header.Controls) - { - if (c.ID != null && c.ID == controlId) - { - return true; - } - } - - return false; - } - - /// - /// 取得下一个控件的位置 - /// - /// - private static int GetNextControlIndex(Page page) - { - int index = 0; - - // 如果存在自定义(以CONTROL_ID_PREFIX开头)的控件,则返回最后一个自定义控件的下一个位置 - // 如果不存在自定义的控件,则返回的下一个位置 - bool startControlBlock = false; - int titleIndex = 0; - foreach (Control c in page.Header.Controls) - { - if (c is HtmlTitle) - { - titleIndex = index; - } - - if (c.ID != null && c.ID.StartsWith(CONTROL_ID_PREFIX)) - { - startControlBlock = true; - } - else - { - if (startControlBlock) - { - break; - } - } - - index++; - } - - int retIndex = startControlBlock ? index : titleIndex + 1; - if (retIndex < 0) - { - retIndex = 0; - } - else if (retIndex >= page.Header.Controls.Count) - { - retIndex = page.Header.Controls.Count - 1; - } - - return retIndex; - } - - ///// <summary> - ///// 取得Comment控件的位置(默认在title的下面) - ///// </summary> - ///// <returns></returns> - //private static int GetCommentControlIndex(Page page) - //{ - // int index = 0; - - // bool isFindTitle = false; - // foreach (Control c in page.Header.Controls) - // { - // if (c is System.Web.UI.HtmlControls.HtmlTitle) - // { - // isFindTitle = true; - // break; - // } - - // index++; - // } - - // return isFindTitle ? ++index : 0; - //} - #endregion - - #region RegisterHeaderCSS - - public static void RegisterHeaderCSS(Page page, string cssContent) - { - string controlId = CONTROL_ID_PREFIX + "user_defined_css"; - if (!IsHeaderContains(page, controlId)) - { - AddCssContentToHead(page, controlId, cssContent); - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: HeaderResourceHelper.cs + * CreatedOn: 2008-05-04 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Configuration; +using System.Reflection; +using System.Web.UI; +using System.IO; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + internal static class CommonResourceHelper + { + #region static + + public static readonly string CONTROL_ID_PREFIX = "FineUI_"; + + //private static readonly string HeaderCommentId = HeaderControlIdPrefix + "comment"; + //private static readonly string HeaderDefaultCssId = HeaderControlIdPrefix + "ext-all-css"; + //private static readonly string HeaderGrayCssId = HeaderControlIdPrefix + "xtheme-gray-css"; + //private static readonly string HeaderExtBaseJsId = HeaderControlIdPrefix + "ext-base-js"; + //private static readonly string HeaderExtAllJsId = HeaderControlIdPrefix + "ext-all-js"; + + + + public static readonly string COMMENT_INCLUDE_TEMPLATE = "<!-- {0} -->\r\n"; + public static readonly string SCRIPT_INCLUDE_TEMPLATE = "<script src=\"{0}\" type=\"text/javascript\"></script>\r\n"; + //public static readonly string SCRIPT_CONTENT_TEMPLATE = "\r\n<script type=\"text/javascript\">{0}</script>\r\n"; + public static readonly string STYLE_INCLUDE_TEMPLATE = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\"/>\r\n"; + public static readonly string STYLE_CONTENT_TEMPLATE = "<style type=\"text/css\">{0}</style>\r\n"; + public static readonly string META_TEMPLATE = "<meta http-equiv=\"{0}\" content=\"{1}\" />\r\n"; + + + #endregion + + #region RegisterCommonResource + + internal static void RegisterCommonResource(Page page) + { + #region powered-by + + string metaName = "powered-by"; + string metaContent = String.Format("FineUI v{0} - 基于 ExtJS 的开源 ASP.NET 控件库 - http://fineui.com/", GlobalConfig.ProductVersion); + AddContentToHead(page, CONTROL_ID_PREFIX + "comments", String.Format(META_TEMPLATE, metaName, metaContent)); + + + // 是否向页面输出IE=edge标识 + if (PageManager.Instance.IEEdge) + { + AddContentToHead(page, CONTROL_ID_PREFIX + "xua", String.Format(META_TEMPLATE, "X-UA-Compatible", "IE=edge,chrome=1")); + } + + + #endregion + + // ExtJS CSS & JS 版本号,只有升级更新CSS或者JS时才需要更新。 + //string extjsCSSJSVersion = "3"; + //string fineuiVersion = GlobalConfig.ProductVersion; + string extjsBasePath = page.ResolveUrl(GlobalConfig.GetJSBasePath()); + + #region css + + if (!String.IsNullOrEmpty(PageManager.Instance.CustomTheme)) + { + /* + AddCssPathToHead(page, CONTROL_ID_PREFIX + "notheme.css", String.Format("{0}/res/css/notheme.css", extjsBasePath)); + + string themePath = String.Format("{0}/css/xtheme-{1}.css", page.ResolveUrl(PageManager.Instance.CustomThemeBasePath), PageManager.Instance.CustomTheme); + AddCssPathToHead(page, CONTROL_ID_PREFIX + "custom-theme.css", themePath); + + AddCssPathToHead(page, CONTROL_ID_PREFIX + "ux.css", String.Format("{0}/res/css/ux.css", extjsBasePath)); + */ + + string themeName = PageManager.Instance.CustomTheme; + + AddCssPathToHead(page, CONTROL_ID_PREFIX + themeName + ".css", String.Format("{0}/ext-theme-{1}/all.css", page.ResolveUrl(PageManager.Instance.CustomThemeBasePath), themeName)); + } + else + { + string themeName = ThemeHelper.GetName(PageManager.Instance.Theme); + + if (themeName == "blue") + { + themeName = "classic"; + } + + AddCssPathToHead(page, CONTROL_ID_PREFIX + themeName + ".css", String.Format("{0}/res/ext-theme-{1}/all.css", extjsBasePath, themeName)); + + //AddCssPathToHead(page, CONTROL_ID_PREFIX + "ux.css", String.Format("{0}/res/css/ux.css", extjsBasePath)); + } + + + + #endregion + + #region javascript + + if (GlobalConfig.GetDebugMode()) + { + AddJavascriptPathToPageBottom(page, "ext-part1.js", String.Format("{0}/ext-part1.js", extjsBasePath)); + AddJavascriptPathToPageBottom(page, "ext-part2.js", String.Format("{0}/ext-part2.js", extjsBasePath)); + + } + else + { + AddJavascriptPathToPageBottom(page, "ext-all.js", String.Format("{0}/ext-all.js", extjsBasePath)); + } + + // Neptune需要额外的JavaScript文件 + if (String.IsNullOrEmpty(PageManager.Instance.CustomTheme) && PageManager.Instance.Theme == Theme.Neptune) + { + AddJavascriptPathToPageBottom(page, "ext-theme-neptune.js", String.Format("{0}/ext-theme-neptune.js", extjsBasePath)); + } + + + // 语言资源应该放在最后,其中包含对 X.js 的语言定义 + string langName = LanguageHelper.GetName(PageManager.Instance.Language); + AddJavascriptPathToPageBottom(page, langName + ".js", String.Format("{0}/lang/{1}.js", extjsBasePath, langName)); + + #endregion + } + + #endregion + + #region GetResourceUrlFromName + + private static string GetResourceUrlFromName(Page page, string resName) + { + return ResourceHelper.GetWebResourceUrlResAxd(page, resName); + } + + #endregion + + #region AddJavascriptIncludeToPageBottom + + public static void AddJavascriptPathToPageBottom(Page page, string controlId, string jsPath) + { + if (!page.ClientScript.IsClientScriptIncludeRegistered(controlId)) + { + page.ClientScript.RegisterStartupScript(page.GetType(), controlId, String.Format(SCRIPT_INCLUDE_TEMPLATE, jsPath), false); + } + } + + /// <summary> + /// 添加JS文件到页面的底部 + /// </summary> + /// <param name="page"></param> + /// <param name="controlId"></param> + /// <param name="resourceName"></param> + public static void AddJavascriptIncludeToPageBottom(Page page, string controlId, string resourceName) + { + if (!page.ClientScript.IsClientScriptIncludeRegistered(controlId)) + { + page.ClientScript.RegisterStartupScript(page.GetType(), controlId, String.Format(SCRIPT_INCLUDE_TEMPLATE, GetResourceUrlFromName(page, resourceName)), false); + } + } + + public static void AddCssPathToHead(Page page, string controlId, string cssPath) + { + if (!IsHeaderContains(page, controlId)) + { + LiteralControl control = new LiteralControl(); + control.ID = controlId; + control.Text = String.Format(STYLE_INCLUDE_TEMPLATE, cssPath); + + page.Header.Controls.AddAt(GetNextControlIndex(page), control); + } + } + + /// <summary> + /// 添加样式表到页头 + /// </summary> + /// <param name="page"></param> + /// <param name="controlId"></param> + /// <param name="resourceName"></param> + public static void AddCssResourceToHead(Page page, string controlId, string resourceName) + { + AddCssPathToHead(page, controlId, GetResourceUrlFromName(page, resourceName)); + } + + public static void AddCssContentToHead(Page page, string controlId, string cssContent) + { + if (!IsHeaderContains(page, controlId)) + { + LiteralControl control = new LiteralControl(); + control.ID = controlId; + control.Text = String.Format(STYLE_CONTENT_TEMPLATE, cssContent); + + page.Header.Controls.AddAt(GetNextControlIndex(page), control); + } + } + + /// <summary> + /// 向页面头部添加内容 + /// </summary> + /// <param name="page"></param> + /// <param name="controlId"></param> + /// <param name="msg"></param> + public static void AddContentToHead(Page page, string controlId, string msg) + { + if (!IsHeaderContains(page, controlId)) + { + LiteralControl control = new LiteralControl(); + control.ID = controlId; + control.Text = msg; + + page.Header.Controls.AddAt(GetNextControlIndex(page), control); + } + } + + /// <summary> + /// 页头是否包含控件 + /// </summary> + /// <param name="page"></param> + /// <param name="controlId"></param> + /// <returns></returns> + public static bool IsHeaderContains(Page page, string controlId) + { + foreach (Control c in page.Header.Controls) + { + if (c.ID != null && c.ID == controlId) + { + return true; + } + } + + return false; + } + + /// <summary> + /// 取得下一个控件的位置 + /// </summary> + /// <returns></returns> + private static int GetNextControlIndex(Page page) + { + int index = 0; + + // 如果存在自定义(以CONTROL_ID_PREFIX开头)的控件,则返回最后一个自定义控件的下一个位置 + // 如果不存在自定义的控件,则返回<title>的下一个位置 + bool startControlBlock = false; + int titleIndex = 0; + foreach (Control c in page.Header.Controls) + { + if (c is HtmlTitle) + { + titleIndex = index; + } + + if (c.ID != null && c.ID.StartsWith(CONTROL_ID_PREFIX)) + { + startControlBlock = true; + } + else + { + if (startControlBlock) + { + break; + } + } + + index++; + } + + int retIndex = startControlBlock ? index : titleIndex + 1; + if (retIndex < 0) + { + retIndex = 0; + } + else if (retIndex >= page.Header.Controls.Count) + { + retIndex = page.Header.Controls.Count - 1; + } + + return retIndex; + } + + ///// <summary> + ///// 取得Comment控件的位置(默认在title的下面) + ///// </summary> + ///// <returns></returns> + //private static int GetCommentControlIndex(Page page) + //{ + // int index = 0; + + // bool isFindTitle = false; + // foreach (Control c in page.Header.Controls) + // { + // if (c is System.Web.UI.HtmlControls.HtmlTitle) + // { + // isFindTitle = true; + // break; + // } + + // index++; + // } + + // return isFindTitle ? ++index : 0; + //} + #endregion + + #region RegisterHeaderCSS + + public static void RegisterHeaderCSS(Page page, string cssContent) + { + string controlId = CONTROL_ID_PREFIX + "user_defined_css"; + if (!IsHeaderContains(page, controlId)) + { + AddCssContentToHead(page, controlId, cssContent); + } + } + + #endregion + } +} diff --git a/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs b/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs index e3f72af..541b5be 100644 --- a/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs +++ b/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs @@ -1,202 +1,202 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: DesignTimeResourceHelper.cs - * CreatedOn: 2008-05-04 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using System.IO; -using System.Web.UI; -using System.ComponentModel; - -namespace FineUI -{ - /// <summary> - /// 注册设计时资源 - /// </summary> - internal class DesignTimeResourceHelper - { - - #region static readonly - - private static readonly string STYLE_BLOCK_TEMPLATE = "<style type=\"text/css\">{0}</style>"; - //private static readonly string DESIGN_TIME_CONTROL_ID = "design-time-css-holder-field-id"; - - #endregion - - #region fields - - private ISite _site; - - - #endregion - - #region GetInstance - - private static DesignTimeResourceHelper _helper; - - /// <summary> - /// 取得 DesignTimeResourceHelper 的实例,单件模式 - /// </summary> - /// <param name="page"></param> - /// <returns></returns> - public static DesignTimeResourceHelper GetInstance(ISite site) - { - if (_helper == null) - { - _helper = new DesignTimeResourceHelper(site); - - } - - return _helper; - } - - #endregion - - #region Constructor - - public DesignTimeResourceHelper(ISite site) - { - _site = site; - } - - #endregion - - #region SetupInlineStyle - - - public void SetupInlineStyle() - { - //System.Web.UI.WebControls.Literal litStyle = new System.Web.UI.WebControls.Literal(); - //litStyle.ID = DESIGN_TIME_CONTROL_ID; - //litStyle.Text = GetInlineStyle(); - - ////_site.Container.Add(hiddenControl); - ////(_site.Container.Components[0] as Page).Controls.Add(litStyle); - //_site.Container.Add(litStyle); - - - - - //DesignTimeControl litStyle = new DesignTimeControl(); - //litStyle.ID = DESIGN_TIME_CONTROL_ID; - //////litStyle.Text = GetInlineStyle(); - - //////_site.Container.Add(hiddenControl); - //////(_site.Container.Components[0] as Page).Controls.Add(litStyle); - ////_site.Container.Add(litStyle); - - - //Page page = (_site.Container.Components[0] as Page); - - ////System.Web.UI.HtmlControls.HtmlHead header = - - // //page.Header = new System.Web.UI.HtmlControls.HtmlHead(); - - } - - /// <summary> - /// 设计时是否包含控件 - /// </summary> - /// <param name="componentID"></param> - /// <returns></returns> - private Control GetHiddenControl(string controlID) - { - foreach (IComponent com in _site.Container.Components) - { - Control c = com as Control; - if (c != null && c.ID == controlID) - { - return c; - } - } - - return null; - } - - - #endregion - - #region GetInlineStyle - - private string _styleContent = String.Empty; - - /// <summary> - /// 取得内联样式表 - /// </summary> - /// <returns></returns> - public string GetInlineStyle() - { - if (String.IsNullOrEmpty(_styleContent)) - { - StringBuilder sb = new StringBuilder(); - - sb.Append(GetStyleContent("FineUI.res.css.ext-all.css")); - - //if (AboutConfig.Theme.ToLower() == ConfigThemeValues.GRAY) - //{ - // sb.Append(GetStyleContent("FineUI.res.css.xtheme-gray.css")); - //} - // ux - sb.Append(GetStyleContent("FineUI.res.css.ux.css")); - - _styleContent = sb.ToString(); - } - - return String.Format(STYLE_BLOCK_TEMPLATE, _styleContent); - } - - - - /// <summary> - /// 取得样式的内容 - /// </summary> - /// <param name="resourceName"></param> - /// <returns></returns> - private string GetStyleContent(string resourceName) - { - using (StreamReader reader = new StreamReader(typeof(FineUI.ControlBase).Assembly.GetManifestResourceStream(resourceName))) - { - return ParseCssWebResourceUrls(reader.ReadToEnd()); - } - } - - /// <summary> - /// 转化 CSS 的内容 - /// </summary> - /// <param name="src"></param> - /// <returns></returns> - private string ParseCssWebResourceUrls(string resourceContent) - { - Regex regex = new Regex("<%=WebResource\\(\".*\\.(gif|png)*\"\\)%>"); - foreach (Match match in regex.Matches(resourceContent)) - { - string webResourceName = match.Value.Replace("<%=WebResource(\"", string.Empty).Replace("\")%>", string.Empty); - resourceContent = resourceContent.Replace(match.Value, String.Format("\"{0}\"", ResourceHelper.GetWebResourceUrl(_site, webResourceName))); - } - return resourceContent; - } - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: DesignTimeResourceHelper.cs + * CreatedOn: 2008-05-04 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; +using System.Web.UI; +using System.ComponentModel; + +namespace FineUI +{ + /// <summary> + /// 注册设计时资源 + /// </summary> + internal class DesignTimeResourceHelper + { + + #region static readonly + + private static readonly string STYLE_BLOCK_TEMPLATE = "<style type=\"text/css\">{0}</style>"; + //private static readonly string DESIGN_TIME_CONTROL_ID = "design-time-css-holder-field-id"; + + #endregion + + #region fields + + private ISite _site; + + + #endregion + + #region GetInstance + + private static DesignTimeResourceHelper _helper; + + /// <summary> + /// 取得 DesignTimeResourceHelper 的实例,单件模式 + /// </summary> + /// <param name="page"></param> + /// <returns></returns> + public static DesignTimeResourceHelper GetInstance(ISite site) + { + if (_helper == null) + { + _helper = new DesignTimeResourceHelper(site); + + } + + return _helper; + } + + #endregion + + #region Constructor + + public DesignTimeResourceHelper(ISite site) + { + _site = site; + } + + #endregion + + #region SetupInlineStyle + + + public void SetupInlineStyle() + { + //System.Web.UI.WebControls.Literal litStyle = new System.Web.UI.WebControls.Literal(); + //litStyle.ID = DESIGN_TIME_CONTROL_ID; + //litStyle.Text = GetInlineStyle(); + + ////_site.Container.Add(hiddenControl); + ////(_site.Container.Components[0] as Page).Controls.Add(litStyle); + //_site.Container.Add(litStyle); + + + + + //DesignTimeControl litStyle = new DesignTimeControl(); + //litStyle.ID = DESIGN_TIME_CONTROL_ID; + //////litStyle.Text = GetInlineStyle(); + + //////_site.Container.Add(hiddenControl); + //////(_site.Container.Components[0] as Page).Controls.Add(litStyle); + ////_site.Container.Add(litStyle); + + + //Page page = (_site.Container.Components[0] as Page); + + ////System.Web.UI.HtmlControls.HtmlHead header = + + // //page.Header = new System.Web.UI.HtmlControls.HtmlHead(); + + } + + /// <summary> + /// 设计时是否包含控件 + /// </summary> + /// <param name="componentID"></param> + /// <returns></returns> + private Control GetHiddenControl(string controlID) + { + foreach (IComponent com in _site.Container.Components) + { + Control c = com as Control; + if (c != null && c.ID == controlID) + { + return c; + } + } + + return null; + } + + + #endregion + + #region GetInlineStyle + + private string _styleContent = String.Empty; + + /// <summary> + /// 取得内联样式表 + /// </summary> + /// <returns></returns> + public string GetInlineStyle() + { + if (String.IsNullOrEmpty(_styleContent)) + { + StringBuilder sb = new StringBuilder(); + + sb.Append(GetStyleContent("FineUI.res.css.ext-all.css")); + + //if (AboutConfig.Theme.ToLower() == ConfigThemeValues.GRAY) + //{ + // sb.Append(GetStyleContent("FineUI.res.css.xtheme-gray.css")); + //} + // ux + sb.Append(GetStyleContent("FineUI.res.css.ux.css")); + + _styleContent = sb.ToString(); + } + + return String.Format(STYLE_BLOCK_TEMPLATE, _styleContent); + } + + + + /// <summary> + /// 取得样式的内容 + /// </summary> + /// <param name="resourceName"></param> + /// <returns></returns> + private string GetStyleContent(string resourceName) + { + using (StreamReader reader = new StreamReader(typeof(FineUI.ControlBase).Assembly.GetManifestResourceStream(resourceName))) + { + return ParseCssWebResourceUrls(reader.ReadToEnd()); + } + } + + /// <summary> + /// 转化 CSS 的内容 + /// </summary> + /// <param name="src"></param> + /// <returns></returns> + private string ParseCssWebResourceUrls(string resourceContent) + { + Regex regex = new Regex("<%=WebResource\\(\".*\\.(gif|png)*\"\\)%>"); + foreach (Match match in regex.Matches(resourceContent)) + { + string webResourceName = match.Value.Replace("<%=WebResource(\"", string.Empty).Replace("\")%>", string.Empty); + resourceContent = resourceContent.Replace(match.Value, String.Format("\"{0}\"", ResourceHelper.GetWebResourceUrl(_site, webResourceName))); + } + return resourceContent; + } + #endregion + } +} diff --git a/FineUI/Business/ResourceManager/ResourceHandler.cs b/FineUI/Business/ResourceManager/ResourceHandler.cs index 27bece0..e6f3a0d 100644 --- a/FineUI/Business/ResourceManager/ResourceHandler.cs +++ b/FineUI/Business/ResourceManager/ResourceHandler.cs @@ -1,190 +1,190 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Web; -using System.Reflection; -using System.IO; -using System.Drawing.Imaging; - -namespace FineUI -{ - /// <summary> - /// 资源处理程序 - /// </summary> - public class ResourceHandler : IHttpHandler - { - /// <summary> - /// 处理资源的请求 - /// </summary> - /// <param name="context">Http请求上下文</param> - public void ProcessRequest(HttpContext context) - { - string type = String.Empty; - string typeValue = String.Empty; - string extjsBasePath = GlobalConfig.GetExtjsBasePath(); - //resName = "FineUI."; - - - if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["icon"])) - { - type = "icon"; - } - //else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["js"])) - //{ - // type = "js"; - // //resName += "js." + typeValue; - //} - //else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["lang"])) - //{ - // type = "lang"; - // //resName += "js.lang." + typeValue; - //} - else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["theme"])) - { - // res.axd?theme=default.grid.refresh.gif - type = "theme"; - //resName += "res.theme." + typeValue; - } - //else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["css"])) - //{ - // type = "css"; - // //resName += "res.css." + typeValue; - //} - else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["img"])) - { - type = "img"; - //resName += "res.img." + typeValue; - } - else - { - context.Response.Write("Not supported!"); - return; - } - - //byte[] binary; - switch (type) - { - case "icon": - if (!typeValue.EndsWith(".png") && !typeValue.EndsWith(".gif")) - { - typeValue = IconHelper.GetName((Icon)Enum.Parse(typeof(Icon), typeValue)); - } - //resName += "res.icon." + typeValue; - string serverPath = String.Format("{0}/{1}", GlobalConfig.GetIconBasePath(), typeValue); - context.Response.WriteFile(context.Server.MapPath(serverPath)); - - context.Response.ContentType = "image/" + GetImageFormat(typeValue); - break; - //case "js": - // context.Response.Write(ResourceHelper.GetResourceContent(resName)); - // context.Response.ContentType = "text/javascript"; - //case "lang": - // context.Response.Write(ResourceHelper.GetResourceContent(resName)); - // context.Response.ContentType = "text/javascript"; - // break; - //case "css": - // context.Response.Write(ResourceHelper.GetResourceContent(resName)); - // context.Response.ContentType = "text/css"; - // break; - case "theme": - string themePath = ""; - string themeImageFormat = ""; - int lastDotIndex = typeValue.LastIndexOf("."); - if (lastDotIndex >= 0) - { - themePath = typeValue.Substring(0, lastDotIndex).Replace('.', '/'); - themeImageFormat = typeValue.Substring(lastDotIndex + 1); - } - - context.Response.WriteFile(context.Server.MapPath(String.Format("{0}/res/images/{1}.{2}", extjsBasePath, themePath, themeImageFormat))); - - context.Response.ContentType = "image/" + GetImageFormat(typeValue); - break; - case "img": - //binary = ResourceHelper.GetResourceContentAsBinary(resName); - //context.Response.OutputStream.Write(binary, 0, binary.Length); - //context.Response.ContentType = "image/" + GetImageFormat(resName); - - - context.Response.WriteFile(context.Server.MapPath(String.Format("{0}/res/images/{1}", extjsBasePath, typeValue))); - - context.Response.ContentType = "image/" + GetImageFormat(typeValue); - break; - } - - - // 缓存一年,只能通过改变 URL 来强制更新缓存 - context.Response.Cache.SetExpires(DateTime.Now.AddYears(1)); - context.Response.Cache.SetCacheability(HttpCacheability.Public); - } - - //private void RenderImage(HttpContext context, string resName) - //{ - // Assembly assembly = Assembly.GetExecutingAssembly(); - // using (Stream stream = assembly.GetManifestResourceStream(resName)) - // { - // using (System.Drawing.Image image = System.Drawing.Image.FromStream(stream)) - // { - // // PNG输出时出现“GDI+ 中发生一般性错误” - // using (MemoryStream ms = new MemoryStream()) - // { - // image.Save(ms, image.RawFormat); - // ms.WriteTo(context.Response.OutputStream); - // context.Response.ContentType = "image/" + GetImageFormat(image.RawFormat); - // } - // } - // } - //} - - private string GetImageFormat(string imageName) - { - int lastDotIndex = imageName.LastIndexOf("."); - if (lastDotIndex >= 0) - { - return imageName.Substring(lastDotIndex + 1); - } - return "png"; - } - - private string GetImageFormat(ImageFormat format) - { - if (format == ImageFormat.Bmp) - { - return "bmp"; - } - else if (format == ImageFormat.Gif) - { - return "gif"; - } - else if (format == ImageFormat.Jpeg) - { - return "jpeg"; - } - else if (format == ImageFormat.Png) - { - return "png"; - } - else if (format == ImageFormat.Tiff) - { - return "tiff"; - } - else if (format == ImageFormat.Icon) - { - return "icon"; - } - return "gif"; - } - - - /// <summary> - /// 只要请求的 URL 相同,则请求可以重用 - /// </summary> - public bool IsReusable - { - get - { - return true; - } - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Reflection; +using System.IO; +using System.Drawing.Imaging; + +namespace FineUI +{ + /// <summary> + /// 资源处理程序 + /// </summary> + public class ResourceHandler : IHttpHandler + { + /// <summary> + /// 处理资源的请求 + /// </summary> + /// <param name="context">Http请求上下文</param> + public void ProcessRequest(HttpContext context) + { + string type = String.Empty; + string typeValue = String.Empty; + string extjsBasePath = GlobalConfig.GetJSBasePath(); + //resName = "FineUI."; + + + if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["icon"])) + { + type = "icon"; + } + //else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["js"])) + //{ + // type = "js"; + // //resName += "js." + typeValue; + //} + //else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["lang"])) + //{ + // type = "lang"; + // //resName += "js.lang." + typeValue; + //} + else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["theme"])) + { + // res.axd?theme=default.grid.refresh.gif + type = "theme"; + //resName += "res.theme." + typeValue; + } + //else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["css"])) + //{ + // type = "css"; + // //resName += "res.css." + typeValue; + //} + else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["img"])) + { + type = "img"; + //resName += "res.img." + typeValue; + } + else + { + context.Response.Write("Not supported!"); + return; + } + + //byte[] binary; + switch (type) + { + case "icon": + if (!typeValue.EndsWith(".png") && !typeValue.EndsWith(".gif")) + { + typeValue = IconHelper.GetName((Icon)Enum.Parse(typeof(Icon), typeValue)); + } + //resName += "res.icon." + typeValue; + string serverPath = String.Format("{0}/{1}", GlobalConfig.GetIconBasePath(), typeValue); + context.Response.WriteFile(context.Server.MapPath(serverPath)); + + context.Response.ContentType = "image/" + GetImageFormat(typeValue); + break; + //case "js": + // context.Response.Write(ResourceHelper.GetResourceContent(resName)); + // context.Response.ContentType = "text/javascript"; + //case "lang": + // context.Response.Write(ResourceHelper.GetResourceContent(resName)); + // context.Response.ContentType = "text/javascript"; + // break; + //case "css": + // context.Response.Write(ResourceHelper.GetResourceContent(resName)); + // context.Response.ContentType = "text/css"; + // break; + case "theme": + string themePath = ""; + string themeImageFormat = ""; + int lastDotIndex = typeValue.LastIndexOf("."); + if (lastDotIndex >= 0) + { + themePath = typeValue.Substring(0, lastDotIndex).Replace('.', '/'); + themeImageFormat = typeValue.Substring(lastDotIndex + 1); + } + + context.Response.WriteFile(context.Server.MapPath(String.Format("{0}/res/images/{1}.{2}", extjsBasePath, themePath, themeImageFormat))); + + context.Response.ContentType = "image/" + GetImageFormat(typeValue); + break; + case "img": + //binary = ResourceHelper.GetResourceContentAsBinary(resName); + //context.Response.OutputStream.Write(binary, 0, binary.Length); + //context.Response.ContentType = "image/" + GetImageFormat(resName); + + + context.Response.WriteFile(context.Server.MapPath(String.Format("{0}/res/images/{1}", extjsBasePath, typeValue))); + + context.Response.ContentType = "image/" + GetImageFormat(typeValue); + break; + } + + + // 缓存一年,只能通过改变 URL 来强制更新缓存 + context.Response.Cache.SetExpires(DateTime.Now.AddYears(1)); + context.Response.Cache.SetCacheability(HttpCacheability.Public); + } + + //private void RenderImage(HttpContext context, string resName) + //{ + // Assembly assembly = Assembly.GetExecutingAssembly(); + // using (Stream stream = assembly.GetManifestResourceStream(resName)) + // { + // using (System.Drawing.Image image = System.Drawing.Image.FromStream(stream)) + // { + // // PNG输出时出现“GDI+ 中发生一般性错误” + // using (MemoryStream ms = new MemoryStream()) + // { + // image.Save(ms, image.RawFormat); + // ms.WriteTo(context.Response.OutputStream); + // context.Response.ContentType = "image/" + GetImageFormat(image.RawFormat); + // } + // } + // } + //} + + private string GetImageFormat(string imageName) + { + int lastDotIndex = imageName.LastIndexOf("."); + if (lastDotIndex >= 0) + { + return imageName.Substring(lastDotIndex + 1); + } + return "png"; + } + + private string GetImageFormat(ImageFormat format) + { + if (format == ImageFormat.Bmp) + { + return "bmp"; + } + else if (format == ImageFormat.Gif) + { + return "gif"; + } + else if (format == ImageFormat.Jpeg) + { + return "jpeg"; + } + else if (format == ImageFormat.Png) + { + return "png"; + } + else if (format == ImageFormat.Tiff) + { + return "tiff"; + } + else if (format == ImageFormat.Icon) + { + return "icon"; + } + return "gif"; + } + + + /// <summary> + /// 只要请求的 URL 相同,则请求可以重用 + /// </summary> + public bool IsReusable + { + get + { + return true; + } + } + } +} diff --git a/FineUI/Business/ResourceManager/ResourceHelper.cs b/FineUI/Business/ResourceManager/ResourceHelper.cs index a952991..3182008 100644 --- a/FineUI/Business/ResourceManager/ResourceHelper.cs +++ b/FineUI/Business/ResourceManager/ResourceHelper.cs @@ -1,231 +1,235 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ResourceHelper.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -using System.Web; -using System.Web.UI; -using System.Collections.Specialized; -using System.Collections; -using System.ComponentModel; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; - - -namespace FineUI -{ - /// <summary> - /// 资源帮助类 - /// </summary> - public static class ResourceHelper - { - #region GetWebResourceUrl - - /// <summary> - /// 获取嵌入资源的 res.axd 地址 - /// </summary> - /// <param name="resName">资源名称</param> - /// <returns>资源地址</returns> - public static string GetWebResourceUrlResAxd(string resName) - { - Page page = HttpContext.Current.CurrentHandler as Page; - if (page != null) - { - return GetWebResourceUrlResAxd(page, resName); - } - - return String.Empty; - } - - - /// <summary> - /// 获取嵌入资源的 res.axd 地址 - /// </summary> - /// <param name="page">页面对象</param> - /// <param name="resName">资源名称</param> - /// <returns>资源地址</returns> - public static string GetWebResourceUrlResAxd(Page page, string resName) - { - //return ResourceHelper.GetWebResourceUrl(page, resName); - string typeName = "", typeValue = ""; - - if (resName.StartsWith("FineUI.js.")) - { - if (resName.StartsWith("FineUI.js.lang.")) - { - typeName = "lang"; - typeValue = resName.Substring("FineUI.js.lang.".Length); - } - else - { - typeName = "js"; - typeValue = resName.Substring("FineUI.js.".Length); - } - } - else if (resName.StartsWith("FineUI.res.")) - { - if (resName.StartsWith("FineUI.res.css.")) - { - typeName = "css"; - typeValue = resName.Substring("FineUI.res.css.".Length); - } - else if (resName.StartsWith("FineUI.res.img.")) - { - typeName = "img"; - typeValue = resName.Substring("FineUI.res.img.".Length); - } - else if (resName.StartsWith("FineUI.res.theme.")) - { - typeName = "theme"; - typeValue = resName.Substring("FineUI.res.theme.".Length); - } - } - - if (!String.IsNullOrEmpty(typeName)) - { - return page.ResolveUrl(String.Format("~/res.axd?{0}={1}", typeName, typeValue)); - } - return null; - } - - /// <summary> - /// 获取嵌入资源的地址 - /// </summary> - /// <param name="resourceName">资源名称</param> - /// <returns>资源地址</returns> - public static string GetWebResourceUrl(string resourceName) - { - Page page = HttpContext.Current.CurrentHandler as Page; - if (page != null) - { - return GetWebResourceUrl(page, resourceName); - } - - return String.Empty; - } - - /// <summary> - /// 获取嵌入资源的地址 - /// </summary> - /// <param name="page">页面实例</param> - /// <param name="resourceName">资源名称</param> - /// <returns>资源地址</returns> - public static string GetWebResourceUrl(Page page, string resourceName) - { - string resourceUrl = String.Empty; - resourceUrl = page.ClientScript.GetWebResourceUrl(typeof(FineUI.ControlBase), resourceName); - - return resourceUrl; - } - - ///// <summary> - ///// 设计时嵌入资源url地址 - ///// </summary> - ///// <param name="site"></param> - ///// <param name="resourceName"></param> - ///// <returns></returns> - //public static string GetWebResourceUrl(ISite site, string resourceName) - //{ - // string resourceUrl = String.Empty; - // if (site != null) - // { - // IResourceUrlGenerator service = (IResourceUrlGenerator)site.GetService(typeof(IResourceUrlGenerator)); - // if (service != null) - // { - // resourceUrl = service.GetResourceUrl(site.Component.GetType(), resourceName); - // } - // } - - // //// 告诉HttpCompress,不要设置ETag,同时设置Expires为一年后的今天 - // //resourceUrl += "&expires=1"; - - // return resourceUrl; - //} - #endregion - - #region GetResourceContent - - /// <summary> - /// 取得资源的内容 - /// </summary> - /// <param name="resourceName">资源名称</param> - /// <returns>资源内容</returns> - public static string GetResourceContent(string resourceName) - { - string result = String.Empty; - using (StreamReader sr = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))) - { - result = sr.ReadToEnd(); - } - - return result; - } - - - /// <summary> - /// 取得资源的二进制内容 - /// </summary> - /// <param name="resourceName">资源名称</param> - /// <returns>资源的二进制内容</returns> - public static byte[] GetResourceContentAsBinary(string resourceName) - { - byte[] buf; - using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) - { - buf = new byte[stream.Length]; - stream.Read(buf, 0, buf.Length); - } - - return buf; - } - - - //public static string ResolveResourceContent(Page page, string resourceContent) - //{ - // Regex regex = new Regex(@"<%=WebResource\("".*\.(gif|png)*""\)%>"); - // MatchCollection matches = regex.Matches(resourceContent); - // foreach (Match match in matches) - // { - // string url = match.Value.Replace("<%=WebResource(\"", string.Empty).Replace("\")%>", string.Empty); - // resourceContent = resourceContent.Replace(match.Value, string.Format("{0}", GetWebResourceUrl(page, url))); - // } - - // return resourceContent; - //} - - #endregion - - /// <summary> - /// 获取空白图片的地址 - /// </summary> - /// <returns>空白图片的地址</returns> - public static string GetEmptyImageUrl() - { - return String.Format("{0}/res/s.gif", GlobalConfig.GetExtjsBasePath()); - } - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ResourceHelper.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +using System.Web; +using System.Web.UI; +using System.Collections.Specialized; +using System.Collections; +using System.ComponentModel; +using System.IO; +using System.Reflection; +using System.Text.RegularExpressions; + + +namespace FineUI +{ + /// <summary> + /// 资源帮助类 + /// </summary> + public static class ResourceHelper + { + #region GetWebResourceUrl + + /// <summary> + /// 获取嵌入资源的 res.axd 地址 + /// </summary> + /// <param name="resName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrlResAxd(string resName) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return GetWebResourceUrlResAxd(page, resName); + } + + return String.Empty; + } + + + /// <summary> + /// 获取嵌入资源的 res.axd 地址 + /// </summary> + /// <param name="page">页面对象</param> + /// <param name="resName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrlResAxd(Page page, string resName) + { + //return ResourceHelper.GetWebResourceUrl(page, resName); + string typeName = "", typeValue = ""; + + if (resName.StartsWith("FineUI.js.")) + { + if (resName.StartsWith("FineUI.js.lang.")) + { + typeName = "lang"; + typeValue = resName.Substring("FineUI.js.lang.".Length); + } + else + { + typeName = "js"; + typeValue = resName.Substring("FineUI.js.".Length); + } + } + else if (resName.StartsWith("FineUI.res.")) + { + if (resName.StartsWith("FineUI.res.css.")) + { + typeName = "css"; + typeValue = resName.Substring("FineUI.res.css.".Length); + } + else if (resName.StartsWith("FineUI.res.img.")) + { + typeName = "img"; + typeValue = resName.Substring("FineUI.res.img.".Length); + } + else if (resName.StartsWith("FineUI.res.theme.")) + { + typeName = "theme"; + typeValue = resName.Substring("FineUI.res.theme.".Length); + } + } + + if (!String.IsNullOrEmpty(typeName)) + { + return page.ResolveUrl(String.Format("~/res.axd?{0}={1}", typeName, typeValue)); + } + return null; + } + + /// <summary> + /// 获取嵌入资源的地址 + /// </summary> + /// <param name="resourceName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrl(string resourceName) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return GetWebResourceUrl(page, resourceName); + } + + return String.Empty; + } + + /// <summary> + /// 获取嵌入资源的地址 + /// </summary> + /// <param name="page">页面实例</param> + /// <param name="resourceName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrl(Page page, string resourceName) + { + string resourceUrl = String.Empty; + resourceUrl = page.ClientScript.GetWebResourceUrl(typeof(FineUI.ControlBase), resourceName); + + return resourceUrl; + } + + ///// <summary> + ///// 设计时嵌入资源url地址 + ///// </summary> + ///// <param name="site"></param> + ///// <param name="resourceName"></param> + ///// <returns></returns> + //public static string GetWebResourceUrl(ISite site, string resourceName) + //{ + // string resourceUrl = String.Empty; + // if (site != null) + // { + // IResourceUrlGenerator service = (IResourceUrlGenerator)site.GetService(typeof(IResourceUrlGenerator)); + // if (service != null) + // { + // resourceUrl = service.GetResourceUrl(site.Component.GetType(), resourceName); + // } + // } + + // //// 告诉HttpCompress,不要设置ETag,同时设置Expires为一年后的今天 + // //resourceUrl += "&expires=1"; + + // return resourceUrl; + //} + #endregion + + #region GetResourceContent + + /// <summary> + /// 取得资源的内容 + /// </summary> + /// <param name="resourceName">资源名称</param> + /// <returns>资源内容</returns> + public static string GetResourceContent(string resourceName) + { + string result = String.Empty; + using (StreamReader sr = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))) + { + result = sr.ReadToEnd(); + } + + return result; + } + + + /// <summary> + /// 取得资源的二进制内容 + /// </summary> + /// <param name="resourceName">资源名称</param> + /// <returns>资源的二进制内容</returns> + public static byte[] GetResourceContentAsBinary(string resourceName) + { + byte[] buf; + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) + { + buf = new byte[stream.Length]; + stream.Read(buf, 0, buf.Length); + } + + return buf; + } + + + //public static string ResolveResourceContent(Page page, string resourceContent) + //{ + // Regex regex = new Regex(@"<%=WebResource\("".*\.(gif|png)*""\)%>"); + // MatchCollection matches = regex.Matches(resourceContent); + // foreach (Match match in matches) + // { + // string url = match.Value.Replace("<%=WebResource(\"", string.Empty).Replace("\")%>", string.Empty); + // resourceContent = resourceContent.Replace(match.Value, string.Format("{0}", GetWebResourceUrl(page, url))); + // } + + // return resourceContent; + //} + + #endregion + + #region GetEmptyImageUrl + + /// <summary> + /// 获取空白图片的地址 + /// </summary> + /// <returns>空白图片的地址</returns> + public static string GetEmptyImageUrl() + { + return String.Format("{0}/res/s.gif", GlobalConfig.GetJSBasePath()); + } + + #endregion + } +} diff --git a/FineUI/Business/ResourceManager/ResourceManager.cs b/FineUI/Business/ResourceManager/ResourceManager.cs index 47869ae..d3c2860 100644 --- a/FineUI/Business/ResourceManager/ResourceManager.cs +++ b/FineUI/Business/ResourceManager/ResourceManager.cs @@ -1,1030 +1,1129 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ResourceManager.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Configuration; -using System.Reflection; -using System.Collections; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - - -namespace FineUI -{ - /// <summary> - /// 存在 Page.Items 上下文中,向页面注册资源 - /// </summary> - internal class ResourceManager - { - #region static fields - - public static readonly string RESOURCE_MANAGER_CONTEXT_NAME = "ResourceManagerContextName"; - - //public static readonly string BLANK_IMAGE_RESOURCE_NAME = "FineUI.res.img.s.gif"; - //public static readonly string BLANK_IMAGE_TEMPLATE = "Ext.BLANK_IMAGE_URL='{0}';"; - //public static readonly string SCRIPT_ONREADY_TEMPLATE = "window.box=new (function(){this._onReady=function(){window.box_page_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#};Ext.onReady(function(){this._onReady();},this);})();" + DEBUG_LINE_BREAK; - //public static readonly string SCRIPT_ONREADY_TEMPLATE = "Ext.onReady(function(){window.boxPage_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#});" + DEBUG_LINE_BREAK; - //public static readonly string SCRIPT_ONREADY_TEMPLATE = "window.box=new (function(){this._onReady=function(){window.boxPage_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#};this._onReady();})();" + DEBUG_LINE_BREAK; - - // Ext.onReady(function(){window.startOnReady2=new Date();}); - //public static readonly string WINDOW_DEFAULT_GROUP_ID = "X.window_default_group"; - //public static readonly string COOKIE_PROVIDER_ID = "X.cookie_provider"; - //public static readonly string HIDDEN_FIELDS_ID = "X.hiddenFields"; - - - public static readonly string PAGE_STATE_CHANGED_ID = "X_CHANGED"; - - // 在FineUI-Utility.js中被使用,不要修改 - public static readonly string DISABLED_CONTROL_BEFORE_POSTBACK = "X_TARGET"; - - - - //public static readonly string DISABLE_AJAX_CONTROL_ID = "__box_disable_ajax_control_id"; - - //public static readonly string CREATE_EXT_OBJECT_PREFIX = "box_destroyObject(X.{0});"; - - //public static readonly string PRELOAD_IMAGES_ID = "X.preload_images"; - - #endregion - - #region fields - - private List<AbsoluteScriptBlock> _startupAbsoluteScriptBlockList = new List<AbsoluteScriptBlock>(); - public List<AbsoluteScriptBlock> StartupAbsoluteScriptBlockList - { - get { return _startupAbsoluteScriptBlockList; } - set { _startupAbsoluteScriptBlockList = value; } - } - - private List<ScriptBlock> _startupScriptBlockList = new List<ScriptBlock>(); - public List<ScriptBlock> StartupScriptBlockList - { - get { return _startupScriptBlockList; } - set { _startupScriptBlockList = value; } - } - - /// <summary> - /// 需要向页面注册的样式列表 - /// </summary> - private Dictionary<string, string> _startupCssDic = new Dictionary<string, string>(); - - - - //private List<string> _javascriptComponentList = new List<string>(); - ///// <summary> - ///// 页面需要的JavaScript组件列表 - ///// </summary> - //public List<string> JavaScriptComponentList - //{ - // get { return _javascriptComponentList; } - // set { _javascriptComponentList = value; } - //} - - - - private List<string> _ajaxScriptList = new List<string>(); - /// <summary> - /// AJAX时每个控件需要注册的脚本 - /// </summary> - public List<string> AjaxScriptList - { - get { return _ajaxScriptList; } - set { _ajaxScriptList = value; } - } - - - private List<string> _ajaxAbsoluteScriptList = new List<string>(); - /// <summary> - /// AJAX时不依赖控件的脚本 - /// </summary> - public List<string> AjaxAbsoluteScriptList - { - get { return _ajaxAbsoluteScriptList; } - set { _ajaxAbsoluteScriptList = value; } - } - - - private Dictionary<string, string> _ajaxShortNameList = new Dictionary<string, string>(); - /// <summary> - /// AJAX时使用到的所有短名称列表 - /// 比如:X('SimpleForm1_tbxUserName') -> cmp0 - /// X('SimpleForm1_tbxPassword') -> cmp1 - /// </summary> - public Dictionary<string, string> AjaxShortNameList - { - get { return _ajaxShortNameList; } - set { _ajaxShortNameList = value; } - } - - public void AddAjaxShortName(string scriptid, string xid) - { - if (!_ajaxShortNameList.ContainsKey(scriptid)) - { - _ajaxShortNameList.Add(scriptid, xid); - } - } - - - #endregion - - #region Instance - - public ResourceManager() - { - _page = HttpContext.Current.Handler as Page; - _page.PreRenderComplete += new EventHandler(Page_PreRenderComplete); - } - - private Page _page = null; - public Page Page - { - get - { - return _page; - } - } - - - /// <summary> - /// 取得 ResourceManager 的实例,单件模式 - /// </summary> - public static ResourceManager Instance - { - get - { - ResourceManager rm = HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] as ResourceManager; - if (rm == null) - { - rm = new ResourceManager(); - HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] = rm; - } - - return rm; - } - } - - #endregion - - #region Page_PreRenderComplete - - /// <summary> - /// 准备呈现页面内容,在保存页面状态之前 - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - protected void Page_PreRenderComplete(object sender, EventArgs e) - { - // 如果是 FineUI 的Ajax - if (IsFineUIAjaxPostBack) - { - // 注意:这里不能设置 text/html,因为有上传控件时,会把返回的内容放在IFRAME中模拟Ajax过程。 - //HttpContext.Current.Response.ContentType = "text/plain"; - HttpContext.Current.Trace.IsEnabled = false; - HttpContext.Current.Response.ContentType = "text/plain"; - //HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; - //HttpContext.Current.Response.Charset = "UTF-8"; - HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); - - FineUI.ResponseFilter filter = new FineUI.ResponseFilter(HttpContext.Current.Response.Filter); - HttpContext.Current.Response.Filter = filter; - } - else - { - SetupFirstLoadResource(); - } - } - - #endregion - - #region SetupFirstLoadResource - - /// <summary> - /// 注册页面第一次加载时的样式和脚本 - /// </summary> - private void SetupFirstLoadResource() - { - // 页头注册公共CSS/Javascript - CommonResourceHelper.RegisterCommonResource(Page); - - // 注册样式 - RegisterStartupCss(); - - // 注册脚本 - RegisterStartupScript(); - } - - - private void RegisterStartupCss() - { - if (_startupCssDic.Count > 0) - { - StringBuilder sb = new StringBuilder(); - foreach (string value in _startupCssDic.Values) - { - sb.Append(value); - } - CommonResourceHelper.RegisterHeaderCSS(Page, sb.ToString()); - } - - } - - /// <summary> - /// 注册页面脚本 - /// </summary> - public void RegisterStartupScript() - { - #region oldcode - 不支持Asp.net AJAX - - //if (IsAspNetAjaxPostBack) - //{ - // #region 局部回发 - // // 局部回发 - // for (int i = 0, count = sortedList.Count; i < count; i++) - // { - // Control control = sortedList[i].Control as Control; - // string scriptContent = sortedList[i].Script; - - // // 如果要注册脚本为空,则跳过 - // if (String.IsNullOrEmpty(scriptContent)) - // { - // continue; - // } - - // // 换行符去掉 - // scriptContent = scriptContent.Replace("\r\n", ""); - - // if (control != null) - // { - // // 如果脚本关联的有控件,则注册脚本(控件级别) - // string scriptKey = "partial_postback_script_" + control.ID; - // AjaxScriptManagerRegisterStartupScript(control, scriptKey, scriptContent); - // } - // else - // { - // // 如果脚本关联的没有控件,则注册脚本(页面级别) - // string scriptKey = "partial_postback_script_" + Math.Abs(scriptContent.GetHashCode()).ToString(); - // AjaxScriptManagerRegisterStartupScript(Page, scriptKey, scriptContent); - // } - // } - - // if (PageManager.Instance.ExecuteOnReadyWhenPostBack) - // { - // // 每次ajax调用后都要调用onReady脚本 - // AjaxScriptManagerRegisterStartupScript(Page, "onReady", "if(typeof(onReady)=='function'){onReady();}"); - // } - // #endregion - //} - //else - //{ - //} - - #endregion - - // 页面第一次加载 或者 页面回发 - List<ScriptBlock> sortedList = GetSortedControlScriptList(); - StringBuilder sb = new StringBuilder(); - foreach (ScriptBlock controlScript in sortedList) - { - if (controlScript.Script.Trim() != "") - { - sb.AppendFormat("{0}", controlScript.Script); - } - } - - string scriptContent = GetStartupScript(sb.ToString()); - - // 格式化输入 JavaScript 脚本 - if (GlobalConfig.GetDebugMode()) - { - JSBeautifyLib.JSBeautify jsb = new JSBeautifyLib.JSBeautify(scriptContent, - new JSBeautifyLib.JSBeautifyOptions()); - - scriptContent = jsb.GetResult(); - } - - Page.ClientScript.RegisterStartupScript(Page.GetType(), "page_startup_script", scriptContent, true); - } - - #endregion - - #region GetStartupScript - - /// <summary> - /// 是否注册startup脚本 - /// </summary> - /// <param name="scriptKey"></param> - /// <returns></returns> - private bool IsStartupScriptRegistered(string scriptKey) - { - return Page.ClientScript.IsStartupScriptRegistered(scriptKey); - } - - /// <summary> - /// 取得页面初始化时脚本 - /// </summary> - /// <param name="script"></param> - /// <returns></returns> - private string GetStartupScript(string script) - { - #region beforeBuilder - - StringBuilder beforeBuilder = new StringBuilder(); - - beforeBuilder.Append("X.init();"); - - // ExtJS2.2的BUG,Ext.onReady会被调用两次(在ExtJS 2.2.1中已经修正) - // Ext.onReady在extjsv3.1.0中依然有问题,在IE下有时会导致页面空白,不能继续执行,只有在点击Stop按钮或者重新刷新后才行。 - // http://www.extjs.net/forum/showthread.php?t=69437 - // http://www.extjs.com/forum/showthread.php?p=347524#post347524 - // https://extjs.net/forum/showthread.php?t=86948 - //beforeBuilder.Append("if(X.initialized){return;}X.initialized=true;"); - - // 空白图片,只在 IE6 和 IE7 下设置(默认为 http://www.sencha.com/s.gif ),其他浏览器下使用 data URL - //beforeBuilder.AppendFormat("if(Ext.isIE6||Ext.isIE7){{Ext.BLANK_IMAGE_URL='{0}';}}", ResourceHelper.GetWebResourceUrl("FineUI.res.img.s.gif")); - - //beforeBuilder.Append("X.util.init();"); - - // form 相关配置 - //beforeBuilder.Append("var fieldPro=Ext.form.Base.prototype;"); - //beforeBuilder.AppendFormat("fieldPro.msgTarget='{0}';", MsgTargetHelper.GetName(PageManager.Instance.FormMessageTarget)); - //beforeBuilder.AppendFormat("fieldPro.labelWidth={0};", PageManager.Instance.FormLabelWidth.Value); - //beforeBuilder.AppendFormat("fieldPro.labelSeparator='{0}';", PageManager.Instance.FormLabelSeparator); - beforeBuilder.AppendFormat("X.util.init('{0}',{1},'{2}','{3}',{4},'{5}',{6},'{7}');", - MessageTargetHelper.GetName(PageManager.Instance.FormMessageTarget), - PageManager.Instance.FormLabelWidth.Value, - PageManager.Instance.FormLabelSeparator, - //PageManager.Instance.EnableBigFont.ToString().ToLower(), - Page.ResolveUrl(ResourceHelper.GetEmptyImageUrl()), //String.Format("{0}/res/images/s.gif", GlobalConfig.GetExtjsBasePath())), //ResourceHelper.GetWebResourceUrlResAxd("FineUI.res.img.s.gif&v=1"), - //PageManager.Instance.EnableAspnetSubmitButtonAjax.ToString().ToLower(), - PageManager.Instance.EnableAjaxLoading.ToString().ToLower(), - AjaxLoadingTypeName.GetName(PageManager.Instance.AjaxLoadingType), - PageManager.Instance.EnableAjax.ToString().ToLower(), - ThemeHelper.GetName(PageManager.Instance.Theme) - ); - - if (PageManager.Instance.BeforeAjaxPostBackScript != String.Empty) - { - beforeBuilder.AppendFormat("X.util.beforeAjaxPostBackScript=function(){{{0}}};", PageManager.Instance.BeforeAjaxPostBackScript); - } - - //beforeBuilder.Append("X.ajax.hookPostBack();"); - - if (PageManager.Instance.EnableAjax) - { - if (PageManager.Instance.AjaxTimeout != ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT) - { - beforeBuilder.AppendFormat("Ext.Ajax.timeout={0};", PageManager.Instance.AjaxTimeout * 1000); - } - } - - //if (PageManager.Instance.EnableBigFont) - //{ - // beforeBuilder.Append("Ext.getBody().addCls('bigfont');"); - //} - - - // WindowGroup - //beforeBuilder.AppendFormat("{0}=new Ext.WindowGroup();{0}.zseed=6000;", WINDOW_DEFAULT_GROUP_ID); - - //// CookieProvider - //beforeBuilder.AppendFormat("{0}=new Ext.state.CookieProvider();", COOKIE_PROVIDER_ID); - - //// HiddenFields - //beforeBuilder.AppendFormat("{0}=[];", HIDDEN_FIELDS_ID); - - // 保存页面中可输入的表单字段状态是否发生变化的隐藏字段 - //innderBuilder.AppendFormat("var sn=document.createElement('input');sn.type='hidden';sn.value='false';sn.id=sn.name='{0}';Ext.getBody().query('form')[0].appendChild(sn);", PAGE_STATE_CHANGED_ID); - //innderBuilder.AppendFormat("Ext.DomHelper.append(document.forms[0],{{tag:'input',type:'hidden',value:'false',id:'{0}',name:'{0}'}});", PAGE_STATE_CHANGED_ID); - //beforeBuilder.AppendFormat("X.util.setHiddenFieldValue('{0}','false');", PAGE_STATE_CHANGED_ID); - - // 5.预加载图片 - //beforeBuilder.AppendFormat("{0}=[];", PRELOAD_IMAGES_ID); - //beforeBuilder.AppendFormat("{0}.push('{1}');", PRELOAD_IMAGES_ID, ResourceHelper.GetWebResourceUrl(Page, "FineUI.res.img.default.form.error-tip-corners.gif")); - //beforeBuilder.AppendFormat("box_preloadImages({0});", PRELOAD_IMAGES_ID); - - #endregion - - #region afterBuilder - - StringBuilder afterBuilder = new StringBuilder(); - - //afterBuilder.Append("\r\n"); - - // 注册隐藏字段 - //string hiddenFieldScript = "var itemNode=Ext.get(item[0]);if(itemNode==null){Ext.DomHelper.append(document.forms[0],{tag:'input',type:'hidden',value:item[1],id:item[0],name:item[0]});}else{itemNode.dom.value=item[1];}"; - //afterBuilder.AppendFormat("Ext.each({0},function(item){{{1}}},box);", HIDDEN_FIELDS_ID, hiddenFieldScript); - //afterBuilder.Append("box_alertDEBUG();"); - - //afterBuilder.Append("if(typeof(onReady)==='function'){onReady.call(window);}"); - afterBuilder.Append("X.ready();"); - //// 如果是回发并且允许回发注册onReady脚本 - //if (!Page.IsPostBack || (Page.IsPostBack && PageManager.Instance.ExecuteOnReadyWhenPostBack)) - //{ - // afterBuilder.Append("if(typeof(onReady)==='function'){onReady.call(window);}"); - //} - //afterBuilder.Append("\r\n"); - - //#if DEBUG - // afterBuilder.Append("window.x_render_end_time = new Date();"); - //#endif - #endregion - - - // 需要注册script - //string contentScript = String.Format("EXTASPNET_READY=function(){{{0}}};", beforeBuilder.ToString() + script + afterBuilder.ToString()); - //contentScript += "Ext.onReady(EXTASPNET_READY);";//Ext.EventManager.on(window,'onload',function(){EXTASPNET_READY();});";//if(Ext.isIE){}else{Ext.onReady(EXTASPNET_READY);}"; - string contentScript = String.Format("Ext.onReady(function(){{{0}}});", beforeBuilder.ToString() + script + afterBuilder.ToString()); - //#if DEBUG - // contentScript += "var x_end_time=new Date();"; - //#endif - - #region RELEASE模式下去除换行符 - - if (!GlobalConfig.GetDebugMode()) - { - contentScript = contentScript.Replace("\r\n", ""); - } - - #endregion - - return contentScript; - } - - - - /// <summary> - /// 返回经过排序的 _startupControlScriptList 列表,子控件排在父控件的前面 - /// </summary> - /// <returns></returns> - internal List<ScriptBlock> GetSortedControlScriptList() - { - List<ScriptBlock> result = new List<ScriptBlock>(); - - #region old code - - //if (!String.IsNullOrEmpty(_exclusiveScript)) - //{ - // result.Add(new ScriptBlock(null, _exclusiveScript)); - - // return result; - //} - - #endregion - - #region 1.插入AbsoluteScript(Level<0) - - // Level的正值和负值的分割点 - int levelZeroIndex = 0; - - // 插入所有 Control 为 null 的记录 - for (levelZeroIndex = 0; levelZeroIndex < _startupAbsoluteScriptBlockList.Count; levelZeroIndex++) - { - AbsoluteScriptBlock controlScript = _startupAbsoluteScriptBlockList[levelZeroIndex]; - - if (controlScript.Level < 0) - { - //#if DEBUG - // controlScript.Script = controlScript.Script; - //#endif - result.Add(new ScriptBlock(null, controlScript.Script)); - } - else - { - break; - } - } - - #endregion - - #region 2.排序,子控件排在父控件的前面 - - for (int i = 0, count = _startupScriptBlockList.Count; i < count; i++) - { - ScriptBlock controlScript = _startupScriptBlockList[i]; - - // Alert 静态类的 Control 为null - if (controlScript.Control == null) - { - // 如果 Control 为null,则不处理这条记录 - continue; - } - - int insertIndex = GetInsertIndex(controlScript.Control, result); - - #region old code - //#if DEBUG - // // 在JS脚本前面增加 \t ,这样层次关系明显一点 - // controlScript.Script = GetLineBreakString(insertIndex, result) + controlScript.Script; - //#endif - #endregion - - - //#if DEBUG - // if (!String.IsNullOrEmpty(controlScript.Script)) controlScript.Script = "\r\n" + controlScript.Script; - // if (!String.IsNullOrEmpty(controlScript.ExtraScript)) controlScript.ExtraScript = "\r\n" + controlScript.ExtraScript; - //#endif - - - result.Insert(insertIndex, controlScript); - } - - #endregion - - #region 计算渲染时间 - - //string timeScript ="X.endDateTime=new Date();"; - //string totalTime = "'FineUI渲染时间:'+X.endDateTime.getElapsed(X.startDateTime)+'ms'"; - //totalTime += "+'['+X.startPageLayoutDateTime.getElapsed(X.startDateTime)+','"; - //totalTime += "+X.endPageLayoutDateTime.getElapsed(X.startPageLayoutDateTime)+']'"; - //timeScript += String.Format("if(!X.startPageLayoutDateTime){{X.startPageLayoutDateTime=X.endPageLayoutDateTime=X.endDateTime;}}if(window.location.href.indexOf('DEBUG')>0){{alert({0});}}", totalTime); - - //result.Add(new ScriptBlock(null, "box_alertDEBUG();")); - - #endregion - - #region 4.插入AbsoluteScript(Level>0) - - // 插入所有 Control 为 null 的记录 - for (levelZeroIndex = 0; levelZeroIndex < _startupAbsoluteScriptBlockList.Count; levelZeroIndex++) - { - AbsoluteScriptBlock controlScript = _startupAbsoluteScriptBlockList[levelZeroIndex]; - - if (controlScript.Level >= 0) - { - //#if DEBUG - // controlScript.Script = "\r\n" + controlScript.Script; - //#endif - - result.Add(new ScriptBlock(null, controlScript.Script)); - } - } - - #endregion - - return result; - } - - #region GetLineBreakString - - ///// <summary> - ///// 取得要插入位置的 换行前缀 - ///// </summary> - ///// <param name="insertIndex"></param> - ///// <param name="list"></param> - ///// <returns></returns> - //private string GetLineBreakString(int insertIndex, List<ScriptBlock> list) - //{ - // if (insertIndex == list.Count) - // { - // return DEBUG_LINE_BREAK; - // } - // else - // { - // return "\r\n" + '\t' + GetStringPrefix(list[insertIndex].Script); - // } - //} - - ///// <summary> - ///// 取得字符串的换行前缀 - ///// </summary> - ///// <param name="script"></param> - ///// <returns></returns> - //private string GetStringPrefix(string script) - //{ - // StringBuilder sb = new StringBuilder(); - // for (int i = 2, count = script.Length; i < count; i++) - // { - // if (script[i] == '\t') - // { - // sb.Append("\t"); - // } - // else - // { - // break; - // } - // } - - // return sb.ToString(); - //} - - #endregion - - #region GetInsertIndex - - /// <summary> - /// 取得应该将Script插入的位置 - /// modified by 30372245@qq.com, 要能够向上回溯,因为控件A的父的父控件可能不存在列表中 - /// </summary> - /// <param name="testControl"></param> - /// <param name="testList"></param> - /// <returns></returns> - private int GetInsertIndex(Control testControl, List<ScriptBlock> testList) - { - int returnIndex = testList.Count; - - Control parentControl = testControl.Parent; - // 如果父控件不是HtmlForm - while (parentControl != null && !(parentControl is System.Web.UI.HtmlControls.HtmlForm)) - { - for (int i = 0, count = testList.Count; i < count; i++) - { - Control existControl = testList[i].Control; - - // 如果existControl不为空 - if (existControl != null && parentControl.ID == existControl.ID) - { - return i; - } - } - - parentControl = parentControl.Parent; - } - - - return returnIndex; - } - - ///// <summary> - ///// 测试testControl 是否 existControl的子控件 - ///// </summary> - ///// <param name="testControl"></param> - ///// <param name="existControl"></param> - ///// <returns></returns> - //private bool IsTestControlChildOf(Control testControl, Control existControl) - //{ - // bool result = false; - - // Control parentControl = testControl.Parent; - - // // 如果父控件不是HtmlForm - // while (!(parentControl is System.Web.UI.HtmlControls.HtmlForm)) - // { - - // } - //} - - #endregion - - #endregion - - #region AddStartupCSS - - /// <summary> - /// 添加样式 - /// </summary> - /// <param name="key"></param> - /// <param name="cssConent"></param> - /// <returns></returns> - public void AddStartupCSS(string key, string cssConent) - { - // 如果已经包含Key的样式已经存在,则覆盖 - if (_startupCssDic.ContainsKey(key)) - { - _startupCssDic[key] = cssConent; - } - else - { - _startupCssDic.Add(key, cssConent); - } - - //// 内容有相同的 - //foreach (string name in _startupCssDic.Keys) - //{ - // if (_startupCssDic[name] == cssConent) - // { - // return name; - // } - //} - } - - /// <summary> - /// 删除已经添加的CSS样式 - /// </summary> - /// <param name="key"></param> - public void RemoveStartupCSS(string key) - { - if (_startupCssDic.ContainsKey(key)) - { - _startupCssDic.Remove(key); - } - } - - #endregion - - #region AddAbsoluteStartupScript - - public void AddAbsoluteStartupScript(string script) - { - AddAbsoluteStartupScript(script, 100); - } - - public void AddAbsoluteStartupScript(string script, int level) - { - AbsoluteScriptBlock scriptBlock = new AbsoluteScriptBlock(script, level); - - for (int i = 0; i < _startupAbsoluteScriptBlockList.Count; i++) - { - AbsoluteScriptBlock currentScript = _startupAbsoluteScriptBlockList[i]; - if (scriptBlock.Level < currentScript.Level) - { - _startupAbsoluteScriptBlockList.Insert(i, scriptBlock); - return; - } - } - - _startupAbsoluteScriptBlockList.Add(scriptBlock); - } - - #endregion - - #region AddStartupScript/IsStartupScriptExist - - //public void AddJavaScriptComponent(string component) - //{ - // if (!_javascriptComponentList.Contains(component)) - // { - // _javascriptComponentList.Add(component); - // } - //} - - public void AddStartupScript(Control control, string script) - { - AddStartupScript(control, script, String.Empty); - } - - /// <summary> - /// 添加脚本 - /// 相同控件的脚本合并在一起(30372245@qq.com 2008-7-4) - /// </summary> - /// <param name="control"></param> - /// <param name="script"></param> - /// <param name="extraScript"></param> - public void AddStartupScript(Control control, string script, string extraScript) - { - ScriptBlock cs = new ScriptBlock(control, script); - - //// modified by leizhang5 @2008-6-2 - //// 如果control == null, 则后添加的脚本先渲染(也就是说:子控件相关的脚本先于父控件执行) - //if (control == null) - //{ - // _startupScriptBlockList.Insert(0, cs); - //} - //else - //{ - ScriptBlock existBlock = GetStartupScript(control); - if (existBlock == null) - { - _startupScriptBlockList.Add(cs); - } - else - { - existBlock.Script += script; - existBlock.ExtraScript += extraScript; - } - //} - } - - - /// <summary> - /// 控件control的注册脚本是否存在 - /// </summary> - /// <param name="control"></param> - /// <returns></returns> - public bool IsStartupScriptExist(Control control) - { - foreach (ScriptBlock cs in _startupScriptBlockList) - { - if (cs.Control == control) - { - return true; - } - } - - return false; - } - - - public ScriptBlock GetStartupScript(Control control) - { - foreach (ScriptBlock cs in _startupScriptBlockList) - { - if (cs.Control == control) - { - return cs; - } - } - - return null; - } - - - public void RemoveStartupScript(Control control) - { - for (int i = 0; i < _startupScriptBlockList.Count; i++) - { - if (_startupScriptBlockList[i].Control == control) - { - _startupScriptBlockList.RemoveAt(i); - break; - } - } - } - - #endregion - - #region PostBackStates - - private JObject _requestState = null; - - public JObject PostBackStates - { - get - { - if (_requestState == null && Page.IsPostBack) - { - //string state = HttpUtility.UrlDecode(HttpContext.Current.Request.Form["X_STATE"]); - string state = HttpContext.Current.Request.Form["X_STATE"]; - string xstateURI = HttpContext.Current.Request.Form["X_STATE_URI"]; - if (!String.IsNullOrEmpty(state)) - { - if (String.IsNullOrEmpty(xstateURI)) - { - state = DecodeFrom64(state); - } - else - { - state = HttpUtility.UrlDecode(state); - } - } - - if (String.IsNullOrEmpty(state)) - { - state = "{}"; - } - _requestState = JObject.Parse(state); - } - return _requestState; - } - } - - private string DecodeFrom64(string encodedData) - { - byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); - return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); - } - - private string EncodeTo64(string toEncode) - { - byte[] toEncodeAsBytes = System.Text.UTF8Encoding.UTF8.GetBytes(toEncode); - return System.Convert.ToBase64String(toEncodeAsBytes); - } - - #endregion - - #region IsFineUIAjaxPostBack - - public bool IsFineUIAjaxPostBack - { - get - { - return HttpContext.Current.Request.Form["X_AJAX"] == "true"; - } - } - - #endregion - - #region oldcode - we don't support Asp.Net Ajax - - ///// <summary> - ///// 注册脚本 - 控件级别 - ///// </summary> - ///// <param name="control"></param> - ///// <param name="scriptKey"></param> - ///// <param name="scriptContent"></param> - //public void AjaxScriptManagerRegisterStartupScript(Control control, string scriptKey, string scriptContent) - //{ - // object scriptManagerInstance = GetAjaxScriptManagerInstance(); - - // if (scriptManagerInstance != null) - // { - // Type[] types = new Type[] { typeof(Control), typeof(Type), typeof(string), typeof(string), typeof(bool) }; - // MethodInfo method = scriptManagerInstance.GetType().GetMethod("RegisterStartupScript", types); - // object[] parameters = new object[] { control, control.GetType(), scriptKey, scriptContent, true }; - // method.Invoke(scriptManagerInstance, parameters); - // } - //} - - ///// <summary> - ///// 注册脚本 - 页面级别 - ///// </summary> - ///// <param name="control"></param> - ///// <param name="scriptKey"></param> - ///// <param name="scriptContent"></param> - //public void AjaxScriptManagerRegisterStartupScript(Page page, string scriptKey, string scriptContent) - //{ - // object scriptManagerInstance = GetAjaxScriptManagerInstance(); - - // if (scriptManagerInstance != null) - // { - // Type[] types = new Type[] { typeof(Page), typeof(Type), typeof(string), typeof(string), typeof(bool) }; - // MethodInfo method = scriptManagerInstance.GetType().GetMethod("RegisterStartupScript", types); - // object[] parameters = new object[] { page, page.GetType(), scriptKey, scriptContent, true }; - // method.Invoke(scriptManagerInstance, parameters); - // } - //} - - /////// <summary> - /////// 是否局部回发 - /////// 这种方法也是也可以的 - /////// </summary> - /////// <returns></returns> - ////public static bool IsPartialPostBack() - ////{ - //// if (HttpContext.Current != null && HttpContext.Current.Request != null) - //// { - //// string ajaxValue = HttpContext.Current.Request.Headers["X-MicrosoftAjax"]; - - //// if (!String.IsNullOrEmpty(ajaxValue) && ajaxValue.ToLower().Contains("delta=true")) - //// { - //// return true; - //// } - //// } - - //// return false; - ////} - - ///// <summary> - ///// 当前是否局部回发 - ///// </summary> - ///// <param name="page"></param> - ///// <returns></returns> - //public bool IsAspNetAjaxPostBack - //{ - // get - // { - // object scriptManagerInstance = GetAjaxScriptManagerInstance(); - - // if (scriptManagerInstance != null) - // { - // PropertyInfo pInfo = scriptManagerInstance.GetType().GetProperty("IsInAsyncPostBack"); - - // object isInAsyncPostBackObj = pInfo.GetValue(scriptManagerInstance, null); - - // if (Convert.ToBoolean(isInAsyncPostBackObj)) - // { - // return true; - // } - // } - - // return false; - // } - //} - - ///// <summary> - ///// 包含的 System.Web.UI.ScriptManager 实例 - ///// </summary> - ///// <returns></returns> - //public object GetAjaxScriptManagerInstance() - //{ - // foreach (DictionaryEntry entry in Page.Items) - // { - // if (entry.Key.ToString().Contains("System.Web.UI.ScriptManager")) - // { - // return entry.Value; - // } - // } - - // return null; - //} - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ResourceManager.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Configuration; +using System.Reflection; +using System.Collections; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI +{ + /// <summary> + /// 存在 Page.Items 上下文中,向页面注册资源 + /// </summary> + internal class ResourceManager + { + #region static fields + + public static readonly string RESOURCE_MANAGER_CONTEXT_NAME = "ResourceManagerContextName"; + + //public static readonly string BLANK_IMAGE_RESOURCE_NAME = "FineUI.res.img.s.gif"; + //public static readonly string BLANK_IMAGE_TEMPLATE = "Ext.BLANK_IMAGE_URL='{0}';"; + //public static readonly string SCRIPT_ONREADY_TEMPLATE = "window.box=new (function(){this._onReady=function(){window.box_page_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#};Ext.onReady(function(){this._onReady();},this);})();" + DEBUG_LINE_BREAK; + //public static readonly string SCRIPT_ONREADY_TEMPLATE = "Ext.onReady(function(){window.boxPage_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#});" + DEBUG_LINE_BREAK; + //public static readonly string SCRIPT_ONREADY_TEMPLATE = "window.box=new (function(){this._onReady=function(){window.boxPage_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#};this._onReady();})();" + DEBUG_LINE_BREAK; + + // Ext.onReady(function(){window.startOnReady2=new Date();}); + //public static readonly string WINDOW_DEFAULT_GROUP_ID = "F.window_default_group"; + //public static readonly string COOKIE_PROVIDER_ID = "F.cookie_provider"; + //public static readonly string HIDDEN_FIELDS_ID = "F.hiddenFields"; + + + public static readonly string PAGE_STATE_CHANGED_ID = "F_CHANGED"; + + // 在FineUI-Utility.js中被使用,不要修改 + public static readonly string DISABLED_CONTROL_BEFORE_POSTBACK = "F_TARGET"; + + + + //public static readonly string DISABLE_AJAX_CONTROL_ID = "__box_disable_ajax_control_id"; + + //public static readonly string CREATE_EXT_OBJECT_PREFIX = "box_destroyObject(X.{0});"; + + //public static readonly string PRELOAD_IMAGES_ID = "F.preload_images"; + + #endregion + + #region fields + + private bool _isPageInitCompleted = false; + + public bool IsPageInitCompleted + { + get { return _isPageInitCompleted; } + set { _isPageInitCompleted = value; } + } + + + + private List<AbsoluteScriptBlock> _startupAbsoluteScriptBlockList = new List<AbsoluteScriptBlock>(); + public List<AbsoluteScriptBlock> StartupAbsoluteScriptBlockList + { + get { return _startupAbsoluteScriptBlockList; } + set { _startupAbsoluteScriptBlockList = value; } + } + + private List<ScriptBlock> _startupScriptBlockList = new List<ScriptBlock>(); + public List<ScriptBlock> StartupScriptBlockList + { + get { return _startupScriptBlockList; } + set { _startupScriptBlockList = value; } + } + + /// <summary> + /// 需要向页面注册的样式列表 + /// </summary> + private Dictionary<string, string> _startupCssDic = new Dictionary<string, string>(); + + + + //private List<string> _javascriptComponentList = new List<string>(); + ///// <summary> + ///// 页面需要的JavaScript组件列表 + ///// </summary> + //public List<string> JavaScriptComponentList + //{ + // get { return _javascriptComponentList; } + // set { _javascriptComponentList = value; } + //} + + + + private List<string> _ajaxScriptList = new List<string>(); + /// <summary> + /// AJAX时每个控件需要注册的脚本 + /// </summary> + public List<string> AjaxScriptList + { + get { return _ajaxScriptList; } + set { _ajaxScriptList = value; } + } + + + private List<string> _ajaxAbsoluteScriptList = new List<string>(); + /// <summary> + /// AJAX时不依赖控件的脚本 + /// </summary> + public List<string> AjaxAbsoluteScriptList + { + get { return _ajaxAbsoluteScriptList; } + set { _ajaxAbsoluteScriptList = value; } + } + + + private Dictionary<string, string> _ajaxShortNameList = new Dictionary<string, string>(); + /// <summary> + /// AJAX时使用到的所有短名称列表 + /// 比如:F('SimpleForm1_tbxUserName') -> cmp0 + /// F('SimpleForm1_tbxPassword') -> cmp1 + /// </summary> + public Dictionary<string, string> AjaxShortNameList + { + get { return _ajaxShortNameList; } + set { _ajaxShortNameList = value; } + } + + public void AddAjaxShortName(string scriptid, string xid) + { + if (!_ajaxShortNameList.ContainsKey(scriptid)) + { + _ajaxShortNameList.Add(scriptid, xid); + } + } + + + #endregion + + #region Instance + + public ResourceManager() + : this(HttpContext.Current.Handler as Page) + { + } + + public ResourceManager(Page page) + { + _page = page; + _page.PreRenderComplete += new EventHandler(Page_PreRenderComplete); + _page.InitComplete += Page_InitComplete; + } + + private Page _page = null; + public Page Page + { + get + { + return _page; + } + } + + + /// <summary> + /// 取得 ResourceManager 的实例,单件模式 + /// </summary> + public static ResourceManager Instance + { + get + { + ResourceManager rm = HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] as ResourceManager; + if (rm == null) + { + rm = new ResourceManager(); + HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] = rm; + } + + return rm; + } + } + + /// <summary> + /// 确保ResourceManager实例的Page和当前页面一致 + /// </summary> + /// <param name="page"></param> + internal static void EnsureResourceManagerInstance(Page page) + { + ResourceManager rm = ResourceManager.Instance; + + // 在 Server.Transfer 时会进入此分支 + if (rm.Page != page) + { + rm = new ResourceManager(page); + HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] = rm; + } + } + + + #endregion + + #region Page_PreRenderComplete + + protected void Page_InitComplete(object sender, EventArgs e) + { + IsPageInitCompleted = true; + + if (!IsFineUIAjaxPostBack) + { + // 页头注册公共CSS/Javascript + CommonResourceHelper.RegisterCommonResource(Page); + } + + } + + + /// <summary> + /// 准备呈现页面内容,在保存页面状态之前 + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + protected void Page_PreRenderComplete(object sender, EventArgs e) + { + // 如果是 FineUI 的Ajax + if (IsFineUIAjaxPostBack) + { + // The server response is parsed by the browser to create the document for the IFRAME. If the server is using JSON to send the return object, then the Content-Type header must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body. + HttpContext.Current.Trace.IsEnabled = false; + HttpContext.Current.Response.ContentType = "text/html"; + //HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; + //HttpContext.Current.Response.Charset = "UTF-8"; + HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); + + FineUI.ResponseFilter filter = new FineUI.ResponseFilter(HttpContext.Current.Response.Filter); + HttpContext.Current.Response.Filter = filter; + } + else + { + SetupFirstLoadResource(); + } + } + + #endregion + + #region SetupFirstLoadResource + + /// <summary> + /// 注册页面第一次加载时的样式和脚本 + /// </summary> + private void SetupFirstLoadResource() + { + // 注册样式 + RegisterStartupCss(); + + // 注册脚本 + RegisterStartupScript(); + } + + + private void RegisterStartupCss() + { + if (_startupCssDic.Count > 0) + { + StringBuilder sb = new StringBuilder(); + foreach (string value in _startupCssDic.Values) + { + sb.Append(value); + } + CommonResourceHelper.RegisterHeaderCSS(Page, sb.ToString()); + } + + } + + /// <summary> + /// 注册页面脚本 + /// </summary> + public void RegisterStartupScript() + { + #region oldcode - 不支持Asp.net AJAX + + //if (IsAspNetAjaxPostBack) + //{ + // #region 局部回发 + // // 局部回发 + // for (int i = 0, count = sortedList.Count; i < count; i++) + // { + // Control control = sortedList[i].Control as Control; + // string scriptContent = sortedList[i].Script; + + // // 如果要注册脚本为空,则跳过 + // if (String.IsNullOrEmpty(scriptContent)) + // { + // continue; + // } + + // // 换行符去掉 + // scriptContent = scriptContent.Replace("\r\n", ""); + + // if (control != null) + // { + // // 如果脚本关联的有控件,则注册脚本(控件级别) + // string scriptKey = "partial_postback_script_" + control.ID; + // AjaxScriptManagerRegisterStartupScript(control, scriptKey, scriptContent); + // } + // else + // { + // // 如果脚本关联的没有控件,则注册脚本(页面级别) + // string scriptKey = "partial_postback_script_" + Math.Abs(scriptContent.GetHashCode()).ToString(); + // AjaxScriptManagerRegisterStartupScript(Page, scriptKey, scriptContent); + // } + // } + + // if (PageManager.Instance.ExecuteOnReadyWhenPostBack) + // { + // // 每次ajax调用后都要调用onReady脚本 + // AjaxScriptManagerRegisterStartupScript(Page, "onReady", "if(typeof(onReady)=='function'){onReady();}"); + // } + // #endregion + //} + //else + //{ + //} + + #endregion + + // 页面第一次加载 或者 页面回发 + List<ScriptBlock> sortedList = GetSortedControlScriptList(); + StringBuilder sb = new StringBuilder(); + foreach (ScriptBlock controlScript in sortedList) + { + if (controlScript.Script.Trim() != "") + { + sb.AppendFormat("{0}", controlScript.Script); + } + } + + string scriptContent = GetStartupScript(sb.ToString()); + + // 格式化输入 JavaScript 脚本 + if (GlobalConfig.GetDebugMode()) + { + JSBeautifyLib.JSBeautify jsb = new JSBeautifyLib.JSBeautify(scriptContent, + new JSBeautifyLib.JSBeautifyOptions()); + + scriptContent = jsb.GetResult(); + } + + Page.ClientScript.RegisterStartupScript(Page.GetType(), "page_startup_script", scriptContent, true); + } + + #endregion + + #region GetStartupScript + + /// <summary> + /// 是否注册startup脚本 + /// </summary> + /// <param name="scriptKey"></param> + /// <returns></returns> + private bool IsStartupScriptRegistered(string scriptKey) + { + return Page.ClientScript.IsStartupScriptRegistered(scriptKey); + } + + /// <summary> + /// 取得页面初始化时脚本 + /// </summary> + /// <param name="script"></param> + /// <returns></returns> + private string GetStartupScript(string script) + { + #region beforeBuilder + + StringBuilder beforeBuilder = new StringBuilder(); + + //beforeBuilder.Append("F.init();"); + + // ExtJS2.2的BUG,Ext.onReady会被调用两次(在ExtJS 2.2.1中已经修正) + // Ext.onReady在extjsv3.1.0中依然有问题,在IE下有时会导致页面空白,不能继续执行,只有在点击Stop按钮或者重新刷新后才行。 + // http://www.extjs.net/forum/showthread.php?t=69437 + // http://www.extjs.com/forum/showthread.php?p=347524#post347524 + // https://extjs.net/forum/showthread.php?t=86948 + //beforeBuilder.Append("if(X.initialized){return;}X.initialized=true;"); + + // 空白图片,只在 IE6 和 IE7 下设置(默认为 http://www.sencha.com/s.gif ),其他浏览器下使用 data URL + //beforeBuilder.AppendFormat("if(Ext.isIE6||Ext.isIE7){{Ext.BLANK_IMAGE_URL='{0}';}}", ResourceHelper.GetWebResourceUrl("FineUI.res.img.s.gif")); + + //beforeBuilder.Append("F.util.init();"); + + // form 相关配置 + //beforeBuilder.Append("var fieldPro=Ext.form.Base.prototype;"); + //beforeBuilder.AppendFormat("fieldPro.msgTarget='{0}';", MsgTargetHelper.GetName(PageManager.Instance.FormMessageTarget)); + //beforeBuilder.AppendFormat("fieldPro.labelWidth={0};", PageManager.Instance.FormLabelWidth.Value); + //beforeBuilder.AppendFormat("fieldPro.labelSeparator='{0}';", PageManager.Instance.FormLabelSeparator); + //beforeBuilder.AppendFormat("F.util.init('{0}',{1},'{2}','{3}',{4},'{5}',{6},'{7}',{8});", + // MessageTargetHelper.GetName(PageManager.Instance.FormMessageTarget), + // PageManager.Instance.FormLabelWidth.Value, + // PageManager.Instance.FormLabelSeparator, + // //PageManager.Instance.EnableBigFont.ToString().ToLower(), + // Page.ResolveUrl(ResourceHelper.GetEmptyImageUrl()), //String.Format("{0}/res/images/s.gif", GlobalConfig.GetExtjsBasePath())), //ResourceHelper.GetWebResourceUrlResAxd("FineUI.res.img.s.gif&v=1"), + // //PageManager.Instance.EnableAspnetSubmitButtonAjax.ToString().ToLower(), + // PageManager.Instance.EnableAjaxLoading.ToString().ToLower(), + // AjaxLoadingTypeName.GetName(PageManager.Instance.AjaxLoadingType), + // PageManager.Instance.EnableAjax.ToString().ToLower(), + // ThemeHelper.GetName(PageManager.Instance.Theme), + // PageManager.Instance.EnableFormChangeConfirm.ToString().ToLower() + // ); + + + //beforeBuilder.AppendFormat("F.util.init('{0}',{1},'{2}','{3}',{4},'{5}',{6},'{7}',{8});", + // MessageTargetHelper.GetName(PageManager.Instance.FormMessageTarget), + // PageManager.Instance.FormLabelWidth.Value, + // PageManager.Instance.FormLabelSeparator, + // //PageManager.Instance.EnableBigFont.ToString().ToLower(), + // Page.ResolveUrl(ResourceHelper.GetEmptyImageUrl()), //String.Format("{0}/res/images/s.gif", GlobalConfig.GetExtjsBasePath())), //ResourceHelper.GetWebResourceUrlResAxd("FineUI.res.img.s.gif&v=1"), + // //PageManager.Instance.EnableAspnetSubmitButtonAjax.ToString().ToLower(), + // PageManager.Instance.EnableAjaxLoading.ToString().ToLower(), + // AjaxLoadingTypeName.GetName(PageManager.Instance.AjaxLoadingType), + // PageManager.Instance.EnableAjax.ToString().ToLower(), + // ThemeHelper.GetName(PageManager.Instance.Theme), + // PageManager.Instance.EnableFormChangeConfirm.ToString().ToLower() + // ); + + JsObjectBuilder initObj = new JsObjectBuilder(); + + if (PageManager.Instance.FormMessageTarget != ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT) + { + initObj.AddProperty("msgTarget", MessageTargetHelper.GetName(PageManager.Instance.FormMessageTarget)); + } + + if (PageManager.Instance.FormLabelWidth != ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT) + { + initObj.AddProperty("labelWidth", PageManager.Instance.FormLabelWidth.Value); + } + + if (PageManager.Instance.FormLabelSeparator != ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT) + { + initObj.AddProperty("labelSeparator", PageManager.Instance.FormLabelSeparator); + } + + //initObj.AddProperty("blankImageUrl", Page.ResolveUrl(ResourceHelper.GetEmptyImageUrl())); + + if (PageManager.Instance.EnableAjaxLoading != ConfigPropertyValue.ENABLE_AJAX_LOADING_DEFAULT) + { + initObj.AddProperty("enableAjaxLoading", PageManager.Instance.EnableAjaxLoading.ToString().ToLower()); + } + + if (PageManager.Instance.AjaxLoadingType != ConfigPropertyValue.AJAX_LOADING_TYPE_DEFAULT) + { + initObj.AddProperty("ajaxLoadingType", AjaxLoadingTypeName.GetName(PageManager.Instance.AjaxLoadingType)); + } + + if (PageManager.Instance.EnableAjax != ConfigPropertyValue.ENABLE_AJAX_DEFAULT) + { + initObj.AddProperty("enableAjax", PageManager.Instance.EnableAjax.ToString().ToLower()); + } + + if (PageManager.Instance.Theme != Theme.Neptune) + { + initObj.AddProperty("theme", ThemeHelper.GetName(PageManager.Instance.Theme)); + } + + if (PageManager.Instance.Language != ConfigPropertyValue.LANGUAGE_DEFAULT) + { + initObj.AddProperty("language", LanguageHelper.GetName(PageManager.Instance.Language)); + } + + + + if (PageManager.Instance.EnableFormChangeConfirm) + { + initObj.AddProperty("formChangeConfirm", PageManager.Instance.EnableFormChangeConfirm.ToString().ToLower()); + } + + if (PageManager.Instance.AjaxTimeout != ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT) + { + initObj.AddProperty("ajaxTimeout", PageManager.Instance.AjaxTimeout); + } + + initObj.AddProperty("_version", GlobalConfig.ProductVersion); + + beforeBuilder.AppendFormat("F.init({0});", initObj); + + //if (PageManager.Instance.BeforeAjaxPostBackScript != String.Empty) + //{ + // beforeBuilder.AppendFormat("F.util.beforeAjaxPostBackScript=function(){{{0}}};", PageManager.Instance.BeforeAjaxPostBackScript); + //} + + //beforeBuilder.Append("F.ajax.hookPostBack();"); + + //if (PageManager.Instance.EnableAjax) + //{ + // if (PageManager.Instance.AjaxTimeout != ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT) + // { + // beforeBuilder.AppendFormat("Ext.Ajax.timeout={0};", PageManager.Instance.AjaxTimeout * 1000); + // } + //} + + //if (PageManager.Instance.EnableBigFont) + //{ + // beforeBuilder.Append("Ext.getBody().addCls('bigfont');"); + //} + + + // WindowGroup + //beforeBuilder.AppendFormat("{0}=new Ext.WindowGroup();{0}.zseed=6000;", WINDOW_DEFAULT_GROUP_ID); + + //// CookieProvider + //beforeBuilder.AppendFormat("{0}=new Ext.state.CookieProvider();", COOKIE_PROVIDER_ID); + + //// HiddenFields + //beforeBuilder.AppendFormat("{0}=[];", HIDDEN_FIELDS_ID); + + // 保存页面中可输入的表单字段状态是否发生变化的隐藏字段 + //innderBuilder.AppendFormat("var sn=document.createElement('input');sn.type='hidden';sn.value='false';sn.id=sn.name='{0}';Ext.getBody().query('form')[0].appendChild(sn);", PAGE_STATE_CHANGED_ID); + //innderBuilder.AppendFormat("Ext.DomHelper.append(document.forms[0],{{tag:'input',type:'hidden',value:'false',id:'{0}',name:'{0}'}});", PAGE_STATE_CHANGED_ID); + //beforeBuilder.AppendFormat("F.util.setHiddenFieldValue('{0}','false');", PAGE_STATE_CHANGED_ID); + + // 5.预加载图片 + //beforeBuilder.AppendFormat("{0}=[];", PRELOAD_IMAGES_ID); + //beforeBuilder.AppendFormat("{0}.push('{1}');", PRELOAD_IMAGES_ID, ResourceHelper.GetWebResourceUrl(Page, "FineUI.res.img.default.form.error-tip-corners.gif")); + //beforeBuilder.AppendFormat("box_preloadImages({0});", PRELOAD_IMAGES_ID); + + #endregion + + #region afterBuilder + + //StringBuilder afterBuilder = new StringBuilder(); + + //afterBuilder.Append("\r\n"); + + // 注册隐藏字段 + //string hiddenFieldScript = "var itemNode=Ext.get(item[0]);if(itemNode==null){Ext.DomHelper.append(document.forms[0],{tag:'input',type:'hidden',value:item[1],id:item[0],name:item[0]});}else{itemNode.dom.value=item[1];}"; + //afterBuilder.AppendFormat("Ext.each({0},function(item){{{1}}},box);", HIDDEN_FIELDS_ID, hiddenFieldScript); + //afterBuilder.Append("box_alertDEBUG();"); + + //afterBuilder.Append("if(typeof(onReady)==='function'){onReady.call(window);}"); + //afterBuilder.Append("F.util.triggerReady();"); + //// 如果是回发并且允许回发注册onReady脚本 + //if (!Page.IsPostBack || (Page.IsPostBack && PageManager.Instance.ExecuteOnReadyWhenPostBack)) + //{ + // afterBuilder.Append("if(typeof(onReady)==='function'){onReady.call(window);}"); + //} + //afterBuilder.Append("\r\n"); + + //#if DEBUG + // afterBuilder.Append("window.f_render_end_time = new Date();"); + //#endif + #endregion + + + // 需要注册script + //string contentScript = String.Format("EXTASPNET_READY=function(){{{0}}};", beforeBuilder.ToString() + script + afterBuilder.ToString()); + //contentScript += "Ext.onReady(EXTASPNET_READY);";//Ext.EventManager.on(window,'onload',function(){EXTASPNET_READY();});";//if(Ext.isIE){}else{Ext.onReady(EXTASPNET_READY);}"; + string contentScript = String.Format("F.load(function(){{{0}}});", beforeBuilder.ToString() + script); + //#if DEBUG + // contentScript += "var x_end_time=new Date();"; + //#endif + + #region RELEASE模式下去除换行符 + + if (!GlobalConfig.GetDebugMode()) + { + contentScript = contentScript.Replace("\r\n", ""); + } + + #endregion + + string checkScript = "if(!F&&!Ext){if(confirm('ERROR: extjs folder is lost, download it now?')){window.location.href='http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218';}}"; + + return checkScript + contentScript; + } + + + + /// <summary> + /// 返回经过排序的 _startupControlScriptList 列表,子控件排在父控件的前面 + /// </summary> + /// <returns></returns> + internal List<ScriptBlock> GetSortedControlScriptList() + { + List<ScriptBlock> result = new List<ScriptBlock>(); + + #region old code + + //if (!String.IsNullOrEmpty(_exclusiveScript)) + //{ + // result.Add(new ScriptBlock(null, _exclusiveScript)); + + // return result; + //} + + #endregion + + #region 1.插入AbsoluteScript(Level<0) + + // Level的正值和负值的分割点 + int levelZeroIndex = 0; + + // 插入所有 Control 为 null 的记录 + for (levelZeroIndex = 0; levelZeroIndex < _startupAbsoluteScriptBlockList.Count; levelZeroIndex++) + { + AbsoluteScriptBlock controlScript = _startupAbsoluteScriptBlockList[levelZeroIndex]; + + if (controlScript.Level < 0) + { + result.Add(new ScriptBlock(null, controlScript.Script)); + } + else + { + break; + } + } + + #endregion + + #region 2.排序,子控件排在父控件的前面 + + for (int i = 0, count = _startupScriptBlockList.Count; i < count; i++) + { + ScriptBlock controlScript = _startupScriptBlockList[i]; + + // Alert 静态类的 Control 为null + if (controlScript.Control == null) + { + // 如果 Control 为null,则不处理这条记录 + continue; + } + + int insertIndex = GetInsertIndex(controlScript.Control, result); + + #region old code + //#if DEBUG + // // 在JS脚本前面增加 \t ,这样层次关系明显一点 + // controlScript.Script = GetLineBreakString(insertIndex, result) + controlScript.Script; + //#endif + #endregion + + result.Insert(insertIndex, controlScript); + } + + #endregion + + #region 计算渲染时间 + + //string timeScript ="F.endDateTime=new Date();"; + //string totalTime = "'FineUI渲染时间:'+X.endDateTime.getElapsed(X.startDateTime)+'ms'"; + //totalTime += "+'['+X.startPageLayoutDateTime.getElapsed(X.startDateTime)+','"; + //totalTime += "+X.endPageLayoutDateTime.getElapsed(X.startPageLayoutDateTime)+']'"; + //timeScript += String.Format("if(!X.startPageLayoutDateTime){{X.startPageLayoutDateTime=X.endPageLayoutDateTime=X.endDateTime;}}if(window.location.href.indexOf('DEBUG')>0){{alert({0});}}", totalTime); + + //result.Add(new ScriptBlock(null, "box_alertDEBUG();")); + + #endregion + + #region 4.插入AbsoluteScript(Level>0) + + // 插入所有 Control 为 null 的记录 + for (levelZeroIndex = 0; levelZeroIndex < _startupAbsoluteScriptBlockList.Count; levelZeroIndex++) + { + AbsoluteScriptBlock controlScript = _startupAbsoluteScriptBlockList[levelZeroIndex]; + + if (controlScript.Level >= 0) + { + //#if DEBUG + // controlScript.Script = "\r\n" + controlScript.Script; + //#endif + + result.Add(new ScriptBlock(null, controlScript.Script)); + } + } + + #endregion + + return result; + } + + #region GetLineBreakString + + ///// <summary> + ///// 取得要插入位置的 换行前缀 + ///// </summary> + ///// <param name="insertIndex"></param> + ///// <param name="list"></param> + ///// <returns></returns> + //private string GetLineBreakString(int insertIndex, List<ScriptBlock> list) + //{ + // if (insertIndex == list.Count) + // { + // return DEBUG_LINE_BREAK; + // } + // else + // { + // return "\r\n" + '\t' + GetStringPrefix(list[insertIndex].Script); + // } + //} + + ///// <summary> + ///// 取得字符串的换行前缀 + ///// </summary> + ///// <param name="script"></param> + ///// <returns></returns> + //private string GetStringPrefix(string script) + //{ + // StringBuilder sb = new StringBuilder(); + // for (int i = 2, count = script.Length; i < count; i++) + // { + // if (script[i] == '\t') + // { + // sb.Append("\t"); + // } + // else + // { + // break; + // } + // } + + // return sb.ToString(); + //} + + #endregion + + #region GetInsertIndex + + /// <summary> + /// 取得应该将Script插入的位置 + /// 要能够向上回溯,因为控件的父控件可能不存在列表中,而父控件的父控件存在列表中 + /// </summary> + /// <param name="testControl"></param> + /// <param name="checkList"></param> + /// <returns></returns> + private int GetInsertIndex(ControlBase testControl, List<ScriptBlock> checkList) + { + int returnIndex = checkList.Count; + + // 这个地方不能是ControlBase,比如用户控件中控件,要能向上回溯到UserControlConnector + Control parentControl = testControl.Parent; + while (parentControl != null) + { + for (int i = 0, count = checkList.Count; i < count; i++) + { + Control checkControl = checkList[i].Control; + + if (checkControl != null && parentControl == checkControl) + { + return i; + } + } + + parentControl = parentControl.Parent; + } + + if (testControl is Menu) + { + // 如果菜单控件没有上级,则默认将脚本放在最前面 + return 0; + } + else + { + return returnIndex; + } + } + + ///// <summary> + ///// 测试testControl 是否 existControl的子控件 + ///// </summary> + ///// <param name="testControl"></param> + ///// <param name="existControl"></param> + ///// <returns></returns> + //private bool IsTestControlChildOf(Control testControl, Control existControl) + //{ + // bool result = false; + + // Control parentControl = testControl.Parent; + + // // 如果父控件不是HtmlForm + // while (!(parentControl is System.Web.UI.HtmlControls.HtmlForm)) + // { + + // } + //} + + #endregion + + #endregion + + #region AddStartupCSS + + /// <summary> + /// 添加样式 + /// </summary> + /// <param name="key"></param> + /// <param name="cssConent"></param> + /// <returns></returns> + public void AddStartupCSS(string key, string cssConent) + { + // 如果已经包含Key的样式已经存在,则覆盖 + if (_startupCssDic.ContainsKey(key)) + { + _startupCssDic[key] = cssConent; + } + else + { + _startupCssDic.Add(key, cssConent); + } + + //// 内容有相同的 + //foreach (string name in _startupCssDic.Keys) + //{ + // if (_startupCssDic[name] == cssConent) + // { + // return name; + // } + //} + } + + /// <summary> + /// 删除已经添加的CSS样式 + /// </summary> + /// <param name="key"></param> + public void RemoveStartupCSS(string key) + { + if (_startupCssDic.ContainsKey(key)) + { + _startupCssDic.Remove(key); + } + } + + #endregion + + #region AddAbsoluteStartupScript + + public void AddAbsoluteStartupScript(string script) + { + AddAbsoluteStartupScript(script, Constants.ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL); + } + + public void AddAbsoluteStartupScript(string script, int level) + { + AbsoluteScriptBlock scriptBlock = new AbsoluteScriptBlock(script, level); + + for (int i = 0; i < _startupAbsoluteScriptBlockList.Count; i++) + { + AbsoluteScriptBlock currentScript = _startupAbsoluteScriptBlockList[i]; + if (scriptBlock.Level < currentScript.Level) + { + _startupAbsoluteScriptBlockList.Insert(i, scriptBlock); + return; + } + } + + _startupAbsoluteScriptBlockList.Add(scriptBlock); + } + + #endregion + + #region AddStartupScript/IsStartupScriptExist + + public void AddStartupScript(ControlBase control, string script) + { + AddStartupScript(control, script, String.Empty); + } + + /// <summary> + /// 添加脚本 + /// 相同控件的脚本合并在一起(30372245@qq.com 2008-7-4) + /// </summary> + /// <param name="control"></param> + /// <param name="script"></param> + /// <param name="extraScript"></param> + public void AddStartupScript(ControlBase control, string script, string extraScript) + { + ScriptBlock cs = new ScriptBlock(control, script); + + ScriptBlock existBlock = GetStartupScript(control); + if (existBlock == null) + { + _startupScriptBlockList.Add(cs); + } + else + { + existBlock.Script += script; + //existBlock.ExtraScript += extraScript; + } + } + + + /// <summary> + /// 控件control的注册脚本是否存在 + /// </summary> + /// <param name="control"></param> + /// <returns></returns> + public bool IsStartupScriptExist(ControlBase control) + { + foreach (ScriptBlock cs in _startupScriptBlockList) + { + if (cs.Control == control) + { + return true; + } + } + + return false; + } + + + public ScriptBlock GetStartupScript(ControlBase control) + { + foreach (ScriptBlock cs in _startupScriptBlockList) + { + if (cs.Control == control) + { + return cs; + } + } + + return null; + } + + + public void RemoveStartupScript(ControlBase control) + { + for (int i = 0; i < _startupScriptBlockList.Count; i++) + { + if (_startupScriptBlockList[i].Control == control) + { + _startupScriptBlockList.RemoveAt(i); + break; + } + } + } + + #endregion + + #region PostBackStates + + private JObject _requestState = null; + + public JObject PostBackStates + { + get + { + if (_requestState == null && Page.IsPostBack) + { + //string state = HttpUtility.UrlDecode(HttpContext.Current.Request.Form["F_STATE"]); + string state = HttpContext.Current.Request.Form["F_STATE"]; + string xstateURI = HttpContext.Current.Request.Form["F_STATE_URI"]; + if (!String.IsNullOrEmpty(state)) + { + if (String.IsNullOrEmpty(xstateURI)) + { + state = DecodeFrom64(state); + } + else + { + state = HttpUtility.UrlDecode(state); + } + } + + if (String.IsNullOrEmpty(state)) + { + state = "{}"; + } + _requestState = JObject.Parse(state); + } + return _requestState; + } + } + + private string DecodeFrom64(string encodedData) + { + byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); + return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); + } + + private string EncodeTo64(string toEncode) + { + byte[] toEncodeAsBytes = System.Text.UTF8Encoding.UTF8.GetBytes(toEncode); + return System.Convert.ToBase64String(toEncodeAsBytes); + } + + #endregion + + #region IsFineUIAjaxPostBack + + public bool IsFineUIAjaxPostBack + { + get + { + return HttpContext.Current.Request.Form["F_AJAX"] == "true"; + } + } + + #endregion + + #region oldcode - we don't support Asp.Net Ajax + + ///// <summary> + ///// 注册脚本 - 控件级别 + ///// </summary> + ///// <param name="control"></param> + ///// <param name="scriptKey"></param> + ///// <param name="scriptContent"></param> + //public void AjaxScriptManagerRegisterStartupScript(Control control, string scriptKey, string scriptContent) + //{ + // object scriptManagerInstance = GetAjaxScriptManagerInstance(); + + // if (scriptManagerInstance != null) + // { + // Type[] types = new Type[] { typeof(Control), typeof(Type), typeof(string), typeof(string), typeof(bool) }; + // MethodInfo method = scriptManagerInstance.GetType().GetMethod("RegisterStartupScript", types); + // object[] parameters = new object[] { control, control.GetType(), scriptKey, scriptContent, true }; + // method.Invoke(scriptManagerInstance, parameters); + // } + //} + + ///// <summary> + ///// 注册脚本 - 页面级别 + ///// </summary> + ///// <param name="control"></param> + ///// <param name="scriptKey"></param> + ///// <param name="scriptContent"></param> + //public void AjaxScriptManagerRegisterStartupScript(Page page, string scriptKey, string scriptContent) + //{ + // object scriptManagerInstance = GetAjaxScriptManagerInstance(); + + // if (scriptManagerInstance != null) + // { + // Type[] types = new Type[] { typeof(Page), typeof(Type), typeof(string), typeof(string), typeof(bool) }; + // MethodInfo method = scriptManagerInstance.GetType().GetMethod("RegisterStartupScript", types); + // object[] parameters = new object[] { page, page.GetType(), scriptKey, scriptContent, true }; + // method.Invoke(scriptManagerInstance, parameters); + // } + //} + + /////// <summary> + /////// 是否局部回发 + /////// 这种方法也是也可以的 + /////// </summary> + /////// <returns></returns> + ////public static bool IsPartialPostBack() + ////{ + //// if (HttpContext.Current != null && HttpContext.Current.Request != null) + //// { + //// string ajaxValue = HttpContext.Current.Request.Headers["X-MicrosoftAjax"]; + + //// if (!String.IsNullOrEmpty(ajaxValue) && ajaxValue.ToLower().Contains("delta=true")) + //// { + //// return true; + //// } + //// } + + //// return false; + ////} + + ///// <summary> + ///// 当前是否局部回发 + ///// </summary> + ///// <param name="page"></param> + ///// <returns></returns> + //public bool IsAspNetAjaxPostBack + //{ + // get + // { + // object scriptManagerInstance = GetAjaxScriptManagerInstance(); + + // if (scriptManagerInstance != null) + // { + // PropertyInfo pInfo = scriptManagerInstance.GetType().GetProperty("IsInAsyncPostBack"); + + // object isInAsyncPostBackObj = pInfo.GetValue(scriptManagerInstance, null); + + // if (Convert.ToBoolean(isInAsyncPostBackObj)) + // { + // return true; + // } + // } + + // return false; + // } + //} + + ///// <summary> + ///// 包含的 System.Web.UI.ScriptManager 实例 + ///// </summary> + ///// <returns></returns> + //public object GetAjaxScriptManagerInstance() + //{ + // foreach (DictionaryEntry entry in Page.Items) + // { + // if (entry.Key.ToString().Contains("System.Web.UI.ScriptManager")) + // { + // return entry.Value; + // } + // } + + // return null; + //} + + #endregion + + } +} diff --git a/FineUI/Business/ResourceManager/ResponseFilter.cs b/FineUI/Business/ResourceManager/ResponseFilter.cs index 990e04f..220b473 100644 --- a/FineUI/Business/ResourceManager/ResponseFilter.cs +++ b/FineUI/Business/ResourceManager/ResponseFilter.cs @@ -1,515 +1,545 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Web; -using System.Web.UI; -using HtmlAgilityPack; -using System.Text.RegularExpressions; - - -namespace FineUI -{ - /// <summary> - /// AJAX输出过滤器 - /// </summary> - internal class ResponseFilter : Stream - { - #region fields - - private Stream _responseStream; - private MemoryStream _memoryStream; - - #endregion - - #region Constructor - - internal ResponseFilter(Stream responseStream) - { - _responseStream = responseStream; - _memoryStream = new MemoryStream(); - } - - #endregion - - #region overrides - - public override bool CanRead - { - get { return false; } - } - - public override bool CanSeek - { - get { return false; } - } - - public override bool CanWrite - { - get { return true; } - } - - public override void Flush() - { - _memoryStream.Flush(); - } - - public override long Length - { - get { return 0; } - } - - public override long Position - { - get { return 0; } - set { } - } - - public override int Read(byte[] buffer, int offset, int count) - { - return 0; - } - - public override long Seek(long offset, SeekOrigin origin) - { - return 0; - } - - public override void SetLength(long value) - { - } - - public override void Write(byte[] buffer, int offset, int count) - { - _memoryStream.Write(buffer, offset, count); - } - - public override void Close() - { - StringBuilder sb = new StringBuilder(); - ResolveResponseScripts(sb); - - string responseText = sb.ToString(); - - // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,不编码会导致HTML标签错乱 - if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data")) - { - // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20 - responseText = HttpUtility.UrlEncode(responseText); - responseText = responseText.Replace("+", "%20"); - } - - // 从输出流创建TextWriter - TextWriter writer = new StreamWriter(_responseStream, Encoding.UTF8); - - writer.Write(responseText); - - // 输出 - writer.Flush(); - writer.Dispose(); - base.Close(); - _responseStream.Close(); - } - - - - #endregion - - #region ResolveResponseScripts - - private void ResolveResponseScripts(StringBuilder sb) - { - // 我们不需要把Response的代码放在自执行的函数中,因为在X.ajax.js中,通过new Function(scripts)();来执行Response的代码。 - // Wrapper all the JavaScript in a self-execution function to prevent pollution of global JavaScript namespace. - //writer.Write("(function(){"); - - #region 网页重定向 - - // 重定向页面 - if (HttpContext.Current.Response.RedirectLocation != null) - { - sb.Append("window.location.replace('" + HttpContext.Current.Response.RedirectLocation + "');"); - return; - } - - #endregion - - #region 生成的HTML代码 - - // 生成的页面内容 - string completeHtml = GetCompleteHtml(); - - HtmlDocument doc = new HtmlDocument(); - doc.OptionFixNestedTags = true; - doc.LoadHtml(completeHtml); - - #endregion - - #region 页面上每个控件应该输出的脚本 - - // 设置提交表单的按钮等元素可用enable(有可能在后面的被覆盖) - sb.Append(GetEnableTargetControlScript()); - - // 添加所有需要在AJAX时更新的脚本 - StringBuilder ajaxScriptBuilder = new StringBuilder(); - foreach (string script in ResourceManager.Instance.AjaxScriptList) - { - ajaxScriptBuilder.Append(script); - } - foreach (string script in ResourceManager.Instance.AjaxAbsoluteScriptList) - { - ajaxScriptBuilder.Append(script); - } - - StringBuilder gridTplsBuilder = new StringBuilder(); - StringBuilder shortNameBuilder = new StringBuilder(); - Dictionary<string, string> shortNameDic = ResourceManager.Instance.AjaxShortNameList; - if (shortNameDic.Count > 0) - { - shortNameBuilder.Append("var "); - int index = 0, count = shortNameDic.Count; - foreach (string clientId in shortNameDic.Keys) - { - string xid = shortNameDic[clientId]; - string scriptId = String.Format("X('{0}')", clientId); - shortNameBuilder.AppendFormat("{0}={1}", xid, scriptId); - if (index == count - 1) - { - shortNameBuilder.Append(';'); - } - else - { - shortNameBuilder.Append(','); - } - - // 不能将所有的X('RegionPanel1_Button1')替换为x0,因为有时X('RegionPanel1_Button1')会出现在HTML片段中 - //ajaxScriptBuilder.Replace(scriptId, xid); - - - ///////////////////////// - // 重新加载表格数据(也就是存在对x_loadData函数的调用) - if (PageManager.Instance.AjaxGridReloadedClientIDs.Contains(clientId) && PageManager.Instance.AjaxGridClientIDs.Contains(clientId)) - { - PageManager.Instance.AjaxGridClientIDs.Remove(clientId); - - gridTplsBuilder.AppendFormat("{0}.x_tpls={1};", xid, GetGridTpls(doc, clientId)); - - } - - index++; - } - } - - // 不需要重新加载表格数据,但是要更新模板列 - if (PageManager.Instance.AjaxGridClientIDs.Count != 0) - { - foreach (string clientId in PageManager.Instance.AjaxGridClientIDs) - { - gridTplsBuilder.AppendFormat("X('{0}').x_updateTpls({1});", clientId, GetGridTpls(doc, clientId)); - } - } - - // 当前控件 - sb.Append(shortNameBuilder.ToString() + gridTplsBuilder.ToString() + ajaxScriptBuilder.ToString()); - - - // 执行 onReady 脚本 - sb.Append(GetExecuteOnReadyScript()); - - #endregion - - #region 监视输出HTML的改变 - - // 更新执行的控件(一般是标准的ASP.NET控件) - UpdateASPNETControls(sb, doc); - - // 更新ViewState - UpdateViewState(sb, doc, false); - - // 更新压缩后的ViewState - UpdateViewState(sb, doc, true); - - // 更新EventValidation(如果存在则更新) - UpdateEventValidation(sb, doc); - - - #endregion - - //writer.Write("})();"); - - #region oldcode - //List<ScriptBlock> sortedList = ResourceManager.Instance.GetSortedControlScriptList(); - //for (int i = 0, count = sortedList.Count; i < count; i++) - //{ - // //Control control = sortedList[i].Control as Control; - // string scriptContent = sortedList[i].Script; - - // // 如果要注册脚本为空,则跳过 - // if (String.IsNullOrEmpty(scriptContent)) - // { - // continue; - // } - - // // 换行符去掉 - // scriptContent = scriptContent.Replace("\r\n", ""); - // writer.Write(scriptContent); - //} - #endregion - } - - #region GetExecuteOnReadyScript & GetEnableTargetControlScript - - // 执行用户自定义的 onReady 脚本 - private static string GetExecuteOnReadyScript() - { - StringBuilder sb = new StringBuilder(); - if (PageManager.Instance.ExecuteOnReadyWhenPostBack) - { - // 每次ajax调用后都要调用onReady脚本 - //sb.Append("if(typeof(onReady)=='function'){onReady();}"); - sb.Append("X.ready();"); - } - - //sb.Append("if(typeof(onAjaxReady)=='function'){onAjaxReady();}"); - //sb.Append("X.ajaxReady();"); - - return sb.ToString(); - } - - - /// <summary> - /// 设置引起本次回发的按钮(或其他控件)可用 - /// </summary> - /// <returns></returns> - private static string GetEnableTargetControlScript() - { - string targetControlClientID = HttpContext.Current.Request.Form[ResourceManager.DISABLED_CONTROL_BEFORE_POSTBACK]; - if (!String.IsNullOrEmpty(targetControlClientID)) - { - return String.Format("X.enable('{0}');", targetControlClientID); - } - return String.Empty; - } - - #endregion - - #endregion - - #region GetGridTpls - - private string GetGridTpls(HtmlDocument doc, string controlId) - { - string html = String.Empty; - string tpls = GetHtmlNodeInnerHTML(controlId + "_tpls", doc); - if (!String.IsNullOrEmpty(tpls)) - { - // 删除生成HTML中的 "\r\n " - html = Regex.Replace(tpls, "\r?\n\\s*", ""); - } - - return JsHelper.Enquote(html); - } - - #endregion - - #region UpdateViewState & UpdateEventValidation - - /// <summary> - /// 更新 EventValidation 节点的值 - /// </summary> - /// <param name="sb"></param> - /// <param name="doc"></param> - private void UpdateEventValidation(StringBuilder sb, HtmlDocument doc) - { - string oldEventValidation = HttpContext.Current.Request.Form["__EVENTVALIDATION"]; - //string newEventValidation = GetHtmlNodeValue("<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"", completeHtml); - string newEventValidation = GetHtmlNodeValue("__EVENTVALIDATION", doc); - - if (!String.IsNullOrEmpty(newEventValidation) && (oldEventValidation != newEventValidation)) - { - sb.Append(String.Format("X.util.updateEventValidation('{0}');", newEventValidation)); - } - - } - - /// <summary> - /// 更新 ViewState 节点的值 - /// </summary> - /// <param name="sb"></param> - /// <param name="doc"></param> - /// <param name="gzipped"></param> - private void UpdateViewState(StringBuilder sb, HtmlDocument doc, bool gzipped) - { - string viewStateHiddenFieldID = StringUtil.VIEWSTATE_ID; - if (gzipped) - { - viewStateHiddenFieldID = StringUtil.GZIPPED_VIEWSTATE_ID; - } - - string oldViewState = HttpContext.Current.Request.Form[viewStateHiddenFieldID]; - string newViewState = GetHtmlNodeValue(viewStateHiddenFieldID, doc); - - if (!String.IsNullOrEmpty(newViewState) && (oldViewState != newViewState)) - { - int minLength = Math.Min(oldViewState.Length, newViewState.Length); - int changeIndex = minLength; - for (int i = 0, length = minLength; i < length; i++) - { - if (newViewState[i] != oldViewState[i]) - { - changeIndex = i; - break; - } - } - - if (changeIndex == 0) - { - sb.Append(String.Format("X.util.updateViewState('{0}',{1});", newViewState, gzipped.ToString().ToLower())); - } - else - { - string changedStr = String.Empty; - if (newViewState.Length >= changeIndex) - { - changedStr = newViewState.Substring(changeIndex); - } - - sb.Append(String.Format("X.util.updateViewState('{0}',{1},{2});", changedStr, changeIndex, gzipped.ToString().ToLower())); - } - } - } - - - - #endregion - - #region UpdateASPNETControls - - /// <summary> - /// 更新ASP.NET控件 - /// </summary> - /// <param name="sb"></param> - /// <param name="doc"></param> - private void UpdateASPNETControls(StringBuilder sb, HtmlDocument doc) - { - if (PageManager.Instance.AjaxAspnetControls == null) - { - return; - } - foreach (string controlId in PageManager.Instance.AjaxAspnetControls) - { - string controlClientID = controlId; - Control control = ControlUtil.FindControl(controlId); - if (control != null) - { - controlClientID = control.ClientID; - } - string updateHtml = JsHelper.Enquote(GetHtmlNodeOuterHTML(controlClientID, doc)); - if (updateHtml != null) - { - sb.Append(String.Format("X.util.replace('{0}', {1});", controlClientID, updateHtml)); - - /* - // 如果是Asp.net按钮或者ImageButton,需要重新注册点击时AJAX回发页面,而不是调用Button(type=submit)的默认行为 - if (control != null && (control is System.Web.UI.WebControls.Button - || control is System.Web.UI.WebControls.ImageButton)) - { - sb.Append(String.Format("X.util.makeAspnetSubmitButtonAjax('{0}');", control.ClientID)); - } - * */ - } - } - - } - - #endregion - - #region GetCompleteHtml & GetHtmlNodeValue & GetHtmlNodeOuterHTML - - ///// <summary> - ///// 取得 HTML 中一个节点的值 - ///// </summary> - ///// <param name="searchValue"></param> - ///// <param name="completeHtml"></param> - ///// <returns></returns> - //public string GetHtmlNodeValue(string searchValue, string completeHtml) - //{ - // //string search = "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\""; - // int si = completeHtml.IndexOf(searchValue); - // if (si >= 0) - // { - // si += searchValue.Length; - // int ei = completeHtml.IndexOf('\"', si); - // if (ei >= 0) - // { - // return completeHtml.Substring(si, ei - si); - // } - // } - - // return null; - //} - - - /// <summary> - /// 取得 HTML 中一个节点的值 - /// </summary> - /// <param name="nodeId"></param> - /// <param name="doc"></param> - /// <returns></returns> - public string GetHtmlNodeValue(string nodeId, HtmlDocument doc) - { - HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); - if (node != null) - { - return node.Attributes["value"].Value; - } - return null; - } - - /// <summary> - /// 取得 HTML 中一个节点的OuterHtml - /// </summary> - /// <param name="nodeId"></param> - /// <param name="doc"></param> - /// <returns></returns> - public string GetHtmlNodeOuterHTML(string nodeId, HtmlDocument doc) - { - HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); - if (node != null) - { - return node.OuterHtml; - } - return null; - } - - public string GetHtmlNodeInnerHTML(string nodeId, HtmlDocument doc) - { - HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); - if (node != null) - { - return node.InnerHtml; - } - return null; - } - - /// <summary> - /// 获取当前输出流的HTML内容 - /// </summary> - /// <returns></returns> - public string GetCompleteHtml() - { - string _completeHtml; - - _memoryStream.Position = 0; - using (TextReader reader = new StreamReader(_memoryStream)) - { - _completeHtml = reader.ReadToEnd(); - } - - return _completeHtml; - } - - #endregion - - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Web; +using System.Web.UI; +using HtmlAgilityPack; +using System.Text.RegularExpressions; + + +namespace FineUI +{ + /// <summary> + /// AJAX输出过滤器 + /// </summary> + internal class ResponseFilter : Stream + { + #region fields + + private Stream _responseStream; + private MemoryStream _memoryStream; + + #endregion + + #region Constructor + + internal ResponseFilter(Stream responseStream) + { + _responseStream = responseStream; + _memoryStream = new MemoryStream(); + } + + #endregion + + #region overrides + + public override bool CanRead + { + get { return false; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override void Flush() + { + _memoryStream.Flush(); + } + + public override long Length + { + get { return 0; } + } + + public override long Position + { + get { return 0; } + set { } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return 0; + } + + public override long Seek(long offset, SeekOrigin origin) + { + return 0; + } + + public override void SetLength(long value) + { + } + + public override void Write(byte[] buffer, int offset, int count) + { + _memoryStream.Write(buffer, offset, count); + } + + public override void Close() + { + StringBuilder sb = new StringBuilder(); + ResolveResponseScripts(sb); + + string responseText = sb.ToString(); + + // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,不编码会导致HTML标签错乱 + if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data")) + { + // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20 + responseText = HttpUtility.UrlEncode(responseText); + responseText = responseText.Replace("+", "%20"); + } + + // 从输出流创建TextWriter + TextWriter writer = new StreamWriter(_responseStream, Encoding.UTF8); + + writer.Write(responseText); + + // 输出 + writer.Flush(); + writer.Dispose(); + base.Close(); + _responseStream.Close(); + } + + + + #endregion + + #region ResolveResponseScripts + + private void ResolveResponseScripts(StringBuilder sb) + { + // 我们不需要把Response的代码放在自执行的函数中,因为在X.ajax.js中,通过new Function(scripts)();来执行Response的代码。 + // Wrapper all the JavaScript in a self-execution function to prevent pollution of global JavaScript namespace. + //writer.Write("(function(){"); + + #region 网页重定向 + + // 重定向页面 + if (HttpContext.Current.Response.RedirectLocation != null) + { + sb.Append("window.location.replace('" + HttpContext.Current.Response.RedirectLocation + "');"); + return; + } + + #endregion + + #region 生成的HTML代码 + + // 生成的页面内容 + string completeHtml = GetCompleteHtml(); + + HtmlDocument doc = new HtmlDocument(); + doc.OptionFixNestedTags = true; + doc.LoadHtml(completeHtml); + + #endregion + + #region 监视ViewState的改变 + + // 更新ViewState,如果本AJAX请求的ViewState和当前页面上的ViewState不一致,则丢弃本次更新 + UpdateViewState(sb, doc); + + + #endregion + #region 页面上每个控件应该输出的脚本 + + // 设置提交表单的按钮等元素可用enable(有可能在后面的被覆盖) + sb.Append(GetEnableTargetControlScript()); + + // 添加所有需要在AJAX时更新的脚本 + StringBuilder ajaxScriptBuilder = new StringBuilder(); + foreach (string script in ResourceManager.Instance.AjaxScriptList) + { + ajaxScriptBuilder.Append(script); + } + foreach (string script in ResourceManager.Instance.AjaxAbsoluteScriptList) + { + ajaxScriptBuilder.Append(script); + } + + StringBuilder gridTplsBuilder = new StringBuilder(); + StringBuilder shortNameBuilder = new StringBuilder(); + Dictionary<string, string> shortNameDic = ResourceManager.Instance.AjaxShortNameList; + if (shortNameDic.Count > 0) + { + shortNameBuilder.Append("var "); + int index = 0, count = shortNameDic.Count; + foreach (string clientId in shortNameDic.Keys) + { + string xid = shortNameDic[clientId]; + string scriptId = String.Format("F('{0}')", clientId); + shortNameBuilder.AppendFormat("{0}={1}", xid, scriptId); + if (index == count - 1) + { + shortNameBuilder.Append(';'); + } + else + { + shortNameBuilder.Append(','); + } + + // 不能将所有的F('RegionPanel1_Button1')替换为x0,因为有时F('RegionPanel1_Button1')会出现在HTML片段中 + //ajaxScriptBuilder.Replace(scriptId, xid); + + + ///////////////////////// + // 重新加载表格数据(也就是存在对x_loadData函数的调用) + if (PageManager.Instance.AjaxGridReloadedClientIDs.Contains(clientId) && PageManager.Instance.AjaxGridClientIDs.Contains(clientId)) + { + PageManager.Instance.AjaxGridClientIDs.Remove(clientId); + + gridTplsBuilder.AppendFormat("{0}.f_tpls={1};", xid, GetGridTpls(doc, clientId)); + + } + + index++; + } + } + + // 不需要重新加载表格数据,但是要更新模板列 + if (PageManager.Instance.AjaxGridClientIDs.Count != 0) + { + foreach (string clientId in PageManager.Instance.AjaxGridClientIDs) + { + gridTplsBuilder.AppendFormat("F('{0}').f_updateTpls({1});", clientId, GetGridTpls(doc, clientId)); + } + } + + // 当前控件 + sb.Append(shortNameBuilder.ToString() + gridTplsBuilder.ToString() + ajaxScriptBuilder.ToString()); + + + //// 执行 onReady 脚本 + //sb.Append(GetExecuteOnReadyScript()); + + #endregion + + #region 监视输出HTML的改变 + + // 更新执行的控件(一般是标准的ASP.NET控件) + UpdateASPNETControls(sb, doc); + + //// 更新ViewState + //UpdateViewState(sb, doc, false); + + //// 更新压缩后的ViewState + //UpdateViewState(sb, doc, true); + + // 更新EventValidation(如果存在则更新) + UpdateEventValidation(sb, doc); + + + #endregion + + //writer.Write("})();"); + + #region oldcode + //List<ScriptBlock> sortedList = ResourceManager.Instance.GetSortedControlScriptList(); + //for (int i = 0, count = sortedList.Count; i < count; i++) + //{ + // //Control control = sortedList[i].Control as Control; + // string scriptContent = sortedList[i].Script; + + // // 如果要注册脚本为空,则跳过 + // if (String.IsNullOrEmpty(scriptContent)) + // { + // continue; + // } + + // // 换行符去掉 + // scriptContent = scriptContent.Replace("\r\n", ""); + // writer.Write(scriptContent); + //} + #endregion + } + + #region GetEnableTargetControlScript + + //// 执行用户自定义的 onReady 脚本 + //private static string GetExecuteOnReadyScript() + //{ + // StringBuilder sb = new StringBuilder(); + // if (PageManager.Instance.ExecuteOnReadyWhenPostBack) + // { + // // 每次ajax调用后都要调用onReady脚本 + // //sb.Append("if(typeof(onReady)=='function'){onReady();}"); + // sb.Append("F.ready();"); + // } + + // //sb.Append("if(typeof(onAjaxReady)=='function'){onAjaxReady();}"); + // //sb.Append("F.ajaxReady();"); + + // return sb.ToString(); + //} + + + /// <summary> + /// 设置引起本次回发的按钮(或其他控件)可用 + /// </summary> + /// <returns></returns> + private static string GetEnableTargetControlScript() + { + string targetControlClientID = HttpContext.Current.Request.Form[ResourceManager.DISABLED_CONTROL_BEFORE_POSTBACK]; + if (!String.IsNullOrEmpty(targetControlClientID)) + { + return String.Format("F.enable('{0}');", targetControlClientID); + } + return String.Empty; + } + + #endregion + + #endregion + + #region GetGridTpls + + private string GetGridTpls(HtmlDocument doc, string controlId) + { + string html = String.Empty; + string tpls = GetHtmlNodeInnerHTML(controlId + "_tpls", doc); + if (!String.IsNullOrEmpty(tpls)) + { + // 删除生成HTML中的 "\r\n " + html = Regex.Replace(tpls, "\r?\n\\s*", ""); + } + + return JsHelper.Enquote(html); + } + + #endregion + + #region UpdateViewState & UpdateEventValidation + + /// <summary> + /// 更新 EventValidation 节点的值 + /// </summary> + /// <param name="sb"></param> + /// <param name="doc"></param> + private void UpdateEventValidation(StringBuilder sb, HtmlDocument doc) + { + string oldEventValidation = HttpContext.Current.Request.Form["__EVENTVALIDATION"]; + //string newEventValidation = GetHtmlNodeValue("<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"", completeHtml); + string newEventValidation = GetHtmlNodeValue("__EVENTVALIDATION", doc); + + if (!String.IsNullOrEmpty(newEventValidation) && (oldEventValidation != newEventValidation)) + { + sb.Append(String.Format("F.eventValidation('{0}');", newEventValidation)); + } + + } + + /// <summary> + /// 更新 ViewState 节点的值 + /// </summary> + /// <param name="sb"></param> + /// <param name="doc"></param> + private void UpdateViewState(StringBuilder sb, HtmlDocument doc) + { + string viewStateHiddenFieldID = StringUtil.VIEWSTATE_ID; + //if (gzipped) + //{ + // viewStateHiddenFieldID = StringUtil.GZIPPED_VIEWSTATE_ID; + //} + + string oldViewState = HttpContext.Current.Request.Form[viewStateHiddenFieldID]; + string newViewState = GetHtmlNodeValue(viewStateHiddenFieldID, doc); + + if (!String.IsNullOrEmpty(newViewState) && (oldViewState != newViewState)) + { + int minLength = Math.Min(oldViewState.Length, newViewState.Length); + int changeIndex = minLength; + for (int i = 0, length = minLength; i < length; i++) + { + if (newViewState[i] != oldViewState[i]) + { + changeIndex = i; + break; + } + } + + + /* + if (changeIndex == 0) + { + sb.Append(String.Format("F.util.updateViewState('{0}',{1});", newViewState, gzipped.ToString().ToLower())); + } + else + { + string changedStr = String.Empty; + if (newViewState.Length >= changeIndex) + { + changedStr = newViewState.Substring(changeIndex); + } + + sb.Append(String.Format("F.util.updateViewState('{0}',{1},{2});", changedStr, changeIndex, gzipped.ToString().ToLower())); + } + */ + + + // 如果只有很少的一些字符没改变(小于等于150个字符),还是返回完整的ViewState + if (changeIndex <= 150) + { + sb.Append(String.Format("if(!F.viewState(__VIEWSTATE,'{0}'))return;", newViewState)); + } + else + { + string changedStr = String.Empty; + if (newViewState.Length >= changeIndex) + { + changedStr = newViewState.Substring(changeIndex); + } + + sb.Append(String.Format("if(!F.viewState(__VIEWSTATE,'{0}',{1}))return;", changedStr, changeIndex)); + } + } + else + { + sb.Append("if(!F.viewState(__VIEWSTATE))return;"); + } + } + + + + #endregion + + #region UpdateASPNETControls + + /// <summary> + /// 更新ASP.NET控件 + /// </summary> + /// <param name="sb"></param> + /// <param name="doc"></param> + private void UpdateASPNETControls(StringBuilder sb, HtmlDocument doc) + { + if (PageManager.Instance.AjaxAspnetControls == null) + { + return; + } + foreach (string controlId in PageManager.Instance.AjaxAspnetControls) + { + string controlClientID = controlId; + Control control = ControlUtil.FindControl(controlId); + if (control != null) + { + controlClientID = control.ClientID; + } + string updateHtml = GetHtmlNodeOuterHTML(controlClientID, doc); + if (!String.IsNullOrEmpty(updateHtml)) + { + sb.Append(String.Format("F.util.replace('{0}',{1});", controlClientID, JsHelper.Enquote(updateHtml))); + + /* + // 如果是Asp.net按钮或者ImageButton,需要重新注册点击时AJAX回发页面,而不是调用Button(type=submit)的默认行为 + if (control != null && (control is System.Web.UI.WebControls.Button + || control is System.Web.UI.WebControls.ImageButton)) + { + sb.Append(String.Format("F.util.makeAspnetSubmitButtonAjax('{0}');", control.ClientID)); + } + * */ + } + } + + } + + #endregion + + #region GetCompleteHtml & GetHtmlNodeValue & GetHtmlNodeOuterHTML + + ///// <summary> + ///// 取得 HTML 中一个节点的值 + ///// </summary> + ///// <param name="searchValue"></param> + ///// <param name="completeHtml"></param> + ///// <returns></returns> + //public string GetHtmlNodeValue(string searchValue, string completeHtml) + //{ + // //string search = "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\""; + // int si = completeHtml.IndexOf(searchValue); + // if (si >= 0) + // { + // si += searchValue.Length; + // int ei = completeHtml.IndexOf('\"', si); + // if (ei >= 0) + // { + // return completeHtml.Substring(si, ei - si); + // } + // } + + // return null; + //} + + + /// <summary> + /// 取得 HTML 中一个节点的值 + /// </summary> + /// <param name="nodeId"></param> + /// <param name="doc"></param> + /// <returns></returns> + public string GetHtmlNodeValue(string nodeId, HtmlDocument doc) + { + HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); + if (node != null) + { + return node.Attributes["value"].Value; + } + return null; + } + + /// <summary> + /// 取得 HTML 中一个节点的OuterHtml + /// </summary> + /// <param name="nodeId"></param> + /// <param name="doc"></param> + /// <returns></returns> + public string GetHtmlNodeOuterHTML(string nodeId, HtmlDocument doc) + { + HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); + if (node != null) + { + return node.OuterHtml; + } + return null; + } + + public string GetHtmlNodeInnerHTML(string nodeId, HtmlDocument doc) + { + HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); + if (node != null) + { + return node.InnerHtml; + } + return null; + } + + /// <summary> + /// 获取当前输出流的HTML内容 + /// </summary> + /// <returns></returns> + public string GetCompleteHtml() + { + string _completeHtml; + + _memoryStream.Position = 0; + using (TextReader reader = new StreamReader(_memoryStream)) + { + _completeHtml = reader.ReadToEnd(); + } + + return _completeHtml; + } + + #endregion + + } +} diff --git a/FineUI/Business/ResourceManager/ScriptBlock.cs b/FineUI/Business/ResourceManager/ScriptBlock.cs index f93427d..44c13ac 100644 --- a/FineUI/Business/ResourceManager/ScriptBlock.cs +++ b/FineUI/Business/ResourceManager/ScriptBlock.cs @@ -1,74 +1,73 @@ -using System; -using System.Collections.Generic; -using System.Text; - -using System.Web.UI; - -namespace FineUI -{ - /// <summary> - /// 控件-控件相关脚本 - /// </summary> - internal class ScriptBlock - { - - private Control _control; - - /// <summary> - /// 要注册脚本的控件 - /// </summary> - public Control Control - { - get { return _control; } - set { _control = value; } - } - - - private string _script; - - /// <summary> - /// 脚本 - /// </summary> - public string Script - { - get { return _script; } - set { _script = value; } - } - - - - private string _extraScript; - - /// <summary> - /// 额外的脚本 - /// </summary> - public string ExtraScript - { - get { return _extraScript; } - set { _extraScript = value; } - } - - - - public ScriptBlock() - { - } - - - public ScriptBlock(Control control, string script) - { - _control = control; - _script = script; - - } - - public ScriptBlock(Control control, string script, string extraScript) - { - _control = control; - _script = script; - _extraScript = extraScript; - } - - - } -} +using System; +using System.Collections.Generic; +using System.Text; + +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 控件相关脚本 + /// </summary> + internal class ScriptBlock + { + private ControlBase _control; + + /// <summary> + /// 要注册脚本的控件 + /// </summary> + public ControlBase Control + { + get { return _control; } + set { _control = value; } + } + + + private string _script; + + /// <summary> + /// 脚本 + /// </summary> + public string Script + { + get { return _script; } + set { _script = value; } + } + + + + //private string _extraScript; + + ///// <summary> + ///// 额外的脚本 + ///// </summary> + //public string ExtraScript + //{ + // get { return _extraScript; } + // set { _extraScript = value; } + //} + + + + public ScriptBlock() + { + } + + + public ScriptBlock(ControlBase control, string script) + { + _control = control; + _script = script; + + } + + //public ScriptBlock(Control control, string script, string extraScript) + //{ + // _control = control; + // _script = script; + // _extraScript = extraScript; + //} + + + } +} diff --git a/FineUI/Business/ResourceManager/ScriptModule.cs b/FineUI/Business/ResourceManager/ScriptModule.cs index e35d7c9..42e8741 100644 --- a/FineUI/Business/ResourceManager/ScriptModule.cs +++ b/FineUI/Business/ResourceManager/ScriptModule.cs @@ -1,67 +1,67 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Web; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ģ飨ҪResponse.Redirect - /// </summary> - public class ScriptModule : IHttpModule - { - private void PreSendRequestHeadersHandler(object sender, EventArgs args) - { - HttpApplication application = (HttpApplication)sender; - HttpResponse response = application.Response; - - if (response.StatusCode == 302) - { - if (application.Request.Form["X_AJAX"] == "true") - { - string redirectLocation = response.RedirectLocation; - List<HttpCookie> cookies = new List<HttpCookie>(response.Cookies.Count); - for (int i = 0; i < response.Cookies.Count; i++) - { - cookies.Add(response.Cookies[i]); - } - - - response.ClearContent(); - response.ClearHeaders(); - for (int i = 0; i < cookies.Count; i++) - { - response.AppendCookie(cookies[i]); - } - response.Cache.SetCacheability(HttpCacheability.NoCache); - response.ContentType = "text/plain"; - response.Write(String.Format("window.location.href='{0}';", redirectLocation)); - } - } - } - - #region IHttpModule Ա - - /// <summary> - /// Դ - /// </summary> - public void Dispose() - { - - } - - /// <summary> - /// ʼģ - /// </summary> - /// <param name="context">HttpӦó</param> - public void Init(HttpApplication context) - { - context.PreSendRequestHeaders += new EventHandler(PreSendRequestHeadersHandler); - } - - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Web; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ģ飨ҪResponse.Redirect + /// </summary> + public class ScriptModule : IHttpModule + { + private void PreSendRequestHeadersHandler(object sender, EventArgs args) + { + HttpApplication application = (HttpApplication)sender; + HttpResponse response = application.Response; + + if (response.StatusCode == 302) + { + if (application.Request.Form["F_AJAX"] == "true") + { + string redirectLocation = response.RedirectLocation; + List<HttpCookie> cookies = new List<HttpCookie>(response.Cookies.Count); + for (int i = 0; i < response.Cookies.Count; i++) + { + cookies.Add(response.Cookies[i]); + } + + + response.ClearContent(); + response.ClearHeaders(); + for (int i = 0; i < cookies.Count; i++) + { + response.AppendCookie(cookies[i]); + } + response.Cache.SetCacheability(HttpCacheability.NoCache); + response.ContentType = "text/html"; + response.Write(String.Format("window.location.href='{0}';", redirectLocation)); + } + } + } + + #region IHttpModule Ա + + /// <summary> + /// Դ + /// </summary> + public void Dispose() + { + + } + + /// <summary> + /// ʼģ + /// </summary> + /// <param name="context">HttpӦó</param> + public void Init(HttpApplication context) + { + context.PreSendRequestHeaders += new EventHandler(PreSendRequestHeadersHandler); + } + + #endregion + } +} diff --git a/FineUI/Business/ResourceManager/TreeNodeIDManager.cs b/FineUI/Business/ResourceManager/TreeNodeIDManager.cs index 6b012bd..8d34957 100644 --- a/FineUI/Business/ResourceManager/TreeNodeIDManager.cs +++ b/FineUI/Business/ResourceManager/TreeNodeIDManager.cs @@ -1,81 +1,81 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TreeNodeIDManager.cs - * CreatedOn: 2012-08-13 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Configuration; -using System.Reflection; -using System.Collections; - -namespace FineUI -{ - /// <summary> - /// 存在 Page.Items 上下文中,用于生成JavascriptID - /// </summary> - internal class TreeNodeIDManager - { - #region static fields - public static readonly string CONTEXT_NAME = "TreeNodeIDManagerContextName"; - - #endregion - - #region Instance - - public static TreeNodeIDManager Instance - { - get - { - if (HttpContext.Current != null) - { - TreeNodeIDManager manager = HttpContext.Current.Items[CONTEXT_NAME] as TreeNodeIDManager; - if (manager == null) - { - manager = new TreeNodeIDManager(); - HttpContext.Current.Items[CONTEXT_NAME] = manager; - } - return manager; - } - return null; - } - } - - #endregion - - #region methods - - private int _num = 0; - - public string GetNextTreeNodeID() - { - return String.Format("xnode{0}", _num++); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TreeNodeIDManager.cs + * CreatedOn: 2012-08-13 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Configuration; +using System.Reflection; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 存在 Page.Items 上下文中,用于生成JavascriptID + /// </summary> + internal class TreeNodeIDManager + { + #region static fields + public static readonly string CONTEXT_NAME = "TreeNodeIDManagerContextName"; + + #endregion + + #region Instance + + public static TreeNodeIDManager Instance + { + get + { + if (HttpContext.Current != null) + { + TreeNodeIDManager manager = HttpContext.Current.Items[CONTEXT_NAME] as TreeNodeIDManager; + if (manager == null) + { + manager = new TreeNodeIDManager(); + HttpContext.Current.Items[CONTEXT_NAME] = manager; + } + return manager; + } + return null; + } + } + + #endregion + + #region methods + + private int _num = 0; + + public string GetNextTreeNodeID() + { + return String.Format("fnode{0}", _num++); + } + + #endregion + } +} diff --git a/FineUI/Business/SimulateTree/SimulateTreeHeper.cs b/FineUI/Business/SimulateTree/SimulateTreeHeper.cs index d7afcf8..832183a 100644 --- a/FineUI/Business/SimulateTree/SimulateTreeHeper.cs +++ b/FineUI/Business/SimulateTree/SimulateTreeHeper.cs @@ -1,263 +1,263 @@ - - -#region Comment - -/* - * Project: FineUI - * - * FileName: SimulateTreeNode.cs - * CreatedOn: 2008-06-26 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// <summary> - /// 模拟树帮助类(用于表格和树控件) - /// </summary> - internal class SimulateTreeHeper - { - // "|-" - private static string X_ELBOW = "<div class=\"x-elbow\"></div>"; - // "|_" - private static string X_ELBOW_END = "<div class=\"x-elbow-end\"></div>"; - // "| " - private static string X_ELBOW_LINE = "<div class=\"x-elbow-line\"></div>"; - // " " - private static string X_ELBOW_EMPTY = "<div class=\"x-elbow-empty\"></div>"; - - - public void ResolveSimulateTree(List<SimulateTreeNode> silumateTreeNodes, bool modifiyOriginalContent) - { - int rowIndex = 0; - foreach (SimulateTreeNode node in silumateTreeNodes) - { - node.ParentNode = GetParentNode(silumateTreeNodes, rowIndex); - node.HasLittleBrother = GetHasLittleBrother(silumateTreeNodes, rowIndex); - - rowIndex++; - } - - foreach (SimulateTreeNode node in silumateTreeNodes) - { - string treePrefix = GetNodeContentLevelPrefix(node); - if (modifiyOriginalContent) - { - node.Text = treePrefix + node.Text; - } - node.SimulateTreeText = treePrefix; - } - } - - private string GetNodeContentLevelPrefix(SimulateTreeNode node) - { - StringBuilder sb = new StringBuilder(); - for (int i = node.Level; i > 0; i--) - { - sb.Append(GetNodeContentLevelPrefix(node, i)); - } - - return sb.ToString(); - } - - - - private string GetNodeContentLevelPrefix(SimulateTreeNode node, int level) - { - #region Rules - - //level = 0, - //level = 1, 有弟节点 |- - // 没弟节点 |_ - //level = 2, 父有弟节点 | 有弟节点 |- - // 父没弟节点 没弟节点 |_ - //level = 3, 父的父有弟节点 | 父有弟节点 | 有弟节点 |- - // 父的父没弟节点 父没弟节点 没弟节点 |_ - - #endregion - - if (level == 1) - { - if (node.HasLittleBrother) - { - return X_ELBOW; - } - else - { - return X_ELBOW_END; - } - } - else if (level == 2) - { - if (node.ParentNode.HasLittleBrother) - { - return X_ELBOW_LINE; - } - else - { - return X_ELBOW_EMPTY; - } - } - else if (level == 3) - { - if (node.ParentNode.ParentNode.HasLittleBrother) - { - return X_ELBOW_LINE; - } - else - { - return X_ELBOW_EMPTY; - } - } - else if (level == 4) - { - if (node.ParentNode.ParentNode.ParentNode.HasLittleBrother) - { - return X_ELBOW_LINE; - } - else - { - return X_ELBOW_EMPTY; - } - } - else if (level == 5) - { - if (node.ParentNode.ParentNode.ParentNode.ParentNode.HasLittleBrother) - { - return X_ELBOW_LINE; - } - else - { - return X_ELBOW_EMPTY; - } - } - else if (level == 6) - { - if (node.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.HasLittleBrother) - { - return X_ELBOW_LINE; - } - else - { - return X_ELBOW_EMPTY; - } - } - - // We support 6 levels at the most. - return " "; - } - - private SimulateTreeNode GetParentNode(List<SimulateTreeNode> silumateTree, int rowIndex) - { - SimulateTreeNode currentNode = silumateTree[rowIndex]; - if (currentNode.Level == 0) - { - return null; - } - else - { - for (int i = rowIndex - 1; i >= 0; i--) - { - SimulateTreeNode node = silumateTree[i]; - if (node.Level == currentNode.Level - 1) - { - return node; - } - } - } - - return null; - } - - private bool GetHasLittleBrother(List<SimulateTreeNode> silumateTree, int rowIndex) - { - SimulateTreeNode currentNode = silumateTree[rowIndex]; - if (rowIndex == silumateTree.Count - 1) - { - // 树的最后一个节点,当然没有弟节点 - return false; - } - else - { - //SilumateTreeNode nextNode = silumateTree[rowIndex + 1]; - //if (nextNode.Level != currentNode.Level) - //{ - // return false; - //} - //else - //{ - // return true; - //} - for (int i = rowIndex + 1; i < silumateTree.Count; i++) - { - SimulateTreeNode node = silumateTree[i]; - if (node.Level == currentNode.Level) - { - return true; - } - else if (node.Level < currentNode.Level) - { - return false; - } - } - } - - return false; - } - - - #region old code - //private string X_ELBOW - //{ - // get - // { - // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow.gif")); - // return "<div class=\"x-elbow\"></div>"; - // } - //} - //private string X_ELBOW_END - //{ - // get - // { - // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-end\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-end.gif")); - // return "<div class=\"x-elbow-end\"></div>"; - // } - //} - //private string X_ELBOW_LINE - //{ - // get - // { - // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-line\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-line.gif")); - // return "<div class=\"x-elbow-line\"></div>"; - // } - //} - //private string X_ELBOW_EMPTY - //{ - // get - // { - // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-empty\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-empty.gif")); - // return "<div class=\"x-elbow-empty\"></div>"; - // } - //} - - #endregion - - } -} + + +#region Comment + +/* + * Project: FineUI + * + * FileName: SimulateTreeNode.cs + * CreatedOn: 2008-06-26 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 模拟树帮助类(用于表格和树控件) + /// </summary> + internal class SimulateTreeHeper + { + // "|-" + private static string X_ELBOW = "<div class=\"x-elbow\"></div>"; + // "|_" + private static string X_ELBOW_END = "<div class=\"x-elbow-end\"></div>"; + // "| " + private static string X_ELBOW_LINE = "<div class=\"x-elbow-line\"></div>"; + // " " + private static string X_ELBOW_EMPTY = "<div class=\"x-elbow-empty\"></div>"; + + + public void ResolveSimulateTree(List<SimulateTreeNode> silumateTreeNodes, bool modifiyOriginalContent) + { + int rowIndex = 0; + foreach (SimulateTreeNode node in silumateTreeNodes) + { + node.ParentNode = GetParentNode(silumateTreeNodes, rowIndex); + node.HasLittleBrother = GetHasLittleBrother(silumateTreeNodes, rowIndex); + + rowIndex++; + } + + foreach (SimulateTreeNode node in silumateTreeNodes) + { + string treePrefix = GetNodeContentLevelPrefix(node); + if (modifiyOriginalContent) + { + node.Text = treePrefix + node.Text; + } + node.SimulateTreeText = treePrefix; + } + } + + private string GetNodeContentLevelPrefix(SimulateTreeNode node) + { + StringBuilder sb = new StringBuilder(); + for (int i = node.Level; i > 0; i--) + { + sb.Append(GetNodeContentLevelPrefix(node, i)); + } + + return sb.ToString(); + } + + + + private string GetNodeContentLevelPrefix(SimulateTreeNode node, int level) + { + #region Rules + + //level = 0, + //level = 1, 有弟节点 |- + // 没弟节点 |_ + //level = 2, 父有弟节点 | 有弟节点 |- + // 父没弟节点 没弟节点 |_ + //level = 3, 父的父有弟节点 | 父有弟节点 | 有弟节点 |- + // 父的父没弟节点 父没弟节点 没弟节点 |_ + + #endregion + + if (level == 1) + { + if (node.HasLittleBrother) + { + return X_ELBOW; + } + else + { + return X_ELBOW_END; + } + } + else if (level == 2) + { + if (node.ParentNode.HasLittleBrother) + { + return X_ELBOW_LINE; + } + else + { + return X_ELBOW_EMPTY; + } + } + else if (level == 3) + { + if (node.ParentNode.ParentNode.HasLittleBrother) + { + return X_ELBOW_LINE; + } + else + { + return X_ELBOW_EMPTY; + } + } + else if (level == 4) + { + if (node.ParentNode.ParentNode.ParentNode.HasLittleBrother) + { + return X_ELBOW_LINE; + } + else + { + return X_ELBOW_EMPTY; + } + } + else if (level == 5) + { + if (node.ParentNode.ParentNode.ParentNode.ParentNode.HasLittleBrother) + { + return X_ELBOW_LINE; + } + else + { + return X_ELBOW_EMPTY; + } + } + else if (level == 6) + { + if (node.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.HasLittleBrother) + { + return X_ELBOW_LINE; + } + else + { + return X_ELBOW_EMPTY; + } + } + + // We support 6 levels at the most. + return " "; + } + + private SimulateTreeNode GetParentNode(List<SimulateTreeNode> silumateTree, int rowIndex) + { + SimulateTreeNode currentNode = silumateTree[rowIndex]; + if (currentNode.Level == 0) + { + return null; + } + else + { + for (int i = rowIndex - 1; i >= 0; i--) + { + SimulateTreeNode node = silumateTree[i]; + if (node.Level == currentNode.Level - 1) + { + return node; + } + } + } + + return null; + } + + private bool GetHasLittleBrother(List<SimulateTreeNode> silumateTree, int rowIndex) + { + SimulateTreeNode currentNode = silumateTree[rowIndex]; + if (rowIndex == silumateTree.Count - 1) + { + // 树的最后一个节点,当然没有弟节点 + return false; + } + else + { + //SilumateTreeNode nextNode = silumateTree[rowIndex + 1]; + //if (nextNode.Level != currentNode.Level) + //{ + // return false; + //} + //else + //{ + // return true; + //} + for (int i = rowIndex + 1; i < silumateTree.Count; i++) + { + SimulateTreeNode node = silumateTree[i]; + if (node.Level == currentNode.Level) + { + return true; + } + else if (node.Level < currentNode.Level) + { + return false; + } + } + } + + return false; + } + + + #region old code + //private string X_ELBOW + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow.gif")); + // return "<div class=\"x-elbow\"></div>"; + // } + //} + //private string X_ELBOW_END + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-end\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-end.gif")); + // return "<div class=\"x-elbow-end\"></div>"; + // } + //} + //private string X_ELBOW_LINE + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-line\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-line.gif")); + // return "<div class=\"x-elbow-line\"></div>"; + // } + //} + //private string X_ELBOW_EMPTY + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-empty\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-empty.gif")); + // return "<div class=\"x-elbow-empty\"></div>"; + // } + //} + + #endregion + + } +} diff --git a/FineUI/Business/SimulateTree/SimulateTreeNode.cs b/FineUI/Business/SimulateTree/SimulateTreeNode.cs index 7d543e5..8e1c195 100644 --- a/FineUI/Business/SimulateTree/SimulateTreeNode.cs +++ b/FineUI/Business/SimulateTree/SimulateTreeNode.cs @@ -1,112 +1,112 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: SimulateTreeNode.cs - * CreatedOn: 2008-06-26 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// <summary> - /// 模拟树结构的节点类 - /// </summary> - internal class SimulateTreeNode - { - private string _simulateTreeText; - - /// <summary> - /// 模拟树的节点内容 - /// </summary> - public string SimulateTreeText - { - get { return _simulateTreeText; } - set { _simulateTreeText = value; } - } - - - private string _text; - - /// <summary> - /// 节点内容 - /// </summary> - public string Text - { - get { return _text; } - set { _text = value; } - } - - private string _value; - - /// <summary> - /// 节点内容 - /// </summary> - public string Value - { - get { return _value; } - set { _value = value; } - } - - private int _level; - - /// <summary> - /// 节点所在层次(从0开始,0表示根节点) - /// </summary> - public int Level - { - get { return _level; } - set { _level = value; } - } - - private SimulateTreeNode _parentNode; - - /// <summary> - /// 父节点 - /// </summary> - public SimulateTreeNode ParentNode - { - get { return _parentNode; } - set { _parentNode = value; } - } - - private bool _hasLittleBrother; - - /// <summary> - /// 是否有弟节点 - /// </summary> - public bool HasLittleBrother - { - get { return _hasLittleBrother; } - set { _hasLittleBrother = value; } - } - - - private bool _enableSelect; - - public bool EnableSelect - { - get { return _enableSelect; } - set { _enableSelect = value; } - } - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: SimulateTreeNode.cs + * CreatedOn: 2008-06-26 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 模拟树结构的节点类 + /// </summary> + internal class SimulateTreeNode + { + private string _simulateTreeText; + + /// <summary> + /// 模拟树的节点内容 + /// </summary> + public string SimulateTreeText + { + get { return _simulateTreeText; } + set { _simulateTreeText = value; } + } + + + private string _text; + + /// <summary> + /// 节点内容 + /// </summary> + public string Text + { + get { return _text; } + set { _text = value; } + } + + private string _value; + + /// <summary> + /// 节点内容 + /// </summary> + public string Value + { + get { return _value; } + set { _value = value; } + } + + private int _level; + + /// <summary> + /// 节点所在层次(从0开始,0表示根节点) + /// </summary> + public int Level + { + get { return _level; } + set { _level = value; } + } + + private SimulateTreeNode _parentNode; + + /// <summary> + /// 父节点 + /// </summary> + public SimulateTreeNode ParentNode + { + get { return _parentNode; } + set { _parentNode = value; } + } + + private bool _hasLittleBrother; + + /// <summary> + /// 是否有弟节点 + /// </summary> + public bool HasLittleBrother + { + get { return _hasLittleBrother; } + set { _hasLittleBrother = value; } + } + + + private bool _enableSelect; + + public bool EnableSelect + { + get { return _enableSelect; } + set { _enableSelect = value; } + } + } +} diff --git a/FineUI/Business/Util/ControlUtil.cs b/FineUI/Business/Util/ControlUtil.cs index 6389b8c..7570411 100644 --- a/FineUI/Business/Util/ControlUtil.cs +++ b/FineUI/Business/Util/ControlUtil.cs @@ -1,167 +1,253 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ControlUtil.cs - * CreatedOn: 2008-05-20 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI.WebControls; -using System.Web.UI; -using System.Web; - -namespace FineUI -{ - /// <summary> - /// 控件相关帮助函数 - /// </summary> - public class ControlUtil - { - #region FindParentControl - - /// <summary> - /// 查找父控件 - /// </summary> - /// <param name="control">当前控件</param> - /// <param name="controlType">查找控件的类型</param> - /// <returns>找到的第一个父控件</returns> - public static Control FindParentControl(Control control, Type controlType) - { - if (control == null || control is System.Web.UI.HtmlControls.HtmlForm) - { - return null; - } - - if (control.Parent != null) - { - if (control.Parent.GetType().Equals(controlType)) - { - return control.Parent; - } - else - { - return FindParentControl(control.Parent, controlType); - } - } - - return null; - } - - #endregion - - #region FindControl - - /// <summary> - /// 根据控件ID查找控件 - /// </summary> - /// <param name="findControlID">要查找的控件ID</param> - /// <returns>找到的控件</returns> - public static Control FindControl(string findControlID) - { - Page page = HttpContext.Current.CurrentHandler as Page; - if (page != null) - { - return FindControl(page, findControlID); - } - - return null; - } - - /// <summary> - /// 根据控件类型查找控件 - /// </summary> - /// <param name="controlType">要查找的控件类型</param> - /// <returns>找到的控件</returns> - public static Control FindControl(Type controlType) - { - Page page = HttpContext.Current.CurrentHandler as Page; - if (page != null) - { - return FindControl(page, controlType); - } - - return null; - } - - /// <summary> - /// 在父控件的所有子控件中查找控件 - /// </summary> - /// <param name="control">父控件</param> - /// <param name="findControlId">要查找的控件ID</param> - /// <returns>找到的控件</returns> - public static Control FindControl(Control control, string findControlId) - { - if (control != null && control.Controls.Count > 0) - { - foreach (Control c in control.Controls) - { - if (c != null && c.ID == findControlId) - { - return c; - } - else - { - Control childControl = FindControl(c, findControlId); - if (childControl != null) - { - return childControl; - } - } - } - } - - return null; - } - - /// <summary> - /// 在父控件的所有子控件中查找控件 - /// </summary> - /// <param name="control">父控件</param> - /// <param name="controlType">要查找的控件类型</param> - /// <returns>找到的控件</returns> - public static Control FindControl(Control control, Type controlType) - { - if (control != null && control.Controls.Count > 0) - { - foreach (Control c in control.Controls) - { - if (c != null && c.GetType() == controlType) - { - return c; - } - else - { - Control childControl = FindControl(c, controlType); - if (childControl != null) - { - return childControl; - } - } - } - } - - return null; - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlUtil.cs + * CreatedOn: 2008-05-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Web; + +namespace FineUI +{ + /// <summary> + /// 控件相关帮助函数 + /// </summary> + public class ControlUtil + { + #region FindParentControl + + /// <summary> + /// 查找父控件 + /// </summary> + /// <param name="control">当前控件</param> + /// <param name="controlType">查找控件的类型</param> + /// <param name="checkSubclassOf">如果找到的控件实例继承自controlType,同样也认为是找到了</param> + /// <returns>找到的第一个父控件</returns> + public static Control FindParentControl(Control control, Type controlType, Boolean checkSubclassOf) + { + if (control == null || control is System.Web.UI.HtmlControls.HtmlForm) + { + return null; + } + + if (control.Parent != null) + { + Type parentType = control.Parent.GetType(); + + // http://stackoverflow.com/questions/2742276/in-c-how-do-i-check-if-a-type-is-a-subtype-or-the-type-of-an-object + if (parentType.Equals(controlType) || (checkSubclassOf && parentType.IsSubclassOf(controlType))) + { + return control.Parent; + } + else + { + return FindParentControl(control.Parent, controlType, checkSubclassOf); + } + } + + return null; + } + + + /// <summary> + /// 查找父控件 + /// </summary> + /// <param name="control">当前控件</param> + /// <param name="controlType">查找控件的类型</param> + /// <returns>找到的第一个父控件</returns> + public static Control FindParentControl(Control control, Type controlType) + { + return FindParentControl(control, controlType, false); + } + + + #endregion + + /// <summary> + /// 获得服务器控件ID的客户端ID数组 + /// </summary> + /// <param name="serverIDs"></param> + /// <returns></returns> + public static JsArrayBuilder GetControlClientIDs(string[] serverIDs) + { + JsArrayBuilder array = new JsArrayBuilder(); + foreach (string controlID in serverIDs) + { + Control control = ControlUtil.FindControl(controlID); + if (control != null && control is ControlBase) + { + array.AddProperty((control as ControlBase).ClientID); + } + } + return array; + } + + #region FindControl + + /// <summary> + /// 查找父层次结构中是否存在用户控件 + /// </summary> + /// <param name="ctrl">当前控件</param> + /// <returns>父层次中的用户控件</returns> + public static UserControl FindParentUserControl(Control ctrl) + { + Control found = FindParentControl(ctrl, typeof(UserControl), true); + if (found != null) + { + return found as UserControl; + } + else + { + return null; + } + /* + while (ctrl != null && !(ctrl is UserControl)) + { + ctrl = ctrl.Parent; + } + if (ctrl != null) + { + return ctrl as UserControl; + } + return null; + * */ + } + + // 在当前 ctrl 所在的用户控件中查找,如果找不到则在页面中查找 + internal static Control FindControlInUserControlOrPage(Control ctrl, string findControlID) + { + Control found = null; + + UserControl parentUserControl = FindParentUserControl(ctrl); + if (parentUserControl != null) + { + found = FindControl(parentUserControl, findControlID); + } + + if (found == null) + { + found = FindControl(findControlID); + } + + return found; + } + + /// <summary> + /// 根据控件ID查找控件 + /// </summary> + /// <param name="findControlID">要查找的控件ID</param> + /// <returns>找到的控件</returns> + public static Control FindControl(string findControlID) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return FindControl(page, findControlID); + } + + return null; + } + + + + /// <summary> + /// 根据控件类型查找控件 + /// </summary> + /// <param name="controlType">要查找的控件类型</param> + /// <returns>找到的控件</returns> + public static Control FindControl(Type controlType) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return FindControl(page, controlType); + } + + return null; + } + + /// <summary> + /// 在父控件的所有子控件中查找控件 + /// </summary> + /// <param name="control">父控件</param> + /// <param name="findControlId">要查找的控件ID</param> + /// <returns>找到的控件</returns> + public static Control FindControl(Control control, string findControlId) + { + if (control != null && control.Controls.Count > 0) + { + foreach (Control c in control.Controls) + { + if (c != null && c.ID == findControlId) + { + return c; + } + else + { + Control childControl = FindControl(c, findControlId); + if (childControl != null) + { + return childControl; + } + } + } + } + + return null; + } + + /// <summary> + /// 在父控件的所有子控件中查找控件 + /// </summary> + /// <param name="control">父控件</param> + /// <param name="controlType">要查找的控件类型</param> + /// <returns>找到的控件</returns> + public static Control FindControl(Control control, Type controlType) + { + if (control != null && control.Controls.Count > 0) + { + foreach (Control c in control.Controls) + { + if (c != null && c.GetType() == controlType) + { + return c; + } + else + { + Control childControl = FindControl(c, controlType); + if (childControl != null) + { + return childControl; + } + } + } + } + + return null; + } + + #endregion + } +} diff --git a/FineUI/Business/Util/DateUtil.cs b/FineUI/Business/Util/DateUtil.cs new file mode 100644 index 0000000..9100b60 --- /dev/null +++ b/FineUI/Business/Util/DateUtil.cs @@ -0,0 +1,165 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: DateUtil.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// Extjs和.Net之间的日期格式转换 + /// </summary> + public class DateUtil + { + /// <summary> + /// 创建Javascript的Date对象字符串 + /// </summary> + /// <param name="date">日期对象</param> + /// <returns>日期的客户端脚本形式</returns> + public static string GetClientDateObject(DateTime date) + { + // 注意:这个地方有一个bug,要把月份减一才正确,晕 + return String.Format("new Date({0},{1},{2})", + date.Year.ToString("D4"), (date.Month - 1).ToString(), date.Day.ToString()); + } + + /// <summary> + /// 将.Net日期格式字符串转换为ExtJS的日期格式字符串 + /// </summary> + /// <param name="dotnetFormat">.Net日期格式字符串</param> + /// <returns>ExtJS的日期格式字符串</returns> + public static string ConvertToClientDateFormat(string dotnetFormat) + { + // DotNet - 年月日 + //d 月中的某一天。一位数的日期没有前导零。 + //dd 月中的某一天。一位数的日期有一个前导零。 + //ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 + //dddd 周中某天的完整名称,在 DayNames 中定义。 + //M 月份数字。一位数的月份没有前导零。 + //MM 月份数字。一位数的月份有一个前导零。 + //MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 + //MMMM 月份的完整名称,在 MonthNames 中定义。 + //y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 + //yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 + //yyyy 包括纪元的四位数的年份。 + + + // DotNet - 时分秒 + //h 12 小时制的小时。一位数的小时数没有前导零。 + //hh 12 小时制的小时。一位数的小时数有前导零。 + //H 24 小时制的小时。一位数的小时数没有前导零。 + //HH 24 小时制的小时。一位数的小时数有前导零。 + //m 分钟。一位数的分钟数没有前导零。 + //mm 分钟。一位数的分钟数有一个前导零。 + //s 秒。一位数的秒数没有前导零。 + //ss 秒。一位数的秒数有一个前导零。 + + // DotNet - AM/PM 时区 + //t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。 + //tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 + //z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。 + //zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 + //zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 + + + // ExtJS + //d Day of the month, 2 digits with leading zeros 01 to 31 + //D A short textual representation of the day of the week Mon to Sun + //j Day of the month without leading zeros 1 to 31 + //l A full textual representation of the day of the week Sunday to Saturday + //N ISO-8601 numeric representation of the day of the week 1 (for Monday) through 7 (for Sunday) + //S English ordinal suffix for the day of the month, 2 characters st, nd, rd or th. Works well with j + //w Numeric representation of the day of the week 0 (for Sunday) to 6 (for Saturday) + //z The day of the year (starting from 0) 0 to 364 (365 in leap years) + //W ISO-8601 week number of year, weeks starting on Monday 01 to 53 + //F A full textual representation of a month, such as January or March January to December + //m Numeric representation of a month, with leading zeros 01 to 12 + //M A short textual representation of a month Jan to Dec + //n Numeric representation of a month, without leading zeros 1 to 12 + //t Number of days in the given month 28 to 31 + //L Whether it's a leap year 1 if it is a leap year, 0 otherwise. + //o ISO-8601 year number (identical to (Y), but if the ISO week number (W) Examples: 1998 or 2004 + // belongs to the previous or next year, that year is used instead) + //Y A full numeric representation of a year, 4 digits Examples: 1999 or 2003 + //y A two digit representation of a year Examples: 99 or 03 + + // ExtJS - 时分秒 + //a Lowercase Ante meridiem and Post meridiem am or pm + //A Uppercase Ante meridiem and Post meridiem AM or PM + //g 12-hour format of an hour without leading zeros 1 to 12 + //G 24-hour format of an hour without leading zeros 0 to 23 + //h 12-hour format of an hour with leading zeros 01 to 12 + //H 24-hour format of an hour with leading zeros 00 to 23 + //i Minutes, with leading zeros 00 to 59 + //s Seconds, with leading zeros 00 to 59 + + + + string extjsFormat = dotnetFormat; + extjsFormat = extjsFormat.Replace("yyyy", "Y").Replace("yy", "y"); + extjsFormat = extjsFormat.Replace("MMMM", "F").Replace("MMM", "M").Replace("MM", "m").Replace("M", "n"); + extjsFormat = extjsFormat.Replace("dddd", "l").Replace("ddd", "D"); + + //extjsFormat = extjsFormat.Replace("hh", "h").Replace("HH", "H"); + extjsFormat = extjsFormat.Replace("mm", "i"); + extjsFormat = extjsFormat.Replace("ss", "s"); + extjsFormat = extjsFormat.Replace("tt", "A"); + + // 日 + if (extjsFormat.Contains("dd")) + { + extjsFormat = extjsFormat.Replace("dd", "d"); + } + else + { + extjsFormat = extjsFormat.Replace("d", "j"); + } + + // 24 - 小时 + if (extjsFormat.Contains("HH")) + { + extjsFormat = extjsFormat.Replace("HH", "H"); + } + else + { + extjsFormat = extjsFormat.Replace("H", "G"); + } + + // 12 - 小时 + if (extjsFormat.Contains("hh")) + { + extjsFormat = extjsFormat.Replace("hh", "h"); + } + else + { + extjsFormat = extjsFormat.Replace("h", "g"); + } + + + return extjsFormat; + } + + } +} diff --git a/FineUI/Business/Util/FState.cs b/FineUI/Business/Util/FState.cs new file mode 100644 index 0000000..0750008 --- /dev/null +++ b/FineUI/Business/Util/FState.cs @@ -0,0 +1,312 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// FineUI控件的状态保持机制 + /// </summary> + public class FState + { + #region Constructor + + private ControlBase _control = null; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="control">控件</param> + public FState(ControlBase control) + { + _control = control; + } + + #endregion + + #region Index Property + + private Dictionary<string, object> _state = new Dictionary<string, object>(); + + /// <summary> + /// 获取设置 FState 属性值 + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public object this[string key] + { + get + { + if (!_state.ContainsKey(key)) + { + return null; + } + else + { + return _state[key]; + } + } + set + { + _state[key] = value; + + // 如果是页面第一次加载(页面初始化时那些不是AjaxProperties的属性的更改,也要保存到FState中) + // _control.Page == null, 是在初始化页面控件的属性的时候 + if (_control.Page != null && !_control.Page.IsPostBack && _control.InitialComplete) + { + if (!_control.AjaxProperties.Contains(key)) + { + AddModifiedProperty(key); + } + } + } + } + + #endregion + + #region ModifiedProperties ClientPropertiesModifiedInServer + + private List<string> _modifiedProperties = new List<string>(); + + /// <summary> + /// 当前请求中改变的属性列表,既包含服务器端改变的属性,也包含客户端改变的属性 + /// </summary> + public List<string> ModifiedProperties + { + get { return _modifiedProperties; } + set { _modifiedProperties = value; } + } + + /// <summary> + /// 增加在当前请求中改变的属性列表(控件可以自己手工设置,以便保存在 F_STATE 中) + /// </summary> + /// <param name="property"></param> + public void AddModifiedProperty(string property) + { + if (!_modifiedProperties.Contains(property)) + { + _modifiedProperties.Add(property); + } + } + + + private List<string> _clientPropertiesModifiedInServer = new List<string>(); + + /// <summary> + /// 客户端可以改变的属性在服务器端被改变了 + /// </summary> + public List<string> ClientPropertiesModifiedInServer + { + get { return _clientPropertiesModifiedInServer; } + set { _clientPropertiesModifiedInServer = value; } + } + + + private void AddClientPropertyModifiedInServer(string property) + { + if (!_clientPropertiesModifiedInServer.Contains(property)) + { + _clientPropertiesModifiedInServer.Add(property); + } + } + + #endregion + + #region BackupInitializedProperties BackupPostDataProperty + + private Dictionary<string, string> _initializedProperties = new Dictionary<string, string>(); + private Dictionary<string, string> _postDataProperties = new Dictionary<string, string>(); + + /// <summary> + /// 备份初始化属性值 + /// 在输出 AJAX 回发之前,会拿这个初始属性值和当时属性值做对比,以确定这些属性是否被用户改变 + /// </summary> + public void BackupInitializedProperties() + { + foreach (string prop in _control.AjaxProperties) + { + _initializedProperties.Add(prop, GetPropertyHashcode(prop)); + } + } + + /// <summary> + /// 备份 PostData 的属性值(也就是在客户端改变的属性值) + /// </summary> + /// <param name="prop"></param> + public void BackupPostDataProperty(string prop) + { + // 可能会添加多次 + string propValue = GetPropertyHashcode(prop); + if (_postDataProperties.ContainsKey(prop)) + { + _postDataProperties[prop] = propValue; + } + else + { + _postDataProperties.Add(prop, propValue); + } + } + + /// <summary> + /// 计算被修改的属性列表(更新 ModifiedProperties 和 ClientPropertiesModifiedInServer 两个值) + /// 这个需要在 OnPreRender 中调用,在页面第一次加载,正常的回发以及AJAX回发时都要调用 + /// </summary> + public void CalculateModifiedProperties() + { + // Step1 + foreach (string prop in _control.AjaxProperties) + { + if (_initializedProperties[prop] != GetPropertyHashcode(prop)) + { + AddModifiedProperty(prop); + } + } + + // Step2 + foreach (string prop in _control.ClientAjaxProperties) + { + string backupValue = String.Empty; + if (_postDataProperties.ContainsKey(prop)) + { + backupValue = _postDataProperties[prop]; + } + else + { + backupValue = _initializedProperties[prop]; + } + + if (backupValue != GetPropertyHashcode(prop)) + { + AddClientPropertyModifiedInServer(prop); + + //既然这个ClientAjaxProperty在服务器端被改变,则这个属性一定是属于ModifiedProperties,因为存在如下逻辑: + // 一个CheckBox默认的Checked为false,客户端改变为true,服务器端又修改为false,则在Step1中就无法判断出这是一个ModifiedProperty. + AddModifiedProperty(prop); + } + } + } + + private string GetPropertyHashcode(string prop) + { + object propValue = _control.GetPropertyJSONValue(prop); + return propValue == null ? "" : propValue.ToString(); + } + #endregion + + #region GetTotalModifiedProperties + + /// <summary> + /// 页面第一次加载至今改变过的属性列表总和(其中可能经历多次正常的页面回发和局部 AJAX 回发) + /// </summary> + /// <returns></returns> + public List<string> GetTotalModifiedProperties() + { + List<string> props = new List<string>(); + + // Now we are in a page postback. + if (_control.Page.IsPostBack) + { + // Get modified properties from current HTTP request values (These properties must have been changed in post client or server). + foreach (JProperty prop in _control.PostBackState.Properties()) + { + props.Add(prop.Name); + } + } + + // Modified properties in current page load. + foreach (string prop in _modifiedProperties) + { + if (!props.Contains(prop)) + { + props.Add(prop); + } + } + + return props; + } + + + #endregion + + #region oldcode + + + //private List<string> _clientModifiedProperties = new List<string>(); + //public void AddClientModifiedProperties(string property) + //{ + // if (!_clientModifiedProperties.Contains(property)) + // { + // _clientModifiedProperties.Add(property); + // } + //} + //public List<string> GetClientModifiedProperties() + //{ + // return _clientModifiedProperties; + //} + //public bool ClientModifiedPropertiesContains(string property) + //{ + // return _clientModifiedProperties.Contains(property); + //} + //public void SetPropertyViaPostData(string property, object value) + //{ + // _state[property] = value; + + // AddClientModifiedProperties(property); + //} + + + + + + //public object this[string key] + //{ + // get + // { + // if (!_state.ContainsKey(key)) + // { + // return null; + // } + // else + // { + // return _state[key]; + // } + // } + // set + // { + // //object oldValue = ObjectUtil.GetPropertyValue(_control, key); + // //if (IsValueChanged(oldValue, value)) + // //{ + // _state[key] = value; + + // if (_control.ControlInitialized) // && _ajaxProperties.Contains(key) + // { + // _modifiedProperties.Add(key); + // } + // //} + // } + //} + + + //// It's impossible + //private bool IsValueChanged(object oldValue, object newValue) + //{ + // if (oldValue != null && newValue != null) + // { + // if (oldValue.GetType().BaseType == typeof(Array)) + // { + // return new JArray((Array)oldValue).ToString() != new JArray((Array)newValue).ToString(); + // } + // return !oldValue.Equals(newValue); + // } + // return oldValue != newValue; + //} + + + #endregion + + } +} diff --git a/FineUI/Business/Util/HtmlNodeBuilder.cs b/FineUI/Business/Util/HtmlNodeBuilder.cs index 28cdd35..86bd7a8 100644 --- a/FineUI/Business/Util/HtmlNodeBuilder.cs +++ b/FineUI/Business/Util/HtmlNodeBuilder.cs @@ -1,123 +1,123 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: HtmlNodeBuilder.cs - * CreatedOn: 2008-05-27 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI.WebControls; -using System.Web.UI; -using System.Web; - -namespace FineUI -{ - /// <summary> - /// 创建HTML节点的帮助类 - /// </summary> - public class HtmlNodeBuilder - { - private string _nodeName; - private string _innerProperty; - - private Dictionary<string, string> _properties = new Dictionary<string, string>(); - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="nodeName">节点名称</param> - public HtmlNodeBuilder(string nodeName) - { - _nodeName = nodeName; - } - - /// <summary> - /// 节点内部值 - /// </summary> - public string InnerProperty - { - get { return _innerProperty; } - set { _innerProperty = value; } - } - - /// <summary> - /// 设置属性 - /// </summary> - /// <param name="name">属性名</param> - /// <param name="value">属性值</param> - public void SetProperty(string name, string value) - { - if (_properties.ContainsKey(name)) - { - _properties[name] = value; - } - else - { - _properties.Add(name, value); - } - } - - /// <summary> - /// 取得属性的值 - /// </summary> - /// <param name="name">属性名</param> - /// <returns>属性值</returns> - public string GetProperty(string name) - { - if (_properties.ContainsKey(name)) - { - return _properties[name]; - } - else - { - return String.Empty; - } - } - - - /// <summary> - /// 转化为客户端可用的HTML标签字符串 - /// </summary> - /// <returns>客户端可用的HTML标签字符串</returns> - public override string ToString() - { - StringBuilder sb = new StringBuilder(); - - sb.AppendFormat("<{0}", _nodeName); - - foreach (string name in _properties.Keys) - { - //// Double quote is forbidden in html node property value. - //sb.AppendFormat(" {0}={1}", name, JsHelper.Enquote(_properties[name].Replace("\"", "\\\""))); - - // HTML节点属性中不能包括双引号、左尖括号,右尖括号等等 - // <input value="ss\"dd" /> -> <input dd?="" value="ss\"/> - // 需要对其进行HTML转意 - sb.AppendFormat(" {0}=\"{1}\"", name, HttpUtility.HtmlEncode(_properties[name])); - } - - sb.AppendFormat(">{0}</{1}>", _innerProperty, _nodeName); - - return sb.ToString(); - } - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: HtmlNodeBuilder.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Web; + +namespace FineUI +{ + /// <summary> + /// 创建HTML节点的帮助类 + /// </summary> + public class HtmlNodeBuilder + { + private string _nodeName; + private string _innerProperty; + + private Dictionary<string, string> _properties = new Dictionary<string, string>(); + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="nodeName">节点名称</param> + public HtmlNodeBuilder(string nodeName) + { + _nodeName = nodeName; + } + + /// <summary> + /// 节点内部值 + /// </summary> + public string InnerProperty + { + get { return _innerProperty; } + set { _innerProperty = value; } + } + + /// <summary> + /// 设置属性 + /// </summary> + /// <param name="name">属性名</param> + /// <param name="value">属性值</param> + public void SetProperty(string name, string value) + { + if (_properties.ContainsKey(name)) + { + _properties[name] = value; + } + else + { + _properties.Add(name, value); + } + } + + /// <summary> + /// 取得属性的值 + /// </summary> + /// <param name="name">属性名</param> + /// <returns>属性值</returns> + public string GetProperty(string name) + { + if (_properties.ContainsKey(name)) + { + return _properties[name]; + } + else + { + return String.Empty; + } + } + + + /// <summary> + /// 转化为客户端可用的HTML标签字符串 + /// </summary> + /// <returns>客户端可用的HTML标签字符串</returns> + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat("<{0}", _nodeName); + + foreach (string name in _properties.Keys) + { + //// Double quote is forbidden in html node property value. + //sb.AppendFormat(" {0}={1}", name, JsHelper.Enquote(_properties[name].Replace("\"", "\\\""))); + + // HTML节点属性中不能包括双引号、左尖括号,右尖括号等等 + // <input value="ss\"dd" /> -> <input dd?="" value="ss\"/> + // 需要对其进行HTML转意 + sb.AppendFormat(" {0}=\"{1}\"", name, HttpUtility.HtmlEncode(_properties[name])); + } + + sb.AppendFormat(">{0}</{1}>", _innerProperty, _nodeName); + + return sb.ToString(); + } + } +} diff --git a/FineUI/Business/Util/JSONUtil.cs b/FineUI/Business/Util/JSONUtil.cs index fe8a8b8..a7822e2 100644 --- a/FineUI/Business/Util/JSONUtil.cs +++ b/FineUI/Business/Util/JSONUtil.cs @@ -1,95 +1,95 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: JSONUtil.cs - * CreatedOn: 2010-04-18 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI.WebControls; -using System.Web.UI; -using System.Reflection; -using System.Data; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - - -namespace FineUI -{ - /// <summary> - /// JSON帮助类 - /// </summary> - public class JSONUtil - { - /// <summary> - /// 将JArray转换为整型数组 - /// </summary> - /// <param name="ja">JArray对象</param> - /// <returns>整型数组</returns> - public static int[] IntArrayFromJArray(JArray ja) - { - int length = ja.Count; - - int[] array = new int[length]; - for (int i = 0; i < length; i++) - { - array[i] = ja[i].Value<int>(); - } - return array; - } - - /// <summary> - /// 将JArray转换为字符串数组 - /// </summary> - /// <param name="ja">JArray对象</param> - /// <returns>字符串数组</returns> - public static string[] StringArrayFromJArray(JArray ja) - { - int length = ja.Count; - - string[] array = new string[length]; - for (int i = 0; i < length; i++) - { - array[i] = ja[i].Value<string>();// ja.getString(i); - } - return array; - } - - /// <summary> - /// 将JArray转换为对象数组 - /// </summary> - /// <param name="ja">JArray对象</param> - /// <returns>对象数组</returns> - public static object[] ObjectArrayFromJArray(JArray ja) - { - int length = ja.Count; - - object[] array = new object[length]; - for (int i = 0; i < length; i++) - { - array[i] = ja[i].Value<JValue>().Value;// ja.getValue(i); - } - return array; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: JSONUtil.cs + * CreatedOn: 2010-04-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Reflection; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI +{ + /// <summary> + /// JSON帮助类 + /// </summary> + public class JSONUtil + { + /// <summary> + /// 将JArray转换为整型数组 + /// </summary> + /// <param name="ja">JArray对象</param> + /// <returns>整型数组</returns> + public static int[] IntArrayFromJArray(JArray ja) + { + int length = ja.Count; + + int[] array = new int[length]; + for (int i = 0; i < length; i++) + { + array[i] = ja[i].Value<int>(); + } + return array; + } + + /// <summary> + /// 将JArray转换为字符串数组 + /// </summary> + /// <param name="ja">JArray对象</param> + /// <returns>字符串数组</returns> + public static string[] StringArrayFromJArray(JArray ja) + { + int length = ja.Count; + + string[] array = new string[length]; + for (int i = 0; i < length; i++) + { + array[i] = ja[i].Value<string>();// ja.getString(i); + } + return array; + } + + /// <summary> + /// 将JArray转换为对象数组 + /// </summary> + /// <param name="ja">JArray对象</param> + /// <returns>对象数组</returns> + public static object[] ObjectArrayFromJArray(JArray ja) + { + int length = ja.Count; + + object[] array = new object[length]; + for (int i = 0; i < length; i++) + { + array[i] = ja[i].Value<JValue>().Value;// ja.getValue(i); + } + return array; + } + + } +} diff --git a/FineUI/Business/Util/ObjectUtil.cs b/FineUI/Business/Util/ObjectUtil.cs index 5c32999..6fb7829 100644 --- a/FineUI/Business/Util/ObjectUtil.cs +++ b/FineUI/Business/Util/ObjectUtil.cs @@ -1,118 +1,118 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ObjectUtil.cs - * CreatedOn: 2008-06-11 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI.WebControls; -using System.Web.UI; -using System.Reflection; -using System.Data; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace FineUI -{ - /// <summary> - /// 对象帮助类 - /// </summary> - public class ObjectUtil - { - /// <summary> - /// 获取对象的属性值 - /// </summary> - /// <param name="obj">可能是DataRowView或一个对象</param> - /// <param name="propertyName">属性名</param> - /// <returns>属性值</returns> - public static object GetPropertyValue(object obj, string propertyName) - { - object result = null; - - try - { - if (obj is DataRow) - { - result = (obj as DataRow)[propertyName]; - } - else if (obj is DataRowView) - { - result = (obj as DataRowView)[propertyName]; - } - else if (obj is JObject) - { - result = (obj as JObject).Value<JValue>(propertyName).Value; //.getValue(propertyName); - } - else - { - result = GetPropertyValueFormObject(obj, propertyName); - } - } - catch (Exception) - { - // 找不到此属性 - } - - return result; - } - - /// <summary> - /// 获取对象的属性值 - /// </summary> - /// <param name="obj">对象</param> - /// <param name="propertyName">属性名("Color"、"BodyStyle"或者"Info.UserName")</param> - /// <returns>属性值</returns> - private static object GetPropertyValueFormObject(object obj, string propertyName) - { - object rowObj = obj; - object result = null; - - if (propertyName.IndexOf(".") > 0) - { - string[] properties = propertyName.Split('.'); - object tmpObj = rowObj; - - for (int i = 0; i < properties.Length; i++) - { - PropertyInfo property = tmpObj.GetType().GetProperty(properties[i]); - if (property != null) - { - tmpObj = property.GetValue(tmpObj, null); - } - } - - result = tmpObj; - } - else - { - PropertyInfo property = rowObj.GetType().GetProperty(propertyName); - if (property != null) - { - result = property.GetValue(rowObj, null); - } - } - - return result; - } - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ObjectUtil.cs + * CreatedOn: 2008-06-11 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Reflection; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// 对象帮助类 + /// </summary> + public class ObjectUtil + { + /// <summary> + /// 获取对象的属性值 + /// </summary> + /// <param name="obj">可能是DataRowView或一个对象</param> + /// <param name="propertyName">属性名</param> + /// <returns>属性值</returns> + public static object GetPropertyValue(object obj, string propertyName) + { + object result = null; + + try + { + if (obj is DataRow) + { + result = (obj as DataRow)[propertyName]; + } + else if (obj is DataRowView) + { + result = (obj as DataRowView)[propertyName]; + } + else if (obj is JObject) + { + result = (obj as JObject).Value<JValue>(propertyName).Value; //.getValue(propertyName); + } + else + { + result = GetPropertyValueFormObject(obj, propertyName); + } + } + catch (Exception) + { + // 找不到此属性 + } + + return result; + } + + /// <summary> + /// 获取对象的属性值 + /// </summary> + /// <param name="obj">对象</param> + /// <param name="propertyName">属性名("Color"、"BodyStyle"或者"Info.UserName")</param> + /// <returns>属性值</returns> + private static object GetPropertyValueFormObject(object obj, string propertyName) + { + object rowObj = obj; + object result = null; + + if (propertyName.IndexOf(".") > 0) + { + string[] properties = propertyName.Split('.'); + object tmpObj = rowObj; + + for (int i = 0; i < properties.Length; i++) + { + PropertyInfo property = tmpObj.GetType().GetProperty(properties[i], BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (property != null) + { + tmpObj = property.GetValue(tmpObj, null); + } + } + + result = tmpObj; + } + else + { + PropertyInfo property = rowObj.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (property != null) + { + result = property.GetValue(rowObj, null); + } + } + + return result; + } + } +} diff --git a/FineUI/Business/Util/StringUtil.cs b/FineUI/Business/Util/StringUtil.cs index 9329745..094213b 100644 --- a/FineUI/Business/Util/StringUtil.cs +++ b/FineUI/Business/Util/StringUtil.cs @@ -1,460 +1,460 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: StringUtil.cs - * CreatedOn: 2008-06-25 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI.WebControls; -using System.Web.UI; -using System.Web; -using System.Text.RegularExpressions; -using System.IO; -using System.IO.Compression; - -namespace FineUI -{ - /// <summary> - /// 字符串帮助类 - /// </summary> - public class StringUtil - { - #region GZIPPED_VIEWSTATE - - /// <summary> - /// GZIP压缩的ViewState隐藏字段的ID - /// </summary> - public static readonly string VIEWSTATE_ID = "__VIEWSTATE"; - - /// <summary> - /// GZIP压缩的ViewState隐藏字段的ID - /// </summary> - public static readonly string GZIPPED_VIEWSTATE_ID = "__VIEWSTATE_GZ"; - - #endregion - - #region EnumFromName EnumToName - - /// <summary> - /// 获取枚举实例 - /// </summary> - /// <param name="enumType">枚举类型</param> - /// <param name="enumName">枚举实例名称</param> - /// <returns>枚举实例</returns> - public static object EnumFromName(Type enumType, string enumName) - { - return Enum.Parse(enumType, enumName); - } - - /// <summary> - /// 获取枚举实例名称 - /// </summary> - /// <param name="param">枚举实例</param> - /// <returns>枚举实例名称</returns> - public static string EnumToName(Enum param) - { - return Enum.GetName(param.GetType(), param); - } - - #endregion - - #region StripHtml - - /// <summary> - /// 去除字符串中的Html - /// </summary> - /// <param name="source">字符串</param> - /// <returns>字符串</returns> - public static string StripHtml(string source) - { - return Regex.Replace(source, @"<[\s\S]*?>", "", RegexOptions.IgnoreCase); - } - - #endregion - - #region GetIntListFromString GetStringListFromString - - /// <summary> - /// 将字符串"1,2,3"转化为整形列表[1,2,3] - /// </summary> - /// <param name="postValue">字符串</param> - /// <returns>整形列表</returns> - public static List<int> GetIntListFromString(string postValue) - { - return GetIntListFromString(postValue, false); - } - - /// <summary> - /// 将字符串"1,2,3"转化为整形列表[1,2,3] - /// </summary> - /// <param name="postValue">字符串</param> - /// <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> - /// <returns>整形列表</returns> - public static List<int> GetIntListFromString(string postValue, bool sortBeforeReturn) - { - if (String.IsNullOrEmpty(postValue)) - { - return new List<int>(); - } - - List<int> intList = new List<int>(); - string[] intStrArray = postValue.Trim().TrimEnd(',').Split(','); - foreach (string rowIndex in intStrArray) - { - if (!String.IsNullOrEmpty(rowIndex)) - { - intList.Add(Convert.ToInt32(rowIndex)); - } - } - - if (sortBeforeReturn) - { - // 按照从小到大排序 - intList.Sort(); - } - - return intList; - } - - - /// <summary> - /// 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] - /// </summary> - /// <param name="postValue">字符串</param> - /// <returns>字符串列表</returns> - public static List<string> GetStringListFromString(string postValue) - { - return GetStringListFromString(postValue, false); - } - - /// <summary> - /// 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] - /// </summary> - /// <param name="postValue"></param> - /// <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> - /// <returns>字符串列表</returns> - public static List<string> GetStringListFromString(string postValue, bool sortBeforeReturn) - { - if (String.IsNullOrEmpty(postValue)) - { - return new List<string>(); - } - - List<string> strList = new List<string>(); - string[] strArray = postValue.Trim().TrimEnd(',').Split(','); - foreach (string str in strArray) - { - if (!String.IsNullOrEmpty(str)) - { - strList.Add(str); - } - } - - if (sortBeforeReturn) - { - // 按照从小到大排序 - strList.Sort(); - } - - return strList; - } - - /// <summary> - /// 将字符串数组["ssdd","2","ok"]转化为字符串"ssdd,2,ok" - /// </summary> - /// <param name="strArray">字符串数组</param> - /// <returns>字符串</returns> - public static string GetStringFromStringArray(string[] strArray) - { - if (strArray == null || strArray.Length == 0) - { - return String.Empty; - } - - StringBuilder sb = new StringBuilder(); - foreach (string str in strArray) - { - sb.AppendFormat("{0},", str); - } - - return sb.ToString().TrimEnd(','); - } - - /// <summary> - /// 将整型数组[2,3,4]转化为字符串"2,3,4" - /// </summary> - /// <param name="intArray">整形数组</param> - /// <returns>字符串</returns> - public static string GetStringFromIntArray(int[] intArray) - { - if (intArray == null || intArray.Length == 0) - { - return String.Empty; - } - - StringBuilder sb = new StringBuilder(); - foreach (int str in intArray) - { - sb.AppendFormat("{0},", str); - } - - return sb.ToString().TrimEnd(','); - } - - #endregion - - #region CompareIntArray/CompareStringArray - - /// <summary> - /// 比较两个整形数组是否相等 - /// </summary> - /// <param name="array1">整形数组1</param> - /// <param name="array2">整形数组2</param> - /// <returns>是否相等</returns> - public static bool CompareIntArray(int[] array1, int[] array2) - { - if (array1 == null && array2 == null) - { - return true; - } - - if ((array1 == null && array2 != null) || (array1 != null && array2 == null)) - { - return false; - } - - if (array1.Length != array2.Length) - { - return false; - } - - List<int> list1 = new List<int>(array1); - List<int> list2 = new List<int>(array2); - - for (int i = 0; i < list1.Count; i++) - { - if (list1[i] != list2[i]) - { - return false; - } - } - - return true; - } - - /// <summary> - /// 比较两个字符串数组是否相等 - /// </summary> - /// <param name="array1">字符串数组1</param> - /// <param name="array2">字符串数组2</param> - /// <returns>是否相等</returns> - public static bool CompareStringArray(string[] array1, string[] array2) - { - if (array1 == null && array2 == null) - { - return true; - } - - if ((array1 == null && array2 != null) || (array1 != null && array2 == null)) - { - return false; - } - - if (array1.Length != array2.Length) - { - return false; - } - - List<string> list1 = new List<string>(array1); - List<string> list2 = new List<string>(array2); - - for (int i = 0; i < list1.Count; i++) - { - if (list1[i] != list2[i]) - { - return false; - } - } - - return true; - } - - #endregion - - #region ConvertPercentageToDecimalString - - /// <summary> - /// 将 10% 转换为 0.1 的字符串的形式 - /// </summary> - /// <param name="percentageStr">百分比字符串</param> - /// <returns>小数</returns> - public static string ConvertPercentageToDecimalString(string percentageStr) - { - string decimalStr = String.Empty; - - percentageStr = percentageStr.Trim().Replace("%", "%").TrimEnd('%'); - - try - { - decimalStr = (Convert.ToDouble(percentageStr) * 0.01).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); - } - catch - { - ; - } - - return decimalStr; - } - - #endregion - - #region DecodeFrom64/EncodeTo64 - - /// <summary> - /// Base64解码 - /// </summary> - /// <param name="encodedDataAsBytes">需要解码的字节数组</param> - /// <returns>解码后的字符串</returns> - public static string DecodeFrom64(byte[] encodedDataAsBytes) - { - return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); - } - - /// <summary> - /// Base64解码 - /// </summary> - /// <param name="encodedData">需要解码的字符串</param> - /// <returns>解码后的字符串</returns> - public static string DecodeFrom64(string encodedData) - { - byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); - return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); - } - - /// <summary> - /// Base64编码 - /// </summary> - /// <param name="toEncodeAsBytes">需要编码的字节数组</param> - /// <returns>编码后的字符串</returns> - public static string EncodeTo64(byte[] toEncodeAsBytes) - { - return System.Convert.ToBase64String(toEncodeAsBytes); - } - - /// <summary> - /// Base64编码 - /// </summary> - /// <param name="toEncode">需要编码的字符串</param> - /// <returns>编码后的字符串</returns> - public static string EncodeTo64(string toEncode) - { - byte[] toEncodeAsBytes = System.Text.UTF8Encoding.UTF8.GetBytes(toEncode); - return System.Convert.ToBase64String(toEncodeAsBytes); - } - #endregion - - #region Gzip/Ungzip - - /// <summary> - /// Gzip编码字符串 - /// </summary> - /// <param name="source">源字符串</param> - /// <returns>Gzip后的字符串</returns> - public static string Gzip(string source) - { - using (var outStream = new MemoryStream()) - { - using (var gzipStream = new GZipStream(outStream, CompressionMode.Compress)) - { - using (var mStream = new MemoryStream(Encoding.UTF8.GetBytes(source))) - { - mStream.WriteTo(gzipStream); - } - } - - return StringUtil.EncodeTo64(outStream.ToArray()); - } - } - - /// <summary> - /// 解码Gzip字符串 - /// </summary> - /// <param name="source">Gzip后的字符串</param> - /// <returns>源字符串</returns> - public static string Ungzip(string source) - { - byte[] bytes = Convert.FromBase64String(source); - - using (GZipStream stream = new GZipStream(new MemoryStream(bytes), CompressionMode.Decompress)) - { - const int size = 512; - byte[] buffer = new byte[size]; - using (MemoryStream memory = new MemoryStream()) - { - int count = 0; - do - { - count = stream.Read(buffer, 0, size); - if (count > 0) - { - memory.Write(buffer, 0, count); - } - } while (count > 0); - - return System.Text.Encoding.UTF8.GetString(memory.ToArray()); - } - } - } - #endregion - - #region LoadGzippedViewState - /// <summary> - /// 加载Gzipped的ViewState - /// </summary> - /// <param name="gzippedState"></param> - /// <returns></returns> - public static object LoadGzippedViewState(string gzippedState) - { - string ungzippedState = StringUtil.Ungzip(gzippedState); - LosFormatter formatter = new LosFormatter(); - return formatter.Deserialize(ungzippedState); - } - - /// <summary> - /// 生成Gzipped的ViewState - /// </summary> - /// <param name="viewState"></param> - /// <returns></returns> - public static string GenerateGzippedViewState(object viewState) - { - LosFormatter formatter = new LosFormatter(); - using (StringWriter writer = new StringWriter()) - { - formatter.Serialize(writer, viewState); - return StringUtil.Gzip(writer.ToString()); - } - } - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: StringUtil.cs + * CreatedOn: 2008-06-25 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Web; +using System.Text.RegularExpressions; +using System.IO; +using System.IO.Compression; + +namespace FineUI +{ + /// <summary> + /// 字符串帮助类 + /// </summary> + public class StringUtil + { + #region GZIPPED_VIEWSTATE + + /// <summary> + /// GZIP压缩的ViewState隐藏字段的ID + /// </summary> + public static readonly string VIEWSTATE_ID = "__VIEWSTATE"; + + /// <summary> + /// GZIP压缩的ViewState隐藏字段的ID + /// </summary> + public static readonly string GZIPPED_VIEWSTATE_ID = "__VIEWSTATE_GZ"; + + #endregion + + #region EnumFromName EnumToName + + /// <summary> + /// 获取枚举实例 + /// </summary> + /// <param name="enumType">枚举类型</param> + /// <param name="enumName">枚举实例名称</param> + /// <returns>枚举实例</returns> + public static object EnumFromName(Type enumType, string enumName) + { + return Enum.Parse(enumType, enumName); + } + + /// <summary> + /// 获取枚举实例名称 + /// </summary> + /// <param name="param">枚举实例</param> + /// <returns>枚举实例名称</returns> + public static string EnumToName(Enum param) + { + return Enum.GetName(param.GetType(), param); + } + + #endregion + + #region StripHtml + + /// <summary> + /// 去除字符串中的Html + /// </summary> + /// <param name="source">字符串</param> + /// <returns>字符串</returns> + public static string StripHtml(string source) + { + return Regex.Replace(source, @"<[\s\S]*?>", "", RegexOptions.IgnoreCase); + } + + #endregion + + #region GetIntListFromString GetStringListFromString + + /// <summary> + /// 将字符串"1,2,3"转化为整形列表[1,2,3] + /// </summary> + /// <param name="postValue">字符串</param> + /// <returns>整形列表</returns> + public static List<int> GetIntListFromString(string postValue) + { + return GetIntListFromString(postValue, false); + } + + /// <summary> + /// 将字符串"1,2,3"转化为整形列表[1,2,3] + /// </summary> + /// <param name="postValue">字符串</param> + /// <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> + /// <returns>整形列表</returns> + public static List<int> GetIntListFromString(string postValue, bool sortBeforeReturn) + { + if (String.IsNullOrEmpty(postValue)) + { + return new List<int>(); + } + + List<int> intList = new List<int>(); + string[] intStrArray = postValue.Trim().TrimEnd(',').Split(','); + foreach (string rowIndex in intStrArray) + { + if (!String.IsNullOrEmpty(rowIndex)) + { + intList.Add(Convert.ToInt32(rowIndex)); + } + } + + if (sortBeforeReturn) + { + // 按照从小到大排序 + intList.Sort(); + } + + return intList; + } + + + /// <summary> + /// 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + /// </summary> + /// <param name="postValue">字符串</param> + /// <returns>字符串列表</returns> + public static List<string> GetStringListFromString(string postValue) + { + return GetStringListFromString(postValue, false); + } + + /// <summary> + /// 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + /// </summary> + /// <param name="postValue"></param> + /// <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> + /// <returns>字符串列表</returns> + public static List<string> GetStringListFromString(string postValue, bool sortBeforeReturn) + { + if (String.IsNullOrEmpty(postValue)) + { + return new List<string>(); + } + + List<string> strList = new List<string>(); + string[] strArray = postValue.Trim().TrimEnd(',').Split(','); + foreach (string str in strArray) + { + if (!String.IsNullOrEmpty(str)) + { + strList.Add(str); + } + } + + if (sortBeforeReturn) + { + // 按照从小到大排序 + strList.Sort(); + } + + return strList; + } + + /// <summary> + /// 将字符串数组["ssdd","2","ok"]转化为字符串"ssdd,2,ok" + /// </summary> + /// <param name="strArray">字符串数组</param> + /// <returns>字符串</returns> + public static string GetStringFromStringArray(string[] strArray) + { + if (strArray == null || strArray.Length == 0) + { + return String.Empty; + } + + StringBuilder sb = new StringBuilder(); + foreach (string str in strArray) + { + sb.AppendFormat("{0},", str); + } + + return sb.ToString().TrimEnd(','); + } + + /// <summary> + /// 将整型数组[2,3,4]转化为字符串"2,3,4" + /// </summary> + /// <param name="intArray">整形数组</param> + /// <returns>字符串</returns> + public static string GetStringFromIntArray(int[] intArray) + { + if (intArray == null || intArray.Length == 0) + { + return String.Empty; + } + + StringBuilder sb = new StringBuilder(); + foreach (int str in intArray) + { + sb.AppendFormat("{0},", str); + } + + return sb.ToString().TrimEnd(','); + } + + #endregion + + #region CompareIntArray/CompareStringArray + + /// <summary> + /// 比较两个整形数组是否相等 + /// </summary> + /// <param name="array1">整形数组1</param> + /// <param name="array2">整形数组2</param> + /// <returns>是否相等</returns> + public static bool CompareIntArray(int[] array1, int[] array2) + { + if (array1 == null && array2 == null) + { + return true; + } + + if ((array1 == null && array2 != null) || (array1 != null && array2 == null)) + { + return false; + } + + if (array1.Length != array2.Length) + { + return false; + } + + List<int> list1 = new List<int>(array1); + List<int> list2 = new List<int>(array2); + + for (int i = 0; i < list1.Count; i++) + { + if (list1[i] != list2[i]) + { + return false; + } + } + + return true; + } + + /// <summary> + /// 比较两个字符串数组是否相等 + /// </summary> + /// <param name="array1">字符串数组1</param> + /// <param name="array2">字符串数组2</param> + /// <returns>是否相等</returns> + public static bool CompareStringArray(string[] array1, string[] array2) + { + if (array1 == null && array2 == null) + { + return true; + } + + if ((array1 == null && array2 != null) || (array1 != null && array2 == null)) + { + return false; + } + + if (array1.Length != array2.Length) + { + return false; + } + + List<string> list1 = new List<string>(array1); + List<string> list2 = new List<string>(array2); + + for (int i = 0; i < list1.Count; i++) + { + if (list1[i] != list2[i]) + { + return false; + } + } + + return true; + } + + #endregion + + #region ConvertPercentageToDecimalString + + /// <summary> + /// 将 10% 转换为 0.1 的字符串的形式 + /// </summary> + /// <param name="percentageStr">百分比字符串</param> + /// <returns>小数</returns> + public static string ConvertPercentageToDecimalString(string percentageStr) + { + string decimalStr = String.Empty; + + percentageStr = percentageStr.Trim().Replace("%", "%").TrimEnd('%'); + + try + { + decimalStr = (Convert.ToDouble(percentageStr) * 0.01).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + } + catch + { + ; + } + + return decimalStr; + } + + #endregion + + #region DecodeFrom64/EncodeTo64 + + /// <summary> + /// Base64解码 + /// </summary> + /// <param name="encodedDataAsBytes">需要解码的字节数组</param> + /// <returns>解码后的字符串</returns> + public static string DecodeFrom64(byte[] encodedDataAsBytes) + { + return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); + } + + /// <summary> + /// Base64解码 + /// </summary> + /// <param name="encodedData">需要解码的字符串</param> + /// <returns>解码后的字符串</returns> + public static string DecodeFrom64(string encodedData) + { + byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); + return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); + } + + /// <summary> + /// Base64编码 + /// </summary> + /// <param name="toEncodeAsBytes">需要编码的字节数组</param> + /// <returns>编码后的字符串</returns> + public static string EncodeTo64(byte[] toEncodeAsBytes) + { + return System.Convert.ToBase64String(toEncodeAsBytes); + } + + /// <summary> + /// Base64编码 + /// </summary> + /// <param name="toEncode">需要编码的字符串</param> + /// <returns>编码后的字符串</returns> + public static string EncodeTo64(string toEncode) + { + byte[] toEncodeAsBytes = System.Text.UTF8Encoding.UTF8.GetBytes(toEncode); + return System.Convert.ToBase64String(toEncodeAsBytes); + } + #endregion + + #region Gzip/Ungzip + + /// <summary> + /// Gzip编码字符串 + /// </summary> + /// <param name="source">源字符串</param> + /// <returns>Gzip后的字符串</returns> + public static string Gzip(string source) + { + using (var outStream = new MemoryStream()) + { + using (var gzipStream = new GZipStream(outStream, CompressionMode.Compress)) + { + using (var mStream = new MemoryStream(Encoding.UTF8.GetBytes(source))) + { + mStream.WriteTo(gzipStream); + } + } + + return StringUtil.EncodeTo64(outStream.ToArray()); + } + } + + /// <summary> + /// 解码Gzip字符串 + /// </summary> + /// <param name="source">Gzip后的字符串</param> + /// <returns>源字符串</returns> + public static string Ungzip(string source) + { + byte[] bytes = Convert.FromBase64String(source); + + using (GZipStream stream = new GZipStream(new MemoryStream(bytes), CompressionMode.Decompress)) + { + const int size = 512; + byte[] buffer = new byte[size]; + using (MemoryStream memory = new MemoryStream()) + { + int count = 0; + do + { + count = stream.Read(buffer, 0, size); + if (count > 0) + { + memory.Write(buffer, 0, count); + } + } while (count > 0); + + return System.Text.Encoding.UTF8.GetString(memory.ToArray()); + } + } + } + #endregion + + #region LoadGzippedViewState + /// <summary> + /// 加载Gzipped的ViewState + /// </summary> + /// <param name="gzippedState"></param> + /// <returns></returns> + public static object LoadGzippedViewState(string gzippedState) + { + string ungzippedState = StringUtil.Ungzip(gzippedState); + LosFormatter formatter = new LosFormatter(); + return formatter.Deserialize(ungzippedState); + } + + /// <summary> + /// 生成Gzipped的ViewState + /// </summary> + /// <param name="viewState"></param> + /// <returns></returns> + public static string GenerateGzippedViewState(object viewState) + { + LosFormatter formatter = new LosFormatter(); + using (StringWriter writer = new StringWriter()) + { + formatter.Serialize(writer, viewState); + return StringUtil.Gzip(writer.ToString()); + } + } + #endregion + + } +} diff --git a/FineUI/Business/Util/StyleUtil.cs b/FineUI/Business/Util/StyleUtil.cs index ae980be..89f559f 100644 --- a/FineUI/Business/Util/StyleUtil.cs +++ b/FineUI/Business/Util/StyleUtil.cs @@ -1,85 +1,107 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: StyleUtil.cs - * CreatedOn: 2008-05-22 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI.WebControls; -using System.Web.UI; - -namespace FineUI -{ - /// <summary> - /// 样式帮助类 - /// </summary> - public class StyleUtil - { - /// <summary> - /// 提取样式字符串 - /// </summary> - /// <param name="css">CSS字符串</param> - /// <param name="styleName">样式名称</param> - /// <returns>样式字符串</returns> - public static string GetSingleStyleFormCSS(string css, string styleName) - { - // 从字符串padding:5px;background-color:#DFE8F6;中提取background-color:#DFE8F6; - styleName = styleName.ToLower(); - css = css.ToLower().Replace(" ", ""); - - if (css.Contains(styleName)) - { - int styleStartIndex = css.IndexOf(styleName); - int styleEndIndex = css.IndexOf(";", styleStartIndex); - - return css.Substring(styleStartIndex, styleEndIndex - styleStartIndex + 1); - } - - return String.Empty; - } - - /// <summary> - /// 获取背景图片样式 - /// </summary> - /// <param name="selector">选择符</param> - /// <param name="imageUrl">图片地址</param> - /// <returns>CSS样式</returns> - public static string GetBackgroundStyle(string selector, string imageUrl) - { - return String.Format("{0}{{background: url({1}) !important;}}", selector, imageUrl); - } - - /// <summary> - /// 获取背景图片样式(no-repeat) - /// </summary> - /// <param name="selector">选择符</param> - /// <param name="imageUrl">图片地址</param> - /// <returns>CSS样式</returns> - public static string GetNoRepeatBackgroundStyle(string selector, string imageUrl) - { - return String.Format("{0}{{background: url({1}) no-repeat;}}", selector, imageUrl); - } - - } - -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: StyleUtil.cs + * CreatedOn: 2008-05-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 样式帮助类 + /// </summary> + public class StyleUtil + { + /// <summary> + /// 提取样式字符串 + /// </summary> + /// <param name="css">CSS字符串</param> + /// <param name="styleName">样式名称</param> + /// <returns>样式字符串</returns> + public static string GetSingleStyleFormCSS(string css, string styleName) + { + // 从字符串padding:5px;background-color:#DFE8F6;中提取background-color:#DFE8F6; + styleName = styleName.ToLower(); + css = css.ToLower().Replace(" ", ""); + + if (css.Contains(styleName)) + { + int styleStartIndex = css.IndexOf(styleName); + int styleEndIndex = css.IndexOf(";", styleStartIndex); + + return css.Substring(styleStartIndex, styleEndIndex - styleStartIndex + 1); + } + + return String.Empty; + } + + /// <summary> + /// 获取背景图片样式 + /// </summary> + /// <param name="selector">选择符</param> + /// <param name="imageUrl">图片地址</param> + /// <returns>CSS样式</returns> + public static string GetBackgroundStyle(string selector, string imageUrl) + { + return String.Format("{0}{{background: url({1}) !important;}}", selector, imageUrl); + } + + /// <summary> + /// 获取背景图片样式(no-repeat) + /// </summary> + /// <param name="selector">选择符</param> + /// <param name="imageUrl">图片地址</param> + /// <returns>CSS样式</returns> + public static string GetNoRepeatBackgroundStyle(string selector, string imageUrl) + { + return String.Format("{0}{{background: url({1}) no-repeat;}}", selector, imageUrl); + } + + /// <summary> + /// 获取适合CSS的Margin或者Padding定义 + /// </summary> + /// <param name="source">源字符串</param> + /// <returns>CSS样式</returns> + public static string GetMarginPaddingStyle(string source) { + + List<string> result = new List<string>(); + foreach (string item in source.Split(' ')) + { + if (item.Contains("px") || item.Contains("pt") || item.Contains("em")) + { + result.Add(item); + } + else + { + result.Add(Convert.ToInt32(item) + "px"); + } + } + + return String.Join(" ", result.ToArray()); + } + } + +} diff --git a/FineUI/FineUI.csproj b/FineUI/FineUI.csproj index 51c2498..9c57ce0 100644 --- a/FineUI/FineUI.csproj +++ b/FineUI/FineUI.csproj @@ -1,412 +1,406 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProductVersion>9.0.30729</ProductVersion> - <SchemaVersion>2.0</SchemaVersion> - <ProjectGuid>{0F8BF1F6-DDC2-43DA-BB0B-416CC287AC1B}</ProjectGuid> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>FineUI</RootNamespace> - <AssemblyName>FineUI</AssemblyName> - <TargetFrameworkVersion>v2.0</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <Nonshipping>true</Nonshipping> - <FileUpgradeFlags> - </FileUpgradeFlags> - <UpgradeBackupLocation> - </UpgradeBackupLocation> - <OldToolsVersion>3.5</OldToolsVersion> - <PublishUrl>http://localhost/FineUI/</PublishUrl> - <Install>true</Install> - <InstallFrom>Web</InstallFrom> - <UpdateEnabled>true</UpdateEnabled> - <UpdateMode>Foreground</UpdateMode> - <UpdateInterval>7</UpdateInterval> - <UpdateIntervalUnits>Days</UpdateIntervalUnits> - <UpdatePeriodically>false</UpdatePeriodically> - <UpdateRequired>false</UpdateRequired> - <MapFileExtensions>true</MapFileExtensions> - <ApplicationRevision>0</ApplicationRevision> - <ApplicationVersion>1.0.0.%2a</ApplicationVersion> - <IsWebBootstrapper>true</IsWebBootstrapper> - <UseApplicationTrust>false</UseApplicationTrust> - <BootstrapperEnabled>true</BootstrapperEnabled> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - <PlatformTarget>AnyCPU</PlatformTarget> - <DocumentationFile>bin\Release\FineUI.xml</DocumentationFile> - <RegisterForComInterop>false</RegisterForComInterop> - <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> - </PropertyGroup> - <PropertyGroup> - <SignAssembly>true</SignAssembly> - </PropertyGroup> - <PropertyGroup> - <AssemblyOriginatorKeyFile>StrongName.snk</AssemblyOriginatorKeyFile> - </PropertyGroup> - <ItemGroup> - <Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>lib\json.net\Net20\Newtonsoft.Json.dll</HintPath> - </Reference> - <Reference Include="System" /> - <Reference Include="System.configuration" /> - <Reference Include="System.Data" /> - <Reference Include="System.Design" /> - <Reference Include="System.Drawing" /> - <Reference Include="System.Web" /> - <Reference Include="System.Windows.Forms" /> - <Reference Include="System.Xml" /> - </ItemGroup> - <ItemGroup> - <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase.CollapsablePanel.FormBase\FormBase.cs" /> - <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase.CollapsablePanel\CollapsablePanel.cs" /> - <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase\PanelBase.cs" /> - <Compile Include="BaseWebControls\BoxComponent.Container\Container.cs" /> - <Compile Include="BaseWebControls\BoxComponent.Field.TextField.RealTextField\RealTextField.cs" /> - <Compile Include="BaseWebControls\BoxComponent.Field.TextField\TextField.cs" /> - <Compile Include="Business\Enums\Grid\FieldType.cs" /> - <Compile Include="Business\Enums\Grid\Renderer.cs" /> - <Compile Include="Business\Enums\MessageTarget.cs" /> - <Compile Include="WebControls\Field.CheckBox\EventArgs\CheckedEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\Editor\GridColumnEditorCollection.cs" /> - <Compile Include="BaseWebControls\BoxComponent.Field\Field.cs" /> - <Compile Include="BaseWebControls\ControlBase.Component.BoxComponent\BoxComponent.cs" /> - <Compile Include="BaseWebControls\ControlBase.Component\Component.cs" /> - <Compile Include="BaseWebControls\ControlBase\ControlBase.cs" /> - <Compile Include="BaseWebControls\ControlBase\ControlBaseCollection.cs" /> - <Compile Include="Business\ControlBuilder\NotAllowWhitespaceLiteralsBuilder.cs" /> - <Compile Include="BaseWebControls\ControlBase\BaseCollection.cs" /> - <Compile Include="Business\ControlBuilder\ContentPanelBuilder.cs" /> - <Compile Include="Business\Config\GlobalConfig.cs" /> - <Compile Include="Business\Editor\ControlBaseItemsEditor.cs" /> - <Compile Include="Business\Editor\MenuItemsEditor.cs" /> - <Compile Include="Business\Editor\ToolbarItemsEditor.cs" /> - <Compile Include="Business\Editor\GridColumnEditorEditor.cs" /> - <Compile Include="Business\Enums\CompareType.cs" /> - <Compile Include="Business\Enums\HideMode.cs" /> - <Compile Include="Business\Enums\Icon.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="Business\Enums\IconHelper.cs" /> - <Compile Include="Business\Enums\Theme.cs" /> - <Compile Include="Business\Enums\Language.cs" /> - <Compile Include="Business\Enums\Operator.cs" /> - <Compile Include="Business\Enums\TriggerIcon.cs" /> - <Compile Include="Business\Enums\WindowPosition.cs" /> - <Compile Include="Business\Enums\ToolbarPosition.cs" /> - <Compile Include="Business\Enums\ButtonType.cs" /> - <Compile Include="Business\Enums\Target.cs" /> - <Compile Include="Business\Enums\RegexPattern.cs" /> - <Compile Include="Business\Enums\CloseAction.cs" /> - <Compile Include="Business\Enums\Position.cs" /> - <Compile Include="Business\Enums\TabPosition.cs" /> - <Compile Include="Business\Enums\IconAlign.cs" /> - <Compile Include="Business\Enums\ButtonSize.cs" /> - <Compile Include="Business\Enums\BoxLayoutAlign.cs" /> - <Compile Include="Business\Enums\BoxLayoutPosition.cs" /> - <Compile Include="Business\Enums\FooterBarAlign.cs" /> - <Compile Include="Business\Enums\AjaxLoadingType.cs" /> - <Compile Include="Business\Enums\TextAlign.cs" /> - <Compile Include="Business\Enums\LabelAlign.cs" /> - <Compile Include="Business\Enums\VerticalAlign.cs" /> - <Compile Include="Business\JsHelper\JsArrayBuilder.cs" /> - <Compile Include="Business\JsHelper\OptionBuilder.cs" /> - <Compile Include="Business\ResourceManager\ClientJavascriptIDManager.cs" /> - <Compile Include="Business\ResourceManager\CommonResourceHelper.cs" /> - <Compile Include="Business\ResourceManager\ResourceHandler.cs" /> - <Compile Include="Business\ResourceManager\ResponseFilter.cs" /> - <Compile Include="Business\ResourceManager\ScriptModule.cs" /> - <Compile Include="Business\ResourceManager\TreeNodeIDManager.cs" /> - <Compile Include="Business\SimulateTree\SimulateTreeHeper.cs" /> - <Compile Include="Business\SimulateTree\SimulateTreeNode.cs" /> - <Compile Include="Business\Util\XState.cs" /> - <Compile Include="Business\Util\ControlUtil.cs" /> - <Compile Include="Business\Util\StringUtil.cs" /> - <Compile Include="Business\Util\ObjectUtil.cs" /> - <Compile Include="Business\Util\HtmlNodeBuilder.cs" /> - <Compile Include="Business\Util\StyleUtil.cs" /> - <Compile Include="Business\Util\JSONUtil.cs" /> - <Compile Include="lib\HtmlAgilityPack\crc32.cs" /> - <Compile Include="lib\HtmlAgilityPack\EncodingFoundException.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlAttribute.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlAttributeCollection.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlCmdLine.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlCommentNode.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlConsoleListener.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlDocument.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlElementFlag.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlEntity.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlNameTable.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlNode.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlNodeCollection.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlNodeNavigator.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlNodeType.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlParseError.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlParseErrorCode.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlTextNode.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlWeb.cs" /> - <Compile Include="lib\HtmlAgilityPack\HtmlWebException.cs" /> - <Compile Include="lib\HtmlAgilityPack\IOLibrary.cs" /> - <Compile Include="lib\HtmlAgilityPack\MixedCodeDocument.cs" /> - <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentCodeFragment.cs" /> - <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragment.cs" /> - <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragmentList.cs" /> - <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragmentType.cs" /> - <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentTextFragment.cs" /> - <Compile Include="lib\HtmlAgilityPack\NameValuePair.cs" /> - <Compile Include="lib\HtmlAgilityPack\NameValuePairList.cs" /> - <Compile Include="lib\JSBeautifyLib\JSBeautify.cs" /> - <Compile Include="WebControls\BoxComponent.Toolbar\ToolbarCollection.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\MenuCheckBox.cs" /> - <Compile Include="WebControls\ControlBase.Timer\Timer.cs" /> - <Compile Include="BaseWebControls\BoxComponent.Field\TooltipField.cs" /> - <Compile Include="WebControls\ControlBase.UserControlConnector\UserControlConnector.cs" /> - <Compile Include="WebControls\Field.RadioButtonList\RadioItem\RadioItem.cs" /> - <Compile Include="WebControls\Field.RadioButtonList\RadioItem\RadioItemCollection.cs" /> - <Compile Include="StaticClass\Confirm.cs" /> - <Compile Include="StaticClass\ActiveWindow.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\MenuItem.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\MenuButton.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\MenuText.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\MenuSeparator.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\MenuHyperLink.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\MenuItemCollection.cs" /> - <Compile Include="WebControls\Component.Menu\MenuItem\BaseMenuItem.cs" /> - <Compile Include="WebControls\Component.SplitButton\SplitButton.cs" /> - <Compile Include="WebControls\Component.Menu\Menu.cs" /> - <Compile Include="WebControls\ControlBase.PageManager\PageManager.cs" /> - <Compile Include="WebControls\Field.Label.Image\Image.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.FileUpload\FileUpload.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.HiddenField\HiddenField.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.TwinTriggerBox\TwinTriggerBox.cs" /> - <Compile Include="WebControls\Field.Label.LinkButton\LinkButton.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="WebControls\Field.RadioButtonList\RadioButtonList.cs" /> - <Compile Include="WebControls\Field.RadioButton\RadioButton.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.TriggerBox\TriggerBox.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="Business\Editor\GridColumnsEditor.cs" /> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowSelectEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridAfterEditEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\BaseField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderCheckField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderBaseField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\RowNumberField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\GroupField.cs" /> - <Compile Include="WebControls\PanelBase.RegionPanel\RegionPanel.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\Accordion.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\AccordionPane\AccordionPane.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\AccordionPane\AccordionPaneCollection.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeExpandEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeCommandEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeCheckEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\TreeNode\TreeNode.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\TreeNode\TreeNodeCollection.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\XmlAttributeMapping\XmlAttributeMapping.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\XmlAttributeMapping\XmlAttributeMappingCollection.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Window\EventArgs\WindowCloseEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridPreRowEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridPageEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridCommandEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowClickEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\LinkButtonField.cs" /> - <Compile Include="WebControls\PanelBase.RegionPanel\Region\Region.cs" /> - <Compile Include="WebControls\PanelBase.RegionPanel\Region\RegionCollection.cs" /> - <Compile Include="WebControls\Component.Calendar\Calendar.cs" /> - <Compile Include="WebControls\BoxComponent.Toolbar\Toolbar.cs" /> - <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarText\ToolbarText.cs" /> - <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarSeparator\ToolbarSeparator.cs"> - </Compile> - <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarFill\ToolbarFill.cs"> - </Compile> - <Compile Include="WebControls\Field.Label.HyperLink\HyperLink.cs" /> - <Compile Include="StaticClass\PageContext.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\Tree.cs" /> - <Compile Include="Business\ResourceManager\AbsoluteScriptBlock.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.ContentPanel\ContentPanel.cs" /> - <Compile Include="WebControls\ControlBase.PageLoading\PageLoading.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\Form.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\FormRow\FormRow.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\FormRow\FormRowCollection.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="WebControls\PanelBase.CollapsablePanel.GroupPanel\GroupPanel.cs" /> - <Compile Include="WebControls\Field.CheckBox\CheckBox.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.SimpleForm\SimpleForm.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Window\Window.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridSortEventArgs.cs" /> - <Compile Include="WebControls\PanelBase.Grid\Grid.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\BoundField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\CheckBoxField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\WindowField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\ImageField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\TemplateField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\HyperLinkField.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\GridColumn\GridColumn.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridColumn\GridColumn\GridColumnCollection.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridRow\GridRowControl.cs" /> - <Compile Include="WebControls\PanelBase.Grid\GridRow\GridRow.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="WebControls\PanelBase.Grid\GridRow\GridRowCollection.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="WebControls\Field.TextField.DropDownList\ListItem\ListItem.cs" /> - <Compile Include="WebControls\Field.TextField.DropDownList\ListItem\ListItemCollection.cs" /> - <Compile Include="WebControls\Field.TextField.DropDownList\DropDownList.cs" /> - <Compile Include="WebControls\Field.Label\Label.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.TextArea\TextArea.cs" /> - <Compile Include="WebControls\PanelBase.TabStrip\Tab\Tab.cs" /> - <Compile Include="WebControls\PanelBase.TabStrip\TabStrip.cs" /> - <Compile Include="WebControls\PanelBase.CollapsablePanel.Panel\Panel.cs" /> - <Compile Include="WebControls\Field.HtmlEditor\HtmlEditor.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.DatePicker\DatePicker.cs" /> - <Compile Include="WebControls\PanelBase.TabStrip\Tab\TabCollection.cs" /> - <Compile Include="Business\ResourceManager\ScriptBlock.cs" /> - <Compile Include="Business\Enums\ButtonAlign.cs" /> - <Compile Include="Business\Enums\Layout.cs" /> - <Compile Include="Business\Util\ExtDateTimeConvertor.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.NumberBox\NumberBox.cs" /> - <Compile Include="Business\Enums\TextMode.cs" /> - <Compile Include="Business\Enums\ToolTipType.cs" /> - <Compile Include="Business\JsHelper\JsHelper.cs" /> - <Compile Include="StaticClass\Alert.cs" /> - <Compile Include="Business\Enums\MessageBoxIcon.cs" /> - <Compile Include="WebControls\Component.Button\Button.cs" /> - <Compile Include="Business\JsHelper\JsObjectBuilder.cs" /> - <Compile Include="Business\ResourceManager\ResourceHelper.cs" /> - <Compile Include="Business\Config\Constants.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.TextBox\TextBox.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Business\Config\ConfigSection.cs" /> - <Compile Include="Business\ResourceManager\ResourceManager.cs" /> - <Compile Include="WebControls\Field.CheckBoxList\CheckBoxList.cs" /> - <Compile Include="WebControls\Field.CheckBoxList\CheckItem\CheckItem.cs" /> - <Compile Include="WebControls\Field.CheckBoxList\CheckItem\CheckItemCollection.cs" /> - <Compile Include="WebControls\Field.TextField.RealTextField.TimePicker\TimePicker.cs" /> - </ItemGroup> - <ItemGroup> - <Content Include="lib\json.net\Net20\Newtonsoft.Json.dll" /> - <Content Include="lib\json.net\Net20\Newtonsoft.Json.xml" /> - <Content Include="lib\json.net\Net35\Newtonsoft.Json.dll" /> - <Content Include="lib\json.net\Net35\Newtonsoft.Json.xml" /> - <Content Include="lib\json.net\Net40\Newtonsoft.Json.dll" /> - <Content Include="lib\json.net\Net40\Newtonsoft.Json.xml" /> - <Content Include="lib\licenses\json.net.txt" /> - <Content Include="release_history_en.txt" /> - <EmbeddedResource Include="toolbox\Accordion.bmp" /> - <EmbeddedResource Include="toolbox\Button.bmp" /> - <EmbeddedResource Include="toolbox\Calendar.bmp" /> - <EmbeddedResource Include="toolbox\CheckBox.bmp" /> - <EmbeddedResource Include="toolbox\CheckBoxList.bmp" /> - <EmbeddedResource Include="toolbox\ContentPanel.bmp" /> - <EmbeddedResource Include="toolbox\DataList.bmp" /> - <EmbeddedResource Include="toolbox\DatePicker.bmp" /> - <EmbeddedResource Include="toolbox\DropDownList.bmp" /> - <EmbeddedResource Include="toolbox\FileUpload.bmp" /> - <EmbeddedResource Include="toolbox\Form.bmp" /> - <EmbeddedResource Include="toolbox\Grid.bmp" /> - <EmbeddedResource Include="toolbox\GroupPanel.bmp" /> - <EmbeddedResource Include="toolbox\HiddenField.bmp" /> - <EmbeddedResource Include="toolbox\HtmlEditor.bmp" /> - <EmbeddedResource Include="toolbox\HyperLink.bmp" /> - <EmbeddedResource Include="toolbox\Image.bmp" /> - <EmbeddedResource Include="toolbox\ImageButton.bmp" /> - <EmbeddedResource Include="toolbox\Label.bmp" /> - <EmbeddedResource Include="toolbox\LinkButton.bmp" /> - <EmbeddedResource Include="toolbox\ListBox.bmp" /> - <EmbeddedResource Include="toolbox\Literal.bmp" /> - <EmbeddedResource Include="toolbox\Menu.bmp" /> - <EmbeddedResource Include="toolbox\MenuButton.bmp" /> - <EmbeddedResource Include="toolbox\MenuCheckBox.bmp" /> - <EmbeddedResource Include="toolbox\MenuHyperLink.bmp" /> - <EmbeddedResource Include="toolbox\MenuSeparator.bmp" /> - <EmbeddedResource Include="toolbox\MenuText.bmp" /> - <EmbeddedResource Include="toolbox\NumberBox.bmp" /> - <EmbeddedResource Include="toolbox\PageLoading.bmp" /> - <EmbeddedResource Include="toolbox\PageManager.bmp" /> - <EmbeddedResource Include="toolbox\Panel.bmp" /> - <EmbeddedResource Include="toolbox\PlaceHolder.bmp" /> - <EmbeddedResource Include="toolbox\RadioButton.bmp" /> - <EmbeddedResource Include="toolbox\RadioButtonList.bmp" /> - <EmbeddedResource Include="toolbox\RegionPanel.bmp" /> - <EmbeddedResource Include="toolbox\SimpleForm.bmp" /> - <EmbeddedResource Include="toolbox\SplitButton.bmp" /> - <EmbeddedResource Include="toolbox\Table.bmp" /> - <EmbeddedResource Include="toolbox\TabStrip.bmp" /> - <EmbeddedResource Include="toolbox\TextArea.bmp" /> - <EmbeddedResource Include="toolbox\TextBox.bmp" /> - <EmbeddedResource Include="toolbox\TimePicker.bmp" /> - <EmbeddedResource Include="toolbox\Toolbar.bmp" /> - <EmbeddedResource Include="toolbox\ToolbarFill.bmp" /> - <EmbeddedResource Include="toolbox\ToolbarSeparator.bmp" /> - <EmbeddedResource Include="toolbox\ToolbarText.bmp" /> - <EmbeddedResource Include="toolbox\Tree.bmp" /> - <EmbeddedResource Include="toolbox\TriggerBox.bmp" /> - <EmbeddedResource Include="toolbox\TwinTriggerBox.bmp" /> - <EmbeddedResource Include="toolbox\UserControlConnector.bmp" /> - <EmbeddedResource Include="toolbox\View.bmp" /> - <EmbeddedResource Include="toolbox\Window.bmp" /> - <None Include="StrongName.snk" /> - </ItemGroup> - <ItemGroup> - <Content Include="ajax_properties.txt" /> - <Content Include="lib\licenses\extjs.txt" /> - <Content Include="lib\licenses\JSBeautify.txt" /> - <Content Include="release_history.txt" /> - </ItemGroup> - <ItemGroup> - <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> - <Visible>False</Visible> - <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> - <Install>false</Install> - </BootstrapperPackage> - <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> - <Visible>False</Visible> - <ProductName>.NET Framework 3.5 SP1</ProductName> - <Install>true</Install> - </BootstrapperPackage> - <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> - <Visible>False</Visible> - <ProductName>Windows Installer 3.1</ProductName> - <Install>true</Install> - </BootstrapperPackage> - </ItemGroup> - <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{0F8BF1F6-DDC2-43DA-BB0B-416CC287AC1B}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>FineUI</RootNamespace> + <AssemblyName>FineUI</AssemblyName> + <TargetFrameworkVersion>v2.0</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <Nonshipping>true</Nonshipping> + <FileUpgradeFlags> + </FileUpgradeFlags> + <UpgradeBackupLocation> + </UpgradeBackupLocation> + <OldToolsVersion>3.5</OldToolsVersion> + <PublishUrl>http://localhost/FineUI/</PublishUrl> + <Install>true</Install> + <InstallFrom>Web</InstallFrom> + <UpdateEnabled>true</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>true</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <PlatformTarget>AnyCPU</PlatformTarget> + <DocumentationFile>bin\Release\FineUI.xml</DocumentationFile> + <RegisterForComInterop>false</RegisterForComInterop> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + </PropertyGroup> + <PropertyGroup> + <SignAssembly>true</SignAssembly> + </PropertyGroup> + <PropertyGroup> + <AssemblyOriginatorKeyFile>StrongName.snk</AssemblyOriginatorKeyFile> + </PropertyGroup> + <ItemGroup> + <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\Newtonsoft.Json\Net20\Newtonsoft.Json.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.configuration" /> + <Reference Include="System.Data" /> + <Reference Include="System.Design" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase.CollapsablePanel.FormBase\FormBase.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase.CollapsablePanel\CollapsablePanel.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase\PanelBase.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Container\Container.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field.TextField.RealTextField\RealTextField.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field.TextField\TextField.cs" /> + <Compile Include="BaseWebControls\ControlBase\Listener\Listener.cs" /> + <Compile Include="BaseWebControls\ControlBase\Listener\ListenerCollection.cs" /> + <Compile Include="Business\Enums\ButtonType.cs" /> + <Compile Include="Business\Enums\Grid\FieldType.cs" /> + <Compile Include="Business\Enums\Grid\Renderer.cs" /> + <Compile Include="Business\Enums\MessageTarget.cs" /> + <Compile Include="Business\Enums\SummaryPosition.cs" /> + <Compile Include="Business\Enums\ToolbarAlign.cs" /> + <Compile Include="Business\Util\FState.cs" /> + <Compile Include="Business\Util\DateUtil.cs" /> + <Compile Include="WebControls\ControlBase.CPHConnector\CPHConnector.cs" /> + <Compile Include="WebControls\ControlBase.PageManager\CustomEventArgs.cs" /> + <Compile Include="WebControls\Field.CheckBox\EventArgs\CheckedEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeNodeEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreePreNodeEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\Editor\GridColumnEditorCollection.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field\Field.cs" /> + <Compile Include="BaseWebControls\ControlBase.Component.BoxComponent\BoxComponent.cs" /> + <Compile Include="BaseWebControls\ControlBase.Component\Component.cs" /> + <Compile Include="BaseWebControls\ControlBase\ControlBase.cs" /> + <Compile Include="BaseWebControls\ControlBase\ControlBaseCollection.cs" /> + <Compile Include="Business\ControlBuilder\NotAllowWhitespaceLiteralsBuilder.cs" /> + <Compile Include="BaseWebControls\ControlBase\BaseCollection.cs" /> + <Compile Include="Business\ControlBuilder\ContentPanelBuilder.cs" /> + <Compile Include="Business\Config\GlobalConfig.cs" /> + <Compile Include="Business\Editor\ControlBaseItemsEditor.cs" /> + <Compile Include="Business\Editor\MenuItemsEditor.cs" /> + <Compile Include="Business\Editor\ToolbarItemsEditor.cs" /> + <Compile Include="Business\Editor\GridColumnEditorEditor.cs" /> + <Compile Include="Business\Enums\CompareType.cs" /> + <Compile Include="Business\Enums\HideMode.cs" /> + <Compile Include="Business\Enums\Icon.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Business\Enums\IconHelper.cs" /> + <Compile Include="Business\Enums\Theme.cs" /> + <Compile Include="Business\Enums\Language.cs" /> + <Compile Include="Business\Enums\Operator.cs" /> + <Compile Include="Business\Enums\TriggerIcon.cs" /> + <Compile Include="Business\Enums\WindowPosition.cs" /> + <Compile Include="Business\Enums\ToolbarPosition.cs" /> + <Compile Include="Business\Enums\Target.cs" /> + <Compile Include="Business\Enums\RegexPattern.cs" /> + <Compile Include="Business\Enums\CloseAction.cs" /> + <Compile Include="Business\Enums\Position.cs" /> + <Compile Include="Business\Enums\TabPosition.cs" /> + <Compile Include="Business\Enums\IconAlign.cs" /> + <Compile Include="Business\Enums\ButtonSize.cs" /> + <Compile Include="Business\Enums\BoxLayoutAlign.cs" /> + <Compile Include="Business\Enums\BoxLayoutPosition.cs" /> + <Compile Include="Business\Enums\AjaxLoadingType.cs" /> + <Compile Include="Business\Enums\TextAlign.cs" /> + <Compile Include="Business\Enums\LabelAlign.cs" /> + <Compile Include="Business\Enums\VerticalAlign.cs" /> + <Compile Include="Business\JsHelper\JsArrayBuilder.cs" /> + <Compile Include="Business\JsHelper\OptionBuilder.cs" /> + <Compile Include="Business\ResourceManager\ClientJavascriptIDManager.cs" /> + <Compile Include="Business\ResourceManager\CommonResourceHelper.cs" /> + <Compile Include="Business\ResourceManager\ResourceHandler.cs" /> + <Compile Include="Business\ResourceManager\ResponseFilter.cs" /> + <Compile Include="Business\ResourceManager\ScriptModule.cs" /> + <Compile Include="Business\ResourceManager\TreeNodeIDManager.cs" /> + <Compile Include="Business\SimulateTree\SimulateTreeHeper.cs" /> + <Compile Include="Business\SimulateTree\SimulateTreeNode.cs" /> + <Compile Include="Business\Util\ControlUtil.cs" /> + <Compile Include="Business\Util\StringUtil.cs" /> + <Compile Include="Business\Util\ObjectUtil.cs" /> + <Compile Include="Business\Util\HtmlNodeBuilder.cs" /> + <Compile Include="Business\Util\StyleUtil.cs" /> + <Compile Include="Business\Util\JSONUtil.cs" /> + <Compile Include="lib\HtmlAgilityPack\crc32.cs" /> + <Compile Include="lib\HtmlAgilityPack\EncodingFoundException.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlAttribute.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlAttributeCollection.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlCmdLine.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlCommentNode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlConsoleListener.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlDocument.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlElementFlag.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlEntity.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNameTable.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNodeCollection.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNodeNavigator.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNodeType.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlParseError.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlParseErrorCode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlTextNode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlWeb.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlWebException.cs" /> + <Compile Include="lib\HtmlAgilityPack\IOLibrary.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocument.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentCodeFragment.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragment.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragmentList.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragmentType.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentTextFragment.cs" /> + <Compile Include="lib\HtmlAgilityPack\NameValuePair.cs" /> + <Compile Include="lib\HtmlAgilityPack\NameValuePairList.cs" /> + <Compile Include="lib\JSBeautifyLib\JSBeautify.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\ToolbarCollection.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuCheckBox.cs" /> + <Compile Include="WebControls\ControlBase.Timer\Timer.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field\TooltipField.cs" /> + <Compile Include="WebControls\ControlBase.UserControlConnector\UserControlConnector.cs" /> + <Compile Include="WebControls\Field.RadioButtonList\RadioItem\RadioItem.cs" /> + <Compile Include="WebControls\Field.RadioButtonList\RadioItem\RadioItemCollection.cs" /> + <Compile Include="StaticClass\Confirm.cs" /> + <Compile Include="StaticClass\ActiveWindow.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuItem.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuButton.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuText.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuSeparator.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuHyperLink.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuItemCollection.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\BaseMenuItem.cs" /> + <Compile Include="WebControls\Component.SplitButton\SplitButton.cs" /> + <Compile Include="WebControls\Component.Menu\Menu.cs" /> + <Compile Include="WebControls\ControlBase.PageManager\PageManager.cs" /> + <Compile Include="WebControls\Field.Label.Image\Image.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.FileUpload\FileUpload.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.HiddenField\HiddenField.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TwinTriggerBox\TwinTriggerBox.cs" /> + <Compile Include="WebControls\Field.Label.LinkButton\LinkButton.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\Field.RadioButtonList\RadioButtonList.cs" /> + <Compile Include="WebControls\Field.RadioButton\RadioButton.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TriggerBox\TriggerBox.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Business\Editor\GridColumnsEditor.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowSelectEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridAfterEditEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\BaseField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderCheckField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderBaseField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RowNumberField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\GroupField.cs" /> + <Compile Include="WebControls\PanelBase.RegionPanel\RegionPanel.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\Accordion.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\AccordionPane\AccordionPane.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\AccordionPane\AccordionPaneCollection.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeCommandEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeCheckEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\TreeNode\TreeNode.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\TreeNode\TreeNodeCollection.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\XmlAttributeMapping\XmlAttributeMapping.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\XmlAttributeMapping\XmlAttributeMappingCollection.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Window\EventArgs\WindowCloseEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridPreRowEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridPageEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridCommandEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowClickEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\LinkButtonField.cs" /> + <Compile Include="WebControls\PanelBase.RegionPanel\Region\Region.cs" /> + <Compile Include="WebControls\PanelBase.RegionPanel\Region\RegionCollection.cs" /> + <Compile Include="WebControls\Component.Calendar\Calendar.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\Toolbar.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarText\ToolbarText.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarSeparator\ToolbarSeparator.cs"> + </Compile> + <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarFill\ToolbarFill.cs"> + </Compile> + <Compile Include="WebControls\Field.Label.HyperLink\HyperLink.cs" /> + <Compile Include="StaticClass\PageContext.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\Tree.cs" /> + <Compile Include="Business\ResourceManager\AbsoluteScriptBlock.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.ContentPanel\ContentPanel.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\Form.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\FormRow\FormRow.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\FormRow\FormRowCollection.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.CollapsablePanel.GroupPanel\GroupPanel.cs" /> + <Compile Include="WebControls\Field.CheckBox\CheckBox.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.SimpleForm\SimpleForm.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Window\Window.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridSortEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\Grid.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\BoundField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\CheckBoxField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\WindowField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\ImageField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\TemplateField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\HyperLinkField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\GridColumn\GridColumn.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\GridColumn\GridColumnCollection.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridRow\GridTemplateContainer.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridRow\GridRow.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.Grid\GridRow\GridRowCollection.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\Field.TextField.DropDownList\ListItem\ListItem.cs" /> + <Compile Include="WebControls\Field.TextField.DropDownList\ListItem\ListItemCollection.cs" /> + <Compile Include="WebControls\Field.TextField.DropDownList\DropDownList.cs" /> + <Compile Include="WebControls\Field.Label\Label.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TextArea\TextArea.cs" /> + <Compile Include="WebControls\PanelBase.TabStrip\Tab\Tab.cs" /> + <Compile Include="WebControls\PanelBase.TabStrip\TabStrip.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Panel\Panel.cs" /> + <Compile Include="WebControls\Field.HtmlEditor\HtmlEditor.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.DatePicker\DatePicker.cs" /> + <Compile Include="WebControls\PanelBase.TabStrip\Tab\TabCollection.cs" /> + <Compile Include="Business\ResourceManager\ScriptBlock.cs" /> + <Compile Include="Business\Enums\Layout.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.NumberBox\NumberBox.cs" /> + <Compile Include="Business\Enums\TextMode.cs" /> + <Compile Include="Business\Enums\ToolTipType.cs" /> + <Compile Include="Business\JsHelper\JsHelper.cs" /> + <Compile Include="StaticClass\Alert.cs" /> + <Compile Include="Business\Enums\MessageBoxIcon.cs" /> + <Compile Include="WebControls\Component.Button\Button.cs" /> + <Compile Include="Business\JsHelper\JsObjectBuilder.cs" /> + <Compile Include="Business\ResourceManager\ResourceHelper.cs" /> + <Compile Include="Business\Config\Constants.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TextBox\TextBox.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Business\Config\ConfigSection.cs" /> + <Compile Include="Business\ResourceManager\ResourceManager.cs" /> + <Compile Include="WebControls\Field.CheckBoxList\CheckBoxList.cs" /> + <Compile Include="WebControls\Field.CheckBoxList\CheckItem\CheckItem.cs" /> + <Compile Include="WebControls\Field.CheckBoxList\CheckItem\CheckItemCollection.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TimePicker\TimePicker.cs" /> + </ItemGroup> + <ItemGroup> + <Content Include="release_history_en.txt" /> + <EmbeddedResource Include="toolbox\Accordion.bmp" /> + <EmbeddedResource Include="toolbox\Button.bmp" /> + <EmbeddedResource Include="toolbox\Calendar.bmp" /> + <EmbeddedResource Include="toolbox\CheckBox.bmp" /> + <EmbeddedResource Include="toolbox\CheckBoxList.bmp" /> + <EmbeddedResource Include="toolbox\ContentPanel.bmp" /> + <EmbeddedResource Include="toolbox\DataList.bmp" /> + <EmbeddedResource Include="toolbox\DatePicker.bmp" /> + <EmbeddedResource Include="toolbox\DropDownList.bmp" /> + <EmbeddedResource Include="toolbox\FileUpload.bmp" /> + <EmbeddedResource Include="toolbox\Form.bmp" /> + <EmbeddedResource Include="toolbox\Grid.bmp" /> + <EmbeddedResource Include="toolbox\GroupPanel.bmp" /> + <EmbeddedResource Include="toolbox\HiddenField.bmp" /> + <EmbeddedResource Include="toolbox\HtmlEditor.bmp" /> + <EmbeddedResource Include="toolbox\HyperLink.bmp" /> + <EmbeddedResource Include="toolbox\Image.bmp" /> + <EmbeddedResource Include="toolbox\ImageButton.bmp" /> + <EmbeddedResource Include="toolbox\Label.bmp" /> + <EmbeddedResource Include="toolbox\LinkButton.bmp" /> + <EmbeddedResource Include="toolbox\ListBox.bmp" /> + <EmbeddedResource Include="toolbox\Literal.bmp" /> + <EmbeddedResource Include="toolbox\Menu.bmp" /> + <EmbeddedResource Include="toolbox\MenuButton.bmp" /> + <EmbeddedResource Include="toolbox\MenuCheckBox.bmp" /> + <EmbeddedResource Include="toolbox\MenuHyperLink.bmp" /> + <EmbeddedResource Include="toolbox\MenuSeparator.bmp" /> + <EmbeddedResource Include="toolbox\MenuText.bmp" /> + <EmbeddedResource Include="toolbox\NumberBox.bmp" /> + <EmbeddedResource Include="toolbox\PageLoading.bmp" /> + <EmbeddedResource Include="toolbox\PageManager.bmp" /> + <EmbeddedResource Include="toolbox\Panel.bmp" /> + <EmbeddedResource Include="toolbox\PlaceHolder.bmp" /> + <EmbeddedResource Include="toolbox\RadioButton.bmp" /> + <EmbeddedResource Include="toolbox\RadioButtonList.bmp" /> + <EmbeddedResource Include="toolbox\RegionPanel.bmp" /> + <EmbeddedResource Include="toolbox\SimpleForm.bmp" /> + <EmbeddedResource Include="toolbox\SplitButton.bmp" /> + <EmbeddedResource Include="toolbox\Table.bmp" /> + <EmbeddedResource Include="toolbox\TabStrip.bmp" /> + <EmbeddedResource Include="toolbox\TextArea.bmp" /> + <EmbeddedResource Include="toolbox\TextBox.bmp" /> + <EmbeddedResource Include="toolbox\TimePicker.bmp" /> + <EmbeddedResource Include="toolbox\Toolbar.bmp" /> + <EmbeddedResource Include="toolbox\ToolbarFill.bmp" /> + <EmbeddedResource Include="toolbox\ToolbarSeparator.bmp" /> + <EmbeddedResource Include="toolbox\ToolbarText.bmp" /> + <EmbeddedResource Include="toolbox\Tree.bmp" /> + <EmbeddedResource Include="toolbox\TriggerBox.bmp" /> + <EmbeddedResource Include="toolbox\TwinTriggerBox.bmp" /> + <EmbeddedResource Include="toolbox\UserControlConnector.bmp" /> + <EmbeddedResource Include="toolbox\View.bmp" /> + <EmbeddedResource Include="toolbox\Window.bmp" /> + <None Include="StrongName.snk" /> + </ItemGroup> + <ItemGroup> + <Content Include="release_history.txt" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> </Project> \ No newline at end of file diff --git a/FineUI/Properties/AssemblyInfo.cs b/FineUI/Properties/AssemblyInfo.cs index 93aa56a..182eb55 100644 --- a/FineUI/Properties/AssemblyInfo.cs +++ b/FineUI/Properties/AssemblyInfo.cs @@ -1,49 +1,49 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Web.UI; - - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -#if DEBUG -[assembly: AssemblyTitle("FineUI - Debug")] -#else -[assembly: AssemblyTitle("FineUI - Release")] -#endif - -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("FineUI")] -[assembly: AssemblyProduct("FineUI")] -[assembly: AssemblyCopyright("Copyright (C) 2008-2012 30372245@qq.com")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e5b98f13-3bde-4009-bc43-82267c23c5f6")] - - -[assembly: TagPrefix("FineUI", "x")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("4.0.1.0")] - - - - +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Web.UI; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +#if DEBUG +[assembly: AssemblyTitle("FineUI - Debug")] +#else +[assembly: AssemblyTitle("FineUI - Release")] +#endif + +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("FineUI")] +[assembly: AssemblyProduct("FineUI")] +[assembly: AssemblyCopyright("Copyright (C) 2008-2012 30372245@qq.com")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e5b98f13-3bde-4009-bc43-82267c23c5f6")] + + +[assembly: TagPrefix("FineUI", "f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("4.2.0.0")] + + + + diff --git a/FineUI/StaticClass/ActiveWindow.cs b/FineUI/StaticClass/ActiveWindow.cs index 512ee32..51000e3 100644 --- a/FineUI/StaticClass/ActiveWindow.cs +++ b/FineUI/StaticClass/ActiveWindow.cs @@ -1,186 +1,210 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ActiveWindow.cs - * CreatedOn: 2008-06-18 22:30 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; - -namespace FineUI -{ - /// <summary> - /// 当前活动窗体帮助类(静态类) - /// </summary> - public static class ActiveWindow - { - #region old code - - // aw = aw - //private static readonly string ACTIVE_WINDOW_SCRIPT = "if(!aw){var aw=parent.window.X.window_default_group.getActive();}"; - //private static readonly string ACTIVE_WINDOW_SCRIPT = "var parentClientID=box_getParentClientIdFromUrl();if(parentClientID){var window2=parent.window;var aw=parent.window.Ext.getCmp(parentClientID);if(aw.box_property_frame_element_name){window2=parent.Ext.query('iframe[name='+aw.box_property_frame_element_name+']')[0].contentWindow;aw=eval('window2.X.'+aw.id);}}"; - //private static readonly string ACTIVE_WINDOW_SCRIPT = "var aw=X.wnd.getActiveWindow();"; - - #endregion - - #region GetWriteBackValueReference - - - /// <summary> - /// 获取将values值写回控件的客户端脚本 - /// </summary> - /// <param name="values">需要写回的字符串列表</param> - /// <returns>客户端脚本</returns> - public static string GetWriteBackValueReference(params string[] values) - { - #region old code - - //// 去除重复的 ACTIVE_WINDOW_SCRIPT - //if (controlClientIds.Contains(ACTIVE_WINDOW_SCRIPT)) - //{ - // controlClientIds = controlClientIds.Replace(ACTIVE_WINDOW_SCRIPT, ""); - //} - - //// 此时 controlClientId 是个字符串 或者是 是个字符串的数组,里面是需要赋值的文本框的ClientID - //StringBuilder sb = new StringBuilder(); - //sb.Append(ACTIVE_WINDOW_SCRIPT); - //sb.AppendFormat("var controlClientIds={0};", controlClientIds); - - //sb.AppendFormat("if(typeof(controlClientIds)=='string'){{{0}}}", "aw[1].Ext.getCmp(controlClientIds).setValue(" + JsHelper.Enquote(value) + ");"); - - //// values - //StringBuilder valuesBuilder = new StringBuilder(); - //if (values.Length > 0) - //{ - // valuesBuilder.AppendFormat("var controlValues={0};", JsHelper.GetJsStringArray(values)); - // valuesBuilder.Append("var controlCount=Math.min(controlClientIds.length-1,controlValues.length);"); - - // valuesBuilder.AppendFormat("for(var i=0;i<controlCount;i++){{{0}}}", "aw[1].Ext.getCmp(controlClientIds[i+1]).setValue(controlValues[i]);"); - //} - - - //sb.AppendFormat("else{{{0}{1}}}", "aw[1].Ext.getCmp(controlClientIds[0]).setValue(" + JsHelper.Enquote(value) + ");", valuesBuilder.ToString()); - //return sb.ToString(); - - #endregion - - return String.Format("X.wnd.writeBackValue.apply(window,{0});", JsHelper.GetJsStringArray(values)); - - } - - #endregion - - #region GetHideReference/GetHideRefreshReference/GetHidePostBackReference - - /// <summary> - /// 获取关闭当前激活窗体的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public static string GetHideReference() - { - return "(function(){var aw=X.wnd.getActiveWindow();if(aw){aw[0].x_hide();}})();"; - } - - /// <summary> - /// 获取关闭当前激活窗体并刷新父页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public static string GetHideRefreshReference() - { - //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_refresh();');}"; - //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_refresh();}"; - return "(function(){var aw=X.wnd.getActiveWindow();if(aw){aw[0].x_hide_refresh();}})();"; - } - - /// <summary> - /// 获取关闭当前激活窗体并回发父页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public static string GetHidePostBackReference() - { - //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_postback();');}"; - //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_postback();}"; - return "(function(){var aw=X.wnd.getActiveWindow();if(aw){aw[0].x_hide_postback();}})();"; - } - - /// <summary> - /// 获取关闭当前激活窗体并回发父页面的客户端脚本 - /// </summary> - /// <param name="argument">回发参数</param> - /// <returns>客户端脚本</returns> - public static string GetHidePostBackReference(string argument) - { - //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_postback(\"" + argument + "\");');}"; - //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_postback('" + argument + "');}"; - - //return "(function(){var aw=X.wnd.getActiveWindow(); if(aw){ aw[0].box_hide_postback('" + argument + "'); }})();"; - return "(function(){var aw=X.wnd.getActiveWindow();if(aw){aw[0].x_hide_postback(" + JsHelper.GetJsString(argument) + ");}})();"; - } - - #endregion - - #region GetConfirmHideReference - - /// <summary> - /// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public static string GetConfirmHideReference() - { - return String.Format("X.wnd.confirmFormModified(function(){{{0}}});", GetHideReference()); - } - - /// <summary> - /// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再刷新父页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public static string GetConfirmHideRefreshReference() - { - return String.Format("X.wnd.confirmFormModified(function(){{{0}}});", GetHideRefreshReference()); - } - - /// <summary> - /// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public static string GetConfirmHidePostBackReference() - { - return String.Format("X.wnd.confirmFormModified(function(){{{0}}});", GetHidePostBackReference()); - } - - /// <summary> - /// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 - /// </summary> - /// <param name="argument">回发参数</param> - /// <returns>客户端脚本</returns> - public static string GetConfirmHidePostBackReference(string argument) - { - return String.Format("X.wnd.confirmFormModified(function(){{{0}}});", GetHidePostBackReference(argument)); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ActiveWindow.cs + * CreatedOn: 2008-06-18 22:30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 当前活动窗体帮助类(静态类) + /// </summary> + public static class ActiveWindow + { + #region old code + + // aw = aw + //private static readonly string ACTIVE_WINDOW_SCRIPT = "if(!aw){var aw=parent.window.X.window_default_group.getActive();}"; + //private static readonly string ACTIVE_WINDOW_SCRIPT = "var parentClientID=box_getParentClientIdFromUrl();if(parentClientID){var window2=parent.window;var aw=parent.window.Ext.getCmp(parentClientID);if(aw.box_property_frame_element_name){window2=parent.Ext.query('iframe[name='+aw.box_property_frame_element_name+']')[0].contentWindow;aw=eval('window2.X.'+aw.id);}}"; + //private static readonly string ACTIVE_WINDOW_SCRIPT = "var aw=F.wnd.getActiveWindow();"; + + #endregion + + #region GetWriteBackValueReference + + + /// <summary> + /// 获取将values值写回控件的客户端脚本 + /// </summary> + /// <param name="values">需要写回的字符串列表</param> + /// <returns>客户端脚本</returns> + public static string GetWriteBackValueReference(params string[] values) + { + #region old code + + //// 去除重复的 ACTIVE_WINDOW_SCRIPT + //if (controlClientIds.Contains(ACTIVE_WINDOW_SCRIPT)) + //{ + // controlClientIds = controlClientIds.Replace(ACTIVE_WINDOW_SCRIPT, ""); + //} + + //// 此时 controlClientId 是个字符串 或者是 是个字符串的数组,里面是需要赋值的文本框的ClientID + //StringBuilder sb = new StringBuilder(); + //sb.Append(ACTIVE_WINDOW_SCRIPT); + //sb.AppendFormat("var controlClientIds={0};", controlClientIds); + + //sb.AppendFormat("if(typeof(controlClientIds)=='string'){{{0}}}", "aw[1].Ext.getCmp(controlClientIds).setValue(" + JsHelper.Enquote(value) + ");"); + + //// values + //StringBuilder valuesBuilder = new StringBuilder(); + //if (values.Length > 0) + //{ + // valuesBuilder.AppendFormat("var controlValues={0};", JsHelper.GetJsStringArray(values)); + // valuesBuilder.Append("var controlCount=Math.min(controlClientIds.length-1,controlValues.length);"); + + // valuesBuilder.AppendFormat("for(var i=0;i<controlCount;i++){{{0}}}", "aw[1].Ext.getCmp(controlClientIds[i+1]).setValue(controlValues[i]);"); + //} + + + //sb.AppendFormat("else{{{0}{1}}}", "aw[1].Ext.getCmp(controlClientIds[0]).setValue(" + JsHelper.Enquote(value) + ");", valuesBuilder.ToString()); + //return sb.ToString(); + + #endregion + + return String.Format("F.wnd.writeBackValue.apply(window,{0});", JsHelper.EnquoteStringArray(values)); + + } + + #endregion + + #region GetHideReference/GetHideRefreshReference/GetHidePostBackReference + + /// <summary> + /// 获取关闭当前激活窗体的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public static string GetHideReference() + { + return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide();}})();"; + } + + /// <summary> + /// 获取关闭当前激活窗体并刷新父页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public static string GetHideRefreshReference() + { + //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_refresh();');}"; + //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_refresh();}"; + return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_refresh();}})();"; + } + + /// <summary> + /// 获取关闭当前激活窗体并回发父页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public static string GetHidePostBackReference() + { + //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_postback();');}"; + //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_postback();}"; + return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_postback();}})();"; + } + + /// <summary> + /// 获取关闭当前激活窗体并回发父页面的客户端脚本 + /// </summary> + /// <param name="argument">回发参数</param> + /// <returns>客户端脚本</returns> + public static string GetHidePostBackReference(string argument) + { + //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_postback(\"" + argument + "\");');}"; + //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_postback('" + argument + "');}"; + + //return "(function(){var aw=F.wnd.getActiveWindow(); if(aw){ aw[0].box_hide_postback('" + argument + "'); }})();"; + return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_postback(" + JsHelper.Enquote(argument) + ");}})();"; + } + + + /// <summary> + /// 获取关闭当前激活窗体并执行脚本的客户端脚本 + /// </summary> + /// <param name="argument">回发参数</param> + /// <returns>客户端脚本</returns> + public static string GetHideExecuteScriptReference(string argument) + { + return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_executescript(" + JsHelper.Enquote(argument) + ");}})();"; + } + + + + #endregion + + #region oldcode + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHideReference() + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHideReference()); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再刷新父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHideRefreshReference() + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHideRefreshReference()); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHidePostBackReference() + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHidePostBackReference()); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 + ///// </summary> + ///// <param name="argument">回发参数</param> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHidePostBackReference(string argument) + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHidePostBackReference(argument)); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再执行脚本的客户端脚本 + ///// </summary> + ///// <param name="argument">执行的脚本</param> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHideExecuteScriptReference(string argument) + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHideExecuteScriptReference(argument)); + //} + + + #endregion + } +} diff --git a/FineUI/StaticClass/Alert.cs b/FineUI/StaticClass/Alert.cs index e83370b..25a1916 100644 --- a/FineUI/StaticClass/Alert.cs +++ b/FineUI/StaticClass/Alert.cs @@ -1,692 +1,692 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Alert.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * ->2008-04-30 30372245@qq.com 改为静态帮助类 - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; - -namespace FineUI -{ - /// <summary> - /// 对话框帮助类 - /// </summary> - public class Alert - { - #region public static - - /// <summary> - /// 默认提示对话图标 - /// </summary> - public static readonly MessageBoxIcon DefaultMessageBoxIcon = MessageBoxIcon.Information; - - #endregion - - #region class - - private string _message; - - /// <summary> - /// 对话框消息正文 - /// </summary> - public string Message - { - get { return _message; } - set { _message = value; } - } - - private string _title; - - /// <summary> - /// 对话框标题 - /// </summary> - public string Title - { - get { return _title; } - set { _title = value; } - } - - private MessageBoxIcon _messageBoxIcon = DefaultMessageBoxIcon; - - /// <summary> - /// 对话框图标 - /// </summary> - public MessageBoxIcon MessageBoxIcon - { - get { return _messageBoxIcon; } - set { _messageBoxIcon = value; } - } - - private string _okScript; - - /// <summary> - /// 点击确认按钮执行的JavaScript脚本 - /// </summary> - public string OkScript - { - get { return _okScript; } - set { _okScript = value; } - } - - private Target _target; - - /// <summary> - /// 对话框的目标位置 - /// </summary> - public Target Target - { - get { return _target; } - set { _target = value; } - } - - private string _iconUrl; - - /// <summary> - /// 自定义对话框图标地址 - /// </summary> - public string IconUrl - { - get { return _iconUrl; } - set { _iconUrl = value; } - } - - private Icon _icon = Icon.None; - - /// <summary> - /// 自定义对话框图标 - /// </summary> - public Icon Icon - { - get { return _icon; } - set { _icon = value; } - } - - - /// <summary> - /// 显示对话框 - /// </summary> - public void Show() - { - Show(Message, Title, MessageBoxIcon, OkScript, Target, Icon, IconUrl); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetShowReference() - { - return GetShowReference(Message, Title, MessageBoxIcon, OkScript, Target, Icon, IconUrl); - } - - #endregion - - #region static Show - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - public static void Show(string message) - { - Show(message, String.Empty, DefaultMessageBoxIcon, String.Empty); - } - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="title">标题</param> - public static void Show(string message, string title) - { - Show(message, title, DefaultMessageBoxIcon, String.Empty); - } - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="icon">图标</param> - public static void Show(string message, MessageBoxIcon icon) - { - Show(message, String.Empty, icon, String.Empty); - } - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - public static void Show(string message, string title, string okScript) - { - Show(message, title, DefaultMessageBoxIcon, okScript); - } - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - public static void Show(string message, string title, MessageBoxIcon icon) - { - Show(message, title, icon, String.Empty); - } - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - public static void Show(string message, string title, MessageBoxIcon icon, string okScript) - { - PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript)); - } - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <param name="target">显示对话框的目标页面</param> - public static void Show(string message, string title, MessageBoxIcon icon, string okScript, Target target) - { - PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript, target)); - } - - /// <summary> - /// 显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="messageBoxIcon"></param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <param name="target">显示对话框的目标页面</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="iconUrl">自定义对话框图标地址</param> - public static void Show(string message, string title, MessageBoxIcon messageBoxIcon, string okScript, Target target, Icon icon, string iconUrl) - { - PageContext.RegisterStartupScript(GetShowReference(message, title, messageBoxIcon, okScript, target, icon, iconUrl)); - } - - #endregion - - #region static ShowInParent - - /// <summary> - /// 在父页面中显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - public static void ShowInParent(string message) - { - ShowInParent(message, String.Empty, DefaultMessageBoxIcon, String.Empty); - } - - /// <summary> - /// 在父页面中显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="title">标题</param> - public static void ShowInParent(string message, string title) - { - ShowInParent(message, title, DefaultMessageBoxIcon, String.Empty); - } - - /// <summary> - /// 在父页面中显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="icon">图标</param> - public static void ShowInParent(string message, MessageBoxIcon icon) - { - ShowInParent(message, String.Empty, icon, String.Empty); - } - - /// <summary> - /// 在父页面中显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - public static void ShowInParent(string message, string title, string okScript) - { - ShowInParent(message, title, DefaultMessageBoxIcon, okScript); - } - - /// <summary> - /// 在父页面中显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - public static void ShowInParent(string message, string title, MessageBoxIcon icon) - { - ShowInParent(message, title, icon, String.Empty); - } - - /// <summary> - /// 在父页面中显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - public static void ShowInParent(string message, string title, MessageBoxIcon icon, string okScript) - { - PageContext.RegisterStartupScript(GetShowInParentReference(message, title, icon, okScript)); - } - - #endregion - - #region static ShowInTop - - /// <summary> - /// 在顶层窗口中显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - public static void ShowInTop(string message) - { - ShowInTop(message, String.Empty, DefaultMessageBoxIcon, String.Empty); - } - - /// <summary> - /// 在顶层窗口中显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="title">对话框标题</param> - public static void ShowInTop(string message, string title) - { - ShowInTop(message, title, DefaultMessageBoxIcon, String.Empty); - } - - /// <summary> - /// 在顶层窗口中显示对话框 - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="icon">自定义对话框图标</param> - public static void ShowInTop(string message, MessageBoxIcon icon) - { - ShowInTop(message, String.Empty, icon, String.Empty); - } - - /// <summary> - /// - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="title">对话框标题</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - public static void ShowInTop(string message, string title, string okScript) - { - ShowInTop(message, title, DefaultMessageBoxIcon, okScript); - } - - /// <summary> - /// - /// </summary> - /// <param name="message">消息正文</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - public static void ShowInTop(string message, string title, MessageBoxIcon icon) - { - ShowInTop(message, title, icon, String.Empty); - } - - /// <summary> - /// 在顶层窗口中显示对话框 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - public static void ShowInTop(string message, string title, MessageBoxIcon icon, string okScript) - { - PageContext.RegisterStartupScript(GetShowInTopReference(message, title, icon, okScript)); - } - - #endregion - - #region static GetShowReference - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message) - { - return GetShowReference(message, String.Empty, DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title) - { - return GetShowReference(message, title, DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="icon">自定义对话框图标</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, MessageBoxIcon icon) - { - return GetShowReference(message, String.Empty, icon); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, MessageBoxIcon icon) - { - return GetShowReference(message, title, icon, String.Empty); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, string okScript) - { - return GetShowReference(message, title, DefaultMessageBoxIcon, okScript); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript) - { - return GetShowReference(message, title, icon, okScript, Target.Self); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <param name="target">显示对话框的目标页面</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript, Target target) - { - return GetShowReference(message, title, icon, okScript, target, Icon.None, null); - } - - /// <summary> - /// 获取显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="messageBoxIcon"></param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <param name="target">显示对话框的目标页面</param> - /// <param name="icon"></param> - /// <param name="iconUrl">自定义对话框图标地址</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, MessageBoxIcon messageBoxIcon, string okScript, Target target, Icon icon, string iconUrl) - { - if (message == null) - { - message = String.Empty; - } - if (title == null) - { - title = String.Empty; - } - - string addCSSScript = String.Empty; - string iconScriptFragment = String.Empty; - string resolvedIconUrl = IconHelper.GetResolvedIconUrl(icon, iconUrl); - - Page page = HttpContext.Current.CurrentHandler as Page; - if (page != null) - { - resolvedIconUrl = page.ResolveUrl(resolvedIconUrl); - } - - // Icon 或者 IconUrl 不为空 - if (!String.IsNullOrEmpty(resolvedIconUrl)) - { - string className = String.Format("box-{0}-alert-icon", System.Guid.NewGuid().ToString("N")); - - var addCSSPrefix = String.Empty; - if (target == Target.Parent) - { - addCSSPrefix = "parent."; - } - else if (target == Target.Top) - { - addCSSPrefix = "top."; - } - addCSSScript = String.Format("{0}X.util.addCSS('{1}','{2}');", addCSSPrefix, className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, resolvedIconUrl)); - - iconScriptFragment = String.Format("'{0}'", className); - } - else - { - iconScriptFragment = MessageBoxIconHelper.GetName(messageBoxIcon); - } - - message = message.Replace("\r\n", "\n").Replace("\n", "<br/>"); - title = title.Replace("\r\n", "\n").Replace("\n", "<br/>"); - string targetScript = "window"; - if (target != Target.Self) - { - targetScript = TargetHelper.GetScriptName(target); - } - - if (String.IsNullOrEmpty(title) && - messageBoxIcon == DefaultMessageBoxIcon && - String.IsNullOrEmpty(okScript) && - String.IsNullOrEmpty(resolvedIconUrl)) - { - return addCSSScript + String.Format("{0}.X.alert({1});", targetScript, JsHelper.GetJsString(message)); - } - else - { - return addCSSScript + String.Format("{0}.X.alert({1},{2},{3},{4});", - targetScript, - JsHelper.GetJsStringWithScriptTag(message), - JsHelper.GetJsString(title), - iconScriptFragment, - String.IsNullOrEmpty(okScript) ? "''" : JsHelper.GetFunction(okScript)); - } - } - #endregion - - #region static GetShowInParentReference - - /// <summary> - /// 获取在父页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <returns>客户端脚本</returns> - public static string GetShowInParentReference(string message) - { - return GetShowInParentReference(message, String.Empty, DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取在父页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <returns>客户端脚本</returns> - public static string GetShowInParentReference(string message, string title) - { - return GetShowInParentReference(message, title, DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取在父页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="icon">自定义对话框图标</param> - /// <returns>客户端脚本</returns> - public static string GetShowInParentReference(string message, MessageBoxIcon icon) - { - return GetShowInParentReference(message, String.Empty, icon); - } - - /// <summary> - /// 获取在父页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <returns>客户端脚本</returns> - public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon) - { - return GetShowInParentReference(message, title, icon, String.Empty); - } - - /// <summary> - /// 获取在父页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <returns>客户端脚本</returns> - public static string GetShowInParentReference(string message, string title, string okScript) - { - return GetShowInParentReference(message, title, DefaultMessageBoxIcon, okScript); - } - - /// <summary> - /// 获取在父页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <returns>客户端脚本</returns> - public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon, string okScript) - { - return GetShowReference(message, title, icon, okScript, Target.Parent); - } - - #endregion - - #region static GetShowInTopReference - - /// <summary> - /// 获取在最上层页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <returns>客户端脚本</returns> - public static string GetShowInTopReference(string message) - { - return GetShowInTopReference(message, String.Empty, DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取在最上层页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <returns>客户端脚本</returns> - public static string GetShowInTopReference(string message, string title) - { - return GetShowInTopReference(message, title, DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取在最上层页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="icon">自定义对话框图标</param> - /// <returns>客户端脚本</returns> - public static string GetShowInTopReference(string message, MessageBoxIcon icon) - { - return GetShowInTopReference(message, String.Empty, icon); - } - - /// <summary> - /// 获取在最上层页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <returns>客户端脚本</returns> - public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon) - { - return GetShowInTopReference(message, title, icon, String.Empty); - } - - /// <summary> - /// 获取在最上层页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <returns>客户端脚本</returns> - public static string GetShowInTopReference(string message, string title, string okScript) - { - return GetShowInTopReference(message, title, DefaultMessageBoxIcon, okScript); - } - - /// <summary> - /// 获取在最上层页面中显示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">自定义对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <returns>客户端脚本</returns> - public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon, string okScript) - { - return GetShowReference(message, title, icon, okScript, Target.Top); - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Alert.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * ->2008-04-30 30372245@qq.com 改为静态帮助类 + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 对话框帮助类 + /// </summary> + public class Alert + { + #region public static + + /// <summary> + /// 默认提示对话图标 + /// </summary> + public static readonly MessageBoxIcon DefaultMessageBoxIcon = MessageBoxIcon.Information; + + #endregion + + #region class + + private string _message; + + /// <summary> + /// 对话框消息正文 + /// </summary> + public string Message + { + get { return _message; } + set { _message = value; } + } + + private string _title; + + /// <summary> + /// 对话框标题 + /// </summary> + public string Title + { + get { return _title; } + set { _title = value; } + } + + private MessageBoxIcon _messageBoxIcon = DefaultMessageBoxIcon; + + /// <summary> + /// 对话框图标 + /// </summary> + public MessageBoxIcon MessageBoxIcon + { + get { return _messageBoxIcon; } + set { _messageBoxIcon = value; } + } + + private string _okScript; + + /// <summary> + /// 点击确认按钮执行的JavaScript脚本 + /// </summary> + public string OkScript + { + get { return _okScript; } + set { _okScript = value; } + } + + private Target _target; + + /// <summary> + /// 对话框的目标位置 + /// </summary> + public Target Target + { + get { return _target; } + set { _target = value; } + } + + private string _iconUrl; + + /// <summary> + /// 自定义对话框图标地址 + /// </summary> + public string IconUrl + { + get { return _iconUrl; } + set { _iconUrl = value; } + } + + private Icon _icon = Icon.None; + + /// <summary> + /// 自定义对话框图标 + /// </summary> + public Icon Icon + { + get { return _icon; } + set { _icon = value; } + } + + + /// <summary> + /// 显示对话框 + /// </summary> + public void Show() + { + Show(Message, Title, MessageBoxIcon, OkScript, Target, Icon, IconUrl); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetShowReference() + { + return GetShowReference(Message, Title, MessageBoxIcon, OkScript, Target, Icon, IconUrl); + } + + #endregion + + #region static Show + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void Show(string message) + { + Show(message, String.Empty, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">标题</param> + public static void Show(string message, string title) + { + Show(message, title, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">图标</param> + public static void Show(string message, MessageBoxIcon icon) + { + Show(message, String.Empty, icon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void Show(string message, string title, string okScript) + { + Show(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + public static void Show(string message, string title, MessageBoxIcon icon) + { + Show(message, title, icon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void Show(string message, string title, MessageBoxIcon icon, string okScript) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript)); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + public static void Show(string message, string title, MessageBoxIcon icon, string okScript, Target target) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript, target)); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="messageBoxIcon"></param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="iconUrl">自定义对话框图标地址</param> + public static void Show(string message, string title, MessageBoxIcon messageBoxIcon, string okScript, Target target, Icon icon, string iconUrl) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, messageBoxIcon, okScript, target, icon, iconUrl)); + } + + #endregion + + #region static ShowInParent + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void ShowInParent(string message) + { + ShowInParent(message, String.Empty, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">标题</param> + public static void ShowInParent(string message, string title) + { + ShowInParent(message, title, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">图标</param> + public static void ShowInParent(string message, MessageBoxIcon icon) + { + ShowInParent(message, String.Empty, icon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInParent(string message, string title, string okScript) + { + ShowInParent(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + public static void ShowInParent(string message, string title, MessageBoxIcon icon) + { + ShowInParent(message, title, icon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInParent(string message, string title, MessageBoxIcon icon, string okScript) + { + PageContext.RegisterStartupScript(GetShowInParentReference(message, title, icon, okScript)); + } + + #endregion + + #region static ShowInTop + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void ShowInTop(string message) + { + ShowInTop(message, String.Empty, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + public static void ShowInTop(string message, string title) + { + ShowInTop(message, title, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">自定义对话框图标</param> + public static void ShowInTop(string message, MessageBoxIcon icon) + { + ShowInTop(message, String.Empty, icon, String.Empty); + } + + /// <summary> + /// + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInTop(string message, string title, string okScript) + { + ShowInTop(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + public static void ShowInTop(string message, string title, MessageBoxIcon icon) + { + ShowInTop(message, title, icon, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInTop(string message, string title, MessageBoxIcon icon, string okScript) + { + PageContext.RegisterStartupScript(GetShowInTopReference(message, title, icon, okScript)); + } + + #endregion + + #region static GetShowReference + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message) + { + return GetShowReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title) + { + return GetShowReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, MessageBoxIcon icon) + { + return GetShowReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon) + { + return GetShowReference(message, title, icon, String.Empty); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, string okScript) + { + return GetShowReference(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript) + { + return GetShowReference(message, title, icon, okScript, Target.Self); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript, Target target) + { + return GetShowReference(message, title, icon, okScript, target, Icon.None, null); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="messageBoxIcon"></param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + /// <param name="icon"></param> + /// <param name="iconUrl">自定义对话框图标地址</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon messageBoxIcon, string okScript, Target target, Icon icon, string iconUrl) + { + if (message == null) + { + message = String.Empty; + } + if (title == null) + { + title = String.Empty; + } + + string addCSSScript = String.Empty; + string iconScriptFragment = String.Empty; + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(icon, iconUrl); + + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + resolvedIconUrl = page.ResolveUrl(resolvedIconUrl); + } + + // Icon 或者 IconUrl 不为空 + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + string className = String.Format("f-{0}-alert-icon", System.Guid.NewGuid().ToString("N")); + + var addCSSPrefix = String.Empty; + if (target == Target.Parent) + { + addCSSPrefix = "parent."; + } + else if (target == Target.Top) + { + addCSSPrefix = "top."; + } + addCSSScript = String.Format("{0}F.addCSS('{1}','{2}');", addCSSPrefix, className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, resolvedIconUrl)); + + iconScriptFragment = String.Format("'{0}'", className); + } + else + { + iconScriptFragment = MessageBoxIconHelper.GetName(messageBoxIcon); + } + + message = message.Replace("\r\n", "\n").Replace("\n", "<br/>"); + title = title.Replace("\r\n", "\n").Replace("\n", "<br/>"); + string targetScript = "window"; + if (target != Target.Self) + { + targetScript = TargetHelper.GetScriptName(target); + } + + if (String.IsNullOrEmpty(title) && + messageBoxIcon == DefaultMessageBoxIcon && + String.IsNullOrEmpty(okScript) && + String.IsNullOrEmpty(resolvedIconUrl)) + { + return addCSSScript + String.Format("{0}.F.alert({1});", targetScript, JsHelper.Enquote(message)); + } + else + { + return addCSSScript + String.Format("{0}.F.alert({1},{2},{3},{4});", + targetScript, + JsHelper.EnquoteWithScriptTag(message), + JsHelper.Enquote(title), + iconScriptFragment, + String.IsNullOrEmpty(okScript) ? "''" : JsHelper.GetFunction(okScript)); + } + } + #endregion + + #region static GetShowInParentReference + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message) + { + return GetShowInParentReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title) + { + return GetShowInParentReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, MessageBoxIcon icon) + { + return GetShowInParentReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon) + { + return GetShowInParentReference(message, title, icon, String.Empty); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, string okScript) + { + return GetShowInParentReference(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon, string okScript) + { + return GetShowReference(message, title, icon, okScript, Target.Parent); + } + + #endregion + + #region static GetShowInTopReference + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message) + { + return GetShowInTopReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title) + { + return GetShowInTopReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, MessageBoxIcon icon) + { + return GetShowInTopReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon) + { + return GetShowInTopReference(message, title, icon, String.Empty); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, string okScript) + { + return GetShowInTopReference(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon, string okScript) + { + return GetShowReference(message, title, icon, okScript, Target.Top); + } + + #endregion + + } +} diff --git a/FineUI/StaticClass/Confirm.cs b/FineUI/StaticClass/Confirm.cs index 916b856..1aba6fa 100644 --- a/FineUI/StaticClass/Confirm.cs +++ b/FineUI/StaticClass/Confirm.cs @@ -1,202 +1,202 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Confirm.cs - * CreatedOn: 2008-06-30 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; - -namespace FineUI -{ - /// <summary> - /// 确认对话框帮助类(静态类) - /// </summary> - public static class Confirm - { - #region public static - - //public static string DefaultTitle = "确认对话框"; - - /// <summary> - /// 确认对话框默认图标 - /// </summary> - public static MessageBoxIcon DefaultIcon = MessageBoxIcon.Question; - - - #endregion - - #region Show - - /// <summary> - /// 显示消息框 - /// </summary> - /// <param name="message"></param> - public static void Show(string message) - { - Show(message, null, DefaultIcon); - } - - /// <summary> - /// 显示消息框 - /// </summary> - /// <param name="message"></param> - /// <param name="title"></param> - public static void Show(string message, string title) - { - Show(message, title, DefaultIcon); - } - - /// <summary> - /// 显示消息框 - /// </summary> - /// <param name="message"></param> - /// <param name="icon"></param> - public static void Show(string message, MessageBoxIcon icon) - { - Show(message, null, icon); - } - - /// <summary> - /// 显示消息框 - /// </summary> - /// <param name="message"></param> - /// <param name="title"></param> - /// <param name="icon"></param> - public static void Show(string message, string title, MessageBoxIcon icon) - { - PageContext.RegisterStartupScript(GetShowReference(message, title, icon)); - } - #endregion - - #region GetShowReference - - /// <summary> - /// 获取显示确认对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">对话框图标</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, MessageBoxIcon icon) - { - return GetShowReference(message, title, icon, String.Empty, String.Empty); - } - - /// <summary> - /// 获取显示确认对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">对话框图标</param> - /// <param name="okScriptstring">点击确定按钮执行的客户端脚本</param> - /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScriptstring, string cancelScript) - { - return GetShowReference(message, title, icon, okScriptstring, cancelScript, Target.Self); - } - - /// <summary> - /// 获取显示确认对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">对话框图标</param> - /// <param name="okScript">点击确定按钮执行的客户端脚本</param> - /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> - /// <param name="target">弹出对话框的目标页面</param> - /// <returns>客户端脚本</returns> - public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript, Target target) - { - /* - if (String.IsNullOrEmpty(title)) - { - title = "X.util.confirmTitle"; - } - else - { - title = JsHelper.GetJsString(title.Replace("\r\n", "\n").Replace("\n", "<br/>")); - } - message = message.Replace("\r\n", "\n").Replace("\n", "<br/>"); - - - JsObjectBuilder ob = new JsObjectBuilder(); - ob.AddProperty("title", title, true); - ob.AddProperty("msg", JsHelper.GetJsStringWithScriptTag(message), true); - ob.AddProperty("buttons", "Ext.MessageBox.OKCANCEL", true); - ob.AddProperty("icon", String.Format("{0}", MessageBoxIconHelper.GetName(icon)), true); - ob.AddProperty("fn", String.Format("function(btn){{if(btn=='cancel'){{{0}}}else{{{1}}}}}", cancelScript, okScriptstring), true); - - string targetName = "window"; - if (target != Target.Self) - { - targetName = TargetHelper.GetScriptName(target); - } - return String.Format("{0}.Ext.MessageBox.show({1});", targetName, ob.ToString()); - */ - string scriptTitle = "''"; - if (!String.IsNullOrEmpty(title)) - { - title = JsHelper.GetJsString(title.Replace("\r\n", "\n").Replace("\n", "<br/>")); - } - string scriptMessage = JsHelper.GetJsStringWithScriptTag(message.Replace("\r\n", "\n").Replace("\n", "<br/>")); - - string scriptIconName = "''"; - if (icon != MessageBoxIcon.Warning) - { - scriptIconName = String.Format("'{0}'", MessageBoxIconHelper.GetShortName(icon)); - } - - string scriptTargetName = "''"; - if (target != Target.Self) - { - scriptTargetName = String.Format("'{0}'", TargetHelper.GetName(target)); - } - string scriptCancel = JsHelper.GetJsString(cancelScript); - string scriptOK = JsHelper.GetJsString(okScript); - - if (scriptIconName == "''") - { - if (scriptCancel == "''") - { - return String.Format("X.confirm({0},{1},{2},{3});", scriptTargetName, scriptTitle, scriptMessage, scriptOK); - } - else - { - return String.Format("X.confirm({0},{1},{2},{3},{4});", scriptTargetName, scriptTitle, scriptMessage, scriptOK, scriptCancel); - } - } - else - { - return String.Format("X.confirm({0},{1},{2},{3},{4},{5});", scriptTargetName, scriptTitle, scriptMessage, scriptOK, scriptCancel, scriptIconName); - } - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Confirm.cs + * CreatedOn: 2008-06-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 确认对话框帮助类(静态类) + /// </summary> + public static class Confirm + { + #region public static + + //public static string DefaultTitle = "确认对话框"; + + /// <summary> + /// 确认对话框默认图标 + /// </summary> + public static MessageBoxIcon DefaultIcon = MessageBoxIcon.Question; + + + #endregion + + #region Show + + /// <summary> + /// 显示消息框 + /// </summary> + /// <param name="message"></param> + public static void Show(string message) + { + Show(message, null, DefaultIcon); + } + + /// <summary> + /// 显示消息框 + /// </summary> + /// <param name="message"></param> + /// <param name="title"></param> + public static void Show(string message, string title) + { + Show(message, title, DefaultIcon); + } + + /// <summary> + /// 显示消息框 + /// </summary> + /// <param name="message"></param> + /// <param name="icon"></param> + public static void Show(string message, MessageBoxIcon icon) + { + Show(message, null, icon); + } + + /// <summary> + /// 显示消息框 + /// </summary> + /// <param name="message"></param> + /// <param name="title"></param> + /// <param name="icon"></param> + public static void Show(string message, string title, MessageBoxIcon icon) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, icon)); + } + #endregion + + #region GetShowReference + + /// <summary> + /// 获取显示确认对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon) + { + return GetShowReference(message, title, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 获取显示确认对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <param name="okScriptstring">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScriptstring, string cancelScript) + { + return GetShowReference(message, title, icon, okScriptstring, cancelScript, Target.Self); + } + + /// <summary> + /// 获取显示确认对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <param name="target">弹出对话框的目标页面</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript, Target target) + { + /* + if (String.IsNullOrEmpty(title)) + { + title = "F.util.confirmTitle"; + } + else + { + title = JsHelper.GetJsString(title.Replace("\r\n", "\n").Replace("\n", "<br/>")); + } + message = message.Replace("\r\n", "\n").Replace("\n", "<br/>"); + + + JsObjectBuilder ob = new JsObjectBuilder(); + ob.AddProperty("title", title, true); + ob.AddProperty("msg", JsHelper.GetJsStringWithScriptTag(message), true); + ob.AddProperty("buttons", "Ext.MessageBox.OKCANCEL", true); + ob.AddProperty("icon", String.Format("{0}", MessageBoxIconHelper.GetName(icon)), true); + ob.AddProperty("fn", String.Format("function(btn){{if(btn=='cancel'){{{0}}}else{{{1}}}}}", cancelScript, okScriptstring), true); + + string targetName = "window"; + if (target != Target.Self) + { + targetName = TargetHelper.GetScriptName(target); + } + return String.Format("{0}.Ext.MessageBox.show({1});", targetName, ob.ToString()); + */ + string scriptTitle = "''"; + if (!String.IsNullOrEmpty(title)) + { + scriptTitle = JsHelper.Enquote(title.Replace("\r\n", "\n").Replace("\n", "<br/>")); + } + string scriptMessage = JsHelper.EnquoteWithScriptTag(message.Replace("\r\n", "\n").Replace("\n", "<br/>")); + + string scriptIconName = "''"; + if (icon != MessageBoxIcon.Warning) + { + scriptIconName = String.Format("'{0}'", MessageBoxIconHelper.GetShortName(icon)); + } + + string scriptTargetName = "''"; + if (target != Target.Self) + { + scriptTargetName = String.Format("'{0}'", TargetHelper.GetName(target)); + } + string scriptCancel = JsHelper.Enquote(cancelScript); + string scriptOK = JsHelper.Enquote(okScript); + + if (scriptIconName == "''") + { + if (scriptCancel == "''") + { + return String.Format("F.confirm({0},{1},{2},{3});", scriptTargetName, scriptTitle, scriptMessage, scriptOK); + } + else + { + return String.Format("F.confirm({0},{1},{2},{3},{4});", scriptTargetName, scriptTitle, scriptMessage, scriptOK, scriptCancel); + } + } + else + { + return String.Format("F.confirm({0},{1},{2},{3},{4},{5});", scriptTargetName, scriptTitle, scriptMessage, scriptOK, scriptCancel, scriptIconName); + } + + } + + #endregion + + } +} diff --git a/FineUI/StaticClass/PageContext.cs b/FineUI/StaticClass/PageContext.cs index b8d6704..d745d0f 100644 --- a/FineUI/StaticClass/PageContext.cs +++ b/FineUI/StaticClass/PageContext.cs @@ -1,304 +1,299 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: PageContext.cs - * CreatedOn: 2008-06-09 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> 什么是PageStateChanged?(表单中任何一个字段发生改变,则页面状态PageState就改变了) - * PageStateChanged 更改为 FormChanged - * 30372245@qq.com 2009-02-26 - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; - -namespace FineUI -{ - /// <summary> - /// 页面上下文帮助类(静态类),包括向页面注册脚本、刷新当前页面、页面重定向等实用函数 - /// </summary> - public static class PageContext - { - #region static readonly - - //private static readonly string PAGE_STATE_CHANGED_FUNCTION_NAME = "X.box_pageStateChanged"; - - #endregion - - #region Redirect - - /// <summary> - /// 跳转到指定的Url - /// </summary> - /// <param name="url"></param> - public static void Redirect(string url) - { - Redirect(url, "_self"); - } - - /// <summary> - /// 跳转到指定的Url,Target指定在哪个窗口中跳转(_self,_parent,_top) - /// </summary> - /// <param name="url"></param> - /// <param name="target">_self,_parent,_top</param> - public static void Redirect(string url, string target) - { - Page page = HttpContext.Current.CurrentHandler as Page; - if (page != null) - { - url = page.ResolveUrl(url); - } - - string redirectScript = String.Empty; - switch (target.ToLower()) - { - case "_parent": - redirectScript = String.Format("parent.window.location.href='{0}';", url); - break; - case "_top": - redirectScript = String.Format("top.window.location.href='{0}';", url); - break; - default: - redirectScript = String.Format("window.location.href='{0}';", url); - break; - } - - RegisterStartupScript(redirectScript); - - - //if (ResourceManager.Instance.IsFineUIAjaxPostBack) - //{ - // RegisterStartupScript(redirectScript); - //} - //else - //{ - // page.ClientScript.RegisterStartupScript(page.GetType(), "redirect", redirectScript, true); - //} - - //if (ResourceManager.Instance.IsFineUIAjaxPostBack) - //{ - // HttpContext.Current.Response.RedirectLocation = url; - //} - //else - //{ - // HttpContext.Current.Response.Redirect(url); - //} - - - - } - - #endregion - - #region Refresh - - /// <summary> - /// 刷新当前页面 - /// </summary> - public static void Refresh() - { - Refresh("_self"); - } - - /// <summary> - /// 刷新指定页面 - /// </summary> - /// <param name="target">目标页面</param> - public static void Refresh(string target) - { - string refreshScript = String.Empty; - switch (target.ToLower()) - { - case "_parent": - refreshScript = "parent.window.location.reload();"; - break; - case "_top": - refreshScript = "top.window.location.reload();"; - break; - default: - refreshScript = "window.location.reload();"; - break; - } - - RegisterStartupScript(refreshScript); - } - - #endregion - - #region RegisterStartupScript - - #region old code - - ///// <summary> - ///// 是否独占的脚本,将禁止页面元素的渲染 - ///// </summary> - ///// <param name="scriptContent"></param> - //public static void RegisterExclusiveScript(string scriptContent) - //{ - // Page page = HttpContext.Current.CurrentHandler as Page; - // if (page != null) - // { - // ResourceManager.Instance.SetExclusiveScript(scriptContent); - // } - - //} - - //public static void RegisterStartupScript(string scriptContent, bool preRegister) - //{ - // if (preRegister) - // { - // RegisterStartupScript(scriptContent, -100); - // } - // else - // { - // RegisterStartupScript(scriptContent); - // } - //} - - ///// <summary> - ///// 注册页面加载后的JS脚本 - ///// Level 层次(层次越高,注册越靠后)(缺省100),负值表示在所有注册脚本之前执行 - ///// </summary> - ///// <param name="page"></param> - ///// <param name="scriptContent"></param> - //public static void RegisterStartupScript(string scriptContent, int level) - //{ - // Page page = HttpContext.Current.CurrentHandler as Page; - // if (page != null) - // { - // ResourceManager.Instance.AddAbsoluteStartupScript(scriptContent, level); - // } - //} - - #endregion - - /// <summary> - /// 注册页面脚本 - /// </summary> - /// <param name="scriptContent">客户端脚本</param> - public static void RegisterStartupScript(string scriptContent) - { - //Page page = HttpContext.Current.CurrentHandler as Page; - //if (page != null) - //{ - // ResourceManager.Instance.AddAbsoluteStartupScript(scriptContent); - //} - ResourceManager manager = ResourceManager.Instance; - if (manager.IsFineUIAjaxPostBack) - { - manager.AjaxAbsoluteScriptList.Add(scriptContent); - } - else - { - manager.AddAbsoluteStartupScript(scriptContent); - } - } - - #endregion - - #region old code - - - ///// <summary> - ///// 获取当前页面中表单修改的确认提示框的脚本 - ///// </summary> - ///// <returns></returns> - //public static string GetConfirmFormModifiedReference() - //{ - // //return String.Format("{0}();", PAGE_STATE_CHANGED_FUNCTION_NAME); - // return "X.wnd.confirmFormModified();"; - //} - - //public static void RegisterPageStateChangedStartupScript() - //{ - // string confirmText = "是否确认关闭当前页?<br/>您在当前页所做的修改没有保存。继续编辑当前页,请选择“取消”。<br/>选择“确定”关闭当前页,选择“取消”继续编辑当前页。"; - - // RegisterPageStateChangedStartupScript(confirmText); - //} - - //public static void RegisterPageStateChangedStartupScript(string confirmText) - //{ - // string okScript = CurrentActiveWindow.GetCloseReference(); - // string cancelScript = "return false;"; - - // RegisterPageStateChangedStartupScript(confirmText, okScript, cancelScript); - //} - - ///// <summary> - ///// PageManager 的一个属性 - ///// </summary> - ///// <param name="page"></param> - ///// <param name="scriptContent"></param> - //public static void RegisterPageStateChangedStartupScript(string confirmText, string okScript, string cancelScript) - //{ - // string pageStateChangeScript = PageContext.GetPageStateChangedConfirmReference("确认关闭", confirmText, okScript, cancelScript); - - // string scriptContent = String.Format("{0}={1};", PAGE_STATE_CHANGED_FUNCTION_NAME, JsHelper.GetFunctionWrapper(pageStateChangeScript)); - - // RegisterStartupScript(scriptContent); - //} - - - - ///// <summary> - ///// 页面状态已经变化的提示信息 - ///// </summary> - ///// <param name="alertMsg"></param> - ///// <returns></returns> - //private static string GetPageStateChangedReference() - //{ - // return "X.util.isPageStateChanged();"; - //} - - ///// <summary> - ///// 页面状态已经变化的提示信息 - ///// </summary> - ///// <param name="alertMsg"></param> - ///// <returns></returns> - //private static string GetPageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript) - //{ - // // okScript 和 notChangeScript 一样 - // return GetPageStateChangedConfirmReference(confirmTitle, confirmMsg, okScript, cancelScript, okScript); - //} - - ///// <summary> - ///// 页面状态已经变化的提示信息 - ///// </summary> - ///// <param name="alertMsg"></param> - ///// <returns></returns> - //private static string GetPageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript, string notChangeScript) - //{ - // //string closeScript = notChangeScript; - // //string confirmScript = FineUI.Confirm.GetShowReference(confirmMsg, confirmTitle, FineUI.MessageBoxIcon.Question, "return false;", closeScript); - // //btnClose.OnClientClick = String.Format("if({0}){{{1}}}else{{{2}}}", FineUI.PageContext.GetPageStateChangedReference(), confirmScript, closeScript); - - // string confirmScript = Confirm.GetShowReference(confirmMsg, confirmTitle, MessageBoxIcon.Warning, okScript, cancelScript); - // return String.Format("if({0}){{{1}}}else{{{2}}}", GetPageStateChangedReference(), confirmScript, notChangeScript); - //} - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: PageContext.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> 什么是PageStateChanged?(表单中任何一个字段发生改变,则页面状态PageState就改变了) + * PageStateChanged 更改为 FormChanged + * 30372245@qq.com 2009-02-26 + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 页面上下文帮助类(静态类),包括向页面注册脚本、刷新当前页面、页面重定向等实用函数 + /// </summary> + public static class PageContext + { + #region static readonly + + //private static readonly string PAGE_STATE_CHANGED_FUNCTION_NAME = "F.box_pageStateChanged"; + + #endregion + + #region Redirect + + /// <summary> + /// 跳转到指定的Url + /// </summary> + /// <param name="url"></param> + public static void Redirect(string url) + { + Redirect(url, "_self"); + } + + /// <summary> + /// 跳转到指定的Url,Target指定在哪个窗口中跳转(_self,_parent,_top) + /// </summary> + /// <param name="url"></param> + /// <param name="target">_self,_parent,_top</param> + public static void Redirect(string url, string target) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + url = page.ResolveUrl(url); + } + + string redirectScript = String.Empty; + switch (target.ToLower()) + { + case "_parent": + redirectScript = String.Format("parent.window.location.href='{0}';", url); + break; + case "_top": + redirectScript = String.Format("top.window.location.href='{0}';", url); + break; + default: + redirectScript = String.Format("window.location.href='{0}';", url); + break; + } + + RegisterStartupScript(redirectScript); + + + //if (ResourceManager.Instance.IsFineUIAjaxPostBack) + //{ + // RegisterStartupScript(redirectScript); + //} + //else + //{ + // page.ClientScript.RegisterStartupScript(page.GetType(), "redirect", redirectScript, true); + //} + + //if (ResourceManager.Instance.IsFineUIAjaxPostBack) + //{ + // HttpContext.Current.Response.RedirectLocation = url; + //} + //else + //{ + // HttpContext.Current.Response.Redirect(url); + //} + + + + } + + #endregion + + #region Refresh + + /// <summary> + /// 刷新当前页面 + /// </summary> + public static void Refresh() + { + Refresh("_self"); + } + + /// <summary> + /// 刷新指定页面 + /// </summary> + /// <param name="target">目标页面</param> + public static void Refresh(string target) + { + string refreshScript = String.Empty; + switch (target.ToLower()) + { + case "_parent": + refreshScript = "parent.window.location.reload();"; + break; + case "_top": + refreshScript = "top.window.location.reload();"; + break; + default: + refreshScript = "window.location.reload();"; + break; + } + + RegisterStartupScript(refreshScript); + } + + #endregion + + #region RegisterStartupScript + + #region old code + + ///// <summary> + ///// 是否独占的脚本,将禁止页面元素的渲染 + ///// </summary> + ///// <param name="scriptContent"></param> + //public static void RegisterExclusiveScript(string scriptContent) + //{ + // Page page = HttpContext.Current.CurrentHandler as Page; + // if (page != null) + // { + // ResourceManager.Instance.SetExclusiveScript(scriptContent); + // } + + //} + + //public static void RegisterStartupScript(string scriptContent, bool preRegister) + //{ + // if (preRegister) + // { + // RegisterStartupScript(scriptContent, -100); + // } + // else + // { + // RegisterStartupScript(scriptContent); + // } + //} + + ///// <summary> + ///// 注册页面加载后的JS脚本 + ///// Level 层次(层次越高,注册越靠后)(缺省100),负值表示在所有注册脚本之前执行 + ///// </summary> + ///// <param name="page"></param> + ///// <param name="scriptContent"></param> + //public static void RegisterStartupScript(string scriptContent, int level) + //{ + // Page page = HttpContext.Current.CurrentHandler as Page; + // if (page != null) + // { + // ResourceManager.Instance.AddAbsoluteStartupScript(scriptContent, level); + // } + //} + + #endregion + + /// <summary> + /// 注册页面脚本 + /// </summary> + /// <param name="scriptContent">客户端脚本</param> + public static void RegisterStartupScript(string scriptContent) + { + ResourceManager manager = ResourceManager.Instance; + if (manager.IsFineUIAjaxPostBack) + { + manager.AjaxAbsoluteScriptList.Add(scriptContent); + } + else + { + manager.AddAbsoluteStartupScript(scriptContent); + } + } + + #endregion + + #region old code + + + ///// <summary> + ///// 获取当前页面中表单修改的确认提示框的脚本 + ///// </summary> + ///// <returns></returns> + //public static string GetConfirmFormModifiedReference() + //{ + // //return String.Format("{0}();", PAGE_STATE_CHANGED_FUNCTION_NAME); + // return "F.wnd.confirmFormModified();"; + //} + + //public static void RegisterPageStateChangedStartupScript() + //{ + // string confirmText = "是否确认关闭当前页?<br/>您在当前页所做的修改没有保存。继续编辑当前页,请选择“取消”。<br/>选择“确定”关闭当前页,选择“取消”继续编辑当前页。"; + + // RegisterPageStateChangedStartupScript(confirmText); + //} + + //public static void RegisterPageStateChangedStartupScript(string confirmText) + //{ + // string okScript = CurrentActiveWindow.GetCloseReference(); + // string cancelScript = "return false;"; + + // RegisterPageStateChangedStartupScript(confirmText, okScript, cancelScript); + //} + + ///// <summary> + ///// PageManager 的一个属性 + ///// </summary> + ///// <param name="page"></param> + ///// <param name="scriptContent"></param> + //public static void RegisterPageStateChangedStartupScript(string confirmText, string okScript, string cancelScript) + //{ + // string pageStateChangeScript = PageContext.GetPageStateChangedConfirmReference("确认关闭", confirmText, okScript, cancelScript); + + // string scriptContent = String.Format("{0}={1};", PAGE_STATE_CHANGED_FUNCTION_NAME, JsHelper.GetFunctionWrapper(pageStateChangeScript)); + + // RegisterStartupScript(scriptContent); + //} + + + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //private static string GetPageStateChangedReference() + //{ + // return "F.util.isPageStateChanged();"; + //} + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //private static string GetPageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript) + //{ + // // okScript 和 notChangeScript 一样 + // return GetPageStateChangedConfirmReference(confirmTitle, confirmMsg, okScript, cancelScript, okScript); + //} + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //private static string GetPageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript, string notChangeScript) + //{ + // //string closeScript = notChangeScript; + // //string confirmScript = FineUI.Confirm.GetShowReference(confirmMsg, confirmTitle, FineUI.MessageBoxIcon.Question, "return false;", closeScript); + // //btnClose.OnClientClick = String.Format("if({0}){{{1}}}else{{{2}}}", FineUI.PageContext.GetPageStateChangedReference(), confirmScript, closeScript); + + // string confirmScript = Confirm.GetShowReference(confirmMsg, confirmTitle, MessageBoxIcon.Warning, okScript, cancelScript); + // return String.Format("if({0}){{{1}}}else{{{2}}}", GetPageStateChangedReference(), confirmScript, notChangeScript); + //} + + #endregion + + } +} diff --git a/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs b/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs index 1f34591..f89ea81 100644 --- a/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs +++ b/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs @@ -1,104 +1,104 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ToolbarFill.cs - * CreatedOn: 2008-06-09 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; - -namespace FineUI -{ - /// <summary> - /// 工具栏左右分隔符控件 - /// </summary> - [Designer("FineUI.Design.ToolbarFillDesigner, FineUI.Design")] - [ToolboxData("<{0}:ToolbarFill runat=server></{0}:ToolbarFill>")] - [ToolboxBitmap(typeof(ToolbarFill), "toolbox.ToolbarFill.bmp")] - [Description("工具栏左右分隔符控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class ToolbarFill : Component - { - - #region Properties - - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - //OB.RemoveProperty("stateful"); - //OB.RemoveProperty("id"); - - - //string hideScript = String.Empty; - //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 - //if (Hidden) - //{ - // OB.RemoveProperty("hidden"); - // OB.RemoveProperty("hideMode"); - - // hideScript = String.Format("{0}.hide();", ClientJavascriptID); - //} - //AddPageFirstLoadAbsoluteScript(hideScript); - - - string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.Fill',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarFill.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// 工具栏左右分隔符控件 + /// </summary> + [Designer("FineUI.Design.ToolbarFillDesigner, FineUI.Design")] + [ToolboxData("<{0}:ToolbarFill runat=server></{0}:ToolbarFill>")] + [ToolboxBitmap(typeof(ToolbarFill), "toolbox.ToolbarFill.bmp")] + [Description("工具栏左右分隔符控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ToolbarFill : Component + { + + #region Properties + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + //OB.RemoveProperty("stateful"); + //OB.RemoveProperty("id"); + + + //string hideScript = String.Empty; + //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 + //if (Hidden) + //{ + // OB.RemoveProperty("hidden"); + // OB.RemoveProperty("hideMode"); + + // hideScript = String.Format("{0}.hide();", ClientJavascriptID); + //} + //AddPageFirstLoadAbsoluteScript(hideScript); + + + string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.Fill',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs b/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs index fcf3edf..27e0759 100644 --- a/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs +++ b/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs @@ -1,104 +1,104 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ToolbarSeparator.cs - * CreatedOn: 2008-06-09 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; - -namespace FineUI -{ - /// <summary> - /// 工具栏分隔符控件 - /// </summary> - [Designer("FineUI.Design.ToolbarSeparatorDesigner, FineUI.Design")] - [ToolboxData("<{0}:ToolbarSeparator runat=server></{0}:ToolbarSeparator>")] - [ToolboxBitmap(typeof(ToolbarSeparator), "toolbox.ToolbarSeparator.bmp")] - [Description("工具栏分隔符控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class ToolbarSeparator : Component - { - - #region Properties - - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - //OB.RemoveProperty("stateful"); - //OB.RemoveProperty("id"); - - //string hideScript = String.Empty; - //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 - //if (Hidden) - //{ - // OB.RemoveProperty("hidden"); - // OB.RemoveProperty("hideMode"); - - // hideScript = String.Format("{0}.hide();", ClientJavascriptID); - //} - //AddPageFirstLoadAbsoluteScript(hideScript); - - - - string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.Separator',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarSeparator.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// 工具栏分隔符控件 + /// </summary> + [Designer("FineUI.Design.ToolbarSeparatorDesigner, FineUI.Design")] + [ToolboxData("<{0}:ToolbarSeparator runat=server></{0}:ToolbarSeparator>")] + [ToolboxBitmap(typeof(ToolbarSeparator), "toolbox.ToolbarSeparator.bmp")] + [Description("工具栏分隔符控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ToolbarSeparator : Component + { + + #region Properties + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + //OB.RemoveProperty("stateful"); + //OB.RemoveProperty("id"); + + //string hideScript = String.Empty; + //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 + //if (Hidden) + //{ + // OB.RemoveProperty("hidden"); + // OB.RemoveProperty("hideMode"); + + // hideScript = String.Format("{0}.hide();", ClientJavascriptID); + //} + //AddPageFirstLoadAbsoluteScript(hideScript); + + + + string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.Separator',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs b/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs index 4af0d20..8d7d945 100644 --- a/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs +++ b/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs @@ -1,144 +1,144 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ToolbarText.cs - * CreatedOn: 2008-06-09 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; - -namespace FineUI -{ - /// <summary> - /// 工具栏文本控件 - /// </summary> - [Designer("FineUI.Design.ToolbarTextDesigner, FineUI.Design")] - [ToolboxData("<{0}:ToolbarText runat=server></{0}:ToolbarText>")] - [ToolboxBitmap(typeof(ToolbarText), "toolbox.ToolbarText.bmp")] - [Description("工具栏文本控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class ToolbarText : Component - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public ToolbarText() - { - AddServerAjaxProperties("Text"); - AddClientAjaxProperties(); - } - - #endregion - - - #region Properties - - /// <summary> - /// [AJAX属性]文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? String.Empty : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Text")) - { - sb.AppendFormat("{0}.setText({1});", XID, JsHelper.Enquote(Text)); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - OB.AddProperty("text", Text); - - //OB.RemoveProperty("stateful"); - //OB.RemoveProperty("id"); - - - //string hideScript = String.Empty; - //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 - //if (Hidden) - //{ - // OB.RemoveProperty("hidden"); - // OB.RemoveProperty("hideMode"); - - // hideScript = String.Format("{0}.hide();", ClientJavascriptID); - //} - //AddPageFirstLoadAbsoluteScript(hideScript); - - - - //if (AjaxPropertyChanged("Text", Text)) - //{ - // // 这是extjs2.2中使用的小技巧,extjs3.0已经支持对文本进行更新 - // // AddAjaxPartialUpdateScript(String.Format("{0}.getEl().innerHTML={1};", ClientJavascriptID, JsHelper.Enquote(Text))); - // AddAjaxPropertyChangedScript(String.Format("{0}.setText({1});", XID, JsHelper.Enquote(Text))); - //} - - string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.TextItem',{1});", XID, OB.ToString()); - - AddStartupScript(jsContent); - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarText.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// 工具栏文本控件 + /// </summary> + [Designer("FineUI.Design.ToolbarTextDesigner, FineUI.Design")] + [ToolboxData("<{0}:ToolbarText runat=server></{0}:ToolbarText>")] + [ToolboxBitmap(typeof(ToolbarText), "toolbox.ToolbarText.bmp")] + [Description("工具栏文本控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ToolbarText : Component + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public ToolbarText() + { + AddServerAjaxProperties("Text"); + AddClientAjaxProperties(); + } + + #endregion + + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.setText({1});", XID, JsHelper.Enquote(Text)); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("text", Text); + + //OB.RemoveProperty("stateful"); + //OB.RemoveProperty("id"); + + + //string hideScript = String.Empty; + //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 + //if (Hidden) + //{ + // OB.RemoveProperty("hidden"); + // OB.RemoveProperty("hideMode"); + + // hideScript = String.Format("{0}.hide();", ClientJavascriptID); + //} + //AddPageFirstLoadAbsoluteScript(hideScript); + + + + //if (AjaxPropertyChanged("Text", Text)) + //{ + // // 这是extjs2.2中使用的小技巧,extjs3.0已经支持对文本进行更新 + // // AddAjaxPartialUpdateScript(String.Format("{0}.getEl().innerHTML={1};", ClientJavascriptID, JsHelper.Enquote(Text))); + // AddAjaxPropertyChangedScript(String.Format("{0}.setText({1});", XID, JsHelper.Enquote(Text))); + //} + + string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.TextItem',{1});", XID, OB.ToString()); + + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs b/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs index 8f43998..8ea3bf4 100644 --- a/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs +++ b/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs @@ -1,245 +1,275 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Toolbar.cs - * CreatedOn: 2008-05-30 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 工具条控件 - /// </summary> - [Designer("FineUI.Design.ToolbarDesigner, FineUI.Design")] - [ToolboxData("<{0}:Toolbar runat=\"server\"><Items></Items></{0}:Toolbar>")] - [ToolboxBitmap(typeof(Toolbar), "toolbox.Toolbar.bmp")] - [Description("工具条控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Toolbar : BoxComponent - { - - #region Properties - - - //private bool IsPageMenu_Default = false; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否页面菜单")] - //public bool IsPageMenu - //{ - // get - // { - // object obj = BoxState["IsPageMenu"]; - // return obj == null ? IsPageMenu_Default : (bool)obj; - // } - // set - // { - // BoxState["IsPageMenu"] = value; - // } - //} - - - - - /// <summary> - /// 工具条的位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(ToolbarPosition.Top)] - [Description("工具条的位置")] - public virtual ToolbarPosition Position - { - get - { - object obj = XState["Position"]; - return obj == null ? ToolbarPosition.Top : (ToolbarPosition)obj; - } - set - { - XState["Position"] = value; - } - } - - - #endregion - - #region Items - - private ControlBaseCollection _items; - - /// <summary> - /// 工具条项集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Editor(typeof(ToolbarItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual ControlBaseCollection Items - { - get - { - if (_items == null) - { - _items = new ControlBaseCollection(this); - } - return _items; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("toolbar"); - - #region Items - - // 重新设置Items - if (Controls.Count > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (Control item in Controls) - { - if (item is ControlBase && item.Visible) - { - #region old code - - //// 如果是分隔符 - //if (item is ToolbarSeparator) - //{ - // ab.AddProperty("'-'", true); - //} - //else if (item is ToolbarText) - //{ - // ab.AddProperty(String.Format("'{0}'", (item as ToolbarText).Text), true); - //} - //if (item is ToolbarFill) - //{ - // ab.AddProperty("'->'", true); - //} - //else - //{ - //ab.AddProperty(String.Format("{0}", (item as ControlBase).ClientJavascriptID), true); - //} - - #endregion - - ab.AddProperty(String.Format("{0}", (item as ControlBase).XID), true); - } - } - - if (ab.Count > 0) - { - OB.AddProperty("items", ab.ToString(), true); - } - } - - - #endregion - - //string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.Toolbar',{1});", XID, OB.ToString()); - - string jsContent = String.Format("var {0}={1};", XID, OB.GetProperty("items")); - AddStartupScript(jsContent); - - } - - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Toolbar.cs + * CreatedOn: 2008-05-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 工具条控件 + /// </summary> + [Designer("FineUI.Design.ToolbarDesigner, FineUI.Design")] + [ToolboxData("<{0}:Toolbar runat=\"server\"><Items></Items></{0}:Toolbar>")] + [ToolboxBitmap(typeof(Toolbar), "toolbox.Toolbar.bmp")] + [Description("工具条控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Toolbar : BoxComponent + { + + #region Properties + + + //private bool IsPageMenu_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否页面菜单")] + //public bool IsPageMenu + //{ + // get + // { + // object obj = BoxState["IsPageMenu"]; + // return obj == null ? IsPageMenu_Default : (bool)obj; + // } + // set + // { + // BoxState["IsPageMenu"] = value; + // } + //} + + /// <summary> + /// 页脚工具栏的排列位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolbarAlign.Left)] + [Description("工具栏的排列位置")] + public ToolbarAlign ToolbarAlign + { + get + { + object obj = FState["ToolbarAlign"]; + return obj == null ? ToolbarAlign.Left : (ToolbarAlign)obj; + } + set + { + FState["ToolbarAlign"] = value; + } + } + + + + /// <summary> + /// 工具条的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolbarPosition.Top)] + [Description("工具条的位置")] + public virtual ToolbarPosition Position + { + get + { + object obj = FState["Position"]; + return obj == null ? ToolbarPosition.Top : (ToolbarPosition)obj; + } + set + { + FState["Position"] = value; + } + } + + + #endregion + + #region Items + + private ControlBaseCollection _items; + + /// <summary> + /// 工具条项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(ToolbarItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ControlBaseCollection Items + { + get + { + if (_items == null) + { + _items = new ControlBaseCollection(this); + } + return _items; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("toolbar"); + + #region Items + + // 重新设置Items + if (Controls.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (Control item in Controls) + { + if (item is ControlBase && item.Visible) + { + #region old code + + //// 如果是分隔符 + //if (item is ToolbarSeparator) + //{ + // ab.AddProperty("'-'", true); + //} + //else if (item is ToolbarText) + //{ + // ab.AddProperty(String.Format("'{0}'", (item as ToolbarText).Text), true); + //} + //if (item is ToolbarFill) + //{ + // ab.AddProperty("'->'", true); + //} + //else + //{ + //ab.AddProperty(String.Format("{0}", (item as ControlBase).ClientJavascriptID), true); + //} + + #endregion + + ab.AddProperty(String.Format("{0}", (item as ControlBase).XID), true); + } + } + + if (ab.Count > 0) + { + OB.AddProperty("items", ab.ToString(), true); + } + } + + + #endregion + + + JsObjectBuilder layoutOB = new JsObjectBuilder(); + layoutOB.AddProperty("pack", ToolbarAlignHelper.GetName(ToolbarAlign)); + + OB.AddProperty("layout", layoutOB, true); + + OB.AddProperty("xtype", "toolbar"); + + OB.AddProperty("dock", ToolbarPositionHelper.GetExtName(Position)); + + //string jsContent = String.Format("var {0}=Ext.create('Ext.toolbar.Toolbar',{1});", XID, OB.ToString()); + + //string jsContent = String.Format("var {0}={1};", XID, OB.GetProperty("items")); + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + + AddStartupScript(jsContent); + + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + } +} diff --git a/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs b/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs index 8d74ba6..7475d43 100644 --- a/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs +++ b/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs @@ -1,94 +1,94 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ToolbarCollection.cs - * CreatedOn: 2009-08-31 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// <summary> - /// 工具条控件集合 - /// </summary> - public class ToolbarCollection : BaseCollection<Toolbar> - { - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="parent">父控件实例</param> - public ToolbarCollection(PanelBase parent) - : base(parent) - { - } - - /* - protected override void InsertItem(int index, Toolbar item) - { - item.RenderWrapperNode = false; - panelBase.Controls.AddAt(GetStartIndex() + index, item); - - base.InsertItem(index, item); - } - - protected override void RemoveItem(int index) - { - panelBase.Controls.RemoveAt(GetStartIndex() + index); - - base.RemoveItem(index); - } - - protected override void ClearItems() - { - // We should only remove this collection related controls - // Note we must loop from the last element(startIndex + Count - 1) to the first one(startIndex) - int startIndex = GetStartIndex(); - for (int i = startIndex + Count - 1; i >= startIndex; i--) - { - panelBase.Controls.RemoveAt(i); - } - - base.ClearItems(); - } - - /// <summary> - /// Calculate the start index of Toolbars in base.Controls collection. - /// </summary> - /// <returns></returns> - private int GetStartIndex() - { - if (panelBase is TabStrip) - { - return (panelBase as TabStrip).Tabs.Count; - } - else - { - return panelBase.Items.Count; - } - } - * */ - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarCollection.cs + * CreatedOn: 2009-08-31 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 工具条控件集合 + /// </summary> + public class ToolbarCollection : BaseCollection<Toolbar> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public ToolbarCollection(PanelBase parent) + : base(parent) + { + } + + /* + protected override void InsertItem(int index, Toolbar item) + { + item.RenderWrapperNode = false; + panelBase.Controls.AddAt(GetStartIndex() + index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + panelBase.Controls.RemoveAt(GetStartIndex() + index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(startIndex + Count - 1) to the first one(startIndex) + int startIndex = GetStartIndex(); + for (int i = startIndex + Count - 1; i >= startIndex; i--) + { + panelBase.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + + /// <summary> + /// Calculate the start index of Toolbars in base.Controls collection. + /// </summary> + /// <returns></returns> + private int GetStartIndex() + { + if (panelBase is TabStrip) + { + return (panelBase as TabStrip).Tabs.Count; + } + else + { + return panelBase.Items.Count; + } + } + * */ + } +} diff --git a/FineUI/WebControls/Component.Button/Button.cs b/FineUI/WebControls/Component.Button/Button.cs index 8748eb2..d6bb886 100644 --- a/FineUI/WebControls/Component.Button/Button.cs +++ b/FineUI/WebControls/Component.Button/Button.cs @@ -1,994 +1,1014 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Button.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design; - -namespace FineUI -{ - /// <summary> - /// 按钮控件 - /// </summary> - [Designer("FineUI.Design.ButtonDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:Button Text=\"Button\" runat=\"server\"></{0}:Button>")] - [ToolboxBitmap(typeof(Button), "toolbox.Button.bmp")] - [Description("按钮控件")] - [DefaultEvent("Click")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Button : Component, IPostBackEventHandler, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Button() - { - AddServerAjaxProperties("Text", "Icon", "IconUrl", "ToolTip", "OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmIcon", "ConfirmTarget"); - AddClientAjaxProperties("Pressed"); - } - - #endregion - - #region Properties - - /// <summary> - /// 回发之前禁用按钮(防止重复提交) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("回发之前禁用按钮(防止重复提交)")] - public bool DisableControlBeforePostBack - { - get - { - object obj = XState["DisableControlBeforePostBack"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["DisableControlBeforePostBack"] = value; - } - } - - /// <summary> - /// 是否可以回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以回发")] - public bool EnablePostBack - { - get - { - object obj = XState["EnablePostBack"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnablePostBack"] = value; - } - } - - - /// <summary> - /// [AJAX属性]是否被按下 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("[AJAX属性]是否被按下")] - public bool Pressed - { - get - { - object obj = XState["Pressed"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Pressed"] = value; - } - } - - /// <summary> - /// 是否可以按下 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否可以按下")] - public bool EnablePress - { - get - { - object obj = XState["EnablePress"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnablePress"] = value; - } - } - - /// <summary> - /// [AJAX属性]点击按钮时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]点击按钮时需要执行的客户端脚本")] - public string OnClientClick - { - get - { - object obj = XState["OnClientClick"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientClick"] = value; - } - } - - /// <summary> - /// [AJAX属性]预定义图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Icon.None)] - [Description("[AJAX属性]预定义图标")] - public Icon Icon - { - get - { - object obj = XState["Icon"]; - return obj == null ? Icon.None : (Icon)obj; - } - set - { - XState["Icon"] = value; - } - } - - /// <summary> - /// 按钮的大小 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(ButtonSize.Small)] - [Description("按钮的大小")] - public ButtonSize Size - { - get - { - object obj = XState["Size"]; - return obj == null ? ButtonSize.Small : (ButtonSize)obj; - } - set - { - XState["Size"] = value; - } - } - - /// <summary> - /// 图标地址 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("图标地址")] - [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - public string IconUrl - { - get - { - object obj = XState["IconUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["IconUrl"] = value; - } - } - - /// <summary> - /// 图标摆放位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(IconAlign.Left)] - [Description("图标摆放位置")] - public IconAlign IconAlign - { - get - { - object obj = XState["IconAlign"]; - return obj == null ? IconAlign.Left : (IconAlign)obj; - } - set - { - XState["IconAlign"] = value; - } - } - - - /// <summary> - /// [AJAX属性]按钮文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]按钮文本")] - public string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - /// <summary> - /// [AJAX属性]提示文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]提示文本")] - public string ToolTip - { - get - { - object obj = XState["ToolTip"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ToolTip"] = value; - } - } - - - /// <summary> - /// 提示文本类型 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(ToolTipType.Qtip)] - [Description("提示文本类型")] - public ToolTipType ToolTipType - { - get - { - object obj = XState["ToolTipType"]; - return obj == null ? ToolTipType.Qtip : (ToolTipType)obj; - } - set - { - XState["ToolTipType"] = value; - } - } - - - - /// <summary> - /// Tab键索引 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("Tab键索引")] - public short? TabIndex - { - get - { - object obj = XState["TabIndex"]; - return obj == null ? null : (short?)obj; - } - set - { - XState["TabIndex"] = value; - } - } - - /// <summary> - /// 按钮类型 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(ButtonType.Button)] - [Description("按钮类型")] - public virtual ButtonType Type - { - get - { - object obj = XState["ButtonType"]; - return obj == null ? ButtonType.Button : (ButtonType)obj; - } - set - { - XState["ButtonType"] = value; - } - } - - - #endregion - - #region ValidateForms/ValidateTarget - - /// <summary> - /// 需要验证的表单名称列表(逗号分隔) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("需要验证的表单名称列表(逗号分隔)")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] ValidateForms - { - get - { - object obj = XState["ValidateForms"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["ValidateForms"] = value; - } - } - - /// <summary> - /// 验证失败时提示对话框弹出位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("验证失败时提示对话框弹出位置")] - public Target ValidateTarget - { - get - { - object obj = XState["ValidateTarget"]; - return obj == null ? Target.Self : (Target)obj; - } - set - { - XState["ValidateTarget"] = value; - } - } - - - /// <summary> - /// 验证失败时是否出现提示对话框 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("验证失败时是否出现提示对话框")] - public bool ValidateMessageBox - { - get - { - object obj = XState["ValidateMessageBox"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ValidateMessageBox"] = value; - } - } - - #endregion - - #region ConfirmText/ConfirmTitle/ConfirmIcon/ConfirmTarget - - /// <summary> - /// [AJAX属性]确认对话框标题 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]确认对话框标题")] - public string ConfirmTitle - { - get - { - object obj = XState["ConfirmTitle"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ConfirmTitle"] = value; - } - } - - /// <summary> - /// [AJAX属性]确认对话框内容 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]确认对话框内容")] - public string ConfirmText - { - get - { - object obj = XState["ConfirmText"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ConfirmText"] = value; - } - } - - - /// <summary> - /// [AJAX属性]确认对话框提示图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(MessageBoxIcon.Warning)] - [Description("[AJAX属性]确认对话框提示图标")] - public MessageBoxIcon ConfirmIcon - { - get - { - object obj = XState["ConfirmIcon"]; - return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; - } - set - { - XState["ConfirmIcon"] = value; - } - } - - /// <summary> - /// [AJAX属性]确认对话框弹出位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("[AJAX属性]确认对话框弹出位置")] - public Target ConfirmTarget - { - get - { - object obj = XState["ConfirmTarget"]; - return obj == null ? Target.Self : (Target)obj; - } - set - { - XState["ConfirmTarget"] = value; - } - } - - #endregion - - #region Menu - - private Menu _menu; - - /// <summary> - /// 按钮的上下文菜单 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Description("按钮的上下文菜单")] - public Menu Menu - { - get - { - if (_menu == null) - { - _menu = new Menu(); - - _menu.RenderWrapperNode = false; - Controls.Add(_menu); - - } - return _menu; - } - } - - - #endregion - - #region OnAjaxPreRender OnFirstPreRender - - #region PressedHiddenFieldID - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string PressedHiddenFieldID - { - get - { - return String.Format("{0}_Pressed", ClientID); - } - } - - #endregion - - #region OnAjaxPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - if (PropertyModified("Text")) - { - sb.AppendFormat("{0}.x_setText();", XID); - } - - if (EnablePress) - { - if (PropertyModified("Pressed")) - { - //if (ClientPropertyModifiedInServer("Pressed")) - - sb.AppendFormat("{0}.x_toggle();", XID); - - } - } - - if (PropertyModified("Icon", "IconUrl")) - { - string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); - if (!String.IsNullOrEmpty(resolvedIconUrl)) - { - sb.AppendFormat("{0}.setIcon({1});", XID, JsHelper.Enquote(resolvedIconUrl)); - } - } - - if (PropertyModified("ToolTip")) - { - sb.AppendFormat("{0}.x_setTooltip();", XID); - } - - if (PropertyModified("OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmTarget", "ConfirmIcon")) - { - //sb.AppendFormat("{0}.un('click', {0}.initialConfig.listeners.click);", XID); - //sb.AppendFormat("{0}.on('click',{1});", XID, GetClickScriptFunction()); - - sb.AppendFormat("{0}.setHandler({1});", XID, JsHelper.GetFunction(GetClickScript())); - } - - AddAjaxScript(sb); - } - - #endregion - - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("button"); - //if (Menu.Items.Count > 0) - //{ - // ResourceManager.Instance.AddJavaScriptComponent("menu"); - //} - - #region Properties - if (TabIndex != null) - { - OB.AddProperty("tabIndex", TabIndex); - } - - if (!String.IsNullOrEmpty(ToolTip)) - { - OB.AddProperty("tooltip", ToolTip); - OB.AddProperty("tooltipType", ToolTipTypeName.GetName(ToolTipType)); - } - - OB.AddProperty("text", Text); - - if (EnablePress) - { - OB.AddProperty("enableToggle", EnablePress); - OB.AddProperty("pressed", Pressed); - - //hiddenFieldsScript += GetSetHiddenFieldValueScript(PressedHiddenFieldID, Pressed.ToString().ToLower()); - //string toggleScript = String.Format("function(btn,pressed){{X.util.setHiddenFieldValue('{0}',pressed);}}", PressedHiddenFieldID); - //OB.Listeners.AddProperty(OptionName.Toggle, toggleScript, true); - } - - if (Type != ButtonType.Button) - { - OB.AddProperty("type", ButtonTypeName.GetName(Type)); - - } - - if (Size != ButtonSize.Small) - { - OB.AddProperty("scale", ButtonSizeName.GetName(Size)); - } - - #endregion - - #region Icon IconUrl - - string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); - if (!String.IsNullOrEmpty(resolvedIconUrl)) - { - // 不需要先删除原来的属性,因为在AddProperty内部已经有这个逻辑了 - OB.AddProperty("cls", CssClass + " x-btn-text-icon"); - OB.AddProperty("icon", resolvedIconUrl); - - if (IconAlign != IconAlign.Left) - { - OB.AddProperty("iconAlign", IconAlignHelper.GetName(IconAlign)); - } - } - - #endregion - - #region Click - - string clickScript = GetClickScript(); - if (!String.IsNullOrEmpty(clickScript)) - { - OB.AddProperty("handler", JsHelper.GetFunction(clickScript), true); - } - - #endregion - - #region oldcode - - //string clickScriptFunction = GetClickScriptFunction(); - //if (AjaxPropertyChanged("ClickScriptFunction", clickScriptFunction)) - //{ - // string ajaxClickFunction = String.Empty; - // //ajaxClickFunction += String.Format("{0}.purgeListeners('click');", ClientJavascriptID); - // ajaxClickFunction += String.Format("{0}.un('click', X.{0}.initialConfig.listeners.click);", XID); - // ajaxClickFunction += String.Format("{0}.on('click',{1});", XID, clickScriptFunction); - - // AddAjaxPropertyChangedScript(ajaxClickFunction); - //} - - //OB.Listeners.AddProperty(OptionName.Click, String.Format("{0}_click", ClientJavascriptID), true); - - - //OB.AddProperty(OptionName.Handler, "function(){alert('sss');}", true); - - - - //string style = String.Empty; - - //if (CssStyle == "" || !CssStyle.ToLower().Contains("display")) - //{ - // style += CssStyle + "display:inline;"; - //} - - //OB.RemoveProperty(OptionName.Style); - //OB.AddProperty(OptionName.Style, style); - - //AddExtraStyle("display", "inline"); - - #endregion - - #region Menu - - if (_menu != null && Menu.Items.Count > 0) - { - OB.AddProperty("menu", String.Format("{0}", Menu.XID), true); - } - - - #endregion - - string createScript = String.Format("var {0}=Ext.create('Ext.button.Button',{1});", XID, OB.ToString()); - AddStartupScript(createScript); - } - - ///// <summary> - ///// Get resolved icon url (Can be used in client side) from both Icon and IconUrl properties. - ///// </summary> - ///// <returns></returns> - //private string GetResolvedIconUrl() - //{ - // string iconUrl = IconUrl; - // if (String.IsNullOrEmpty(iconUrl)) - // { - // if (Icon != Icon.None) - // { - // iconUrl = IconHelper.GetIconUrl(Icon); - // } - // } - - // return ResolveUrl(iconUrl); - //} - - private string GetClickScript() - { - string disableControlJavascriptID = ClientID; - if (!DisableControlBeforePostBack) - { - disableControlJavascriptID = String.Empty; - } - - string clientScript = OnClientClick; - if (Type == ButtonType.Reset) - { - clientScript += "document.forms[0].reset();"; - } - - return ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), - ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, clientScript, disableControlJavascriptID); - - - // e.stopEvent(); is needed, otherwise there will be an error under IE6 (modified by 30372245@qq.com 2008-08-13) - //return JsHelper.GetFunction(clickScript, "btn", "e"); - //return String.Format("function(button,e){{{0}e.stopEvent();}}", clickScript); - } - - - #endregion - - #region ResolveClientScript - - /// <summary> - /// 获取按钮客户端点击事件的脚本 - /// </summary> - /// <param name="validateForms">验证表单列表</param> - /// <param name="validateTarget">表单验证提示消息目标页面</param> - /// <param name="validateMessageBox">是否显示表单验证提示对话框</param> - /// <param name="enablePostBack">启用回发</param> - /// <param name="postBackEventReference">回发脚本</param> - /// <param name="confirmText">确认对话框消息</param> - /// <param name="confirmTitle">确认对话框标题</param> - /// <param name="confirmIcon">确认对话框图标</param> - /// <param name="confirmTarget">确认对话框目标页面</param> - /// <param name="onClientClick">自定义客户端点击脚本</param> - /// <param name="disableControlJavascriptID">需要禁用的控件客户端ID</param> - /// <returns>客户端脚本</returns> - internal static string ResolveClientScript(string[] validateForms, Target validateTarget, bool validateMessageBox, bool enablePostBack, string postBackEventReference, - string confirmText, string confirmTitle, MessageBoxIcon confirmIcon, Target confirmTarget, string onClientClick, string disableControlJavascriptID) - { - // 1. 表单验证 - string validateScript = String.Empty; - if (validateForms != null && validateForms.Length > 0) - { - JsArrayBuilder array = new JsArrayBuilder(); - foreach (string formID in validateForms) - { - Control control = ControlUtil.FindControl(formID); - if (control != null && control is ControlBase) - { - array.AddProperty((control as ControlBase).ClientID); - } - } - - validateScript = String.Format("if(!X.util.validForms({0},'{1}',{2})){{return false;}}", array.ToString(), TargetHelper.GetName(validateTarget), validateMessageBox.ToString().ToLower()); - } - - // 2. 用户自定义脚本 - string clientClickScript = onClientClick; - if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) - { - clientClickScript += ";"; - } - - - // 3. 回发脚本 - string postBackScript = String.Empty; - if (enablePostBack) - { - if (!String.IsNullOrEmpty(disableControlJavascriptID)) - { - postBackScript += String.Format("X.disable('{0}');", disableControlJavascriptID); - } - postBackScript += postBackEventReference; - } - - // 确认对话框 - if (!String.IsNullOrEmpty(confirmText)) - { - postBackScript = Confirm.GetShowReference(confirmText, confirmTitle, confirmIcon, postBackScript, "", confirmTarget); - } - - return validateScript + clientClickScript + postBackScript; - } - - - #endregion - - #region IPostBackDataHandler - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - if (EnablePress) - { - bool pressed = Convert.ToBoolean(postCollection[PressedHiddenFieldID]); - if (pressed != Pressed) - { - Pressed = pressed; - XState.BackupPostDataProperty("Pressed"); - return true; - } - } - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public void RaisePostDataChangedEvent() - { - // If someday we need public a OnPressChanged event, we can return ture here. - //throw new NotImplementedException(); - } - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - OnClick(EventArgs.Empty); - } - - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 按钮点击事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("按钮点击事件")] - public event EventHandler Click - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发按钮点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnClick(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region oldcode - - //protected override void CreateChildControls() - //{ - // base.CreateChildControls(); - - // //// 添加子控件 - // //foreach (Menu menu in Menus) - // //{ - // // menu.RenderWrapperDiv = false; - // // Controls.Add(menu); - // //} - //} - - //#region HiddenFieldID - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("是否按下隐藏字段的ID")] - //protected string PressedHiddenFieldID - //{ - // get - // { - // return String.Format("{0}_pressed", XID); - // } - //} - - //#endregion - - //public Unit MarginRight_Default = Unit.Empty; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(typeof(Unit), "")] - //[Description("右侧空白宽度")] - //public Unit MarginRight - //{ - // get - // { - // object obj = BoxState["MarginRight"]; - // return obj == null ? MarginRight_Default : (Unit)obj; - // } - // set - // { - // BoxState["MarginRight"] = value; - // } - //} - - //private Unit MinWidth_Default = Unit.Empty; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(typeof(Unit), "")] - //[Description("最小宽度")] - //public Unit MinWidth - //{ - // get - // { - // object obj = BoxState["MinWidth"]; - // return obj == null ? MinWidth_Default : (Unit)obj; - // } - // set - // { - // BoxState["MinWidth"] = value; - // } - //} - - //public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - //{ - // //if (EnablePress) - // //{ - // // string postValue = postCollection[PressedHiddenFieldID]; - // // bool postPressed = Convert.ToBoolean(postValue); - // // if (Pressed != postPressed) - // // { - // // Pressed = postPressed; - // // return true; - // // } - // //} - - // return false; - //} - - //public void RaisePostDataChangedEvent() - //{ - // //throw new NotImplementedException(); - //} - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Button.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 按钮控件 + /// </summary> + [Designer("FineUI.Design.ButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Button Text=\"Button\" runat=\"server\"></{0}:Button>")] + [ToolboxBitmap(typeof(Button), "toolbox.Button.bmp")] + [Description("按钮控件")] + [DefaultEvent("Click")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Button : Component, IPostBackEventHandler, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Button() + { + AddServerAjaxProperties("Text", "Icon", "IconUrl", "ToolTip", "OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmIcon", "ConfirmTarget"); + AddClientAjaxProperties("Pressed"); + } + + #endregion + + #region Properties + + /// <summary> + /// 回发之前禁用按钮(防止重复提交) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("回发之前禁用按钮(防止重复提交)")] + public bool DisableControlBeforePostBack + { + get + { + object obj = FState["DisableControlBeforePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["DisableControlBeforePostBack"] = value; + } + } + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// [AJAX属性]是否被按下 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否被按下")] + public bool Pressed + { + get + { + object obj = FState["Pressed"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Pressed"] = value; + } + } + + /// <summary> + /// 是否可以按下 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以按下")] + public bool EnablePress + { + get + { + object obj = FState["EnablePress"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnablePress"] = value; + } + } + + /// <summary> + /// [AJAX属性]点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]点击按钮时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + /// <summary> + /// [AJAX属性]预定义图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("[AJAX属性]预定义图标")] + public Icon Icon + { + get + { + object obj = FState["Icon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["Icon"] = value; + } + } + + /// <summary> + /// 按钮的大小 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ButtonSize.Small)] + [Description("按钮的大小")] + public ButtonSize Size + { + get + { + object obj = FState["Size"]; + return obj == null ? ButtonSize.Small : (ButtonSize)obj; + } + set + { + FState["Size"] = value; + } + } + + /// <summary> + /// 图标地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("图标地址")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + object obj = FState["IconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["IconUrl"] = value; + } + } + + /// <summary> + /// 图标摆放位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(IconAlign.Left)] + [Description("图标摆放位置")] + public IconAlign IconAlign + { + get + { + object obj = FState["IconAlign"]; + return obj == null ? IconAlign.Left : (IconAlign)obj; + } + set + { + FState["IconAlign"] = value; + } + } + + + /// <summary> + /// [AJAX属性]按钮文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]按钮文本")] + public string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]提示文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]提示文本")] + public string ToolTip + { + get + { + object obj = FState["ToolTip"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ToolTip"] = value; + } + } + + + /// <summary> + /// 提示文本类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolTipType.Qtip)] + [Description("提示文本类型")] + public ToolTipType ToolTipType + { + get + { + object obj = FState["ToolTipType"]; + return obj == null ? ToolTipType.Qtip : (ToolTipType)obj; + } + set + { + FState["ToolTipType"] = value; + } + } + + + + /// <summary> + /// Tab键索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("Tab键索引")] + public short? TabIndex + { + get + { + object obj = FState["TabIndex"]; + return obj == null ? null : (short?)obj; + } + set + { + FState["TabIndex"] = value; + } + } + + /// <summary> + /// 按钮类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ButtonType.Button)] + [Description("按钮类型")] + public virtual ButtonType Type + { + get + { + object obj = FState["ButtonType"]; + return obj == null ? ButtonType.Button : (ButtonType)obj; + } + set + { + FState["ButtonType"] = value; + } + } + + + #endregion + + #region ValidateForms/ValidateTarget/ValidateMessageBox + + + /// <summary> + /// 需要验证的表单名称列表(逗号分隔) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("需要验证的表单名称列表(逗号分隔)")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + /// <summary> + /// 验证失败时提示对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + + /// <summary> + /// 验证失败时是否出现提示对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon/ConfirmTarget + + /// <summary> + /// [AJAX属性]确认对话框标题 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框标题")] + public string ConfirmTitle + { + get + { + object obj = FState["ConfirmTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmTitle"] = value; + } + } + + /// <summary> + /// [AJAX属性]确认对话框内容 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框内容")] + public string ConfirmText + { + get + { + object obj = FState["ConfirmText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmText"] = value; + } + } + + + /// <summary> + /// [AJAX属性]确认对话框提示图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("[AJAX属性]确认对话框提示图标")] + public MessageBoxIcon ConfirmIcon + { + get + { + object obj = FState["ConfirmIcon"]; + return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; + } + set + { + FState["ConfirmIcon"] = value; + } + } + + /// <summary> + /// [AJAX属性]确认对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("[AJAX属性]确认对话框弹出位置")] + public Target ConfirmTarget + { + get + { + object obj = FState["ConfirmTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ConfirmTarget"] = value; + } + } + + #endregion + + #region Menu + + /// <summary> + /// 按钮的上下文菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("按钮的上下文菜单")] + public string MenuID + { + get + { + object obj = FState["MenuID"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["MenuID"] = value; + } + } + + + + private Menu _menu; + + /// <summary> + /// 按钮的上下文菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("按钮的上下文菜单")] + public Menu Menu + { + get + { + if (_menu == null) + { + _menu = new Menu(); + + //_menu.RenderWrapperNode = false; + Controls.Add(_menu); + + } + return _menu; + } + } + + + #endregion + + #region PressedHiddenFieldID + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string PressedHiddenFieldID + { + get + { + return String.Format("{0}_Pressed", ClientID); + } + } + + #endregion + + #region OnAjaxPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.f_setText();", XID); + } + + if (EnablePress) + { + if (PropertyModified("Pressed")) + { + //if (ClientPropertyModifiedInServer("Pressed")) + + sb.AppendFormat("{0}.f_toggle();", XID); + + } + } + + if (PropertyModified("Icon", "IconUrl")) + { + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + sb.AppendFormat("{0}.setIcon({1});", XID, JsHelper.Enquote(resolvedIconUrl)); + } + } + + if (PropertyModified("ToolTip")) + { + sb.AppendFormat("{0}.f_setTooltip();", XID); + } + + if (PropertyModified("OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmTarget", "ConfirmIcon")) + { + //sb.AppendFormat("{0}.un('click', {0}.initialConfig.listeners.click);", XID); + //sb.AppendFormat("{0}.on('click',{1});", XID, GetClickScriptFunction()); + + sb.AppendFormat("{0}.setHandler({1});", XID, JsHelper.GetFunction(GetClickScript())); + } + + AddAjaxScript(sb); + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("button"); + //if (Menu.Items.Count > 0) + //{ + // ResourceManager.Instance.AddJavaScriptComponent("menu"); + //} + + #region Properties + if (TabIndex != null) + { + OB.AddProperty("tabIndex", TabIndex); + } + + if (!String.IsNullOrEmpty(ToolTip)) + { + OB.AddProperty("tooltip", ToolTip); + OB.AddProperty("tooltipType", ToolTipTypeName.GetName(ToolTipType)); + } + + OB.AddProperty("text", Text); + + if (EnablePress) + { + OB.AddProperty("enableToggle", EnablePress); + OB.AddProperty("pressed", Pressed); + + //hiddenFieldsScript += GetSetHiddenFieldValueScript(PressedHiddenFieldID, Pressed.ToString().ToLower()); + //string toggleScript = String.Format("function(btn,pressed){{F.util.setHiddenFieldValue('{0}',pressed);}}", PressedHiddenFieldID); + //OB.Listeners.AddProperty(OptionName.Toggle, toggleScript, true); + } + + //if (Type != ButtonType.Button) + //{ + // OB.AddProperty("type", ButtonTypeName.GetName(Type)); + //} + + + + if (Size != ButtonSize.Small) + { + OB.AddProperty("scale", ButtonSizeName.GetName(Size)); + } + + #endregion + + #region Icon IconUrl + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + // 不需要先删除原来的属性,因为在AddProperty内部已经有这个逻辑了 + OB.AddProperty("cls", CssClass + " x-btn-text-icon"); + OB.AddProperty("icon", resolvedIconUrl); + + if (IconAlign != IconAlign.Left) + { + OB.AddProperty("iconAlign", IconAlignHelper.GetName(IconAlign)); + } + } + + #endregion + + #region Click + + string clickScript = GetClickScript(); + if (!String.IsNullOrEmpty(clickScript)) + { + OB.AddProperty("handler", JsHelper.GetFunction(clickScript), true); + } + + #endregion + + #region oldcode + + //string clickScriptFunction = GetClickScriptFunction(); + //if (AjaxPropertyChanged("ClickScriptFunction", clickScriptFunction)) + //{ + // string ajaxClickFunction = String.Empty; + // //ajaxClickFunction += String.Format("{0}.purgeListeners('click');", ClientJavascriptID); + // ajaxClickFunction += String.Format("{0}.un('click', X.{0}.initialConfig.listeners.click);", XID); + // ajaxClickFunction += String.Format("{0}.on('click',{1});", XID, clickScriptFunction); + + // AddAjaxPropertyChangedScript(ajaxClickFunction); + //} + + //OB.Listeners.AddProperty(OptionName.Click, String.Format("{0}_click", ClientJavascriptID), true); + + + //OB.AddProperty(OptionName.Handler, "function(){alert('sss');}", true); + + + + //string style = String.Empty; + + //if (CssStyle == "" || !CssStyle.ToLower().Contains("display")) + //{ + // style += CssStyle + "display:inline;"; + //} + + //OB.RemoveProperty(OptionName.Style); + //OB.AddProperty(OptionName.Style, style); + + //AddExtraStyle("display", "inline"); + + #endregion + + #region Menu + + if (_menu != null && Menu.Items.Count > 0) + { + OB.AddProperty("menu", Menu.XID, true); + } + else if (!String.IsNullOrEmpty(MenuID)) + { + Menu contextMenu = ControlUtil.FindControlInUserControlOrPage(this, MenuID) as Menu; + if (contextMenu != null) + { + OB.AddProperty("menu", contextMenu.XID, true); + } + } + + + #endregion + + #region Type + + string submitButtonScript = String.Empty; + if (Type == ButtonType.Submit) + { + submitButtonScript = String.Format("F.submitbutton='{0}';", ClientID); + } + else if (Type == ButtonType.Reset) + { + OB.AddProperty("handler", JsHelper.GetFunction("F.util.reset();"), true); + } + + #endregion + + string createScript = String.Format("var {0}=Ext.create('Ext.button.Button',{1});", XID, OB.ToString()); + AddStartupScript(submitButtonScript + createScript); + } + + private string GetClickScript() + { + string disableControlJavascriptID = ClientID; + if (!DisableControlBeforePostBack) + { + disableControlJavascriptID = String.Empty; + } + + //string clientScript = OnClientClick; + //if (Type == ButtonType.Reset) + //{ + // clientScript += "document.forms[0].reset();"; + //} + + return ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, disableControlJavascriptID); + } + + #endregion + + #region ResolveClientScript + + /// <summary> + /// 获取按钮客户端点击事件的脚本 + /// </summary> + /// <param name="validateForms">验证表单列表</param> + /// <param name="validateTarget">表单验证提示消息目标页面</param> + /// <param name="validateMessageBox">是否显示表单验证提示对话框</param> + /// <param name="enablePostBack">启用回发</param> + /// <param name="postBackEventReference">回发脚本</param> + /// <param name="confirmText">确认对话框消息</param> + /// <param name="confirmTitle">确认对话框标题</param> + /// <param name="confirmIcon">确认对话框图标</param> + /// <param name="confirmTarget">确认对话框目标页面</param> + /// <param name="onClientClick">自定义客户端点击脚本</param> + /// <param name="disableControlJavascriptID">需要禁用的控件客户端ID</param> + /// <returns>客户端脚本</returns> + internal static string ResolveClientScript(string[] validateForms, Target validateTarget, bool validateMessageBox, bool enablePostBack, string postBackEventReference, + string confirmText, string confirmTitle, MessageBoxIcon confirmIcon, Target confirmTarget, string onClientClick, string disableControlJavascriptID) + { + // 1. 表单验证 + string validateScript = String.Empty; + if (validateForms != null && validateForms.Length > 0) + { + //JsArrayBuilder array = new JsArrayBuilder(); + //foreach (string formID in validateForms) + //{ + // Control control = ControlUtil.FindControl(formID); + // if (control != null && control is ControlBase) + // { + // array.AddProperty((control as ControlBase).ClientID); + // } + //} + + JsArrayBuilder array = ControlUtil.GetControlClientIDs(validateForms); + + validateScript = String.Format("if(!F.util.validForms({0},'{1}',{2})){{return false;}}", array.ToString(), TargetHelper.GetName(validateTarget), validateMessageBox.ToString().ToLower()); + } + + // 2. 用户自定义脚本 + string clientClickScript = onClientClick; + if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) + { + clientClickScript += ";"; + } + + + // 3. 回发脚本 + string postBackScript = String.Empty; + if (enablePostBack) + { + if (!String.IsNullOrEmpty(disableControlJavascriptID)) + { + postBackScript += String.Format("F.disable('{0}');", disableControlJavascriptID); + } + postBackScript += postBackEventReference; + } + + // 确认对话框 + if (!String.IsNullOrEmpty(confirmText)) + { + postBackScript = Confirm.GetShowReference(confirmText, confirmTitle, confirmIcon, postBackScript, "", confirmTarget); + } + + return validateScript + clientClickScript + postBackScript; + } + + + #endregion + + #region IPostBackDataHandler + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + if (EnablePress) + { + bool pressed = Convert.ToBoolean(postCollection[PressedHiddenFieldID]); + if (pressed != Pressed) + { + Pressed = pressed; + FState.BackupPostDataProperty("Pressed"); + } + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnClick(EventArgs.Empty); + } + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("按钮点击事件")] + public event EventHandler Click + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region oldcode + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + // //// 添加子控件 + // //foreach (Menu menu in Menus) + // //{ + // // menu.RenderWrapperDiv = false; + // // Controls.Add(menu); + // //} + //} + + //#region HiddenFieldID + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("是否按下隐藏字段的ID")] + //protected string PressedHiddenFieldID + //{ + // get + // { + // return String.Format("{0}_pressed", XID); + // } + //} + + //#endregion + + //public Unit MarginRight_Default = Unit.Empty; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "")] + //[Description("右侧空白宽度")] + //public Unit MarginRight + //{ + // get + // { + // object obj = BoxState["MarginRight"]; + // return obj == null ? MarginRight_Default : (Unit)obj; + // } + // set + // { + // BoxState["MarginRight"] = value; + // } + //} + + //private Unit MinWidth_Default = Unit.Empty; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "")] + //[Description("最小宽度")] + //public Unit MinWidth + //{ + // get + // { + // object obj = BoxState["MinWidth"]; + // return obj == null ? MinWidth_Default : (Unit)obj; + // } + // set + // { + // BoxState["MinWidth"] = value; + // } + //} + + //public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + //{ + // //if (EnablePress) + // //{ + // // string postValue = postCollection[PressedHiddenFieldID]; + // // bool postPressed = Convert.ToBoolean(postValue); + // // if (Pressed != postPressed) + // // { + // // Pressed = postPressed; + // // return true; + // // } + // //} + + // return false; + //} + + //public void RaisePostDataChangedEvent() + //{ + // //throw new NotImplementedException(); + //} + + #endregion + + } +} diff --git a/FineUI/WebControls/Component.Calendar/Calendar.cs b/FineUI/WebControls/Component.Calendar/Calendar.cs index 8af832f..9ef7b95 100644 --- a/FineUI/WebControls/Component.Calendar/Calendar.cs +++ b/FineUI/WebControls/Component.Calendar/Calendar.cs @@ -1,361 +1,361 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Globalization; - -namespace FineUI -{ - /// <summary> - /// 日期控件 - /// </summary> - [Designer("FineUI.Design.CalendarDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:Calendar runat=server></{0}:Calendar>")] - [ToolboxBitmap(typeof(Calendar), "toolbox.Calendar.bmp")] - [DefaultEvent("DateSelect")] - [Description("日期控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Calendar : Component, IPostBackEventHandler, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Calendar() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("SelectedDate"); - } - - #endregion - - #region Properties - - /// <summary> - /// [AJAX属性]选择的日期 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("[AJAX属性]选择的日期")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? SelectedDate - { - get - { - object obj = XState["SelectedDate"]; - return obj == null ? null : (DateTime?)obj; - } - set - { - if (DesignMode) - { - XState["SelectedDate"] = value; - } - else - { - // 传入的值可能包含时间信息,这里就是为了把时间信息去掉,只保留日期信息 - XState["SelectedDate"] = DateTime.ParseExact(value.Value.ToString(DateFormatString), DateFormatString, CultureInfo.InvariantCulture); - } - } - } - - - /// <summary> - /// 日期格式 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("yyyy-MM-dd")] - [Description("日期格式")] - public string DateFormatString - { - get - { - object obj = XState["DateFormatString"]; - return obj == null ? "yyyy-MM-dd" : (string)obj; - } - set - { - XState["DateFormatString"] = value; - } - } - - /// <summary> - /// 最大日期 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("最大日期")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? MaxDate - { - get - { - object obj = XState["MaxDate"]; - return obj == null ? null : (DateTime?)obj; - } - set - { - XState["MaxDate"] = value; - } - } - - /// <summary> - /// 最小日期 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("最小日期")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? MinDate - { - get - { - object obj = XState["MinDate"]; - return obj == null ? null : (DateTime?)obj; - } - set - { - XState["MinDate"] = value; - } - } - - /// <summary> - /// 选择日期是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选择日期是否自动回发")] - [Obsolete("此属性已废除,请使用EnableDateSelectEvent属性")] - public bool EnableDateSelect - { - get - { - object obj = XState["EnableDateSelect"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableDateSelect"] = value; - } - } - - /// <summary> - /// 选择日期是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选择日期是否自动回发")] - public bool EnableDateSelectEvent - { - get - { - object obj = XState["EnableDateSelectEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableDateSelectEvent"] = value; - } - } - - #endregion - - #region SelectedDateHiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string SelectedDateHiddenFieldID - { - get - { - return String.Format("{0}_SelectedDate", ClientID); - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - if (PropertyModified("SelectedDate")) - { - sb.AppendFormat("{0}.setValue({1});", XID, ExtDateTimeConvertor.GetExtDateObject(SelectedDate.Value)); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - // extjs 的日期格式化字符串 - string extjsDateFormatString = ExtDateTimeConvertor.ConvertToExtDateFormat(DateFormatString); - OB.AddProperty("format", extjsDateFormatString); - - //if (EnableChineseAltFormats) - //{ - // OB.AddProperty("altFormats", "Y-m-d|Y-n-j|Ymd|Ynj|y-m-d|y-n-j|ymd|ynj"); - //} - - if (SelectedDate != null) - { - OB.AddProperty("value", ExtDateTimeConvertor.GetExtDateObject(SelectedDate.Value), true); - } - - if (MaxDate != null) - { - OB.AddProperty("maxDate", ExtDateTimeConvertor.GetExtDateObject(MaxDate.Value), true); - } - - if (MinDate != null) - { - OB.AddProperty("minDate", ExtDateTimeConvertor.GetExtDateObject(MinDate.Value), true); - } - - - if (EnableDateSelectEvent) - { - OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); - } - - - string jsContent = String.Format("var {0}=Ext.create('Ext.picker.Date',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region RaisePostBackEvent - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - if (eventArgument.StartsWith("Select")) - { - OnDateSelect(EventArgs.Empty); - } - } - - #endregion - - #region OnDateSelect - - private object _handlerKey = new object(); - - /// <summary> - /// 日期选定事件(需要启用EnableDateSelect) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("日期选定事件(需要启用EnableDateSelect)")] - public virtual event EventHandler DateSelect - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发日期选定事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnDateSelect(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - string postSelectedDateStr = postCollection[SelectedDateHiddenFieldID]; - if (!String.IsNullOrEmpty(postSelectedDateStr)) - { - DateTime currentSelectedDate = DateTime.ParseExact(postSelectedDateStr, DateFormatString, CultureInfo.InvariantCulture); - if (currentSelectedDate != SelectedDate) - { - SelectedDate = currentSelectedDate; - XState.BackupPostDataProperty("SelectedDate"); - return true; - } - } - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public virtual void RaisePostDataChangedEvent() - { - //OnCollapsedChanged(EventArgs.Empty); - } - - - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Globalization; + +namespace FineUI +{ + /// <summary> + /// 日期控件 + /// </summary> + [Designer("FineUI.Design.CalendarDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Calendar runat=server></{0}:Calendar>")] + [ToolboxBitmap(typeof(Calendar), "toolbox.Calendar.bmp")] + [DefaultEvent("DateSelect")] + [Description("日期控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Calendar : Component, IPostBackEventHandler, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Calendar() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("SelectedDate"); + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]选择的日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("[AJAX属性]选择的日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? SelectedDate + { + get + { + object obj = FState["SelectedDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + if (DesignMode) + { + FState["SelectedDate"] = value; + } + else + { + // 传入的值可能包含时间信息,这里就是为了把时间信息去掉,只保留日期信息 + FState["SelectedDate"] = DateTime.ParseExact(value.Value.ToString(DateFormatString), DateFormatString, CultureInfo.InvariantCulture); + } + } + } + + + /// <summary> + /// 日期格式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("yyyy-MM-dd")] + [Description("日期格式")] + public string DateFormatString + { + get + { + object obj = FState["DateFormatString"]; + return obj == null ? "yyyy-MM-dd" : (string)obj; + } + set + { + FState["DateFormatString"] = value; + } + } + + /// <summary> + /// 最大日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("最大日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MaxDate + { + get + { + object obj = FState["MaxDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MaxDate"] = value; + } + } + + /// <summary> + /// 最小日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("最小日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MinDate + { + get + { + object obj = FState["MinDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MinDate"] = value; + } + } + + ///// <summary> + ///// 选择日期是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选择日期是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableDateSelectEvent属性")] + //public bool EnableDateSelect + //{ + // get + // { + // object obj = FState["EnableDateSelect"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableDateSelect"] = value; + // } + //} + + /// <summary> + /// 选择日期是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选择日期是否自动回发")] + public bool EnableDateSelectEvent + { + get + { + object obj = FState["EnableDateSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableDateSelectEvent"] = value; + } + } + + #endregion + + #region SelectedDateHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedDateHiddenFieldID + { + get + { + return String.Format("{0}_SelectedDate", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("SelectedDate")) + { + sb.AppendFormat("{0}.setValue({1});", XID, DateUtil.GetClientDateObject(SelectedDate.Value)); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + // extjs 的日期格式化字符串 + string extjsDateFormatString = DateUtil.ConvertToClientDateFormat(DateFormatString); + OB.AddProperty("format", extjsDateFormatString); + + //if (EnableChineseAltFormats) + //{ + // OB.AddProperty("altFormats", "Y-m-d|Y-n-j|Ymd|Ynj|y-m-d|y-n-j|ymd|ynj"); + //} + + if (SelectedDate != null) + { + OB.AddProperty("value", DateUtil.GetClientDateObject(SelectedDate.Value), true); + } + + if (MaxDate != null) + { + OB.AddProperty("maxDate", DateUtil.GetClientDateObject(MaxDate.Value), true); + } + + if (MinDate != null) + { + OB.AddProperty("minDate", DateUtil.GetClientDateObject(MinDate.Value), true); + } + + + if (EnableDateSelectEvent) + { + //OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); + AddListener("select", GetPostBackEventReference("Select")); + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.picker.Date',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region RaisePostBackEvent + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + if (eventArgument.StartsWith("Select")) + { + OnDateSelect(EventArgs.Empty); + } + } + + #endregion + + #region OnDateSelect + + private object _handlerKey = new object(); + + /// <summary> + /// 日期选定事件(需要启用EnableDateSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("日期选定事件(需要启用EnableDateSelect)")] + public virtual event EventHandler DateSelect + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发日期选定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnDateSelect(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postSelectedDateStr = postCollection[SelectedDateHiddenFieldID]; + if (!String.IsNullOrEmpty(postSelectedDateStr)) + { + DateTime currentSelectedDate = DateTime.ParseExact(postSelectedDateStr, DateFormatString, CultureInfo.InvariantCulture); + if (currentSelectedDate != SelectedDate) + { + SelectedDate = currentSelectedDate; + FState.BackupPostDataProperty("SelectedDate"); + } + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public virtual void RaisePostDataChangedEvent() + { + //OnCollapsedChanged(EventArgs.Empty); + } + + + + #endregion + } +} diff --git a/FineUI/WebControls/Component.Menu/Menu.cs b/FineUI/WebControls/Component.Menu/Menu.cs index 2b30520..d2c4870 100644 --- a/FineUI/WebControls/Component.Menu/Menu.cs +++ b/FineUI/WebControls/Component.Menu/Menu.cs @@ -1,199 +1,209 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Menu.cs - * CreatedOn: 2008-07-11 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 菜单控件 - /// </summary> - [Designer("FineUI.Design.MenuDesigner, FineUI.Design")] - [ToolboxData("<{0}:Menu runat=\"server\"></{0}:Menu>")] - [ToolboxBitmap(typeof(Menu), "toolbox.Menu.bmp")] - [Description("菜单控件")] - [ParseChildren(true, "Items")] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Menu : Component - { - #region Properties - - - - #endregion - - #region Items - - private MenuItemCollection _items; - - /// <summary> - /// 菜单项集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerDefaultProperty)] - [Editor(typeof(MenuItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual MenuItemCollection Items - { - get - { - if (_items == null) - { - _items = new MenuItemCollection(this); - } - return _items; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //if (Items.Count > 0) - //{ - // ResourceManager.Instance.AddJavaScriptComponent("menu"); - //} - - #region Items - - if (Items.Count > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (BaseMenuItem item in Items) - { - if (item.Visible) - { - ab.AddProperty(String.Format("{0}", item.XID), true); - } - - //if (item.Visible) - //{ - // ab.AddProperty(String.Format("{0}", item.ClientJavascriptID), true); - //} - - //// 如果Item是否显示隐藏发生变化 - //if (HashCodeChanged(item.ID + "", item.Visible)) - //{ - // if (item.Visible) - // { - // item.AjaxForceCompleteUpdate = true; - - // AddAjaxPartialUpdateScript(String.Format("{0}.insert({1},X.{2});", ClientJavascriptID, ab.Count - 1, item.ClientJavascriptID)); - // } - // else - // { - // AddAjaxPartialUpdateScript(String.Format("{0}.remove(X.{1});", ClientJavascriptID, item.ClientJavascriptID)); - // } - //} - } - - if (ab.Count > 0) - { - OB.AddProperty("items", ab.ToString(), true); - } - } - - #region old code - - //if (HashCodeChanged("Items", itemsString)) - //{ - // StringBuilder ajaxUpdateBuilder = new StringBuilder(); - - // StringBuilder preUpdateBuilder = new StringBuilder(); - // ajaxUpdateBuilder.AppendFormat("{0}.removeAll();", ClientJavascriptID); - // foreach (BaseMenuItem item in Items) - // { - // if (item.Visible) - // { - // if (item is MenuSeparator) - // { - // ajaxUpdateBuilder.AppendFormat("{0}.addSeparator();", ClientJavascriptID); - // } - // else if (item is MenuText) - // { - // ajaxUpdateBuilder.AppendFormat("{0}.addText({1});", ClientJavascriptID, JsHelper.Enquote((item as MenuText).Text)); - // } - // else - // { - // preUpdateBuilder.AppendFormat("{0}_config=X.{0}.cloneConfig();", item.ClientJavascriptID); - // ajaxUpdateBuilder.AppendFormat("{1}=new Ext.menu.Item(X.{1}_config);X.{0}.addItem(X.{1});", ClientJavascriptID, item.ClientJavascriptID); - // } - // } - // } - - // AddAjaxPartialUpdateScript(preUpdateBuilder.ToString() + ajaxUpdateBuilder.ToString()); - //} - #endregion - - #endregion - - - if (Items.Count > 0) - { - string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Menu',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Menu.cs + * CreatedOn: 2008-07-11 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单控件 + /// </summary> + [Designer("FineUI.Design.MenuDesigner, FineUI.Design")] + [ToolboxData("<{0}:Menu runat=\"server\"></{0}:Menu>")] + [ToolboxBitmap(typeof(Menu), "toolbox.Menu.bmp")] + [Description("菜单控件")] + [ParseChildren(true, "Items")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Menu : Component + { + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + + #endregion + + #region Items + + private MenuItemCollection _items; + + /// <summary> + /// 菜单项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(MenuItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual MenuItemCollection Items + { + get + { + if (_items == null) + { + _items = new MenuItemCollection(this); + } + return _items; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //if (Items.Count > 0) + //{ + // ResourceManager.Instance.AddJavaScriptComponent("menu"); + //} + + #region Items + + if (Items.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (BaseMenuItem item in Items) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + + //if (item.Visible) + //{ + // ab.AddProperty(String.Format("{0}", item.ClientJavascriptID), true); + //} + + //// 如果Item是否显示隐藏发生变化 + //if (HashCodeChanged(item.ID + "", item.Visible)) + //{ + // if (item.Visible) + // { + // item.AjaxForceCompleteUpdate = true; + + // AddAjaxPartialUpdateScript(String.Format("{0}.insert({1},X.{2});", ClientJavascriptID, ab.Count - 1, item.ClientJavascriptID)); + // } + // else + // { + // AddAjaxPartialUpdateScript(String.Format("{0}.remove(X.{1});", ClientJavascriptID, item.ClientJavascriptID)); + // } + //} + } + + if (ab.Count > 0) + { + OB.AddProperty("items", ab.ToString(), true); + } + } + + #region old code + + //if (HashCodeChanged("Items", itemsString)) + //{ + // StringBuilder ajaxUpdateBuilder = new StringBuilder(); + + // StringBuilder preUpdateBuilder = new StringBuilder(); + // ajaxUpdateBuilder.AppendFormat("{0}.removeAll();", ClientJavascriptID); + // foreach (BaseMenuItem item in Items) + // { + // if (item.Visible) + // { + // if (item is MenuSeparator) + // { + // ajaxUpdateBuilder.AppendFormat("{0}.addSeparator();", ClientJavascriptID); + // } + // else if (item is MenuText) + // { + // ajaxUpdateBuilder.AppendFormat("{0}.addText({1});", ClientJavascriptID, JsHelper.Enquote((item as MenuText).Text)); + // } + // else + // { + // preUpdateBuilder.AppendFormat("{0}_config=X.{0}.cloneConfig();", item.ClientJavascriptID); + // ajaxUpdateBuilder.AppendFormat("{1}=new Ext.menu.Item(X.{1}_config);X.{0}.addItem(X.{1});", ClientJavascriptID, item.ClientJavascriptID); + // } + // } + // } + + // AddAjaxPartialUpdateScript(preUpdateBuilder.ToString() + ajaxUpdateBuilder.ToString()); + //} + #endregion + + #endregion + + + if (Items.Count > 0) + { + string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Menu',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs b/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs index 617c964..11408c7 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs @@ -1,88 +1,88 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuItem.cs - * CreatedOn: 2008-07-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 菜单项控件基类(抽象类) - /// </summary> - [ToolboxData("<{0}:MenuItem runat=\"server\"></{0}:MenuItem>")] - [ToolboxBitmap(typeof(BaseMenuItem), "toolbox.MenuItem.bmp")] - [Description("菜单项控件基类")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public abstract class BaseMenuItem : Component - { - - #region Properties - - - - - #endregion - - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - } - #endregion - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItem.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项控件基类(抽象类) + /// </summary> + [ToolboxData("<{0}:MenuItem runat=\"server\"></{0}:MenuItem>")] + [ToolboxBitmap(typeof(BaseMenuItem), "toolbox.MenuItem.bmp")] + [Description("菜单项控件基类")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public abstract class BaseMenuItem : Component + { + + #region Properties + + + + + #endregion + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + } + #endregion + + + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs b/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs index 2d2ae12..35ba0fc 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs @@ -1,398 +1,402 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuButton.cs - * CreatedOn: 2008-07-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 菜单项按钮控件 - /// </summary> - [Designer("FineUI.Design.MenuButtonDesigner, FineUI.Design")] - [ToolboxData("<{0}:MenuButton runat=\"server\"></{0}:MenuButton>")] - [ToolboxBitmap(typeof(MenuButton), "toolbox.MenuButton.bmp")] - [Description("菜单项按钮控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - [DefaultEvent("Click")] - public class MenuButton : MenuItem, IPostBackEventHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public MenuButton() - { - // Two type of ajax properties: 1. Can only be changed in server-side. 2. Can be changed both in client and server. - // Can be changed in client and server properties: null - // AddAjaxProperties("ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"); - - } - - #endregion - - #region Properties - - /// <summary> - /// 是否可以回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以回发")] - public bool EnablePostBack - { - get - { - object obj = XState["EnablePostBack"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnablePostBack"] = value; - } - } - - - /// <summary> - /// 点击按钮时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("点击按钮时需要执行的客户端脚本")] - public string OnClientClick - { - get - { - object obj = XState["OnClientClick"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientClick"] = value; - } - } - - - /// <summary> - /// 提交之前需要验证的表单名称列表 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("提交之前需要验证的表单名称列表")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] ValidateForms - { - get - { - object obj = XState["ValidateForms"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["ValidateForms"] = value; - } - } - - /// <summary> - /// 验证失败时提示对话框弹出位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("验证失败时提示对话框弹出位置")] - public Target ValidateTarget - { - get - { - object obj = XState["ValidateTarget"]; - return obj == null ? Target.Self : (Target)obj; - } - set - { - XState["ValidateTarget"] = value; - } - } - - /// <summary> - /// 验证失败时是否出现提示对话框 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("验证失败时是否出现提示对话框")] - public bool ValidateMessageBox - { - get - { - object obj = XState["ValidateMessageBox"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ValidateMessageBox"] = value; - } - } - - #endregion - - #region ConfirmText/ConfirmTitle/ConfirmIcon - - - /// <summary> - /// 确认对话框标题 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("确认对话框标题")] - public string ConfirmTitle - { - get - { - object obj = XState["ConfirmTitle"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ConfirmTitle"] = value; - } - } - - - /// <summary> - /// 确认对话框内容 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("确认对话框内容")] - public string ConfirmText - { - get - { - object obj = XState["ConfirmText"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ConfirmText"] = value; - } - } - - - /// <summary> - /// 确认对话框提示图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(MessageBoxIcon.Warning)] - [Description("确认对话框提示图标")] - public MessageBoxIcon ConfirmIcon - { - get - { - object obj = XState["ConfirmIcon"]; - return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; - } - set - { - XState["ConfirmIcon"] = value; - } - } - - ///// <summary> - ///// 确认对话框弹出位置 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("确认对话框弹出位置")] - //public string ConfirmTarget - //{ - // get - // { - // object obj = BoxState["ConfirmTarget"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // BoxState["ConfirmTarget"] = value; - // } - //} - - /// <summary> - /// 确认对话框弹出位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("确认对话框弹出位置")] - public Target ConfirmTarget - { - get - { - object obj = XState["ConfirmTarget"]; - return obj == null ? Target.Self : (Target)obj; - } - set - { - XState["ConfirmTarget"] = value; - } - } - - #endregion - - #region OnPreLoad - - //protected override void OnPreLoad(object sender, EventArgs e) - //{ - // base.OnPreLoad(sender, e); - - // SaveAjaxProperty("ClickScriptFunction", GetClickScriptFunction()); - //} - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick")) - { - sb.AppendFormat("{0}.un('click', {0}.initialConfig.listeners.click);", XID); - sb.AppendFormat("{0}.on('click',{1});", XID, GetClickScriptFunction()); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - #region options - - - #endregion - - #region Click - - //string clickScriptFunction = GetClickScriptFunction(); - //if (AjaxPropertyChanged("ClickScriptFunction", clickScriptFunction)) - //{ - // string ajaxClickFunction = String.Empty; - // ajaxClickFunction += String.Format("{0}.un('click',X.{0}_click);", XID); - // ajaxClickFunction += clickScriptFunction; - // ajaxClickFunction += String.Format("{0}.on('click',X.{0}_click);", XID); - - // AddAjaxPropertyChangedScript(ajaxClickFunction); - //} - - //OB.Listeners.AddProperty("click", String.Format("{0}_click", XID), true); - - OB.Listeners.AddProperty("click", GetClickScriptFunction(), true); - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Item',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - private string GetClickScriptFunction() - { - string clickScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), - ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, ClientID); - - return String.Format("function(button,e){{{0}e.stopEvent();}}", clickScript); - } - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - OnClick(EventArgs.Empty); - } - - #endregion - - #region OnClick - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 按钮点击事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("按钮点击事件")] - public event EventHandler Click - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发按钮点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnClick(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuButton.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项按钮控件 + /// </summary> + [Designer("FineUI.Design.MenuButtonDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuButton runat=\"server\"></{0}:MenuButton>")] + [ToolboxBitmap(typeof(MenuButton), "toolbox.MenuButton.bmp")] + [Description("菜单项按钮控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("Click")] + public class MenuButton : MenuItem, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public MenuButton() + { + // Two type of ajax properties: 1. Can only be changed in server-side. 2. Can be changed both in client and server. + // Can be changed in client and server properties: null + // AddAjaxProperties("ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"); + + } + + #endregion + + #region Properties + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// 点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击按钮时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + + /// <summary> + /// 提交之前需要验证的表单名称列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("提交之前需要验证的表单名称列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + /// <summary> + /// 验证失败时提示对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + /// <summary> + /// 验证失败时是否出现提示对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon + + + /// <summary> + /// 确认对话框标题 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("确认对话框标题")] + public string ConfirmTitle + { + get + { + object obj = FState["ConfirmTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmTitle"] = value; + } + } + + + /// <summary> + /// 确认对话框内容 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("确认对话框内容")] + public string ConfirmText + { + get + { + object obj = FState["ConfirmText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmText"] = value; + } + } + + + /// <summary> + /// 确认对话框提示图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("确认对话框提示图标")] + public MessageBoxIcon ConfirmIcon + { + get + { + object obj = FState["ConfirmIcon"]; + return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; + } + set + { + FState["ConfirmIcon"] = value; + } + } + + ///// <summary> + ///// 确认对话框弹出位置 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("确认对话框弹出位置")] + //public string ConfirmTarget + //{ + // get + // { + // object obj = BoxState["ConfirmTarget"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["ConfirmTarget"] = value; + // } + //} + + /// <summary> + /// 确认对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("确认对话框弹出位置")] + public Target ConfirmTarget + { + get + { + object obj = FState["ConfirmTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ConfirmTarget"] = value; + } + } + + #endregion + + #region OnPreLoad + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("ClickScriptFunction", GetClickScriptFunction()); + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick")) + { + sb.AppendFormat("{0}.un('click', {0}.initialConfig.listeners.click);", XID); + sb.AppendFormat("{0}.on('click',{1});", XID, GetClientClickFunction()); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + + + #endregion + + #region Click + + //string clickScriptFunction = GetClickScriptFunction(); + //if (AjaxPropertyChanged("ClickScriptFunction", clickScriptFunction)) + //{ + // string ajaxClickFunction = String.Empty; + // ajaxClickFunction += String.Format("{0}.un('click',X.{0}_click);", XID); + // ajaxClickFunction += clickScriptFunction; + // ajaxClickFunction += String.Format("{0}.on('click',X.{0}_click);", XID); + + // AddAjaxPropertyChangedScript(ajaxClickFunction); + //} + + //OB.Listeners.AddProperty("click", String.Format("{0}_click", XID), true); + + OB.Listeners.AddProperty("click", GetClientClickFunction(), true); + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Item',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + private string GetClientClickFunction() + { + string clickScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, ClientID); + + clickScript += "e.stopEvent();"; + + return GetListenerFunction("click", clickScript, "button", "e"); + + //return String.Format("function(button,e){{{0}e.stopEvent();}}", clickScript); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnClick(EventArgs.Empty); + } + + #endregion + + #region OnClick + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("按钮点击事件")] + public event EventHandler Click + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs b/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs index c449e35..e297b86 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs @@ -1,270 +1,274 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuCheckBox.cs - * CreatedOn: 2012-11-09 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 菜单项复选框控件(单选框) - /// </summary> - [Designer("FineUI.Design.MenuCheckBoxDesigner, FineUI.Design")] - [ToolboxData("<{0}:MenuCheckBox runat=\"server\"></{0}:MenuCheckBox>")] - [ToolboxBitmap(typeof(MenuCheckBox), "toolbox.MenuCheckBox.bmp")] - [Description("菜单项复选框控件(单选框)")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - [DefaultEvent("Click")] - public class MenuCheckBox : MenuItem, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public MenuCheckBox() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("Checked"); - } - - #endregion - - #region Properties - - /// <summary> - /// 分组名(如果指定分组名,则此控件被渲染为单选框) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("分组名(如果指定分组名,则此控件被渲染为单选框)")] - public string GroupName - { - get - { - object obj = XState["GroupName"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["GroupName"] = value; - } - } - - - /// <summary> - /// [AJAX属性]是否选中 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("[AJAX属性]是否选中")] - public bool Checked - { - get - { - object obj = XState["Checked"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Checked"] = value; - } - } - - /// <summary> - /// 是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动回发")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - #endregion - - #region CheckedHiddenFieldID - - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string CheckedHiddenFieldID - { - get - { - return String.Format("{0}_Checked", ClientID); - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Checked")) - { - sb.AppendFormat("{0}.x_setChecked();", XID); - } - - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - #region options - - OB.AddProperty("checked", Checked); - - if (!String.IsNullOrEmpty(GroupName)) - { - OB.AddProperty("group", GroupName); - } - - #endregion - - #region AutoPostBack - - string checkScript = String.Empty; - if (!String.IsNullOrEmpty(GroupName)) - { - checkScript = "if(X.util.checkGroupLastTime('" + GroupName + "')){" + GetPostBackEventReference() + "}"; - } - else - { - checkScript = GetPostBackEventReference(); - } - - OB.Listeners.AddProperty("checkchange", JsHelper.GetFunction(checkScript), true); - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.menu.CheckItem',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - #endregion - - #region IPostBackDataHandler - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); - if (Checked != postChecked) - { - Checked = postChecked; - XState.BackupPostDataProperty("Checked"); - return true; - } - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public void RaisePostDataChangedEvent() - { - OnCheckedChanged(new CheckedEventArgs(Checked)); - } - - #endregion - - #region OnCheckedChanged - - private object _handlerKey = new object(); - - /// <summary> - /// 复选框状态改变事件(需要启用AutoPostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("复选框状态改变事件(需要启用AutoPostBack)")] - public event EventHandler<CheckedEventArgs> CheckedChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发复选框状态改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnCheckedChanged(CheckedEventArgs e) - { - EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuCheckBox.cs + * CreatedOn: 2012-11-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项复选框控件(单选框) + /// </summary> + [Designer("FineUI.Design.MenuCheckBoxDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuCheckBox runat=\"server\"></{0}:MenuCheckBox>")] + [ToolboxBitmap(typeof(MenuCheckBox), "toolbox.MenuCheckBox.bmp")] + [Description("菜单项复选框控件(单选框)")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("Click")] + public class MenuCheckBox : MenuItem, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public MenuCheckBox() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Checked"); + } + + #endregion + + #region Properties + + /// <summary> + /// 分组名(如果指定分组名,则此控件被渲染为单选框) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("分组名(如果指定分组名,则此控件被渲染为单选框)")] + public string GroupName + { + get + { + object obj = FState["GroupName"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["GroupName"] = value; + } + } + + + /// <summary> + /// [AJAX属性]是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否选中")] + public bool Checked + { + get + { + object obj = FState["Checked"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Checked"] = value; + } + } + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + #endregion + + #region CheckedHiddenFieldID + + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string CheckedHiddenFieldID + { + get + { + return String.Format("{0}_Checked", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Checked")) + { + sb.AppendFormat("{0}.f_setChecked();", XID); + } + + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + #region options + + OB.AddProperty("checked", Checked); + + if (!String.IsNullOrEmpty(GroupName)) + { + OB.AddProperty("group", GroupName); + } + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + string checkScript = String.Empty; + if (!String.IsNullOrEmpty(GroupName)) + { + checkScript = "if(F.util.checkGroupLastTime('" + GroupName + "')){" + GetPostBackEventReference() + "}"; + } + else + { + checkScript = GetPostBackEventReference(); + } + + //OB.Listeners.AddProperty("checkchange", JsHelper.GetFunction(checkScript), true); + AddListener("checkchange", checkScript); + } + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.menu.CheckItem',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region IPostBackDataHandler + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); + if (Checked != postChecked) + { + Checked = postChecked; + FState.BackupPostDataProperty("Checked"); + return true; + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnCheckedChanged(new CheckedEventArgs(Checked)); + } + + #endregion + + #region OnCheckedChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 复选框状态改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("复选框状态改变事件(需要启用AutoPostBack)")] + public event EventHandler<CheckedEventArgs> CheckedChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发复选框状态改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCheckedChanged(CheckedEventArgs e) + { + EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs b/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs index 6b0eeb2..aecf27c 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs @@ -1,149 +1,149 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuHyperLink.cs - * CreatedOn: 2008-07-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 菜单项超链接控件 - /// </summary> - [Designer("FineUI.Design.MenuHyperLinkDesigner, FineUI.Design")] - [ToolboxData("<{0}:MenuHyperLink runat=\"server\"></{0}:MenuHyperLink>")] - [ToolboxBitmap(typeof(MenuHyperLink), "toolbox.MenuHyperLink.bmp")] - [Description("菜单项超链接控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class MenuHyperLink : MenuItem - { - - #region Properties - - /// <summary> - /// 链接地址 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("链接地址")] - public string NavigateUrl - { - get - { - object obj = XState["NavigateUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["NavigateUrl"] = value; - } - } - - /// <summary> - /// 链接目标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("链接目标")] - public string Target - { - get - { - object obj = XState["Target"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Target"] = value; - } - } - - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - #region options - - if (!String.IsNullOrEmpty(NavigateUrl)) - { - OB.AddProperty("href", NavigateUrl); - OB.AddProperty("hrefTarget", Target); - } - - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Item',{1});", XID, OB.ToString()); - - //if (AjaxForceCompleteUpdate) - //{ - // ClearAjaxUpdateScript(); - // AddAjaxUpdateScript(jsContent); - // AjaxForceCompleteUpdate = false; - //} - - AddStartupScript(jsContent); - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuHyperLink.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项超链接控件 + /// </summary> + [Designer("FineUI.Design.MenuHyperLinkDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuHyperLink runat=\"server\"></{0}:MenuHyperLink>")] + [ToolboxBitmap(typeof(MenuHyperLink), "toolbox.MenuHyperLink.bmp")] + [Description("菜单项超链接控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class MenuHyperLink : MenuItem + { + + #region Properties + + /// <summary> + /// 链接地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("链接地址")] + public string NavigateUrl + { + get + { + object obj = FState["NavigateUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["NavigateUrl"] = value; + } + } + + /// <summary> + /// 链接目标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("链接目标")] + public string Target + { + get + { + object obj = FState["Target"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Target"] = value; + } + } + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + + if (!String.IsNullOrEmpty(NavigateUrl)) + { + OB.AddProperty("href", NavigateUrl); + OB.AddProperty("hrefTarget", Target); + } + + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Item',{1});", XID, OB.ToString()); + + //if (AjaxForceCompleteUpdate) + //{ + // ClearAjaxUpdateScript(); + // AddAjaxUpdateScript(jsContent); + // AjaxForceCompleteUpdate = false; + //} + + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs b/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs index eeb9262..9bbee90 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs @@ -1,291 +1,289 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuItem.cs - * CreatedOn: 2008-07-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; -using System.Web.UI.Design; - -namespace FineUI -{ - /// <summary> - /// 菜单项控件基类(抽象类) - /// </summary> - [ToolboxData("<{0}:MenuItem runat=\"server\"></{0}:MenuItem>")] - [ToolboxBitmap(typeof(MenuItem), "toolbox.MenuItem.bmp")] - [Description("菜单项控件基类")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - [ParseChildren(true)] - [PersistChildren(false)] - public abstract class MenuItem : BaseMenuItem - { - - #region Properties - - /// <summary> - /// 点击时隐藏菜单,可以配合使用CssStyle=cursor:default; - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("点击时隐藏菜单,可以配合使用CssStyle=cursor:default;")] - public bool HideOnClick - { - get - { - object obj = XState["HideOnClick"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["HideOnClick"] = value; - } - } - - - /// <summary> - /// 图标地址 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("图标地址")] - [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - public string IconUrl - { - get - { - object obj = XState["IconUrl"]; - if (obj == null) - { - if (!DesignMode) - { - if (Icon != Icon.None) - { - obj = IconHelper.GetIconUrl(Icon); - } - } - } - return obj == null ? "" : (string)obj; - } - set - { - XState["IconUrl"] = value; - } - } - - - /// <summary> - /// 预定义图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Icon.None)] - [Description("预定义图标")] - public virtual Icon Icon - { - get - { - object obj = XState["Icon"]; - return obj == null ? Icon.None : (Icon)obj; - } - set - { - XState["Icon"] = value; - } - } - - /// <summary> - /// 文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - #endregion - - - #region Menu - - private Menu _menu; - - /// <summary> - /// 上下文菜单 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Description("上下文菜单")] - public Menu Menu - { - get - { - if (_menu == null) - { - _menu = new Menu(); - } - return _menu; - } - } - - //private MenuCollection _menus; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerProperty)] - //public virtual MenuCollection Menus - //{ - // get - // { - // if (_menus == null) - // { - // _menus = new MenuCollection(this); - // } - // return _menus; - // } - //} - - //private Menu _menu; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] - //public virtual Menu Menu - //{ - // get - // { - // if (_menu == null) - // { - // _menu = new Menu(); - - // _menu.RenderWrapperDiv = false; - // Controls.Add(_menu); - // } - // return _menu; - // } - //} - #endregion - - #region CreateChildControls - - /// <summary> - /// 添加子控件 - /// </summary> - protected override void CreateChildControls() - { - base.CreateChildControls(); - - Menu.RenderWrapperNode = false; - Controls.Add(Menu); - } - - #endregion - - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - #region options - - OB.AddProperty("text", Text); - - if (!String.IsNullOrEmpty(IconUrl)) - { - OB.AddProperty("icon", ResolveUrl(IconUrl)); - } - - - // 默认是点击就隐藏 - if (!HideOnClick) OB.AddProperty("hideOnClick", false); - - - #endregion - - #region Menu - - //if (Menus.Count > 0) - //{ - // // 一个Button只能有一个Menu - // OB.AddProperty("menu", String.Format("{0}", Menus[0].XID), true); - //} - - if (Menu.Items.Count > 0) - { - OB.AddProperty("menu", String.Format("{0}", Menu.XID), true); - } - - //if (Menu != null && Menu.Items.Count > 0) - //{ - // OB.AddProperty(OptionName.Menu, String.Format("{0}", Menu.ClientJavascriptID), true); - //} - - #endregion - - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItem.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 菜单项控件基类(抽象类) + /// </summary> + [ToolboxData("<{0}:MenuItem runat=\"server\"></{0}:MenuItem>")] + [ToolboxBitmap(typeof(MenuItem), "toolbox.MenuItem.bmp")] + [Description("菜单项控件基类")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class MenuItem : BaseMenuItem + { + #region Properties + + /// <summary> + /// 点击时隐藏菜单,可以配合使用CssStyle=cursor:default; + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("点击时隐藏菜单,可以配合使用CssStyle=cursor:default;")] + public bool HideOnClick + { + get + { + object obj = FState["HideOnClick"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["HideOnClick"] = value; + } + } + + + /// <summary> + /// 图标地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("图标地址")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + object obj = FState["IconUrl"]; + if (obj == null) + { + if (!DesignMode) + { + if (Icon != Icon.None) + { + obj = IconHelper.GetIconUrl(Icon); + } + } + } + return obj == null ? "" : (string)obj; + } + set + { + FState["IconUrl"] = value; + } + } + + + /// <summary> + /// 预定义图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("预定义图标")] + public virtual Icon Icon + { + get + { + object obj = FState["Icon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["Icon"] = value; + } + } + + /// <summary> + /// 文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + #endregion + + #region Menu + + private Menu _menu; + + /// <summary> + /// 上下文菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("上下文菜单")] + public Menu Menu + { + get + { + if (_menu == null) + { + _menu = new Menu(); + } + return _menu; + } + } + + //private MenuCollection _menus; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //public virtual MenuCollection Menus + //{ + // get + // { + // if (_menus == null) + // { + // _menus = new MenuCollection(this); + // } + // return _menus; + // } + //} + + //private Menu _menu; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual Menu Menu + //{ + // get + // { + // if (_menu == null) + // { + // _menu = new Menu(); + + // _menu.RenderWrapperDiv = false; + // Controls.Add(_menu); + // } + // return _menu; + // } + //} + #endregion + + #region CreateChildControls + + /// <summary> + /// 添加子控件 + /// </summary> + protected override void CreateChildControls() + { + base.CreateChildControls(); + + //Menu.RenderWrapperNode = false; + Controls.Add(Menu); + } + + #endregion + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + + OB.AddProperty("text", Text); + + if (!String.IsNullOrEmpty(IconUrl)) + { + OB.AddProperty("icon", ResolveUrl(IconUrl)); + } + + + // 默认是点击就隐藏 + if (!HideOnClick) OB.AddProperty("hideOnClick", false); + + + #endregion + + #region Menu + + //if (Menus.Count > 0) + //{ + // // 一个Button只能有一个Menu + // OB.AddProperty("menu", String.Format("{0}", Menus[0].XID), true); + //} + + if (Menu.Items.Count > 0) + { + OB.AddProperty("menu", String.Format("{0}", Menu.XID), true); + } + + //if (Menu != null && Menu.Items.Count > 0) + //{ + // OB.AddProperty(OptionName.Menu, String.Format("{0}", Menu.ClientJavascriptID), true); + //} + + #endregion + + } + + #endregion + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs b/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs index 348a76b..c99e032 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs @@ -1,70 +1,70 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuItemCollection.cs - * CreatedOn: 2008-07-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// <summary> - /// 菜单项控件集合 - /// </summary> - public class MenuItemCollection : BaseCollection<BaseMenuItem> - { - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="parent">父控件实例</param> - public MenuItemCollection(Menu parent) - : base(parent) - { - - } - /* - private Menu _parent; - - /// <summary> - /// /// 构造函数 - /// </summary> - /// <param name="parent">菜单实例</param> - public MenuItemCollection(Menu parent) - { - _parent = parent; - } - - protected override void InsertItem(int index, BaseMenuItem item) - { - base.InsertItem(index, item); - - item.RenderWrapperNode = false; - _parent.Controls.AddAt(index, item); - } - * */ - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItemCollection.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 菜单项控件集合 + /// </summary> + public class MenuItemCollection : BaseCollection<BaseMenuItem> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public MenuItemCollection(Menu parent) + : base(parent) + { + + } + /* + private Menu _parent; + + /// <summary> + /// /// 构造函数 + /// </summary> + /// <param name="parent">菜单实例</param> + public MenuItemCollection(Menu parent) + { + _parent = parent; + } + + protected override void InsertItem(int index, BaseMenuItem item) + { + base.InsertItem(index, item); + + item.RenderWrapperNode = false; + _parent.Controls.AddAt(index, item); + } + * */ + + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs b/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs index a30d9fd..ad9966e 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs @@ -1,95 +1,95 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuSeparator.cs - * CreatedOn: 2008-07-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 菜单项分隔符控件 - /// </summary> - [Designer("FineUI.Design.MenuSeparatorDesigner, FineUI.Design")] - [ToolboxData("<{0}:MenuSeparator runat=\"server\"></{0}:MenuSeparator>")] - [ToolboxBitmap(typeof(MenuSeparator), "toolbox.MenuSeparator.bmp")] - [Description("菜单项分隔符控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class MenuSeparator : BaseMenuItem - { - - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Separator',{1});", XID, OB.ToString()); - - - //if (AjaxForceCompleteUpdate) - //{ - // ClearAjaxUpdateScript(); - // AddAjaxUpdateScript(jsContent); - // AjaxForceCompleteUpdate = false; - //} - - AddStartupScript(jsContent); - - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuSeparator.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项分隔符控件 + /// </summary> + [Designer("FineUI.Design.MenuSeparatorDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuSeparator runat=\"server\"></{0}:MenuSeparator>")] + [ToolboxBitmap(typeof(MenuSeparator), "toolbox.MenuSeparator.bmp")] + [Description("菜单项分隔符控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class MenuSeparator : BaseMenuItem + { + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Separator',{1});", XID, OB.ToString()); + + + //if (AjaxForceCompleteUpdate) + //{ + // ClearAjaxUpdateScript(); + // AddAjaxUpdateScript(jsContent); + // AjaxForceCompleteUpdate = false; + //} + + AddStartupScript(jsContent); + + } + + #endregion + } +} diff --git a/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs b/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs index 35b041a..a4825ec 100644 --- a/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs +++ b/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs @@ -1,122 +1,113 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: MenuText.cs - * CreatedOn: 2008-07-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 菜单项文本控件 - /// </summary> - [Designer("FineUI.Design.MenuTextDesigner, FineUI.Design")] - [ToolboxData("<{0}:MenuText runat=\"server\"></{0}:MenuText>")] - [ToolboxBitmap(typeof(MenuText), "toolbox.MenuText.bmp")] - [Description("菜单项文本控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class MenuText : BaseMenuItem - { - - #region Properties - - /// <summary> - /// 文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - #endregion - - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - OB.AddProperty("text", Text); - - - string jsContent = String.Format("var {0}=Ext.create('Ext.menu.TextItem',{1});", XID, OB.ToString()); - - - //if (AjaxForceCompleteUpdate) - //{ - // ClearAjaxUpdateScript(); - // AddAjaxUpdateScript(jsContent); - // AjaxForceCompleteUpdate = false; - //} - - AddStartupScript(jsContent); - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuText.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项文本控件 + /// </summary> + [Designer("FineUI.Design.MenuTextDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuText runat=\"server\"></{0}:MenuText>")] + [ToolboxBitmap(typeof(MenuText), "toolbox.MenuText.bmp")] + [Description("菜单项文本控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class MenuText : MenuItem + { + + #region Properties + + ///// <summary> + ///// 文本 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("文本")] + //public virtual string Text + //{ + // get + // { + // object obj = FState["Text"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["Text"] = value; + // } + //} + + #endregion + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + //OB.AddProperty("text", Text); + + + string jsContent = String.Format("var {0}=Ext.create('Ext.menu.Item',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Component.SplitButton/SplitButton.cs b/FineUI/WebControls/Component.SplitButton/SplitButton.cs index b3e6d99..4fbbda2 100644 --- a/FineUI/WebControls/Component.SplitButton/SplitButton.cs +++ b/FineUI/WebControls/Component.SplitButton/SplitButton.cs @@ -1,97 +1,97 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: SplitButton.cs - * CreatedOn: 2008-07-02 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design; - -namespace FineUI -{ - /// <summary> - /// 带下拉列表的按钮 - /// </summary> - [Designer("FineUI.Design.SplitButtonDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:SplitButton runat=\"server\"></{0}:SplitButton>")] - [ToolboxBitmap(typeof(SplitButton), "toolbox.SplitButton.bmp")] - [Description("按钮控件")] - [DefaultEvent("Click")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - [ParseChildren(true, "Menus")] - [PersistChildren(false)] - public class SplitButton : Button, IPostBackEventHandler - { - - #region Properties - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - // 首先删除注册脚本(因为已经在Button中注册过了) - ResourceManager.Instance.RemoveStartupScript(this); - - string jsContent = String.Format("var {0}=Ext.create('Ext.button.Split',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - - #endregion - - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: SplitButton.cs + * CreatedOn: 2008-07-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 带下拉列表的按钮 + /// </summary> + [Designer("FineUI.Design.SplitButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:SplitButton runat=\"server\"></{0}:SplitButton>")] + [ToolboxBitmap(typeof(SplitButton), "toolbox.SplitButton.bmp")] + [Description("按钮控件")] + [DefaultEvent("Click")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [ParseChildren(true, "Menus")] + [PersistChildren(false)] + public class SplitButton : Button, IPostBackEventHandler + { + + #region Properties + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + // 首先删除注册脚本(因为已经在Button中注册过了) + ResourceManager.Instance.RemoveStartupScript(this); + + string jsContent = String.Format("var {0}=Ext.create('Ext.button.Split',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + #endregion + + + + } +} diff --git a/FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs b/FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs new file mode 100644 index 0000000..1bb28ee --- /dev/null +++ b/FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs @@ -0,0 +1,215 @@ + +#region Comment + +/* + * Project: FineUIPro + * + * FileName: CPHConnector.cs + * CreatedOn: 2014-08-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// <summary> + /// 母版页ContentPlaceHolder控件的容器 + /// </summary> + //[Designer(typeof(FineUIPro.Design.UserControlConnectorDesigner))] + [ToolboxData("<{0}:CPHConnector runat=\"server\"></{0}:CPHConnector>")] + [ToolboxBitmap(typeof(UserControlConnector), "toolbox.UserControlConnector.bmp")] + [Description("母版页ContentPlaceHolder控件的容器")] + [ParseChildren(false)] + [PersistChildren(true)] + [ControlBuilder(typeof(ContentPanelBuilder))] + public class CPHConnector : ControlBase + { + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + // 不渲染,此控件只作为中间转化层 + //RenderWrapperNode = false; + AddStartupScript(String.Empty); + + // 一个UserControlConnector里面可能放多个UserControl, + // 每个UserControl中的所有直接子节点都不要即时渲染 + StringBuilder sb = new StringBuilder(); + foreach (Control userControl in Controls) + { + if (userControl is ContentPlaceHolder) + { + // 用户控件中的FineUIPro控件(x1,x4,x6) + sb.AppendFormat("{0},", GetControlIds(userControl.Controls)); + + // 用户控件里面的都不要即时渲染 + foreach (Control c in userControl.Controls) + { + ControlBase childControl = c as ControlBase; + if (childControl != null) + { + childControl.RenderWrapperNode = false; + } + } + } + } + + // 重新设置父节点的注册脚本 + ControlBase parentControl = Parent as ControlBase; + if (parentControl != null) + { + ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); + cs.Script = GetResolveScript(cs.Script, sb.ToString().TrimEnd(',')); + } + + } + + #endregion + + #region private GetFirstChildUserControl + + /// <summary> + /// 取得第一个子控件 + /// </summary> + /// <param name="controls"></param> + /// <returns></returns> + private UserControl GetFirstChildUserControl(ControlCollection controls) + { + foreach (Control c in controls) + { + if (c is UserControl) + { + return (c as UserControl); + } + } + + return null; + } + + #endregion + + #region private GetControlIds + + private string GetControlIds(ControlCollection controls) + { + StringBuilder sb = new StringBuilder(); + if (controls.Count > 0) + { + foreach (Control item in controls) + { + // 再次检查是否ControlBase,并且只有Visible时才添加 + // 还有一个例外情况,Window控件不作为任何控件的子控件 + if (item is ControlBase && item.Visible && !(item is Window) && !(item is Toolbar)) + { + string itemJSId = String.Format("{0}", (item as ControlBase).XID); + sb.AppendFormat("{0},", itemJSId); + } + } + } + + return sb.ToString().TrimEnd(','); + } + + #endregion + + #region private GetResolveScript + + private string GetResolveScript(string script, string ids) + { + int itemsStartIndex = script.IndexOf("items:["); + if (itemsStartIndex >= 0) + { + itemsStartIndex += "items:[".Length; + int itemsEndIndex = script.IndexOf("]", itemsStartIndex); + string itemsStr = script.Substring(itemsStartIndex, itemsEndIndex - itemsStartIndex); + + // 防止itemsStr出现类似:x1,x2,x13,x20的情况 + string newItemStr = itemsStr + ","; + newItemStr = newItemStr.Replace(XID + ",", ids + ","); + newItemStr = newItemStr.TrimEnd(','); + + return script.Substring(0, itemsStartIndex) + newItemStr + script.Substring(itemsEndIndex); + + //StringBuilder sb = new StringBuilder(); + //string currentId = String.Format("box.{0}", ClientJavascriptID); + //Nii.JSON.JSONArray ja = new Nii.JSON.JSONArray(itemsStr); + //for (int i = 0; i < ja.Count; i++) + //{ + // string item = ja.getString(i); + // if (item == currentId) + // { + // sb.AppendFormat("{0},", ids); + // } + // else + // { + // sb.AppendFormat("{0},", item); + // } + //} + + //string newItemsStr = String.Format("[{0}]", sb.ToString().TrimEnd(',')); + + //return script.Replace(itemsStr, newItemsStr); + } + + return script; + } + + #endregion + } +} diff --git a/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs b/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs index 2a62ac4..4bf54b1 100644 --- a/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs +++ b/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs @@ -1,214 +1,202 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: PageLoading.cs - * CreatedOn: 2008-05-15 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design; - -namespace FineUI -{ - /// <summary> - /// 页面加载提示控件 - /// </summary> - [Designer("FineUI.Design.PageLoadingDesigner, FineUI.Design")] - [ToolboxData("<{0}:PageLoading runat=server></{0}:PageLoading>")] - [ToolboxBitmap(typeof(PageLoading), "toolbox.PageLoading.bmp")] - [Description("")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class PageLoading : ControlBase - { - #region static readonly - - internal static readonly string LOADING_TEMLATE = "<div id='loading-mask'></div><div id='loading'><div class='loading-indicator'><img align='absmiddle' src='#LOADING_IMAGE_SRC#'/></div></div>"; - - internal static readonly string LOADING_IMAGE_PATH = "/res/images/loading_32.gif"; - - #endregion - - #region Properties - - - /// <summary> - /// 自定义的加载图片 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("自定义的加载图片")] - [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - public string ImageUrl - { - get - { - object obj = XState["ImageUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ImageUrl"] = value; - } - } - - - - /// <summary> - /// 回发时是否显示 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("回发时是否显示")] - public bool ShowOnPostBack - { - get - { - object obj = XState["ShowOnPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ShowOnPostBack"] = value; - } - } - - - /// <summary> - /// 是否启用淡出效果 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否启用淡出效果")] - public bool EnableFadeOut - { - get - { - object obj = XState["EnableFadeOut"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableFadeOut"] = value; - } - } - - - #endregion - - #region RenderBeginTag/RenderEndTag - - /// <summary> - /// 渲染控件的开始标签 - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderBeginTag(HtmlTextWriter writer) - { - //base.RenderBeginTag(writer); - - if (!Page.IsPostBack || (Page.IsPostBack && ShowOnPostBack)) - { - string content = LOADING_TEMLATE; - - string imageUrl = String.Empty; - if (String.IsNullOrEmpty(ImageUrl)) - { - imageUrl = ResolveUrl(GlobalConfig.GetExtjsBasePath() + LOADING_IMAGE_PATH); //ResourceHelper.GetWebResourceUrl(Page, LOADING_IMAGE_NAME); - } - else - { - imageUrl = ResolveUrl(ImageUrl); - } - - content = content.Replace("#LOADING_IMAGE_SRC#", imageUrl); - - writer.Write(content); - - } - - - } - - /// <summary> - /// 渲染控件的结束标签(不生成结束标签) - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderEndTag(HtmlTextWriter writer) - { - - //base.RenderEndTag(writer); - } - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - if (!Page.IsPostBack || (Page.IsPostBack && ShowOnPostBack)) - { - string jsContent = String.Empty; - - jsContent = String.Format("X.util.removePageLoading({0});", EnableFadeOut.ToString().ToLower()); - //if (EnableFadeOut) - //{ - // jsContent = "Ext.get('loading').remove();Ext.get('loading-mask').fadeOut({remove:true});"; - //} - //else - //{ - // jsContent = "Ext.get('loading').remove();Ext.get('loading-mask').remove();"; - // //jsContent = JsHelper.GetSetTimeoutFunction(jsContent, 10, "box"); - //} - - //jsContent += "\r\n"; - //jsContent += "\r\n"; - - AddStartupAbsoluteScript(jsContent, 50); - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: PageLoading.cs + * CreatedOn: 2008-05-15 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 页面加载提示控件 + /// </summary> + [Designer("FineUI.Design.PageLoadingDesigner, FineUI.Design")] + [ToolboxData("<{0}:PageLoading runat=server></{0}:PageLoading>")] + [ToolboxBitmap(typeof(PageLoading), "toolbox.PageLoading.bmp")] + [Description("")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class PageLoading : ControlBase + { + #region static readonly + + internal static readonly string LOADING_TEMLATE = "<div id='loading-mask'></div><div id='loading'><div class='loading-indicator'><img align='absmiddle' src='#LOADING_IMAGE_SRC#'/></div></div>"; + + internal static readonly string LOADING_IMAGE_PATH = "/res/images/loading_32.gif"; + + #endregion + + #region Properties + + + /// <summary> + /// 自定义的加载图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义的加载图片")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string ImageUrl + { + get + { + object obj = FState["ImageUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ImageUrl"] = value; + } + } + + + + ///// <summary> + ///// 回发时是否显示 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("回发时是否显示")] + //public bool ShowOnPostBack + //{ + // get + // { + // object obj = FState["ShowOnPostBack"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["ShowOnPostBack"] = value; + // } + //} + + + ///// <summary> + ///// 是否启用淡出效果 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用淡出效果")] + //public bool EnableFadeOut + //{ + // get + // { + // object obj = FState["EnableFadeOut"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableFadeOut"] = value; + // } + //} + + + #endregion + + #region RenderBeginTag/RenderEndTag + + /// <summary> + /// 渲染控件的开始标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + //base.RenderBeginTag(writer); + + if (!Page.IsPostBack || (Page.IsPostBack && ShowOnPostBack)) + { + string content = LOADING_TEMLATE; + + string imageUrl = String.Empty; + if (String.IsNullOrEmpty(ImageUrl)) + { + imageUrl = ResolveUrl(GlobalConfig.GetJSBasePath() + LOADING_IMAGE_PATH); //ResourceHelper.GetWebResourceUrl(Page, LOADING_IMAGE_NAME); + } + else + { + imageUrl = ResolveUrl(ImageUrl); + } + + content = content.Replace("#LOADING_IMAGE_SRC#", imageUrl); + + writer.Write(content); + + } + + + } + + /// <summary> + /// 渲染控件的结束标签(不生成结束标签) + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + + //base.RenderEndTag(writer); + } + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (!Page.IsPostBack || (Page.IsPostBack && ShowOnPostBack)) + { + string jsContent = String.Empty; + + jsContent = String.Format("F.util.removePageLoading();"); //, EnableFadeOut.ToString().ToLower()); + + AddStartupAbsoluteScript(jsContent, 50); + } + } + + #endregion + } +} diff --git a/FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs b/FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs new file mode 100644 index 0000000..f3e144f --- /dev/null +++ b/FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs @@ -0,0 +1,58 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: CustomEventArgs.cs + * CreatedOn: 2014-01-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 自定义事件参数 + /// </summary> + public class CustomEventArgs : EventArgs + { + private string _eventArgument; + + /// <summary> + /// 事件参数 + /// </summary> + public string EventArgument + { + get { return _eventArgument; } + set { _eventArgument = value; } + } + + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public CustomEventArgs(string eventArgument) + { + _eventArgument = eventArgument; + } + + } +} diff --git a/FineUI/WebControls/ControlBase.PageManager/PageManager.cs b/FineUI/WebControls/ControlBase.PageManager/PageManager.cs index 707d3fa..086f5c1 100644 --- a/FineUI/WebControls/ControlBase.PageManager/PageManager.cs +++ b/FineUI/WebControls/ControlBase.PageManager/PageManager.cs @@ -1,1157 +1,1414 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: PageManager.cs - * CreatedOn: 2008-07-31 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI; -using System.ComponentModel; -using System.Drawing; -using System.Web.UI.WebControls; -using System.Web; - -namespace FineUI -{ - /// <summary> - /// 页面配置管理器(每个页面必须包含一个 PageManager 控件) - /// </summary> - [Designer("FineUI.Design.PageManagerDesigner, FineUI.Design")] - [ToolboxData("<{0}:PageManager runat=\"server\"></{0}:PageManager>")] - [ToolboxBitmap(typeof(PageManager), "toolbox.PageManager.bmp")] - [Description("页面配置管理器(每个页面必须包含一个 PageManager 控件)")] - [ParseChildren(true)] - [PersistChildren(false)] - public class PageManager : ControlBase - { - #region Unsupported Properties - - ///// <summary> - ///// 不支持此属性 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public override bool WrapperDisplayInline - //{ - // get - // { - // return false; - // } - //} - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool Enabled - { - get - { - return true; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool Hidden - { - get - { - return false; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool Visible - { - get - { - return true; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override HideMode HideMode - { - get - { - return HideMode.Display; - } - } - - #endregion - - #region Properties - - #region old code - - - // v1.2.9版本后不需要此属性,实现为JS的静态方法 - ///// <summary> - ///// 向页面注册监视页面中表单内容改变的脚本 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("向页面注册监视页面中表单内容改变的脚本")] - //public bool RegisterPageStateChangedScript - //{ - // get - // { - // object obj = BoxState["RegisterPageStateChangedScript"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["RegisterPageStateChangedScript"] = value; - // } - //} - - - // 内联样式表和Javascipt - // 这两个没啥效果,干脆先去掉 - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("启用内联的样式表和脚本引擎")] - //public bool EnableInlineStyleJavascript - //{ - // get - // { - // object obj = BoxState["EnableInlineStyleJavascript"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["EnableInlineStyleJavascript"] = value; - // } - //} - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("使用父页面的样式表和脚本引擎")] - //public bool ApplyParentStyleJavascript - //{ - // get - // { - // object obj = BoxState["ApplyParentStyleJavascript"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["ApplyParentStyleJavascript"] = value; - // } - //} - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("启用设计时样式")] - //public bool EnableDesignTimeStyle - //{ - // get - // { - // object obj = BoxState["EnableDesignTimeStyle"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["EnableDesignTimeStyle"] = value; - // } - //} - - #endregion - - /// <summary> - /// 自动调整此容器的宽度和高度,以填充整个页面 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("自动调整此容器的宽度和高度,以填充整个页面")] - public string AutoSizePanelID - { - get - { - object obj = XState["AutoSizePanelID"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["AutoSizePanelID"] = value; - } - } - - /// <summary> - /// 是否隐藏滚动条 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否隐藏滚动条")] - [Obsolete("请使用 HideScrollbars 属性")] - public bool HideScrollbar - { - get - { - return HideScrollbars; - } - set - { - HideScrollbars = value; - } - } - - - /// <summary> - /// 是否隐藏滚动条 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否隐藏滚动条")] - public bool HideScrollbars - { - get - { - object obj = XState["HideScrollbars"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["HideScrollbars"] = value; - } - } - - ///// <summary> - ///// 启用Asp.Net提交按钮(type=submit)的AJAX功能 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("启用Asp.Net提交按钮(type=submit)的AJAX功能")] - //public bool EnableAspnetSubmitButtonAjax - //{ - // get - // { - // object obj = XState["EnableAspnetSubmitButtonAjax"]; - // return obj == null ? true : (bool)obj; - // } - // set - // { - // XState["EnableAspnetSubmitButtonAjax"] = value; - // } - //} - - - /// <summary> - /// 每次页面回发后总是执行onReady脚本(包括Ajax局部回发) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("每次页面回发后总是执行onReady脚本(包括Ajax局部回发)")] - public bool ExecuteOnReadyWhenPostBack - { - get - { - object obj = XState["ExecuteOnReadyWhenPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ExecuteOnReadyWhenPostBack"] = value; - } - } - - - /// <summary> - /// 是否启用页面加载标示 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否启用页面加载标示")] - public bool EnablePageLoading - { - get - { - object obj = XState["EnablePageLoading"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnablePageLoading"] = value; - } - } - - - /// <summary> - /// 需要在AJAX回发时更新的Asp.net控件列表(逗号分隔) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("需要在AJAX回发时更新的Asp.net控件列表(逗号分隔)")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] AjaxAspnetControls - { - get - { - object obj = XState["AjaxAspnetControls"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["AjaxAspnetControls"] = value; - } - } - - - private List<string> _ajaxGridClientIDs = new List<string>(); - - /// <summary> - /// 本次AJAX请求过程中需要更新TemplateField的表格 - /// </summary> - internal List<string> AjaxGridClientIDs - { - get - { - return _ajaxGridClientIDs; - } - set - { - _ajaxGridClientIDs = value; - } - } - - - internal void AddAjaxGridClientID(string clientID) - { - if (!_ajaxGridClientIDs.Contains(clientID)) - { - _ajaxGridClientIDs.Add(clientID); - } - } - - private List<string> _ajaxGridReloadedClientIDs = new List<string>(); - - /// <summary> - /// 本次AJAX请求过程中重新加载的表格 - /// </summary> - internal List<string> AjaxGridReloadedClientIDs - { - get - { - return _ajaxGridReloadedClientIDs; - } - set - { - _ajaxGridReloadedClientIDs = value; - } - } - - internal void AddAjaxGridReloadedClientID(string clientID) - { - if (!_ajaxGridReloadedClientIDs.Contains(clientID)) - { - _ajaxGridReloadedClientIDs.Add(clientID); - } - } - - - #endregion - - #region 配置参数 - - /// <summary> - /// 样式 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Theme.Blue)] - [Description("样式")] - public Theme Theme - { - get - { - object obj = XState["Theme"]; - if (obj == null) - { - if (DesignMode) - { - return Theme.Blue; - } - else - { - return GlobalConfig.GetTheme(); - } - } - return (Theme)obj; - } - set - { - XState["Theme"] = value; - } - } - - /// <summary> - /// 自定义样式的根路径 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("自定义样式的根路径")] - public string CustomThemeBasePath - { - get - { - object obj = XState["CustomThemeBasePath"]; - if (obj == null) - { - if (DesignMode) - { - return ""; - } - else - { - return GlobalConfig.GetCustomThemeBasePath(); - } - } - return obj.ToString(); - } - set - { - XState["CustomThemeBasePath"] = value; - } - } - - - /// <summary> - /// 自定义样式的名称 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("自定义样式的名称")] - public string CustomTheme - { - get - { - object obj = XState["CustomTheme"]; - if (obj == null) - { - if (DesignMode) - { - return ""; - } - else - { - return GlobalConfig.GetCustomTheme(); - } - } - return obj.ToString(); - } - set - { - XState["CustomTheme"] = value; - } - } - - - /// <summary> - /// 语言 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Language.ZH_CN)] - [Description("语言")] - public Language Language - { - get - { - object obj = XState["Language"]; - if (obj == null) - { - if (DesignMode) - { - return Language.ZH_CN; - } - else - { - return GlobalConfig.GetLanguage(); - } - } - return (Language)obj; - } - set - { - XState["Language"] = value; - } - } - - - ///// <summary> - ///// 是否启用大字体 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否启用大字体")] - //public bool EnableBigFont - //{ - // get - // { - // object obj = XState["EnableBigFont"]; - // if (obj == null) - // { - // if (DesignMode) - // { - // return false; - // } - // else - // { - // return GlobalConfig.GetEnableBigFont(); - // } - // } - // return (bool)obj; - // } - // set - // { - // XState["EnableBigFont"] = value; - // } - //} - - - /// <summary> - /// 是否启用Ajax - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否启用Ajax")] - public override bool EnableAjax - { - get - { - object obj = XState["EnableAjax"]; - if (obj == null) - { - if (DesignMode) - { - return true; - } - else - { - return GlobalConfig.GetEnableAjax(); - } - } - return (bool)obj; - } - set - { - XState["EnableAjax"] = value; - } - } - - - - /// <summary> - /// 是否启用Ajax正在加载提示 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否启用Ajax正在加载提示")] - public new bool EnableAjaxLoading - { - get - { - object obj = XState["EnableAjaxLoading"]; - if (obj == null) - { - if (DesignMode) - { - return true; - } - else - { - return GlobalConfig.GetEnableAjaxLoading(); - } - } - return (bool)obj; - } - set - { - XState["EnableAjaxLoading"] = value; - } - } - - - /// <summary> - /// Ajax正在加载提示的类型 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(AjaxLoadingType.Default)] - [Description("Ajax正在加载提示的类型")] - public new AjaxLoadingType AjaxLoadingType - { - get - { - object obj = XState["AjaxLoadingType"]; - if (obj == null) - { - if (DesignMode) - { - return AjaxLoadingType.Default; - } - else - { - return GlobalConfig.GetAjaxLoadingType(); - } - } - return (AjaxLoadingType)obj; - } - set - { - XState["AjaxLoadingType"] = value; - } - } - - - /// <summary> - /// Ajax超时时间(单位:秒,默认:60秒) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT)] - [Description("Ajax超时时间(单位:秒,默认:60秒)")] - public int AjaxTimeout - { - get - { - object obj = XState["AjaxTimeout"]; - if (obj == null) - { - if (DesignMode) - { - return (int)ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT; - } - else - { - return (int)GlobalConfig.GetAjaxTimeout(); - } - } - return (int)obj; - } - set - { - XState["AjaxTimeout"] = value; - } - } - - - /// <summary> - /// 是否启用XState压缩(默认为true) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否启用XState压缩(默认为true)")] - public new bool EnableXStateCompress - { - get - { - object obj = XState["EnableXStateCompress"]; - if (obj == null) - { - if (DesignMode) - { - return true; - } - else - { - return GlobalConfig.GetEnableXStateCompress(); - } - } - return (bool)obj; - } - set - { - XState["EnableXStateCompress"] = value; - } - } - - #endregion - - #region Form Settings - - /// <summary> - /// 表单中消息的位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(MessageTarget), ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT_STRING)] - [Description("表单中提示消息的位置")] - public MessageTarget FormMessageTarget - { - get - { - object obj = XState["FormMessageTarget"]; - if (obj == null) - { - if (DesignMode) - { - return ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT; - } - else - { - return GlobalConfig.GetFormMessageTarget(); - } - } - return (MessageTarget)obj; - } - set - { - XState["FormMessageTarget"] = value; - } - } - - - /// <summary> - /// 表单中标签的位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(LabelAlign), ConfigPropertyValue.FORM_LABELALIGN_DEFAULT_STRING)] - [Description("表单中标签的位置")] - public LabelAlign FormLabelAlign - { - get - { - object obj = XState["FormLabelAlign"]; - if (obj == null) - { - if (DesignMode) - { - return ConfigPropertyValue.FORM_LABELALIGN_DEFAULT; - } - else - { - return GlobalConfig.GetFormLabelAlign(); - } - } - return (LabelAlign)obj; - } - set - { - XState["FormLabelAlign"] = value; - } - } - - /// <summary> - /// 表单中右侧的空白宽度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT_STRING)] - [Description("表单中右侧的空白宽度")] - public Unit FormOffsetRight - { - get - { - object obj = XState["FormOffsetRight"]; - if (obj == null) - { - if (DesignMode) - { - return (Unit)ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT; - } - else - { - return (Unit)GlobalConfig.GetFormOffsetRight(); - } - } - return (Unit)obj; - } - set - { - XState["FormOffsetRight"] = value; - } - } - - - /// <summary> - /// 表单中字段标签的宽度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT_STRING)] - [Description("表单中标签的宽度")] - public Unit FormLabelWidth - { - get - { - object obj = XState["FormLabelWidth"]; - if (obj == null) - { - if (DesignMode) - { - return (Unit)ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT; - } - else - { - return (Unit)GlobalConfig.GetFormLabelWidth(); - } - } - return (Unit)obj; - } - set - { - XState["FormLabelWidth"] = value; - } - } - - /// <summary> - /// 表单中字段与标签的分隔符 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(String), ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] - [Description("表单中字段与标签的分隔符")] - public string FormLabelSeparator - { - get - { - object obj = XState["FormLabelSeparator"]; - if (obj == null) - { - if (DesignMode) - { - return ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT; - } - else - { - return GlobalConfig.GetFormLabelSeparator(); - } - } - return (String)obj; - } - set - { - XState["FormLabelSeparator"] = value; - } - } - - #endregion - - #region PageLoadingControlExist - - /// <summary> - /// PageLoading控件是否存在页面 - /// </summary> - internal bool PageLoadingControlExist - { - get - { - Control loading = ControlUtil.FindControl(Page, typeof(PageLoading)); - return loading != null; - } - } - - #endregion - - #region RenderBeginTag/RenderEndTag - - /// <summary> - /// 渲染控件的开始标签 - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderBeginTag(HtmlTextWriter writer) - { - if (!PageLoadingControlExist) - { - if (EnablePageLoading) - { - string content = PageLoading.LOADING_TEMLATE; - content = content.Replace("#LOADING_IMAGE_SRC#", ResolveUrl(GlobalConfig.GetExtjsBasePath() + PageLoading.LOADING_IMAGE_PATH)); // ResourceHelper.GetWebResourceUrlResAxd(Page, PageLoading.LOADING_IMAGE_NAME)); - - writer.Write(content); - } - } - - - base.RenderBeginTag(writer); - } - - /// <summary> - /// 渲染控件的结束标签 - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderEndTag(HtmlTextWriter writer) - { - base.RenderEndTag(writer); - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - // 不渲染 - RenderWrapperNode = false; - - // 这个是必须的,2009-08-04 - // 因为每个页面都会有 PageManager 控件,每个页面要至少调用 GetPostBackEventReference 一次,以在页面产生 __doPostBack 函数。 - Page.ClientScript.GetPostBackEventReference(this, ""); - - // Move it to ResourceManager.cs - // 为页面的 Form 添加 autocomplete="off" 属性 - // 参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 - // Page.Form.Attributes["autocomplete"] = "off"; - - #region HideScrollbars - - if (HideScrollbars) - { - //if (Page.Request.UserAgent.ToLower().Contains("msie")) - //{ - // //Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "noscroll", String.Format("window.document.body.scroll='no';"), true); - // AddStartupAbsoluteScript("window.document.body.scroll='no';"); - //} - //else - //{ - // //Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "noscroll", String.Format("window.document.body.style.overflow='hidden';"), true); - // AddStartupAbsoluteScript("window.document.body.style.overflow='hidden';"); - //} - AddStartupAbsoluteScript("X.util.hideScrollbar();"); - } - - #endregion - - #region PageLoading - - - - if (!PageLoadingControlExist) - { - string jsContent = String.Empty; - - if (EnablePageLoading) - { - jsContent += "X.util.removePageLoading(false);"; - } - - AddStartupAbsoluteScript(jsContent); - } - - - #endregion - - //#region EnableAjax - - //if (!EnableAjax) - //{ - // AddStartupAbsoluteScript("X.global_disable_ajax=true;"); - //} - - //#endregion - - #region AutoSizePanelID - - if (!String.IsNullOrEmpty(AutoSizePanelID)) - { - PanelBase autosizePanel = ControlUtil.FindControl(Page.Form, AutoSizePanelID) as PanelBase; - - if (autosizePanel != null) - { - #region oldcode - //string resizePanelScript = String.Empty; - - //resizePanelScript += String.Format("{0}_resize_outerpanel=function(){{var panel=Ext.getCmp('{1}');panel.setSize(Ext.getBody().getSize());panel.doLayout();}};", ClientJavascriptID, panel.ClientID); - //resizePanelScript += String.Format("{0}_resize_outerpanel();", ClientJavascriptID); - //resizePanelScript += String.Format("if(Ext.isIE){{X.{0}_resize_outerpanel.defer(60);}}", ClientJavascriptID); - //resizePanelScript += String.Format("Ext.EventManager.onWindowResize(function(){{X.{0}_resize_outerpanel();}},box);", ClientJavascriptID); - - //AddAbsoluteStartupScript(resizePanelScript); - - // X._3=new Ext.FormViewport({renderTo:"RegionPanel1_wrapper",id:"RegionPanel1",layout:"border",items:[X._1,X._2],bodyStyle:"",border:false,animCollapse:false}); - - #endregion - - // 子节点不向页面输出HTML,此PageManager向页面输出HTML - autosizePanel.RenderWrapperNode = false; - RenderWrapperNode = true; - - OB.AddProperty("layout", "fit"); - OB.AddProperty("border", false); - OB.AddProperty("items", String.Format("{0}", autosizePanel.XID), true); - - string jsContent = String.Format("var {0}=Ext.create('Ext.ux.FormViewport',{1});", XID, OB.ToString()); - - AddStartupAbsoluteScript(jsContent); - } - } - - #endregion - - //if (EnableBigFont) - //{ - // AddStartupAbsoluteScript("Ext.getBody().addClass('bigfont');"); - //} - - #region oldcode - - // Move to X.util.init - // Asp.Net Buttons(type="submit") - // AddStartupAbsoluteScript("X.util.makeAspnetSubmitButtonAjax();"); - - #endregion - } - - #region old code - - //private PanelBase GetFirstPanelControl(ControlCollection controls) - //{ - // foreach (Control c in controls) - // { - // if (c is PanelBase) - // { - // return c as PanelBase; - // } - // else if (c.Controls != null && c.Controls.Count > 0) - // { - // PanelBase findPanel = GetFirstPanelControl(c.Controls); - // if (findPanel != null) - // { - // return findPanel; - // } - // } - // } - - // return null; - //} - - #endregion - - #endregion - - #region Instance - - //// 这是一个严重的错误,不应该将_manager保存为全局变量,而是作为随页面存在的 - //private static PageManager _manager = null; - /// <summary> - /// PageManager在当前页面的实例 - /// </summary> - public static PageManager Instance - { - get - { - if (HttpContext.Current != null) - { - if (HttpContext.Current.Items["PageManagerInstanceCached"] == null) - { - HttpContext.Current.Items["PageManagerInstanceCached"] = true; - HttpContext.Current.Items["PageManagerInstance"] = ControlUtil.FindControl(typeof(FineUI.PageManager)) as PageManager; - } - return HttpContext.Current.Items["PageManagerInstance"] as PageManager; - } - // It's design time. - return null; - } - } - - ///// <summary> - ///// 获取PageManager实例 - ///// </summary> - ///// <param name="site"></param> - ///// <returns></returns> - //public static PageManager GetInstance(ISite site) - //{ - // foreach (System.ComponentModel.IComponent c in site.Container.Components) - // { - // if (c is FineUI.PageManager) - // { - // return c as FineUI.PageManager; - // } - // } - // return null; - //} - - //public static PageManager GetInstance(Page page) - //{ - // if (page == null) - // { - // page = HttpContext.Current.CurrentHandler as Page; - // } - - // PageManager pageManager = ControlUtil.FindControl(page, typeof(FineUI.PageManager)) as PageManager; - // if (pageManager == null) - // { - // throw new Exception("每个页面必须包含一个PageManager控件。"); - // } - - // return pageManager; - //} - - #endregion - - #region BeforeAjaxPostBackScript - - private List<string> beforeAjaxPostBackScriptKeys = new List<string>(); - - private string beforeAjaxPostBackScript = String.Empty; - - internal string BeforeAjaxPostBackScript - { - get { return beforeAjaxPostBackScript; } - set { beforeAjaxPostBackScript = value; } - } - - /// <summary> - /// Used by FCKeditor, Add script before ajax postback. - /// </summary> - /// <param name="key"></param> - /// <param name="script"></param> - public void RegisterOnAjaxPostBack(string key, string script) - { - if (!beforeAjaxPostBackScriptKeys.Contains(key)) - { - beforeAjaxPostBackScriptKeys.Add(key); - BeforeAjaxPostBackScript += script; - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: PageManager.cs + * CreatedOn: 2008-07-31 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Web.UI.WebControls; +using System.Web; +using System.Web.UI.Design; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// 页面配置管理器(每个页面必须包含一个 PageManager 控件) + /// </summary> + [Designer("FineUI.Design.PageManagerDesigner, FineUI.Design")] + [ToolboxData("<{0}:PageManager runat=\"server\"></{0}:PageManager>")] + [ToolboxBitmap(typeof(PageManager), "toolbox.PageManager.bmp")] + [Description("页面配置管理器(每个页面必须包含一个 PageManager 控件)")] + [ParseChildren(true)] + [PersistChildren(false)] + public class PageManager : ControlBase, IPostBackEventHandler + { + #region static + + internal static readonly string PAGELOADING_TEMLATE = "<div id='loading-mask'></div><div id='loading'><div class='loading-indicator'><img align='absmiddle' src='#LOADING_IMAGE_SRC#'/></div></div>"; + + internal static readonly string PAGELOADING_IMAGE_PATH = "/res/images/loading_32.gif"; + + + #endregion + + #region Unsupported Properties + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool WrapperDisplayInline + //{ + // get + // { + // return false; + // } + //} + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Enabled + { + get + { + return true; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Hidden + { + get + { + return false; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Visible + { + get + { + return true; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override HideMode HideMode + { + get + { + return HideMode.Display; + } + } + + #endregion + + #region Properties + + /// <summary> + /// 自定义页面加载图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义页面加载图片")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string PageLoadingImageUrl + { + get + { + object obj = FState["PageLoadingImageUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["PageLoadingImageUrl"] = value; + } + } + + #region old code + + + // v1.2.9版本后不需要此属性,实现为JS的静态方法 + ///// <summary> + ///// 向页面注册监视页面中表单内容改变的脚本 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("向页面注册监视页面中表单内容改变的脚本")] + //public bool RegisterPageStateChangedScript + //{ + // get + // { + // object obj = BoxState["RegisterPageStateChangedScript"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["RegisterPageStateChangedScript"] = value; + // } + //} + + + // 内联样式表和Javascipt + // 这两个没啥效果,干脆先去掉 + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用内联的样式表和脚本引擎")] + //public bool EnableInlineStyleJavascript + //{ + // get + // { + // object obj = BoxState["EnableInlineStyleJavascript"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableInlineStyleJavascript"] = value; + // } + //} + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("使用父页面的样式表和脚本引擎")] + //public bool ApplyParentStyleJavascript + //{ + // get + // { + // object obj = BoxState["ApplyParentStyleJavascript"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["ApplyParentStyleJavascript"] = value; + // } + //} + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用设计时样式")] + //public bool EnableDesignTimeStyle + //{ + // get + // { + // object obj = BoxState["EnableDesignTimeStyle"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableDesignTimeStyle"] = value; + // } + //} + + #endregion + + /// <summary> + /// 自动调整此容器的宽度和高度,以填充整个页面 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自动调整此容器的宽度和高度,以填充整个页面")] + public string AutoSizePanelID + { + get + { + object obj = FState["AutoSizePanelID"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AutoSizePanelID"] = value; + } + } + + ///// <summary> + ///// 是否隐藏滚动条 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否隐藏滚动条")] + //[Obsolete("请使用 HideScrollbars 属性")] + //public bool HideScrollbar + //{ + // get + // { + // return HideScrollbars; + // } + // set + // { + // HideScrollbars = value; + // } + //} + + + /// <summary> + /// 是否隐藏滚动条 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否隐藏滚动条")] + public bool HideScrollbars + { + get + { + object obj = FState["HideScrollbars"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["HideScrollbars"] = value; + } + } + + ///// <summary> + ///// 启用Asp.Net提交按钮(type=submit)的AJAX功能 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("启用Asp.Net提交按钮(type=submit)的AJAX功能")] + //public bool EnableAspnetSubmitButtonAjax + //{ + // get + // { + // object obj = FState["EnableAspnetSubmitButtonAjax"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["EnableAspnetSubmitButtonAjax"] = value; + // } + //} + + + /// <summary> + /// 每次页面回发后总是执行onReady脚本(包括Ajax局部回发) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("每次页面回发后总是执行onReady脚本(包括Ajax局部回发)")] + public bool ExecuteOnReadyWhenPostBack + { + get + { + object obj = FState["ExecuteOnReadyWhenPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ExecuteOnReadyWhenPostBack"] = value; + } + } + + + /// <summary> + /// 是否启用页面加载标示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用页面加载标示")] + public bool EnablePageLoading + { + get + { + object obj = FState["EnablePageLoading"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePageLoading"] = value; + } + } + + + /// <summary> + /// 需要在AJAX回发时更新的Asp.net控件列表(逗号分隔) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("需要在AJAX回发时更新的Asp.net控件列表(逗号分隔)")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] AjaxAspnetControls + { + get + { + object obj = FState["AjaxAspnetControls"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["AjaxAspnetControls"] = value; + } + } + + + private List<string> _ajaxGridClientIDs = new List<string>(); + + /// <summary> + /// 本次AJAX请求过程中需要更新TemplateField的表格 + /// </summary> + internal List<string> AjaxGridClientIDs + { + get + { + return _ajaxGridClientIDs; + } + set + { + _ajaxGridClientIDs = value; + } + } + + + internal void AddAjaxGridClientID(string clientID) + { + if (!_ajaxGridClientIDs.Contains(clientID)) + { + _ajaxGridClientIDs.Add(clientID); + } + } + + private List<string> _ajaxGridReloadedClientIDs = new List<string>(); + + /// <summary> + /// 本次AJAX请求过程中重新加载的表格 + /// </summary> + internal List<string> AjaxGridReloadedClientIDs + { + get + { + return _ajaxGridReloadedClientIDs; + } + set + { + _ajaxGridReloadedClientIDs = value; + } + } + + internal void AddAjaxGridReloadedClientID(string clientID) + { + if (!_ajaxGridReloadedClientIDs.Contains(clientID)) + { + _ajaxGridReloadedClientIDs.Add(clientID); + } + } + + + #endregion + + #region 配置参数 + + /// <summary> + /// 是否启用表单改变确认对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ConfigPropertyValue.ENABLE_FORMCHANGECONFIRM_DEFAULT)] + [Description("是否启用表单改变确认对话框")] + public bool EnableFormChangeConfirm + { + get + { + object obj = FState["EnableFormChangeConfirm"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.ENABLE_FORMCHANGECONFIRM_DEFAULT; + } + else + { + return GlobalConfig.GetEnableFormChangeConfirm(); + } + } + return (bool)obj; + } + set + { + FState["EnableFormChangeConfirm"] = value; + } + } + + + /// <summary> + /// 样式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Theme.Neptune)] + [Description("样式")] + public Theme Theme + { + get + { + object obj = FState["Theme"]; + if (obj == null) + { + if (DesignMode) + { + return Theme.Neptune; + } + else + { + return GlobalConfig.GetTheme(); + } + } + return (Theme)obj; + } + set + { + FState["Theme"] = value; + } + } + + /// <summary> + /// 自定义样式的根路径 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义样式的根路径")] + public string CustomThemeBasePath + { + get + { + object obj = FState["CustomThemeBasePath"]; + if (obj == null) + { + if (DesignMode) + { + return ""; + } + else + { + return GlobalConfig.GetCustomThemeBasePath(); + } + } + return obj.ToString(); + } + set + { + FState["CustomThemeBasePath"] = value; + } + } + + + /// <summary> + /// 自定义样式的名称 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义样式的名称")] + public string CustomTheme + { + get + { + object obj = FState["CustomTheme"]; + if (obj == null) + { + if (DesignMode) + { + return ""; + } + else + { + return GlobalConfig.GetCustomTheme(); + } + } + return obj.ToString(); + } + set + { + FState["CustomTheme"] = value; + } + } + + + /// <summary> + /// 语言 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Language.ZH_CN)] + [Description("语言")] + public Language Language + { + get + { + object obj = FState["Language"]; + if (obj == null) + { + if (DesignMode) + { + return Language.ZH_CN; + } + else + { + return GlobalConfig.GetLanguage(); + } + } + return (Language)obj; + } + set + { + FState["Language"] = value; + } + } + + + ///// <summary> + ///// 是否启用大字体 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用大字体")] + //public bool EnableBigFont + //{ + // get + // { + // object obj = FState["EnableBigFont"]; + // if (obj == null) + // { + // if (DesignMode) + // { + // return false; + // } + // else + // { + // return GlobalConfig.GetEnableBigFont(); + // } + // } + // return (bool)obj; + // } + // set + // { + // FState["EnableBigFont"] = value; + // } + //} + + + /// <summary> + /// 是否启用Ajax + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用Ajax")] + public override bool EnableAjax + { + get + { + object obj = FState["EnableAjax"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return GlobalConfig.GetEnableAjax(); + } + } + return (bool)obj; + } + set + { + FState["EnableAjax"] = value; + } + } + + + + /// <summary> + /// 是否启用Ajax正在加载提示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用Ajax正在加载提示")] + public new bool EnableAjaxLoading + { + get + { + object obj = FState["EnableAjaxLoading"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return GlobalConfig.GetEnableAjaxLoading(); + } + } + return (bool)obj; + } + set + { + FState["EnableAjaxLoading"] = value; + } + } + + + /// <summary> + /// Ajax正在加载提示的类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(AjaxLoadingType.Default)] + [Description("Ajax正在加载提示的类型")] + public new AjaxLoadingType AjaxLoadingType + { + get + { + object obj = FState["AjaxLoadingType"]; + if (obj == null) + { + if (DesignMode) + { + return AjaxLoadingType.Default; + } + else + { + return GlobalConfig.GetAjaxLoadingType(); + } + } + return (AjaxLoadingType)obj; + } + set + { + FState["AjaxLoadingType"] = value; + } + } + + + /// <summary> + /// Ajax超时时间(单位:秒,默认:60秒) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT)] + [Description("Ajax超时时间(单位:秒,默认:60秒)")] + public int AjaxTimeout + { + get + { + object obj = FState["AjaxTimeout"]; + if (obj == null) + { + if (DesignMode) + { + return (int)ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT; + } + else + { + return (int)GlobalConfig.GetAjaxTimeout(); + } + } + return (int)obj; + } + set + { + FState["AjaxTimeout"] = value; + } + } + + + /// <summary> + /// 是否启用FState压缩(默认为false) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用FState压缩(默认为false)")] + public new bool EnableFStateCompress + { + get + { + object obj = FState["EnableFStateCompress"]; + if (obj == null) + { + if (DesignMode) + { + return false; + } + else + { + return GlobalConfig.GetEnableFStateCompress(); + } + } + return (bool)obj; + } + set + { + FState["EnableFStateCompress"] = value; + } + } + + + /// <summary> + /// 是否向页面输出IE=edge标识 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否向页面输出IE=edge标识")] + public bool IEEdge + { + get + { + object obj = FState["IEEdge"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return GlobalConfig.GetIEEdge(); + } + } + return (bool)obj; + } + set + { + FState["IEEdge"] = value; + } + } + + #endregion + + #region ValidateForms/ValidateTarget/ValidateMessageBox + + + /// <summary> + /// 需要验证的表单名称列表(逗号分隔),需配合CustomEvent使用 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("需要验证的表单名称列表(逗号分隔),需配合CustomEvent使用")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + /// <summary> + /// 验证失败时提示对话框弹出位置,需配合CustomEvent使用 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置,需配合CustomEvent使用")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + + /// <summary> + /// 验证失败时是否出现提示对话框,需配合CustomEvent使用 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框,需配合CustomEvent使用")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + #endregion + + #region Form Settings + + /// <summary> + /// 表单中消息的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(MessageTarget), ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT_STRING)] + [Description("表单中提示消息的位置")] + public MessageTarget FormMessageTarget + { + get + { + object obj = FState["FormMessageTarget"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT; + } + else + { + return GlobalConfig.GetFormMessageTarget(); + } + } + return (MessageTarget)obj; + } + set + { + FState["FormMessageTarget"] = value; + } + } + + + /// <summary> + /// 表单中标签的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(LabelAlign), ConfigPropertyValue.FORM_LABELALIGN_DEFAULT_STRING)] + [Description("表单中标签的位置")] + public LabelAlign FormLabelAlign + { + get + { + object obj = FState["FormLabelAlign"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELALIGN_DEFAULT; + } + else + { + return GlobalConfig.GetFormLabelAlign(); + } + } + return (LabelAlign)obj; + } + set + { + FState["FormLabelAlign"] = value; + } + } + + /// <summary> + /// 表单中右侧的空白宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT_STRING)] + [Description("表单中右侧的空白宽度")] + public Unit FormOffsetRight + { + get + { + object obj = FState["FormOffsetRight"]; + if (obj == null) + { + if (DesignMode) + { + return (Unit)ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT; + } + else + { + return (Unit)GlobalConfig.GetFormOffsetRight(); + } + } + return (Unit)obj; + } + set + { + FState["FormOffsetRight"] = value; + } + } + + + /// <summary> + /// 表单中字段标签的宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT_STRING)] + [Description("表单中标签的宽度")] + public Unit FormLabelWidth + { + get + { + object obj = FState["FormLabelWidth"]; + if (obj == null) + { + if (DesignMode) + { + return (Unit)ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT; + } + else + { + return (Unit)GlobalConfig.GetFormLabelWidth(); + } + } + return (Unit)obj; + } + set + { + FState["FormLabelWidth"] = value; + } + } + + /// <summary> + /// 表单中字段与标签的分隔符 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(String), ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] + [Description("表单中字段与标签的分隔符")] + public string FormLabelSeparator + { + get + { + object obj = FState["FormLabelSeparator"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT; + } + else + { + return GlobalConfig.GetFormLabelSeparator(); + } + } + return (String)obj; + } + set + { + FState["FormLabelSeparator"] = value; + } + } + + #endregion + + #region oldcode + + ///// <summary> + ///// PageLoading控件是否存在页面 + ///// </summary> + //internal bool PageLoadingControlExist + //{ + // get + // { + // Control loading = ControlUtil.FindControl(Page, typeof(PageLoading)); + // return loading != null; + // } + //} + + #endregion + + #region RenderBeginTag/RenderEndTag + + /// <summary> + /// 渲染控件的开始标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + if (EnablePageLoading) + { + //string content = PAGELOADING_TEMLATE; + //content = content.Replace("#LOADING_IMAGE_SRC#", ResolveUrl(GlobalConfig.GetJSBasePath() + PAGELOADING_IMAGE_PATH)); // ResourceHelper.GetWebResourceUrlResAxd(Page, PageLoading.LOADING_IMAGE_NAME)); + + string content = PAGELOADING_TEMLATE; + + string imageUrl = String.Empty; + if (!String.IsNullOrEmpty(PageLoadingImageUrl)) + { + imageUrl = ResolveUrl(PageLoadingImageUrl); + } + else + { + imageUrl = ResolveUrl(GlobalConfig.GetJSBasePath() + PAGELOADING_IMAGE_PATH); //ResourceHelper.GetWebResourceUrl(Page, LOADING_IMAGE_NAME); + } + + content = content.Replace("#LOADING_IMAGE_SRC#", imageUrl); + + writer.Write(content); + } + + + + base.RenderBeginTag(writer); + } + + /// <summary> + /// 渲染控件的结束标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + base.RenderEndTag(writer); + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + // 不渲染 + RenderWrapperNode = false; + + // 这个是必须的,2009-08-04 + // 因为每个页面都会有 PageManager 控件,每个页面要至少调用 GetPostBackEventReference 一次,以在页面产生 __doPostBack 函数。 + Page.ClientScript.GetPostBackEventReference(this, ""); + + // Move it to ResourceManager.cs + // 为页面的 Form 添加 autocomplete="off" 属性 + // 参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 + // Page.Form.Attributes["autocomplete"] = "off"; + + #region HideScrollbars + + if (HideScrollbars) + { + //if (Page.Request.UserAgent.ToLower().Contains("msie")) + //{ + // //Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "noscroll", String.Format("window.document.body.scroll='no';"), true); + // AddStartupAbsoluteScript("window.document.body.scroll='no';"); + //} + //else + //{ + // //Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "noscroll", String.Format("window.document.body.style.overflow='hidden';"), true); + // AddStartupAbsoluteScript("window.document.body.style.overflow='hidden';"); + //} + AddStartupAbsoluteScript("F.util.hideScrollbar();"); + } + + #endregion + + #region oldcode + + //if (!PageLoadingControlExist) + //{ + // string jsContent = String.Empty; + + // if (EnablePageLoading) + // { + // jsContent += "F.util.removePageLoading(false);"; + // } + + // AddStartupAbsoluteScript(jsContent); + //} + + + #endregion + + //#region EnableAjax + + //if (!EnableAjax) + //{ + // AddStartupAbsoluteScript("F.global_disable_ajax=true;"); + //} + + //#endregion + + #region AutoSizePanelID + + if (!String.IsNullOrEmpty(AutoSizePanelID)) + { + PanelBase autosizePanel = ControlUtil.FindControl(Page.Form, AutoSizePanelID) as PanelBase; + + if (autosizePanel != null) + { + #region oldcode + //string resizePanelScript = String.Empty; + + //resizePanelScript += String.Format("{0}_resize_outerpanel=function(){{var panel=Ext.getCmp('{1}');panel.setSize(Ext.getBody().getSize());panel.doLayout();}};", ClientJavascriptID, panel.ClientID); + //resizePanelScript += String.Format("{0}_resize_outerpanel();", ClientJavascriptID); + //resizePanelScript += String.Format("if(Ext.isIE){{X.{0}_resize_outerpanel.defer(60);}}", ClientJavascriptID); + //resizePanelScript += String.Format("Ext.EventManager.onWindowResize(function(){{X.{0}_resize_outerpanel();}},box);", ClientJavascriptID); + + //AddAbsoluteStartupScript(resizePanelScript); + + // X._3=new Ext.FormViewport({renderTo:"RegionPanel1_wrapper",id:"RegionPanel1",layout:"border",items:[X._1,X._2],bodyStyle:"",border:false,animCollapse:false}); + + #endregion + + // 子节点不向页面输出HTML,此PageManager向页面输出HTML + autosizePanel.RenderWrapperNode = false; + RenderWrapperNode = true; + + OB.AddProperty("layout", "fit"); + OB.AddProperty("border", false); + OB.AddProperty("items", String.Format("{0}", autosizePanel.XID), true); + + string jsContent = String.Format("var {0}=Ext.create('Ext.ux.FormViewport',{1});", XID, OB.ToString()); + + // 确保FormViewport脚本在所以用户自定义脚本(PageContext.RegisterStartupScript)之前执行 + AddStartupAbsoluteScript(jsContent, Constants.ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL - 20); + } + } + + #endregion + + //if (EnableBigFont) + //{ + // AddStartupAbsoluteScript("Ext.getBody().addClass('bigfont');"); + //} + + #region oldcode + + // Move to F.util.init + // Asp.Net Buttons(type="submit") + // AddStartupAbsoluteScript("F.util.makeAspnetSubmitButtonAjax();"); + + #endregion + + JsObjectBuilder job = new JsObjectBuilder(); + + job.AddProperty("name", UniqueID); + + if (ValidateForms != null && ValidateForms.Length > 0) + { + JsObjectBuilder validate = new JsObjectBuilder(); + validate.AddProperty("forms", ControlUtil.GetControlClientIDs(ValidateForms)); + validate.AddProperty("target", TargetHelper.GetName(ValidateTarget)); + validate.AddProperty("messagebox", ValidateMessageBox.ToString().ToLower()); + job.AddProperty("validate", validate); + + } + + string createScript = String.Format("F.pagemanager={1};", XID, job); + AddStartupScript(createScript); + } + + #region old code + + //private PanelBase GetFirstPanelControl(ControlCollection controls) + //{ + // foreach (Control c in controls) + // { + // if (c is PanelBase) + // { + // return c as PanelBase; + // } + // else if (c.Controls != null && c.Controls.Count > 0) + // { + // PanelBase findPanel = GetFirstPanelControl(c.Controls); + // if (findPanel != null) + // { + // return findPanel; + // } + // } + // } + + // return null; + //} + + #endregion + + #endregion + + #region Instance + + //// 这是一个严重的错误,不应该将_manager保存为全局变量,而是作为随页面存在的 + //private static PageManager _manager = null; + /// <summary> + /// PageManager在当前页面的实例 + /// </summary> + public static PageManager Instance + { + get + { + if (HttpContext.Current != null) + { + if (HttpContext.Current.Items["PageManagerInstanceCached"] == null) + { + HttpContext.Current.Items["PageManagerInstanceCached"] = true; + HttpContext.Current.Items["PageManagerInstance"] = ControlUtil.FindControl(typeof(FineUI.PageManager)) as PageManager; + } + return HttpContext.Current.Items["PageManagerInstance"] as PageManager; + } + // It's design time. + return null; + } + } + + ///// <summary> + ///// 获取PageManager实例 + ///// </summary> + ///// <param name="site"></param> + ///// <returns></returns> + //public static PageManager GetInstance(ISite site) + //{ + // foreach (System.ComponentModel.IComponent c in site.Container.Components) + // { + // if (c is FineUI.PageManager) + // { + // return c as FineUI.PageManager; + // } + // } + // return null; + //} + + //public static PageManager GetInstance(Page page) + //{ + // if (page == null) + // { + // page = HttpContext.Current.CurrentHandler as Page; + // } + + // PageManager pageManager = ControlUtil.FindControl(page, typeof(FineUI.PageManager)) as PageManager; + // if (pageManager == null) + // { + // throw new Exception("每个页面必须包含一个PageManager控件。"); + // } + + // return pageManager; + //} + + #endregion + + #region oldcode + + //private List<string> beforeAjaxPostBackScriptKeys = new List<string>(); + + //private string beforeAjaxPostBackScript = String.Empty; + + //internal string BeforeAjaxPostBackScript + //{ + // get { return beforeAjaxPostBackScript; } + // set { beforeAjaxPostBackScript = value; } + //} + + ///// <summary> + ///// Used by FCKeditor, Add script before ajax postback. + ///// </summary> + ///// <param name="key"></param> + ///// <param name="script"></param> + //public void RegisterOnAjaxPostBack(string key, string script) + //{ + // if (!beforeAjaxPostBackScriptKeys.Contains(key)) + // { + // beforeAjaxPostBackScriptKeys.Add(key); + // BeforeAjaxPostBackScript += script; + // } + //} + + #endregion + + #region GetIFramePostBackEventReference + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(string eventArgument) + { + return GetCustomEventReference(eventArgument, false); + } + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(string eventArgument, bool validateForms) + { + return String.Format("F.customEvent({0}, {1});", JsHelper.Enquote(eventArgument), validateForms.ToString().ToLower()); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnCustomEvent(new CustomEventArgs(eventArgument)); + } + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 自定义事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("自定义事件")] + public event EventHandler<CustomEventArgs> CustomEvent + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发自定义事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCustomEvent(CustomEventArgs e) + { + EventHandler<CustomEventArgs> handler = Events[_handlerKey] as EventHandler<CustomEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/ControlBase.Timer/Timer.cs b/FineUI/WebControls/ControlBase.Timer/Timer.cs index c363808..8b9eb0d 100644 --- a/FineUI/WebControls/ControlBase.Timer/Timer.cs +++ b/FineUI/WebControls/ControlBase.Timer/Timer.cs @@ -1,195 +1,207 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Timer.cs - * CreatedOn: 2009-09-14 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design; - -namespace FineUI -{ - /// <summary> - /// 定时器控件 - /// </summary> - [Designer("FineUI.Design.TimerDesigner, FineUI.Design")] - [ToolboxData("<{0}:Timer Interval=\"30\" runat=\"server\"></{0}:Timer>")] - [ToolboxBitmap(typeof(Timer), "toolbox.Timer.bmp")] - [Description("定时器")] - [DefaultEvent("Tick")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Timer : ControlBase, IPostBackEventHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Timer() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - } - - #endregion - - #region Properties - - /// <summary> - /// 定时间隔(单位:秒) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(30)] - [Description("定时间隔(单位:秒)")] - public int Interval - { - get - { - object obj = XState["Interval"]; - return obj == null ? 30 : (int)obj; - } - set - { - XState["Interval"] = value; - } - } - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - RenderWrapperNode = false; - - base.OnFirstPreRender(); - - if (Enabled) - { - AddStartupAbsoluteScript(GetTimerScript()); - } - - string contentScript = String.Format("var {0}=Ext.create('Ext.Component',{1});", XID, OB.ToString()); - AddStartupScript(contentScript); - } - - private string GetTimerScript() - { - StringBuilder sb = new StringBuilder(); - - sb.AppendFormat("window.clearInterval({0}.x_timer);", XID); - - if (Enabled) - { - sb.AppendFormat("{0}.x_timer=window.setInterval(function(){{{1}}}, {2});", XID, GetPostBackEventReference(), Interval * 1000); - } - - return sb.ToString(); - } - - /// <summary> - /// 获取 Hidden 属性改变的 JavaScript 脚本 - /// </summary> - /// <returns>客户端脚本</returns> - protected override string GetEnabledPropertyChangedScript() - { - if (PropertyModified("Enabled")) - { - return GetTimerScript(); - } - return String.Empty; - } - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - OnTick(EventArgs.Empty); - } - - #endregion - - #region OnTick - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 定时事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("定时事件")] - public event EventHandler Tick - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发定时事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnTick(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Timer.cs + * CreatedOn: 2009-09-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 定时器控件 + /// </summary> + [Designer("FineUI.Design.TimerDesigner, FineUI.Design")] + [ToolboxData("<{0}:Timer Interval=\"30\" runat=\"server\"></{0}:Timer>")] + [ToolboxBitmap(typeof(Timer), "toolbox.Timer.bmp")] + [Description("定时器")] + [DefaultEvent("Tick")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Timer : ControlBase, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Timer() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + + /// <summary> + /// 定时间隔(单位:秒) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(30)] + [Description("定时间隔(单位:秒)")] + public int Interval + { + get + { + object obj = FState["Interval"]; + return obj == null ? 30 : (int)obj; + } + set + { + FState["Interval"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + //RenderWrapperNode = false; + + base.OnFirstPreRender(); + + if (Enabled) + { + AddStartupAbsoluteScript(GetTimerScript()); + } + + string contentScript = String.Format("var {0}=Ext.create('Ext.Component',{1});", XID, OB.ToString()); + AddStartupScript(contentScript); + } + + private string GetTimerScript() + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat("window.clearInterval({0}.f_timer);", XID); + + if (Enabled) + { + sb.AppendFormat("{0}.f_timer=window.setInterval(function(){{{1}}}, {2});", XID, GetPostBackEventReference(), Interval * 1000); + } + + return sb.ToString(); + } + + /// <summary> + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// </summary> + /// <returns>客户端脚本</returns> + protected override string GetEnabledPropertyChangedScript() + { + if (PropertyModified("Enabled")) + { + return GetTimerScript(); + } + return String.Empty; + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnTick(EventArgs.Empty); + } + + #endregion + + #region OnTick + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 定时事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("定时事件")] + public event EventHandler Tick + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发定时事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs b/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs index 35da436..70df505 100644 --- a/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs +++ b/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs @@ -1,225 +1,243 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: UserControlConnector.cs - * CreatedOn: 2008-07-02 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI; -using System.ComponentModel; -using System.Drawing; -using System.Web.UI.WebControls; - -namespace FineUI -{ - /// <summary> - /// 用户控件的容器 - /// </summary> - [Designer("FineUI.Design.UserControlConnectorDesigner, FineUI.Design")] - [ToolboxData("<{0}:UserControlConnector runat=\"server\"></{0}:UserControlConnector>")] - [ToolboxBitmap(typeof(UserControlConnector), "toolbox.UserControlConnector.bmp")] - [Description("用户控件的容器")] - [ParseChildren(false)] - [PersistChildren(true)] - [ControlBuilder(typeof(ContentPanelBuilder))] - public class UserControlConnector : ControlBase - { - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - // 不渲染,此控件只作为中间转化层 - RenderWrapperNode = false; - AddStartupScript(String.Empty); - - // 一个UserControlConnector里面可能放多个UserControl, - // 每个UserControl中的所有直接子节点都不要即时渲染 - StringBuilder sb = new StringBuilder(); - foreach (Control userControl in Controls) - { - if (userControl is UserControl) - { - // 用户控件中的FineUI控件(x1,x4,x6) - sb.AppendFormat("{0},", GetControlIds(userControl.Controls)); - - // 用户控件里面的都不要即时渲染 - foreach (Control c in userControl.Controls) - { - ControlBase childControl = c as ControlBase; - if (childControl != null) - { - childControl.RenderWrapperNode = false; - } - } - } - } - - // 重新设置父节点的注册脚本 - ControlBase parentControl = Parent as ControlBase; - if (parentControl != null) - { - ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); - cs.Script = GetResolveScript(cs.Script, sb.ToString().TrimEnd(',')); - } - - - //// 目前只处理第一个子控件,其他的舍弃 - //UserControl userControl = GetFirstChildUserControl(Controls); - //if (userControl != null) - //{ - // // 用户控件里面的都不要即时渲染 - // foreach (Control c in userControl.Controls) - // { - // ControlBase childControl = c as ControlBase; - // if (childControl != null) - // { - // childControl.RenderWrapperNode = false; - // } - // } - - - // // 重新设置父节点的注册脚本 - // ControlBase parentControl = Parent as ControlBase; - // if (parentControl != null) - // { - // ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); - // cs.Script = GetResolveScript(cs.Script, GetControlIds(userControl.Controls)); - // } - //} - - } - - #endregion - - #region private GetFirstChildUserControl - - /// <summary> - /// 取得第一个子控件 - /// </summary> - /// <param name="controls"></param> - /// <returns></returns> - private UserControl GetFirstChildUserControl(ControlCollection controls) - { - foreach (Control c in controls) - { - if (c is UserControl) - { - return (c as UserControl); - } - } - - return null; - } - - #endregion - - #region private GetControlIds - - private string GetControlIds(ControlCollection controls) - { - StringBuilder sb = new StringBuilder(); - if (controls.Count > 0) - { - foreach (Control item in controls) - { - // 再次检查是否ControlBase,并且只有Visible时才添加 - // 还有一个例外情况,Window控件不作为任何控件的子控件 - if (item is ControlBase && item.Visible && !(item is Window) && !(item is Toolbar)) - { - string itemJSId = String.Format("{0}", (item as ControlBase).XID); - sb.AppendFormat("{0},", itemJSId); - } - } - } - - return sb.ToString().TrimEnd(','); - } - - #endregion - - #region private GetResolveScript - - private string GetResolveScript(string script, string ids) - { - int itemsStartIndex = script.IndexOf("items:["); - if (itemsStartIndex >= 0) - { - itemsStartIndex += "items:[".Length; - int itemsEndIndex = script.IndexOf("]", itemsStartIndex); - string itemsStr = script.Substring(itemsStartIndex, itemsEndIndex - itemsStartIndex); - - // 防止itemsStr出现类似:x1,x2,x13,x20的情况 - string newItemStr = itemsStr + ","; - newItemStr = newItemStr.Replace(XID + ",", ids + ","); - newItemStr = newItemStr.TrimEnd(','); - - return script.Substring(0, itemsStartIndex) + newItemStr + script.Substring(itemsEndIndex); - - //StringBuilder sb = new StringBuilder(); - //string currentId = String.Format("box.{0}", ClientJavascriptID); - //Nii.JSON.JSONArray ja = new Nii.JSON.JSONArray(itemsStr); - //for (int i = 0; i < ja.Count; i++) - //{ - // string item = ja.getString(i); - // if (item == currentId) - // { - // sb.AppendFormat("{0},", ids); - // } - // else - // { - // sb.AppendFormat("{0},", item); - // } - //} - - //string newItemsStr = String.Format("[{0}]", sb.ToString().TrimEnd(',')); - - //return script.Replace(itemsStr, newItemsStr); - } - - return script; - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: UserControlConnector.cs + * CreatedOn: 2008-07-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// <summary> + /// 用户控件的容器 + /// </summary> + [Designer("FineUI.Design.UserControlConnectorDesigner, FineUI.Design")] + [ToolboxData("<{0}:UserControlConnector runat=\"server\"></{0}:UserControlConnector>")] + [ToolboxBitmap(typeof(UserControlConnector), "toolbox.UserControlConnector.bmp")] + [Description("用户控件的容器")] + [ParseChildren(false)] + [PersistChildren(true)] + [ControlBuilder(typeof(ContentPanelBuilder))] + public class UserControlConnector : ControlBase + { + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + // 不渲染,此控件只作为中间转化层 + //RenderWrapperNode = false; + AddStartupScript(String.Empty); + + + + // 一个UserControlConnector里面可能放多个UserControl, + // 每个UserControl中的所有直接子节点都不要即时渲染 + StringBuilder sb = new StringBuilder(); + foreach (Control userControl in Controls) + { + if (userControl is UserControl) + { + // 用户控件中的FineUI控件(x1,x4,x6) + sb.AppendFormat("{0},", GetControlIds(userControl.Controls)); + + // 用户控件里面的都不要即时渲染 + foreach (Control c in userControl.Controls) + { + ControlBase childControl = c as ControlBase; + if (childControl != null) + { + childControl.RenderWrapperNode = false; + } + } + } + } + + + // 重新设置父节点的注册脚本 + ControlBase parentControl = Parent as ControlBase; + if (parentControl != null) + { + ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); + cs.Script = GetResolveScript(cs.Script, sb.ToString().TrimEnd(',')); + } + + + //// 目前只处理第一个子控件,其他的舍弃 + //UserControl userControl = GetFirstChildUserControl(Controls); + //if (userControl != null) + //{ + // // 用户控件里面的都不要即时渲染 + // foreach (Control c in userControl.Controls) + // { + // ControlBase childControl = c as ControlBase; + // if (childControl != null) + // { + // childControl.RenderWrapperNode = false; + // } + // } + + + // // 重新设置父节点的注册脚本 + // ControlBase parentControl = Parent as ControlBase; + // if (parentControl != null) + // { + // ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); + // cs.Script = GetResolveScript(cs.Script, GetControlIds(userControl.Controls)); + // } + //} + + } + + #endregion + + #region private GetFirstChildUserControl + + /// <summary> + /// 取得第一个子控件 + /// </summary> + /// <param name="controls"></param> + /// <returns></returns> + private UserControl GetFirstChildUserControl(ControlCollection controls) + { + foreach (Control c in controls) + { + if (c is UserControl) + { + return (c as UserControl); + } + } + + return null; + } + + #endregion + + #region private GetControlIds + + private string GetControlIds(ControlCollection controls) + { + StringBuilder sb = new StringBuilder(); + if (controls.Count > 0) + { + foreach (Control item in controls) + { + // 再次检查是否ControlBase,并且只有Visible时才添加 + // 还有一个例外情况,Window控件不作为任何控件的子控件 + if (item is ControlBase && item.Visible && !(item is Window) && !(item is Toolbar)) + { + string itemJSId = String.Format("{0}", (item as ControlBase).XID); + sb.AppendFormat("{0},", itemJSId); + } + } + } + + return sb.ToString().TrimEnd(','); + } + + #endregion + + #region private GetResolveScript + + private string GetResolveScript(string script, string ids) + { + int itemsStartIndex = script.IndexOf("items:["); + if (itemsStartIndex >= 0) + { + itemsStartIndex += "items:[".Length; + int itemsEndIndex = script.IndexOf("]", itemsStartIndex); + string itemsStr = script.Substring(itemsStartIndex, itemsEndIndex - itemsStartIndex); + + // 防止itemsStr出现类似:x1,x2,x13,x20的情况 + string newItemStr = itemsStr + ","; + newItemStr = newItemStr.Replace(XID + ",", ids + ","); + newItemStr = newItemStr.TrimEnd(','); + + return script.Substring(0, itemsStartIndex) + newItemStr + script.Substring(itemsEndIndex); + + //StringBuilder sb = new StringBuilder(); + //string currentId = String.Format("box.{0}", ClientJavascriptID); + //Nii.JSON.JSONArray ja = new Nii.JSON.JSONArray(itemsStr); + //for (int i = 0; i < ja.Count; i++) + //{ + // string item = ja.getString(i); + // if (item == currentId) + // { + // sb.AppendFormat("{0},", ids); + // } + // else + // { + // sb.AppendFormat("{0},", item); + // } + //} + + //string newItemsStr = String.Format("[{0}]", sb.ToString().TrimEnd(',')); + + //return script.Replace(itemsStr, newItemsStr); + } + + return script; + } + + #endregion + } +} diff --git a/FineUI/WebControls/Field.CheckBox/CheckBox.cs b/FineUI/WebControls/Field.CheckBox/CheckBox.cs index 67a4e4e..08e7113 100644 --- a/FineUI/WebControls/Field.CheckBox/CheckBox.cs +++ b/FineUI/WebControls/Field.CheckBox/CheckBox.cs @@ -1,267 +1,268 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: CheckBox.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 复选框控件 - /// </summary> - [Designer("FineUI.Design.CheckBoxDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:CheckBox Label=\"Label\" Text=\"CheckBox\" runat=\"server\"></{0}:CheckBox>")] - [ToolboxBitmap(typeof(CheckBox), "toolbox.CheckBox.bmp")] - [DefaultEvent("CheckedChanged")] - [Description("复选框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class CheckBox : Field, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public CheckBox() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("Checked"); - } - - #endregion - - #region Properties - - /// <summary> - /// 文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - /// <summary> - /// [AJAX属性]是否选中 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("[AJAX属性]是否选中")] - public bool Checked - { - get - { - object obj = XState["Checked"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Checked"] = value; - } - } - - /// <summary> - /// 是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动回发")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - #endregion - - #region HiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal string CheckedHiddenFieldID - { - get - { - return String.Format("{0}_Checked", ClientID); - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Checked")) - { - sb.AppendFormat("{0}.x_setValue();", XID); - - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - OB.AddProperty("checked", Checked); - - // In CheckBox control, Text is the showing beside the checkbox. - if (!String.IsNullOrEmpty(Text)) - { - OB.AddProperty("boxLabel", Text); - } - - - if (AutoPostBack) - { - // We should attach the "check" event after the control is rendered. - // Because in the rendering process, the control will also trigger the "check" event, then we cann't distinguish it from the actual event. - - // We don't need delay here, because every PostBack has been delayed in global "ajaxPostBack" function. - //string checkEventScript = String.Format("{0}.on('check',{1},X,{{delay:0}});", XID, JsHelper.GetFunction(GetPostBackEventReference())); - //string renderScript = "(function(){" + checkEventScript + "}).defer(20);"; - - //// 既然不需要延迟执行回发请求,那么就没必要放在render事件中了 - //string checkEventScript = String.Format("this.on('check',{0});", JsHelper.GetFunction(GetPostBackEventReference())); - //OB.Listeners.AddProperty("render", "function(){" + checkEventScript + "}", true); - - OB.Listeners.AddProperty("change", JsHelper.GetFunction(GetPostBackEventReference()), true); - } - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Checkbox',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region IPostBackDataHandler - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - //string postValue = postCollection[postDataKey]; - //bool postChecked = !String.IsNullOrEmpty(postValue); - bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); - if (Checked != postChecked) - { - Checked = postChecked; - XState.BackupPostDataProperty("Checked"); - return true; - } - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public void RaisePostDataChangedEvent() - { - OnCheckedChanged(new CheckedEventArgs(Checked)); - } - - #endregion - - #region OnCheckedChanged - - private object _handlerKey = new object(); - - /// <summary> - /// 复选框状态改变事件(需要启用AutoPostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("复选框状态改变事件(需要启用AutoPostBack)")] - public event EventHandler<CheckedEventArgs> CheckedChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发复选框状态改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnCheckedChanged(CheckedEventArgs e) - { - EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckBox.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 复选框控件 + /// </summary> + [Designer("FineUI.Design.CheckBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:CheckBox Label=\"Label\" Text=\"CheckBox\" runat=\"server\"></{0}:CheckBox>")] + [ToolboxBitmap(typeof(CheckBox), "toolbox.CheckBox.bmp")] + [DefaultEvent("CheckedChanged")] + [Description("复选框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class CheckBox : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public CheckBox() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Checked"); + } + + #endregion + + #region Properties + + /// <summary> + /// 文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否选中")] + public bool Checked + { + get + { + object obj = FState["Checked"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Checked"] = value; + } + } + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string CheckedHiddenFieldID + { + get + { + return String.Format("{0}_Checked", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Checked")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("checked", Checked); + + // In CheckBox control, Text is the showing beside the checkbox. + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("boxLabel", Text); + } + + + if (AutoPostBack) + { + // We should attach the "check" event after the control is rendered. + // Because in the rendering process, the control will also trigger the "check" event, then we cann't distinguish it from the actual event. + + // We don't need delay here, because every PostBack has been delayed in global "ajaxPostBack" function. + //string checkEventScript = String.Format("{0}.on('check',{1},X,{{delay:0}});", XID, JsHelper.GetFunction(GetPostBackEventReference())); + //string renderScript = "(function(){" + checkEventScript + "}).defer(20);"; + + //// 既然不需要延迟执行回发请求,那么就没必要放在render事件中了 + //string checkEventScript = String.Format("this.on('check',{0});", JsHelper.GetFunction(GetPostBackEventReference())); + //OB.Listeners.AddProperty("render", "function(){" + checkEventScript + "}", true); + + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(GetPostBackEventReference()), true); + AddListener("change", GetPostBackEventReference()); + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Checkbox',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + //string postValue = postCollection[postDataKey]; + //bool postChecked = !String.IsNullOrEmpty(postValue); + bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); + if (Checked != postChecked) + { + Checked = postChecked; + FState.BackupPostDataProperty("Checked"); + return true; + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnCheckedChanged(new CheckedEventArgs(Checked)); + } + + #endregion + + #region OnCheckedChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 复选框状态改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("复选框状态改变事件(需要启用AutoPostBack)")] + public event EventHandler<CheckedEventArgs> CheckedChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发复选框状态改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCheckedChanged(CheckedEventArgs e) + { + EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs b/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs index 730ba1c..c640880 100644 --- a/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs +++ b/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs @@ -1,65 +1,65 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: CheckedEventArgs.cs - * CreatedOn: 2013-10-22 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ѡ/ѡ/ѡ˵ť¼ - /// </summary> - public class CheckedEventArgs : EventArgs - { - - private bool _checked; - - /// <summary> - /// Ƿѡ - /// </summary> - public bool Checked - { - get { return _checked; } - set { _checked = value; } - } - - - /// <summary> - /// 캯 - /// </summary> - /// <param name="isChecked">Ƿѡ</param> - public CheckedEventArgs(bool isChecked) - { - _checked = isChecked; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: CheckedEventArgs.cs + * CreatedOn: 2013-10-22 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ѡ/ѡ/ѡ˵ť¼ + /// </summary> + public class CheckedEventArgs : EventArgs + { + + private bool _checked; + + /// <summary> + /// Ƿѡ + /// </summary> + public bool Checked + { + get { return _checked; } + set { _checked = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="isChecked">Ƿѡ</param> + public CheckedEventArgs(bool isChecked) + { + _checked = isChecked; + } + + } +} + + + diff --git a/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs b/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs index 6c3fbeb..07ec716 100644 --- a/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs +++ b/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs @@ -1,1053 +1,1062 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: CheckBoxList.cs - * CreatedOn: 2012-01-22 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; -using System.Data; -using System.Collections; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.ComponentModel.Design; - - -namespace FineUI -{ - /// <summary> - /// 复选框列表控件 - /// </summary> - [Designer("FineUI.Design.CheckBoxListDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:CheckBoxList runat=server></{0}:CheckBoxList>")] - [ToolboxBitmap(typeof(CheckBoxList), "toolbox.CheckBoxList.bmp")] - [Description("复选框列表控件")] - [ParseChildren(true, DefaultProperty = "Items")] - [PersistChildren(false)] - [DefaultEvent("SelectedIndexChanged")] - public class CheckBoxList : Field, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public CheckBoxList() - { - AddServerAjaxProperties("X_Items"); - AddClientAjaxProperties("SelectedValueArray"); - - AddGzippedAjaxProperties("X_Items"); - } - - #endregion - - #region Properties - - #region old code - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否显示浅色的背景色")] - //public virtual bool EnableLightBackgroundColor - //{ - // get - // { - // object obj = BoxState["EnableLightBackgroundColor"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["EnableLightBackgroundColor"] = value; - // } - //} - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否显示背景色")] - //public virtual bool EnableBackgroundColor - //{ - // get - // { - // object obj = BoxState["EnableBackgroundColor"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["EnableBackgroundColor"] = value; - // } - //} - - - #endregion - - /// <summary> - /// 是否必填项 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(false)] - [Description("是否必填项")] - public bool Required - { - get - { - object obj = XState["Required"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Required"] = value; - } - } - - /// <summary> - /// 为空时提示信息 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("为空时提示信息")] - public string RequiredMessage - { - get - { - object obj = XState["RequiredMessage"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["RequiredMessage"] = value; - } - } - - - /// <summary> - /// 是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动回发")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - ///// <summary> - ///// 是否选中 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否选中")] - //public bool Checked - //{ - // get - // { - // object obj = XState["Checked"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["Checked"] = value; - // } - //} - - /// <summary> - /// 渲染成几列 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(0)] - [Description("渲染成几列")] - public int ColumnNumber - { - get - { - object obj = XState["ColumnNumber"]; - return obj == null ? 0 : (int)obj; - } - set - { - XState["ColumnNumber"] = value; - } - } - - /// <summary> - /// 是否按照纵向顺序渲染 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否按照纵向顺序渲染")] - public bool ColumnVertical - { - get - { - object obj = XState["ColumnVertical"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ColumnVertical"] = value; - } - } - - #endregion - - #region Data Properties - - /// <summary> - /// 显示文本的数据字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示文本的数据字段")] - public string DataTextField - { - get - { - object obj = XState["DataTextField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataTextField"] = value; - } - } - - /// <summary> - /// 显示文本的格式化字符串 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示文本的格式化字符串")] - public string DataTextFormatString - { - get - { - object obj = XState["DataTextFormatString"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataTextFormatString"] = value; - } - } - - /// <summary> - /// 显示值的数据字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示值的数据字段")] - public string DataValueField - { - get - { - object obj = XState["DataValueField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataValueField"] = value; - } - } - - private object _dataSource; - - /// <summary> - /// 数据源 - /// </summary> - [DefaultValue(null)] - [Description("数据源")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object DataSource - { - set - { - _dataSource = value; - } - get - { - return _dataSource; - } - } - - #endregion - - #region SelectedIndexArray/SelectedValueArray/SelectedItemArray - - /// <summary> - /// [AJAX属性]选中项的值 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("[AJAX属性]选中项的值")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string[] SelectedValueArray - { - get - { - List<string> selectedValues = new List<string>(); - for (int i = 0, count = Items.Count; i < count; i++) - { - CheckItem item = Items[i]; - if (item.Selected) - { - selectedValues.Add(item.Value); - } - } - return selectedValues.ToArray(); - } - set - { - List<string> selectedValues = new List<string>(value); - for (int i = 0, count = Items.Count; i < count; i++) - { - CheckItem item = Items[i]; - if (selectedValues.Contains(item.Value)) - { - item.Selected = true; - } - else - { - item.Selected = false; - } - } - } - } - - - /// <summary> - /// [AJAX属性]选中项的索引 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("[AJAX属性]选中项的索引")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int[] SelectedIndexArray - { - get - { - List<int> selectedIndexs = new List<int>(); - for (int i = 0, count = Items.Count; i < count; i++) - { - if (Items[i].Selected) - { - selectedIndexs.Add(i); - } - } - return selectedIndexs.ToArray(); - } - set - { - List<int> selectedIndexs = new List<int>(value); - for (int i = 0, count = Items.Count; i < count; i++) - { - if (selectedIndexs.Contains(i)) - { - Items[i].Selected = true; - } - else - { - Items[i].Selected = false; - } - } - } - } - - /// <summary> - /// 选中项 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("选中项")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public CheckItem[] SelectedItemArray - { - get - { - List<CheckItem> selectedItems = new List<CheckItem>(); - for (int i = 0, count = Items.Count; i < count; i++) - { - CheckItem item = Items[i]; - if (item.Selected) - { - selectedItems.Add(item); - } - } - return selectedItems.ToArray(); - } - } - - #endregion - - #region HiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal string SelectedValueArrayHiddenFieldID - { - get - { - return String.Format("{0}_SelectedValueArray", ClientID); - } - } - - #endregion - - #region Items - - private CheckItemCollection _items; - - /// <summary> - /// 复选框集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerDefaultProperty)] - [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual CheckItemCollection Items - { - get - { - if (_items == null) - { - _items = new CheckItemCollection(); - } - return _items; - } - } - - #endregion - - #region X Properties - - /// <summary> - /// 保存的复选框数据(内部使用) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public JArray X_Items - { - get - { - JArray ja = new JArray(); - foreach (CheckItem item in Items) - { - JArray ja2 = new JArray(); - ja2.Add(item.Text); - ja2.Add(item.Value); - ja.Add(ja2); - } - return ja; - } - set - { - // 和DropDownList的情况相同,清空前备份选中项 - string[] selectedValues = SelectedValueArray; - - Items.Clear(); - foreach (JArray ja2 in value) - { - CheckItem item = new CheckItem(); - item.Text = ja2[0].Value<string>(); //ja2.getString(0); - item.Value = ja2[1].Value<string>(); //ja2.getString(1); - Items.Add(item); - } - - // 恢复选中项 - SelectedValueArray = selectedValues; - } - } - - #endregion - - #region old code - - //private int itemsHashCode; - //protected override void OnInit(EventArgs e) - //{ - // base.OnInit(e); - - // itemsHashCode = XItemsToState().ToString().GetHashCode(); - //} - - //protected override void OnBothPreRender() - //{ - // base.OnBothPreRender(); - - // // Items has been changed in server-side code after onInit. - // if (itemsHashCode != XItemsToState().ToString().GetHashCode()) - // { - // XState.AddModifiedProperty("X_Items"); - // } - //} - - //protected override void LoadXState(JObject state, string property) - //{ - // base.LoadXState(state, property); - - // if (property == "X_Items") - // { - // XItemsFromState(state.getJArray(property)); - // } - //} - - //protected override void SaveXState(JObject state, string property) - //{ - // if (property == "X_Items") - // { - // state.put(property, XItemsToState()); - // } - //} - - //private JArray XItemsToState() - //{ - // JArray ja = new JArray(); - // foreach (CheckItem item in Items) - // { - // JArray ja2 = new JArray(); - // ja2.Add(item.Text); - // ja2.Add(item.Value); - // ja.Add(ja2); - // } - // return ja; - //} - - //private void XItemsFromState(JArray ja) - //{ - // foreach (JArray ja2 in ja.getArrayList()) - // { - // CheckItem item = new CheckItem(); - // item.Text = ja2.getString(0); - // item.Value = ja2.getString(1); - // Items.Add(item); - // } - //} - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - bool dataReloaded = false; - - StringBuilder sb = new StringBuilder(); - - if (PropertyModified("X_Items")) - { - sb.AppendFormat("{0}.x_reloadData('{1}');", XID, UniqueID); //, GetItemsJArray().ToString(Formatting.None)); - - // 注意,在x_reloadData中重新创建了列表实例,所以要重新赋值 - sb.AppendFormat("{0}=X('{1}');", XID, ClientID); - - //if (Items.Count == 0) - //{ - // sb.AppendFormat("{0}.x_toBeDeleted();", XID); - //} - - dataReloaded = true; - } - - - if (!dataReloaded) - { - if (PropertyModified("SelectedValueArray")) - { - sb.AppendFormat("{0}.x_setValue();", XID); - - } - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - #region options - - if (Required) - { - OB.AddProperty("allowBlank", false); - if (!String.IsNullOrEmpty(RequiredMessage)) - { - OB.AddProperty("blankText", RequiredMessage); - } - } - - - OB.RemoveProperty("name"); - - if (ColumnNumber <= 0) - { - OB.AddProperty("columns", "auto"); - } - else - { - OB.AddProperty("columns", ColumnNumber); - } - - if (ColumnVertical) - { - OB.AddProperty("vertical", true); - } - - //OB.AddProperty("name", UniqueID); - - #endregion - - #region Items - - string xstateName = String.Format("{0}_xstate", XID); - string xitemsName = String.Format("{0}_xitems", XID); - string hasDataName = xstateName; - - string xstate = OB.GetProperty("x_state"); - OB.AddProperty("x_state", xstateName, true); - - string jsState = String.Format("var {0}={1};", xstateName, xstate); - - if (!XState.ModifiedProperties.Contains("X_Items")) - { - xstate = ConvertPropertiesToJObject(new List<string> { "X_Items", "SelectedValueArray" }).ToString(Formatting.None); - jsState += String.Format("var {0}={1};", xitemsName, xstate); - hasDataName = xitemsName; - } - - //if (Items.Count > 0) - //{ - // //OB.AddProperty("items", GetItemsJArray().ToString(Formatting.None), true); - // OB.AddProperty("items", String.Format("X.util.resolveCheckBoxGroup('{0}',{1})", UniqueID, hasDataName), true); - //} - OB.AddProperty("name", UniqueID); - OB.AddProperty("items", String.Format("X.util.resolveCheckBoxGroup('{0}',{1},false)", UniqueID, hasDataName), true); - - - //if (Items.Count == 0) - //{ - // OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction("cmp.x_toBeDeleted();", "cmp"), true); - //} - - #endregion - - #region AutoPostBack - - if (AutoPostBack) - { - // 道理和RadioButtonList类似。 - OB.Listeners.AddProperty("change", String.Format("function(group,checkedArray){{if(typeof(checkedArray)!=='boolean'){{{0}}}}}", GetPostBackEventReference()), true); - } - /* - if (!String.IsNullOrEmpty(SelectedValue)) - { - OB.AddProperty("value", SelectedValue); - } - */ - - #region old code - //string autoPostBackScript = String.Empty; - //if (AutoPostBack) - //{ - // //// change 事件只有在失去焦点时才触发,是不及时的 - // //OB.Listeners.RemoveProperty(OptionName.Change); - // //OB.Listeners.AddProperty(OptionName.Check, String.Format("function(newValue,oldValue){{\r\nbox_pageStateChange();alert(newValue+':'+oldValue);\r\n}}"), true); - - // string selectScript = String.Format("function(newValue,oldValue){{\r\nalert(newValue+':'+oldValue);\r\n}}"); - // selectScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientID, OptionName.Check, selectScript); - - // autoPostBackScript += selectScript; - //} - - //string backgroundColorStyle = String.Empty; - //if (EnableBackgroundColor) - //{ - // backgroundColorStyle = AboutConfig.GetDefaultBackgroundColor(PageManagerInstance.Theme.ToString()); - //} - //else if (EnableLightBackgroundColor) - //{ - // backgroundColorStyle = AboutConfig.GetLightBackgroundColor(PageManagerInstance.Theme.ToString()); - //} - - //if (!String.IsNullOrEmpty(backgroundColorStyle)) - //{ - // string backgroundColorScript = String.Format("Ext.each(X.{0}.el.query('.x-panel-body'),function(item,index){{Ext.get(item).setStyle('background-color','{1}');}});", ClientJavascriptID, backgroundColorStyle); - - // string renderScript = "(function(){" + backgroundColorScript + "}).defer(20);"; - // OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); - //} - - #endregion - - #endregion - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.CheckboxGroup',{1});", XID, OB.ToString()); - AddStartupScript(jsState + jsContent); - } - - #region old code - - //private JArray GetItemsJArray() - //{ - // JArray ja = new JArray(); - // int itemIndex = 0; - // foreach (CheckItem item in Items) - // { - // JObject jo = new JObject(); - // jo.Add("inputValue", item.Value); - // jo.Add("boxLabel", item.Text); - // jo.Add("name", UniqueID + "_" + itemIndex.ToString()); - // if (item.Selected) - // { - // jo.Add("checked", true); - // } - - // ja.Add(jo); - - // itemIndex++; - // } - - // return ja; - //} - - #endregion - - #endregion - - #region DataBind - - /// <summary> - /// 绑定到数据源 - /// </summary> - public override void DataBind() - { - base.DataBind(); - - if (_dataSource != null) - { - // 1. 首先清空 Items 属性 - Items.Clear(); - - // 2. 绑定到数据源 - if (_dataSource is IDataReader) - { - DataTable dataTable = new DataTable(); - dataTable.Load(_dataSource as IDataReader); - - DataBindToDataTable(dataTable); - } - else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) - { - DataTable dataTable = null; - if (_dataSource is DataView) - { - dataTable = ((DataView)_dataSource).ToTable(); - } - else if (_dataSource is DataSet) - { - dataTable = ((DataSet)_dataSource).Tables[0]; - } - else - { - dataTable = ((DataTable)_dataSource); - } - - DataBindToDataTable(dataTable); - } - else if (_dataSource is IEnumerable) - { - DataBindToEnumerable((IEnumerable)_dataSource); - } - else - { - throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); - } - - // X_Items属性不是ServerAjaxProperty,所以只在页面第一次加载时判断是否改变 - if (!Page.IsPostBack) - { - XState.AddModifiedProperty("X_Items"); - } - } - } - - /// <summary> - /// 绑定到数据表 - /// </summary> - /// <param name="dataTable"></param> - private void DataBindToDataTable(DataTable dataTable) - { - int startIndex = 0; - int endIndex = Int32.MaxValue; - for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) - { - DataRow row = dataTable.Rows[i]; - Items.Add(CreateCheckItem(row)); - } - } - - /// <summary> - /// 绑定到可枚举列表 - /// </summary> - /// <param name="enumerable"></param> - private void DataBindToEnumerable(IEnumerable enumerable) - { - #region old code - //int startIndex = 0; - //int endIndex = Int32.MaxValue; - - //IEnumerator enumerator = enumerable.GetEnumerator(); - - //// 定位开始位置 - //enumerator.Reset(); - //enumerator.MoveNext(); - - //int count = 0; - - //// skip some items? - //while (count < startIndex) - //{ - // enumerator.MoveNext(); - // count++; - //} - - //try - //{ - // if (enumerator.Current == null) - // { - // return; - // } - //} - //catch - //{ - // return; - //} - - //while (enumerator.Current != null && count < endIndex) - //{ - // object currentObject = enumerator.Current; - - // CheckItem item = new CheckItem(); - - // if (currentObject is string) - // { - // item.Text = currentObject.ToString(); - // item.Value = currentObject.ToString(); - // } - // else - // { - // // Load item - // if (DataTextField != "") - // { - // item.Text = GetPropertyValue(currentObject, DataTextField); - // } - // else - // { - // item.Text = currentObject.ToString(); - // } - - // if (DataValueField != "") - // { - // item.Value = GetPropertyValue(currentObject, DataValueField); - // } - // else - // { - // item.Value = currentObject.ToString(); - // } - - // } - - // Items.Add(item); - - // if (!enumerator.MoveNext()) - // { - // break; - // } - - // count++; - //} - #endregion - - IEnumerator enumerator = enumerable.GetEnumerator(); - while (enumerator.MoveNext()) - { - object currentObject = enumerator.Current; - Items.Add(CreateCheckItem(currentObject)); - } - } - - private CheckItem CreateCheckItem(Object obj) - { - CheckItem item = new CheckItem(); - if (obj is string) - { - item.Text = obj.ToString(); - item.Value = obj.ToString(); - } - else - { - if (!String.IsNullOrEmpty(DataTextField)) - { - if (!String.IsNullOrEmpty(DataTextFormatString)) - { - item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); - } - else - { - item.Text = GetPropertyValue(obj, DataTextField); - } - } - else - { - item.Text = obj.ToString(); - } - - if (!String.IsNullOrEmpty(DataValueField)) - { - item.Value = GetPropertyValue(obj, DataValueField); - } - else - { - item.Value = obj.ToString(); - } - } - return item; - } - - - - /// <summary> - /// 取得属性值 - /// </summary> - /// <param name="obj"></param> - /// <param name="propertyName"></param> - private string GetPropertyValue(object obj, string propertyName) - { - object result = null; - - result = ObjectUtil.GetPropertyValue(obj, propertyName); - - return result == null ? String.Empty : result.ToString(); - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - //List<string> selectedValues = new List<string>(); - //for (int i = 0, count = Items.Count; i < count; i++) - //{ - // if (!String.IsNullOrEmpty(postCollection[postDataKey + "_" + i.ToString()])) - // { - // CheckItem item = Items[i]; - // selectedValues.Add(item.Value); - // } - //} - //string[] selectedValueArray = selectedValues.ToArray(); - - string[] selectedValueArray = StringUtil.GetStringListFromString(postCollection[SelectedValueArrayHiddenFieldID]).ToArray(); - if (!StringUtil.CompareStringArray(selectedValueArray, SelectedValueArray)) - { - SelectedValueArray = selectedValueArray; - XState.BackupPostDataProperty("SelectedValueArray"); - return true; - } - - return false; - } - - private object _handlerKey = new object(); - - /// <summary> - /// 选中项改变事件(需要启用AutoPostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("选中项改变事件(需要启用AutoPostBack)")] - public event EventHandler SelectedIndexChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发选中项改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnSelectedIndexChanged(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public virtual void RaisePostDataChangedEvent() - { - OnSelectedIndexChanged(EventArgs.Empty); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckBoxList.cs + * CreatedOn: 2012-01-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Data; +using System.Collections; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.ComponentModel.Design; + + +namespace FineUI +{ + /// <summary> + /// 复选框列表控件 + /// </summary> + [Designer("FineUI.Design.CheckBoxListDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:CheckBoxList runat=server></{0}:CheckBoxList>")] + [ToolboxBitmap(typeof(CheckBoxList), "toolbox.CheckBoxList.bmp")] + [Description("复选框列表控件")] + [ParseChildren(true, DefaultProperty = "Items")] + [PersistChildren(false)] + [DefaultEvent("SelectedIndexChanged")] + public class CheckBoxList : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public CheckBoxList() + { + AddServerAjaxProperties("F_Items"); + AddClientAjaxProperties("SelectedValueArray"); + + AddGzippedAjaxProperties("F_Items"); + } + + #endregion + + #region Properties + + #region old code + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示浅色的背景色")] + //public virtual bool EnableLightBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableLightBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableLightBackgroundColor"] = value; + // } + //} + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示背景色")] + //public virtual bool EnableBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableBackgroundColor"] = value; + // } + //} + + + #endregion + + /// <summary> + /// 是否必填项 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("是否必填项")] + public bool Required + { + get + { + object obj = FState["Required"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Required"] = value; + } + } + + /// <summary> + /// 为空时提示信息 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("为空时提示信息")] + public string RequiredMessage + { + get + { + object obj = FState["RequiredMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RequiredMessage"] = value; + } + } + + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + ///// <summary> + ///// 是否选中 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否选中")] + //public bool Checked + //{ + // get + // { + // object obj = FState["Checked"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Checked"] = value; + // } + //} + + /// <summary> + /// 渲染成几列 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("渲染成几列")] + public int ColumnNumber + { + get + { + object obj = FState["ColumnNumber"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ColumnNumber"] = value; + } + } + + /// <summary> + /// 是否按照纵向顺序渲染 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否按照纵向顺序渲染")] + public bool ColumnVertical + { + get + { + object obj = FState["ColumnVertical"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ColumnVertical"] = value; + } + } + + #endregion + + #region Data Properties + + /// <summary> + /// 显示文本的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的数据字段")] + public string DataTextField + { + get + { + object obj = FState["DataTextField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextField"] = value; + } + } + + /// <summary> + /// 显示文本的格式化字符串 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的格式化字符串")] + public string DataTextFormatString + { + get + { + object obj = FState["DataTextFormatString"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextFormatString"] = value; + } + } + + /// <summary> + /// 显示值的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示值的数据字段")] + public string DataValueField + { + get + { + object obj = FState["DataValueField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataValueField"] = value; + } + } + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Description("数据源")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region SelectedIndexArray/SelectedValueArray/SelectedItemArray + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string[] SelectedValueArray + { + get + { + List<string> selectedValues = new List<string>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + CheckItem item = Items[i]; + if (item.Selected) + { + selectedValues.Add(item.Value); + } + } + return selectedValues.ToArray(); + } + set + { + List<string> selectedValues = new List<string>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + CheckItem item = Items[i]; + if (selectedValues.Contains(item.Value)) + { + item.Selected = true; + } + else + { + item.Selected = false; + } + } + } + } + + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedIndexArray + { + get + { + List<int> selectedIndexs = new List<int>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + selectedIndexs.Add(i); + } + } + return selectedIndexs.ToArray(); + } + set + { + List<int> selectedIndexs = new List<int>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (selectedIndexs.Contains(i)) + { + Items[i].Selected = true; + } + else + { + Items[i].Selected = false; + } + } + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public CheckItem[] SelectedItemArray + { + get + { + List<CheckItem> selectedItems = new List<CheckItem>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + CheckItem item = Items[i]; + if (item.Selected) + { + selectedItems.Add(item); + } + } + return selectedItems.ToArray(); + } + } + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string SelectedValueArrayHiddenFieldID + { + get + { + return String.Format("{0}_SelectedValueArray", ClientID); + } + } + + #endregion + + #region Items + + private CheckItemCollection _items; + + /// <summary> + /// 复选框集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual CheckItemCollection Items + { + get + { + if (_items == null) + { + _items = new CheckItemCollection(); + } + return _items; + } + } + + #endregion + + #region X Properties + + /// <summary> + /// 保存的复选框数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Items + { + get + { + JArray ja = new JArray(); + foreach (CheckItem item in Items) + { + JArray ja2 = new JArray(); + ja2.Add(item.Text); + ja2.Add(item.Value); + ja.Add(ja2); + } + return ja; + } + set + { + // 和DropDownList的情况相同,清空前备份选中项 + string[] selectedValues = SelectedValueArray; + + Items.Clear(); + foreach (JArray ja2 in value) + { + CheckItem item = new CheckItem(); + item.Text = ja2[0].Value<string>(); //ja2.getString(0); + item.Value = ja2[1].Value<string>(); //ja2.getString(1); + Items.Add(item); + } + + // 恢复选中项 + SelectedValueArray = selectedValues; + } + } + + #endregion + + #region old code + + //private int itemsHashCode; + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // itemsHashCode = XItemsToState().ToString().GetHashCode(); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // // Items has been changed in server-side code after onInit. + // if (itemsHashCode != XItemsToState().ToString().GetHashCode()) + // { + // FState.AddModifiedProperty("F_Items"); + // } + //} + + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // if (property == "F_Items") + // { + // XItemsFromState(state.getJArray(property)); + // } + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // if (property == "F_Items") + // { + // state.put(property, XItemsToState()); + // } + //} + + //private JArray XItemsToState() + //{ + // JArray ja = new JArray(); + // foreach (CheckItem item in Items) + // { + // JArray ja2 = new JArray(); + // ja2.Add(item.Text); + // ja2.Add(item.Value); + // ja.Add(ja2); + // } + // return ja; + //} + + //private void XItemsFromState(JArray ja) + //{ + // foreach (JArray ja2 in ja.getArrayList()) + // { + // CheckItem item = new CheckItem(); + // item.Text = ja2.getString(0); + // item.Value = ja2.getString(1); + // Items.Add(item); + // } + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + bool dataReloaded = false; + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("F_Items")) + { + sb.AppendFormat("{0}.f_reloadData('{1}');", XID, UniqueID); //, GetItemsJArray().ToString(Formatting.None)); + + // 注意,在x_reloadData中重新创建了列表实例,所以要重新赋值 + sb.AppendFormat("{0}=F('{1}');", XID, ClientID); + + //if (Items.Count == 0) + //{ + // sb.AppendFormat("{0}.f_toBeDeleted();", XID); + //} + + dataReloaded = true; + } + + // 基于 extjs 的实现,如果数据重新加载了,则客户端会重新初始化控件示例 + if (!dataReloaded) + { + if (PropertyModified("SelectedValueArray")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Items 和 SelectedValue 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Items"); + FState.AddModifiedProperty("SelectedValueArray"); + + base.OnFirstPreRender(); + + #region options + + if (Required) + { + OB.AddProperty("allowBlank", false); + if (!String.IsNullOrEmpty(RequiredMessage)) + { + OB.AddProperty("blankText", RequiredMessage); + } + } + + + OB.RemoveProperty("name"); + + if (ColumnNumber <= 0) + { + OB.AddProperty("columns", "auto"); + } + else + { + OB.AddProperty("columns", ColumnNumber); + } + + if (ColumnVertical) + { + OB.AddProperty("vertical", true); + } + + //OB.AddProperty("name", UniqueID); + + #endregion + + #region Items + /* + string xstateName = String.Format("{0}_xstate", XID); + string xitemsName = String.Format("{0}_xitems", XID); + string hasDataName = xstateName; + + string xstate = OB.GetProperty("f_state"); + OB.AddProperty("f_state", xstateName, true); + + string jsState = String.Format("var {0}={1};", xstateName, xstate); + + if (!FState.ModifiedProperties.Contains("F_Items")) + { + xstate = ConvertPropertiesToJObject(new List<string> { "F_Items", "SelectedValueArray" }).ToString(Formatting.None); + jsState += String.Format("var {0}={1};", xitemsName, xstate); + hasDataName = xitemsName; + } + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},false)", UniqueID, hasDataName), true); + */ + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},false)", UniqueID, GetFStateScriptID()), true); + + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + // 道理和RadioButtonList类似。 + //OB.Listeners.AddProperty("change", String.Format("function(group,checkedArray){{if(typeof(checkedArray)!=='boolean'){{{0}}}}}", GetPostBackEventReference()), true); + AddListener("change", String.Format("if(typeof(checkedArray)!=='boolean'){{{0}}}", GetPostBackEventReference()), "group", "checkedArray"); + } + /* + if (!String.IsNullOrEmpty(SelectedValue)) + { + OB.AddProperty("value", SelectedValue); + } + */ + + #region old code + //string autoPostBackScript = String.Empty; + //if (AutoPostBack) + //{ + // //// change 事件只有在失去焦点时才触发,是不及时的 + // //OB.Listeners.RemoveProperty(OptionName.Change); + // //OB.Listeners.AddProperty(OptionName.Check, String.Format("function(newValue,oldValue){{\r\nbox_pageStateChange();alert(newValue+':'+oldValue);\r\n}}"), true); + + // string selectScript = String.Format("function(newValue,oldValue){{\r\nalert(newValue+':'+oldValue);\r\n}}"); + // selectScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientID, OptionName.Check, selectScript); + + // autoPostBackScript += selectScript; + //} + + //string backgroundColorStyle = String.Empty; + //if (EnableBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetDefaultBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + //else if (EnableLightBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetLightBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + + //if (!String.IsNullOrEmpty(backgroundColorStyle)) + //{ + // string backgroundColorScript = String.Format("Ext.each(X.{0}.el.query('.x-panel-body'),function(item,index){{Ext.get(item).setStyle('background-color','{1}');}});", ClientJavascriptID, backgroundColorStyle); + + // string renderScript = "(function(){" + backgroundColorScript + "}).defer(20);"; + // OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); + //} + + #endregion + + #endregion + + + // EXTJS的BUG,不支持默认Readonly=true的情况,需要自己修正 + if (Readonly) + { + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.setReadOnly(true);", "cmp"), true); + AddListener("render", "cmp.setReadOnly(true);", "cmp"); + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.CheckboxGroup',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #region old code + + //private JArray GetItemsJArray() + //{ + // JArray ja = new JArray(); + // int itemIndex = 0; + // foreach (CheckItem item in Items) + // { + // JObject jo = new JObject(); + // jo.Add("inputValue", item.Value); + // jo.Add("boxLabel", item.Text); + // jo.Add("name", UniqueID + "_" + itemIndex.ToString()); + // if (item.Selected) + // { + // jo.Add("checked", true); + // } + + // ja.Add(jo); + + // itemIndex++; + // } + + // return ja; + //} + + #endregion + + #endregion + + #region DataBind + + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + // 1. 首先清空 Items 属性 + Items.Clear(); + + if (_dataSource != null) + { + // 2. 绑定到数据源 + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + + //// F_Items属性不是ServerAjaxProperty,所以只在页面第一次加载时判断是否改变 + //if (!Page.IsPostBack) + //{ + // FState.AddModifiedProperty("F_Items"); + //} + } + + base.DataBind(); + } + + /// <summary> + /// 绑定到数据表 + /// </summary> + /// <param name="dataTable"></param> + private void DataBindToDataTable(DataTable dataTable) + { + int startIndex = 0; + int endIndex = Int32.MaxValue; + for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) + { + DataRow row = dataTable.Rows[i]; + Items.Add(CreateCheckItem(row)); + } + } + + /// <summary> + /// 绑定到可枚举列表 + /// </summary> + /// <param name="enumerable"></param> + private void DataBindToEnumerable(IEnumerable enumerable) + { + #region old code + //int startIndex = 0; + //int endIndex = Int32.MaxValue; + + //IEnumerator enumerator = enumerable.GetEnumerator(); + + //// 定位开始位置 + //enumerator.Reset(); + //enumerator.MoveNext(); + + //int count = 0; + + //// skip some items? + //while (count < startIndex) + //{ + // enumerator.MoveNext(); + // count++; + //} + + //try + //{ + // if (enumerator.Current == null) + // { + // return; + // } + //} + //catch + //{ + // return; + //} + + //while (enumerator.Current != null && count < endIndex) + //{ + // object currentObject = enumerator.Current; + + // CheckItem item = new CheckItem(); + + // if (currentObject is string) + // { + // item.Text = currentObject.ToString(); + // item.Value = currentObject.ToString(); + // } + // else + // { + // // Load item + // if (DataTextField != "") + // { + // item.Text = GetPropertyValue(currentObject, DataTextField); + // } + // else + // { + // item.Text = currentObject.ToString(); + // } + + // if (DataValueField != "") + // { + // item.Value = GetPropertyValue(currentObject, DataValueField); + // } + // else + // { + // item.Value = currentObject.ToString(); + // } + + // } + + // Items.Add(item); + + // if (!enumerator.MoveNext()) + // { + // break; + // } + + // count++; + //} + #endregion + + IEnumerator enumerator = enumerable.GetEnumerator(); + while (enumerator.MoveNext()) + { + object currentObject = enumerator.Current; + Items.Add(CreateCheckItem(currentObject)); + } + } + + private CheckItem CreateCheckItem(Object obj) + { + CheckItem item = new CheckItem(); + if (obj is string) + { + item.Text = obj.ToString(); + item.Value = obj.ToString(); + } + else + { + if (!String.IsNullOrEmpty(DataTextField)) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); + } + else + { + item.Text = GetPropertyValue(obj, DataTextField); + } + } + else + { + item.Text = obj.ToString(); + } + + if (!String.IsNullOrEmpty(DataValueField)) + { + item.Value = GetPropertyValue(obj, DataValueField); + } + else + { + item.Value = obj.ToString(); + } + } + return item; + } + + + + /// <summary> + /// 取得属性值 + /// </summary> + /// <param name="obj"></param> + /// <param name="propertyName"></param> + private string GetPropertyValue(object obj, string propertyName) + { + object result = null; + + result = ObjectUtil.GetPropertyValue(obj, propertyName); + + return result == null ? String.Empty : result.ToString(); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + //List<string> selectedValues = new List<string>(); + //for (int i = 0, count = Items.Count; i < count; i++) + //{ + // if (!String.IsNullOrEmpty(postCollection[postDataKey + "_" + i.ToString()])) + // { + // CheckItem item = Items[i]; + // selectedValues.Add(item.Value); + // } + //} + //string[] selectedValueArray = selectedValues.ToArray(); + + string[] selectedValueArray = StringUtil.GetStringListFromString(postCollection[SelectedValueArrayHiddenFieldID]).ToArray(); + if (!StringUtil.CompareStringArray(selectedValueArray, SelectedValueArray)) + { + SelectedValueArray = selectedValueArray; + FState.BackupPostDataProperty("SelectedValueArray"); + return true; + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public virtual void RaisePostDataChangedEvent() + { + OnSelectedIndexChanged(EventArgs.Empty); + } + + private object _handlerKey = new object(); + + /// <summary> + /// 选中项改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选中项改变事件(需要启用AutoPostBack)")] + public event EventHandler SelectedIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选中项改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSelectedIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + + + #endregion + } +} diff --git a/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs b/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs index ecaea9b..c875804 100644 --- a/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs +++ b/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs @@ -1,140 +1,153 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: CheckItem.cs - * CreatedOn: 2012-01-22 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; -using System.Collections; - - -namespace FineUI -{ - /// <summary> - /// 复选框列表项 - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true, DefaultProperty = "Text")] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class CheckItem - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public CheckItem() - { - - } - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="text"></param> - /// <param name="value"></param> - public CheckItem(string text, string value) - { - Text = text; - Value = value; - } - - #endregion - - #region Properties - - private bool _selected = false; - /// <summary> - /// 是否选中 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("是否选中")] - [DefaultValue(false)] - [NotifyParentProperty(true)] - public bool Selected - { - get - { - return _selected; - } - set - { - _selected = value; - } - } - - private string _text = String.Empty; - /// <summary> - /// 显示的文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示的文本")] - [NotifyParentProperty(true)] - public string Text - { - get - { - return _text; - } - set - { - _text = value; - } - } - - private string _value = String.Empty; - /// <summary> - /// 值 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("值")] - [NotifyParentProperty(true)] - public string Value - { - get - { - return _value; - } - set - { - _value = value; - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckItem.cs + * CreatedOn: 2012-01-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// <summary> + /// 复选框列表项 + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Text")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class CheckItem + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public CheckItem() + { + + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + public CheckItem(string text, string value) + { + Text = text; + Value = value; + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <param name="selected">是否选中</param> + public CheckItem(string text, string value, bool selected) + { + Text = text; + Value = value; + Selected = selected; + } + + #endregion + + #region Properties + + private bool _selected = false; + /// <summary> + /// 是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("是否选中")] + [DefaultValue(false)] + [NotifyParentProperty(true)] + public bool Selected + { + get + { + return _selected; + } + set + { + _selected = value; + } + } + + private string _text = String.Empty; + /// <summary> + /// 显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示的文本")] + [NotifyParentProperty(true)] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _value = String.Empty; + /// <summary> + /// 值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("值")] + [NotifyParentProperty(true)] + public string Value + { + get + { + return _value; + } + set + { + _value = value; + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs b/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs index 71ba363..22d09d1 100644 --- a/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs +++ b/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs @@ -1,117 +1,117 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: CheckItemCollection.cs - * CreatedOn: 2012-01-22 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// <summary> - /// 复选项集合 - /// </summary> - public class CheckItemCollection : Collection<CheckItem> - { - /// <summary> - /// 通过文本查找复选项 - /// </summary> - /// <param name="text">文本</param> - /// <returns>复选项</returns> - public CheckItem FindByText(string text) - { - return FindByText(text, false); - } - - /// <summary> - /// 通过文本查找复选项 - /// </summary> - /// <param name="text">文本</param> - /// <param name="stripHtml">是否去除HTML标签</param> - /// <returns>复选项</returns> - public CheckItem FindByText(string text, bool stripHtml) - { - IEnumerator enumerator = GetEnumerator(); - - while (enumerator.MoveNext()) - { - CheckItem item = enumerator.Current as CheckItem; - - if (item != null) - { - string itemText = item.Text; - if (stripHtml) - { - itemText = StringUtil.StripHtml(itemText); - } - if (itemText == text) - { - return item; - } - } - } - - return null; - } - - /// <summary> - /// 通过值查找复选项 - /// </summary> - /// <param name="value">值</param> - /// <returns>复选项</returns> - public CheckItem FindByValue(string value) - { - IEnumerator enumerator = GetEnumerator(); - - while (enumerator.MoveNext()) - { - CheckItem item = enumerator.Current as CheckItem; - - if (item != null && item.Value == value) - { - return item; - } - } - - return null; - } - - /// <summary> - /// 添加复选项 - /// </summary> - /// <param name="text">文本</param> - /// <param name="value">值</param> - /// <returns>新元素的插入位置</returns> - public int Add(string text, string value) - { - CheckItem item = new CheckItem(text, value); - - return ((IList)this).Add(item); - } - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckItemCollection.cs + * CreatedOn: 2012-01-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 复选项集合 + /// </summary> + public class CheckItemCollection : Collection<CheckItem> + { + /// <summary> + /// 通过文本查找复选项 + /// </summary> + /// <param name="text">文本</param> + /// <returns>复选项</returns> + public CheckItem FindByText(string text) + { + return FindByText(text, false); + } + + /// <summary> + /// 通过文本查找复选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="stripHtml">是否去除HTML标签</param> + /// <returns>复选项</returns> + public CheckItem FindByText(string text, bool stripHtml) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + CheckItem item = enumerator.Current as CheckItem; + + if (item != null) + { + string itemText = item.Text; + if (stripHtml) + { + itemText = StringUtil.StripHtml(itemText); + } + if (itemText == text) + { + return item; + } + } + } + + return null; + } + + /// <summary> + /// 通过值查找复选项 + /// </summary> + /// <param name="value">值</param> + /// <returns>复选项</returns> + public CheckItem FindByValue(string value) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + CheckItem item = enumerator.Current as CheckItem; + + if (item != null && item.Value == value) + { + return item; + } + } + + return null; + } + + /// <summary> + /// 添加复选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <returns>新元素的插入位置</returns> + public int Add(string text, string value) + { + CheckItem item = new CheckItem(text, value); + + return ((IList)this).Add(item); + } + + + } +} diff --git a/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs b/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs index 562affb..23727c2 100644 --- a/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs +++ b/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs @@ -1,472 +1,474 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: HtmlEditor.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * ->2008-04-28 改名为 HtmlEditor - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; -using Newtonsoft.Json.Linq; - -namespace FineUI -{ - /// <summary> - /// HTML编辑框控件 - /// </summary> - [Designer("FineUI.Design.HtmlEditorDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:HtmlEditor Label=\"Label\" Text=\"\" Height=\"250px\" runat=server></{0}:HtmlEditor>")] - [ToolboxBitmap(typeof(HtmlEditor), "toolbox.HtmlEditor.bmp")] - [Description("HTML编辑框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class HtmlEditor : Field, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public HtmlEditor() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("Text"); - - AddGzippedAjaxProperties("Text"); - } - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool Enabled - { - get - { - return true; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool Readonly - { - get - { - return false; - } - } - - #endregion - - #region Properties - - /// <summary> - /// [AJAX属性]文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - - /// <summary> - /// 启用左右定位 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用左右定位")] - public bool EnableAlignments - { - get - { - object obj = XState["EnableAlignments"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableAlignments"] = value; - } - } - - /// <summary> - /// 启用颜色 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用颜色")] - public bool EnableColors - { - get - { - object obj = XState["EnableColors"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableColors"] = value; - } - } - - - /// <summary> - /// 启用字体 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用字体")] - public bool EnableFont - { - get - { - object obj = XState["EnableFont"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableFont"] = value; - } - } - - - /// <summary> - /// 启用调整字体大小 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用调整字体大小")] - public bool EnableFontSize - { - get - { - object obj = XState["EnableFontSize"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableFontSize"] = value; - } - } - - - /// <summary> - /// 启用格式化 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用格式化")] - public bool EnableFormat - { - get - { - object obj = XState["EnableFormat"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableFormat"] = value; - } - } - - - /// <summary> - /// 启用创建链接 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用创建链接")] - public bool EnableLinks - { - get - { - object obj = XState["EnableLinks"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableLinks"] = value; - } - } - - - /// <summary> - /// 启用创建列表 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用创建列表")] - public bool EnableLists - { - get - { - object obj = XState["EnableLists"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableLists"] = value; - } - } - - - /// <summary> - /// 启用源码视图 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用源码视图")] - public bool EnableSourceEdit - { - get - { - object obj = XState["EnableSourceEdit"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableSourceEdit"] = value; - } - } - - - /// <summary> - /// 字体列表 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("字体列表")] - //[Editor("System.Web.UI.Design.WebControls.DataFieldEditor", typeof(UITypeEditor))] - [TypeConverter(typeof(StringArrayConverter))] - public string[] FontFamilies - { - get - { - object obj = XState["FontFamilies"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["FontFamilies"] = value; - } - } - - /// <summary> - /// 启用中文字体 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用中文字体")] - public bool EnableChineseFont - { - get - { - object obj = XState["EnableChineseFont"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableChineseFont"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Text")) - { - sb.AppendFormat("{0}.x_setValue();", XID); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - if (!EnableAlignments) OB.AddProperty("enableAlignments", false); - if (!EnableColors) OB.AddProperty("enableColors", false); - if (!EnableFont) OB.AddProperty("enableFont", false); - if (!EnableFontSize) OB.AddProperty("enableFontSize", false); - if (!EnableFormat) OB.AddProperty("enableFormat", false); - if (!EnableLinks) OB.AddProperty("enableLinks", false); - if (!EnableLists) OB.AddProperty("enableLists", false); - if (!EnableSourceEdit) OB.AddProperty("enableSourceEdit", false); - - #region Fonts - - string[] fonts = null; - if (EnableChineseFont) - { - fonts = new string[] { "宋体", "黑体", "仿宋", "楷体", "隶书", "幼圆", "Arial", "Courier New", "Tahoma", "Times New Roman", "Verdana" }; - } - else if (FontFamilies != null) - { - fonts = FontFamilies; - } - - if (fonts != null && fonts.Length > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (string fontName in fonts) - { - ab.AddProperty(fontName); - } - - OB.AddProperty("fontFamilies", ab); - } - - #endregion - - if (!String.IsNullOrEmpty(Text)) - { - OB.AddProperty("value", Text); - } - - - // 如果Text属性存在于XState中,则不要重复设置value属性,而是在render事件中使用XState的值 - if (XState.ModifiedProperties.Contains("Text")) - { - //OB.RemoveProperty("value"); - //OB.Listeners.AddProperty("initialize", JsHelper.GetFunction("cmp.x_setValue();", "cmp"), true); - OB.AddProperty("value", String.Format("{0}.Text", GetXStateScriptID()), true); - - } - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.HtmlEditor',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// 回发到服务器,判断控件的属性是否变化, - /// 如果变化返回true,则RaisePostDataChangedEvent - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - string postValue = postCollection[UniqueID]; - - //// Extjs4.0.1 没能正确的设置 htmleditor 的提交隐藏字段,这个在更高版本中可能要删除 - //string postValue = postCollection[ClientID + "_Text"]; - - if (postValue != null && Text != postValue) - { - Text = postValue; - XState.BackupPostDataProperty("Text"); - return true; - } - else - { - return false; - } - } - - /// <summary> - /// 文本改变事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("文本改变事件")] - public event EventHandler TextChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - private object _handlerKey = new object(); - - /// <summary> - /// 触发文本改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnTextChanged(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - - if (handler != null) - { - handler(this, e); - } - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public void RaisePostDataChangedEvent() - { - OnTextChanged(EventArgs.Empty); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: HtmlEditor.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * ->2008-04-28 改名为 HtmlEditor + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// HTML编辑框控件 + /// </summary> + [Designer("FineUI.Design.HtmlEditorDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:HtmlEditor Label=\"Label\" Text=\"\" Height=\"250px\" runat=server></{0}:HtmlEditor>")] + [ToolboxBitmap(typeof(HtmlEditor), "toolbox.HtmlEditor.bmp")] + [Description("HTML编辑框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class HtmlEditor : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public HtmlEditor() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Text"); + + AddGzippedAjaxProperties("Text"); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Enabled + { + get + { + return true; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Readonly + { + get + { + return false; + } + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + /// <summary> + /// 启用左右定位 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用左右定位")] + public bool EnableAlignments + { + get + { + object obj = FState["EnableAlignments"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableAlignments"] = value; + } + } + + /// <summary> + /// 启用颜色 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用颜色")] + public bool EnableColors + { + get + { + object obj = FState["EnableColors"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableColors"] = value; + } + } + + + /// <summary> + /// 启用字体 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用字体")] + public bool EnableFont + { + get + { + object obj = FState["EnableFont"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFont"] = value; + } + } + + + /// <summary> + /// 启用调整字体大小 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用调整字体大小")] + public bool EnableFontSize + { + get + { + object obj = FState["EnableFontSize"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFontSize"] = value; + } + } + + + /// <summary> + /// 启用格式化 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用格式化")] + public bool EnableFormat + { + get + { + object obj = FState["EnableFormat"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFormat"] = value; + } + } + + + /// <summary> + /// 启用创建链接 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用创建链接")] + public bool EnableLinks + { + get + { + object obj = FState["EnableLinks"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableLinks"] = value; + } + } + + + /// <summary> + /// 启用创建列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用创建列表")] + public bool EnableLists + { + get + { + object obj = FState["EnableLists"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableLists"] = value; + } + } + + + /// <summary> + /// 启用源码视图 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用源码视图")] + public bool EnableSourceEdit + { + get + { + object obj = FState["EnableSourceEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableSourceEdit"] = value; + } + } + + + /// <summary> + /// 字体列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("字体列表")] + //[Editor("System.Web.UI.Design.WebControls.DataFieldEditor", typeof(UITypeEditor))] + [TypeConverter(typeof(StringArrayConverter))] + public string[] FontFamilies + { + get + { + object obj = FState["FontFamilies"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["FontFamilies"] = value; + } + } + + /// <summary> + /// 启用中文字体 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用中文字体")] + public bool EnableChineseFont + { + get + { + object obj = FState["EnableChineseFont"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableChineseFont"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (!EnableAlignments) OB.AddProperty("enableAlignments", false); + if (!EnableColors) OB.AddProperty("enableColors", false); + if (!EnableFont) OB.AddProperty("enableFont", false); + if (!EnableFontSize) OB.AddProperty("enableFontSize", false); + if (!EnableFormat) OB.AddProperty("enableFormat", false); + if (!EnableLinks) OB.AddProperty("enableLinks", false); + if (!EnableLists) OB.AddProperty("enableLists", false); + if (!EnableSourceEdit) OB.AddProperty("enableSourceEdit", false); + + #region Fonts + + string[] fonts = null; + if (EnableChineseFont) + { + fonts = new string[] { "宋体", "黑体", "仿宋", "楷体", "隶书", "幼圆", "Arial", "Courier New", "Tahoma", "Times New Roman", "Verdana" }; + } + else if (FontFamilies != null) + { + fonts = FontFamilies; + } + + if (fonts != null && fonts.Length > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (string fontName in fonts) + { + ab.AddProperty(fontName); + } + + OB.AddProperty("fontFamilies", ab); + } + + #endregion + + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("value", Text); + } + + + // 如果Text属性存在于FState中,则不要重复设置value属性,而是在render事件中使用FState的值 + if (FState.ModifiedProperties.Contains("Text")) + { + //OB.RemoveProperty("value"); + //OB.Listeners.AddProperty("initialize", JsHelper.GetFunction("cmp.f_setValue();", "cmp"), true); + OB.AddProperty("value", String.Format("{0}.Text", GetFStateScriptID()), true); + + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.HtmlEditor',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// 回发到服务器,判断控件的属性是否变化, + /// 如果变化返回true,则RaisePostDataChangedEvent + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postValue = postCollection[UniqueID]; + + //// Extjs4.0.1 没能正确的设置 htmleditor 的提交隐藏字段,这个在更高版本中可能要删除 + //string postValue = postCollection[ClientID + "_Text"]; + + if (postValue != null && Text != postValue) + { + Text = postValue; + FState.BackupPostDataProperty("Text"); + return true; + } + else + { + return false; + } + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnTextChanged(EventArgs.Empty); + } + + /// <summary> + /// 文本改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("文本改变事件")] + public event EventHandler TextChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + private object _handlerKey = new object(); + + /// <summary> + /// 触发文本改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTextChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + + if (handler != null) + { + handler(this, e); + } + } + + + + #endregion + } +} diff --git a/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs b/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs index 4efa0c4..b24591a 100644 --- a/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs +++ b/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs @@ -1,279 +1,279 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: HyperLink.cs - * CreatedOn: 2008-06-09 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 链接控件 - /// </summary> - [Designer("FineUI.Design.HyperLinkDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:HyperLink Text=\"HyperLink\" Label=\"Label\" NavigateUrl=\"\" Target=\"_blank\" runat=server></{0}:HyperLink>")] - [ToolboxBitmap(typeof(HyperLink), "toolbox.HyperLink.bmp")] - [Description("链接控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class HyperLink : TooltipField - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public HyperLink() - { - AddServerAjaxProperties("NavigateUrl", "Target", "OnClientClick", "Text"); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - ///// <summary> - ///// 不支持此属性 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public override bool Enabled - //{ - // get - // { - // return base.Enabled; - // } - //} - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override short? TabIndex - { - get - { - return base.TabIndex; - } - } - - #endregion - - #region Properties - - /// <summary> - /// [AJAX属性]文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - - /// <summary> - /// [AJAX属性]点击链接时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]点击链接时需要执行的客户端脚本")] - public string OnClientClick - { - get - { - object obj = XState["OnClientClick"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientClick"] = value; - } - } - - /// <summary> - /// [AJAX属性]链接地址 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]链接地址")] - public string NavigateUrl - { - get - { - object obj = XState["NavigateUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["NavigateUrl"] = value; - } - } - - /// <summary> - /// [AJAX属性]链接目标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]链接目标")] - public string Target - { - get - { - object obj = XState["Target"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Target"] = value; - } - } - - /// <summary> - /// 是否对文本编码 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否对文本编码")] - public virtual bool EncodeText - { - get - { - object obj = XState["EncodeText"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EncodeText"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - if (PropertyModified("NavigateUrl", "Target", "OnClientClick", "Text", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Enabled")) - { - sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - OB.AddProperty("htmlEncode", false); - - OB.AddProperty("value", GetInnerHtml()); - - //AddExtraStyle("display", "inline"); - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - private string GetInnerHtml() - { - HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("a"); - - if (Enabled) - { - if (!String.IsNullOrEmpty(NavigateUrl)) - { - if (NavigateUrl == "#") - { - htmlBuilder.SetProperty("href", "#"); - } - else - { - htmlBuilder.SetProperty("href", ResolveUrl(NavigateUrl)); - } - } - - if (!String.IsNullOrEmpty(Target)) - { - htmlBuilder.SetProperty("target", Target); - } - - if (!String.IsNullOrEmpty(OnClientClick)) - { - htmlBuilder.SetProperty("onclick", "javascript:" + OnClientClick); - } - } - else - { - htmlBuilder.SetProperty("class", "x-item-disabled"); - htmlBuilder.SetProperty("disabled", "disabled"); - } - - ResolveTooltip(htmlBuilder); - - ResolveAttribuites(htmlBuilder); - - string text = Text; - if (EncodeText) - { - text = HttpUtility.HtmlEncode(text); - } - htmlBuilder.InnerProperty = text; - - return htmlBuilder.ToString(); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: HyperLink.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 链接控件 + /// </summary> + [Designer("FineUI.Design.HyperLinkDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:HyperLink Text=\"HyperLink\" Label=\"Label\" NavigateUrl=\"\" Target=\"_blank\" runat=server></{0}:HyperLink>")] + [ToolboxBitmap(typeof(HyperLink), "toolbox.HyperLink.bmp")] + [Description("链接控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class HyperLink : TooltipField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public HyperLink() + { + AddServerAjaxProperties("NavigateUrl", "Target", "OnClientClick", "Text"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool Enabled + //{ + // get + // { + // return base.Enabled; + // } + //} + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override short? TabIndex + { + get + { + return base.TabIndex; + } + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + /// <summary> + /// [AJAX属性]点击链接时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]点击链接时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + /// <summary> + /// [AJAX属性]链接地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]链接地址")] + public string NavigateUrl + { + get + { + object obj = FState["NavigateUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["NavigateUrl"] = value; + } + } + + /// <summary> + /// [AJAX属性]链接目标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]链接目标")] + public string Target + { + get + { + object obj = FState["Target"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Target"] = value; + } + } + + /// <summary> + /// 是否对文本编码 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否对文本编码")] + public virtual bool EncodeText + { + get + { + object obj = FState["EncodeText"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EncodeText"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("NavigateUrl", "Target", "OnClientClick", "Text", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Enabled")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("htmlEncode", false); + + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + private string GetInnerHtml() + { + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("a"); + + if (Enabled) + { + if (!String.IsNullOrEmpty(NavigateUrl)) + { + if (NavigateUrl == "#") + { + htmlBuilder.SetProperty("href", "#"); + } + else + { + htmlBuilder.SetProperty("href", ResolveUrl(NavigateUrl)); + } + } + + if (!String.IsNullOrEmpty(Target)) + { + htmlBuilder.SetProperty("target", Target); + } + + if (!String.IsNullOrEmpty(OnClientClick)) + { + htmlBuilder.SetProperty("onclick", "javascript:" + OnClientClick); + } + } + else + { + htmlBuilder.SetProperty("class", "x-item-disabled"); + htmlBuilder.SetProperty("disabled", "disabled"); + } + + ResolveTooltip(htmlBuilder); + + ResolveAttribuites(htmlBuilder); + + string text = Text; + if (EncodeText) + { + text = HttpUtility.HtmlEncode(text); + } + htmlBuilder.InnerProperty = text; + + return htmlBuilder.ToString(); + } + + #endregion + } +} diff --git a/FineUI/WebControls/Field.Label.Image/Image.cs b/FineUI/WebControls/Field.Label.Image/Image.cs index 9e9ecbb..ce4b0fb 100644 --- a/FineUI/WebControls/Field.Label.Image/Image.cs +++ b/FineUI/WebControls/Field.Label.Image/Image.cs @@ -1,346 +1,346 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Image.cs - * CreatedOn: 2008-07-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 图片控件 - /// </summary> - [Designer("FineUI.Design.ImageDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:Image Label=\"Label\" ImageUrl=\"\" runat=server></{0}:Image>")] - [ToolboxBitmap(typeof(Image), "toolbox.Image.bmp")] - [Description("图片控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Image : TooltipField - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Image() - { - AddServerAjaxProperties("ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt", "Icon"); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool Enabled - { - get - { - return base.Enabled; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override short? TabIndex - { - get - { - return base.TabIndex; - } - } - - #endregion - - #region Properties - - /// <summary> - /// [AJAX属性]链接地址 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]链接地址")] - public string ImageUrl - { - get - { - object obj = XState["ImageUrl"]; - if (obj == null) - { - if (!DesignMode) - { - if (Icon != Icon.None) - { - obj = IconHelper.GetIconUrl(Icon); - } - } - } - return obj == null ? "" : (string)obj; - } - set - { - XState["ImageUrl"] = value; - } - } - - - /// <summary> - /// [AJAX属性]预定义图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Icon.None)] - [Description("[AJAX属性]预定义图标")] - public virtual Icon Icon - { - get - { - object obj = XState["Icon"]; - return obj == null ? Icon.None : (Icon)obj; - } - set - { - XState["Icon"] = value; - } - } - - - /// <summary> - /// [AJAX属性]图片的宽度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "")] - [Description("[AJAX属性]图片的宽度")] - public Unit ImageWidth - { - get - { - object obj = XState["ImageWidth"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["ImageWidth"] = value; - } - } - - - /// <summary> - /// [AJAX属性]图片的高度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "")] - [Description("[AJAX属性]图片的高度")] - public Unit ImageHeight - { - get - { - object obj = XState["ImageHeight"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["ImageHeight"] = value; - } - } - - /// <summary> - /// [AJAX属性]图片的样式类 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]图片的样式类")] - public string ImageCssClass - { - get - { - object obj = XState["ImageCssClass"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ImageCssClass"] = value; - } - } - - /// <summary> - /// [AJAX属性]图片的样式 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]图片的样式")] - public string ImageCssStyle - { - get - { - object obj = XState["ImageCssStyle"]; - return obj == null ? String.Empty : (string)obj; - } - set - { - XState["ImageCssStyle"] = value; - } - } - - /// <summary> - /// [AJAX属性]图片的Alt - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]图片的Alt")] - public string ImageAlt - { - get - { - object obj = XState["ImageAlt"]; - return obj == null ? String.Empty : (string)obj; - } - set - { - XState["ImageAlt"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - if (PropertyModified("ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Icon")) - { - sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - OB.AddProperty("htmlEncode", false); - - OB.AddProperty("value", GetInnerHtml()); - - //AddExtraStyle("display", "inline"); - - #region oldcode - - //if (!String.IsNullOrEmpty(ToolTip)) - //{ - // JsObjectBuilder tooltipBuilder = new JsObjectBuilder(); - // tooltipBuilder.AddProperty("target", String.Format("Ext.get('{0}').child('img')", ClientID), true); - // tooltipBuilder.AddProperty("html", ToolTip); - - // if (!String.IsNullOrEmpty(ToolTipTitle)) - // { - // tooltipBuilder.AddProperty("title", ToolTipTitle); - // } - - // if (!ToolTipAutoHide) - // { - // tooltipBuilder.AddProperty("autoHide", false); - // tooltipBuilder.AddProperty("closable", true); - // tooltipBuilder.AddProperty("draggable", true); - // } - - // string tooltipScript = String.Format("new Ext.ToolTip({0});", tooltipBuilder); - - // string renderScript = JsHelper.GetDeferScript(tooltipScript, 100); //"(function(){" + tooltipScript + "}).defer(20);"; - // OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript, "component"), true); - //} - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - - private string GetInnerHtml() - { - HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("img"); - if (!String.IsNullOrEmpty(ImageUrl)) - { - htmlBuilder.SetProperty("src", ResolveUrl(ImageUrl)); - } - - if (ImageWidth != Unit.Empty) - { - htmlBuilder.SetProperty("width", String.Format("{0}px", ImageWidth.Value)); - } - if (ImageHeight != Unit.Empty) - { - htmlBuilder.SetProperty("height", String.Format("{0}px", ImageHeight.Value)); - } - - if (!String.IsNullOrEmpty(ImageCssClass)) - { - htmlBuilder.SetProperty("class", ImageCssClass); - } - if (!String.IsNullOrEmpty(ImageCssStyle)) - { - htmlBuilder.SetProperty("style", ImageCssStyle); - } - if (!String.IsNullOrEmpty(ImageAlt)) - { - htmlBuilder.SetProperty("alt", ImageAlt); - } - - ResolveTooltip(htmlBuilder); - - ResolveAttribuites(htmlBuilder); - - return htmlBuilder.ToString(); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Image.cs + * CreatedOn: 2008-07-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 图片控件 + /// </summary> + [Designer("FineUI.Design.ImageDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Image Label=\"Label\" ImageUrl=\"\" runat=server></{0}:Image>")] + [ToolboxBitmap(typeof(Image), "toolbox.Image.bmp")] + [Description("图片控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Image : TooltipField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Image() + { + AddServerAjaxProperties("ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt", "Icon"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Enabled + { + get + { + return base.Enabled; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override short? TabIndex + { + get + { + return base.TabIndex; + } + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]链接地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]链接地址")] + public string ImageUrl + { + get + { + object obj = FState["ImageUrl"]; + if (obj == null) + { + if (!DesignMode) + { + if (Icon != Icon.None) + { + obj = IconHelper.GetIconUrl(Icon); + } + } + } + return obj == null ? "" : (string)obj; + } + set + { + FState["ImageUrl"] = value; + } + } + + + /// <summary> + /// [AJAX属性]预定义图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("[AJAX属性]预定义图标")] + public virtual Icon Icon + { + get + { + object obj = FState["Icon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["Icon"] = value; + } + } + + + /// <summary> + /// [AJAX属性]图片的宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("[AJAX属性]图片的宽度")] + public Unit ImageWidth + { + get + { + object obj = FState["ImageWidth"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["ImageWidth"] = value; + } + } + + + /// <summary> + /// [AJAX属性]图片的高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("[AJAX属性]图片的高度")] + public Unit ImageHeight + { + get + { + object obj = FState["ImageHeight"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["ImageHeight"] = value; + } + } + + /// <summary> + /// [AJAX属性]图片的样式类 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]图片的样式类")] + public string ImageCssClass + { + get + { + object obj = FState["ImageCssClass"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ImageCssClass"] = value; + } + } + + /// <summary> + /// [AJAX属性]图片的样式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]图片的样式")] + public string ImageCssStyle + { + get + { + object obj = FState["ImageCssStyle"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["ImageCssStyle"] = value; + } + } + + /// <summary> + /// [AJAX属性]图片的Alt + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]图片的Alt")] + public string ImageAlt + { + get + { + object obj = FState["ImageAlt"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["ImageAlt"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Icon")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + OB.AddProperty("htmlEncode", false); + + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + #region oldcode + + //if (!String.IsNullOrEmpty(ToolTip)) + //{ + // JsObjectBuilder tooltipBuilder = new JsObjectBuilder(); + // tooltipBuilder.AddProperty("target", String.Format("Ext.get('{0}').child('img')", ClientID), true); + // tooltipBuilder.AddProperty("html", ToolTip); + + // if (!String.IsNullOrEmpty(ToolTipTitle)) + // { + // tooltipBuilder.AddProperty("title", ToolTipTitle); + // } + + // if (!ToolTipAutoHide) + // { + // tooltipBuilder.AddProperty("autoHide", false); + // tooltipBuilder.AddProperty("closable", true); + // tooltipBuilder.AddProperty("draggable", true); + // } + + // string tooltipScript = String.Format("new Ext.ToolTip({0});", tooltipBuilder); + + // string renderScript = JsHelper.GetDeferScript(tooltipScript, 100); //"(function(){" + tooltipScript + "}).defer(20);"; + // OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript, "component"), true); + //} + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + private string GetInnerHtml() + { + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("img"); + if (!String.IsNullOrEmpty(ImageUrl)) + { + htmlBuilder.SetProperty("src", ResolveUrl(ImageUrl)); + } + + if (ImageWidth != Unit.Empty) + { + htmlBuilder.SetProperty("width", String.Format("{0}px", ImageWidth.Value)); + } + if (ImageHeight != Unit.Empty) + { + htmlBuilder.SetProperty("height", String.Format("{0}px", ImageHeight.Value)); + } + + if (!String.IsNullOrEmpty(ImageCssClass)) + { + htmlBuilder.SetProperty("class", ImageCssClass); + } + if (!String.IsNullOrEmpty(ImageCssStyle)) + { + htmlBuilder.SetProperty("style", ImageCssStyle); + } + if (!String.IsNullOrEmpty(ImageAlt)) + { + htmlBuilder.SetProperty("alt", ImageAlt); + } + + ResolveTooltip(htmlBuilder); + + ResolveAttribuites(htmlBuilder); + + return htmlBuilder.ToString(); + } + + #endregion + } +} diff --git a/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs b/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs index 362fd0c..b562b3e 100644 --- a/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs +++ b/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs @@ -1,440 +1,440 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: LinkButton.cs - * CreatedOn: 2008-06-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 链接按钮控件 - /// </summary> - [Designer("FineUI.Design.LinkButtonDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:LinkButton Text=\"LinkButton\" Label=\"Label\" runat=server></{0}:LinkButton>")] - [ToolboxBitmap(typeof(LinkButton), "toolbox.LinkButton.bmp")] - [Description("链接按钮控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - [DefaultEvent("Click")] - public class LinkButton : TooltipField, IPostBackEventHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public LinkButton() - { - AddServerAjaxProperties("Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - - - #endregion - - #region Properties - - /// <summary> - /// [AJAX属性]文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - /// <summary> - /// [AJAX属性]点击按钮时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]点击按钮时需要执行的客户端脚本")] - public string OnClientClick - { - get - { - object obj = XState["OnClientClick"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientClick"] = value; - } - } - - - /// <summary> - /// 提交之前需要验证的表单名称列表 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("提交之前需要验证的表单名称列表")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] ValidateForms - { - get - { - object obj = XState["ValidateForms"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["ValidateForms"] = value; - } - } - - - /// <summary> - /// 验证失败时提示对话框弹出位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("验证失败时提示对话框弹出位置")] - public Target ValidateTarget - { - get - { - object obj = XState["ValidateTarget"]; - return obj == null ? Target.Self : (Target)obj; - } - set - { - XState["ValidateTarget"] = value; - } - } - - /// <summary> - /// 验证失败时是否出现提示对话框 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("验证失败时是否出现提示对话框")] - public bool ValidateMessageBox - { - get - { - object obj = XState["ValidateMessageBox"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ValidateMessageBox"] = value; - } - } - - /// <summary> - /// 是否可以回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以回发")] - public bool EnablePostBack - { - get - { - object obj = XState["EnablePostBack"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnablePostBack"] = value; - } - } - - - /// <summary> - /// 是否对文本编码 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否对文本编码")] - public virtual bool EncodeText - { - get - { - object obj = XState["EncodeText"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EncodeText"] = value; - } - } - - - #endregion - - #region ConfirmText/ConfirmTitle/ConfirmIcon - - /// <summary> - /// [AJAX属性]确认对话框标题 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]确认对话框标题")] - public string ConfirmTitle - { - get - { - object obj = XState["ConfirmTitle"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ConfirmTitle"] = value; - } - } - - - /// <summary> - /// [AJAX属性]确认对话框内容 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]确认对话框内容")] - public string ConfirmText - { - get - { - object obj = XState["ConfirmText"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ConfirmText"] = value; - } - } - - - /// <summary> - /// [AJAX属性]确认对话框提示图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(MessageBoxIcon.Warning)] - [Description("[AJAX属性]确认对话框提示图标")] - public MessageBoxIcon ConfirmIcon - { - get - { - object obj = XState["ConfirmIcon"]; - return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; - } - set - { - XState["ConfirmIcon"] = value; - } - } - - ///// <summary> - ///// 确认对话框弹出位置 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("确认对话框弹出位置")] - //public string ConfirmTarget - //{ - // get - // { - // object obj = BoxState["ConfirmTarget"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // BoxState["ConfirmTarget"] = value; - // } - //} - - /// <summary> - /// [AJAX属性]确认对话框弹出位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("[AJAX属性]确认对话框弹出位置")] - public Target ConfirmTarget - { - get - { - object obj = XState["ConfirmTarget"]; - return obj == null ? Target.Self : (Target)obj; - } - set - { - XState["ConfirmTarget"] = value; - } - } - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - if (PropertyModified("Enabled", "Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick", "ToolTip", "ToolTipTitle", "ToolTipAutoHide")) - { - sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - OB.AddProperty("htmlEncode", false); - - OB.AddProperty("value", GetInnerHtml()); - - //AddExtraStyle("display", "inline"); - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - private string GetInnerHtml() - { - string text = Text; - if (EncodeText) - { - text = HttpUtility.HtmlEncode(text); - } - - HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("a"); - - if (Enabled) - { - htmlBuilder.SetProperty("href", "javascript:;"); - - // ValidateForms/Click - string clientScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), - ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, String.Empty); - htmlBuilder.SetProperty("onclick", String.Format("javascript:{0}", clientScript)); - - if (TabIndex != null) - { - htmlBuilder.SetProperty("tabindex", TabIndex.Value.ToString()); - } - - } - else - { - //htmlBuilder.SetProperty("class", "gray"); - htmlBuilder.SetProperty("class", "x-item-disabled"); - htmlBuilder.SetProperty("disabled", "disabled"); - } - - ResolveTooltip(htmlBuilder); - - ResolveAttribuites(htmlBuilder); - - htmlBuilder.InnerProperty = text; - - return htmlBuilder.ToString(); - } - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - OnClick(EventArgs.Empty); - } - - #endregion - - #region OnClick - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 按钮点击事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("按钮点击事件")] - public event EventHandler Click - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发按钮点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnClick(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: LinkButton.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 链接按钮控件 + /// </summary> + [Designer("FineUI.Design.LinkButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:LinkButton Text=\"LinkButton\" Label=\"Label\" runat=server></{0}:LinkButton>")] + [ToolboxBitmap(typeof(LinkButton), "toolbox.LinkButton.bmp")] + [Description("链接按钮控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("Click")] + public class LinkButton : TooltipField, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public LinkButton() + { + AddServerAjaxProperties("Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]点击按钮时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + + /// <summary> + /// 提交之前需要验证的表单名称列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("提交之前需要验证的表单名称列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + + /// <summary> + /// 验证失败时提示对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + /// <summary> + /// 验证失败时是否出现提示对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// 是否对文本编码 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否对文本编码")] + public virtual bool EncodeText + { + get + { + object obj = FState["EncodeText"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EncodeText"] = value; + } + } + + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon + + /// <summary> + /// [AJAX属性]确认对话框标题 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框标题")] + public string ConfirmTitle + { + get + { + object obj = FState["ConfirmTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmTitle"] = value; + } + } + + + /// <summary> + /// [AJAX属性]确认对话框内容 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框内容")] + public string ConfirmText + { + get + { + object obj = FState["ConfirmText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmText"] = value; + } + } + + + /// <summary> + /// [AJAX属性]确认对话框提示图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("[AJAX属性]确认对话框提示图标")] + public MessageBoxIcon ConfirmIcon + { + get + { + object obj = FState["ConfirmIcon"]; + return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; + } + set + { + FState["ConfirmIcon"] = value; + } + } + + ///// <summary> + ///// 确认对话框弹出位置 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("确认对话框弹出位置")] + //public string ConfirmTarget + //{ + // get + // { + // object obj = BoxState["ConfirmTarget"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["ConfirmTarget"] = value; + // } + //} + + /// <summary> + /// [AJAX属性]确认对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("[AJAX属性]确认对话框弹出位置")] + public Target ConfirmTarget + { + get + { + object obj = FState["ConfirmTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ConfirmTarget"] = value; + } + } + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("Enabled", "Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick", "ToolTip", "ToolTipTitle", "ToolTipAutoHide")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("htmlEncode", false); + + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + private string GetInnerHtml() + { + string text = Text; + if (EncodeText) + { + text = HttpUtility.HtmlEncode(text); + } + + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("a"); + + if (Enabled) + { + htmlBuilder.SetProperty("href", "javascript:;"); + + // ValidateForms/Click + string clientScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, String.Empty); + htmlBuilder.SetProperty("onclick", String.Format("javascript:{0}", clientScript)); + + if (TabIndex != null) + { + htmlBuilder.SetProperty("tabindex", TabIndex.Value.ToString()); + } + + } + else + { + //htmlBuilder.SetProperty("class", "gray"); + htmlBuilder.SetProperty("class", "x-item-disabled"); + htmlBuilder.SetProperty("disabled", "disabled"); + } + + ResolveTooltip(htmlBuilder); + + ResolveAttribuites(htmlBuilder); + + htmlBuilder.InnerProperty = text; + + return htmlBuilder.ToString(); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnClick(EventArgs.Empty); + } + + #endregion + + #region OnClick + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("按钮点击事件")] + public event EventHandler Click + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI/WebControls/Field.Label/Label.cs b/FineUI/WebControls/Field.Label/Label.cs index 50542c9..ac4f874 100644 --- a/FineUI/WebControls/Field.Label/Label.cs +++ b/FineUI/WebControls/Field.Label/Label.cs @@ -1,224 +1,224 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Label.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 文本控件 - /// </summary> - [Designer("FineUI.Design.LabelDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:Label Text=\"Label\" Label=\"Label\" runat=server></{0}:Label>")] - [ToolboxBitmap(typeof(Label), "toolbox.Label.bmp")] - [Description("文本控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Label : TooltipField - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Label() - { - AddServerAjaxProperties("Text"); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - ///// <summary> - ///// 不支持此属性 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public override bool Enabled - //{ - // get - // { - // return base.Enabled; - // } - //} - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override short? TabIndex - { - get - { - return base.TabIndex; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool FocusOnPageLoad - { - get - { - return false; - } - } - - #endregion - - #region Properties - - /// <summary> - /// 是否对文本编码 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否对文本编码")] - public virtual bool EncodeText - { - get - { - object obj = XState["EncodeText"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EncodeText"] = value; - } - } - - /// <summary> - /// [AJAX属性]文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Text", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Enabled")) - { - sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - //OB.AddProperty("htmlEncode", false); - - //OB.RemoveProperty(OptionName.Value); - OB.AddProperty("value", GetInnerHtml()); - - //AddExtraStyle("display", "inline"); - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - - private string GetInnerHtml() - { - string text = Text; - if (EncodeText) - { - text = HttpUtility.HtmlEncode(text); - } - - HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("span"); - - if (!String.IsNullOrEmpty(ToolTip)) - { - ResolveTooltip(htmlBuilder); - } - - ResolveAttribuites(htmlBuilder); - - if (!Enabled) - { - htmlBuilder.SetProperty("class", "x-item-disabled"); - htmlBuilder.SetProperty("disabled", "disabled"); - } - - htmlBuilder.InnerProperty = text; - - string html = htmlBuilder.ToString(); - - if (html == "<span></span>") - { - html = String.Empty; - } - - return html; - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Label.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 文本控件 + /// </summary> + [Designer("FineUI.Design.LabelDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Label Text=\"Label\" Label=\"Label\" runat=server></{0}:Label>")] + [ToolboxBitmap(typeof(Label), "toolbox.Label.bmp")] + [Description("文本控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Label : TooltipField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Label() + { + AddServerAjaxProperties("Text"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool Enabled + //{ + // get + // { + // return base.Enabled; + // } + //} + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override short? TabIndex + { + get + { + return base.TabIndex; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool FocusOnPageLoad + { + get + { + return false; + } + } + + #endregion + + #region Properties + + /// <summary> + /// 是否对文本编码 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否对文本编码")] + public virtual bool EncodeText + { + get + { + object obj = FState["EncodeText"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EncodeText"] = value; + } + } + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Enabled")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + //OB.AddProperty("htmlEncode", false); + + //OB.RemoveProperty(OptionName.Value); + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + private string GetInnerHtml() + { + string text = Text; + if (EncodeText) + { + text = HttpUtility.HtmlEncode(text); + } + + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("span"); + + if (!String.IsNullOrEmpty(ToolTip)) + { + ResolveTooltip(htmlBuilder); + } + + ResolveAttribuites(htmlBuilder); + + if (!Enabled) + { + htmlBuilder.SetProperty("class", "x-item-disabled"); + htmlBuilder.SetProperty("disabled", "disabled"); + } + + htmlBuilder.InnerProperty = text; + + string html = htmlBuilder.ToString(); + + if (html == "<span></span>") + { + html = String.Empty; + } + + return html; + } + + #endregion + } +} diff --git a/FineUI/WebControls/Field.RadioButton/RadioButton.cs b/FineUI/WebControls/Field.RadioButton/RadioButton.cs index a507a36..7f6337b 100644 --- a/FineUI/WebControls/Field.RadioButton/RadioButton.cs +++ b/FineUI/WebControls/Field.RadioButton/RadioButton.cs @@ -1,362 +1,363 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RadioButton.cs - * CreatedOn: 2008-06-20 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 单选框控件 - /// </summary> - [Designer("FineUI.Design.RadioButtonDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:RadioButton Label=\"Label\" Text=\"RadioButton\" runat=server></{0}:RadioButton>")] - [ToolboxBitmap(typeof(RadioButton), "toolbox.RadioButton.bmp")] - [Description("单选框控件")] - public class RadioButton : Field, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public RadioButton() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("Checked"); - } - - #endregion - - #region Properties - - /// <summary> - /// 文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("文本")] - public virtual string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - /// <summary> - /// [AJAX属性]是否选中 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("[AJAX属性]是否选中")] - public bool Checked - { - get - { - object obj = XState["Checked"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Checked"] = value; - - ProcessOthersInGroup(); - } - } - - /// <summary> - /// 设置本组内其他RadioButton的Checked属性为false - /// 简单处理,只查找和此RadioButton在同一个层级的RadioButton - /// </summary> - private void ProcessOthersInGroup() - { - // 如果页面已经加载完毕,并且此RadioButton的属于某一个Group - // 则在设置这个控件的Checked属性时需要考虑本组内其他控件的Checked属性。 - if (Page != null && !String.IsNullOrEmpty(GroupName) && Checked) - { - foreach (Control c in this.Parent.Controls) - { - if (c is RadioButton) - { - RadioButton rbtn = c as RadioButton; - if (rbtn != this && rbtn.GroupName == this.GroupName) - { - rbtn.Checked = false; - } - } - } - } - } - - /// <summary> - /// 分组的名称 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("分组的名称")] - public string GroupName - { - get - { - object obj = XState["GroupName"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["GroupName"] = value; - } - } - - - /// <summary> - /// 是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动回发")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - - #endregion - - #region HiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal string CheckedHiddenFieldID - { - get - { - return String.Format("{0}_Checked", ClientID); - } - } - - #endregion - - #region OnInitControl - - /// <summary> - /// 初始化控件 - /// </summary> - protected override void OnInitControl() - { - base.OnInitControl(); - - ProcessOthersInGroup(); - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("Checked")) - { - sb.AppendFormat("{0}.x_setValue();", XID); - - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - #region options - OB.AddProperty("checked", Checked); - - if (!String.IsNullOrEmpty(Text)) - { - OB.AddProperty("boxLabel", Text); - } - - if (!String.IsNullOrEmpty(GroupName)) - { - OB.RemoveProperty("name"); - OB.AddProperty("name", GroupName); - OB.AddProperty("inputValue", ClientID); - } - - #endregion - - #region AutoPostBack - - if (AutoPostBack) - { - string checkScript = String.Empty; - if (!String.IsNullOrEmpty(GroupName)) - { - checkScript = "if(X.util.checkGroupLastTime('" + GroupName + "')){" + GetPostBackEventReference() + "}"; - } - else - { - checkScript = GetPostBackEventReference(); - } - - OB.Listeners.AddProperty("change", JsHelper.GetFunction(checkScript), true); - } - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Radio',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - // 不管单选框是否在分组中,每个单选框的Checked都在POST参数中 - bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); - if (Checked != postChecked) - { - Checked = postChecked; - XState.BackupPostDataProperty("Checked"); - return true; - } - - //if (String.IsNullOrEmpty(GroupName)) - //{ - // // This radio button is not in a group - // string postValue = postCollection[postDataKey]; - // bool postChecked = !String.IsNullOrEmpty(postValue); - // if (Checked != postChecked) - // { - // Checked = postChecked; - // XState.BackupPostDataProperty("Checked"); - // return true; - // } - //} - //else - //{ - // // This radio is in a group - // string postValue = postCollection[GroupName]; - // if (!String.IsNullOrEmpty(postValue)) - // { - // bool postChecked = (ClientID == postValue) ? true : false; - // if (Checked != postChecked) - // { - // Checked = postChecked; - // XState.BackupPostDataProperty("Checked"); - // return true; - // } - // } - //} - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public void RaisePostDataChangedEvent() - { - OnCheckedChanged(new CheckedEventArgs(Checked)); - } - - #region OnCheckedChanged - - private object _handlerKey = new object(); - - /// <summary> - /// 单选框状态改变事件(需要启用AutoPostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("单选框状态改变事件(需要启用AutoPostBack)")] - public event EventHandler<CheckedEventArgs> CheckedChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发单选框状态改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnCheckedChanged(CheckedEventArgs e) - { - EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RadioButton.cs + * CreatedOn: 2008-06-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 单选框控件 + /// </summary> + [Designer("FineUI.Design.RadioButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:RadioButton Label=\"Label\" Text=\"RadioButton\" runat=server></{0}:RadioButton>")] + [ToolboxBitmap(typeof(RadioButton), "toolbox.RadioButton.bmp")] + [Description("单选框控件")] + public class RadioButton : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public RadioButton() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Checked"); + } + + #endregion + + #region Properties + + /// <summary> + /// 文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否选中")] + public bool Checked + { + get + { + object obj = FState["Checked"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Checked"] = value; + + ProcessOthersInGroup(); + } + } + + /// <summary> + /// 设置本组内其他RadioButton的Checked属性为false + /// 简单处理,只查找和此RadioButton在同一个层级的RadioButton + /// </summary> + private void ProcessOthersInGroup() + { + // 如果页面已经加载完毕,并且此RadioButton的属于某一个Group + // 则在设置这个控件的Checked属性时需要考虑本组内其他控件的Checked属性。 + if (Page != null && !String.IsNullOrEmpty(GroupName) && Checked) + { + foreach (Control c in this.Parent.Controls) + { + if (c is RadioButton) + { + RadioButton rbtn = c as RadioButton; + if (rbtn != this && rbtn.GroupName == this.GroupName) + { + rbtn.Checked = false; + } + } + } + } + } + + /// <summary> + /// 分组的名称 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("分组的名称")] + public string GroupName + { + get + { + object obj = FState["GroupName"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["GroupName"] = value; + } + } + + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string CheckedHiddenFieldID + { + get + { + return String.Format("{0}_Checked", ClientID); + } + } + + #endregion + + #region OnInitControl + + /// <summary> + /// 初始化控件 + /// </summary> + protected override void OnInitControl() + { + base.OnInitControl(); + + ProcessOthersInGroup(); + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Checked")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + OB.AddProperty("checked", Checked); + + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("boxLabel", Text); + } + + if (!String.IsNullOrEmpty(GroupName)) + { + OB.RemoveProperty("name"); + OB.AddProperty("name", GroupName); + OB.AddProperty("inputValue", ClientID); + } + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + string checkScript = String.Empty; + if (!String.IsNullOrEmpty(GroupName)) + { + checkScript = "if(F.util.checkGroupLastTime('" + GroupName + "')){" + GetPostBackEventReference() + "}"; + } + else + { + checkScript = GetPostBackEventReference(); + } + + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(checkScript), true); + AddListener("change", checkScript); + } + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Radio',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + // 不管单选框是否在分组中,每个单选框的Checked都在POST参数中 + bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); + if (Checked != postChecked) + { + Checked = postChecked; + FState.BackupPostDataProperty("Checked"); + return true; + } + + //if (String.IsNullOrEmpty(GroupName)) + //{ + // // This radio button is not in a group + // string postValue = postCollection[postDataKey]; + // bool postChecked = !String.IsNullOrEmpty(postValue); + // if (Checked != postChecked) + // { + // Checked = postChecked; + // FState.BackupPostDataProperty("Checked"); + // return true; + // } + //} + //else + //{ + // // This radio is in a group + // string postValue = postCollection[GroupName]; + // if (!String.IsNullOrEmpty(postValue)) + // { + // bool postChecked = (ClientID == postValue) ? true : false; + // if (Checked != postChecked) + // { + // Checked = postChecked; + // FState.BackupPostDataProperty("Checked"); + // return true; + // } + // } + //} + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnCheckedChanged(new CheckedEventArgs(Checked)); + } + + #region OnCheckedChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 单选框状态改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("单选框状态改变事件(需要启用AutoPostBack)")] + public event EventHandler<CheckedEventArgs> CheckedChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发单选框状态改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCheckedChanged(CheckedEventArgs e) + { + EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #endregion + } +} diff --git a/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs b/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs index 8c8ffe3..b743346 100644 --- a/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs +++ b/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs @@ -1,966 +1,978 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RadioButtonList.cs - * CreatedOn: 2008-06-20 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; -using System.Data; -using System.Collections; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// <summary> - /// 单选框列表控件 - /// </summary> - [Designer("FineUI.Design.RadioButtonListDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:RadioButtonList runat=server></{0}:RadioButtonList>")] - [ToolboxBitmap(typeof(RadioButtonList), "toolbox.RadioButtonList.bmp")] - [Description("单选框列表控件")] - [ParseChildren(true, DefaultProperty = "Items")] - [PersistChildren(false)] - [DefaultEvent("SelectedIndexChanged")] - public class RadioButtonList : Field, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public RadioButtonList() - { - AddServerAjaxProperties("X_Items"); - AddClientAjaxProperties("SelectedValue"); - - AddGzippedAjaxProperties("X_Items"); - } - - #endregion - - #region Properties - - #region old code - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否显示浅色的背景色")] - //public virtual bool EnableLightBackgroundColor - //{ - // get - // { - // object obj = BoxState["EnableLightBackgroundColor"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["EnableLightBackgroundColor"] = value; - // } - //} - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否显示背景色")] - //public virtual bool EnableBackgroundColor - //{ - // get - // { - // object obj = BoxState["EnableBackgroundColor"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["EnableBackgroundColor"] = value; - // } - //} - - - #endregion - - /// <summary> - /// 是否必填项 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(false)] - [Description("是否必填项")] - public bool Required - { - get - { - object obj = XState["Required"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Required"] = value; - } - } - - /// <summary> - /// 为空时提示信息 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue("")] - [Description("为空时提示信息")] - public string RequiredMessage - { - get - { - object obj = XState["RequiredMessage"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["RequiredMessage"] = value; - } - } - - - /// <summary> - /// 是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动回发")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - ///// <summary> - ///// 是否选中 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否选中")] - //public bool Checked - //{ - // get - // { - // object obj = XState["Checked"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["Checked"] = value; - // } - //} - - /// <summary> - /// 渲染成几列 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(0)] - [Description("渲染成几列")] - public int ColumnNumber - { - get - { - object obj = XState["ColumnNumber"]; - return obj == null ? 0 : (int)obj; - } - set - { - XState["ColumnNumber"] = value; - } - } - - /// <summary> - /// 是否按照纵向顺序渲染 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否按照纵向顺序渲染")] - public bool ColumnVertical - { - get - { - object obj = XState["ColumnVertical"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ColumnVertical"] = value; - } - } - - #endregion - - #region Data Properties - - /// <summary> - /// 显示文本的数据字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示文本的数据字段")] - public string DataTextField - { - get - { - object obj = XState["DataTextField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataTextField"] = value; - } - } - - /// <summary> - /// 显示文本的格式化字符串 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示文本的格式化字符串")] - public string DataTextFormatString - { - get - { - object obj = XState["DataTextFormatString"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataTextFormatString"] = value; - } - } - - /// <summary> - /// 显示值的数据字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示值的数据字段")] - public string DataValueField - { - get - { - object obj = XState["DataValueField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataValueField"] = value; - } - } - - private object _dataSource; - - /// <summary> - /// 数据源 - /// </summary> - [DefaultValue(null)] - [Description("数据源")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object DataSource - { - set - { - _dataSource = value; - } - get - { - return _dataSource; - } - } - - #endregion - - #region SelectedIndex/SelectedValue/SelectedItem - - /// <summary> - /// [AJAX属性]选中项的值 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("[AJAX属性]选中项的值")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string SelectedValue - { - get - { - string value = String.Empty; - if (SelectedItem != null) - { - value = SelectedItem.Value; - } - return value; - } - set - { - for (int i = 0, count = Items.Count; i < count; i++) - { - RadioItem item = Items[i]; - if (item.Value == value) - { - item.Selected = true; - } - else - { - item.Selected = false; - } - } - } - } - - - /// <summary> - /// [AJAX属性]选中项的索引 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("[AJAX属性]选中项的索引")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int SelectedIndex - { - get - { - int _selectedIndex = -1; - for (int i = 0, count = Items.Count; i < count; i++) - { - if (Items[i].Selected) - { - _selectedIndex = i; - break; - } - } - return _selectedIndex; - } - set - { - if (value >= 0 && value < Items.Count) - { - foreach (RadioItem item in Items) - { - item.Selected = false; - } - - Items[value].Selected = true; - } - } - } - - /// <summary> - /// 选中项 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("选中项")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public RadioItem SelectedItem - { - get - { - int selectedIndex = SelectedIndex; - if (SelectedIndex >= 0 && SelectedIndex < Items.Count) - { - return Items[SelectedIndex]; - } - return null; - } - } - - #endregion - - #region Items - - private RadioItemCollection _items; - - /// <summary> - /// 单选项集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerDefaultProperty)] - [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual RadioItemCollection Items - { - get - { - if (_items == null) - { - _items = new RadioItemCollection(); - } - return _items; - } - } - - #endregion - - #region HiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal string SelectedValueArrayHiddenFieldID - { - get - { - return String.Format("{0}_SelectedValueArray", ClientID); - } - } - - #endregion - - #region X Properties - - /// <summary> - /// 保存的单选项数据(内部使用) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public JArray X_Items - { - get - { - JArray ja = new JArray(); - foreach (RadioItem item in Items) - { - JArray ja2 = new JArray(); - ja2.Add(item.Text); - ja2.Add(item.Value); - ja.Add(ja2); - } - return ja; - } - set - { - // 和DropDownList的情况相同,清空前备份选中项 - string selectedValue = SelectedValue; - Items.Clear(); - - foreach (JArray ja2 in value) - { - RadioItem item = new RadioItem(); - item.Text = ja2[0].Value<string>(); //ja2.getString(0); - item.Value = ja2[1].Value<string>(); //ja2.getString(1); - Items.Add(item); - } - - // 恢复选中项 - SelectedValue = selectedValue; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - bool dataReloaded = false; - - StringBuilder sb = new StringBuilder(); - - if (PropertyModified("X_Items")) - { - sb.AppendFormat("{0}.x_reloadData('{1}',true);", XID, UniqueID); //, GetItemsJArray().ToString(Formatting.None)); - - // 注意,在x_reloadData中重新创建了列表实例,所以要重新赋值 - sb.AppendFormat("{0}=X('{1}');", XID, ClientID); - - //if (Items.Count == 0) - //{ - // sb.AppendFormat("{0}.x_toBeDeleted();", XID); - //} - - dataReloaded = true; - } - - - if (!dataReloaded) - { - if (PropertyModified("SelectedValue")) - { - sb.AppendFormat("{0}.x_setValue();", XID); - - } - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - #region options - - if (Required) - { - OB.AddProperty("allowBlank", false); - if (!String.IsNullOrEmpty(RequiredMessage)) - { - OB.AddProperty("blankText", RequiredMessage); - } - } - - - OB.RemoveProperty("name"); - - if (ColumnNumber <= 0) - { - OB.AddProperty("columns", "auto"); - } - else - { - OB.AddProperty("columns", ColumnNumber); - } - - if (ColumnVertical) - { - OB.AddProperty("vertical", true); - } - - #endregion - - #region Items - - string xstateName = String.Format("{0}_xstate", XID); - string xitemsName = String.Format("{0}_xitems", XID); - string hasDataName = xstateName; - - string xstate = OB.GetProperty("x_state"); - OB.AddProperty("x_state", xstateName, true); - - string jsState = String.Format("var {0}={1};", xstateName, xstate); - - if (!XState.ModifiedProperties.Contains("X_Items")) - { - xstate = ConvertPropertiesToJObject(new List<string> { "X_Items", "SelectedValue" }).ToString(Formatting.None); - jsState += String.Format("var {0}={1};", xitemsName, xstate); - hasDataName = xitemsName; - } - - //if (Items.Count > 0) - //{ - // //OB.AddProperty("items", GetItemsJArray().ToString(Formatting.None), true); - // OB.AddProperty("items", String.Format("X.util.resolveCheckBoxGroup('{0}',{1})", UniqueID, hasDataName), true); - //} - OB.AddProperty("name", UniqueID); - OB.AddProperty("items", String.Format("X.util.resolveCheckBoxGroup('{0}',{1},true)", UniqueID, hasDataName), true); - - - //if (Items.Count == 0) - //{ - // OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction("cmp.x_toBeDeleted();", "cmp"), true); - //} - - #endregion - - #region AutoPostBack - - if (AutoPostBack) - { - // This event will be triggered twice, so we must filter the actually change. - // If the current checked radio is losing focus, this function will alse be called and the radio parameter is true. - // 改变选中项时,这个事件会被触发两次。 - // 当前选中项失去焦点时,这个回调函数也会被触发并设置radio为true。 - OB.Listeners.AddProperty("change", String.Format("function(group,radio){{if(typeof(radio)!=='boolean'){{{0}}}}}", GetPostBackEventReference()), true); - } - - //if (!String.IsNullOrEmpty(SelectedValue)) - //{ - // OB.AddProperty("value", SelectedValue); - //} - - #region old code - //string autoPostBackScript = String.Empty; - //if (AutoPostBack) - //{ - // //// change 事件只有在失去焦点时才触发,是不及时的 - // //OB.Listeners.RemoveProperty(OptionName.Change); - // //OB.Listeners.AddProperty(OptionName.Check, String.Format("function(newValue,oldValue){{\r\nbox_pageStateChange();alert(newValue+':'+oldValue);\r\n}}"), true); - - // string selectScript = String.Format("function(newValue,oldValue){{\r\nalert(newValue+':'+oldValue);\r\n}}"); - // selectScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientID, OptionName.Check, selectScript); - - // autoPostBackScript += selectScript; - //} - - //string backgroundColorStyle = String.Empty; - //if (EnableBackgroundColor) - //{ - // backgroundColorStyle = AboutConfig.GetDefaultBackgroundColor(PageManagerInstance.Theme.ToString()); - //} - //else if (EnableLightBackgroundColor) - //{ - // backgroundColorStyle = AboutConfig.GetLightBackgroundColor(PageManagerInstance.Theme.ToString()); - //} - - //if (!String.IsNullOrEmpty(backgroundColorStyle)) - //{ - // string backgroundColorScript = String.Format("Ext.each(X.{0}.el.query('.x-panel-body'),function(item,index){{Ext.get(item).setStyle('background-color','{1}');}});", ClientJavascriptID, backgroundColorStyle); - - // string renderScript = "(function(){" + backgroundColorScript + "}).defer(20);"; - // OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); - //} - - #endregion - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.RadioGroup',{1});", XID, OB.ToString()); - AddStartupScript(jsState + jsContent); - } - - #region old code - - //private JArray GetItemsJArray() - //{ - // JArray ja = new JArray(); - // int itemIndex = 0; - // foreach (RadioItem item in Items) - // { - // JObject jo = new JObject(); - // jo.Add("inputValue", item.Value); - // jo.Add("boxLabel", item.Text); - // jo.Add("name", UniqueID); - // if (item.Selected) - // { - // jo.Add("checked", true); - // } - - // ja.Add(jo); - - // itemIndex++; - // } - - // return ja; - //} - - #endregion - - #endregion - - #region DataBind - - /// <summary> - /// 绑定到数据源 - /// </summary> - public override void DataBind() - { - base.DataBind(); - - if (_dataSource != null) - { - // 1. 首先清空 Items 属性 - Items.Clear(); - - // 2. 绑定到数据源 - if (_dataSource is IDataReader) - { - DataTable dataTable = new DataTable(); - dataTable.Load(_dataSource as IDataReader); - - DataBindToDataTable(dataTable); - } - else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) - { - DataTable dataTable = null; - if (_dataSource is DataView) - { - dataTable = ((DataView)_dataSource).ToTable(); - } - else if (_dataSource is DataSet) - { - dataTable = ((DataSet)_dataSource).Tables[0]; - } - else - { - dataTable = ((DataTable)_dataSource); - } - - DataBindToDataTable(dataTable); - } - else if (_dataSource is IEnumerable) - { - DataBindToEnumerable((IEnumerable)_dataSource); - } - else - { - throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); - } - - // X_Items属性不是ServerAjaxProperty,所以只在页面第一次加载时判断是否改变 - if (!Page.IsPostBack) - { - XState.AddModifiedProperty("X_Items"); - } - } - } - - /// <summary> - /// 绑定到数据表 - /// </summary> - /// <param name="dataTable"></param> - private void DataBindToDataTable(DataTable dataTable) - { - int startIndex = 0; - int endIndex = Int32.MaxValue; - for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) - { - DataRow row = dataTable.Rows[i]; - Items.Add(CreateRadioItem(row)); - } - } - - /// <summary> - /// 绑定到可枚举列表 - /// </summary> - /// <param name="enumerable"></param> - private void DataBindToEnumerable(IEnumerable enumerable) - { - #region old code - //int startIndex = 0; - //int endIndex = Int32.MaxValue; - - //IEnumerator enumerator = enumerable.GetEnumerator(); - - //// 定位开始位置 - //enumerator.Reset(); - //enumerator.MoveNext(); - - //int count = 0; - - //// skip some items? - //while (count < startIndex) - //{ - // enumerator.MoveNext(); - // count++; - //} - - //try - //{ - // if (enumerator.Current == null) - // { - // return; - // } - //} - //catch - //{ - // return; - //} - - //while (enumerator.Current != null && count < endIndex) - //{ - // object currentObject = enumerator.Current; - - // RadioItem item = new RadioItem(); - - // if (currentObject is string) - // { - // item.Text = currentObject.ToString(); - // item.Value = currentObject.ToString(); - // } - // else - // { - // // Load item - // if (DataTextField != "") - // { - // item.Text = GetPropertyValue(currentObject, DataTextField); - // } - // else - // { - // item.Text = currentObject.ToString(); - // } - - // if (DataValueField != "") - // { - // item.Value = GetPropertyValue(currentObject, DataValueField); - // } - // else - // { - // item.Value = currentObject.ToString(); - // } - - // } - - // Items.Add(item); - - // if (!enumerator.MoveNext()) - // { - // break; - // } - - // count++; - //} - #endregion - - IEnumerator enumerator = enumerable.GetEnumerator(); - while (enumerator.MoveNext()) - { - object currentObject = enumerator.Current; - Items.Add(CreateRadioItem(currentObject)); - } - } - - private RadioItem CreateRadioItem(Object obj) - { - RadioItem item = new RadioItem(); - if (obj is string) - { - item.Text = obj.ToString(); - item.Value = obj.ToString(); - } - else - { - if (!String.IsNullOrEmpty(DataTextField)) - { - if (!String.IsNullOrEmpty(DataTextFormatString)) - { - item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); - } - else - { - item.Text = GetPropertyValue(obj, DataTextField); - } - } - else - { - item.Text = obj.ToString(); - } - - if (!String.IsNullOrEmpty(DataValueField)) - { - item.Value = GetPropertyValue(obj, DataValueField); - } - else - { - item.Value = obj.ToString(); - } - } - return item; - } - - - - /// <summary> - /// 取得属性值 - /// </summary> - /// <param name="obj"></param> - /// <param name="propertyName"></param> - private string GetPropertyValue(object obj, string propertyName) - { - object result = null; - - result = ObjectUtil.GetPropertyValue(obj, propertyName); - - return result == null ? String.Empty : result.ToString(); - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - //string postValue = postCollection[postDataKey]; - string[] selectedValueArray = StringUtil.GetStringListFromString(postCollection[SelectedValueArrayHiddenFieldID]).ToArray(); - string postValue = selectedValueArray.Length > 0 ? selectedValueArray[0] : String.Empty; - if (SelectedValue != postValue) - { - SelectedValue = postValue; - XState.BackupPostDataProperty("SelectedValue"); - return true; - } - return false; - } - - private object _handlerKey = new object(); - - /// <summary> - /// 选中项改变事件(需要启用AutoPostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("选中项改变事件(需要启用AutoPostBack)")] - public event EventHandler SelectedIndexChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发选中项改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnSelectedIndexChanged(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public virtual void RaisePostDataChangedEvent() - { - OnSelectedIndexChanged(EventArgs.Empty); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RadioButtonList.cs + * CreatedOn: 2008-06-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Data; +using System.Collections; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// <summary> + /// 单选框列表控件 + /// </summary> + [Designer("FineUI.Design.RadioButtonListDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:RadioButtonList runat=server></{0}:RadioButtonList>")] + [ToolboxBitmap(typeof(RadioButtonList), "toolbox.RadioButtonList.bmp")] + [Description("单选框列表控件")] + [ParseChildren(true, DefaultProperty = "Items")] + [PersistChildren(false)] + [DefaultEvent("SelectedIndexChanged")] + public class RadioButtonList : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public RadioButtonList() + { + AddServerAjaxProperties("F_Items"); + AddClientAjaxProperties("SelectedValue"); + + AddGzippedAjaxProperties("F_Items"); + } + + #endregion + + #region Properties + + #region old code + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示浅色的背景色")] + //public virtual bool EnableLightBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableLightBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableLightBackgroundColor"] = value; + // } + //} + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示背景色")] + //public virtual bool EnableBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableBackgroundColor"] = value; + // } + //} + + + #endregion + + /// <summary> + /// 是否必填项 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("是否必填项")] + public bool Required + { + get + { + object obj = FState["Required"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Required"] = value; + } + } + + /// <summary> + /// 为空时提示信息 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("为空时提示信息")] + public string RequiredMessage + { + get + { + object obj = FState["RequiredMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RequiredMessage"] = value; + } + } + + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + ///// <summary> + ///// 是否选中 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否选中")] + //public bool Checked + //{ + // get + // { + // object obj = FState["Checked"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Checked"] = value; + // } + //} + + /// <summary> + /// 渲染成几列 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("渲染成几列")] + public int ColumnNumber + { + get + { + object obj = FState["ColumnNumber"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ColumnNumber"] = value; + } + } + + /// <summary> + /// 是否按照纵向顺序渲染 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否按照纵向顺序渲染")] + public bool ColumnVertical + { + get + { + object obj = FState["ColumnVertical"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ColumnVertical"] = value; + } + } + + #endregion + + #region Data Properties + + /// <summary> + /// 显示文本的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的数据字段")] + public string DataTextField + { + get + { + object obj = FState["DataTextField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextField"] = value; + } + } + + /// <summary> + /// 显示文本的格式化字符串 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的格式化字符串")] + public string DataTextFormatString + { + get + { + object obj = FState["DataTextFormatString"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextFormatString"] = value; + } + } + + /// <summary> + /// 显示值的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示值的数据字段")] + public string DataValueField + { + get + { + object obj = FState["DataValueField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataValueField"] = value; + } + } + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Description("数据源")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region SelectedIndex/SelectedValue/SelectedItem + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string SelectedValue + { + get + { + string value = String.Empty; + if (SelectedItem != null) + { + value = SelectedItem.Value; + } + return value; + } + set + { + for (int i = 0, count = Items.Count; i < count; i++) + { + RadioItem item = Items[i]; + if (item.Value == value) + { + item.Selected = true; + } + else + { + item.Selected = false; + } + } + } + } + + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int SelectedIndex + { + get + { + int _selectedIndex = -1; + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + _selectedIndex = i; + break; + } + } + return _selectedIndex; + } + set + { + if (value >= 0 && value < Items.Count) + { + foreach (RadioItem item in Items) + { + item.Selected = false; + } + + Items[value].Selected = true; + } + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public RadioItem SelectedItem + { + get + { + int selectedIndex = SelectedIndex; + if (SelectedIndex >= 0 && SelectedIndex < Items.Count) + { + return Items[SelectedIndex]; + } + return null; + } + } + + #endregion + + #region Items + + private RadioItemCollection _items; + + /// <summary> + /// 单选项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual RadioItemCollection Items + { + get + { + if (_items == null) + { + _items = new RadioItemCollection(); + } + return _items; + } + } + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string SelectedValueArrayHiddenFieldID + { + get + { + return String.Format("{0}_SelectedValueArray", ClientID); + } + } + + #endregion + + #region X Properties + + /// <summary> + /// 保存的单选项数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Items + { + get + { + JArray ja = new JArray(); + foreach (RadioItem item in Items) + { + JArray ja2 = new JArray(); + ja2.Add(item.Text); + ja2.Add(item.Value); + ja.Add(ja2); + } + return ja; + } + set + { + // 和DropDownList的情况相同,清空前备份选中项 + string selectedValue = SelectedValue; + Items.Clear(); + + foreach (JArray ja2 in value) + { + RadioItem item = new RadioItem(); + item.Text = ja2[0].Value<string>(); //ja2.getString(0); + item.Value = ja2[1].Value<string>(); //ja2.getString(1); + Items.Add(item); + } + + // 恢复选中项 + SelectedValue = selectedValue; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + bool dataReloaded = false; + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("F_Items")) + { + sb.AppendFormat("{0}.f_reloadData('{1}',true);", XID, UniqueID); //, GetItemsJArray().ToString(Formatting.None)); + + // 注意,在x_reloadData中重新创建了列表实例,所以要重新赋值 + sb.AppendFormat("{0}=F('{1}');", XID, ClientID); + + //if (Items.Count == 0) + //{ + // sb.AppendFormat("{0}.f_toBeDeleted();", XID); + //} + + dataReloaded = true; + } + + + // 基于 extjs 的实现,如果数据重新加载了,则客户端会重新初始化控件示例 + if (!dataReloaded) + { + if (PropertyModified("SelectedValue")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Items 和 SelectedValue 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Items"); + FState.AddModifiedProperty("SelectedValue"); + + + base.OnFirstPreRender(); + + #region options + + if (Required) + { + OB.AddProperty("allowBlank", false); + if (!String.IsNullOrEmpty(RequiredMessage)) + { + OB.AddProperty("blankText", RequiredMessage); + } + } + + + OB.RemoveProperty("name"); + + if (ColumnNumber <= 0) + { + OB.AddProperty("columns", "auto"); + } + else + { + OB.AddProperty("columns", ColumnNumber); + } + + if (ColumnVertical) + { + OB.AddProperty("vertical", true); + } + + #endregion + + #region Items + /* + string xstateName = String.Format("{0}_xstate", XID); + string xitemsName = String.Format("{0}_xitems", XID); + string hasDataName = xstateName; + + string xstate = OB.GetProperty("f_state"); + OB.AddProperty("f_state", xstateName, true); + + string jsState = String.Format("var {0}={1};", xstateName, xstate); + + if (!FState.ModifiedProperties.Contains("F_Items")) + { + xstate = ConvertPropertiesToJObject(new List<string> { "F_Items", "SelectedValue" }).ToString(Formatting.None); + jsState += String.Format("var {0}={1};", xitemsName, xstate); + hasDataName = xitemsName; + } + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},true)", UniqueID, hasDataName), true); + */ + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},true)", UniqueID, GetFStateScriptID()), true); + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + // This event will be triggered twice, so we must filter the actually change. + // If the current checked radio is losing focus, this function will alse be called and the radio parameter is true. + // 改变选中项时,这个事件会被触发两次。 + // 当前选中项失去焦点时,这个回调函数也会被触发并设置radio为true。 + //OB.Listeners.AddProperty("change", String.Format("function(group,radio){{if(typeof(radio)!=='boolean'){{{0}}}}}", GetPostBackEventReference()), true); + AddListener("change", String.Format("if(typeof(radio)!=='boolean'){{{0}}}", GetPostBackEventReference()), "group", "radio"); + } + + //if (!String.IsNullOrEmpty(SelectedValue)) + //{ + // OB.AddProperty("value", SelectedValue); + //} + + #region old code + //string autoPostBackScript = String.Empty; + //if (AutoPostBack) + //{ + // //// change 事件只有在失去焦点时才触发,是不及时的 + // //OB.Listeners.RemoveProperty(OptionName.Change); + // //OB.Listeners.AddProperty(OptionName.Check, String.Format("function(newValue,oldValue){{\r\nbox_pageStateChange();alert(newValue+':'+oldValue);\r\n}}"), true); + + // string selectScript = String.Format("function(newValue,oldValue){{\r\nalert(newValue+':'+oldValue);\r\n}}"); + // selectScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientID, OptionName.Check, selectScript); + + // autoPostBackScript += selectScript; + //} + + //string backgroundColorStyle = String.Empty; + //if (EnableBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetDefaultBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + //else if (EnableLightBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetLightBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + + //if (!String.IsNullOrEmpty(backgroundColorStyle)) + //{ + // string backgroundColorScript = String.Format("Ext.each(X.{0}.el.query('.x-panel-body'),function(item,index){{Ext.get(item).setStyle('background-color','{1}');}});", ClientJavascriptID, backgroundColorStyle); + + // string renderScript = "(function(){" + backgroundColorScript + "}).defer(20);"; + // OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); + //} + + #endregion + + #endregion + + // EXTJS的BUG,不支持默认Readonly=true的情况,需要自己修正 + if (Readonly) + { + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.setReadOnly(true);", "cmp"), true); + AddListener("render", "cmp.setReadOnly(true);", "cmp"); + } + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.RadioGroup',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #region old code + + //private JArray GetItemsJArray() + //{ + // JArray ja = new JArray(); + // int itemIndex = 0; + // foreach (RadioItem item in Items) + // { + // JObject jo = new JObject(); + // jo.Add("inputValue", item.Value); + // jo.Add("boxLabel", item.Text); + // jo.Add("name", UniqueID); + // if (item.Selected) + // { + // jo.Add("checked", true); + // } + + // ja.Add(jo); + + // itemIndex++; + // } + + // return ja; + //} + + #endregion + + #endregion + + #region DataBind + + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + // 1. 首先清空 Items 属性 + Items.Clear(); + + if (_dataSource != null) + { + + // 2. 绑定到数据源 + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + + //// F_Items属性不是ServerAjaxProperty,所以只在页面第一次加载时判断是否改变 + //if (!Page.IsPostBack) + //{ + // FState.AddModifiedProperty("F_Items"); + //} + } + + base.DataBind(); + } + + /// <summary> + /// 绑定到数据表 + /// </summary> + /// <param name="dataTable"></param> + private void DataBindToDataTable(DataTable dataTable) + { + int startIndex = 0; + int endIndex = Int32.MaxValue; + for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) + { + DataRow row = dataTable.Rows[i]; + Items.Add(CreateRadioItem(row)); + } + } + + /// <summary> + /// 绑定到可枚举列表 + /// </summary> + /// <param name="enumerable"></param> + private void DataBindToEnumerable(IEnumerable enumerable) + { + #region old code + //int startIndex = 0; + //int endIndex = Int32.MaxValue; + + //IEnumerator enumerator = enumerable.GetEnumerator(); + + //// 定位开始位置 + //enumerator.Reset(); + //enumerator.MoveNext(); + + //int count = 0; + + //// skip some items? + //while (count < startIndex) + //{ + // enumerator.MoveNext(); + // count++; + //} + + //try + //{ + // if (enumerator.Current == null) + // { + // return; + // } + //} + //catch + //{ + // return; + //} + + //while (enumerator.Current != null && count < endIndex) + //{ + // object currentObject = enumerator.Current; + + // RadioItem item = new RadioItem(); + + // if (currentObject is string) + // { + // item.Text = currentObject.ToString(); + // item.Value = currentObject.ToString(); + // } + // else + // { + // // Load item + // if (DataTextField != "") + // { + // item.Text = GetPropertyValue(currentObject, DataTextField); + // } + // else + // { + // item.Text = currentObject.ToString(); + // } + + // if (DataValueField != "") + // { + // item.Value = GetPropertyValue(currentObject, DataValueField); + // } + // else + // { + // item.Value = currentObject.ToString(); + // } + + // } + + // Items.Add(item); + + // if (!enumerator.MoveNext()) + // { + // break; + // } + + // count++; + //} + #endregion + + IEnumerator enumerator = enumerable.GetEnumerator(); + while (enumerator.MoveNext()) + { + object currentObject = enumerator.Current; + Items.Add(CreateRadioItem(currentObject)); + } + } + + private RadioItem CreateRadioItem(Object obj) + { + RadioItem item = new RadioItem(); + if (obj is string) + { + item.Text = obj.ToString(); + item.Value = obj.ToString(); + } + else + { + if (!String.IsNullOrEmpty(DataTextField)) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); + } + else + { + item.Text = GetPropertyValue(obj, DataTextField); + } + } + else + { + item.Text = obj.ToString(); + } + + if (!String.IsNullOrEmpty(DataValueField)) + { + item.Value = GetPropertyValue(obj, DataValueField); + } + else + { + item.Value = obj.ToString(); + } + } + return item; + } + + + + /// <summary> + /// 取得属性值 + /// </summary> + /// <param name="obj"></param> + /// <param name="propertyName"></param> + private string GetPropertyValue(object obj, string propertyName) + { + object result = null; + + result = ObjectUtil.GetPropertyValue(obj, propertyName); + + return result == null ? String.Empty : result.ToString(); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + //string postValue = postCollection[postDataKey]; + string[] selectedValueArray = StringUtil.GetStringListFromString(postCollection[SelectedValueArrayHiddenFieldID]).ToArray(); + string postValue = selectedValueArray.Length > 0 ? selectedValueArray[0] : String.Empty; + if (SelectedValue != postValue) + { + SelectedValue = postValue; + FState.BackupPostDataProperty("SelectedValue"); + return true; + } + return false; + } + + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public virtual void RaisePostDataChangedEvent() + { + OnSelectedIndexChanged(EventArgs.Empty); + } + + + + private object _handlerKey = new object(); + + /// <summary> + /// 选中项改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选中项改变事件(需要启用AutoPostBack)")] + public event EventHandler SelectedIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选中项改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSelectedIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + + + #endregion + } +} diff --git a/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs b/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs index dfcb305..e14029b 100644 --- a/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs +++ b/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs @@ -1,141 +1,154 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ListItem.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; -using System.Collections; - - -namespace FineUI -{ - /// <summary> - /// 单项按钮项 - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true, DefaultProperty = "Text")] - [Description("单项按钮项")] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class RadioItem - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public RadioItem() - { - - } - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="text">文本</param> - /// <param name="value">值</param> - public RadioItem(string text, string value) - { - Text = text; - Value = value; - } - - #endregion - - #region Properties - - private bool _selected = false; - /// <summary> - /// 是否选中 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("是否选中")] - [DefaultValue(false)] - [NotifyParentProperty(true)] - public bool Selected - { - get - { - return _selected; - } - set - { - _selected = value; - } - } - - private string _text = String.Empty; - /// <summary> - /// 显示的文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示的文本")] - [NotifyParentProperty(true)] - public string Text - { - get - { - return _text; - } - set - { - _text = value; - } - } - - private string _value = String.Empty; - /// <summary> - /// 值 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("值")] - [NotifyParentProperty(true)] - public string Value - { - get - { - return _value; - } - set - { - _value = value; - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListItem.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// <summary> + /// 单项按钮项 + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Text")] + [Description("单项按钮项")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class RadioItem + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public RadioItem() + { + + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + public RadioItem(string text, string value) + { + Text = text; + Value = value; + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <param name="selected">是否选中</param> + public RadioItem(string text, string value, bool selected) + { + Text = text; + Value = value; + Selected = selected; + } + + #endregion + + #region Properties + + private bool _selected = false; + /// <summary> + /// 是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("是否选中")] + [DefaultValue(false)] + [NotifyParentProperty(true)] + public bool Selected + { + get + { + return _selected; + } + set + { + _selected = value; + } + } + + private string _text = String.Empty; + /// <summary> + /// 显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示的文本")] + [NotifyParentProperty(true)] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _value = String.Empty; + /// <summary> + /// 值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("值")] + [NotifyParentProperty(true)] + public string Value + { + get + { + return _value; + } + set + { + _value = value; + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs b/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs index 3200af9..e288725 100644 --- a/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs +++ b/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs @@ -1,119 +1,119 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RadioItemCollection.cs - * CreatedOn: 2010-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// <summary> - /// 单选项集合 - /// </summary> - public class RadioItemCollection : Collection<RadioItem> - { - /// <summary> - /// 通过文本查找单选项 - /// </summary> - /// <param name="text">文本</param> - /// <returns>单选项</returns> - public RadioItem FindByText(string text) - { - return FindByText(text, false); - } - - /// <summary> - /// 通过文本查找单选项 - /// </summary> - /// <param name="text">文本</param> - /// <param name="stripHtml">是否去除HTML标签</param> - /// <returns>单选项</returns> - public RadioItem FindByText(string text, bool stripHtml) - { - IEnumerator enumerator = GetEnumerator(); - - while (enumerator.MoveNext()) - { - RadioItem item = enumerator.Current as RadioItem; - - if (item != null) - { - string itemText = item.Text; - if (stripHtml) - { - itemText = StringUtil.StripHtml(itemText); - } - if (itemText == text) - { - return item; - } - } - } - - return null; - } - - - /// <summary> - /// 通过值查找单选项 - /// </summary> - /// <param name="value">值</param> - /// <returns>单选项</returns> - public RadioItem FindByValue(string value) - { - IEnumerator enumerator = GetEnumerator(); - - while (enumerator.MoveNext()) - { - RadioItem item = enumerator.Current as RadioItem; - - if (item != null && item.Value == value) - { - return item; - } - } - - return null; - } - - - /// <summary> - /// 添加单选项 - /// </summary> - /// <param name="text">文本</param> - /// <param name="value">值</param> - /// <returns>新元素的插入位置</returns> - public int Add(string text, string value) - { - RadioItem item = new RadioItem(text, value); - - return ((IList)this).Add(item); - } - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RadioItemCollection.cs + * CreatedOn: 2010-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 单选项集合 + /// </summary> + public class RadioItemCollection : Collection<RadioItem> + { + /// <summary> + /// 通过文本查找单选项 + /// </summary> + /// <param name="text">文本</param> + /// <returns>单选项</returns> + public RadioItem FindByText(string text) + { + return FindByText(text, false); + } + + /// <summary> + /// 通过文本查找单选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="stripHtml">是否去除HTML标签</param> + /// <returns>单选项</returns> + public RadioItem FindByText(string text, bool stripHtml) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + RadioItem item = enumerator.Current as RadioItem; + + if (item != null) + { + string itemText = item.Text; + if (stripHtml) + { + itemText = StringUtil.StripHtml(itemText); + } + if (itemText == text) + { + return item; + } + } + } + + return null; + } + + + /// <summary> + /// 通过值查找单选项 + /// </summary> + /// <param name="value">值</param> + /// <returns>单选项</returns> + public RadioItem FindByValue(string value) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + RadioItem item = enumerator.Current as RadioItem; + + if (item != null && item.Value == value) + { + return item; + } + } + + return null; + } + + + /// <summary> + /// 添加单选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <returns>新元素的插入位置</returns> + public int Add(string text, string value) + { + RadioItem item = new RadioItem(text, value); + + return ((IList)this).Add(item); + } + + + } +} diff --git a/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs b/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs index ccc57f5..63ececb 100644 --- a/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs +++ b/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs @@ -1,1541 +1,2002 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: DropDownList.cs - * CreatedOn: 2008-04-24 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; -using System.Collections; -using System.Data; -using System.Reflection; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// <summary> - /// 下拉列表控件 - /// </summary> - [Designer("FineUI.Design.DropDownListDesigner, FineUI.Design")] - [ToolboxData("<{0}:DropDownList Label=\"Label\" runat=\"server\"></{0}:DropDownList>")] - [ToolboxBitmap(typeof(DropDownList), "toolbox.DropDownList.bmp")] - [Description("下拉列表控件")] - [ParseChildren(true, DefaultProperty = "Items")] - [PersistChildren(false)] - [DefaultEvent("SelectedIndexChanged")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class DropDownList : TextField, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public DropDownList() - { - AddServerAjaxProperties("X_Items"); - AddClientAjaxProperties("SelectedValue", "Text"); - - AddGzippedAjaxProperties("X_Items"); - } - - #endregion - - #region SelectedIndex/SelectedValue/SelectedItem - - /// <summary> - /// [AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效)")] - public string Text - { - get - { - object obj = XState["Text"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Text"] = value; - } - } - - - /// <summary> - /// [AJAX属性]选中项的值 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string SelectedValue - { - get - { - string value = null; - if (SelectedItem != null) - { - value = SelectedItem.Value; - //// 如果强制选择一项,我们可能需要选中第一项 - //if (ForceSelection) - //{ - // if (Items.Count > 0) - // { - // SelectedIndex = 0; - // value = Items[0].Value; - // } - //} - } - return value; - } - set - { - foreach (ListItem item2 in Items) - { - item2.Selected = false; - } - - if (value != null) - { - ListItem item = Items.FindByValue(value); - if (item != null) - { - item.Selected = true; - } - } - } - } - - /// <summary> - /// [AJAX属性]选中项的索引 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("[AJAX属性]选中项的索引")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int SelectedIndex - { - get - { - int selectedIndex = -1; - for (int i = 0, count = Items.Count; i < count; i++) - { - if (Items[i].Selected) - { - selectedIndex = i; - break; - } - } - return selectedIndex; - } - set - { - if (value >= 0 && value < Items.Count) - { - foreach (ListItem item in Items) - { - item.Selected = false; - } - - Items[value].Selected = true; - } - } - } - - /// <summary> - /// 选中项的文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("选中项的文本")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string SelectedText - { - get - { - if (SelectedItem != null) - { - return SelectedItem.Text; - } - return null; - } - } - - /// <summary> - /// 选中项 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("选中项")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public ListItem SelectedItem - { - get - { - int selectedIndex = SelectedIndex; - if (selectedIndex >= 0 && selectedIndex < Items.Count) - { - return Items[selectedIndex]; - } - return null; - } - } - - #endregion - - #region Properties - - /// <summary> - /// 是否强制选中下拉列表中的项(启用编辑的情况下) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否强制选中下拉列表中的项(启用编辑的情况下)")] - public bool ForceSelection - { - get - { - object obj = XState["ForceSelection"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ForceSelection"] = value; - } - } - - - /// <summary> - /// 是否可编辑,以便在录入时自动过滤下拉框中的值 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否可编辑,以便在录入时自动过滤下拉框中的值")] - public bool EnableEdit - { - get - { - object obj = XState["EnableEdit"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableEdit"] = value; - } - } - - - /// <summary> - /// 是否启用模拟树显示 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否启用模拟树显示")] - public bool EnableSimulateTree - { - get - { - object obj = XState["EnableSimulateTree"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableSimulateTree"] = value; - } - } - - /// <summary> - /// 模拟树显示时指示所在层次的数据字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("模拟树显示时指示所在层次的数据字段")] - public string DataSimulateTreeLevelField - { - get - { - object obj = XState["DataSimulateTreeLevelField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataSimulateTreeLevelField"] = value; - //// 如果设置了DataSimulateTreeLevelField,则设置EnableSimulateTree=true - //if (!String.IsNullOrEmpty(value)) - //{ - // EnableSimulateTree = true; - //} - } - } - - /// <summary> - /// 是否可选择的字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("是否可选择的字段")] - public string DataEnableSelectField - { - get - { - object obj = XState["DataEnableSelectField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataEnableSelectField"] = value; - } - } - - /// <summary> - /// 是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动回发")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - - ///// <summary> - ///// 是否可以改变下拉列表的宽度 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否可以改变下拉列表的宽度")] - //public bool Resizable - //{ - // get - // { - // object obj = XState["Resizable"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["Resizable"] = value; - // } - //} - - #region old code - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("文本框为空时显示的文本")] - //public string EmptyText - //{ - // get - // { - // object obj = BoxState["EmptyText"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // BoxState["EmptyText"] = value; - // } - //} - - //private bool Traditional_Default = true; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("是否渲染为传统的下拉列表")] - //public bool Traditional - //{ - // get - // { - // object obj = BoxState["Editable"]; - // return obj == null ? Traditional_Default : (bool)obj; - // } - // set - // { - // BoxState["Editable"] = value; - // } - //} - - //private bool TypeAhead_Default = false; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否提前输入")] - //public bool TypeAhead - //{ - // get - // { - // object obj = BoxState["TypeAhead"]; - // return obj == null ? TypeAhead_Default : (bool)obj; - // } - // set - // { - // BoxState["TypeAhead"] = value; - // } - //} - - - //private bool EnableFirstItem_Default = false; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否启用“全部”项")] - //public bool EnableFirstItem - //{ - // get - // { - // object obj = BoxState["EnableFirstItem"]; - // return obj == null ? EnableFirstItem_Default : (bool)obj; - // } - // set - // { - // BoxState["EnableFirstItem"] = value; - // } - //} - - //private string FirstItemText_Default = "全部"; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("全部")] - //[Description("“全部”的名称")] - //public string FirstItemText - //{ - // get - // { - // object obj = BoxState["FirstItemText"]; - // return obj == null ? FirstItemText_Default : (string)obj; - // } - // set - // { - // BoxState["FirstItemText"] = value; - // } - //} - - //private string FirstItemValue_Default = "-1"; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("-1")] - //[Description("“全部”的值")] - //public string FirstItemValue - //{ - // get - // { - // object obj = BoxState["FirstItemValue"]; - // return obj == null ? FirstItemValue_Default : (string)obj; - // } - // set - // { - // BoxState["FirstItemValue"] = value; - // } - //} - - #endregion - - #endregion - - #region Data Properties - - /// <summary> - /// 显示文本字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示文本字段")] - public string DataTextField - { - get - { - object obj = XState["DataTextField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataTextField"] = value; - } - } - - - /// <summary> - /// 显示文本的格式化字符串 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示文本的格式化字符串")] - public string DataTextFormatString - { - get - { - object obj = XState["DataTextFormatString"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataTextFormatString"] = value; - } - } - - /// <summary> - /// 显示值字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示值字段")] - public string DataValueField - { - get - { - object obj = XState["DataValueField"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["DataValueField"] = value; - } - } - - private object _dataSource; - - /// <summary> - /// 数据源 - /// </summary> - [DefaultValue(null)] - [Description("数据源")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object DataSource - { - set - { - _dataSource = value; - } - get - { - return _dataSource; - } - } - - #endregion - - #region X Properties - - /// <summary> - /// 保存的列表项数据(内部使用) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public JArray X_Items - { - get - { - JArray ja = new JArray(); - foreach (ListItem item in Items) - { - JArray ja2 = new JArray(); - ja2.Add(item.Value); - ja2.Add(item.Text); - ja2.Add(item.EnableSelect ? 1 : 0); - if (EnableSimulateTree) - { - ja2.Add(item.SimulateTreeLevel); - } - ja.Add(ja2); - } - return ja; - } - set - { - // 由于SelectedValue是单独保存的,所以在清空之前的数据之前要先备份 - string selectedValue = SelectedValue; - Items.Clear(); - - foreach (JArray ja2 in value) - { - ListItem item = new ListItem(); - item.Value = ja2[0].Value<string>(); // ja2.getString(0); - item.Text = ja2[1].Value<string>(); //ja2.getString(1); - item.EnableSelect = ja2[2].Value<int>() == 1 ? true : false; - if (EnableSimulateTree) - { - item.SimulateTreeLevel = ja2[3].Value<int>(); - } - Items.Add(item); - } - - // 恢复选中项 - SelectedValue = selectedValue; - } - } - - #endregion - - #region Items - - private ListItemCollection items; - - /// <summary> - /// 列表项集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerDefaultProperty)] - [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual ListItemCollection Items - { - get - { - if (items == null) - { - items = new ListItemCollection(); - } - return items; - } - } - #endregion - - #region LoadXState/SaveXState - //private string lastSelectedValue = null; - //protected override void LoadXState(JObject state, string property) - //{ - // base.LoadXState(state, property); - - // if (property == "X_Items") - // { - // XItemsFromJSON(state.getJArray(property)); - // // After recover Items property, we should recover SelectedValue according to Items. - // SelectedValue = lastSelectedValue; - // } - // else if (property == "X_SelectedValue") - // { - // lastSelectedValue = state.getString(property); - // SaveXProperty("X_SelectedValue", lastSelectedValue); - // SelectedValue = lastSelectedValue; - // } - //} - - //protected override void OnInit(EventArgs e) - //{ - // base.OnInit(e); - - // SaveXProperty("X_Items", XItemsToJSON().ToString()); - // SaveXProperty("X_SelectedValue", SelectedValue); - //} - - //protected override void OnBothPreRender() - //{ - // base.OnBothPreRender(); - - // // Items has been changed in server-side code after onInit. - // if (XPropertyModified("X_Items", XItemsToJSON().ToString())) - // { - // XState.AddModifiedProperty("X_Items"); - // // If Items have been changed, then we must reset the SelectedValue. - // XState.AddModifiedProperty("X_SelectedValue"); - // } - - // if (XPropertyModified("X_SelectedValue", SelectedValue)) - // { - // XState.AddModifiedProperty("X_SelectedValue"); - // } - - //} - - //protected override void SaveXState(JObject state, string property) - //{ - // if (property == "X_Items") - // { - // state.put(property, XItemsToJSON()); - // } - // else if (property == "X_SelectedValue") - // { - // state.put(property, SelectedValue); - // } - //} - - //private JArray XItemsToJSON() - //{ - // JArray ja = new JArray(); - // foreach (ListItem item in Items) - // { - // JArray ja2 = new JArray(); - // ja2.Add(item.Value); - // ja2.Add(item.Text); - // ja2.Add(item.EnableSelect ? 1 : 0); - // if (EnableSimulateTree) - // { - // ja2.Add(item.SimulateTreeLevel); - // } - // ja.Add(ja2); - // } - // return ja; - //} - - //private void XItemsFromJSON(JArray ja) - //{ - // foreach (JArray ja2 in ja.getArrayList()) - // { - // ListItem item = new ListItem(); - // item.Value = ja2.getString(0); - // item.Text = ja2.getString(1); - // item.EnableSelect = ja2.getInt(2) == 1 ? true : false; - // if (EnableSimulateTree) - // { - // item.SimulateTreeLevel = ja2.getInt(3); - // } - // Items.Add(item); - // } - //} - - #endregion - - #region SelectedValueHiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string SelectedValueHiddenFieldID - { - get - { - return String.Format("{0}_Value", ClientID); - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("X_Items")) - { - sb.AppendFormat("{0}.x_loadData();", XID); - - // TODO: 修改Items记录后要更新SelectedValue - } - - if (PropertyModified("SelectedValue")) - { - //if (ClientPropertyModifiedInServer("SelectedValue")) - - sb.AppendFormat("{0}.x_setValue();", XID); - - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - // 确保 X_Items 和 SelectedValue 在页面第一次加载时都存在于x_state中 - XState.AddModifiedProperty("X_Items"); - XState.AddModifiedProperty("SelectedValue"); - - base.OnFirstPreRender(); - - #region examples - - //var nextStepList = [ - // ['审核', '1'], - // ['不审核', '2'] - //]; - //var nextStepStore = new Ext.data.SimpleStore({ - // fields: ['text', 'value'], - // data: nextStepList - //}); - //{ - // xtype:'combo', - // store: nextStepStore, - // displayField:'text', - // valueField:'value', - // typeAhead: true, - // mode: 'local', - // triggerAction: 'all', - // value:'1', - // emptyText:'请选择下一步', - // selectOnFocus:true, - // allowBlank:false, - // fieldLabel: '下一步', - // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', - // name: 'nextStep', - // anchor:'95%' - //} - - #endregion - - #region Properties - - if (EnableEdit) - { - OB.AddProperty("editable", true); - } - else - { - OB.AddProperty("editable", false); - } - - - - if (ForceSelection) - { - OB.AddProperty("forceSelection", true); - } - - //if (Resizable) - //{ - // OB.AddProperty("resizable", true); - //} - - OB.AddProperty("hiddenName", SelectedValueHiddenFieldID); - - - JsObjectBuilder storeBuilder = new JsObjectBuilder(); - storeBuilder.AddProperty("fields", "['value','text','enabled','prefix']", true); - storeBuilder.AddProperty("data", String.Format("X.simulateTree.transform({0}.X_Items)", GetXStateScriptID()), true); - OB.AddProperty("store", String.Format("Ext.create('Ext.data.ArrayStore',{0})", storeBuilder), true); - - OB.AddProperty("value", String.Format("{0}.SelectedValue", GetXStateScriptID()), true); - - OB.AddProperty("tpl", "X.util.ddlTPL", true); - - OB.AddProperty("queryMode", "local"); - OB.AddProperty("triggerAction", "all"); - - #region old code - //OB.AddProperty("mode", "local"); - //// 点击下拉按钮时显示全部内容 - //OB.AddProperty("triggerAction", "all"); - //// 必须选中一个值,不能自己输入内容 - //OB.AddProperty("forceSelection", true); - //// 此下拉列表控件不可以编辑 - //OB.AddProperty("editable", false); - - //OB.AddProperty(OptionName.Title, "Title"); - //if (TypeAhead) OB.AddProperty(OptionName.TypeAhead, true); - //OB.AddProperty(OptionName.SelectOnFocus, true); - - //// SelectedValue可以为空 - //if (!String.IsNullOrEmpty(SelectedValue)) - //{ - // OB.AddProperty("value", SelectedValue); - //} - #endregion - - #endregion - - #region old code - - //string hiddenFieldsScript = String.Empty; - //if (AutoPostBack) - //{ - // hiddenFieldsScript += GetSetHiddenFieldValueScript(LastSelectedValueHiddenID, SelectedValue); - //} - - //string disableSelectRowIndexsString = GetDisableSelectRowIndexsString(); - //string disableSelectRowIndexsScript = GetSetHiddenFieldValueScript(DisableRowIndexsHiddenID, disableSelectRowIndexsString); - - //// TODO: - //// 这个要放在加载数据的前面,因为加载数据时需要渲染UI,渲染UI时需要用到这个隐藏字段的值 - //if (AjaxPropertyChanged("DisableSelectRowIndexsString", disableSelectRowIndexsString)) - //{ - // AddAjaxPropertyChangedScript(disableSelectRowIndexsScript); - //} - - - // 不管是不是disableSelectFields.Count > 0,都要执行下面的语句,因为可能页面加载时为0,在Ajax后不为零 - //if (disableSelectFields.Count > 0) - //OB.AddProperty(OptionName.Tpl, String.Format("'<tpl for=\".\"><div class=\"x-combo-list-item {{[X.util.isHiddenFieldContains(\"{0}\",xindex-1) ? \"box-combo-list-item-disable-select\" : \"\"]}}\">{{text}}</div></tpl>'", DisableSelectRowIndexsHiddenID), true); - //var tplStr = "'<tpl for=\".\"><div class=\"x-combo-list-item\">{text}</div></tpl>'"; - //var tplStr = "new Ext.XTemplate('<tpl for=\".\"><div class=\"x-combo-list-item\">{text}</div></tpl>')"; - - //var tplStr = "<tpl for=\".\"><div class=\"x-combo-list-item <tpl if=\"!enabled\">x-combo-list-item-disable</tpl>\">{prefix}{text}</div></tpl>"; - //OB.AddProperty("tpl", tplStr); - //OB.AddProperty("tpl", tplStr.Replace("#DisableRowIndexsHiddenID#", DisableRowIndexsHiddenID), true); - - - //string setSimulateTreeTextFunctionScript = String.Empty; - //string setSimulateTreeTextScript = String.Empty; - //if (EnableSimulateTree) - //{ - // string setSimulateTextScript = String.Format("var text=Ext.get('{0}').dom.value;if(text.lastIndexOf('<img')>=0){{Ext.get('{0}').dom.value=X.util.stripHtmlTags(text);}}", ClientID); - // setSimulateTreeTextFunctionScript = String.Format("{0}_setSimulateText=function(){{{1}}};", ClientJavascriptID, setSimulateTextScript); - - // // 加载完毕后,显示选中的值 - // //AddAbsoluteStartupScript(String.Format("{0}_setSimulateText();", ClientJavascriptID)); - // // 下拉列表加载完毕后,立即去掉前面图片的HTML标签 - // string renderScript = JsHelper.GetDeferScript(String.Format("{0}_setSimulateText();", ClientJavascriptID), 20); // "(function(){" + String.Format("{0}_setSimulateText();", ClientJavascriptID) + "}).defer(20);"; - // OB.Listeners.AddProperty(OptionName.EVENT_RENDER, "function(component){" + renderScript + "}", true); - //} - - - //string simulateTreeAllScript = String.Empty; - //if (EnableSimulateTree) - //{ - // // 在选中一项后,立即去掉前面图片的HTML标签 - // simulateTreeAllScript += "\r\n"; - // //string simulateTreeScript = String.Format("function(ddl,record,index){{var text=record.data.text;var startDivIndex=text.lastIndexOf('</div>');text=text.substr(startDivIndex+6);Ext.get('{0}').dom.value=text;}}", ClientID); - // string simulateTreeScript = String.Format("function(ddl,record,index){{X.{0}_setSimulateText();}}", ClientJavascriptID); - // simulateTreeScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientJavascriptID, OptionName.Select, simulateTreeScript); - // //AddAbsoluteStartupScript( simulateTreeScript); - // simulateTreeAllScript += simulateTreeScript; - - // simulateTreeAllScript += "\r\n"; - // string simulateTreeBlurScript = String.Format("function(ddl){{X.{0}_setSimulateText();}}", ClientJavascriptID); - // simulateTreeBlurScript = String.Format("{0}.on('{1}',{2},box,{{delay:10}});", ClientJavascriptID, OptionName.Blur, simulateTreeBlurScript); - // //AddAbsoluteStartupScript( simulateTreeBlurScript); - // simulateTreeAllScript += simulateTreeBlurScript; - //} - - - - - // These are default values, which are assignment in extender.js. - //OB.AddProperty("displayField", "text"); - //OB.AddProperty("valueField", "value"); - //OB.AddProperty("store", "new Ext.data.ArrayStore({fields:['value','text','enabled','prefix']})", true); - - //string dataScript = String.Empty; - //string fields = "['value','text','enabled','prefix']"; - //string storeScript = "new Ext.data.ArrayStore({fields:['value','text','enabled','prefix']})";//", fields, GetDataArrayString()); // GetDataArrayString() - - //OB.AddProperty(OptionName.Store, String.Format("new Ext.data.ArrayStore({{fields:['value','text'],data:{0}}})", dataArrayString), true); - //OB.AddProperty("store", String.Format("{0}_data", XID), true); - //string dataScript = String.Format("{0}_data=new Ext.data.ArrayStore({{fields:['value','text'],data:{1}}});", ClientJavascriptID, dataArrayString); - //sb.AppendFormat("this.{0}_store=new Ext.data.SimpleStore({{fields:['text', 'value'],data:this.{0}_data}});", ClientJavascriptID); - #endregion - - #region AutoPostBack - - StringBuilder beforeselectSB = new StringBuilder(); - // 是否能选中一项(如果此项不能选中,则点击没用) - //beforeselectSB.AppendFormat("if(X.util.isHiddenFieldContains('{0}',index)){{return false;}}", DisableRowIndexsHiddenID); - beforeselectSB.Append("if(!record.data.enabled){return false;}"); - - if (AutoPostBack) - { - beforeselectSB.Append("cmp.x_tmp_lastvalue=cmp.getValue();"); - - string selectScript = "if(cmp.x_tmp_lastvalue!==cmp.getValue()){" + GetPostBackEventReference() + "}"; - OB.Listeners.AddProperty("select", JsHelper.GetFunction(selectScript, "cmp"), true); - } - - OB.Listeners.AddProperty("beforeselect", JsHelper.GetFunction(beforeselectSB.ToString(), "cmp", "record", "index"), true); - - #region old code - //if (AutoPostBack) - //{ - // // Note: we can't use change event, because it get triggered when the combox lost focus, which is not in time. - // // Beforeselect - If current select item is not changed, don't PostBack. - // string beforeselectScript = String.Format("function(ddl,record,index){{Ext.get('{0}').dom.value=Ext.get('{1}').dom.value;}}", LastSelectedValueHiddenID, SelectedValueHiddenID); - // beforeselectScript = String.Format("{0}.on('{1}',{2},X,{{delay:0}});", XID, "beforeselect", beforeselectScript); - // //AddAbsoluteStartupScript( beforeselectScript); - // autoPostBackScript += beforeselectScript; - - // // Select - // string selectScript = String.Format("function(ddl,record,index){{if(record.data.value!=Ext.get('{0}').dom.value){{{1}}}}}", LastSelectedValueHiddenID, GetPostBackEventReference()); - // selectScript = String.Format("{0}.on('{1}',{2},X,{{delay:0}});", XID, "select", selectScript); - // //AddAbsoluteStartupScript( selectScript); - // autoPostBackScript += selectScript; - - - // //OB.Listeners.RemoveProperty(OptionName.Change); - // //OB.Listeners.AddProperty(OptionName.Change, String.Format("function(ddl,newValue,oldValue){{box_pageStateChange();alert(newValue+':'+oldValue);}}"), true); - //} - #endregion - - #endregion - - #region Listeners - render - - //string renderScript = "cmp.x_loadData();cmp.x_setValue();"; - - //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript, "cmp"), true); - - #endregion - - #region AddStartupScript - - string contentScript = String.Format("var {0}=Ext.create('Ext.form.field.ComboBox',{1});", XID, OB.ToString()); - - AddStartupScript(contentScript); - - #region old code - //List<string> totalModifiedProperties = XState.GetTotalModifiedProperties(); - //StringBuilder loadDataSB = new StringBuilder(); - //if (totalModifiedProperties.Contains("X_Items")) - //{ - // loadDataSB.AppendFormat("{0}.x_loadData();", XID); - //} - //else - //{ - // loadDataSB.AppendFormat("{0}.store.loadData({1});", XID, X_Items.ToString()); - //} - - //if (totalModifiedProperties.Contains("SelectedValue")) - //{ - // loadDataSB.AppendFormat("{0}.x_setValue();", XID); - //} - //else - //{ - // loadDataSB.AppendFormat("{0}.x_setValue({1});", XID, JsHelper.Enquote(SelectedValue)); - //} - #endregion - - #endregion - - } - - #region old code - - //private string GetDataArrayString() - //{ - // if (Items.Count == 0) - // { - // return "[[]]"; - // } - // else - // { - // if (EnableSimulateTree) - // { - // List<SimulateTreeNode> silumateTreeNodes = new List<SimulateTreeNode>(); - // // Set up a list for calculate(mainly the front images). - // for (int rowIndex = 0; rowIndex < Items.Count; rowIndex++) - // { - // ListItem item = Items[rowIndex]; - // SimulateTreeNode node = new SimulateTreeNode(); - // node.Text = item.Text; - // node.Value = item.Value; - // node.Level = item.SimulateTreeLevel; - // node.EnableSelect = item.EnableSelect; - // node.HasLittleBrother = false; - // node.ParentNode = null; - // silumateTreeNodes.Add(node); - // } - // // Use a helper class to calculate tree. - // SimulateTreeHeper treeHelper = new SimulateTreeHeper(); - // treeHelper.ResolveSimulateTree(silumateTreeNodes, false); - - - // JArray ja = new JArray(); - // foreach (SimulateTreeNode node in silumateTreeNodes) - // { - // JArray ja2 = new JArray(); - // ja2.Add(node.Value); - // ja2.Add(node.Text); - // ja2.Add(node.EnableSelect ? 1 : 0); - // ja2.Add(node.SimulateTreeText); - - // ja.Add(ja2); - // } - // return ja.ToString(); - // } - // else - // { - // JArray ja = new JArray(); - // foreach (ListItem item in Items) - // { - // JArray ja2 = new JArray(); - // ja2.Add(item.Value); - // ja2.Add(item.Text); - // ja2.Add(item.EnableSelect ? 1 : 0); - - // ja.Add(ja2); - // } - // return ja.ToString(); - // } - // } - //} - - ///// <summary> - ///// Return values: "0,1,2,10" - ///// </summary> - ///// <returns></returns> - //private string GetDisableSelectRowIndexsString() - //{ - // List<int> disableSelectRows = new List<int>(); - // for (int rowIndex = 0, rowCount = Items.Count; rowIndex < rowCount; rowIndex++) - // { - // if (!Items[rowIndex].EnableSelect) - // { - // disableSelectRows.Add(rowIndex); - // } - // } - - // #region old code - // // 下面的条件判断不能加,因为如果页面第一次加载时没有不能选择的项,则以后回发时都不会有不能选择的项 - // //if (disableSelectFields.Count > 0) - // //{ - // // 把这个状态保存在隐藏字段中,因为可能在Ajax中改变 - // //disableSelectScript = String.Format("{0}_disableSelect={1};", ClientJavascriptID, JsHelper.GetJsIntArray(disableSelectFields.ToArray())); - // //disableSelectScript += "\r\n"; - // #endregion - // return StringUtil.GetStringFromIntArray(disableSelectRows.ToArray()); - //} - - - #endregion - - #endregion - - #region DataBind - /// <summary> - /// 绑定到数据源 - /// </summary> - public override void DataBind() - { - if (_dataSource != null) - { - // Clear all items - Items.Clear(); - - if (_dataSource is IDataReader) - { - DataTable dataTable = new DataTable(); - dataTable.Load(_dataSource as IDataReader); - - DataBindToDataTable(dataTable); - } - else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) - { - DataTable dataTable = null; - - if (_dataSource is DataView) - { - dataTable = ((DataView)_dataSource).ToTable(); - } - else if (_dataSource is DataSet) - { - dataTable = ((DataSet)_dataSource).Tables[0]; - } - else - { - dataTable = ((DataTable)_dataSource); - } - - DataBindToDataTable(dataTable); - } - else if (_dataSource is IEnumerable) - { - DataBindToEnumerable((IEnumerable)_dataSource); - } - else - { - throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); - } - } - - base.DataBind(); - } - - #endregion - - #region private DataBind - - - /// <summary> - /// 绑定到数据表格 - /// </summary> - /// <param name="dataTable">数据表格</param> - private void DataBindToDataTable(DataTable dataTable) - { - int startIndex = 0; - int endIndex = Int32.MaxValue; - for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) - { - DataRow row = dataTable.Rows[i]; - - Items.Add(CreateListItem(row)); - } - } - - - /// <summary> - /// 绑定到可枚举类型 - /// </summary> - /// <param name="enumerable">可枚举类型</param> - private void DataBindToEnumerable(IEnumerable enumerable) - { - #region old code - //int startIndex = 0; - //int endIndex = Int32.MaxValue; - - //IEnumerator enumerator = enumerable.GetEnumerator(); - - //// 定位开始位置 - //enumerator.Reset(); - //enumerator.MoveNext(); - - //int count = 0; - - //// skip some items? - //while (count < startIndex) - //{ - // enumerator.MoveNext(); - // count++; - //} - - //try - //{ - // if (enumerator.Current == null) - // { - // return; - // } - //} - //catch - //{ - // return; - //} - - //while (enumerator.Current != null && count < endIndex) - //{ - // object currentObject = enumerator.Current; - - // ListItem item = new ListItem(); - - // if (currentObject is string) - // { - // item.Text = currentObject.ToString(); - // item.Value = currentObject.ToString(); - // } - // else - // { - // // Load item - // if (DataTextField != "") - // { - // item.Text = GetPropertyValue(currentObject, DataTextField); - // } - // else - // { - // item.Text = currentObject.ToString(); - // } - - // if (DataValueField != "") - // { - // item.Value = GetPropertyValue(currentObject, DataValueField); - // } - // else - // { - // item.Value = currentObject.ToString(); - // } - - // // 如果需要模拟树 - // if (!String.IsNullOrEmpty(DataSimulateTreeLevelField)) - // { - // item.SimulateTreeLevel = Convert.ToInt32(GetPropertyValue(currentObject, DataSimulateTreeLevelField)); - // } - - // // 是否选择 - // item.EnableSelect = true; - // if (!String.IsNullOrEmpty(DataEnableSelectField)) - // { - // item.EnableSelect = Convert.ToBoolean(GetPropertyValue(currentObject, DataEnableSelectField)); - // } - - // } - - // Items.Add(item); - - // if (!enumerator.MoveNext()) - // { - // break; - // } - - // count++; - //} - #endregion - - IEnumerator enumerator = enumerable.GetEnumerator(); - while (enumerator.MoveNext()) - { - object currentObject = enumerator.Current; - Items.Add(CreateListItem(currentObject)); - } - } - - private ListItem CreateListItem(Object obj) - { - ListItem item = new ListItem(); - - if (obj is string) - { - item.Text = obj.ToString(); - item.Value = obj.ToString(); - } - else - { - if (DataTextField != "") - { - if (DataTextFormatString != "") - { - item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); - } - else - { - item.Text = GetPropertyValue(obj, DataTextField); - } - } - else - { - item.Text = obj.ToString(); - } - - if (DataValueField != "") - { - item.Value = GetPropertyValue(obj, DataValueField); - } - else - { - item.Value = obj.ToString(); - } - - // 如果需要模拟树 - if (!String.IsNullOrEmpty(DataSimulateTreeLevelField)) - { - item.SimulateTreeLevel = Convert.ToInt32(GetPropertyValue(obj, DataSimulateTreeLevelField)); - } - - // 是否可以选择 - item.EnableSelect = true; - if (!String.IsNullOrEmpty(DataEnableSelectField)) - { - item.EnableSelect = Convert.ToBoolean(GetPropertyValue(obj, DataEnableSelectField)); - } - } - return item; - } - - /// <summary> - /// 取得属性值 - /// </summary> - /// <param name="obj"></param> - /// <param name="propertyName"></param> - private string GetPropertyValue(object obj, string propertyName) - { - object result = null; - - result = ObjectUtil.GetPropertyValue(obj, propertyName); - - return result == null ? String.Empty : result.ToString(); - } - - //private void AfterDataBind() - //{ - // //// 必须重新计算模拟数的数据 - // //mustReCalculateSimulateTreeData = true; - //} - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - string postText = postCollection[postDataKey]; - string postValue = postCollection[SelectedValueHiddenFieldID]; - - - ListItem item = Items.FindByValue(postValue); - if (item != null && item.Text == postText) - { - if (SelectedValue != postValue) - { - SelectedValue = postValue; - XState.BackupPostDataProperty("SelectedValue"); - return true; - } - } - else - { - SelectedValue = null; - XState.BackupPostDataProperty("SelectedValue"); - - Text = postText; - XState.BackupPostDataProperty("Text"); - return true; - } - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public void RaisePostDataChangedEvent() - { - OnSelectedIndexChanged(EventArgs.Empty); - } - - #endregion - - #region SelectedIndexChanged - - private object _handlerKey = new object(); - - /// <summary> - /// 选中项改变事件(需要启用AutoPostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("选中项改变事件(需要启用AutoPostBack)")] - public event EventHandler SelectedIndexChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发选中项改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnSelectedIndexChanged(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region old code - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - // states[1] = ((IStateManager)Items).SaveViewState(); - - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Items).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Items).TrackViewState(); - //} - - //protected override void SetDirty() - //{ - // base.SetDirty(); - - // ((ISetDirty)Items).SetDirty(); - //} - - - - ///// <summary> - ///// 保存上次选中值的Input - ///// </summary> - //private string LastSelectedValueHiddenID - //{ - // get - // { - // return String.Format("{0}_last_value", XID); - // } - //} - - ///// <summary> - ///// 保存当前选中值的Input - ///// </summary> - //private string SelectedValueHiddenID - //{ - // get - // { - // return UniqueID; - // } - //} - - - ///// <summary> - ///// 不可用的行Index列表 - ///// </summary> - //private string DisableRowIndexsHiddenID - //{ - // get - // { - // return String.Format("{0}_disable_rows", ClientID); - // } - //} - - - //protected override void OnPreLoad(object sender, EventArgs e) - //{ - // base.OnPreLoad(sender, e); - - // SaveAjaxProperty("DisableSelectRowIndexsString", GetDisableSelectRowIndexsString()); - // SaveAjaxProperty("DataArrayString", GetDataArrayString()); - // SaveAjaxProperty("SelectedValue", SelectedValue); - //} - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: DropDownList.cs + * CreatedOn: 2008-04-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Collections; +using System.Data; +using System.Reflection; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// <summary> + /// 下拉列表控件 + /// </summary> + [Designer("FineUI.Design.DropDownListDesigner, FineUI.Design")] + [ToolboxData("<{0}:DropDownList Label=\"Label\" runat=\"server\"></{0}:DropDownList>")] + [ToolboxBitmap(typeof(DropDownList), "toolbox.DropDownList.bmp")] + [Description("下拉列表控件")] + [ParseChildren(true, DefaultProperty = "Items")] + [PersistChildren(false)] + [DefaultEvent("SelectedIndexChanged")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class DropDownList : TextField, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public DropDownList() + { + AddServerAjaxProperties("F_Items"); + AddClientAjaxProperties("SelectedValue", "SelectedValueArray", "Text"); + + AddGzippedAjaxProperties("F_Items"); + } + + #endregion + + #region SelectedIndex/SelectedValue/SelectedItem + + + /// <summary> + /// 文本框为空时显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本框为空时显示的文本")] + public virtual string EmptyText + { + get + { + object obj = FState["EmptyText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["EmptyText"] = value; + } + } + + + /// <summary> + /// [AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效)")] + public string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string SelectedValue + { + get + { + string value = null; + if (SelectedItem == null) + { + /* + // 如果强制选择一项,我们可能需要选中第一项 + if (AutoSelectFirstItem) + { + if (Items.Count > 0) + { + SelectedIndex = 0; + // If SelectedValue is null, then we select the first item of the list. + value = Items[0].Value; + } + } + */ + } + else + { + value = SelectedItem.Value; + } + return value; + } + set + { + foreach (ListItem item2 in Items) + { + item2.Selected = false; + } + + if (value != null) + { + ListItem item = Items.FindByValue(value); + if (item != null) + { + item.Selected = true; + } + } + } + } + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int SelectedIndex + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + + int selectedIndex = -1; + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + selectedIndex = i; + break; + } + } + + //// 自动修正(仅在页面第一次加载时有效) + //if (selectedIndex == -1 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + //{ + // selectedIndex = 0; + //} + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + if (selectedIndex == -1 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + { + selectedIndex = 0; + } + + return selectedIndex; + } + set + { + if (value >= 0 && value < Items.Count) + { + foreach (ListItem item in Items) + { + item.Selected = false; + } + + Items[value].Selected = true; + } + } + } + + /// <summary> + /// 选中项的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项的文本")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string SelectedText + { + get + { + if (SelectedItem != null) + { + return SelectedItem.Text; + } + return null; + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListItem SelectedItem + { + get + { + int selectedIndex = SelectedIndex; + if (selectedIndex >= 0 && selectedIndex < Items.Count) + { + return Items[selectedIndex]; + } + return null; + } + } + + #endregion + + #region SelectedIndexArray/SelectedValueArray/SelectedItemArray + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string[] SelectedValueArray + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + List<string> selectedValues = new List<string>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + ListItem item = Items[i]; + if (item.Selected) + { + selectedValues.Add(item.Value); + } + } + + /* + // 如果强制选择一项,我们可能需要选中第一项 + if (selectedValues.Count == 0 && AutoSelectFirstItem) + { + if (Items.Count > 0) + { + SelectedIndex = 0; + selectedValues.Add(Items[0].Value); + } + } + */ + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + if (selectedValues.Count == 0 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + { + selectedValues.Add(Items[0].Value); + } + + return selectedValues.ToArray(); + } + set + { + List<string> selectedValues = new List<string>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + ListItem item = Items[i]; + if (selectedValues.Contains(item.Value)) + { + item.Selected = true; + } + else + { + item.Selected = false; + } + } + } + } + + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedIndexArray + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + List<int> selectedIndexs = new List<int>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + selectedIndexs.Add(i); + } + } + + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + if (selectedIndexs.Count == 0 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + { + selectedIndexs.Add(0); + } + + return selectedIndexs.ToArray(); + } + set + { + List<int> selectedIndexs = new List<int>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (selectedIndexs.Contains(i)) + { + Items[i].Selected = true; + } + else + { + Items[i].Selected = false; + } + } + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListItem[] SelectedItemArray + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + List<ListItem> selectedItems = new List<ListItem>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + ListItem item = Items[i]; + if (item.Selected) + { + selectedItems.Add(item); + } + } + + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + if (selectedItems.Count == 0 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + { + selectedItems.Add(Items[0]); + } + + return selectedItems.ToArray(); + } + } + + #endregion + + #region Properties + + /// <summary> + /// 下拉列表和字段的宽度相匹配 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("下拉列表和字段的宽度相匹配")] + public bool MatchFieldWidth + { + get + { + object obj = FState["MatchFieldWidth"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["MatchFieldWidth"] = value; + } + } + + + + + /// <summary> + /// 如果未定义选中项,则自动选中第一个子项(默认为true) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("如果未定义选中项,则自动选中第一个子项(默认为true)")] + public bool AutoSelectFirstItem + { + get + { + object obj = FState["AutoSelectFirstItem"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["AutoSelectFirstItem"] = value; + } + } + + + /// <summary> + /// 是否可以选择多项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以选择多项")] + public bool EnableMultiSelect + { + get + { + object obj = FState["EnableMultiSelect"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMultiSelect"] = value; + } + } + + + private const string MULTISELECT_SEPARATOR_DEFAULT = ", "; + + /// <summary> + /// 选择多项的分隔符 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(string), MULTISELECT_SEPARATOR_DEFAULT)] + [Description("选择多项的分隔符")] + public string MultiSelectSeparator + { + get + { + object obj = FState["MultiSelectSeparator"]; + return obj == null ? MULTISELECT_SEPARATOR_DEFAULT : (string)obj; + } + set + { + FState["MultiSelectSeparator"] = value; + } + } + + + /// <summary> + /// 是否强制选中下拉列表中的项(启用编辑的情况下) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否强制选中下拉列表中的项(启用编辑的情况下)")] + public bool ForceSelection + { + get + { + object obj = FState["ForceSelection"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ForceSelection"] = value; + } + } + + + /// <summary> + /// 是否可编辑,以便在录入时自动过滤下拉框中的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可编辑,以便在录入时自动过滤下拉框中的值")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + + /// <summary> + /// 是否启用模拟树显示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用模拟树显示")] + public bool EnableSimulateTree + { + get + { + object obj = FState["EnableSimulateTree"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSimulateTree"] = value; + } + } + + /// <summary> + /// 模拟树显示时指示所在层次的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("模拟树显示时指示所在层次的数据字段")] + public string DataSimulateTreeLevelField + { + get + { + object obj = FState["DataSimulateTreeLevelField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataSimulateTreeLevelField"] = value; + //// 如果设置了DataSimulateTreeLevelField,则设置EnableSimulateTree=true + //if (!String.IsNullOrEmpty(value)) + //{ + // EnableSimulateTree = true; + //} + } + } + + /// <summary> + /// 是否可选择的字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("是否可选择的字段")] + public string DataEnableSelectField + { + get + { + object obj = FState["DataEnableSelectField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataEnableSelectField"] = value; + } + } + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + + ///// <summary> + ///// 是否可以改变下拉列表的宽度 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否可以改变下拉列表的宽度")] + //public bool Resizable + //{ + // get + // { + // object obj = FState["Resizable"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Resizable"] = value; + // } + //} + + #region old code + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("文本框为空时显示的文本")] + //public string EmptyText + //{ + // get + // { + // object obj = BoxState["EmptyText"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["EmptyText"] = value; + // } + //} + + //private bool Traditional_Default = true; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否渲染为传统的下拉列表")] + //public bool Traditional + //{ + // get + // { + // object obj = BoxState["Editable"]; + // return obj == null ? Traditional_Default : (bool)obj; + // } + // set + // { + // BoxState["Editable"] = value; + // } + //} + + //private bool TypeAhead_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否提前输入")] + //public bool TypeAhead + //{ + // get + // { + // object obj = BoxState["TypeAhead"]; + // return obj == null ? TypeAhead_Default : (bool)obj; + // } + // set + // { + // BoxState["TypeAhead"] = value; + // } + //} + + + //private bool EnableFirstItem_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用“全部”项")] + //public bool EnableFirstItem + //{ + // get + // { + // object obj = BoxState["EnableFirstItem"]; + // return obj == null ? EnableFirstItem_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableFirstItem"] = value; + // } + //} + + //private string FirstItemText_Default = "全部"; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("全部")] + //[Description("“全部”的名称")] + //public string FirstItemText + //{ + // get + // { + // object obj = BoxState["FirstItemText"]; + // return obj == null ? FirstItemText_Default : (string)obj; + // } + // set + // { + // BoxState["FirstItemText"] = value; + // } + //} + + //private string FirstItemValue_Default = "-1"; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("-1")] + //[Description("“全部”的值")] + //public string FirstItemValue + //{ + // get + // { + // object obj = BoxState["FirstItemValue"]; + // return obj == null ? FirstItemValue_Default : (string)obj; + // } + // set + // { + // BoxState["FirstItemValue"] = value; + // } + //} + + #endregion + + #endregion + + #region Data Properties + + /// <summary> + /// 显示文本字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本字段")] + public string DataTextField + { + get + { + object obj = FState["DataTextField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextField"] = value; + } + } + + + /// <summary> + /// 显示文本的格式化字符串 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的格式化字符串")] + public string DataTextFormatString + { + get + { + object obj = FState["DataTextFormatString"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextFormatString"] = value; + } + } + + /// <summary> + /// 显示值字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示值字段")] + public string DataValueField + { + get + { + object obj = FState["DataValueField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataValueField"] = value; + } + } + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Description("数据源")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region X Properties + + /// <summary> + /// 保存的列表项数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Items + { + get + { + JArray ja = new JArray(); + foreach (ListItem item in Items) + { + JArray ja2 = new JArray(); + ja2.Add(item.Value); + ja2.Add(item.Text); + ja2.Add(item.EnableSelect ? 1 : 0); + if (EnableSimulateTree) + { + ja2.Add(item.SimulateTreeLevel); + } + ja.Add(ja2); + } + return ja; + } + set + { + // 由于SelectedValue是单独保存的,所以在清空之前的数据之前要先备份 + string selectedValue = SelectedValue; + Items.Clear(); + + foreach (JArray ja2 in value) + { + ListItem item = new ListItem(); + item.Value = ja2[0].Value<string>(); // ja2.getString(0); + item.Text = ja2[1].Value<string>(); //ja2.getString(1); + item.EnableSelect = ja2[2].Value<int>() == 1 ? true : false; + if (EnableSimulateTree) + { + item.SimulateTreeLevel = ja2[3].Value<int>(); + } + Items.Add(item); + } + + // 恢复选中项 + SelectedValue = selectedValue; + } + } + + #endregion + + #region Items + + private ListItemCollection items; + + /// <summary> + /// 列表项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ListItemCollection Items + { + get + { + if (items == null) + { + items = new ListItemCollection(); + } + return items; + } + } + #endregion + + #region LoadFState/SaveFState + //private string lastSelectedValue = null; + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // if (property == "F_Items") + // { + // XItemsFromJSON(state.getJArray(property)); + // // After recover Items property, we should recover SelectedValue according to Items. + // SelectedValue = lastSelectedValue; + // } + // else if (property == "X_SelectedValue") + // { + // lastSelectedValue = state.getString(property); + // SaveXProperty("X_SelectedValue", lastSelectedValue); + // SelectedValue = lastSelectedValue; + // } + //} + + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // SaveXProperty("F_Items", XItemsToJSON().ToString()); + // SaveXProperty("X_SelectedValue", SelectedValue); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // // Items has been changed in server-side code after onInit. + // if (XPropertyModified("F_Items", XItemsToJSON().ToString())) + // { + // FState.AddModifiedProperty("F_Items"); + // // If Items have been changed, then we must reset the SelectedValue. + // FState.AddModifiedProperty("X_SelectedValue"); + // } + + // if (XPropertyModified("X_SelectedValue", SelectedValue)) + // { + // FState.AddModifiedProperty("X_SelectedValue"); + // } + + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // if (property == "F_Items") + // { + // state.put(property, XItemsToJSON()); + // } + // else if (property == "X_SelectedValue") + // { + // state.put(property, SelectedValue); + // } + //} + + //private JArray XItemsToJSON() + //{ + // JArray ja = new JArray(); + // foreach (ListItem item in Items) + // { + // JArray ja2 = new JArray(); + // ja2.Add(item.Value); + // ja2.Add(item.Text); + // ja2.Add(item.EnableSelect ? 1 : 0); + // if (EnableSimulateTree) + // { + // ja2.Add(item.SimulateTreeLevel); + // } + // ja.Add(ja2); + // } + // return ja; + //} + + //private void XItemsFromJSON(JArray ja) + //{ + // foreach (JArray ja2 in ja.getArrayList()) + // { + // ListItem item = new ListItem(); + // item.Value = ja2.getString(0); + // item.Text = ja2.getString(1); + // item.EnableSelect = ja2.getInt(2) == 1 ? true : false; + // if (EnableSimulateTree) + // { + // item.SimulateTreeLevel = ja2.getInt(3); + // } + // Items.Add(item); + // } + //} + + #endregion + + #region SelectedValueHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedValueHiddenFieldID + { + get + { + return String.Format("{0}$Value", UniqueID); + } + } + + #endregion + + #region OnPreRender + + private string Render_AutoPostBackID + { + get + { + return String.Format("{0}_autopostback", XID); + } + } + + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + bool dataReloaded = false; + if (PropertyModified("F_Items")) + { + dataReloaded = true; + sb.AppendFormat("{0}.f_loadData();", XID); + } + + + bool selectedValueChanged = false; + if (EnableMultiSelect) + { + if (PropertyModified("SelectedValueArray")) + { + selectedValueChanged = true; + } + } + else + { + if (PropertyModified("SelectedValue")) + { + selectedValueChanged = true; + } + } + + // 修改Items记录后要更新SelectedValue + if (dataReloaded || selectedValueChanged) + { + sb.AppendFormat("{0}.f_setValue();", XID); + } + + AddAjaxScript(sb); + } + + private void ProcessAutoSelectFirstItem() + { + //// 如果强制选择一项,我们可能需要选中第一项 + //if (SelectedItem == null && AutoSelectFirstItem) + //{ + // if (Items.Count > 0) + // { + // SelectedIndex = 0; + // } + //} + + // 自动修正 + if (AutoSelectFirstItem && Items.Count > 0) + { + bool hasSelection = false; + foreach (ListItem item in Items) + { + if (item.Selected) + { + hasSelection = true; + break; + } + } + + // 没有选中任何一项,则选中第一项 + if (!hasSelection) + { + Items[0].Selected = true; + } + } + } + + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + ProcessAutoSelectFirstItem(); + + // 确保 F_Items 和 SelectedValue 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Items"); + FState.AddModifiedProperty("SelectedValue"); + FState.AddModifiedProperty("SelectedValueArray"); + + base.OnFirstPreRender(); + + + #region examples + + //var nextStepList = [ + // ['审核', '1'], + // ['不审核', '2'] + //]; + //var nextStepStore = new Ext.data.SimpleStore({ + // fields: ['text', 'value'], + // data: nextStepList + //}); + //{ + // xtype:'combo', + // store: nextStepStore, + // displayField:'text', + // valueField:'value', + // typeAhead: true, + // mode: 'local', + // triggerAction: 'all', + // value:'1', + // emptyText:'请选择下一步', + // selectOnFocus:true, + // allowBlank:false, + // fieldLabel: '下一步', + // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', + // name: 'nextStep', + // anchor:'95%' + //} + + #endregion + + + + #region Properties + + if (!MatchFieldWidth) + { + OB.AddProperty("matchFieldWidth", false); + } + + + if (EnableEdit) + { + OB.AddProperty("editable", true); + } + else + { + OB.AddProperty("editable", false); + } + + + if (ForceSelection) + { + OB.AddProperty("forceSelection", true); + } + else + { + OB.AddProperty("forceSelection", false); + } + + //if (Resizable) + //{ + // OB.AddProperty("resizable", true); + //} + + OB.AddProperty("hiddenName", SelectedValueHiddenFieldID); + + + if (!String.IsNullOrEmpty(EmptyText)) + { + OB.AddProperty("emptyText", EmptyText); + } + + + + JsObjectBuilder storeBuilder = new JsObjectBuilder(); + storeBuilder.AddProperty("fields", "['value','text','enabled','prefix']", true); + storeBuilder.AddProperty("data", String.Format("F.simulateTree.transform({0}.F_Items)", GetFStateScriptID()), true); + OB.AddProperty("store", String.Format("Ext.create('Ext.data.ArrayStore',{0})", storeBuilder), true); + + OB.AddProperty("value", String.Format("{0}.{1}", GetFStateScriptID(), EnableMultiSelect ? "SelectedValueArray" : "SelectedValue"), true); + + //OB.AddProperty("value", "['Value1','Value4']", true); + + OB.AddProperty("tpl", "F.util.ddlTPL", true); + + OB.AddProperty("queryMode", "local"); + OB.AddProperty("triggerAction", "all"); + + if (EnableMultiSelect) + { + OB.AddProperty("multiSelect", true); + + + if (MultiSelectSeparator != MULTISELECT_SEPARATOR_DEFAULT) + { + OB.AddProperty("delimiter", MultiSelectSeparator); + } + + } + + + + + + #region old code + //OB.AddProperty("mode", "local"); + //// 点击下拉按钮时显示全部内容 + //OB.AddProperty("triggerAction", "all"); + //// 必须选中一个值,不能自己输入内容 + //OB.AddProperty("forceSelection", true); + //// 此下拉列表控件不可以编辑 + //OB.AddProperty("editable", false); + + //OB.AddProperty(OptionName.Title, "Title"); + //if (TypeAhead) OB.AddProperty(OptionName.TypeAhead, true); + //OB.AddProperty(OptionName.SelectOnFocus, true); + + //// SelectedValue可以为空 + //if (!String.IsNullOrEmpty(SelectedValue)) + //{ + // OB.AddProperty("value", SelectedValue); + //} + #endregion + + #endregion + + #region old code + + //string hiddenFieldsScript = String.Empty; + //if (AutoPostBack) + //{ + // hiddenFieldsScript += GetSetHiddenFieldValueScript(LastSelectedValueHiddenID, SelectedValue); + //} + + //string disableSelectRowIndexsString = GetDisableSelectRowIndexsString(); + //string disableSelectRowIndexsScript = GetSetHiddenFieldValueScript(DisableRowIndexsHiddenID, disableSelectRowIndexsString); + + //// TODO: + //// 这个要放在加载数据的前面,因为加载数据时需要渲染UI,渲染UI时需要用到这个隐藏字段的值 + //if (AjaxPropertyChanged("DisableSelectRowIndexsString", disableSelectRowIndexsString)) + //{ + // AddAjaxPropertyChangedScript(disableSelectRowIndexsScript); + //} + + + // 不管是不是disableSelectFields.Count > 0,都要执行下面的语句,因为可能页面加载时为0,在Ajax后不为零 + //if (disableSelectFields.Count > 0) + //OB.AddProperty(OptionName.Tpl, String.Format("'<tpl for=\".\"><div class=\"x-combo-list-item {{[F.util.isHiddenFieldContains(\"{0}\",xindex-1) ? \"f-combo-list-item-disable-select\" : \"\"]}}\">{{text}}</div></tpl>'", DisableSelectRowIndexsHiddenID), true); + //var tplStr = "'<tpl for=\".\"><div class=\"x-combo-list-item\">{text}</div></tpl>'"; + //var tplStr = "new Ext.XTemplate('<tpl for=\".\"><div class=\"x-combo-list-item\">{text}</div></tpl>')"; + + //var tplStr = "<tpl for=\".\"><div class=\"x-combo-list-item <tpl if=\"!enabled\">x-combo-list-item-disable</tpl>\">{prefix}{text}</div></tpl>"; + //OB.AddProperty("tpl", tplStr); + //OB.AddProperty("tpl", tplStr.Replace("#DisableRowIndexsHiddenID#", DisableRowIndexsHiddenID), true); + + + //string setSimulateTreeTextFunctionScript = String.Empty; + //string setSimulateTreeTextScript = String.Empty; + //if (EnableSimulateTree) + //{ + // string setSimulateTextScript = String.Format("var text=Ext.get('{0}').dom.value;if(text.lastIndexOf('<img')>=0){{Ext.get('{0}').dom.value=F.util.stripHtmlTags(text);}}", ClientID); + // setSimulateTreeTextFunctionScript = String.Format("{0}_setSimulateText=function(){{{1}}};", ClientJavascriptID, setSimulateTextScript); + + // // 加载完毕后,显示选中的值 + // //AddAbsoluteStartupScript(String.Format("{0}_setSimulateText();", ClientJavascriptID)); + // // 下拉列表加载完毕后,立即去掉前面图片的HTML标签 + // string renderScript = JsHelper.GetDeferScript(String.Format("{0}_setSimulateText();", ClientJavascriptID), 20); // "(function(){" + String.Format("{0}_setSimulateText();", ClientJavascriptID) + "}).defer(20);"; + // OB.Listeners.AddProperty(OptionName.EVENT_RENDER, "function(component){" + renderScript + "}", true); + //} + + + //string simulateTreeAllScript = String.Empty; + //if (EnableSimulateTree) + //{ + // // 在选中一项后,立即去掉前面图片的HTML标签 + // simulateTreeAllScript += "\r\n"; + // //string simulateTreeScript = String.Format("function(ddl,record,index){{var text=record.data.text;var startDivIndex=text.lastIndexOf('</div>');text=text.substr(startDivIndex+6);Ext.get('{0}').dom.value=text;}}", ClientID); + // string simulateTreeScript = String.Format("function(ddl,record,index){{X.{0}_setSimulateText();}}", ClientJavascriptID); + // simulateTreeScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientJavascriptID, OptionName.Select, simulateTreeScript); + // //AddAbsoluteStartupScript( simulateTreeScript); + // simulateTreeAllScript += simulateTreeScript; + + // simulateTreeAllScript += "\r\n"; + // string simulateTreeBlurScript = String.Format("function(ddl){{X.{0}_setSimulateText();}}", ClientJavascriptID); + // simulateTreeBlurScript = String.Format("{0}.on('{1}',{2},box,{{delay:10}});", ClientJavascriptID, OptionName.Blur, simulateTreeBlurScript); + // //AddAbsoluteStartupScript( simulateTreeBlurScript); + // simulateTreeAllScript += simulateTreeBlurScript; + //} + + + + + // These are default values, which are assignment in extender.js. + //OB.AddProperty("displayField", "text"); + //OB.AddProperty("valueField", "value"); + //OB.AddProperty("store", "new Ext.data.ArrayStore({fields:['value','text','enabled','prefix']})", true); + + //string dataScript = String.Empty; + //string fields = "['value','text','enabled','prefix']"; + //string storeScript = "new Ext.data.ArrayStore({fields:['value','text','enabled','prefix']})";//", fields, GetDataArrayString()); // GetDataArrayString() + + //OB.AddProperty(OptionName.Store, String.Format("new Ext.data.ArrayStore({{fields:['value','text'],data:{0}}})", dataArrayString), true); + //OB.AddProperty("store", String.Format("{0}_data", XID), true); + //string dataScript = String.Format("{0}_data=new Ext.data.ArrayStore({{fields:['value','text'],data:{1}}});", ClientJavascriptID, dataArrayString); + //sb.AppendFormat("this.{0}_store=new Ext.data.SimpleStore({{fields:['text', 'value'],data:this.{0}_data}});", ClientJavascriptID); + #endregion + + #region AutoPostBack + + string autoPostBackScript = String.Empty; + + if (AutoPostBack) + { + autoPostBackScript = String.Format("var {0}={1};", Render_AutoPostBackID, JsHelper.GetFunction("if(cmp.f_tmp_lastvalue!==cmp.getValue()){" + GetPostBackEventReference() + "}", "cmp")); + } + StringBuilder beforeselectSB = new StringBuilder(); + // 是否能选中一项(如果此项不能选中,则点击没用) + //beforeselectSB.AppendFormat("if(F.util.isHiddenFieldContains('{0}',index)){{return false;}}", DisableRowIndexsHiddenID); + beforeselectSB.Append("if(!record.data.enabled){return false;}"); + + if (AutoPostBack) + { + beforeselectSB.Append("cmp.f_tmp_lastvalue=cmp.getValue();"); + + //string selectScript = "if(cmp.f_tmp_lastvalue!==cmp.getValue()){" + GetPostBackEventReference() + "}"; + beforeselectSB.AppendFormat("window.setTimeout(function(){{{0}(cmp);}},100);", Render_AutoPostBackID); + //AddListener("select", selectScript, "cmp"); + } + + AddListener("beforeselect", beforeselectSB.ToString(), "cmp", "record", "index"); + + //if (EnableMultiSelect) + //{ + // StringBuilder beforedeselectSB = new StringBuilder(); + // beforedeselectSB.AppendFormat("window.setTimeout(function(){{{0}(cmp);}},100);", Render_AutoPostBackID); + // AddListener("beforedeselect", beforedeselectSB.ToString(), "cmp", "record", "index"); + //} + + #region old code + //if (AutoPostBack) + //{ + // // Note: we can't use change event, because it get triggered when the combox lost focus, which is not in time. + // // Beforeselect - If current select item is not changed, don't PostBack. + // string beforeselectScript = String.Format("function(ddl,record,index){{Ext.get('{0}').dom.value=Ext.get('{1}').dom.value;}}", LastSelectedValueHiddenID, SelectedValueHiddenID); + // beforeselectScript = String.Format("{0}.on('{1}',{2},X,{{delay:0}});", XID, "beforeselect", beforeselectScript); + // //AddAbsoluteStartupScript( beforeselectScript); + // autoPostBackScript += beforeselectScript; + + // // Select + // string selectScript = String.Format("function(ddl,record,index){{if(record.data.value!=Ext.get('{0}').dom.value){{{1}}}}}", LastSelectedValueHiddenID, GetPostBackEventReference()); + // selectScript = String.Format("{0}.on('{1}',{2},X,{{delay:0}});", XID, "select", selectScript); + // //AddAbsoluteStartupScript( selectScript); + // autoPostBackScript += selectScript; + + + // //OB.Listeners.RemoveProperty(OptionName.Change); + // //OB.Listeners.AddProperty(OptionName.Change, String.Format("function(ddl,newValue,oldValue){{box_pageStateChange();alert(newValue+':'+oldValue);}}"), true); + //} + #endregion + + #endregion + + #region Listeners - render + + //string renderScript = "cmp.f_loadData();cmp.f_setValue();"; + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript, "cmp"), true); + + string renderScript = String.Empty; + if (!MatchFieldWidth) + { + renderScript = String.Format("cmp.getPicker().addCls('f-field-ddlpop-autowidth')"); + } + + if (!String.IsNullOrEmpty(renderScript)) + { + AddListener("render", renderScript, "cmp"); + } + + #endregion + + #region AddStartupScript + + string contentScript = String.Format("var {0}=Ext.create('Ext.form.field.ComboBox',{1});", XID, OB.ToString()); + + AddStartupScript(autoPostBackScript + contentScript); + + #region old code + //List<string> totalModifiedProperties = FState.GetTotalModifiedProperties(); + //StringBuilder loadDataSB = new StringBuilder(); + //if (totalModifiedProperties.Contains("F_Items")) + //{ + // loadDataSB.AppendFormat("{0}.f_loadData();", XID); + //} + //else + //{ + // loadDataSB.AppendFormat("{0}.store.loadData({1});", XID, F_Items.ToString()); + //} + + //if (totalModifiedProperties.Contains("SelectedValue")) + //{ + // loadDataSB.AppendFormat("{0}.f_setValue();", XID); + //} + //else + //{ + // loadDataSB.AppendFormat("{0}.f_setValue({1});", XID, JsHelper.Enquote(SelectedValue)); + //} + #endregion + + #endregion + + } + + #region old code + + //private string GetDataArrayString() + //{ + // if (Items.Count == 0) + // { + // return "[[]]"; + // } + // else + // { + // if (EnableSimulateTree) + // { + // List<SimulateTreeNode> silumateTreeNodes = new List<SimulateTreeNode>(); + // // Set up a list for calculate(mainly the front images). + // for (int rowIndex = 0; rowIndex < Items.Count; rowIndex++) + // { + // ListItem item = Items[rowIndex]; + // SimulateTreeNode node = new SimulateTreeNode(); + // node.Text = item.Text; + // node.Value = item.Value; + // node.Level = item.SimulateTreeLevel; + // node.EnableSelect = item.EnableSelect; + // node.HasLittleBrother = false; + // node.ParentNode = null; + // silumateTreeNodes.Add(node); + // } + // // Use a helper class to calculate tree. + // SimulateTreeHeper treeHelper = new SimulateTreeHeper(); + // treeHelper.ResolveSimulateTree(silumateTreeNodes, false); + + + // JArray ja = new JArray(); + // foreach (SimulateTreeNode node in silumateTreeNodes) + // { + // JArray ja2 = new JArray(); + // ja2.Add(node.Value); + // ja2.Add(node.Text); + // ja2.Add(node.EnableSelect ? 1 : 0); + // ja2.Add(node.SimulateTreeText); + + // ja.Add(ja2); + // } + // return ja.ToString(); + // } + // else + // { + // JArray ja = new JArray(); + // foreach (ListItem item in Items) + // { + // JArray ja2 = new JArray(); + // ja2.Add(item.Value); + // ja2.Add(item.Text); + // ja2.Add(item.EnableSelect ? 1 : 0); + + // ja.Add(ja2); + // } + // return ja.ToString(); + // } + // } + //} + + ///// <summary> + ///// Return values: "0,1,2,10" + ///// </summary> + ///// <returns></returns> + //private string GetDisableSelectRowIndexsString() + //{ + // List<int> disableSelectRows = new List<int>(); + // for (int rowIndex = 0, rowCount = Items.Count; rowIndex < rowCount; rowIndex++) + // { + // if (!Items[rowIndex].EnableSelect) + // { + // disableSelectRows.Add(rowIndex); + // } + // } + + // #region old code + // // 下面的条件判断不能加,因为如果页面第一次加载时没有不能选择的项,则以后回发时都不会有不能选择的项 + // //if (disableSelectFields.Count > 0) + // //{ + // // 把这个状态保存在隐藏字段中,因为可能在Ajax中改变 + // //disableSelectScript = String.Format("{0}_disableSelect={1};", ClientJavascriptID, JsHelper.GetJsIntArray(disableSelectFields.ToArray())); + // //disableSelectScript += "\r\n"; + // #endregion + // return StringUtil.GetStringFromIntArray(disableSelectRows.ToArray()); + //} + + + #endregion + + #endregion + + #region DataBind + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + // Clear all items + Items.Clear(); + + if (_dataSource != null) + { + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + } + + //// 重新绑定数据后,判断是否自动选择第一项 + //ProcessAutoSelectFirstItem(); + + base.DataBind(); + } + + #endregion + + #region private DataBind + + + /// <summary> + /// 绑定到数据表格 + /// </summary> + /// <param name="dataTable">数据表格</param> + private void DataBindToDataTable(DataTable dataTable) + { + int startIndex = 0; + int endIndex = Int32.MaxValue; + for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) + { + DataRow row = dataTable.Rows[i]; + + Items.Add(CreateListItem(row)); + } + } + + + /// <summary> + /// 绑定到可枚举类型 + /// </summary> + /// <param name="enumerable">可枚举类型</param> + private void DataBindToEnumerable(IEnumerable enumerable) + { + #region old code + //int startIndex = 0; + //int endIndex = Int32.MaxValue; + + //IEnumerator enumerator = enumerable.GetEnumerator(); + + //// 定位开始位置 + //enumerator.Reset(); + //enumerator.MoveNext(); + + //int count = 0; + + //// skip some items? + //while (count < startIndex) + //{ + // enumerator.MoveNext(); + // count++; + //} + + //try + //{ + // if (enumerator.Current == null) + // { + // return; + // } + //} + //catch + //{ + // return; + //} + + //while (enumerator.Current != null && count < endIndex) + //{ + // object currentObject = enumerator.Current; + + // ListItem item = new ListItem(); + + // if (currentObject is string) + // { + // item.Text = currentObject.ToString(); + // item.Value = currentObject.ToString(); + // } + // else + // { + // // Load item + // if (DataTextField != "") + // { + // item.Text = GetPropertyValue(currentObject, DataTextField); + // } + // else + // { + // item.Text = currentObject.ToString(); + // } + + // if (DataValueField != "") + // { + // item.Value = GetPropertyValue(currentObject, DataValueField); + // } + // else + // { + // item.Value = currentObject.ToString(); + // } + + // // 如果需要模拟树 + // if (!String.IsNullOrEmpty(DataSimulateTreeLevelField)) + // { + // item.SimulateTreeLevel = Convert.ToInt32(GetPropertyValue(currentObject, DataSimulateTreeLevelField)); + // } + + // // 是否选择 + // item.EnableSelect = true; + // if (!String.IsNullOrEmpty(DataEnableSelectField)) + // { + // item.EnableSelect = Convert.ToBoolean(GetPropertyValue(currentObject, DataEnableSelectField)); + // } + + // } + + // Items.Add(item); + + // if (!enumerator.MoveNext()) + // { + // break; + // } + + // count++; + //} + #endregion + + IEnumerator enumerator = enumerable.GetEnumerator(); + while (enumerator.MoveNext()) + { + object currentObject = enumerator.Current; + Items.Add(CreateListItem(currentObject)); + } + } + + private ListItem CreateListItem(Object obj) + { + ListItem item = new ListItem(); + + if (obj is string) + { + item.Text = obj.ToString(); + item.Value = obj.ToString(); + } + else + { + if (DataTextField != "") + { + if (DataTextFormatString != "") + { + item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); + } + else + { + item.Text = GetPropertyValue(obj, DataTextField); + } + } + else + { + item.Text = obj.ToString(); + } + + if (DataValueField != "") + { + item.Value = GetPropertyValue(obj, DataValueField); + } + else + { + item.Value = obj.ToString(); + } + + // 如果需要模拟树 + if (!String.IsNullOrEmpty(DataSimulateTreeLevelField)) + { + string treeLevelStr = GetPropertyValue(obj, DataSimulateTreeLevelField); + if (String.IsNullOrEmpty(treeLevelStr)) + { + item.SimulateTreeLevel = 0; + } + else + { + item.SimulateTreeLevel = Convert.ToInt32(treeLevelStr); + } + } + + // 是否可以选择 + item.EnableSelect = true; + if (!String.IsNullOrEmpty(DataEnableSelectField)) + { + item.EnableSelect = Convert.ToBoolean(GetPropertyValue(obj, DataEnableSelectField)); + } + } + return item; + } + + /// <summary> + /// 取得属性值 + /// </summary> + /// <param name="obj"></param> + /// <param name="propertyName"></param> + private string GetPropertyValue(object obj, string propertyName) + { + object result = null; + + result = ObjectUtil.GetPropertyValue(obj, propertyName); + + // DBNull.Value.ToString() == "" + return result == null ? String.Empty : result.ToString(); + } + + //private void AfterDataBind() + //{ + // //// 必须重新计算模拟数的数据 + // //mustReCalculateSimulateTreeData = true; + //} + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + // 如果下拉列表被禁用,则postText为null。由于Enabled只能在服务器端被改变,所以被禁用时,不处理回发数据即可 + if (!Enabled) + { + return false; + } + + // 如果下拉列表没有任何项,则不会触发数据改变事件 + if (Items.Count == 0) + { + return false; + } + + + string postText = postCollection[postDataKey]; + + if (EnableMultiSelect) + { + string[] postValues = postCollection.GetValues(SelectedValueHiddenFieldID); + if (postValues == null) + { + postValues = new string[0]; + } + if (!StringUtil.CompareStringArray(postValues, SelectedValueArray)) + { + SelectedValueArray = postValues; + FState.BackupPostDataProperty("SelectedValueArray"); + return true; + } + + } + else + { + string postValue = postCollection[SelectedValueHiddenFieldID]; + + ListItem item = Items.FindByValue(postValue); + if (item != null && item.Text == postText) + { + // 本次选中的是下拉项 + if (SelectedValue != postValue) + { + SelectedValue = postValue; + FState.BackupPostDataProperty("SelectedValue"); + return true; + } + } + else + { + //// 本次是用户输入的值 + //if (Text != postText) + //{ + SelectedValue = null; + FState.BackupPostDataProperty("SelectedValue"); + + Text = postText; + FState.BackupPostDataProperty("Text"); + return true; + //} + } + } + + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnSelectedIndexChanged(EventArgs.Empty); + } + + #endregion + + #region SelectedIndexChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 选中项改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选中项改变事件(需要启用AutoPostBack)")] + public event EventHandler SelectedIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选中项改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSelectedIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region old code + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + // states[1] = ((IStateManager)Items).SaveViewState(); + + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Items).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Items).TrackViewState(); + //} + + //protected override void SetDirty() + //{ + // base.SetDirty(); + + // ((ISetDirty)Items).SetDirty(); + //} + + + + ///// <summary> + ///// 保存上次选中值的Input + ///// </summary> + //private string LastSelectedValueHiddenID + //{ + // get + // { + // return String.Format("{0}_last_value", XID); + // } + //} + + ///// <summary> + ///// 保存当前选中值的Input + ///// </summary> + //private string SelectedValueHiddenID + //{ + // get + // { + // return UniqueID; + // } + //} + + + ///// <summary> + ///// 不可用的行Index列表 + ///// </summary> + //private string DisableRowIndexsHiddenID + //{ + // get + // { + // return String.Format("{0}_disable_rows", ClientID); + // } + //} + + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("DisableSelectRowIndexsString", GetDisableSelectRowIndexsString()); + // SaveAjaxProperty("DataArrayString", GetDataArrayString()); + // SaveAjaxProperty("SelectedValue", SelectedValue); + //} + + #endregion + } +} diff --git a/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs b/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs index 8c4d1a5..73cc362 100644 --- a/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs +++ b/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs @@ -1,182 +1,195 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ListItem.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; -using System.Collections; - - -namespace FineUI -{ - /// <summary> - /// 列表项 - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true, DefaultProperty = "Text")] - [Description("列表项")] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class ListItem - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public ListItem() - { - - } - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="text">列表项文本</param> - /// <param name="value">列表项值</param> - public ListItem(string text, string value) - { - Text = text; - Value = value; - } - - #endregion - - #region Properties - - private bool _selected = false; - /// <summary> - /// 是否选中 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("是否选中")] - [DefaultValue(false)] - [NotifyParentProperty(true)] - public bool Selected - { - get - { - return _selected; - } - set - { - _selected = value; - } - } - - private string _text = String.Empty; - /// <summary> - /// 显示的文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("显示的文本")] - [NotifyParentProperty(true)] - public string Text - { - get - { - return _text; - } - set - { - _text = value; //HttpUtility.HtmlEncode(value); - } - } - - private string _value = String.Empty; - /// <summary> - /// 值 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("值")] - [NotifyParentProperty(true)] - public string Value - { - get - { - return _value; - } - set - { - _value = value; - } - } - - private bool _enableSelect = true; - /// <summary> - /// 是否可选择 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可选择")] - [NotifyParentProperty(true)] - public bool EnableSelect - { - get - { - return _enableSelect; - } - set - { - _enableSelect = value; - } - } - - private int _simulateTreeLevel = 0; - - /// <summary> - /// 模拟树的层次(从0开始为根节点) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(0)] - [Description("模拟树的层次(从0开始为根节点)")] - [NotifyParentProperty(true)] - public int SimulateTreeLevel - { - get - { - return _simulateTreeLevel; - } - set - { - _simulateTreeLevel = value; - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListItem.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// <summary> + /// 列表项 + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Text")] + [Description("列表项")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ListItem + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public ListItem() + { + + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + public ListItem(string text, string value) + { + Text = text; + Value = value; + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <param name="selected">是否选中</param> + public ListItem(string text, string value, bool selected) + { + Text = text; + Value = value; + Selected = selected; + } + + #endregion + + #region Properties + + private bool _selected = false; + /// <summary> + /// 是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("是否选中")] + [DefaultValue(false)] + [NotifyParentProperty(true)] + public bool Selected + { + get + { + return _selected; + } + set + { + _selected = value; + } + } + + private string _text = String.Empty; + /// <summary> + /// 显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示的文本")] + [NotifyParentProperty(true)] + public string Text + { + get + { + return _text; + } + set + { + _text = value; //HttpUtility.HtmlEncode(value); + } + } + + private string _value = String.Empty; + /// <summary> + /// 值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("值")] + [NotifyParentProperty(true)] + public string Value + { + get + { + return _value; + } + set + { + _value = value; + } + } + + private bool _enableSelect = true; + /// <summary> + /// 是否可选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可选择")] + [NotifyParentProperty(true)] + public bool EnableSelect + { + get + { + return _enableSelect; + } + set + { + _enableSelect = value; + } + } + + private int _simulateTreeLevel = 0; + + /// <summary> + /// 模拟树的层次(从0开始为根节点) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("模拟树的层次(从0开始为根节点)")] + [NotifyParentProperty(true)] + public int SimulateTreeLevel + { + get + { + return _simulateTreeLevel; + } + set + { + _simulateTreeLevel = value; + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs b/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs index ddca516..296fb3b 100644 --- a/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs +++ b/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs @@ -1,118 +1,118 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ListItemCollection.cs - * CreatedOn: 2008-04-24 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// <summary> - /// 列表项集合 - /// </summary> - public class ListItemCollection : Collection<ListItem> - { - /// <summary> - /// 通过文本查找列表项 - /// </summary> - /// <param name="text">文本</param> - /// <returns>列表项</returns> - public ListItem FindByText(string text) - { - return FindByText(text, false); - } - - /// <summary> - /// 通过文本查找列表项 - /// </summary> - /// <param name="text">文本</param> - /// <param name="stripHtml">是否去除HTML标签</param> - /// <returns>列表项</returns> - public ListItem FindByText(string text, bool stripHtml) - { - IEnumerator enumerator = GetEnumerator(); - - while (enumerator.MoveNext()) - { - ListItem item = enumerator.Current as ListItem; - - if (item != null) - { - string itemText = item.Text; - if (stripHtml) - { - itemText = StringUtil.StripHtml(itemText); - } - if (itemText == text) - { - return item; - } - } - } - - return null; - } - - - /// <summary> - /// 通过值查找列表项 - /// </summary> - /// <param name="value">值</param> - /// <returns>列表项</returns> - public ListItem FindByValue(string value) - { - IEnumerator enumerator = GetEnumerator(); - - while (enumerator.MoveNext()) - { - ListItem item = enumerator.Current as ListItem; - - if (item != null && item.Value == value) - { - return item; - } - } - - return null; - } - - - /// <summary> - /// 添加列表项 - /// </summary> - /// <param name="text">文本</param> - /// <param name="value">值</param> - /// <returns>新元素的插入位置</returns> - public int Add(string text, string value) - { - ListItem item = new ListItem(text, value); - - return ((IList)this).Add(item); - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListItemCollection.cs + * CreatedOn: 2008-04-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 列表项集合 + /// </summary> + public class ListItemCollection : Collection<ListItem> + { + /// <summary> + /// 通过文本查找列表项 + /// </summary> + /// <param name="text">文本</param> + /// <returns>列表项</returns> + public ListItem FindByText(string text) + { + return FindByText(text, false); + } + + /// <summary> + /// 通过文本查找列表项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="stripHtml">是否去除HTML标签</param> + /// <returns>列表项</returns> + public ListItem FindByText(string text, bool stripHtml) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + ListItem item = enumerator.Current as ListItem; + + if (item != null) + { + string itemText = item.Text; + if (stripHtml) + { + itemText = StringUtil.StripHtml(itemText); + } + if (itemText == text) + { + return item; + } + } + } + + return null; + } + + + /// <summary> + /// 通过值查找列表项 + /// </summary> + /// <param name="value">值</param> + /// <returns>列表项</returns> + public ListItem FindByValue(string value) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + ListItem item = enumerator.Current as ListItem; + + if (item != null && item.Value == value) + { + return item; + } + } + + return null; + } + + + /// <summary> + /// 添加列表项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <returns>新元素的插入位置</returns> + public int Add(string text, string value) + { + ListItem item = new ListItem(text, value); + + return ((IList)this).Add(item); + } + + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs b/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs index 82b7856..ae6ca46 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs @@ -1,406 +1,407 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * ->2008-4-28 改名为 DatePicker - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; -using System.Globalization; - -namespace FineUI -{ - /// <summary> - /// 日期选择框控件 - /// </summary> - [Designer("FineUI.Design.DatePickerDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:DatePicker Label=\"Label\" runat=\"server\"></{0}:DatePicker>")] - [ToolboxBitmap(typeof(DatePicker), "toolbox.DatePicker.bmp")] - [DefaultEvent("DateSelect")] - [Description("日期选择框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class DatePicker : RealTextField, IPostBackEventHandler - { - - #region Properties - - /// <summary> - /// 是否允许编辑 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否允许编辑")] - public bool EnableEdit - { - get - { - object obj = XState["EnableEdit"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableEdit"] = value; - } - } - - /// <summary> - /// 选择的日期 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("选择的日期")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? SelectedDate - { - get - { - if (DesignMode) - { - object obj = XState["SelectedDate"]; - return obj == null ? null : (DateTime?)obj; - } - else - { - if (String.IsNullOrEmpty(Text)) - { - return null; - } - else - { - try - { - //return DateTime.Parse(Text); - - // OktaEndy - return null when DateFormatString = "dd/MM/yyyy" - Trying to Parse DateTime using it's DateFormatString - // http://stackoverflow.com/questions/1368636/why-cant-datetime-parseexact-parse-9-1-2009-using-m-d-yyyy - return DateTime.ParseExact(Text, DateFormatString, CultureInfo.InvariantCulture); - } - catch (Exception) - { - // Text is not valid DateTime fomat. - return null; - } - } - } - } - set - { - if (DesignMode) - { - XState["SelectedDate"] = value; - } - else - { - if (value == null) - { - Text = String.Empty; - } - else - { - Text = value.Value.ToString(DateFormatString); - } - } - } - } - - - /// <summary> - /// 启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd")] - public bool EnableChineseAltFormats - { - get - { - object obj = XState["EnableChineseAltFormats"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableChineseAltFormats"] = value; - } - } - - - /// <summary> - /// 尝试解析日期的格式列表 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("尝试解析日期的格式列表")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] AltFormats - { - get - { - object obj = XState["AltFormats"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["AltFormats"] = value; - } - } - - /// <summary> - /// 日期格式 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("yyyy-MM-dd")] - [Description("日期格式")] - public string DateFormatString - { - get - { - object obj = XState["DateFormatString"]; - return obj == null ? "yyyy-MM-dd" : (string)obj; - } - set - { - XState["DateFormatString"] = value; - } - } - - /// <summary> - /// 最大日期 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最大日期")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? MaxDate - { - get - { - object obj = XState["MaxDate"]; - return obj == null ? null : (DateTime?)obj; - } - set - { - XState["MaxDate"] = value; - } - } - - /// <summary> - /// 最小日期 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最小日期")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? MinDate - { - get - { - object obj = XState["MinDate"]; - return obj == null ? null : (DateTime?)obj; - } - set - { - XState["MinDate"] = value; - } - } - - - /// <summary> - /// 选择日期是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选择日期是否自动回发")] - [Obsolete("此属性已废除,请使用EnableTimeSelectEvent属性")] - public bool EnableDateSelect - { - get - { - return EnableDateSelectEvent; - } - set - { - EnableDateSelectEvent = value; - } - } - - /// <summary> - /// 选择日期是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选择日期是否自动回发")] - public bool EnableDateSelectEvent - { - get - { - object obj = XState["EnableDateSelectEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableDateSelectEvent"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //// 日期选择器也需要菜单组件的支持 - //ResourceManager.Instance.AddJavaScriptComponent("menu"); - - // extjs 的日期格式化字符串 - string extjsDateFormatString = ExtDateTimeConvertor.ConvertToExtDateFormat(DateFormatString); - OB.AddProperty("format", extjsDateFormatString); - - if (EnableChineseAltFormats) - { - OB.AddProperty("altFormats", "Y-m-d|Y-n-j|Ymd|Ynj|y-m-d|y-n-j|ymd|ynj"); - } - else if (AltFormats != null) - { - StringBuilder formats = new StringBuilder(); - foreach (string format in AltFormats) - { - formats.Append(ExtDateTimeConvertor.ConvertToExtDateFormat(format)); - formats.Append("|"); - } - OB.AddProperty("altFormats", formats.ToString().TrimEnd('|')); - } - - //// 当前选中的日期值,这个在父类中已经设置了 - //OB.RemoveProperty(OptionName.Value); - //if (SelectedDate != null) OB.AddProperty(OptionName.Value, Text); - - if (MaxDate != null) - { - OB.AddProperty("maxValue", MaxDate.Value.ToString(DateFormatString)); - } - if (MinDate != null) - { - OB.AddProperty("minValue", MinDate.Value.ToString(DateFormatString)); - } - - if (!EnableEdit) - { - OB.AddProperty("editable", false); - } - - - if (EnableDateSelectEvent) - { - OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); - } - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Date',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region RaisePostBackEvent - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public override void RaisePostBackEvent(string eventArgument) - { - base.RaisePostBackEvent(eventArgument); - - if (eventArgument.StartsWith("Select")) - { - OnDateSelect(EventArgs.Empty); - } - } - - #endregion - - #region OnDateSelect - - private object _handlerKey = new object(); - - /// <summary> - /// 日期选定事件(需要启用EnableDateSelect) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("日期选定事件(需要启用EnableDateSelect)")] - public virtual event EventHandler DateSelect - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发日期选定事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnDateSelect(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * ->2008-4-28 改名为 DatePicker + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Globalization; + +namespace FineUI +{ + /// <summary> + /// 日期选择框控件 + /// </summary> + [Designer("FineUI.Design.DatePickerDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:DatePicker Label=\"Label\" runat=\"server\"></{0}:DatePicker>")] + [ToolboxBitmap(typeof(DatePicker), "toolbox.DatePicker.bmp")] + [DefaultEvent("DateSelect")] + [Description("日期选择框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class DatePicker : RealTextField, IPostBackEventHandler + { + + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + /// <summary> + /// 选择的日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("选择的日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? SelectedDate + { + get + { + if (DesignMode) + { + object obj = FState["SelectedDate"]; + return obj == null ? null : (DateTime?)obj; + } + else + { + if (String.IsNullOrEmpty(Text)) + { + return null; + } + else + { + try + { + //return DateTime.Parse(Text); + + // OktaEndy - return null when DateFormatString = "dd/MM/yyyy" - Trying to Parse DateTime using it's DateFormatString + // http://stackoverflow.com/questions/1368636/why-cant-datetime-parseexact-parse-9-1-2009-using-m-d-yyyy + return DateTime.ParseExact(Text, DateFormatString, CultureInfo.InvariantCulture); + } + catch (Exception) + { + // Text is not valid DateTime fomat. + return null; + } + } + } + } + set + { + if (DesignMode) + { + FState["SelectedDate"] = value; + } + else + { + if (value == null) + { + Text = String.Empty; + } + else + { + Text = value.Value.ToString(DateFormatString); + } + } + } + } + + + /// <summary> + /// 启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd")] + public bool EnableChineseAltFormats + { + get + { + object obj = FState["EnableChineseAltFormats"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableChineseAltFormats"] = value; + } + } + + + /// <summary> + /// 尝试解析日期的格式列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("尝试解析日期的格式列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] AltFormats + { + get + { + object obj = FState["AltFormats"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["AltFormats"] = value; + } + } + + /// <summary> + /// 日期格式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("yyyy-MM-dd")] + [Description("日期格式")] + public string DateFormatString + { + get + { + object obj = FState["DateFormatString"]; + return obj == null ? "yyyy-MM-dd" : (string)obj; + } + set + { + FState["DateFormatString"] = value; + } + } + + /// <summary> + /// 最大日期 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MaxDate + { + get + { + object obj = FState["MaxDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MaxDate"] = value; + } + } + + /// <summary> + /// 最小日期 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MinDate + { + get + { + object obj = FState["MinDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MinDate"] = value; + } + } + + + ///// <summary> + ///// 选择日期是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选择日期是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableTimeSelectEvent属性")] + //public bool EnableDateSelect + //{ + // get + // { + // return EnableDateSelectEvent; + // } + // set + // { + // EnableDateSelectEvent = value; + // } + //} + + /// <summary> + /// 选择日期是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选择日期是否自动回发")] + public bool EnableDateSelectEvent + { + get + { + object obj = FState["EnableDateSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableDateSelectEvent"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //// 日期选择器也需要菜单组件的支持 + //ResourceManager.Instance.AddJavaScriptComponent("menu"); + + // extjs 的日期格式化字符串 + string extjsDateFormatString = DateUtil.ConvertToClientDateFormat(DateFormatString); + OB.AddProperty("format", extjsDateFormatString); + + if (EnableChineseAltFormats) + { + OB.AddProperty("altFormats", "Y-m-d|Y-n-j|Ymd|Ynj|y-m-d|y-n-j|ymd|ynj"); + } + else if (AltFormats != null) + { + StringBuilder formats = new StringBuilder(); + foreach (string format in AltFormats) + { + formats.Append(DateUtil.ConvertToClientDateFormat(format)); + formats.Append("|"); + } + OB.AddProperty("altFormats", formats.ToString().TrimEnd('|')); + } + + //// 当前选中的日期值,这个在父类中已经设置了 + //OB.RemoveProperty(OptionName.Value); + //if (SelectedDate != null) OB.AddProperty(OptionName.Value, Text); + + if (MaxDate != null) + { + OB.AddProperty("maxValue", MaxDate.Value.ToString(DateFormatString)); + } + if (MinDate != null) + { + OB.AddProperty("minValue", MinDate.Value.ToString(DateFormatString)); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + if (EnableDateSelectEvent) + { + //OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); + AddListener("select", GetPostBackEventReference("Select")); + } + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Date',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region RaisePostBackEvent + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Select")) + { + OnDateSelect(EventArgs.Empty); + } + } + + #endregion + + #region OnDateSelect + + private object _handlerKey = new object(); + + /// <summary> + /// 日期选定事件(需要启用EnableDateSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("日期选定事件(需要启用EnableDateSelect)")] + public virtual event EventHandler DateSelect + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发日期选定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnDateSelect(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs b/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs index a5ed380..1718446 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs @@ -1,381 +1,403 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: FileUpload.cs - * CreatedOn: 2011-12-25 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * ->2011-12-25 30372245@qq.com - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; -using System.Web.UI.Design; - -namespace FineUI -{ - /// <summary> - /// 文件上传控件 - /// </summary> - [Designer("FineUI.Design.FileUploadDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:FileUpload Label=\"Label\" runat=\"server\"></{0}:FileUpload>")] - [ToolboxBitmap(typeof(FileUpload), "toolbox.FileUpload.bmp")] - [Description("文件上传控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class FileUpload : RealTextField, IPostBackEventHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public FileUpload() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - - } - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string Text - { - get - { - return base.Text; - } - } - - #endregion - - #region Properties - - /// <summary> - /// 按钮文本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("按钮文本")] - public string ButtonText - { - get - { - object obj = XState["ButtonText"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ButtonText"] = value; - } - } - - /// <summary> - /// 是否只显示按钮,不显示只读输入框 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否只显示按钮,不显示只读输入框")] - public bool ButtonOnly - { - get - { - object obj = XState["ButtonOnly"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ButtonOnly"] = value; - } - } - - - - /// <summary> - /// 按钮图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Icon.None)] - [Description("按钮图标")] - public Icon ButtonIcon - { - get - { - object obj = XState["ButtonIcon"]; - return obj == null ? Icon.None : (Icon)obj; - } - set - { - XState["ButtonIcon"] = value; - } - } - - /// <summary> - /// 按钮图标地址 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("按钮图标地址")] - [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - public string ButtonIconUrl - { - get - { - object obj = XState["ButtonIconUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ButtonIconUrl"] = value; - } - } - - - /// <summary> - /// 上传的文件 - /// </summary> - [Description("上传的文件")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public HttpPostedFile PostedFile - { - get - { - return Page.Request.Files[UniqueID]; - } - } - - /// <summary> - /// 是否包含文件 - /// </summary> - [Description("是否包含文件")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool HasFile - { - get - { - return PostedFile != null && PostedFile.ContentLength > 0; - } - } - - /// <summary> - /// 客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名) - /// </summary> - [Description("客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名)")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string FileName - { - get - { - return PostedFile.FileName; - } - } - - - /// <summary> - /// 客户端文件名称,不包含目录路径 - /// </summary> - [Description("客户端文件名称,不包含目录路径")] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string ShortFileName - { - get - { - string fileName = FileName; - int lastSlashIndex = fileName.LastIndexOf("\\"); - if (lastSlashIndex >= 0) - { - fileName = fileName.Substring(lastSlashIndex + 1); - } - return fileName; - } - } - - - #endregion - - #region Public - - /// <summary> - /// 将上载文件的内容保存到 Web 服务器上的指定路径 - /// </summary> - /// <param name="filename">保存的文件的名称</param> - public void SaveAs(string filename) - { - if (HasFile) - { - PostedFile.SaveAs(filename); - } - } - - - #endregion - - #region OnPreRender - - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - AddStartupAbsoluteScript("X.form_upload_file=true;"); - - - if (!String.IsNullOrEmpty(ButtonText)) - { - OB.AddProperty("buttonText", ButtonText); - } - - if (ButtonOnly) - { - OB.AddProperty("buttonOnly", true); - } - - - string resolvedIconUrl = IconHelper.GetResolvedIconUrl(ButtonIcon, ButtonIconUrl); - if (!String.IsNullOrEmpty(resolvedIconUrl)) - { - OptionBuilder buttonOB = new OptionBuilder(); - buttonOB.AddProperty("cls", " x-btn-text-icon"); - buttonOB.AddProperty("icon", resolvedIconUrl); - - OB.AddProperty("buttonCfg", buttonOB); - } - - //if (AutoPostBack) - //{ - // OB.Listeners.RemoveProperty("change"); - // OB.Listeners.AddProperty("fileselected", JsHelper.GetFunction(GetPostBackEventReference()), true); - //} - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.File',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - // FileUpload控件不响应回发数据改变事件(因此此控件不保存文本值,也无法判断文本是否改变) - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public override void RaisePostDataChangedEvent() - { - - } - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public override void RaisePostBackEvent(string eventArgument) - { - base.RaisePostBackEvent(eventArgument); - - OnFileSelected(EventArgs.Empty); - } - - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 文件选定事件(需要启用AutoPostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("文件选定事件(需要启用AutoPostBack)")] - public virtual event EventHandler FileSelected - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发文件选定事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnFileSelected(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: FileUpload.cs + * CreatedOn: 2011-12-25 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * ->2011-12-25 30372245@qq.com + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 文件上传控件 + /// </summary> + [Designer("FineUI.Design.FileUploadDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:FileUpload Label=\"Label\" runat=\"server\"></{0}:FileUpload>")] + [ToolboxBitmap(typeof(FileUpload), "toolbox.FileUpload.bmp")] + [Description("文件上传控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class FileUpload : RealTextField, IPostBackEventHandler + { + + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public FileUpload() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string Text + { + get + { + return base.Text; + } + } + + #endregion + + #region Properties + + /// <summary> + /// 允许上传的文件类型(仅部分浏览器支持) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("允许上传的文件类型(仅部分浏览器支持)")] + public string AcceptFileTypes + { + get + { + object obj = FState["AcceptFileTypes"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AcceptFileTypes"] = value; + } + } + + + /// <summary> + /// 按钮文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("按钮文本")] + public string ButtonText + { + get + { + object obj = FState["ButtonText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ButtonText"] = value; + } + } + + /// <summary> + /// 是否只显示按钮,不显示只读输入框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否只显示按钮,不显示只读输入框")] + public bool ButtonOnly + { + get + { + object obj = FState["ButtonOnly"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ButtonOnly"] = value; + } + } + + + + /// <summary> + /// 按钮图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("按钮图标")] + public Icon ButtonIcon + { + get + { + object obj = FState["ButtonIcon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["ButtonIcon"] = value; + } + } + + /// <summary> + /// 按钮图标地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("按钮图标地址")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string ButtonIconUrl + { + get + { + object obj = FState["ButtonIconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ButtonIconUrl"] = value; + } + } + + + /// <summary> + /// 上传的文件 + /// </summary> + [Description("上传的文件")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public HttpPostedFile PostedFile + { + get + { + return Page.Request.Files[UniqueID]; + } + } + + /// <summary> + /// 是否包含文件 + /// </summary> + [Description("是否包含文件")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool HasFile + { + get + { + return PostedFile != null && PostedFile.ContentLength > 0; + } + } + + /// <summary> + /// 客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名) + /// </summary> + [Description("客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名)")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string FileName + { + get + { + return PostedFile.FileName; + } + } + + + /// <summary> + /// 客户端文件名称,不包含目录路径 + /// </summary> + [Description("客户端文件名称,不包含目录路径")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string ShortFileName + { + get + { + string fileName = FileName; + int lastSlashIndex = fileName.LastIndexOf("\\"); + if (lastSlashIndex >= 0) + { + fileName = fileName.Substring(lastSlashIndex + 1); + } + return fileName; + } + } + + + #endregion + + #region Public + + /// <summary> + /// 将上载文件的内容保存到 Web 服务器上的指定路径 + /// </summary> + /// <param name="filename">保存的文件的名称</param> + public void SaveAs(string filename) + { + if (HasFile) + { + PostedFile.SaveAs(filename); + } + } + + + #endregion + + #region OnPreRender + + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + AddStartupAbsoluteScript("F.form_upload_file=true;"); + + + if (!String.IsNullOrEmpty(ButtonText)) + { + OB.AddProperty("buttonText", ButtonText); + } + + if (ButtonOnly) + { + OB.AddProperty("buttonOnly", true); + } + + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(ButtonIcon, ButtonIconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + OptionBuilder buttonOB = new OptionBuilder(); + //buttonOB.AddProperty("cls", " x-btn-text-icon"); + buttonOB.AddProperty("icon", resolvedIconUrl); + + OB.AddProperty("buttonConfig", buttonOB); + } + + //if (AutoPostBack) + //{ + // OB.Listeners.RemoveProperty("change"); + // OB.Listeners.AddProperty("fileselected", JsHelper.GetFunction(GetPostBackEventReference()), true); + //} + + if (!String.IsNullOrEmpty(AcceptFileTypes)) + { + string acceptScript = "cmp.fileInputEl.set({accept:'" + AcceptFileTypes + "'});"; + //OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction(acceptScript, "cmp"), true); + AddListener("afterrender", acceptScript, "cmp"); + } + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.File',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + // FileUpload控件不响应回发数据改变事件(因此此控件不保存文本值,也无法判断文本是否改变) + return false; + } + + + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + OnFileSelected(EventArgs.Empty); + } + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 文件选定事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("文件选定事件(需要启用AutoPostBack)")] + public virtual event EventHandler FileSelected + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发文件选定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnFileSelected(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs b/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs index a3bef92..28207f6 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs @@ -1,73 +1,73 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-07-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 隐藏表单控件 - /// </summary> - [Designer("FineUI.Design.HiddenFieldDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:HiddenField runat=\"server\"></{0}:HiddenField>")] - [ToolboxBitmap(typeof(HiddenField), "toolbox.HiddenField.bmp")] - [Description("隐藏表单控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class HiddenField : RealTextField - { - #region Properties - - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Hidden',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-07-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 隐藏表单控件 + /// </summary> + [Designer("FineUI.Design.HiddenFieldDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:HiddenField runat=\"server\"></{0}:HiddenField>")] + [ToolboxBitmap(typeof(HiddenField), "toolbox.HiddenField.bmp")] + [Description("隐藏表单控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class HiddenField : RealTextField + { + #region Properties + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Hidden',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs b/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs index 470e4de..48a5224 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs @@ -1,190 +1,196 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: js_css_resource.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 数字输入框控件 - /// </summary> - [Designer("FineUI.Design.NumberBoxDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:NumberBox Label=\"Label\" runat=\"server\"></{0}:NumberBox>")] - [ToolboxBitmap(typeof(NumberBox), "toolbox.NumberBox.bmp")] - [Description("数字输入框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class NumberBox : RealTextField - { - #region Properties - - - - /// <summary> - /// 不允许小数 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(false)] - [Description("不允许小数")] - public bool NoDecimal - { - get - { - object obj = XState["NoDecimal"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["NoDecimal"] = value; - } - } - - - /// <summary> - /// 不允许负数 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(false)] - [Description("不允许负数")] - public bool NoNegative - { - get - { - object obj = XState["NoNegative"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["NoNegative"] = value; - } - } - - /// <summary> - /// 最大值 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最大值")] - public double? MaxValue - { - get - { - object obj = XState["MaxValue"]; - return obj == null ? null : (double?)obj; - } - set - { - XState["MaxValue"] = value; - } - } - - /// <summary> - /// 最小值 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最小值")] - public double? MinValue - { - get - { - object obj = XState["MinValue"]; - return obj == null ? null : (double?)obj; - } - set - { - XState["MinValue"] = value; - } - } - - - /// <summary> - /// 小数点后的位数(默认为2) - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(2)] - [Description("小数点后的位数(默认为2)")] - public int DecimalPrecision - { - get - { - object obj = XState["DecimalPrecision"]; - return obj == null ? 2 : (int)obj; - } - set - { - XState["DecimalPrecision"] = value; - } - } - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - OB.AddProperty("allowDecimals", !NoDecimal); - OB.AddProperty("allowNegative", !NoNegative); - if (MaxValue != null) - { - OB.AddProperty("maxValue", MaxValue.Value); - } - if (MinValue != null) - { - OB.AddProperty("minValue", MinValue.Value); - } - - if (DecimalPrecision != 2) - { - OB.AddProperty("decimalPrecision", DecimalPrecision); - } - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Number',{1});", XID, OB.ToString()); - - AddStartupScript(jsContent); - } - - #endregion - - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 数字输入框控件 + /// </summary> + [Designer("FineUI.Design.NumberBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:NumberBox Label=\"Label\" runat=\"server\"></{0}:NumberBox>")] + [ToolboxBitmap(typeof(NumberBox), "toolbox.NumberBox.bmp")] + [Description("数字输入框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class NumberBox : RealTextField + { + #region Properties + + + + /// <summary> + /// 不允许小数 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("不允许小数")] + public bool NoDecimal + { + get + { + object obj = FState["NoDecimal"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["NoDecimal"] = value; + } + } + + + /// <summary> + /// 不允许负数 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("不允许负数")] + public bool NoNegative + { + get + { + object obj = FState["NoNegative"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["NoNegative"] = value; + } + } + + /// <summary> + /// 最大值 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大值")] + public double? MaxValue + { + get + { + object obj = FState["MaxValue"]; + return obj == null ? null : (double?)obj; + } + set + { + FState["MaxValue"] = value; + } + } + + /// <summary> + /// 最小值 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小值")] + public double? MinValue + { + get + { + object obj = FState["MinValue"]; + return obj == null ? null : (double?)obj; + } + set + { + FState["MinValue"] = value; + } + } + + + /// <summary> + /// 小数点后的位数(默认为2) + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(2)] + [Description("小数点后的位数(默认为2)")] + public int DecimalPrecision + { + get + { + object obj = FState["DecimalPrecision"]; + return obj == null ? 2 : (int)obj; + } + set + { + FState["DecimalPrecision"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("allowDecimals", !NoDecimal); + //OB.AddProperty("allowNegative", !NoNegative); + if (MaxValue != null) + { + OB.AddProperty("maxValue", MaxValue.Value); + } + + if (MinValue != null) + { + OB.AddProperty("minValue", MinValue.Value); + } + else if (NoNegative) + { + // 未定义 MinValue,但定义了 NoNegative + OB.AddProperty("minValue", 0); + } + + if (DecimalPrecision != 2) + { + OB.AddProperty("decimalPrecision", DecimalPrecision); + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Number',{1});", XID, OB.ToString()); + + AddStartupScript(jsContent); + } + + #endregion + + + + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs b/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs index b1d4419..82a2142 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs @@ -1,220 +1,239 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TextArea.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 多行文本框控件 - /// </summary> - [Designer("FineUI.Design.TextAreaDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:TextArea Label=\"Label\" Text=\"\" Height=\"50px\" runat=\"server\"></{0}:TextArea>")] - [ToolboxBitmap(typeof(TextArea), "toolbox.TextArea.bmp")] - [Description("多行文本框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class TextArea : RealTextField - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public TextArea() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - - } - - #endregion - - #region Properties - - /// <summary> - /// 是否自动增长高度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否自动增长高度")] - public bool AutoGrowHeight - { - get - { - object obj = XState["AutoGrowHeight"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoGrowHeight"] = value; - } - } - - - /// <summary> - /// 自动增长的最大高度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "1000")] - [Description("自动增长的最大高度")] - public Unit AutoGrowHeightMax - { - get - { - object obj = XState["AutoGrowHeightMax"]; - return obj == null ? (Unit)1000 : (Unit)obj; - } - set - { - XState["AutoGrowHeightMax"] = value; - } - } - - /// <summary> - /// 自动增长的最小高度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "60")] - [Description("自动增长的最小高度")] - public Unit AutoGrowHeightMin - { - get - { - object obj = XState["AutoGrowHeightMin"]; - return obj == null ? (Unit)60 : (Unit)obj; - } - set - { - XState["AutoGrowHeightMin"] = value; - } - } - - - /// <summary> - /// 是否总是隐藏滚动条 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否总是隐藏滚动条")] - public bool HideScrollbars - { - get - { - object obj = XState["HideScrollbars"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["HideScrollbars"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - if (AutoGrowHeight) - { - OB.AddProperty("grow", AutoGrowHeight); - - if (AutoGrowHeightMax.Value != 1000) - { - OB.AddProperty("growMax", AutoGrowHeightMax.Value); - } - - if (AutoGrowHeightMin.Value != 60) - { - OB.AddProperty("growMin", AutoGrowHeightMin.Value); - } - - if (HideScrollbars) - { - OB.AddProperty("preventScrollbars", true); - } - } - - - // 如果Text属性存在于XState中,则不要重复设置value属性,而是在render事件中使用XState的值 - if (XState.ModifiedProperties.Contains("Text")) - { - //OB.RemoveProperty("value"); - //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.x_setValue();", "cmp"), true); - OB.AddProperty("value", String.Format("{0}.Text", GetXStateScriptID()), true); - } - - - //// 自动增长的最小高度要么等于高度,要么等于50(最小值) - //if (AutoGrowHeight) - //{ - // Unit height = (Unit)50; - // if (Height != Unit.Empty) - // { - // height = Height; - // } - - // OB.AddProperty("growMin", height.Value); - //} - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.TextArea',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TextArea.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 多行文本框控件 + /// </summary> + [Designer("FineUI.Design.TextAreaDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:TextArea Label=\"Label\" Text=\"\" Height=\"50px\" runat=\"server\"></{0}:TextArea>")] + [ToolboxBitmap(typeof(TextArea), "toolbox.TextArea.bmp")] + [Description("多行文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TextArea : RealTextField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TextArea() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string NextFocusControl + { + get + { + return base.NextFocusControl; + } + } + + + + #endregion + + #region Properties + + /// <summary> + /// 是否自动增长高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动增长高度")] + public bool AutoGrowHeight + { + get + { + object obj = FState["AutoGrowHeight"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoGrowHeight"] = value; + } + } + + + /// <summary> + /// 自动增长的最大高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "1000")] + [Description("自动增长的最大高度")] + public Unit AutoGrowHeightMax + { + get + { + object obj = FState["AutoGrowHeightMax"]; + return obj == null ? (Unit)1000 : (Unit)obj; + } + set + { + FState["AutoGrowHeightMax"] = value; + } + } + + /// <summary> + /// 自动增长的最小高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "60")] + [Description("自动增长的最小高度")] + public Unit AutoGrowHeightMin + { + get + { + object obj = FState["AutoGrowHeightMin"]; + return obj == null ? (Unit)60 : (Unit)obj; + } + set + { + FState["AutoGrowHeightMin"] = value; + } + } + + + /// <summary> + /// 是否总是隐藏滚动条 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否总是隐藏滚动条")] + public bool HideScrollbars + { + get + { + object obj = FState["HideScrollbars"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["HideScrollbars"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (AutoGrowHeight) + { + OB.AddProperty("grow", AutoGrowHeight); + + if (AutoGrowHeightMax.Value != 1000) + { + OB.AddProperty("growMax", AutoGrowHeightMax.Value); + } + + if (AutoGrowHeightMin.Value != 60) + { + OB.AddProperty("growMin", AutoGrowHeightMin.Value); + } + + if (HideScrollbars) + { + OB.AddProperty("preventScrollbars", true); + } + } + + + // 如果Text属性存在于FState中,则不要重复设置value属性,而是在render事件中使用FState的值 + if (FState.ModifiedProperties.Contains("Text")) + { + //OB.RemoveProperty("value"); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.f_setValue();", "cmp"), true); + OB.AddProperty("value", String.Format("{0}.Text", GetFStateScriptID()), true); + } + + + //// 自动增长的最小高度要么等于高度,要么等于50(最小值) + //if (AutoGrowHeight) + //{ + // Unit height = (Unit)50; + // if (Height != Unit.Empty) + // { + // height = Height; + // } + + // OB.AddProperty("growMin", height.Value); + //} + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.TextArea',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs b/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs index 9222e8c..8ea09f3 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs @@ -1,139 +1,139 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TextBox.cs - * CreatedOn: 2008-04-07 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 文本框控件 - /// </summary> - [Designer("FineUI.Design.TextBoxDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:TextBox Label=\"Label\" Text=\"\" runat=\"server\"></{0}:TextBox>")] - [ToolboxBitmap(typeof(TextBox), "toolbox.TextBox.bmp")] - [Description("文本框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class TextBox : RealTextField - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public TextBox() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - - } - - #endregion - - #region Properties - - - /// <summary> - /// 文本框类型 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(TextMode.Text)] - [Description("文本框类型")] - public virtual TextMode TextMode - { - get - { - object obj = XState["TextMode"]; - return obj == null ? TextMode.Text : (TextMode)obj; - } - set - { - XState["TextMode"] = value; - } - } - - #endregion - - #region OnPreRender - - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - - if (TextMode != TextMode.Text) - { - OB.AddProperty("inputType", TextModeHelper.GetName(TextMode)); - } - - - // 如果Text属性存在于XState中,则不要重复设置value属性,而是在render事件中使用XState的值 - if (XState.ModifiedProperties.Contains("Text")) - { - //OB.RemoveProperty("value"); - //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.x_setValue();", "cmp"), true); - OB.AddProperty("value", String.Format("{0}.Text", GetXStateScriptID()), true); - } - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Text',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TextBox.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 文本框控件 + /// </summary> + [Designer("FineUI.Design.TextBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:TextBox Label=\"Label\" Text=\"\" runat=\"server\"></{0}:TextBox>")] + [ToolboxBitmap(typeof(TextBox), "toolbox.TextBox.bmp")] + [Description("文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TextBox : RealTextField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TextBox() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Properties + + + /// <summary> + /// 文本框类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TextMode.Text)] + [Description("文本框类型")] + public virtual TextMode TextMode + { + get + { + object obj = FState["TextMode"]; + return obj == null ? TextMode.Text : (TextMode)obj; + } + set + { + FState["TextMode"] = value; + } + } + + #endregion + + #region OnPreRender + + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + + if (TextMode != TextMode.Text) + { + OB.AddProperty("inputType", TextModeHelper.GetName(TextMode)); + } + + + // 如果Text属性存在于FState中,则不要重复设置value属性,而是在render事件中使用FState的值 + if (FState.ModifiedProperties.Contains("Text")) + { + //OB.RemoveProperty("value"); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.f_setValue();", "cmp"), true); + OB.AddProperty("value", String.Format("{0}.Text", GetFStateScriptID()), true); + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Text',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs b/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs index f97ae5c..cd4b006 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs @@ -1,456 +1,457 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TimePicker.cs - * CreatedOn: 2012-11-01 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; -using System.Globalization; - -namespace FineUI -{ - /// <summary> - /// 时间选择框控件 - /// </summary> - [Designer("FineUI.Design.TimePickerDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [ToolboxData("<{0}:TimePicker Label=\"Label\" runat=\"server\"></{0}:TimePicker>")] - [ToolboxBitmap(typeof(TimePicker), "toolbox.TimePicker.bmp")] - [DefaultEvent("DateSelect")] - [Description("时间选择框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class TimePicker : RealTextField, IPostBackEventHandler - { - - #region Properties - - /// <summary> - /// 是否允许编辑 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否允许编辑")] - public bool EnableEdit - { - get - { - object obj = XState["EnableEdit"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableEdit"] = value; - } - } - - /// <summary> - /// 选择的时间 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("选择的时间")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? SelectedDate - { - get - { - if (DesignMode) - { - object obj = XState["SelectedDate"]; - return obj == null ? null : (DateTime?)obj; - } - else - { - - if (String.IsNullOrEmpty(Text)) - { - return null; - } - else - { - try - { - // OktaEndy - return null when DateFormatString = "dd/MM/yyyy" - Trying to Parse DateTime using it's DateFormatString - // http://stackoverflow.com/questions/1368636/why-cant-datetime-parseexact-parse-9-1-2009-using-m-d-yyyy - return DateTime.ParseExact(Text, TimeFormatString, CultureInfo.InvariantCulture); - } - catch (Exception) - { - // Text is not valid DateTime fomat. - return null; - } - } - } - } - set - { - if (DesignMode) - { - XState["SelectedDate"] = value; - } - else - { - if (value == null) - { - Text = String.Empty; - } - else - { - Text = value.Value.ToString(TimeFormatString); - } - } - } - } - - - /// <summary> - /// 尝试解析时间的格式列表 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("尝试解析时间的格式列表")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] AltFormats - { - get - { - object obj = XState["AltFormats"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["AltFormats"] = value; - } - } - - - /// <summary> - /// 时间格式(默认为HH:mm,24小时制,比如“20:30”) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("HH:mm")] - [Description("时间格式")] - public string TimeFormatString - { - get - { - object obj = XState["TimeFormatString"]; - return obj == null ? "HH:mm" : (string)obj; - } - set - { - XState["TimeFormatString"] = value; - } - } - - /// <summary> - /// 最大时间 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最大时间")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? MaxTime - { - get - { - object obj = XState["MaxTime"]; - return obj == null ? null : (DateTime?)obj; - } - set - { - XState["MaxTime"] = value; - } - } - - /// <summary> - /// 最大时间的字符串形式 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最大时间的字符串形式")] - public string MaxTimeText - { - get - { - object obj = XState["MaxTimeText"]; - return obj == null ? null : (string)obj; - } - set - { - XState["MaxTimeText"] = value; - } - } - - /// <summary> - /// 最小时间 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最小时间")] - [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] - public DateTime? MinTime - { - get - { - object obj = XState["MinTime"]; - return obj == null ? null : (DateTime?)obj; - } - set - { - XState["MinTime"] = value; - } - } - - /// <summary> - /// 最小时间的字符串形式 - /// </summary> - [Category(CategoryName.VALIDATION)] - [DefaultValue(null)] - [Description("最小时间的字符串形式")] - public string MinTimeText - { - get - { - object obj = XState["MinTimeText"]; - return obj == null ? null : (string)obj; - } - set - { - XState["MinTimeText"] = value; - } - } - - - private const short INCREMENT_DEFAULT = 15; - - /// <summary> - /// 列表中每个时间值相差的分钟数(默认为15分钟) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(INCREMENT_DEFAULT)] - [Description("列表中每个时间值相差的分钟数(默认为15分钟)")] - public short Increment - { - get - { - object obj = XState["Increment"]; - return obj == null ? INCREMENT_DEFAULT : (short)obj; - } - set - { - XState["Increment"] = value; - } - } - - /// <summary> - /// 选择时间是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选择时间是否自动回发")] - public bool EnableTimeSelectEvent - { - get - { - object obj = XState["EnableTimeSelectEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableTimeSelectEvent"] = value; - } - } - - /// <summary> - /// 选择时间是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选择时间是否自动回发")] - [Obsolete("此属性已废除,请使用EnableTimeSelectEvent属性")] - public bool EnableTimeSelect - { - get - { - return EnableTimeSelectEvent; - } - set - { - EnableTimeSelectEvent = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Readonly")) - //{ - // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //// 日期选择器也需要菜单组件的支持 - //ResourceManager.Instance.AddJavaScriptComponent("menu"); - - // extjs 的日期格式化字符串 - string extjsDateFormatString = ExtDateTimeConvertor.ConvertToExtDateFormat(TimeFormatString); - OB.AddProperty("format", extjsDateFormatString); - - if (AltFormats != null) - { - StringBuilder formats = new StringBuilder(); - foreach (string format in AltFormats) - { - formats.Append(ExtDateTimeConvertor.ConvertToExtDateFormat(format)); - formats.Append("|"); - } - OB.AddProperty("altFormats", formats.ToString().TrimEnd('|')); - } - - if (Increment != INCREMENT_DEFAULT) - { - OB.AddProperty("increment", Increment); - } - - - ////// 当前选中的日期值,这个在父类中已经设置了 - ////OB.RemoveProperty(OptionName.Value); - ////if (SelectedDate != null) OB.AddProperty(OptionName.Value, Text); - - - if (MaxTime.HasValue) - { - OB.AddProperty("maxValue", MaxTime.Value.ToString(TimeFormatString)); - } - else if (!String.IsNullOrEmpty(MaxTimeText)) - { - OB.AddProperty("maxValue", MaxTimeText); - } - - if (MinTime.HasValue) - { - OB.AddProperty("minValue", MinTime.Value.ToString(TimeFormatString)); - } - else if (!String.IsNullOrEmpty(MinTimeText)) - { - OB.AddProperty("minValue", MinTimeText); - } - - if (!EnableEdit) - { - OB.AddProperty("editable", false); - } - - - if (EnableTimeSelectEvent) - { - OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); - } - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Time',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region RaisePostBackEvent - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public override void RaisePostBackEvent(string eventArgument) - { - base.RaisePostBackEvent(eventArgument); - - if (eventArgument.StartsWith("Select")) - { - OnDateSelect(EventArgs.Empty); - } - } - - #endregion - - #region OnDateSelect - - private object _handlerKey = new object(); - - /// <summary> - /// 日期选择事件(需要启用EnableDateSelect) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("日期选择事件(需要启用EnableDateSelect)")] - public virtual event EventHandler DateSelect - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发日期选择事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnDateSelect(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TimePicker.cs + * CreatedOn: 2012-11-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Globalization; + +namespace FineUI +{ + /// <summary> + /// 时间选择框控件 + /// </summary> + [Designer("FineUI.Design.TimePickerDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:TimePicker Label=\"Label\" runat=\"server\"></{0}:TimePicker>")] + [ToolboxBitmap(typeof(TimePicker), "toolbox.TimePicker.bmp")] + [DefaultEvent("DateSelect")] + [Description("时间选择框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TimePicker : RealTextField, IPostBackEventHandler + { + + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + /// <summary> + /// 选择的时间 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("选择的时间")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? SelectedDate + { + get + { + if (DesignMode) + { + object obj = FState["SelectedDate"]; + return obj == null ? null : (DateTime?)obj; + } + else + { + + if (String.IsNullOrEmpty(Text)) + { + return null; + } + else + { + try + { + // OktaEndy - return null when DateFormatString = "dd/MM/yyyy" - Trying to Parse DateTime using it's DateFormatString + // http://stackoverflow.com/questions/1368636/why-cant-datetime-parseexact-parse-9-1-2009-using-m-d-yyyy + return DateTime.ParseExact(Text, TimeFormatString, CultureInfo.InvariantCulture); + } + catch (Exception) + { + // Text is not valid DateTime fomat. + return null; + } + } + } + } + set + { + if (DesignMode) + { + FState["SelectedDate"] = value; + } + else + { + if (value == null) + { + Text = String.Empty; + } + else + { + Text = value.Value.ToString(TimeFormatString); + } + } + } + } + + + /// <summary> + /// 尝试解析时间的格式列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("尝试解析时间的格式列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] AltFormats + { + get + { + object obj = FState["AltFormats"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["AltFormats"] = value; + } + } + + + /// <summary> + /// 时间格式(默认为HH:mm,24小时制,比如“20:30”) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("HH:mm")] + [Description("时间格式")] + public string TimeFormatString + { + get + { + object obj = FState["TimeFormatString"]; + return obj == null ? "HH:mm" : (string)obj; + } + set + { + FState["TimeFormatString"] = value; + } + } + + /// <summary> + /// 最大时间 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大时间")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MaxTime + { + get + { + object obj = FState["MaxTime"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MaxTime"] = value; + } + } + + /// <summary> + /// 最大时间的字符串形式 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大时间的字符串形式")] + public string MaxTimeText + { + get + { + object obj = FState["MaxTimeText"]; + return obj == null ? null : (string)obj; + } + set + { + FState["MaxTimeText"] = value; + } + } + + /// <summary> + /// 最小时间 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小时间")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MinTime + { + get + { + object obj = FState["MinTime"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MinTime"] = value; + } + } + + /// <summary> + /// 最小时间的字符串形式 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小时间的字符串形式")] + public string MinTimeText + { + get + { + object obj = FState["MinTimeText"]; + return obj == null ? null : (string)obj; + } + set + { + FState["MinTimeText"] = value; + } + } + + + private const short INCREMENT_DEFAULT = 15; + + /// <summary> + /// 列表中每个时间值相差的分钟数(默认为15分钟) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(INCREMENT_DEFAULT)] + [Description("列表中每个时间值相差的分钟数(默认为15分钟)")] + public short Increment + { + get + { + object obj = FState["Increment"]; + return obj == null ? INCREMENT_DEFAULT : (short)obj; + } + set + { + FState["Increment"] = value; + } + } + + /// <summary> + /// 选择时间是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选择时间是否自动回发")] + public bool EnableTimeSelectEvent + { + get + { + object obj = FState["EnableTimeSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableTimeSelectEvent"] = value; + } + } + + ///// <summary> + ///// 选择时间是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选择时间是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableTimeSelectEvent属性")] + //public bool EnableTimeSelect + //{ + // get + // { + // return EnableTimeSelectEvent; + // } + // set + // { + // EnableTimeSelectEvent = value; + // } + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //// 日期选择器也需要菜单组件的支持 + //ResourceManager.Instance.AddJavaScriptComponent("menu"); + + // extjs 的日期格式化字符串 + string extjsDateFormatString = DateUtil.ConvertToClientDateFormat(TimeFormatString); + OB.AddProperty("format", extjsDateFormatString); + + if (AltFormats != null) + { + StringBuilder formats = new StringBuilder(); + foreach (string format in AltFormats) + { + formats.Append(DateUtil.ConvertToClientDateFormat(format)); + formats.Append("|"); + } + OB.AddProperty("altFormats", formats.ToString().TrimEnd('|')); + } + + if (Increment != INCREMENT_DEFAULT) + { + OB.AddProperty("increment", Increment); + } + + + ////// 当前选中的日期值,这个在父类中已经设置了 + ////OB.RemoveProperty(OptionName.Value); + ////if (SelectedDate != null) OB.AddProperty(OptionName.Value, Text); + + + if (MaxTime.HasValue) + { + OB.AddProperty("maxValue", MaxTime.Value.ToString(TimeFormatString)); + } + else if (!String.IsNullOrEmpty(MaxTimeText)) + { + OB.AddProperty("maxValue", MaxTimeText); + } + + if (MinTime.HasValue) + { + OB.AddProperty("minValue", MinTime.Value.ToString(TimeFormatString)); + } + else if (!String.IsNullOrEmpty(MinTimeText)) + { + OB.AddProperty("minValue", MinTimeText); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + if (EnableTimeSelectEvent) + { + //OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); + AddListener("select", GetPostBackEventReference("Select")); + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Time',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region RaisePostBackEvent + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Select")) + { + OnDateSelect(EventArgs.Empty); + } + } + + #endregion + + #region OnDateSelect + + private object _handlerKey = new object(); + + /// <summary> + /// 日期选择事件(需要启用EnableDateSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("日期选择事件(需要启用EnableDateSelect)")] + public virtual event EventHandler DateSelect + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发日期选择事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnDateSelect(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs b/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs index 47aa76b..8cb8cf9 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs @@ -1,347 +1,357 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TriggerBox.cs - * CreatedOn: 2008-06-18 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 扩展文本框控件 - /// </summary> - [Designer("FineUI.Design.TriggerBoxDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [DefaultEvent("TriggerClick")] - [ToolboxData("<{0}:TriggerBox Label=\"Label\" TriggerIcon=\"Search\" runat=\"server\"></{0}:TriggerBox>")] - [ToolboxBitmap(typeof(TriggerBox), "toolbox.TriggerBox.bmp")] - [Description("扩展文本框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class TriggerBox : RealTextField, IPostBackEventHandler - { - #region Properties - - /// <summary> - /// 是否允许编辑 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否允许编辑")] - public bool EnableEdit - { - get - { - object obj = XState["EnableEdit"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableEdit"] = value; - } - } - - /// <summary> - /// 是否显示触发器 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否显示触发器")] - public bool ShowTrigger - { - get - { - object obj = XState["ShowTrigger"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ShowTrigger"] = value; - } - } - - - /// <summary> - /// 是否可以回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以回发")] - public bool EnablePostBack - { - get - { - object obj = XState["EnablePostBack"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnablePostBack"] = value; - } - } - - - /// <summary> - /// 右侧按钮的图片 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("右侧按钮的图片")] - public virtual string TriggerIconUrl - { - get - { - object obj = XState["TriggerIconUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["TriggerIconUrl"] = value; - } - } - - - /// <summary> - /// 右侧的图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(TriggerIcon.None)] - [Description("右侧的图标")] - public virtual TriggerIcon TriggerIcon - { - get - { - object obj = XState["TriggerIcon"]; - return obj == null ? TriggerIcon.None : (TriggerIcon)obj; - } - set - { - XState["TriggerIcon"] = value; - } - } - - - /// <summary> - /// 点击按钮时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("点击按钮时需要执行的客户端脚本")] - public string OnClientTriggerClick - { - get - { - object obj = XState["OnClientTriggerClick"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientTriggerClick"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - #region options - if (!ShowTrigger) - { - OB.AddProperty("hideTrigger", true); - } - - if (!EnableEdit) - { - OB.AddProperty("editable", false); - } - - - - #endregion - - #region TriggerIcon - - if (TriggerIcon != TriggerIcon.None) - { - OB.AddProperty("triggerClass", TriggerIconHelper.GetName(TriggerIcon)); - } - else if (!String.IsNullOrEmpty(TriggerIconUrl)) - { - string className = String.Format("fineui_{0}_triggerbox_icon", XID); - string selector = String.Format(".x-form-field-wrap .{0}", className); - AddStartupCSS(className, StyleUtil.GetBackgroundStyle(selector, ResolveUrl(TriggerIconUrl))); - - OB.AddProperty("triggerClass", className); - } - - - #endregion - - #region TriggerClick - - if (Enabled) - { - string clientClickScript = OnClientTriggerClick; - if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) - { - clientClickScript += ";"; - } - - string postbackScript = String.Empty; - if (EnablePostBack) - { - postbackScript = GetPostBackEventReference(); - } - - OB.AddProperty("onTriggerClick", JsHelper.GetFunction(clientClickScript + postbackScript), true); - } - - #endregion - - #region Specialkey - - if (Enabled) - { - // 首先启用enableKeyEvents - //OB.AddProperty("enableKeyEvents", true); - OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.onTriggerClick();e.stopEvent();}}}}", XID), true); - - //OB.Listeners.AddProperty("keydown", JsHelper.GetFunction("var i=0;"), true); - } - - #endregion - - #region old code - - //// 只禁用文本框,不禁用Trigger - //if (Readonly) - //{ - // //OB.AddProperty(OptionName.Disabled, true); - // //AddAbsoluteStartupScript( String.Format("{0}.el.dom.disabled=true;", ClientID)); - - - - // //OB.Listeners.AddProperty(OptionName.Focus, String.Format("function(field){{field.blur.defer(10,field);\r\n}}"), true); - // //OB.Listeners.AddProperty(OptionName.Keydown, String.Format("function(){{return false;}}"), true); - - - // // 晕,最后的解决方案居然是设置 readonly=true - // OB.AddProperty(OptionName.ReadOnly, true); - - // //string cssClassName = CssClass; - // //cssClassName += "x-item-disabled"; - - // //OB.RemoveProperty(OptionName.Cls); - // //OB.AddProperty(OptionName.Cls, cssClassName); - // //OB.AddProperty(OptionName.FocusClass, ""); - //} - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Trigger',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region IPostBackEventHandler Members - - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 触发按钮点击事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("触发按钮点击事件")] - public event EventHandler TriggerClick - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发按钮点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnTriggerClick(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public override void RaisePostBackEvent(string eventArgument) - { - base.RaisePostBackEvent(eventArgument); - - OnTriggerClick(EventArgs.Empty); - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TriggerBox.cs + * CreatedOn: 2008-06-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 扩展文本框控件 + /// </summary> + [Designer("FineUI.Design.TriggerBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [DefaultEvent("TriggerClick")] + [ToolboxData("<{0}:TriggerBox Label=\"Label\" TriggerIcon=\"Search\" runat=\"server\"></{0}:TriggerBox>")] + [ToolboxBitmap(typeof(TriggerBox), "toolbox.TriggerBox.bmp")] + [Description("扩展文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TriggerBox : RealTextField, IPostBackEventHandler + { + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + /// <summary> + /// 是否显示触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否显示触发器")] + public bool ShowTrigger + { + get + { + object obj = FState["ShowTrigger"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger"] = value; + } + } + + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// 右侧按钮的图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("右侧按钮的图片")] + public virtual string TriggerIconUrl + { + get + { + object obj = FState["TriggerIconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["TriggerIconUrl"] = value; + } + } + + + /// <summary> + /// 右侧的图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TriggerIcon.None)] + [Description("右侧的图标")] + public virtual TriggerIcon TriggerIcon + { + get + { + object obj = FState["TriggerIcon"]; + return obj == null ? TriggerIcon.None : (TriggerIcon)obj; + } + set + { + FState["TriggerIcon"] = value; + } + } + + + /// <summary> + /// 点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击按钮时需要执行的客户端脚本")] + public string OnClientTriggerClick + { + get + { + object obj = FState["OnClientTriggerClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientTriggerClick"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + #region options + if (!ShowTrigger) + { + OB.AddProperty("hideTrigger", true); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + + #endregion + + #region TriggerIcon + + if (TriggerIcon != TriggerIcon.None) + { + OB.AddProperty("triggerCls", TriggerIconHelper.GetName(TriggerIcon)); + } + else if (!String.IsNullOrEmpty(TriggerIconUrl)) + { + string className = String.Format("f_{0}_triggerbox_icon", XID); + string selector = String.Format(".{0}", className); + AddStartupCSS(className, StyleUtil.GetBackgroundStyle(selector, ResolveUrl(TriggerIconUrl))); + + OB.AddProperty("triggerCls", className); + } + + + #endregion + + #region TriggerClick + + //if (Enabled) + //{ + string clientClickScript = OnClientTriggerClick; + if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) + { + clientClickScript += ";"; + } + + string postbackScript = String.Empty; + if (EnablePostBack) + { + postbackScript = GetPostBackEventReference(); + } + + OB.AddProperty("onTriggerClick", JsHelper.GetFunction(clientClickScript + postbackScript), true); + //} + + #endregion + + #region Specialkey + + //if (Enabled) + //{ + // 首先启用enableKeyEvents + //OB.AddProperty("enableKeyEvents", true); + //OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.onTriggerClick();e.stopEvent();}}}}", XID), true); + AddListener("specialkey", String.Format("if(e.getKey()==e.ENTER){{{0}.onTriggerClick();e.stopEvent();}}", XID), "field", "e"); + //} + + #endregion + + #region EnableEdit + // extjsv4.x 的enableedit=false,不能点击输入框触发 + if (!EnableEdit) + { + //OB.Listeners.AddProperty("render", "function(field){field.mon(field.inputEl,'click',field.onTriggerClick,field);}", true); + AddListener("render", "field.mon(field.inputEl,'click',field.onTriggerClick,field);", "field"); + + } + #endregion + + + #region old code + + //// 只禁用文本框,不禁用Trigger + //if (Readonly) + //{ + // //OB.AddProperty(OptionName.Disabled, true); + // //AddAbsoluteStartupScript( String.Format("{0}.el.dom.disabled=true;", ClientID)); + + + + // //OB.Listeners.AddProperty(OptionName.Focus, String.Format("function(field){{field.blur.defer(10,field);\r\n}}"), true); + // //OB.Listeners.AddProperty(OptionName.Keydown, String.Format("function(){{return false;}}"), true); + + + // // 晕,最后的解决方案居然是设置 readonly=true + // OB.AddProperty(OptionName.ReadOnly, true); + + // //string cssClassName = CssClass; + // //cssClassName += "x-item-disabled"; + + // //OB.RemoveProperty(OptionName.Cls); + // //OB.AddProperty(OptionName.Cls, cssClassName); + // //OB.AddProperty(OptionName.FocusClass, ""); + //} + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Trigger',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackEventHandler Members + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("触发按钮点击事件")] + public event EventHandler TriggerClick + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTriggerClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + OnTriggerClick(EventArgs.Empty); + } + + #endregion + } +} diff --git a/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs b/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs index 56fa865..ed5e96a 100644 --- a/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs +++ b/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs @@ -1,549 +1,559 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TwinTriggerBox.cs - * CreatedOn: 2008-06-27 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -namespace FineUI -{ - /// <summary> - /// 扩展文本框控件 - /// </summary> - [Designer("FineUI.Design.TwinTriggerBoxDesigner, FineUI.Design")] - [DefaultProperty("Text")] - [DefaultEvent("TriggerClick")] - [ToolboxData("<{0}:TwinTriggerBox Label=\"Label\" Trigger1Icon=\"Clear\" Trigger2Icon=\"Search\" runat=\"server\"></{0}:TwinTriggerBox>")] - [ToolboxBitmap(typeof(TwinTriggerBox), "toolbox.TwinTriggerBox.bmp")] - [Description("扩展文本框控件")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class TwinTriggerBox : RealTextField, IPostBackEventHandler, IPostBackDataHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public TwinTriggerBox() - { - AddServerAjaxProperties("ShowTrigger1", "ShowTrigger2"); - AddClientAjaxProperties(); - } - - #endregion - - #region Properties - - /// <summary> - /// 是否允许编辑 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否允许编辑")] - public bool EnableEdit - { - get - { - object obj = XState["EnableEdit"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableEdit"] = value; - } - } - - - /// <summary> - /// 是否显示触发器 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否显示触发器")] - public bool ShowTrigger - { - get - { - object obj = XState["ShowTrigger"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ShowTrigger"] = value; - } - } - - /// <summary> - /// [AJAX属性]是否显示第一个触发器 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("[AJAX属性]是否显示第一个触发器")] - public bool ShowTrigger1 - { - get - { - object obj = XState["ShowTrigger1"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ShowTrigger1"] = value; - } - } - - - /// <summary> - /// [AJAX属性]是否显示第一个触发器 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("[AJAX属性]是否显示第二个触发器")] - public bool ShowTrigger2 - { - get - { - object obj = XState["ShowTrigger2"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ShowTrigger2"] = value; - } - } - - - /// <summary> - /// 是否可以回发第一个触发器 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以回发第一个触发器")] - public bool EnableTrigger1PostBack - { - get - { - object obj = XState["EnableTrigger1PostBack"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableTrigger1PostBack"] = value; - } - } - - - /// <summary> - /// 是否可以回发第一个触发器 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以回发")] - public bool EnableTrigger2PostBack - { - get - { - object obj = XState["EnableTrigger2PostBack"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableTrigger2PostBack"] = value; - } - } - - - /// <summary> - /// 第一个触发器图片 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("第一个触发器图片")] - public virtual string Trigger1IconUrl - { - get - { - object obj = XState["Trigger1IconUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Trigger1IconUrl"] = value; - } - } - - /// <summary> - /// 第二个触发器图片 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("第二个触发器图片")] - public virtual string Trigger2IconUrl - { - get - { - object obj = XState["Trigger2IconUrl"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Trigger2IconUrl"] = value; - } - } - - - - /// <summary> - /// 第一个触发器图片 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(TriggerIcon.None)] - [Description("第一个触发器图片")] - public virtual TriggerIcon Trigger1Icon - { - get - { - object obj = XState["Trigger1Icon"]; - return obj == null ? TriggerIcon.None : (TriggerIcon)obj; - } - set - { - XState["Trigger1Icon"] = value; - } - } - - /// <summary> - /// 第二个触发器图片 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(TriggerIcon.None)] - [Description("第二个触发器图片")] - public virtual TriggerIcon Trigger2Icon - { - get - { - object obj = XState["Trigger2Icon"]; - return obj == null ? TriggerIcon.None : (TriggerIcon)obj; - } - set - { - XState["Trigger2Icon"] = value; - } - } - - /// <summary> - /// 点击第一个触发器时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("点击第一个触发器时需要执行的客户端脚本")] - public string OnClientTrigger1Click - { - get - { - object obj = XState["OnClientTrigger1Click"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientTrigger1Click"] = value; - } - } - - /// <summary> - /// 点击第二个触发器时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("点击第二个触发器时需要执行的客户端脚本")] - public string OnClientTrigger2Click - { - get - { - object obj = XState["OnClientTrigger2Click"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientTrigger2Click"] = value; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("ShowTrigger1")) - { - sb.AppendFormat("{0}.triggerCell.item(0).setDisplayed({1});", XID, ShowTrigger1 ? "true" : "false"); - } - - if (PropertyModified("ShowTrigger2")) - { - sb.AppendFormat("{0}.triggerCell.item(1).setDisplayed({1});", XID, ShowTrigger2 ? "true" : "false"); - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - #region options - - if (!ShowTrigger) - { - OB.AddProperty("hideTrigger", true); - } - - if (!EnableEdit) - { - OB.AddProperty("editable", false); - } - - - string renderScript = String.Empty; - if (!ShowTrigger1) - { - renderScript += String.Format("this.triggerCell.item(0).setDisplayed(false);"); - } - if (!ShowTrigger2) - { - renderScript += String.Format("this.triggerCell.item(1).setDisplayed(false);"); - } - - if (!String.IsNullOrEmpty(renderScript)) - { - //renderScript += "this.updateLayout();"; - OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction(renderScript), true); - } - - - #endregion - - #region Trigger1Icon/Trigger2Icon - - if (Trigger1Icon != TriggerIcon.None) - { - OB.AddProperty("trigger1Cls", TriggerIconHelper.GetName(Trigger1Icon)); - } - else if (!String.IsNullOrEmpty(Trigger1IconUrl)) - { - string className = String.Format("fineui_{0}_twintriggerbox_icon1", XID); - string selector = String.Format(".x-form-field-wrap .x-form-twin-triggers .{0}", className); - AddStartupCSS(className, StyleUtil.GetBackgroundStyle(selector, ResolveUrl(Trigger1IconUrl))); - - OB.AddProperty("trigger1Cls", className); - } - - - if (Trigger2Icon != TriggerIcon.None) - { - OB.AddProperty("trigger2Cls", TriggerIconHelper.GetName(Trigger2Icon)); - } - else if (!String.IsNullOrEmpty(Trigger2IconUrl)) - { - string className = String.Format("fineui_{0}_twintriggerbox_icon2", XID); - string selector = String.Format(".x-form-field-wrap .x-form-twin-triggers .{0}", className); - AddStartupCSS(className, StyleUtil.GetBackgroundStyle(selector, ResolveUrl(Trigger2IconUrl))); - - OB.AddProperty("trigger2Cls", className); - } - - - #endregion - - #region Trigger1Click/Trigger1Click - - if (Enabled) - { - string clientTrigger1ClickScript = OnClientTrigger1Click; - if (!String.IsNullOrEmpty(clientTrigger1ClickScript) && !clientTrigger1ClickScript.EndsWith(";")) - { - clientTrigger1ClickScript += ";"; - } - string trigger1PostbackScript = String.Empty; - if (EnableTrigger1PostBack) - { - trigger1PostbackScript = GetPostBackEventReference("Trigger$1"); - } - //string trigger1ClickScript = String.Format("function(){{{0}}}", clientTrigger1ClickScript + trigger1PostbackScript); - //// createDelegate 用来为一个Function创建一个Scope - //OB.AddProperty(OptionName.OnTrigger1Click, String.Format("({0}).createDelegate(box)", trigger1ClickScript), true); - OB.AddProperty("onTrigger1Click", JsHelper.GetFunction(clientTrigger1ClickScript + trigger1PostbackScript), true); - - - string clientTrigger2ClickScript = OnClientTrigger2Click; - if (!String.IsNullOrEmpty(clientTrigger2ClickScript) && !clientTrigger2ClickScript.EndsWith(";")) - { - clientTrigger2ClickScript += ";"; - } - string trigger2PostbackScript = String.Empty; - if (EnableTrigger2PostBack) - { - trigger2PostbackScript = GetPostBackEventReference("Trigger$2"); - } - //string trigger2ClickScript = String.Format("function(){{{0}}}", clientTrigger2ClickScript + Trigger2PostbackScript); - //// createDelegate 用来为一个Function创建一个Scope - //OB.AddProperty(OptionName.OnTrigger2Click, String.Format("({0}).createDelegate(box)", trigger2ClickScript), true); - OB.AddProperty("onTrigger2Click", JsHelper.GetFunction(clientTrigger2ClickScript + trigger2PostbackScript), true); - - } - - #endregion - - #region Specialkey - - if (Enabled) - { - // 首先启用enableKeyEvents - //OB.AddProperty("enableKeyEvents", true); - OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.onTrigger2Click();e.stopEvent();}}}}", XID), true); - } - - #endregion - - // X('SimpleForm1_ttbxMyBox2').triggerEl.item(0).show(); - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Trigger',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - #endregion - - #region IPostBackEventHandler Members - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public override void RaisePostBackEvent(string eventArgument) - { - base.RaisePostBackEvent(eventArgument); - - if (eventArgument == "Trigger$1") - { - OnTrigger1Click(EventArgs.Empty); - } - else if (eventArgument == "Trigger$2") - { - OnTrigger2Click(EventArgs.Empty); - } - } - - #endregion - - #region Trigger1Click - - private static readonly object _trigger1HandlerKey = new object(); - - /// <summary> - /// 第一个触发按钮点击事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("第一个触发按钮点击事件")] - public event EventHandler Trigger1Click - { - add - { - Events.AddHandler(_trigger1HandlerKey, value); - } - remove - { - Events.RemoveHandler(_trigger1HandlerKey, value); - } - } - - /// <summary> - /// 触发第一个触发按钮点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnTrigger1Click(EventArgs e) - { - EventHandler handler = Events[_trigger1HandlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region Trigger2Click - - private static readonly object _Trigger2HandlerKey = new object(); - - /// <summary> - /// 第二个触发按钮点击事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("第二个触发按钮点击事件")] - public event EventHandler Trigger2Click - { - add - { - Events.AddHandler(_Trigger2HandlerKey, value); - } - remove - { - Events.RemoveHandler(_Trigger2HandlerKey, value); - } - } - - /// <summary> - /// 触发第二个触发按钮点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnTrigger2Click(EventArgs e) - { - EventHandler handler = Events[_Trigger2HandlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TwinTriggerBox.cs + * CreatedOn: 2008-06-27 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 扩展文本框控件 + /// </summary> + [Designer("FineUI.Design.TwinTriggerBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [DefaultEvent("TriggerClick")] + [ToolboxData("<{0}:TwinTriggerBox Label=\"Label\" Trigger1Icon=\"Clear\" Trigger2Icon=\"Search\" runat=\"server\"></{0}:TwinTriggerBox>")] + [ToolboxBitmap(typeof(TwinTriggerBox), "toolbox.TwinTriggerBox.bmp")] + [Description("扩展文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TwinTriggerBox : RealTextField, IPostBackEventHandler, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TwinTriggerBox() + { + AddServerAjaxProperties("ShowTrigger1", "ShowTrigger2"); + AddClientAjaxProperties(); + } + + #endregion + + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + + /// <summary> + /// 是否显示触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否显示触发器")] + public bool ShowTrigger + { + get + { + object obj = FState["ShowTrigger"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger"] = value; + } + } + + /// <summary> + /// [AJAX属性]是否显示第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否显示第一个触发器")] + public bool ShowTrigger1 + { + get + { + object obj = FState["ShowTrigger1"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger1"] = value; + } + } + + + /// <summary> + /// [AJAX属性]是否显示第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否显示第二个触发器")] + public bool ShowTrigger2 + { + get + { + object obj = FState["ShowTrigger2"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger2"] = value; + } + } + + + /// <summary> + /// 是否可以回发第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发第一个触发器")] + public bool EnableTrigger1PostBack + { + get + { + object obj = FState["EnableTrigger1PostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableTrigger1PostBack"] = value; + } + } + + + /// <summary> + /// 是否可以回发第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnableTrigger2PostBack + { + get + { + object obj = FState["EnableTrigger2PostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableTrigger2PostBack"] = value; + } + } + + + /// <summary> + /// 第一个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("第一个触发器图片")] + public virtual string Trigger1IconUrl + { + get + { + object obj = FState["Trigger1IconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Trigger1IconUrl"] = value; + } + } + + /// <summary> + /// 第二个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("第二个触发器图片")] + public virtual string Trigger2IconUrl + { + get + { + object obj = FState["Trigger2IconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Trigger2IconUrl"] = value; + } + } + + + + /// <summary> + /// 第一个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TriggerIcon.None)] + [Description("第一个触发器图片")] + public virtual TriggerIcon Trigger1Icon + { + get + { + object obj = FState["Trigger1Icon"]; + return obj == null ? TriggerIcon.None : (TriggerIcon)obj; + } + set + { + FState["Trigger1Icon"] = value; + } + } + + /// <summary> + /// 第二个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TriggerIcon.None)] + [Description("第二个触发器图片")] + public virtual TriggerIcon Trigger2Icon + { + get + { + object obj = FState["Trigger2Icon"]; + return obj == null ? TriggerIcon.None : (TriggerIcon)obj; + } + set + { + FState["Trigger2Icon"] = value; + } + } + + /// <summary> + /// 点击第一个触发器时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击第一个触发器时需要执行的客户端脚本")] + public string OnClientTrigger1Click + { + get + { + object obj = FState["OnClientTrigger1Click"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientTrigger1Click"] = value; + } + } + + /// <summary> + /// 点击第二个触发器时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击第二个触发器时需要执行的客户端脚本")] + public string OnClientTrigger2Click + { + get + { + object obj = FState["OnClientTrigger2Click"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientTrigger2Click"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ShowTrigger1")) + { + sb.AppendFormat("{0}.triggerCell.item(0).setDisplayed({1});", XID, ShowTrigger1 ? "true" : "false"); + } + + if (PropertyModified("ShowTrigger2")) + { + sb.AppendFormat("{0}.triggerCell.item(1).setDisplayed({1});", XID, ShowTrigger2 ? "true" : "false"); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + #region options + + if (!ShowTrigger) + { + OB.AddProperty("hideTrigger", true); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + string renderScript = String.Empty; + if (!ShowTrigger1) + { + renderScript += String.Format("this.triggerCell.item(0).setDisplayed(false);"); + } + if (!ShowTrigger2) + { + renderScript += String.Format("this.triggerCell.item(1).setDisplayed(false);"); + } + + if (!String.IsNullOrEmpty(renderScript)) + { + //renderScript += "this.updateLayout();"; + //OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction(renderScript), true); + AddListener("afterrender", renderScript); + } + + + #endregion + + #region Trigger1Icon/Trigger2Icon + + if (Trigger1Icon != TriggerIcon.None) + { + OB.AddProperty("trigger1Cls", TriggerIconHelper.GetName(Trigger1Icon)); + } + else if (!String.IsNullOrEmpty(Trigger1IconUrl)) + { + string className = String.Format("f_{0}_twintriggerbox_icon1", XID); + string selector = String.Format(".{0}", className); + AddStartupCSS(className, StyleUtil.GetBackgroundStyle(selector, ResolveUrl(Trigger1IconUrl))); + + OB.AddProperty("trigger1Cls", className); + } + + + if (Trigger2Icon != TriggerIcon.None) + { + OB.AddProperty("trigger2Cls", TriggerIconHelper.GetName(Trigger2Icon)); + } + else if (!String.IsNullOrEmpty(Trigger2IconUrl)) + { + string className = String.Format("f_{0}_twintriggerbox_icon2", XID); + string selector = String.Format(".{0}", className); + AddStartupCSS(className, StyleUtil.GetBackgroundStyle(selector, ResolveUrl(Trigger2IconUrl))); + + OB.AddProperty("trigger2Cls", className); + } + + + #endregion + + #region Trigger1Click/Trigger1Click + + //if (Enabled) + //{ + string clientTrigger1ClickScript = OnClientTrigger1Click; + if (!String.IsNullOrEmpty(clientTrigger1ClickScript) && !clientTrigger1ClickScript.EndsWith(";")) + { + clientTrigger1ClickScript += ";"; + } + string trigger1PostbackScript = String.Empty; + if (EnableTrigger1PostBack) + { + trigger1PostbackScript = GetPostBackEventReference("Trigger$1"); + } + //string trigger1ClickScript = String.Format("function(){{{0}}}", clientTrigger1ClickScript + trigger1PostbackScript); + //// createDelegate 用来为一个Function创建一个Scope + //OB.AddProperty(OptionName.OnTrigger1Click, String.Format("({0}).createDelegate(box)", trigger1ClickScript), true); + OB.AddProperty("onTrigger1Click", JsHelper.GetFunction(clientTrigger1ClickScript + trigger1PostbackScript), true); + + + string clientTrigger2ClickScript = OnClientTrigger2Click; + if (!String.IsNullOrEmpty(clientTrigger2ClickScript) && !clientTrigger2ClickScript.EndsWith(";")) + { + clientTrigger2ClickScript += ";"; + } + string trigger2PostbackScript = String.Empty; + if (EnableTrigger2PostBack) + { + trigger2PostbackScript = GetPostBackEventReference("Trigger$2"); + } + //string trigger2ClickScript = String.Format("function(){{{0}}}", clientTrigger2ClickScript + Trigger2PostbackScript); + //// createDelegate 用来为一个Function创建一个Scope + //OB.AddProperty(OptionName.OnTrigger2Click, String.Format("({0}).createDelegate(box)", trigger2ClickScript), true); + OB.AddProperty("onTrigger2Click", JsHelper.GetFunction(clientTrigger2ClickScript + trigger2PostbackScript), true); + + //} + + #endregion + + #region Specialkey + + //if (Enabled) + //{ + // 首先启用enableKeyEvents + //OB.AddProperty("enableKeyEvents", true); + //OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.onTrigger2Click();e.stopEvent();}}}}", XID), true); + AddListener("specialkey", String.Format("if(e.getKey()==e.ENTER){{{0}.onTrigger2Click();e.stopEvent();}}", XID), "field", "e"); + //} + + #endregion + + #region EnableEdit + // extjsv4.x 的enableedit=false,不能点击输入框触发 + if (!EnableEdit) + { + //OB.Listeners.AddProperty("render", "function(field){field.mon(field.inputEl,'click',field.onTrigger2Click,field);}", true); + AddListener("render", "field.mon(field.inputEl,'click',field.onTrigger2Click,field);", "field"); + + } + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.field.Trigger',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region IPostBackEventHandler Members + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument == "Trigger$1") + { + OnTrigger1Click(EventArgs.Empty); + } + else if (eventArgument == "Trigger$2") + { + OnTrigger2Click(EventArgs.Empty); + } + } + + #endregion + + #region Trigger1Click + + private static readonly object _trigger1HandlerKey = new object(); + + /// <summary> + /// 第一个触发按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("第一个触发按钮点击事件")] + public event EventHandler Trigger1Click + { + add + { + Events.AddHandler(_trigger1HandlerKey, value); + } + remove + { + Events.RemoveHandler(_trigger1HandlerKey, value); + } + } + + /// <summary> + /// 触发第一个触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTrigger1Click(EventArgs e) + { + EventHandler handler = Events[_trigger1HandlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region Trigger2Click + + private static readonly object _Trigger2HandlerKey = new object(); + + /// <summary> + /// 第二个触发按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("第二个触发按钮点击事件")] + public event EventHandler Trigger2Click + { + add + { + Events.AddHandler(_Trigger2HandlerKey, value); + } + remove + { + Events.RemoveHandler(_Trigger2HandlerKey, value); + } + } + + /// <summary> + /// 触发第二个触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTrigger2Click(EventArgs e) + { + EventHandler handler = Events[_Trigger2HandlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs index 86f9aae..abe095e 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs @@ -1,418 +1,567 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Accordion.cs - * CreatedOn: 2008-06-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 手风琴控件 - /// </summary> - [Designer("FineUI.Design.AccordionDesigner, FineUI.Design")] - [ToolboxData("<{0}:Accordion Title=\"Accordion\" ShowCollapseTool=\"false\" ShowBorder=\"false\" ShowHeader=\"false\" runat=\"server\"><Panes><{0}:AccordionPane runat=\"server\" Title=\"AccordionPane1\" BodyPadding=\"5px\" ShowBorder=\"false\"></{0}:AccordionPane><{0}:AccordionPane runat=\"server\" Title=\"AccordionPane2\" BodyPadding=\"5px\" ShowBorder=\"false\"></{0}:AccordionPane></Panes></{0}:Accordion>")] - [ToolboxBitmap(typeof(Accordion), "toolbox.Accordion.bmp")] - [Description("手风琴控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Accordion : CollapsablePanel - { - #region Constructor - - /// <summary> - /// - /// </summary> - public Accordion() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override ControlBaseCollection Items - { - get - { - return base.Items; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableIFrame - { - get - { - return base.EnableIFrame; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameUrl - { - get - { - return base.IFrameUrl; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameName - { - get - { - return base.IFrameName; - } - } - - /// <summary> - /// 布局类型 - /// </summary> - [ReadOnly(true)] - [Category(CategoryName.LAYOUT)] - [DefaultValue(Layout.Accordion)] - [Description("布局类型")] - public override Layout Layout - { - get - { - return Layout.Accordion; - } - } - - - #endregion - - #region Properties - - /// <summary> - /// 是否启用折叠按钮 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否启用折叠按钮")] - public bool ShowCollapseTool - { - get - { - object obj = XState["ShowCollapseTool"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ShowCollapseTool"] = value; - } - } - - - /// <summary> - /// 是否启用激活在最上面 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否启用激活在最上面")] - public bool EnableActiveOnTop - { - get - { - object obj = XState["EnableActiveOnTop"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableActiveOnTop"] = value; - } - } - - /// <summary> - /// 是否启用填充整个区域 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否启用填充整个区域")] - public bool EnableFill - { - get - { - object obj = XState["EnableFill"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableFill"] = value; - } - } - - - //private bool EnableAnimate_Default = false; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否启用动画")] - //public bool EnableAnimate - //{ - // get - // { - // object obj = BoxState["EnableAnimate"]; - // return obj == null ? EnableAnimate_Default : (bool)obj; - // } - // set - // { - // BoxState["EnableAnimate"] = value; - // } - //} - - - //private bool PersistActiveIndexInCookie_Default = false; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("将ActiveIndex保持在Cookie中,以便在页面跳转过程中位置状态")] - //public bool PersistActiveIndexInCookie - //{ - // get - // { - // object obj = BoxState["PersistActiveIndexInCookie"]; - // return obj == null ? PersistActiveIndexInCookie_Default : (bool)obj; - // } - // set - // { - // BoxState["PersistActiveIndexInCookie"] = value; - // } - //} - - - #endregion - - #region ActiveIndex - - private int _activeIndex = -1; - - /// <summary> - /// 激活面板的索引 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(0)] - [Description("激活面板的索引")] - public int ActiveIndex - { - get - { - int activeIndex = 0; - for (int i = 0, count = Panes.Count; i < count; i++) - { - if (!Panes[i].Collapsed) - { - activeIndex = i; - break; - } - } - return activeIndex; - } - set - { - // We cann't set children AccordionPane's Collapsed property now, because they may not been loaded yet. - _activeIndex = value; - } - } - - - #endregion - - #region Panes - - private AccordionPaneCollection _panes; - - /// <summary> - /// 手风琴面板集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - public AccordionPaneCollection Panes - { - get - { - if (_panes == null) - { - _panes = new AccordionPaneCollection(this); - } - return _panes; - } - } - - #endregion - - #region old code - - //protected override void CreateChildControls() - //{ - // base.CreateChildControls(); - - - // //foreach (AccordionPanel row in Items) - // //{ - // // row.RenderWrapperDiv = false; - // // Controls.Add(row); - // //} - //} - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - #region Reset ActiveIndex - - // ActiveIndex has been changed, reset Panes's Collapsed property. - if (_activeIndex != -1) - { - foreach (AccordionPane pane in Panes) - { - pane.Collapsed = true; - } - - Panes[_activeIndex].Collapsed = false; - } - - #endregion - - #region Panes - - if (Panes.Count > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (AccordionPane item in Panes) - { - if (item.Visible) - { - ab.AddProperty(String.Format("{0}", item.XID), true); - } - } - OB.AddProperty("items", ab.ToString(), true); - } - - #endregion - - #region LayoutConfig - - JsObjectBuilder configBuilder = new JsObjectBuilder(); - configBuilder.AddProperty("animate", false); - configBuilder.AddProperty("activeOnTop", EnableActiveOnTop); - configBuilder.AddProperty("fill", EnableFill); - configBuilder.AddProperty("hideCollapseTool", !ShowCollapseTool); - //configBuilder.AddProperty(OptionName.TitleCollapse, true); - //if (EnableLargeHeader) - //{ - // // 删除对CtCls的定义 - // OB.RemoveProperty(OptionName.CtCls); - // configBuilder.AddProperty(OptionName.ExtraCls, "box-panel-big-header"); - //} - - OB.AddProperty("layoutConfig", configBuilder); - - #endregion - - - string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - #region override IPostBackDataHandler Members - - //public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - //{ - // base.LoadPostData(postDataKey, postCollection); - - // string postValue = postCollection[ActiveIndexHiddenFieldID]; - // int postActiveIndex = Convert.ToInt32(postValue); - // if (ActiveIndex != postActiveIndex) - // { - // ActiveIndex = postActiveIndex; - // } - - // return false; - //} - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Accordion.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 手风琴控件 + /// </summary> + [Designer("FineUI.Design.AccordionDesigner, FineUI.Design")] + [ToolboxData("<{0}:Accordion Title=\"Accordion\" ShowCollapseTool=\"false\" ShowBorder=\"false\" ShowHeader=\"false\" runat=\"server\"><Panes><{0}:AccordionPane runat=\"server\" Title=\"AccordionPane1\" BodyPadding=\"5px\" ShowBorder=\"false\"></{0}:AccordionPane><{0}:AccordionPane runat=\"server\" Title=\"AccordionPane2\" BodyPadding=\"5px\" ShowBorder=\"false\"></{0}:AccordionPane></Panes></{0}:Accordion>")] + [ToolboxBitmap(typeof(Accordion), "toolbox.Accordion.bmp")] + [Description("手风琴控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Accordion : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// + /// </summary> + public Accordion() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("ActivePaneIndex"); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Accordion)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Accordion; + } + } + + + #endregion + + #region Properties + + /// <summary> + /// 是否启用折叠按钮 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用折叠按钮")] + public bool ShowCollapseTool + { + get + { + object obj = FState["ShowCollapseTool"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowCollapseTool"] = value; + } + } + + + /// <summary> + /// 是否启用激活在最上面 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用激活在最上面")] + public bool EnableActiveOnTop + { + get + { + object obj = FState["EnableActiveOnTop"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableActiveOnTop"] = value; + } + } + + /// <summary> + /// 是否启用填充整个区域 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用填充整个区域")] + public bool EnableFill + { + get + { + object obj = FState["EnableFill"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFill"] = value; + } + } + + + //private bool EnableAnimate_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用动画")] + //public bool EnableAnimate + //{ + // get + // { + // object obj = BoxState["EnableAnimate"]; + // return obj == null ? EnableAnimate_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableAnimate"] = value; + // } + //} + + + //private bool PersistActiveIndexInCookie_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("将ActiveIndex保持在Cookie中,以便在页面跳转过程中位置状态")] + //public bool PersistActiveIndexInCookie + //{ + // get + // { + // object obj = BoxState["PersistActiveIndexInCookie"]; + // return obj == null ? PersistActiveIndexInCookie_Default : (bool)obj; + // } + // set + // { + // BoxState["PersistActiveIndexInCookie"] = value; + // } + //} + + + #endregion + + #region ActivePaneIndex + + /// <summary> + /// 切换面板时是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("切换面板时是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + /// <summary> + /// [AJAX属性]激活面板的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("[AJAX属性]激活面板的索引")] + public int ActivePaneIndex + { + get + { + object obj = FState["ActivePaneIndex"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ActivePaneIndex"] = value; + } + } + + /// <summary> + /// 当前激活的面板 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public AccordionPane ActivePane + { + get + { + if (ActivePaneIndex >= 0 && ActivePaneIndex < Panes.Count) + { + return Panes[ActivePaneIndex]; + } + return null; + } + } + + /* + + private int _activePaneIndex = -1; + + /// <summary> + /// 激活面板的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("激活面板的索引")] + public int ActivePaneIndex + { + get + { + int activeIndex = 0; + for (int i = 0, count = Panes.Count; i < count; i++) + { + if (!Panes[i].Collapsed) + { + activeIndex = i; + break; + } + } + return activeIndex; + } + set + { + // We cann't set children AccordionPane's Collapsed property now, because they may not been loaded yet. + _activePaneIndex = value; + } + } + */ + + + #endregion + + #region Panes + + private AccordionPaneCollection _panes; + + /// <summary> + /// 手风琴面板集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + public AccordionPaneCollection Panes + { + get + { + if (_panes == null) + { + _panes = new AccordionPaneCollection(this); + } + return _panes; + } + } + + #endregion + + #region old code + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + + // //foreach (AccordionPanel row in Items) + // //{ + // // row.RenderWrapperDiv = false; + // // Controls.Add(row); + // //} + //} + + #endregion + + #region ActivePaneIndexHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ActivePaneIndexHiddenFieldID + { + get + { + return String.Format("{0}_ActivePaneIndex", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ActivePaneIndex")) + { + if (ActivePane != null) + { + ActivePane.AddAjaxScript(String.Format("{0}.expand();", ActivePane.XID)); + } + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + #region Reset ActiveIndex + + // 重置面板的 Collapsed 属性 + if (ActivePane != null) + { + foreach (AccordionPane pane in Panes) + { + pane.Collapsed = true; + } + + ActivePane.Collapsed = false; + } + + #endregion + + #region Panes + + if (Panes.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (AccordionPane item in Panes) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + OB.AddProperty("items", ab.ToString(), true); + } + + #endregion + + #region LayoutConfig + + OB.RemoveProperty("layout"); + + JsObjectBuilder configBuilder = new JsObjectBuilder(); + configBuilder.AddProperty("animate", false); + configBuilder.AddProperty("activeOnTop", EnableActiveOnTop); + configBuilder.AddProperty("fill", EnableFill); + configBuilder.AddProperty("hideCollapseTool", !ShowCollapseTool); + configBuilder.AddProperty("type", "accordion"); + + //configBuilder.AddProperty("multi", true); + + OB.AddProperty("layout", configBuilder); + + #endregion + + + string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + string postValue = postCollection[ActivePaneIndexHiddenFieldID]; + + int postActivePaneIndex = Convert.ToInt32(postValue); + if (ActivePaneIndex != postActivePaneIndex) + { + ActivePaneIndex = postActivePaneIndex; + FState.BackupPostDataProperty("ActivePaneIndex"); + } + + return false; + } + + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument == "PaneIndexChanged") + { + OnPaneIndexChanged(EventArgs.Empty); + } + } + + #endregion + + #region OnPaneIndexChanged + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 面板改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("面板改变事件")] + public event EventHandler PaneIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发面板改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPaneIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs index cbefc36..62fe9f9 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs @@ -1,327 +1,336 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: AccordionPanel.cs - * CreatedOn: 2008-06-16 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 手风琴面板控件 - /// </summary> - [Designer("FineUI.Design.AccordionPaneDesigner, FineUI.Design")] - [ToolboxData("<{0}:AccordionPane Title=\"AccordionPane\" runat=\"server\"></{0}:AccordionPane>")] - [ToolboxBitmap(typeof(AccordionPane), "toolbox.AccordionPane.bmp")] - [Description("手风琴面板控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class AccordionPane : CollapsablePanel - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public AccordionPane() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - } - - #endregion - - #region static readonly - - //private static readonly string ACCORDION_HEADER_SELECT = "box-accordion-hd-select"; - //private static readonly string ACCORDION_HEADER_HOVER = "box-accordion-hd-hover"; - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableCollapse - { - get - { - return true; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool ShowHeader - { - get - { - return true; - } - } - - #endregion - - #region Properties - - ///// <summary> - ///// [AJAX属性]是否折叠 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("[AJAX属性]是否折叠")] - //public override bool Collapsed - //{ - // get - // { - // object obj = XState["Collapsed"]; - // return obj == null ? true : (bool)obj; - // } - // set - // { - // XState["Collapsed"] = value; - // } - //} - - - /// <summary> - /// 鼠标移到标题栏是否高亮显示 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("鼠标移到标题栏是否高亮显示")] - public bool EnableHightlight - { - get - { - object obj = XState["EnableHightlight"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableHightlight"] = value; - } - } - - - #endregion - - #region Links - - //private AccordionLinkCollection _links; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerProperty)] - //public virtual AccordionLinkCollection Links - //{ - // get - // { - // if (_links == null) - // { - // _links = new AccordionLinkCollection(this); - // } - // return _links; - // } - //} - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - #region Check Parent - Accordion parentControl = Parent as Accordion; - if (parentControl == null) - { - throw new Exception("AccordionPane must inside the control Accordion!"); - } - #endregion - - - //#region AutoHeight - - - //// 如果要充满整个Accordion,则设置每个AccordionPanel的AutoHeight=false - //if (parentControl.EnableFill) - //{ - // OB.AddProperty("autoHeight", false); - //} - - - //#endregion - - string renderScript = String.Empty; - - #region oldcode - - - //// 如果启用高亮显示选中的,则在每个AccordionPanel的折叠展开时都要改变高亮选中的状态 - //if (EnableLargeHeader && EnableHightlight) - //{ - // renderScript += String.Format("{0}.header.addClassOnOver('{1}');", XID, ACCORDION_HEADER_HOVER); - - // // 如果这个AccordionPanel需要高亮显示 - // if (parentControl.ActiveIndex >= 0 && parentControl.ActiveIndex < parentControl.Panes.Count) - // { - // if (parentControl.Panes[parentControl.ActiveIndex] == this) - // { - // //OB.AddProperty(OptionName.Cls, ACCORDION_BIG_HEADER_SELECT_CLASS); - // renderScript += String.Format("{0}.header.addClass('{1}');", XID, ACCORDION_HEADER_SELECT); - // } - // } - - // OB.Listeners.RemoveProperty("collapse"); - // OB.Listeners.RemoveProperty("expand"); - // OB.Listeners.AddProperty("collapse", String.Format("function(panel){{Ext.get('{0}').dom.value=true;X.{1}.header.removeClass('{2}');}}", CollapsedHiddenFieldID, XID, ACCORDION_HEADER_SELECT), true); - // OB.Listeners.AddProperty("expand", String.Format("function(panel){{Ext.get('{0}').dom.value=false;X.{1}.header.addClass('{2}');}}", CollapsedHiddenFieldID, XID, ACCORDION_HEADER_SELECT), true); - - //} - - - #endregion - - #region Links - - //if (Links.Count > 0) - //{ - // OB.RemoveProperty("items"); - - // StringBuilder sb = new StringBuilder(); - - // sb.Append("<ul class=\"box-accrodion-link-ul\">"); - // foreach (AccordionLink link in Links) - // { - // #region li - - // HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); - - // nb.SetProperty("id", link.ClientID); - // if (!String.IsNullOrEmpty(link.OnClientClick)) - // { - // nb.SetProperty("onclick", String.Format("javascript:{0}", link.OnClientClick)); - // } - // if (!String.IsNullOrEmpty(link.NavigateUrl)) - // { - // nb.SetProperty("href", ResolveUrl(link.NavigateUrl)); - // if (!String.IsNullOrEmpty(link.Target)) - // { - // nb.SetProperty("target", link.Target); - // } - // } - // nb.SetProperty("style", "display:block;cursor:pointer;"); - - // string content = String.Empty; - // if (!String.IsNullOrEmpty(link.IconUrl)) - // { - // content += String.Format("<img src=\"{0}\" align=\"bottom\" alt=\"\" />", ResolveUrl(link.IconUrl)); - // } - // content += " " + link.Text; - // nb.InnerProperty = content; - - // #endregion - - // sb.AppendFormat("<li {1}>{0}</li>", nb.ToString(), link.Selected ? "class=\"box-accrodion-link-select\"" : ""); - // } - // sb.Append("</ul>"); - - // OB.AddProperty("html", sb.ToString()); - - - - - - // // 注册所有链接的脚本 - // // 所有的li,鼠标移动上去是一种样式,鼠标移开又是另外一种样式 - // string hoverScript = "ele = Ext.get(ele);"; - // hoverScript += "ele.on('mouseover',function(){Ext.get(this.findParentNode('li')).addClass('box-accrodion-link-hover');},ele);"; - // hoverScript += "ele.on('mouseout',function(){Ext.get(this.findParentNode('li')).removeClass('box-accrodion-link-hover');},ele);"; - - // //string clickScript = String.Empty; - // //clickScript += String.Format("Ext.each(X.{0}.el.query('ul.box-accrodion-link-ul li'),function(ele){{Ext.get(ele).removeClass('box-accrodion-link-select');}});", parentControl.ClientJavascriptID); - // //clickScript += "Ext.get('{0}').addClass('box-accrodion-link-select');"; - - // string clickScript = String.Format("function(){{X.{0}.box_active(ele.id);}}", parentControl.XID); - // hoverScript += "ele.on('click'," + clickScript + ");"; - - // renderScript += String.Format("Ext.each(X.{0}.el.query('ul.box-accrodion-link-ul li a'),function(ele){{{1}}});", XID, hoverScript); - //} - - #endregion - - if (!String.IsNullOrEmpty(renderScript)) - { - renderScript = JsHelper.GetDeferScript(renderScript, 100); - OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); - } - - string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: AccordionPanel.cs + * CreatedOn: 2008-06-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 手风琴面板控件 + /// </summary> + [Designer("FineUI.Design.AccordionPaneDesigner, FineUI.Design")] + [ToolboxData("<{0}:AccordionPane Title=\"AccordionPane\" runat=\"server\"></{0}:AccordionPane>")] + [ToolboxBitmap(typeof(AccordionPane), "toolbox.AccordionPane.bmp")] + [Description("手风琴面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class AccordionPane : CollapsablePanel + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public AccordionPane() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region static readonly + + //private static readonly string ACCORDION_HEADER_SELECT = "f-accordion-hd-select"; + //private static readonly string ACCORDION_HEADER_HOVER = "f-accordion-hd-hover"; + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableCollapse + { + get + { + return true; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return true; + } + } + + #endregion + + #region Properties + + ///// <summary> + ///// [AJAX属性]是否折叠 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("[AJAX属性]是否折叠")] + //public override bool Collapsed + //{ + // get + // { + // object obj = FState["Collapsed"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["Collapsed"] = value; + // } + //} + + + /// <summary> + /// 鼠标移到标题栏是否高亮显示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("鼠标移到标题栏是否高亮显示")] + public bool EnableHightlight + { + get + { + object obj = FState["EnableHightlight"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableHightlight"] = value; + } + } + + + #endregion + + #region Links + + //private AccordionLinkCollection _links; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //public virtual AccordionLinkCollection Links + //{ + // get + // { + // if (_links == null) + // { + // _links = new AccordionLinkCollection(this); + // } + // return _links; + // } + //} + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + #region Check Parent + Accordion parentControl = Parent as Accordion; + if (parentControl == null) + { + throw new Exception("AccordionPane must inside the control Accordion!"); + } + + + if (parentControl.AutoPostBack) + { + //OB.Listeners.AddProperty("expand", JsHelper.GetFunction(parentControl.GetPostBackEventReference("PaneIndexChanged")), true); + AddListener("expand", parentControl.GetPostBackEventReference("PaneIndexChanged")); + } + + #endregion + + + //#region AutoHeight + + + //// 如果要充满整个Accordion,则设置每个AccordionPanel的AutoHeight=false + //if (parentControl.EnableFill) + //{ + // OB.AddProperty("autoHeight", false); + //} + + + //#endregion + + string renderScript = String.Empty; + + #region oldcode + + + //// 如果启用高亮显示选中的,则在每个AccordionPanel的折叠展开时都要改变高亮选中的状态 + //if (EnableLargeHeader && EnableHightlight) + //{ + // renderScript += String.Format("{0}.header.addClassOnOver('{1}');", XID, ACCORDION_HEADER_HOVER); + + // // 如果这个AccordionPanel需要高亮显示 + // if (parentControl.ActiveIndex >= 0 && parentControl.ActiveIndex < parentControl.Panes.Count) + // { + // if (parentControl.Panes[parentControl.ActiveIndex] == this) + // { + // //OB.AddProperty(OptionName.Cls, ACCORDION_BIG_HEADER_SELECT_CLASS); + // renderScript += String.Format("{0}.header.addClass('{1}');", XID, ACCORDION_HEADER_SELECT); + // } + // } + + // OB.Listeners.RemoveProperty("collapse"); + // OB.Listeners.RemoveProperty("expand"); + // OB.Listeners.AddProperty("collapse", String.Format("function(panel){{Ext.get('{0}').dom.value=true;X.{1}.header.removeClass('{2}');}}", CollapsedHiddenFieldID, XID, ACCORDION_HEADER_SELECT), true); + // OB.Listeners.AddProperty("expand", String.Format("function(panel){{Ext.get('{0}').dom.value=false;X.{1}.header.addClass('{2}');}}", CollapsedHiddenFieldID, XID, ACCORDION_HEADER_SELECT), true); + + //} + + + #endregion + + #region Links + + //if (Links.Count > 0) + //{ + // OB.RemoveProperty("items"); + + // StringBuilder sb = new StringBuilder(); + + // sb.Append("<ul class=\"f-accrodion-link-ul\">"); + // foreach (AccordionLink link in Links) + // { + // #region li + + // HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); + + // nb.SetProperty("id", link.ClientID); + // if (!String.IsNullOrEmpty(link.OnClientClick)) + // { + // nb.SetProperty("onclick", String.Format("javascript:{0}", link.OnClientClick)); + // } + // if (!String.IsNullOrEmpty(link.NavigateUrl)) + // { + // nb.SetProperty("href", ResolveUrl(link.NavigateUrl)); + // if (!String.IsNullOrEmpty(link.Target)) + // { + // nb.SetProperty("target", link.Target); + // } + // } + // nb.SetProperty("style", "display:block;cursor:pointer;"); + + // string content = String.Empty; + // if (!String.IsNullOrEmpty(link.IconUrl)) + // { + // content += String.Format("<img src=\"{0}\" align=\"bottom\" alt=\"\" />", ResolveUrl(link.IconUrl)); + // } + // content += " " + link.Text; + // nb.InnerProperty = content; + + // #endregion + + // sb.AppendFormat("<li {1}>{0}</li>", nb.ToString(), link.Selected ? "class=\"f-accrodion-link-select\"" : ""); + // } + // sb.Append("</ul>"); + + // OB.AddProperty("html", sb.ToString()); + + + + + + // // 注册所有链接的脚本 + // // 所有的li,鼠标移动上去是一种样式,鼠标移开又是另外一种样式 + // string hoverScript = "ele = Ext.get(ele);"; + // hoverScript += "ele.on('mouseover',function(){Ext.get(this.findParentNode('li')).addClass('box-accrodion-link-hover');},ele);"; + // hoverScript += "ele.on('mouseout',function(){Ext.get(this.findParentNode('li')).removeClass('box-accrodion-link-hover');},ele);"; + + // //string clickScript = String.Empty; + // //clickScript += String.Format("Ext.each(X.{0}.el.query('ul.box-accrodion-link-ul li'),function(ele){{Ext.get(ele).removeClass('box-accrodion-link-select');}});", parentControl.ClientJavascriptID); + // //clickScript += "Ext.get('{0}').addClass('box-accrodion-link-select');"; + + // string clickScript = String.Format("function(){{X.{0}.box_active(ele.id);}}", parentControl.XID); + // hoverScript += "ele.on('click'," + clickScript + ");"; + + // renderScript += String.Format("Ext.each(X.{0}.el.query('ul.box-accrodion-link-ul li a'),function(ele){{{1}}});", XID, hoverScript); + //} + + #endregion + + if (!String.IsNullOrEmpty(renderScript)) + { + renderScript = JsHelper.GetDeferScript(renderScript, 100); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); + AddListener("render", renderScript); + } + + string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs index 9c3fe47..cb1c097 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs @@ -1,70 +1,70 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: AccordionPanelCollection.cs - * CreatedOn: 2008-06-16 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; - -namespace FineUI -{ - /// <summary> - /// 手风琴面板控件集合 - /// </summary> - public class AccordionPaneCollection : BaseCollection<AccordionPane> - { - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="parent">父控件实例</param> - public AccordionPaneCollection(Accordion parent) - : base(parent) - { - - } - - /* - private Accordion _accordion; - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="accordion">手风琴实例</param> - public AccordionPaneCollection(Accordion accordion) - { - _accordion = accordion; - } - - - protected override void InsertItem(int index, AccordionPane item) - { - item.RenderWrapperNode = false; - _accordion.Controls.AddAt(index, item); - - base.InsertItem(index, item); - } - */ - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: AccordionPanelCollection.cs + * CreatedOn: 2008-06-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 手风琴面板控件集合 + /// </summary> + public class AccordionPaneCollection : BaseCollection<AccordionPane> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public AccordionPaneCollection(Accordion parent) + : base(parent) + { + + } + + /* + private Accordion _accordion; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="accordion">手风琴实例</param> + public AccordionPaneCollection(Accordion accordion) + { + _accordion = accordion; + } + + + protected override void InsertItem(int index, AccordionPane item) + { + item.RenderWrapperNode = false; + _accordion.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + */ + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs index afce6fe..45cd981 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs @@ -1,269 +1,269 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: ContentPanel.cs - * CreatedOn: 2008-05-30 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 容器面板控件 - /// </summary> - [Designer("FineUI.Design.ContentPanelDesigner, FineUI.Design")] - [ToolboxData("<{0}:ContentPanel Title=\"ContentPanel\" BodyPadding=\"5px\" ShowHeader=\"true\" ShowBorder=\"true\" runat=\"server\"></{0}:ContentPanel>")] - [ToolboxBitmap(typeof(ContentPanel), "toolbox.ContentPanel.bmp")] - [Description("容器面板控件")] - [ParseChildren(false)] - [PersistChildren(true)] - [ControlBuilder(typeof(ContentPanelBuilder))] - public class ContentPanel : CollapsablePanel - { - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableIFrame - { - get - { - return base.EnableIFrame; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameUrl - { - get - { - return base.IFrameUrl; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameName - { - get - { - return base.IFrameName; - } - } - - /// <summary> - /// 布局类型 - /// </summary> - [ReadOnly(true)] - [Category(CategoryName.LAYOUT)] - [DefaultValue(Layout.Container)] - [Description("布局类型")] - public override Layout Layout - { - get - { - return Layout.Container; - } - } - - - ///// <summary> - ///// 是否显示边框 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否显示边框")] - //public override bool ShowBorder - //{ - // get - // { - // object obj = BoxState["Border"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["Border"] = value; - // } - //} - - - ///// <summary> - ///// 是否显示标题栏 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否显示标题栏")] - //public override bool ShowHeader - //{ - // get - // { - // object obj = BoxState["ShowHeader"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["ShowHeader"] = value; - // } - //} - - #endregion - - #region internal RenderChildrenAsContent - - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("渲染子控件为容器内容")] - internal override bool RenderChildrenAsContent - { - get - { - return true; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - #endregion - - #region old code - - //#region Content - - //private HtmlGenericControl _contentControl; - ///// <summary> - ///// 创建的Content控件 - ///// </summary> - //protected HtmlGenericControl ContentControl - //{ - // get - // { - // if (_contentControl == null) - // { - // _contentControl = new HtmlGenericControl("div"); - // _contentControl.ID = "content"; - - // _content.InstantiateIn(_contentControl); - // } - - // return _contentControl; - // } - //} - - //private ITemplate _content; - - //[Category(CategoryName.OPTIONS)] - //[Description("面板内容")] - //[TemplateInstance(TemplateInstance.Single)] - //[Browsable(false)] - //[DefaultValue("")] - //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] - //public virtual ITemplate Content - //{ - // get - // { - // if (_content == null) - // { - // throw new Exception("必须设置 Content 属性。"); - // } - // return _content; - // } - // set - // { - // _content = value; - // } - //} - - //#endregion - - //#region CreateChildControls - - //protected override void CreateChildControls() - //{ - // base.CreateChildControls(); - - // // Content - // if (Content != null) - // { - // Controls.Add(ContentControl); - // } - //} - - //#endregion - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: ContentPanel.cs + * CreatedOn: 2008-05-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 容器面板控件 + /// </summary> + [Designer("FineUI.Design.ContentPanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:ContentPanel Title=\"ContentPanel\" BodyPadding=\"5px\" ShowHeader=\"true\" ShowBorder=\"true\" runat=\"server\"></{0}:ContentPanel>")] + [ToolboxBitmap(typeof(ContentPanel), "toolbox.ContentPanel.bmp")] + [Description("容器面板控件")] + [ParseChildren(false)] + [PersistChildren(true)] + [ControlBuilder(typeof(ContentPanelBuilder))] + public class ContentPanel : CollapsablePanel + { + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Container; + } + } + + + ///// <summary> + ///// 是否显示边框 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示边框")] + //public override bool ShowBorder + //{ + // get + // { + // object obj = BoxState["Border"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["Border"] = value; + // } + //} + + + ///// <summary> + ///// 是否显示标题栏 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示标题栏")] + //public override bool ShowHeader + //{ + // get + // { + // object obj = BoxState["ShowHeader"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["ShowHeader"] = value; + // } + //} + + #endregion + + #region internal RenderChildrenAsContent + + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("渲染子控件为容器内容")] + internal override bool RenderChildrenAsContent + { + get + { + return true; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region old code + + //#region Content + + //private HtmlGenericControl _contentControl; + ///// <summary> + ///// 创建的Content控件 + ///// </summary> + //protected HtmlGenericControl ContentControl + //{ + // get + // { + // if (_contentControl == null) + // { + // _contentControl = new HtmlGenericControl("div"); + // _contentControl.ID = "content"; + + // _content.InstantiateIn(_contentControl); + // } + + // return _contentControl; + // } + //} + + //private ITemplate _content; + + //[Category(CategoryName.OPTIONS)] + //[Description("面板内容")] + //[TemplateInstance(TemplateInstance.Single)] + //[Browsable(false)] + //[DefaultValue("")] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ITemplate Content + //{ + // get + // { + // if (_content == null) + // { + // throw new Exception("必须设置 Content 属性。"); + // } + // return _content; + // } + // set + // { + // _content = value; + // } + //} + + //#endregion + + //#region CreateChildControls + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + // // Content + // if (Content != null) + // { + // Controls.Add(ContentControl); + // } + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs index 6d3b4c5..3a4604c 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs @@ -1,597 +1,624 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Form.cs - * CreatedOn: 2008-04-22 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; -using System.ComponentModel.Design; - -namespace FineUI -{ - /// <summary> - /// 表单面板控件 - /// </summary> - [Designer("FineUI.Design.FormDesigner, FineUI.Design")] - [ToolboxData("<{0}:Form Title=\"Form\" BodyPadding=\"5px\" runat=\"server\"><Rows><{0}:FormRow runat=\"server\"></{0}:FormRow><{0}:FormRow runat=\"server\"></{0}:FormRow></Rows></{0}:Form>")] - [ToolboxBitmap(typeof(Form), "toolbox.Form.bmp")] - [Description("表单面板控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Form : FormBase - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Form() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override ControlBaseCollection Items - { - get - { - return base.Items; - } - } - - - - #endregion - - #region Properties - - - - #endregion - - #region Rows - - private FormRowCollection _rows; - - /// <summary> - /// 表单行控件集合 - /// </summary> - [Browsable(false)] - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual FormRowCollection Rows - { - get - { - if (_rows == null) - { - _rows = new FormRowCollection(this); - } - return _rows; - } - } - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("form"); - - #region Options - - - - #endregion - - #region ResolveRows - - // 包含行的列脚本 - string rowScriptStr = String.Empty; - // 行的集合 - string rowItemScriptStr = String.Empty; - - // 如果存在Rows集合 - if (Rows.Count > 0) - { - // rowScriptStr - // rowItemScriptStr: [X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row0,X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row2] - ResolveRows(ref rowScriptStr, ref rowItemScriptStr); - - // 添加Items - OB.RemoveProperty("items"); - OB.AddProperty("items", rowItemScriptStr, true); - } - - //rowScriptStr += "\r\n"; - - - #endregion - - // This bug has been fixed in extjs v3.4.0. - // Do layout when body size changed - I don't know why extjs do it automatically. - // Why panel.layout.layout? Because Form outside layout doesn't has this function, why? I don't know now. - //OB.Listeners.AddProperty("bodyresize", "function(panel){if(panel.layout.layout){panel.doLayout();}}", true); - - OB.Listeners.AddProperty("change", JsHelper.GetFunction("X.util.setPageStateChanged();"), true); - - - string formPanelScript = String.Format("var {0}=Ext.create('Ext.form.Panel',{1});", XID, OB.ToString()); - //AddStartupScript(this, rowScriptStr + formPanelScript); - - string jsContent = rowScriptStr + formPanelScript; - AddStartupScript(jsContent); - } - - /// <summary> - /// 处理列 - /// </summary> - /// <returns></returns> - private void ResolveRows(ref string rowScriptsStr, ref string rowIdsStr) - { - JsArrayBuilder rowIdsBuilder = new JsArrayBuilder(); - - // 上一行的列数 - int lastRowColumnCount = 1; - // 上一行的列数 - string lastRowColumnWidths = String.Empty; - // 是否已经开始多列 - bool isMultiColumnStarted = false; - // 多列的开始行的序号 - int multiColumnStartLineIndex = 0; - - for (int i = 0, rowCount = Rows.Count; i < rowCount; i++) - { - FormRow currentRow = Rows[i]; - int currentRowColumnCount = GetRowColumnCount(currentRow); - string currentRowColumnWidths = currentRow.ColumnWidths; - - if (currentRowColumnCount == 0) - { - // 如果当前行为空,则跳过此行 - continue; - } - else if (currentRowColumnCount == 1) - { - if (isMultiColumnStarted) - { - // 如果上一行是多列行,则添加本行之上的所有行 - rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, i - 1, lastRowColumnCount); - //rowScriptsStr += "\r\n"; - - // 开始重置记录本行为多列的开始 - isMultiColumnStarted = false; - multiColumnStartLineIndex = 0; - } - - // 如果当前行的列数为1,则直接添加Field元素 - //AddItemScript(ab, currentRow.Fields[0].ClientID); - ControlBase component = GetRowColumnControl(currentRow, 0); - if (component != null) - { - rowIdsBuilder.AddProperty(String.Format("{0}", component.XID), true); - } - } - else - { - // 如果本行是多列 - if (!isMultiColumnStarted) - { - // 如果上一行还是单列的话,则开始多列 - isMultiColumnStarted = true; - multiColumnStartLineIndex = i; - } - else - { - if (lastRowColumnCount == currentRowColumnCount && lastRowColumnWidths == currentRowColumnWidths) - { - // 如果上一行的列数和本行的列数相同(并且上一行每列的宽度和本行的每列宽度也一样),则继续下一行 - } - else - { - // 如果上一行的列数和本行的列数不相同,则添加本行之上的所有行 - rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, i - 1, lastRowColumnCount); - //rowScriptsStr += "\r\n"; - - // 开始重新记录本行为多列的开始 - isMultiColumnStarted = true; - multiColumnStartLineIndex = i; - } - } - } - - - lastRowColumnCount = currentRowColumnCount; - lastRowColumnWidths = currentRowColumnWidths; - } - - - // 还要判断一下(如果最后一行是两列的情况) - if (isMultiColumnStarted) - { - rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, Rows.Count - 1, lastRowColumnCount); - //rowScriptsStr += "\r\n"; - } - - rowIdsStr = rowIdsBuilder.ToString(); - } - - /// <summary> - /// 添加列 - /// </summary> - /// <param name="rowIdsBuilder">行ID集合</param> - /// <param name="startLineIndex">开始行的索引(包含)</param> - /// <param name="endLineIndex">结束行的索引(包含)</param> - /// <param name="columnCount">行的列数</param> - private string AddColumnScript(JsArrayBuilder rowIdsBuilder, int startLineIndex, int endLineIndex, int columnCount) - { - // 注意,注册脚本的控件应该是最后一个 Row - // 假如有从上之下这些控件: Row1(Field1,Field2), Row2(Field3,Field4),Row3(Field5) - // 则渲染时,JS脚本的执行顺序为:Field1,Field2,Row1,Field3,Field4,Row2,Field5,Row3 - // 所以,如果column Panel的脚本注册为控件 Row3,则能保证所有的子控件已经初始化 - // 需要注意的是:在此设置脚本内容到 Row3 控件 - // 现在已经不是这样的了!!!,Row不在是一个控件 - - #region examples - - - // { - // layout: 'column', - // border:false, - // items:[{ - // columnWidth: .5, - // layout: 'form', - // border:false, - // items:[{ - // xtype:'combo', - // store: nextStepStore, - // displayField:'text', - // valueField:'value', - // typeAhead: true, - // mode: 'local', - // triggerAction: 'all', - // value:'1', - // emptyText:'请选择下一步', - // selectOnFocus:true, - // allowBlank:false, - // fieldLabel: '下一步', - // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', - // name: 'nextStep', - // anchor:'95%' - // }] - // },{ - // columnWidth: .5, - // layout: 'form', - // border:false, - // items:[{ - // xtype:'combo', - // store: executePersonStore, - // displayField:'text', - // valueField:'value', - // typeAhead: true, - // mode: 'local', - // triggerAction: 'all', - // value:'1', - // emptyText:'请选择执行人', - // selectOnFocus:true, - // allowBlank:false, - // fieldLabel: '执行人', - // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', - // name: 'executePerson', - // anchor:'95%' - // }] - // }] - // } - - - #endregion - - - // 最后一行 - FormRow endLineRow = Rows[endLineIndex]; - string rowId = String.Format("{0}_row{1}", XID, endLineIndex); - - - - #region bodyStyleStr - - - //string bodyStyleStr = String.Empty; - //if (EnableBackgroundColor) - //{ - // bodyStyleStr = GlobalConfig.GetDefaultBackgroundColor(); - //} - - //if (!String.IsNullOrEmpty(bodyStyleStr)) - //{ - // bodyStyleStr = String.Format("background-color:{0};", bodyStyleStr); - //} - - #endregion - - - string defaultColumnWidthStr = (1.0 / columnCount).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); - string[] columnWidths = ResolveColumnWidths(columnCount, Rows[startLineIndex].ColumnWidths, defaultColumnWidthStr); - - // row_column - JsArrayBuilder rowColumnScriptsBuilder = new JsArrayBuilder(); - for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) - { - #region 计算每一列的值 - - // 循环每一列 - JsArrayBuilder fieldsAB = new JsArrayBuilder(); - for (int rowIndex = startLineIndex; rowIndex <= endLineIndex; rowIndex++) - { - FormRow currentRow = Rows[rowIndex]; - - if (columnIndex <= GetRowColumnCount(currentRow) - 1) - { - ControlBase component = GetRowColumnControl(currentRow, columnIndex); - if (component != null) - { - fieldsAB.AddProperty(String.Format("{0}", component.XID), true); - } - } - } - - // 当前列的创建JS - JsObjectBuilder columnOB = new JsObjectBuilder(); - string columnWidth = columnWidths[columnIndex]; - if (Convert.ToDouble(columnWidth) <= 1.0) - { - columnOB.AddProperty("columnWidth", columnWidths[columnIndex], true); - } - else - { - columnOB.AddProperty("width", columnWidths[columnIndex], true); - } - - columnOB.AddProperty("layout", "anchor"); - columnOB.AddProperty("border", false); - //columnOB.AddProperty("bodyStyle", bodyStyleStr); - //columnOB.AddProperty("labelWidth", LabelWidth.Value); - columnOB.AddProperty("id", rowId + "_column" + columnIndex.ToString()); - - // 有可能为空 - if (fieldsAB.Count > 0) - { - columnOB.AddProperty("items", fieldsAB.ToString(), true); - } - - - rowColumnScriptsBuilder.AddProperty(columnOB.ToString(), true); - - // 现在采取的是安全的ajax,不会出现下面的情况 - //// 所有Layout=form的地方必须用Ext.FormPanel,否则删除时不会把FieldLabek删除掉 - //rowColumnScriptsBuilder.AddProperty(String.Format("new Ext.FormPanel({0})", columnOB.ToString()), true); - - #endregion - } - - // 外面的JS(X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row0) - JsObjectBuilder rowBuilder = new JsObjectBuilder(); - rowBuilder.AddProperty("layout", "column"); - rowBuilder.AddProperty("border", false); - //rowBuilder.AddProperty("bodyStyle", bodyStyleStr); - - // 有可能为空 - if (rowColumnScriptsBuilder.Count > 0) - { - rowBuilder.AddProperty("items", rowColumnScriptsBuilder.ToString(), true); - } - - - // 把当前节点添加到结果集合中 - rowIdsBuilder.AddProperty(String.Format("{0}", rowId), true); - rowBuilder.AddProperty("id", rowId); - - // 注意要注册 最后 一个 Row的脚本 - return String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", rowId, rowBuilder.ToString()); - } - - /// <summary> - /// 添加Items变量 - /// </summary> - /// <param name="ab"></param> - /// <param name="id"></param> - /// <returns></returns> - private void AddItemScript(JsArrayBuilder ab, string id) - { - ab.AddProperty(String.Format("{0}", id), true); - } - - /// <summary> - /// 取得当前行的列数 - /// </summary> - /// <param name="row"></param> - /// <returns></returns> - private int GetRowColumnCount(FormRow row) - { - int fieldCount = 0; - - foreach (Control c in row.Controls) - { - if (c is ControlBase) - { - fieldCount++; - } - } - - #region old code - //if (row.ColumnCount == null) - //{ - // return fieldCount; - //} - //else - //{ - // if (row.ColumnCount.Value > fieldCount) - // { - // return row.ColumnCount.Value; - // } - // else - // { - // return fieldCount; - // } - //} - #endregion - - return fieldCount; - } - - /// <summary> - /// 取得当前行 columnIndex 列的控件 - /// </summary> - /// <param name="row"></param> - /// <param name="columnIndex"></param> - /// <returns></returns> - private ControlBase GetRowColumnControl(FormRow row, int columnIndex) - { - int index = 0; - foreach (Control c in row.Controls) - { - if (c is ControlBase) - { - if (columnIndex == index) - { - return c as ControlBase; - } - - index++; - } - } - - return null; - } - - private string[] ResolveColumnWidths(int columnCount, string columnWidths, string defaultColumnWidthStr) - { - string[] results = null; - if (!String.IsNullOrEmpty(columnWidths)) - { - string[] columnWidthArray = columnWidths.Split(' '); - if (columnWidthArray.Length == columnCount) - { - results = columnWidthArray; - } - } - - if (results == null) - { - results = new string[columnCount]; - for (int i = 0; i < columnCount; i++) - { - results[i] = defaultColumnWidthStr; - } - } - - return results; - } - - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - #endregion - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Form.cs + * CreatedOn: 2008-04-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// <summary> + /// 表单面板控件 + /// </summary> + [Designer("FineUI.Design.FormDesigner, FineUI.Design")] + [ToolboxData("<{0}:Form Title=\"Form\" BodyPadding=\"5px\" runat=\"server\"><Rows><{0}:FormRow runat=\"server\"></{0}:FormRow><{0}:FormRow runat=\"server\"></{0}:FormRow></Rows></{0}:Form>")] + [ToolboxBitmap(typeof(Form), "toolbox.Form.bmp")] + [Description("表单面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Form : FormBase + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Form() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override ControlBaseCollection Items + //{ + // get + // { + // return base.Items; + // } + //} + + + + #endregion + + #region Properties + + ///// <summary> + ///// 表单字段上按回车键触发的提交按钮 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("表单字段上按回车键触发的提交按钮")] + //public string SubmitButton + //{ + // get + // { + // object obj = FState["SubmitButton"]; + // return obj == null ? String.Empty : (string)obj; + // } + // set + // { + // FState["SubmitButton"] = value; + // } + //} + + #endregion + + #region Rows + + private FormRowCollection _rows; + + /// <summary> + /// 表单行控件集合 + /// </summary> + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual FormRowCollection Rows + { + get + { + if (_rows == null) + { + _rows = new FormRowCollection(this); + } + return _rows; + } + } + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + #region Options + + + + #endregion + + #region ResolveRows + + // 包含行的列脚本 + string rowScriptStr = String.Empty; + // 行的集合 + string rowItemScriptStr = String.Empty; + + // 如果存在Rows集合 + if (Rows.Count > 0) + { + // rowScriptStr + // rowItemScriptStr: [X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row0,X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row2] + ResolveRows(ref rowScriptStr, ref rowItemScriptStr); + + // 添加Items + OB.RemoveProperty("items"); + OB.AddProperty("items", rowItemScriptStr, true); + } + + //rowScriptStr += "\r\n"; + + + #endregion + + //OptionBuilder defaultsOB = new OptionBuilder(); + //defaultsOB.Listeners.AddProperty("change", JsHelper.GetFunction("F.util.setPageStateChanged();"), true); + //OB.AddProperty("defaults", defaultsOB); + + //OB.Listeners.AddProperty("change", JsHelper.GetFunction("F.util.setPageStateChanged();"), true); + //OB.Listeners.AddProperty("dirtychange", JsHelper.GetFunction("F.util.setPageStateChanged(dirty);", "form", "dirty"), true); + AddListener("dirtychange", "F.util.setPageStateChanged(dirty);", "form", "dirty"); + //if (!String.IsNullOrEmpty(SubmitButton)) + //{ + // Control control = ControlUtil.FindControl(SubmitButton); + // if (control != null && control is ControlBase) + // { + // OB.Listeners.AddProperty("render", JsHelper.GetFunction("F.util.formEnterKey(form,'" + control.ClientID + "');", "form"), true); + // } + //} + + + string formPanelScript = String.Format("var {0}=Ext.create('Ext.form.Panel',{1});", XID, OB.ToString()); + //AddStartupScript(this, rowScriptStr + formPanelScript); + + string jsContent = rowScriptStr + formPanelScript; + AddStartupScript(jsContent); + } + + /// <summary> + /// 处理列 + /// </summary> + /// <returns></returns> + private void ResolveRows(ref string rowScriptsStr, ref string rowIdsStr) + { + JsArrayBuilder rowIdsBuilder = new JsArrayBuilder(); + + // 上一行的列数 + int lastRowColumnCount = 1; + // 上一行的列数 + string lastRowColumnWidths = String.Empty; + // 是否已经开始多列 + bool isMultiColumnStarted = false; + // 多列的开始行的序号 + int multiColumnStartLineIndex = 0; + + for (int i = 0, rowCount = Rows.Count; i < rowCount; i++) + { + FormRow currentRow = Rows[i]; + int currentRowColumnCount = GetRowColumnCount(currentRow); + string currentRowColumnWidths = currentRow.ColumnWidths; + + if (currentRowColumnCount == 0) + { + // 如果当前行为空,则跳过此行 + continue; + } + else if (currentRowColumnCount == 1) + { + if (isMultiColumnStarted) + { + // 如果上一行是多列行,则添加本行之上的所有行 + rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, i - 1, lastRowColumnCount); + //rowScriptsStr += "\r\n"; + + // 开始重置记录本行为多列的开始 + isMultiColumnStarted = false; + multiColumnStartLineIndex = 0; + } + + // 如果当前行的列数为1,则直接添加Field元素 + //AddItemScript(ab, currentRow.Fields[0].ClientID); + ControlBase component = GetRowColumnControl(currentRow, 0); + if (component != null) + { + rowIdsBuilder.AddProperty(String.Format("{0}", component.XID), true); + } + } + else + { + // 如果本行是多列 + if (!isMultiColumnStarted) + { + // 如果上一行还是单列的话,则开始多列 + isMultiColumnStarted = true; + multiColumnStartLineIndex = i; + } + else + { + if (lastRowColumnCount == currentRowColumnCount && lastRowColumnWidths == currentRowColumnWidths) + { + // 如果上一行的列数和本行的列数相同(并且上一行每列的宽度和本行的每列宽度也一样),则继续下一行 + } + else + { + // 如果上一行的列数和本行的列数不相同,则添加本行之上的所有行 + rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, i - 1, lastRowColumnCount); + //rowScriptsStr += "\r\n"; + + // 开始重新记录本行为多列的开始 + isMultiColumnStarted = true; + multiColumnStartLineIndex = i; + } + } + } + + + lastRowColumnCount = currentRowColumnCount; + lastRowColumnWidths = currentRowColumnWidths; + } + + + // 还要判断一下(如果最后一行是两列的情况) + if (isMultiColumnStarted) + { + rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, Rows.Count - 1, lastRowColumnCount); + //rowScriptsStr += "\r\n"; + } + + rowIdsStr = rowIdsBuilder.ToString(); + } + + /// <summary> + /// 添加列 + /// </summary> + /// <param name="rowIdsBuilder">行ID集合</param> + /// <param name="startLineIndex">开始行的索引(包含)</param> + /// <param name="endLineIndex">结束行的索引(包含)</param> + /// <param name="columnCount">行的列数</param> + private string AddColumnScript(JsArrayBuilder rowIdsBuilder, int startLineIndex, int endLineIndex, int columnCount) + { + // 注意,注册脚本的控件应该是最后一个 Row + // 假如有从上之下这些控件: Row1(Field1,Field2), Row2(Field3,Field4),Row3(Field5) + // 则渲染时,JS脚本的执行顺序为:Field1,Field2,Row1,Field3,Field4,Row2,Field5,Row3 + // 所以,如果column Panel的脚本注册为控件 Row3,则能保证所有的子控件已经初始化 + // 需要注意的是:在此设置脚本内容到 Row3 控件 + // 现在已经不是这样的了!!!,Row不在是一个控件 + + #region examples + + + // { + // layout: 'column', + // border:false, + // items:[{ + // columnWidth: .5, + // layout: 'form', + // border:false, + // items:[{ + // xtype:'combo', + // store: nextStepStore, + // displayField:'text', + // valueField:'value', + // typeAhead: true, + // mode: 'local', + // triggerAction: 'all', + // value:'1', + // emptyText:'请选择下一步', + // selectOnFocus:true, + // allowBlank:false, + // fieldLabel: '下一步', + // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', + // name: 'nextStep', + // anchor:'95%' + // }] + // },{ + // columnWidth: .5, + // layout: 'form', + // border:false, + // items:[{ + // xtype:'combo', + // store: executePersonStore, + // displayField:'text', + // valueField:'value', + // typeAhead: true, + // mode: 'local', + // triggerAction: 'all', + // value:'1', + // emptyText:'请选择执行人', + // selectOnFocus:true, + // allowBlank:false, + // fieldLabel: '执行人', + // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', + // name: 'executePerson', + // anchor:'95%' + // }] + // }] + // } + + + #endregion + + + // 最后一行 + FormRow endLineRow = Rows[endLineIndex]; + string rowId = String.Format("{0}_row{1}", XID, endLineIndex); + + + + string defaultColumnWidthStr = (1.0 / columnCount).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + string[] columnWidths = ResolveColumnWidths(columnCount, Rows[startLineIndex].ColumnWidths, defaultColumnWidthStr); + + // row_column + JsArrayBuilder rowColumnScriptsBuilder = new JsArrayBuilder(); + for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) + { + #region 计算每一列的值 + + // 循环每一列 + JsArrayBuilder fieldsAB = new JsArrayBuilder(); + for (int rowIndex = startLineIndex; rowIndex <= endLineIndex; rowIndex++) + { + FormRow currentRow = Rows[rowIndex]; + + if (columnIndex <= GetRowColumnCount(currentRow) - 1) + { + ControlBase component = GetRowColumnControl(currentRow, columnIndex); + if (component != null) + { + fieldsAB.AddProperty(String.Format("{0}", component.XID), true); + } + } + } + + // 当前列的创建JS + JsObjectBuilder columnOB = new JsObjectBuilder(); + string columnWidth = columnWidths[columnIndex]; + if (Convert.ToDouble(columnWidth) <= 1.0) + { + columnOB.AddProperty("columnWidth", columnWidths[columnIndex], true); + } + else + { + columnOB.AddProperty("width", columnWidths[columnIndex], true); + } + + columnOB.AddProperty("layout", "anchor"); + columnOB.AddProperty("border", false); + columnOB.AddProperty("id", rowId + "_column" + columnIndex.ToString()); + + // 如果不是最后一列,则默认距离右侧 5px + if (columnIndex != columnCount - 1) + { + columnOB.AddProperty("margin", "0 5 0 0"); + } + + // 有可能为空 + if (fieldsAB.Count > 0) + { + columnOB.AddProperty("items", fieldsAB.ToString(), true); + } + + + rowColumnScriptsBuilder.AddProperty(columnOB.ToString(), true); + + // 现在采取的是安全的ajax,不会出现下面的情况 + //// 所有Layout=form的地方必须用Ext.FormPanel,否则删除时不会把FieldLabek删除掉 + //rowColumnScriptsBuilder.AddProperty(String.Format("new Ext.FormPanel({0})", columnOB.ToString()), true); + + #endregion + } + + // 外面的JS(X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row0) + JsObjectBuilder rowBuilder = new JsObjectBuilder(); + rowBuilder.AddProperty("layout", "column"); + rowBuilder.AddProperty("border", false); + + + + // 有可能为空 + if (rowColumnScriptsBuilder.Count > 0) + { + rowBuilder.AddProperty("items", rowColumnScriptsBuilder.ToString(), true); + } + + + // 把当前节点添加到结果集合中 + rowIdsBuilder.AddProperty(String.Format("{0}", rowId), true); + rowBuilder.AddProperty("id", rowId); + + // 注意要注册 最后 一个 Row的脚本 + return String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", rowId, rowBuilder.ToString()); + } + + /// <summary> + /// 添加Items变量 + /// </summary> + /// <param name="ab"></param> + /// <param name="id"></param> + /// <returns></returns> + private void AddItemScript(JsArrayBuilder ab, string id) + { + ab.AddProperty(String.Format("{0}", id), true); + } + + /// <summary> + /// 取得当前行的列数 + /// </summary> + /// <param name="row"></param> + /// <returns></returns> + private int GetRowColumnCount(FormRow row) + { + int fieldCount = 0; + + foreach (Control c in row.Controls) + { + if (c is ControlBase) + { + fieldCount++; + } + } + + #region old code + //if (row.ColumnCount == null) + //{ + // return fieldCount; + //} + //else + //{ + // if (row.ColumnCount.Value > fieldCount) + // { + // return row.ColumnCount.Value; + // } + // else + // { + // return fieldCount; + // } + //} + #endregion + + return fieldCount; + } + + /// <summary> + /// 取得当前行 columnIndex 列的控件 + /// </summary> + /// <param name="row"></param> + /// <param name="columnIndex"></param> + /// <returns></returns> + private ControlBase GetRowColumnControl(FormRow row, int columnIndex) + { + int index = 0; + foreach (Control c in row.Controls) + { + if (c is ControlBase) + { + if (columnIndex == index) + { + return c as ControlBase; + } + + index++; + } + } + + return null; + } + + private string[] ResolveColumnWidths(int columnCount, string columnWidths, string defaultColumnWidthStr) + { + string[] results = null; + if (!String.IsNullOrEmpty(columnWidths)) + { + string[] columnWidthArray = columnWidths.Split(' '); + if (columnWidthArray.Length == columnCount) + { + results = columnWidthArray; + } + } + + if (results == null) + { + results = new string[columnCount]; + for (int i = 0; i < columnCount; i++) + { + results[i] = defaultColumnWidthStr; + } + } + + return results; + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs index a7213ca..cfa018b 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs @@ -1,505 +1,505 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: FormRow.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - - -namespace FineUI -{ - /// <summary> - /// 表单行控件 - /// </summary> - [Designer("FineUI.Design.FormRowDesigner, FineUI.Design")] - //[ToolboxData("<{0}:FormRow runat=\"server\"></{0}:FormRow>")] - //[ToolboxBitmap(typeof(FormRow), "toolbox.FormRow.bmp")] - //[Description("表单行控件")] - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class FormRow : ControlBase - { - - #region Properties - - /// <summary> - /// 各列的宽度,空格分割 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [DefaultValue("")] - [Description("各列的宽度,空格分割")] - public string ColumnWidths - { - get - { - object obj = XState["ColumnWidths"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["ColumnWidths"] = ResolveColumnWidths(value); - } - } - - #endregion - - #region Items - - private ControlBaseCollection _items; - - /// <summary> - /// 子控件集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Editor(typeof(ControlBaseItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual ControlBaseCollection Items - { - get - { - if (_items == null) - { - _items = new ControlBaseCollection(this); - } - return _items; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - - //// 目的:子控件的JS代码在父控件的前面 - //AddStartupScript(this, String.Empty); - AddStartupScript(String.Empty); - } - - #endregion - - #region private ResolveColumnWidths - - /// <summary> - /// 格式化widths - /// </summary> - /// <param name="widths"></param> - /// <returns></returns> - private string ResolveColumnWidths(string widths) - { - List<string> widthList = new List<string>(); - - string[] widthArray = widths.Split(' '); - foreach (string s in widthArray) - { - string tmp = s.Trim(); - if (!String.IsNullOrEmpty(tmp)) - { - widthList.Add(ResolveColumnWidth(tmp)); - } - } - - StringBuilder sb = new StringBuilder(); - foreach (string s in widthList) - { - sb.AppendFormat("{0} ", s); - } - - return sb.ToString().TrimEnd(); - } - - private string ResolveColumnWidth(string width) - { - string result = width; - if (result.EndsWith("%")) - { - result = (Convert.ToInt32(width.TrimEnd('%')) * 0.01).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); - } - else if (result.ToLower().EndsWith("px")) - { - result = result.ToLower().Substring(0, result.Length - 2); - } - - return result; - } - - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - //#region readonly Items - - //private List<ControlBase> _items; - - ///// <summary> - ///// 从AddParsedSubObject解析出来的内容 - ///// </summary> - //internal List<ControlBase> Items - //{ - // get - // { - // if (_items == null) - // { - // _items = new List<ControlBase>(); - // } - - // return _items; - // } - //} - - //#endregion - - // #region AddParsedSubObject - - //protected override void AddParsedSubObject(object obj) - //{ - // ControlBase c = obj as ControlBase; - // if (c != null) - // { - // c.RenderImmediately = false; - // base.AddParsedSubObject(c); - - // Items.Add(c); - // } - - //} - - // #endregion - - //#region override LoadViewState/SaveViewState - - //protected override void LoadViewState(object state) - //{ - // object[] states = (object[])state; - - // base.LoadViewState(states[0]); - - // for (int i = 0, count = Items.Count; i < count; i++) - // { - // ((IStateManager)Items[i]).LoadViewState(states[i + 1]); - // } - //} - - //protected override object SaveViewState() - //{ - // object[] states = new object[Items.Count + 1]; - - // states[0] = base.SaveViewState(); - - // for (int i = 0, count = Items.Count; i < count; i++) - // { - // states[i + 1] = ((IStateManager)Items[i]).SaveViewState(); - // } - - // return states; - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // for (int i = 0, count = Items.Count; i < count; i++) - // { - // ((IStateManager)Items[i]).TrackViewState(); - // } - //} - - //#endregion - - //#region SetDirty - - //protected override void SetDirty() - //{ - // base.SetDirty(); - - // for (int i = 0, count = Items.Count; i < count; i++) - // { - // ((ISetDirty)Items[i]).SetDirty(); - // } - //} - - //#endregion - - #endregion - - #region old code - //#region Controls - - //private List<ControlBase> _controls; - - //public List<ControlBase> Controls - //{ - // get - // { - // if (_controls == null) - // { - // _controls = new List<ControlBase>(); - // } - // return _controls; - // } - // set - // { - // _controls = value; - // } - //} - - //#endregion - - //#region IParserAccessor Members - - //public void AddParsedSubObject(object obj) - //{ - // ControlBase control = obj as ControlBase; - - // if (control != null) - // { - // Controls.Add(control); - // } - //} - - //#endregion - - //#region override ViewState - - //public override void TrackViewState() - //{ - // base.TrackViewState(); - - // foreach (ControlBase control in Controls) - // { - // ((IStateManager)control).TrackViewState(); - // } - //} - - //public override object SaveViewState() - //{ - // int index = 0; - // foreach (ControlBase control in Controls) - // { - // BoxState["control" + index] = ((IStateManager)control).SaveViewState(); - - // index++; - // } - - // return base.SaveViewState(); - //} - - //public override void LoadViewState(object state) - //{ - // base.LoadViewState(state); - - // int index = 0; - // foreach (ControlBase control in Controls) - // { - // ((IStateManager)control).LoadViewState(BoxState["control" + index]); - - // index++; - // } - //} - - - //#endregion - #endregion - - #region old code - - #region Properties - - //private int? ColumnCount_Default = null; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(null)] - //[Description("本行有几列")] - //public int? ColumnCount - //{ - // get - // { - // object obj = BoxState["ColumnCount"]; - // return obj == null ? ColumnCount_Default : (int?)obj; - // } - // set - // { - // BoxState["ColumnCount"] = value; - // } - //} - - #endregion - - #region old code - - //#region AddParsedSubObject - - //protected override void AddParsedSubObject(object obj) - //{ - // ControlBase c = obj as ControlBase; - // if (c != null) - // { - // c.RenderImmediately = false; - // base.AddParsedSubObject(c); - // } - //} - - //#endregion - - //#region OnPreRender - - //protected override void OnPreRender(EventArgs e) - //{ - // base.OnPreRender(e); - - // AddStartupScript(this, String.Empty); - //} - - //#endregion - - //#region IStateManager Members - - //bool IStateManager.IsTrackingViewState - //{ - // get { return base.IsTrackingViewState; } - //} - - //void IStateManager.LoadViewState(object state) - //{ - // base.LoadViewState(state); - //} - - //object IStateManager.SaveViewState() - //{ - // return base.SaveViewState(); - //} - - //void IStateManager.TrackViewState() - //{ - // base.TrackViewState(); - //} - - //#endregion - - #endregion - - #region old code - - //#region Fields - - //private FieldCollection _fields; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] - //public virtual FieldCollection Fields - //{ - // get - // { - // if (_fields == null) - // { - // _fields = new FieldCollection(); - // } - // return _fields; - // } - //} - //#endregion - - - - #endregion - - #endregion - - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: FormRow.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + + +namespace FineUI +{ + /// <summary> + /// 表单行控件 + /// </summary> + [Designer("FineUI.Design.FormRowDesigner, FineUI.Design")] + //[ToolboxData("<{0}:FormRow runat=\"server\"></{0}:FormRow>")] + //[ToolboxBitmap(typeof(FormRow), "toolbox.FormRow.bmp")] + //[Description("表单行控件")] + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class FormRow : ControlBase + { + + #region Properties + + /// <summary> + /// 各列的宽度,空格分割 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [DefaultValue("")] + [Description("各列的宽度,空格分割")] + public string ColumnWidths + { + get + { + object obj = FState["ColumnWidths"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ColumnWidths"] = ResolveColumnWidths(value); + } + } + + #endregion + + #region Items + + private ControlBaseCollection _items; + + /// <summary> + /// 子控件集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(ControlBaseItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ControlBaseCollection Items + { + get + { + if (_items == null) + { + _items = new ControlBaseCollection(this); + } + return _items; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + + //// 目的:子控件的JS代码在父控件的前面 + //AddStartupScript(this, String.Empty); + AddStartupScript(String.Empty); + } + + #endregion + + #region private ResolveColumnWidths + + /// <summary> + /// 格式化widths + /// </summary> + /// <param name="widths"></param> + /// <returns></returns> + private string ResolveColumnWidths(string widths) + { + List<string> widthList = new List<string>(); + + string[] widthArray = widths.Split(' '); + foreach (string s in widthArray) + { + string tmp = s.Trim(); + if (!String.IsNullOrEmpty(tmp)) + { + widthList.Add(ResolveColumnWidth(tmp)); + } + } + + StringBuilder sb = new StringBuilder(); + foreach (string s in widthList) + { + sb.AppendFormat("{0} ", s); + } + + return sb.ToString().TrimEnd(); + } + + private string ResolveColumnWidth(string width) + { + string result = width; + if (result.EndsWith("%")) + { + result = (Convert.ToInt32(width.TrimEnd('%')) * 0.01).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + } + else if (result.ToLower().EndsWith("px")) + { + result = result.ToLower().Substring(0, result.Length - 2); + } + + return result; + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + //#region readonly Items + + //private List<ControlBase> _items; + + ///// <summary> + ///// 从AddParsedSubObject解析出来的内容 + ///// </summary> + //internal List<ControlBase> Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new List<ControlBase>(); + // } + + // return _items; + // } + //} + + //#endregion + + // #region AddParsedSubObject + + //protected override void AddParsedSubObject(object obj) + //{ + // ControlBase c = obj as ControlBase; + // if (c != null) + // { + // c.RenderImmediately = false; + // base.AddParsedSubObject(c); + + // Items.Add(c); + // } + + //} + + // #endregion + + //#region override LoadViewState/SaveViewState + + //protected override void LoadViewState(object state) + //{ + // object[] states = (object[])state; + + // base.LoadViewState(states[0]); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // ((IStateManager)Items[i]).LoadViewState(states[i + 1]); + // } + //} + + //protected override object SaveViewState() + //{ + // object[] states = new object[Items.Count + 1]; + + // states[0] = base.SaveViewState(); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // states[i + 1] = ((IStateManager)Items[i]).SaveViewState(); + // } + + // return states; + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // ((IStateManager)Items[i]).TrackViewState(); + // } + //} + + //#endregion + + //#region SetDirty + + //protected override void SetDirty() + //{ + // base.SetDirty(); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // ((ISetDirty)Items[i]).SetDirty(); + // } + //} + + //#endregion + + #endregion + + #region old code + //#region Controls + + //private List<ControlBase> _controls; + + //public List<ControlBase> Controls + //{ + // get + // { + // if (_controls == null) + // { + // _controls = new List<ControlBase>(); + // } + // return _controls; + // } + // set + // { + // _controls = value; + // } + //} + + //#endregion + + //#region IParserAccessor Members + + //public void AddParsedSubObject(object obj) + //{ + // ControlBase control = obj as ControlBase; + + // if (control != null) + // { + // Controls.Add(control); + // } + //} + + //#endregion + + //#region override ViewState + + //public override void TrackViewState() + //{ + // base.TrackViewState(); + + // foreach (ControlBase control in Controls) + // { + // ((IStateManager)control).TrackViewState(); + // } + //} + + //public override object SaveViewState() + //{ + // int index = 0; + // foreach (ControlBase control in Controls) + // { + // BoxState["control" + index] = ((IStateManager)control).SaveViewState(); + + // index++; + // } + + // return base.SaveViewState(); + //} + + //public override void LoadViewState(object state) + //{ + // base.LoadViewState(state); + + // int index = 0; + // foreach (ControlBase control in Controls) + // { + // ((IStateManager)control).LoadViewState(BoxState["control" + index]); + + // index++; + // } + //} + + + //#endregion + #endregion + + #region old code + + #region Properties + + //private int? ColumnCount_Default = null; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(null)] + //[Description("本行有几列")] + //public int? ColumnCount + //{ + // get + // { + // object obj = BoxState["ColumnCount"]; + // return obj == null ? ColumnCount_Default : (int?)obj; + // } + // set + // { + // BoxState["ColumnCount"] = value; + // } + //} + + #endregion + + #region old code + + //#region AddParsedSubObject + + //protected override void AddParsedSubObject(object obj) + //{ + // ControlBase c = obj as ControlBase; + // if (c != null) + // { + // c.RenderImmediately = false; + // base.AddParsedSubObject(c); + // } + //} + + //#endregion + + //#region OnPreRender + + //protected override void OnPreRender(EventArgs e) + //{ + // base.OnPreRender(e); + + // AddStartupScript(this, String.Empty); + //} + + //#endregion + + //#region IStateManager Members + + //bool IStateManager.IsTrackingViewState + //{ + // get { return base.IsTrackingViewState; } + //} + + //void IStateManager.LoadViewState(object state) + //{ + // base.LoadViewState(state); + //} + + //object IStateManager.SaveViewState() + //{ + // return base.SaveViewState(); + //} + + //void IStateManager.TrackViewState() + //{ + // base.TrackViewState(); + //} + + //#endregion + + #endregion + + #region old code + + //#region Fields + + //private FieldCollection _fields; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual FieldCollection Fields + //{ + // get + // { + // if (_fields == null) + // { + // _fields = new FieldCollection(); + // } + // return _fields; + // } + //} + //#endregion + + + + #endregion + + #endregion + + + + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs index 7ad95a7..3fe013d 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs @@ -1,114 +1,114 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: FormRowCollection.cs - * CreatedOn: 2008-04-23 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; - -namespace FineUI -{ - /// <summary> - /// 表单行控件集合 - /// </summary> - public class FormRowCollection : BaseCollection<FormRow> - { - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="parent">父控件实例</param> - public FormRowCollection(Form parent) - : base(parent) - { - - } - /* - private Form form; - private Control _control; - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="form">表单实例</param> - public FormRowCollection(Form form) - { - this.form = form; - _control = new Control(); - form.Controls.Add(_control); - } - - protected override void InsertItem(int index, FormRow item) - { - item.RenderWrapperNode = false; - _control.Controls.AddAt(index, item); - - base.InsertItem(index, item); - } - - protected override void RemoveItem(int index) - { - _control.Controls.RemoveAt(index); - - base.RemoveItem(index); - } - - protected override void ClearItems() - { - _control.Controls.Clear(); - - base.ClearItems(); - } - */ - - /* - protected override void InsertItem(int index, FormRow item) - { - item.RenderWrapperNode = false; - form.Controls.AddAt(index, item); - - base.InsertItem(index, item); - } - - protected override void RemoveItem(int index) - { - form.Controls.RemoveAt(index); - - base.RemoveItem(index); - } - - protected override void ClearItems() - { - // We should only remove this collection related controls - // Note we must loop from the last element(Count-1) to the first one(0) - for (int i = Count - 1; i >= 0; i--) - { - form.Controls.RemoveAt(i); - } - - base.ClearItems(); - } - */ - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: FormRowCollection.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 表单行控件集合 + /// </summary> + public class FormRowCollection : BaseCollection<FormRow> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public FormRowCollection(Form parent) + : base(parent) + { + + } + /* + private Form form; + private Control _control; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="form">表单实例</param> + public FormRowCollection(Form form) + { + this.form = form; + _control = new Control(); + form.Controls.Add(_control); + } + + protected override void InsertItem(int index, FormRow item) + { + item.RenderWrapperNode = false; + _control.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + _control.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + _control.Controls.Clear(); + + base.ClearItems(); + } + */ + + /* + protected override void InsertItem(int index, FormRow item) + { + item.RenderWrapperNode = false; + form.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + form.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = Count - 1; i >= 0; i--) + { + form.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + */ + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs index 0f0e5de..2f4b5dc 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs @@ -1,181 +1,200 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: GroupPanel.cs - * CreatedOn: 2008-04-21 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 分组面板控件 - /// </summary> - [Designer("FineUI.Design.GroupPanelDesigner, FineUI.Design")] - [ToolboxData("<{0}:GroupPanel Title=\"GroupPanel\" EnableCollapse=\"True\" runat=server><Items></Items></{0}:GroupPanel>")] - [ToolboxBitmap(typeof(GroupPanel), "toolbox.GroupPanel.bmp")] - [Description("分组面板控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class GroupPanel : CollapsablePanel - { - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool ShowHeader - { - get - { - return base.ShowHeader; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool ShowBorder - { - get - { - return base.ShowBorder; - } - } - - #endregion - - #region Properties - - - //private HtmlGenericControl _contentControl; - ///// <summary> - ///// 创建的Content控件 - ///// </summary> - //protected HtmlGenericControl ContentControl - //{ - // get - // { - // if (_contentControl == null) - // { - // _contentControl = new HtmlGenericControl("div"); - // _contentControl.ID = "content"; - // } - - // return _contentControl; - // } - //} - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("form"); - - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.FieldSet',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - - } - - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: GroupPanel.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 分组面板控件 + /// </summary> + [Designer("FineUI.Design.GroupPanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:GroupPanel Title=\"GroupPanel\" EnableCollapse=\"True\" runat=server><Items></Items></{0}:GroupPanel>")] + [ToolboxBitmap(typeof(GroupPanel), "toolbox.GroupPanel.bmp")] + [Description("分组面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class GroupPanel : CollapsablePanel + { + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return base.ShowHeader; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowBorder + { + get + { + return base.ShowBorder; + } + } + + #endregion + + #region Properties + + + //private HtmlGenericControl _contentControl; + ///// <summary> + ///// 创建的Content控件 + ///// </summary> + //protected HtmlGenericControl ContentControl + //{ + // get + // { + // if (_contentControl == null) + // { + // _contentControl = new HtmlGenericControl("div"); + // _contentControl.ID = "content"; + // } + + // return _contentControl; + // } + //} + + /// <summary> + /// 布局类型 + /// </summary> + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Anchor)] + [Description("布局类型")] + public override Layout Layout + { + get + { + object obj = FState["Layout"]; + return obj == null ? Layout.Anchor : (Layout)obj; + } + set + { + FState["Layout"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.FieldSet',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs index d7fa018..f60239c 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs @@ -1,176 +1,176 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Panel.cs - * CreatedOn: 2008-04-21 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 面板控件 - /// </summary> - [Designer("FineUI.Design.PanelDesigner, FineUI.Design")] - [ToolboxData("<{0}:Panel Title=\"Panel\" BodyPadding=\"5px\" ShowHeader=\"true\" ShowBorder=\"true\" runat=\"server\"><Items></Items></{0}:Panel>")] - [ToolboxBitmap(typeof(Panel), "toolbox.Panel.bmp")] - [Description("面板控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Panel : CollapsablePanel - { - - #region Properties - - - //private HtmlGenericControl _contentControl; - ///// <summary> - ///// 创建的Content控件 - ///// </summary> - //protected HtmlGenericControl ContentControl - //{ - // get - // { - // if (_contentControl == null) - // { - // _contentControl = new HtmlGenericControl("div"); - // _contentControl.ID = "content"; - // } - - // return _contentControl; - // } - //} - - #endregion - - #region oldcodes - - //private ControlBaseCollection _items; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] - //public virtual ControlBaseCollection Items - //{ - // get - // { - // if (_items == null) - // { - // _items = new ControlBaseCollection(this); - - // //if (base.IsTrackingViewState) - // //{ - // // ((IStateManager)_rows).TrackViewState(); - // //} - // } - // return _items; - // } - //} - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - //OB.AddProperty(OptionName.Layout, LayoutTypeName.GetName(LayoutType.Fit)); - - string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Panel.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 面板控件 + /// </summary> + [Designer("FineUI.Design.PanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:Panel Title=\"Panel\" BodyPadding=\"5px\" ShowHeader=\"true\" ShowBorder=\"true\" runat=\"server\"><Items></Items></{0}:Panel>")] + [ToolboxBitmap(typeof(Panel), "toolbox.Panel.bmp")] + [Description("面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Panel : CollapsablePanel + { + + #region Properties + + + //private HtmlGenericControl _contentControl; + ///// <summary> + ///// 创建的Content控件 + ///// </summary> + //protected HtmlGenericControl ContentControl + //{ + // get + // { + // if (_contentControl == null) + // { + // _contentControl = new HtmlGenericControl("div"); + // _contentControl.ID = "content"; + // } + + // return _contentControl; + // } + //} + + #endregion + + #region oldcodes + + //private ControlBaseCollection _items; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ControlBaseCollection Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new ControlBaseCollection(this); + + // //if (base.IsTrackingViewState) + // //{ + // // ((IStateManager)_rows).TrackViewState(); + // //} + // } + // return _items; + // } + //} + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + //OB.AddProperty(OptionName.Layout, LayoutTypeName.GetName(LayoutType.Fit)); + + string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs index 94d386c..9abf2ff 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs @@ -1,256 +1,313 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: SimpleForm.cs - * CreatedOn: 2008-04-22 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 简单的表单容器控件 - /// </summary> - [Designer("FineUI.Design.SimpleFormDesigner, FineUI.Design")] - [ToolboxData("<{0}:SimpleForm Title=\"SimpleForm\" BodyPadding=\"5px\" runat=server><Items></Items></{0}:SimpleForm>")] - [ToolboxBitmap(typeof(SimpleForm), "toolbox.SimpleForm.bmp")] - [Description("简单的表单容器控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class SimpleForm : FormBase - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public SimpleForm() - { - AddServerAjaxProperties(); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - - - #endregion - - #region Properties - - - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("form"); - - #region Options - - - - - #endregion - - - OB.Listeners.AddProperty("change", JsHelper.GetFunction("X.util.setPageStateChanged();"), true); //this.doLayout(); - - string jsContent = String.Format("var {0}=Ext.create('Ext.form.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - #endregion - - #region oldcode - - //private ControlBaseCollection _items; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] - //public virtual ControlBaseCollection Items - //{ - // get - // { - // if (_items == null) - // { - // _items = new ControlBaseCollection(this); - // } - // return _items; - // } - //} - - //#endregion - - //#region CreateChildControls - - //protected override void CreateChildControls() - //{ - // base.CreateChildControls(); - - - // //// 添加子控件 - // //foreach (ControlBase item in Items) - // //{ - // // item.RenderWrapperDiv = false; - // // Controls.Add(item); - // //} - //} - - #endregion - - #region oldcode - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - //#region Fields - - //private FieldCollection _fields; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] - //[Browsable(false)] - //[Description("表单字段集合")] - //public virtual FieldCollection Fields - //{ - // get - // { - // if (_fields == null) - // { - // _fields = new FieldCollection(); - - // if (base.IsTrackingViewState) - // { - // ((IStateManager)_fields).TrackViewState(); - // } - // } - // return _fields; - // } - //} - //#endregion - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[] { base.SaveViewState(), ((IStateManager)Fields).SaveViewState() }; - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Fields).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Fields).TrackViewState(); - //} - - //#endregion - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: SimpleForm.cs + * CreatedOn: 2008-04-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 简单的表单容器控件 + /// </summary> + [Designer("FineUI.Design.SimpleFormDesigner, FineUI.Design")] + [ToolboxData("<{0}:SimpleForm Title=\"SimpleForm\" BodyPadding=\"5px\" runat=server><Items></Items></{0}:SimpleForm>")] + [ToolboxBitmap(typeof(SimpleForm), "toolbox.SimpleForm.bmp")] + [Description("简单的表单容器控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class SimpleForm : FormBase + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public SimpleForm() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + + + #endregion + + #region Properties + + ///// <summary> + ///// 表单字段上按回车键触发的提交按钮 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("表单字段上按回车键触发的提交按钮")] + //public string SubmitButton + //{ + // get + // { + // object obj = FState["SubmitButton"]; + // return obj == null ? String.Empty : (string)obj; + // } + // set + // { + // FState["SubmitButton"] = value; + // } + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + #region Options + + + + + #endregion + + //OptionBuilder defaultsOB = new OptionBuilder(); + //defaultsOB.Listeners.AddProperty("click", JsHelper.GetFunction("alert('ss');F.util.setPageStateChanged();"), true); + //OB.AddProperty("defaults", defaultsOB); + + //OB.Listeners.AddProperty("dirtychange", JsHelper.GetFunction("F.util.setPageStateChanged(dirty);", "form", "dirty"), true); + AddListener("dirtychange", "F.util.setPageStateChanged(dirty);", "form", "dirty"); + + //if (!String.IsNullOrEmpty(SubmitButton)) + //{ + // Control control = ControlUtil.FindControl(SubmitButton); + // if (control != null && control is ControlBase) + // { + // OB.Listeners.AddProperty("render", JsHelper.GetFunction("F.util.formEnterKey(form,'" + control.ClientID + "');", "form"), true); + // } + //} + + /* + Ext.override(Ext.form.Panel, { + listeners: { + render: function () { + Ext.create('Ext.util.KeyNav', this.el, { + "enter": function (e) { + var el = Ext.Element.getActiveElement(); + if (el.type != 'textarea') { + var b = Ext.DomQuery.select('div[id=' + this.getId() + ']'); + var a = Ext.DomQuery.select('*[type=submit]', b[0]); + if (a[0]) { + a[0].click(); + } + } else { + // The user is in a textarea in the form so this feature + // is diabled to allow for character returns + // in field data. + } + }, + scope: this + }); + } + } + }); + */ + + + string jsContent = String.Format("var {0}=Ext.create('Ext.form.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region oldcode + + //private ControlBaseCollection _items; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ControlBaseCollection Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new ControlBaseCollection(this); + // } + // return _items; + // } + //} + + //#endregion + + //#region CreateChildControls + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + + // //// 添加子控件 + // //foreach (ControlBase item in Items) + // //{ + // // item.RenderWrapperDiv = false; + // // Controls.Add(item); + // //} + //} + + #endregion + + #region oldcode + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + //#region Fields + + //private FieldCollection _fields; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //[Browsable(false)] + //[Description("表单字段集合")] + //public virtual FieldCollection Fields + //{ + // get + // { + // if (_fields == null) + // { + // _fields = new FieldCollection(); + + // if (base.IsTrackingViewState) + // { + // ((IStateManager)_fields).TrackViewState(); + // } + // } + // return _fields; + // } + //} + //#endregion + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { base.SaveViewState(), ((IStateManager)Fields).SaveViewState() }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Fields).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Fields).TrackViewState(); + //} + + //#endregion + + #endregion + + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs index 625fdf3..a1001b7 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs @@ -1,89 +1,89 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: TreeCheckEventArgs.cs - * CreatedOn: 2008-09-14 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ڵѡ¼ - /// </summary> - public class TreeCheckEventArgs : EventArgs - { - private TreeNode _node; - - /// <summary> - /// ڵ - /// </summary> - public TreeNode Node - { - get { return _node; } - set { _node = value; } - } - - - private string _nodeID; - - /// <summary> - /// ڵID - /// </summary> - public string NodeID - { - get { return _nodeID; } - set { _nodeID = value; } - } - - private bool _checked; - - /// <summary> - /// Ƿѡ - /// </summary> - public bool Checked - { - get { return _checked; } - set { _checked = value; } - } - - /// <summary> - /// 캯 - /// </summary> - /// <param name="node">ڵ</param> - /// <param name="isChecked">Ƿѡ</param> - public TreeCheckEventArgs(TreeNode node, bool isChecked) - { - _node = node; - _nodeID = node.NodeID; - _checked = isChecked; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeCheckEventArgs.cs + * CreatedOn: 2008-09-14 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ڵѡ¼ + /// </summary> + public class TreeCheckEventArgs : EventArgs + { + private TreeNode _node; + + /// <summary> + /// ڵ + /// </summary> + public TreeNode Node + { + get { return _node; } + set { _node = value; } + } + + + private string _nodeID; + + /// <summary> + /// ڵID + /// </summary> + public string NodeID + { + get { return _nodeID; } + set { _nodeID = value; } + } + + private bool _checked; + + /// <summary> + /// Ƿѡ + /// </summary> + public bool Checked + { + get { return _checked; } + set { _checked = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + /// <param name="isChecked">Ƿѡ</param> + public TreeCheckEventArgs(TreeNode node, bool isChecked) + { + _node = node; + _nodeID = node.NodeID; + _checked = isChecked; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs index 4b3165f..b3d1f97 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs @@ -1,105 +1,105 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: TreeCommandEventArgs.cs - * CreatedOn: 2008-07-22 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - - /// <summary> - /// ڵ¼ - /// </summary> - public class TreeCommandEventArgs : EventArgs - { - private TreeNode _node; - - /// <summary> - /// ʵ - /// </summary> - public TreeNode Node - { - get { return _node; } - set { _node = value; } - } - - private string _nodeID; - - /// <summary> - /// ڵID - /// </summary> - public string NodeID - { - get { return _nodeID; } - set { _nodeID = value; } - } - - - private string _commandName; - - /// <summary> - /// - /// </summary> - public string CommandName - { - get { return _commandName; } - set { _commandName = value; } - } - - - private string _commandArgument; - - /// <summary> - /// - /// </summary> - public string CommandArgument - { - get { return _commandArgument; } - set { _commandArgument = value; } - } - - - /// <summary> - /// 캯 - /// </summary> - /// <param name="node">ڵ</param> - /// <param name="commandName"></param> - /// <param name="commandArgument"></param> - public TreeCommandEventArgs(TreeNode node, string commandName, string commandArgument) - { - _node = node; - _nodeID = node.NodeID; - _commandName = commandName; - _commandArgument = commandArgument; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeCommandEventArgs.cs + * CreatedOn: 2008-07-22 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + + /// <summary> + /// ڵ¼ + /// </summary> + public class TreeCommandEventArgs : EventArgs + { + private TreeNode _node; + + /// <summary> + /// ʵ + /// </summary> + public TreeNode Node + { + get { return _node; } + set { _node = value; } + } + + private string _nodeID; + + /// <summary> + /// ڵID + /// </summary> + public string NodeID + { + get { return _nodeID; } + set { _nodeID = value; } + } + + + private string _commandName; + + /// <summary> + /// + /// </summary> + public string CommandName + { + get { return _commandName; } + set { _commandName = value; } + } + + + private string _commandArgument; + + /// <summary> + /// + /// </summary> + public string CommandArgument + { + get { return _commandArgument; } + set { _commandArgument = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + /// <param name="commandName"></param> + /// <param name="commandArgument"></param> + public TreeCommandEventArgs(TreeNode node, string commandName, string commandArgument) + { + _node = node; + _nodeID = node.NodeID; + _commandName = commandName; + _commandArgument = commandArgument; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs new file mode 100644 index 0000000..a428f54 --- /dev/null +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs @@ -0,0 +1,101 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeNodeEventArgs.cs + * CreatedOn: 2014-03-28 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Xml; + + +namespace FineUI +{ + /// <summary> + /// ڵչ¼ + /// </summary> + public class TreeNodeEventArgs : EventArgs + { + private TreeNode _node; + + /// <summary> + /// ʵ + /// </summary> + public TreeNode Node + { + get { return _node; } + set { _node = value; } + } + + + private string _nodeID; + + /// <summary> + /// ڵID + /// </summary> + public string NodeID + { + get { return _nodeID; } + set { _nodeID = value; } + } + + private XmlNode _xmlNode; + + /// <summary> + /// ڵԴ + /// </summary> + public XmlNode XmlNode + { + get { return _xmlNode; } + set { _xmlNode = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + public TreeNodeEventArgs(TreeNode node) + { + _node = node; + _nodeID = node.NodeID; + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + /// <param name="xmlNode">ڵԴ</param> + public TreeNodeEventArgs(TreeNode node, XmlNode xmlNode) + { + _node = node; + _nodeID = node.NodeID; + _xmlNode = xmlNode; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs new file mode 100644 index 0000000..ce834fc --- /dev/null +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs @@ -0,0 +1,77 @@ + +#region Comment + +/* + * Project FineUIPro + * + * FileName: TreePreNodeEventArgs.cs + * CreatedOn: 2014-09-13 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Xml; + + +namespace FineUI +{ + /// <summary> + /// ڵԤ¼ + /// </summary> + public class TreePreNodeEventArgs : EventArgs + { + private bool _cancelled = false; + + /// <summary> + /// Ƿȡӱڵ + /// </summary> + public bool Cancelled + { + get { return _cancelled; } + set { _cancelled = value; } + } + + + + private XmlNode _xmlNode; + + /// <summary> + /// ڵԴ + /// </summary> + public XmlNode XmlNode + { + get { return _xmlNode; } + set { _xmlNode = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="xmlNode">ڵԴ</param> + public TreePreNodeEventArgs(XmlNode xmlNode) + { + _xmlNode = xmlNode; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs index f312f5d..8b5ee45 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs @@ -1,2314 +1,2587 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Tree.cs - * CreatedOn: 2008-07-21 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -using System.Web.UI.HtmlControls; -using System.Data; -using System.Xml; - -namespace FineUI -{ - /// <summary> - /// 树控件 - /// </summary> - [Designer("FineUI.Design.TreeDesigner, FineUI.Design")] - [ToolboxData("<{0}:Tree Title=\"Tree\" EnableArrows=\"true\" AutoScroll=\"true\" runat=\"server\"></{0}:Tree>")] - [ToolboxBitmap(typeof(Tree), "toolbox.Tree.bmp")] - [Description("树控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Tree : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Tree() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("X_Nodes", "SelectedNodeIDArray"); - - AddGzippedAjaxProperties("X_Nodes"); - } - - //internal int NodeIDIncrement = 0; - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override ControlBaseCollection Items - { - get - { - return base.Items; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableIFrame - { - get - { - return base.EnableIFrame; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameUrl - { - get - { - return base.IFrameUrl; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameName - { - get - { - return base.IFrameName; - } - } - - /// <summary> - /// 布局类型 - /// </summary> - [ReadOnly(true)] - [Category(CategoryName.LAYOUT)] - [DefaultValue(Layout.Container)] - [Description("布局类型")] - public override Layout Layout - { - get - { - return Layout.Container; - } - } - - #endregion - - #region Properties - - ///// <summary> - ///// 单击切换节点的折叠展开状态 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("单击切换节点的折叠展开状态")] - //public bool EnableSingleClickExpand - //{ - // get - // { - // object obj = XState["EnableSingleClickExpand"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["EnableSingleClickExpand"] = value; - // } - //} - - /// <summary> - /// 启用箭头 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("启用箭头")] - public bool EnableArrows - { - get - { - object obj = XState["EnableArrows"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableArrows"] = value; - } - } - - /// <summary> - /// 启用动画 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用动画")] - public bool EnableAnimate - { - get - { - object obj = XState["EnableAnimate"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableAnimate"] = value; - } - } - - /// <summary> - /// 每次只能展开一个 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("每次只能展开一个")] - public bool EnableSingleExpand - { - get - { - object obj = XState["EnableSingleExpand"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableSingleExpand"] = value; - } - } - - - /// <summary> - /// 启用节点之间连线 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用节点之间连线")] - public bool EnableLines - { - get - { - object obj = XState["EnableLines"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableLines"] = value; - } - } - - /// <summary> - /// 启用图标 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用图标")] - public bool EnableIcons - { - get - { - object obj = XState["EnableIcons"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableIcons"] = value; - } - } - - /// <summary> - /// 自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性(默认:true) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性")] - public bool AutoLeafIdentification - { - get - { - object obj = XState["AutoLeafIdentification"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["AutoLeafIdentification"] = value; - } - } - - - /// <summary> - /// 启用多行选择 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("启用多行选择")] - public bool EnableMultiSelect - { - get - { - object obj = XState["EnableMultiSelect"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableMultiSelect"] = value; - } - } - - #endregion - - #region DataSource - - private object _dataSource; - - /// <summary> - /// 数据源 - /// </summary> - [DefaultValue(null)] - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object DataSource - { - set - { - _dataSource = value; - } - get - { - return _dataSource; - } - } - - #endregion - - #region Nodes - - private TreeNodeCollection _nodes; - - /// <summary> - /// 树节点集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Description("树节点集合")] - public virtual TreeNodeCollection Nodes - { - get - { - if (_nodes == null) - { - _nodes = new TreeNodeCollection(this, null); - } - return _nodes; - } - } - #endregion - - #region SelectedNodeIDArray - - /// <summary> - /// 选中的树节点 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public TreeNode SelectedNode - { - get - { - return FindNode(SelectedNodeID); - } - } - - /// <summary> - /// [AJAX属性]选中的树节点ID - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]选中的行节点ID")] - public string SelectedNodeID - { - get - { - if (SelectedNodeIDArray.Length > 0) - { - return SelectedNodeIDArray[0]; - } - else - { - return String.Empty; - } - } - set - { - SelectedNodeIDArray = new string[] { value }; - } - } - - /// <summary> - /// [AJAX属性]选中的树节点ID列表 - /// </summary> - [Category(CategoryName.OPTIONS)] - [Description("[AJAX属性]选中的行节点ID列表")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] SelectedNodeIDArray - { - get - { - object obj = XState["SelectedNodeIDArray"]; - return obj == null ? new string[] { } : (string[])obj; - } - set - { - // 排序主要是为了拿两次的值做比较 - XState["SelectedNodeIDArray"] = GetSortedArray(value).ToArray(); - } - } - - private List<string> GetSortedArray(string[] value) - { - List<string> list = new List<string>(); - if (value != null) - { - list.AddRange(value); - list.Sort(); - } - return list; - } - - #endregion - - #region Mappings - - private XmlAttributeMappingCollection _mappings; - - /// <summary> - /// 树控件属性与数据源节点的映射关系 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Description("树控件属性与数据源节点的映射关系")] - public virtual XmlAttributeMappingCollection Mappings - { - get - { - if (_mappings == null) - { - _mappings = new XmlAttributeMappingCollection(); - } - return _mappings; - } - } - #endregion - - #region HiddenFieldID - - /// <summary> - /// 选中行 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string SelectedNodeIDArrayHiddenFieldID - { - get - { - return String.Format("{0}_SelectedNodeIDArray", ClientID); - } - } - - /// <summary> - /// 展开的节点列表 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string ExpandedNodesHiddenFieldID - { - get - { - return String.Format("{0}_ExpandedNodes", ClientID); - } - } - - /// <summary> - /// 选中的节点列表 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string CheckedNodesHiddenFieldID - { - get - { - return String.Format("{0}_CheckedNodes", ClientID); - } - } - - - #endregion - - #region X_Nodes - - /// <summary> - /// 树节点集合的 JSON 表示(内部使用) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public JArray X_Nodes - { - get - { - return GetNodesJArray(Nodes); - } - set - { - // 从请求中恢复 Nodes 属性,这个 set 方法在 OnInit 中被调用 - Nodes.Clear(); - FromNodesJArray(value, Nodes); - } - } - - #region FromNodesJArray GetNodesJArray - - private void FromNodesJArray(JArray ja, TreeNodeCollection nodes) - { - foreach (JArray ja2 in ja) - { - TreeNode treeNode = new TreeNode(); - nodes.Add(treeNode); - - // 0 - Text - // 1 - Leaf - // 2 - NodeID - // 3 - Enabled - // 4 - EnableCheckBox - // 5 - Checked - // 6 - Expanded - // 7 - NavigateUrl - // 8 - Target - // 9 - href - // 10 - Icon - // 11 - IconUrl - // 12 - iconUrl - 这个是客户端用来生成图标的 - // 13 - ToolTip - // 14 - OnClientClick - // 15 - EnablePostBack - // 16 - AutoPostBack - // 17 - CommandName - // 18 - CommandArgument - // 19 - Nodes - treeNode.Text = ja2[0].Value<string>(); //ja2.getString(0); - treeNode.Leaf = ja2[1].Value<int>() == 1 ? true : false; - treeNode.NodeID = ja2[2].Value<string>(); ; - treeNode.Enabled = ja2[3].Value<int>() == 1 ? true : false; - treeNode.EnableCheckBox = ja2[4].Value<int>() == 1 ? true : false; - treeNode.Checked = ja2[5].Value<int>() == 1 ? true : false; - treeNode.Expanded = ja2[6].Value<int>() == 1 ? true : false; - treeNode.NavigateUrl = ja2[7].Value<string>(); - treeNode.Target = ja2[8].Value<string>(); - string iconName = ja2[10].Value<string>(); - if (String.IsNullOrEmpty(iconName)) - { - iconName = StringUtil.EnumToName(Icon.None); - } - treeNode.Icon = (Icon)StringUtil.EnumFromName(typeof(Icon), iconName); - treeNode.IconUrl = ja2[11].Value<string>(); - treeNode.ToolTip = ja2[13].Value<string>(); - - treeNode.OnClientClick = ja2[14].Value<string>(); - treeNode.EnablePostBack = ja2[15].Value<int>() == 1 ? true : false; - treeNode.AutoPostBack = ja2[16].Value<int>() == 1 ? true : false; - treeNode.CommandName = ja2[17].Value<string>(); - treeNode.CommandArgument = ja2[18].Value<string>(); - - - JArray childNodes = ja2[19].Value<JArray>(); // ja2.getJArray(20); - if (childNodes != null && childNodes.Count > 0) - { - FromNodesJArray(childNodes, treeNode.Nodes); - } - } - } - - private JArray GetNodesJArray(TreeNodeCollection nodes) - { - JArray ja = new JArray(); - foreach (TreeNode node in nodes) - { - JArray ja2 = new JArray(); - - // 0 - Text - // 1 - Leaf - // 2 - NodeID - // 3 - Enabled - // 4 - EnableCheckBox - // 5 - Checked - // 6 - Expanded - // 7 - NavigateUrl - // 8 - Target - // 9 - href - // 10 - Icon - // 11 - IconUrl - // 12 - iconUrl - 这个是客户端用来生成图标的 - // 13 - ToolTip - // 14 - OnClientClick - // 15 - EnablePostBack - // 16 - AutoPostBack - // 17 - CommandName - // 18 - CommandArgument - // 19 - Nodes - ja2.Add(node.Text); - ja2.Add(node.Leaf ? 1 : 0); - ja2.Add(node.NodeID); - ja2.Add(node.Enabled ? 1 : 0); - ja2.Add(node.EnableCheckBox ? 1 : 0); - ja2.Add(node.Checked ? 1 : 0); - ja2.Add(node.Expanded ? 1 : 0); - - ja2.Add(node.NavigateUrl); - ja2.Add(node.Target); - ja2.Add(ResolveUrl(node.NavigateUrl)); - - ja2.Add(node.Icon == Icon.None ? "" : StringUtil.EnumToName(node.Icon)); - ja2.Add(String.IsNullOrEmpty(node.IconUrl) ? "" : node.IconUrl); - ja2.Add(IconHelper.GetResolvedIconUrl(node.Icon, node.IconUrl)); - - ja2.Add(String.IsNullOrEmpty(node.ToolTip) ? "" : node.ToolTip); - - ja2.Add(node.OnClientClick); - ja2.Add(node.EnablePostBack ? 1 : 0); - - ja2.Add(node.AutoPostBack ? 1 : 0); - ja2.Add(node.CommandName); - ja2.Add(node.CommandArgument); - - if (node.Nodes != null && node.Nodes.Count > 0) - { - ja2.Add(GetNodesJArray(node.Nodes)); - } - else - { - ja2.Add(new JArray()); - } - - ja.Add(ja2); - - #region old code - JObject - - //JObject jo = new JObject(); - - //jo.Add("Text", node.Text); - //jo.Add("Leaf", node.Leaf); - //jo.Add("NodeID", node.NodeID); - //jo.Add("Enabled", node.Enabled); - //jo.Add("EnableCheckBox", node.EnableCheckBox); - //jo.Add("Checked", node.Checked); - //jo.Add("Expanded", node.Expanded); - - //jo.Add("NavigateUrl", node.NavigateUrl); - //jo.Add("Target", node.Target); - //jo.Add("href", ResolveUrl(node.NavigateUrl)); - - //jo.Add("Icon", StringUtil.EnumToName(node.Icon)); - //jo.Add("IconUrl", node.IconUrl); - //jo.Add("iconUrl", GetResolvedIconUrl(node.Icon, IconUrl)); - - //jo.Add("ToolTip", node.ToolTip); - - //jo.Add("SingleClickExpand", node.SingleClickExpand); - - //jo.Add("OnClientClick", node.OnClientClick); - //jo.Add("EnablePostBack", node.EnablePostBack); - - //jo.Add("AutoPostBack", node.AutoPostBack); - //jo.Add("CommandName", node.CommandName); - //jo.Add("CommandArgument", node.CommandArgument); - - //if (node.Nodes != null && node.Nodes.Count > 0) - //{ - // jo.Add("Nodes", GetNodesJArray(node.Nodes)); - //} - - //ja.Add(jo); - - #endregion - - #region old code - //#region options - - //jo.Add("text", node.Text); - //jo.Add("leaf", node.Leaf); - //jo.Add("id", node.NodeID); - //if (!node.Enabled) - //{ - // jo.Add("disabled", true); - //} - //if (node.EnableCheckBox) - //{ - // jo.Add("checked", node.Checked); - //} - //// Leaf doesn't has expanded property. - //if (!node.Leaf) - //{ - // jo.Add("expanded", node.Expanded); - //} - - //#endregion - - //#region href - - //if (!String.IsNullOrEmpty(node.NavigateUrl)) - //{ - // jo.Add("href", ResolveUrl(node.NavigateUrl)); - - // if (!String.IsNullOrEmpty(node.Target)) - // { - // jo.Add("hrefTarget", node.Target); - // } - //} - - //#endregion - - //#region IconUrl - - //if (!String.IsNullOrEmpty(node.IconUrl)) - //{ - // jo.Add("icon", ResolveUrl(node.IconUrl)); - - // #region old code - // // 添加CSS样式,这种方法添加的图片位置靠上 - // // string className = AddStartupCSS(String.Format("{0}-button-icon-image", ClientID), - // // GetBackgroundStyleCss(ResolveUrl(IconUrl))); - - // //OB.AddProperty(OptionName.IconCls, className); - // #endregion - //} - - //#endregion - - //#region qtip - - //if (!String.IsNullOrEmpty(node.ToolTip)) - //{ - // jo.Add("qtip", node.ToolTip); - //} - - //#endregion - - //#region SingleClickExpand - - //if (node.SingleClickExpand) - //{ - // jo.Add("singleClickExpand", true); - //} - - //#endregion - - //#region old code - - ////JsObjectBuilder listenersBuilder = new JsObjectBuilder(); - - ////#region old code - - //////// 展开时判断是否需要到后台取数据 - ////////listenersBuilder.AddProperty("beforeappend", String.Format("function(node,deep,anim){{\r\nif(!node.loaded){{alert(node.id);\r\n}}}}"), true); - - //////// 折叠/展开 - ////////listenersBuilder.AddProperty(OptionName.Expand, String.Format("function(node){{X.util.addValueToHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); - ////////listenersBuilder.AddProperty(OptionName.Collapse, String.Format("function(node){{X.util.removeValueFromHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); - //////listenersBuilder.AddProperty("expand", Render_NodeExpandScriptID, true); - //////listenersBuilder.AddProperty("collapse", Render_NodeCollapseScriptID, true); - - - ////#endregion - - ////#region Click Event - - ////// 如果禁用此节点,则不响应点击事件(不可选中) - ////// Added by sanshi.ustc#gmail.com 2009-8-24 - ////if (!node.Enabled) - ////{ - //// listenersBuilder.AddProperty("beforeclick", "function(){return false;}", true); - ////} - - ////string clickScript = node.OnClientClick; - ////if (!String.IsNullOrEmpty(clickScript) && !clickScript.EndsWith(";")) - ////{ - //// clickScript += ";"; - ////} - ////if (node.EnablePostBack) - ////{ - //// string paramStr = String.Format("Command${0}${1}${2}", node.NodeID, node.CommandName.Replace("'", "\""), node.CommandArgument.Replace("'", "\"")); - //// clickScript += GetPostBackEventReference(paramStr); - ////} - ////if (!String.IsNullOrEmpty(clickScript)) - ////{ - //// listenersBuilder.AddProperty("click", JsHelper.GetFunction(clickScript, "node"), true); - ////} - - ////#endregion - - ////#region CheckBox - AutoPostback - - ////// CheckBox选中 - ////if (node.EnableCheckBox) - ////{ - //// string checkchangeScript = String.Empty; - - //// // 自动回发到服务器 - //// checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); - //// checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); - - //// listenersBuilder.AddProperty("checkchange", JsHelper.GetFunction(checkchangeScript, "node", "checked"), true); - - //// #region old code - //// //if (!node.AutoPostBack) - //// //{ - //// // // 改变CheckBox,不需要自动回发,则将checkchange指向预定义的函数,这有助于减少代码量 - //// // //listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{if(checked){{X.util.addValueToHiddenField('{0}',node.id);}}else{{X.util.removeValueFromHiddenField('{0}',node.id);}}}}", CheckedNodesHiddenFieldID), true); - //// // listenersBuilder.AddProperty("checkchange", Render_NodeCheckChangeScriptID, true); - //// //} - //// //else - //// //{ - //// // string checkchangeScript = String.Empty; - - //// // // 改变页面中隐藏字段的值 - //// // checkchangeScript += String.Format("{0}.apply(window, [node, checked]);", Render_NodeCheckChangeScriptID); - - //// // // 自动回发到服务器 - //// // checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); - //// // checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); - - //// // listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{{0}}}", checkchangeScript), true); - //// //} - //// #endregion - ////} - - ////#endregion - - ////jo.Add("listeners", listenersBuilder); - - //#endregion - #endregion - } - - return ja; - } - - #endregion - - #endregion - - #region OnPreRender - - #region Render_StoreID - - private string Render_StoreID - { - get - { - return String.Format("{0}_store", XID); - } - } - - #region oldcode - - //private string Render_NodesID - //{ - // get - // { - // return String.Format("{0}_nodes", XID); - // } - //} - - - //private string Render_RootId - //{ - // get - // { - // return String.Format("{0}_root", ClientJavascriptID); - // } - //} - - //private string Render_SelectModelID - //{ - // get - // { - // return String.Format("{0}_select_model", XID); - // } - //} - - //private string Render_NodeExpandScriptID - //{ - // get - // { - // return String.Format("{0}_node_expand", XID); - // } - //} - - //private string Render_NodeCollapseScriptID - //{ - // get - // { - // return String.Format("{0}_node_collapse", XID); - // } - //} - - //private string Render_NodeClickScriptID - //{ - // get - // { - // return String.Format("{0}_node_click", XID); - // } - //} - - //private string Render_NodeCheckChangeScriptID - //{ - // get - // { - // return String.Format("{0}_node_checkchange", XID); - // } - //} - #endregion - - #endregion - - #region OnPreRender - - /// <summary> - /// 初始化控件 - /// </summary> - protected override void OnInitControl() - { - base.OnInitControl(); - - // 修复Tree的节点,这里可能会修改树节点的属性,从而影响 X_Nodes 的计算结果 - // 在这个地方调用是安全的: - // -> 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 - // -> 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 X_STATE 已经恢复完毕 - FixTreeNodes(); - } - - /// <summary> - /// 渲染 HTML 之前调用 - /// </summary> - protected override void OnBothPreRender() - { - base.OnBothPreRender(); - - // Nodes 属性有可能在页面加载后被用户修改,比如绑定数据,所以在输出之前应该调用此函数 - FixTreeNodes(); - } - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - bool reloaded = false; - if (PropertyModified("X_Nodes")) - { - sb.AppendFormat("{0}.x_loadData();", XID); - reloaded = true; - } - - if (reloaded) - { - // 如果重新加载了数据,则要重新设置选中项 - sb.AppendFormat("{0}.x_selectNodes();", XID); - } - else - { - if (PropertyModified("SelectedNodeIDArray")) - { - sb.AppendFormat("{0}.x_selectNodes();", XID); - } - } - - AddAjaxScript(sb); - } - - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - // 确保 X_Nodes 在页面第一次加载时都存在于 X_STATE 中,因为客户端需要这个数据来渲染树控件 - // 并且这个代码要放在 base.OnFirstPreRender(); 之前,因为在那里面会生成 X_STATE - XState.AddModifiedProperty("X_Nodes"); - - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("tree"); - - #region options - - OB.AddProperty("useArrows", EnableArrows); - OB.AddProperty("animate", EnableAnimate); - - OB.AddProperty("singleExpand", EnableSingleExpand); - OB.AddProperty("lines", EnableLines); - - if (!EnableIcons) - { - //bodyCssClass: 'x-tree-noicon' - OB.AddProperty("bodyCls", "x-tree-noicon"); - } - - - // 这个为了在客户端生成 PostBack 脚本,比如 __doPostBack('RegionPanel1$TreePanel1','') - OB.AddProperty("name", UniqueID); - - #endregion - - #region oldcode - - //string hiddenFieldsScript = String.Empty; - - //// 选中的行 - //hiddenFieldsScript += GetSetHiddenFieldValueScript(SelectedNodeHiddenFieldID, SelectedNode == null ? "" : SelectedNode.NodeID); - - //// 展开的行 - //hiddenFieldsScript += GetSetHiddenFieldValueScript(ExpandedNodesHiddenFieldID, StringUtil.GetStringFromStringArray(GetExpandedNodeIDs())); - - //// 选中的行 - //hiddenFieldsScript += GetSetHiddenFieldValueScript(CheckedNodesHiddenFieldID, StringUtil.GetStringFromStringArray(GetCheckedNodeIDs())); - - - #endregion - - #region Loader - - string loaderScript = String.Empty; - - JsObjectBuilder loaderBuilder = new JsObjectBuilder(); - - - JsObjectBuilder listenersBuilder = new JsObjectBuilder(); - - string paramStr = String.Format("Expand${0}", "#ID#"); - string postBackScript = GetPostBackEventReference(paramStr); - postBackScript = postBackScript.Replace("#ID#'", "'+op.id"); - listenersBuilder.AddProperty("beforeload", String.Format("function(store,op){{if(op.action==='read'&&op.id!=='root'){{{0}}}return false;}}", postBackScript), true); - - //listenersBuilder.AddProperty(OptionName.Scope, "box", true); - loaderBuilder.AddProperty("listeners", listenersBuilder); - // 必须添加dataUrl,才会引发beforeload事件 - //loaderBuilder.AddProperty("dataUrl", "about:blank"); - //loaderBuilder.AddProperty("preloadChildren", true); - //loaderBuilder.AddProperty("clearOnLoad", false); - - loaderScript = String.Format("var {0}=Ext.create('Ext.data.TreeStore',{1});", Render_StoreID, loaderBuilder); - - OB.AddProperty("store", Render_StoreID, true); - #endregion - - #region Listeners - - string beforeclickScript = "if(node.disabled){return false;}"; - OB.Listeners.AddProperty("beforeitemclick", JsHelper.GetFunction(beforeclickScript, "view", "node", "item", "index"), true); - - //if (EnableSingleClickExpand) - //{ - // string itemclickScript = "if(!node.isLeaf()){if(node.isExpanded()){node.collapse();}else{node.expand();}}"; - // OB.Listeners.AddProperty("itemclick", JsHelper.GetFunction(itemclickScript, "view", "node", "item", "index"), true); - //} - - string itemclickScript = "var args='Command$'+node.getId()+'$'+node.raw.x_commandname+'$'+node.raw.x_commandargument;"; - itemclickScript += GetPostBackEventReference("#Click#").Replace("'#Click#'", "args"); - itemclickScript = String.Format("if(node.raw.x_enablepostback){{{0}}}", itemclickScript); - itemclickScript = "if(node.raw.x_clientclick){eval(node.raw.x_clientclick);}" + itemclickScript; // new Function(node.raw.x_clientclick)(); - OB.Listeners.AddProperty("itemclick", JsHelper.GetFunction(itemclickScript, "view", "node", "item", "index"), true); - - - string checkchangeScript = "var args='Check$'+node.getId()+'$'+checked;"; - checkchangeScript += GetPostBackEventReference("#CheckChange#").Replace("'#CheckChange#'", "args"); - checkchangeScript = String.Format("if(node.raw.x_autopostback){{{0}}}", checkchangeScript); - OB.Listeners.AddProperty("checkchange", JsHelper.GetFunction(checkchangeScript, "node", "checked"), true); - - - #endregion - - #region selectModel - - string selectModelScript = String.Empty; - if (EnableMultiSelect) - { - selectModelScript = "Ext.create('Ext.selection.TreeModel',{mode:'MULTI'})"; - } - else - { - selectModelScript = "Ext.create('Ext.selection.TreeModel')"; - } - OB.AddProperty("selModel", selectModelScript, true); - - #endregion - - #region old code - - // nodes - //string nodesScript = Render_NodesId + "=[{'text':'Audi','id':100,'leaf':false,'cls':'folder','children':[{'text':'A3','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]},{'text':'TT','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]}]},{'text':'Cadillac','id':300,'leaf':false,'cls':'folder','children':[{'text':'CTS','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]},{'text':'CTS-V','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]}]}];"; - //string nodesJsArray = GetNodesJsArray2(Nodes).ToString(); - //string nodesScript = String.Format("{0}={1};", Render_NodesID, nodesJsArray); - - #endregion - - #region Root - - //JsObjectBuilder rootBuilder = new JsObjectBuilder(); - ////rootBuilder.AddProperty(OptionName.Id, "root"); - ////rootBuilder.AddProperty(OptionName.Text, "root"); - ////rootBuilder.AddProperty("loaded", false); - //rootBuilder.AddProperty(OptionName.Children, Render_NodesId, true); - - //string rootNodeScript = String.Format("var {0}=new Ext.tree.AsyncTreeNode({1});", Render_RootId, rootBuilder.ToString()); - //rootNodeScript += "\r\n"; - - - //OB.AddProperty("root", "new Ext.tree.AsyncTreeNode()", true); - OB.AddProperty("rootVisible", false); - - #endregion - - #region renderScript - - //string renderScript = String.Empty; - ////renderScript += "cmp.x_loadData();"; - //if (SelectedNodeIDArray.Length > 0) - //{ - // renderScript += "var model=cmp.getSelectionModel();"; - // foreach (string nodeId in SelectedNodeIDArray) - // { - // renderScript += String.Format("model.select(cmp.getNodeById('{0}'),null,true);", nodeId); - // } - //} - - ////renderScript = "function(cmp){window.setTimeout(function(){ cmp.x_loadData(); },1000);}"; - - OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.x_loadData();", "cmp"), true); - - OB.Listeners.AddProperty("viewready", JsHelper.GetFunction("cmp.x_selectNodes();", "cmp"), true); - - #endregion - - #region AddStartupScript - //// 展开,折叠,点击,选中CheckBox事件处理函数, - //// 因为这些函数会被几乎每个节点使用,所以提取出公共的方法来 - //scripts.AppendFormat("{0}=function(node){{X.util.addValueToHiddenField('{1}',node.id);}};", Render_NodeExpandScriptID, ExpandedNodesHiddenFieldID); - //scripts.AppendFormat("{0}=function(node){{X.util.removeValueFromHiddenField('{1}',node.id);}};", Render_NodeCollapseScriptID, ExpandedNodesHiddenFieldID); - //scripts.AppendFormat("{0}=function(node,checked){{if(checked){{X.util.addValueToHiddenField('{1}',node.id);}}else{{X.util.removeValueFromHiddenField('{1}',node.id);}}}};", Render_NodeCheckChangeScriptID, CheckedNodesHiddenFieldID); - //scripts.AppendFormat("{0}=function(node){{Ext.get('{1}').dom.value=node.id;}};", Render_NodeClickScriptID, SelectedNodeHiddenFieldID); - - //scripts.AppendLine(hiddenFieldsScript); - - //OB.AddProperty("store", "Ext.create('Ext.data.TreeStore')", true); - - - //StringBuilder sb = new StringBuilder(); - - //scripts.AppendLine(loaderScript); - string startupScript = String.Format("var {0}=Ext.create('Ext.tree.Panel',{1});", XID, OB); - - AddStartupScript(loaderScript + startupScript); - - #endregion - } - - #endregion - - #region old code - - //private void ResolveTreeSelectModel(ref string selectModelScript) - //{ - // JsObjectBuilder selectOptionBuilder = new JsObjectBuilder(); - - // //// 选中行,不选中行 - // //JsObjectBuilder selectListenersBuilder = new JsObjectBuilder(); - // //selectListenersBuilder.AddProperty("selectionchange", String.Format("function(sm,node){{Ext.get('{0}').dom.value=node.id;}}", SelectedNodeHiddenFieldID), true); - // //selectListenersBuilder.AddProperty(OptionName.Scope, "box", true); - - // //selectOptionBuilder.AddProperty("listeners", selectListenersBuilder); - - // if (EnableMultiSelect) - // { - // selectModelScript = String.Format("var {0}=new Ext.tree.MultiSelectionModel({1});", Render_SelectModelID, selectOptionBuilder); - // } - // else - // { - // selectModelScript = String.Format("var {0}=new Ext.tree.DefaultSelectionModel({1});", Render_SelectModelID, selectOptionBuilder); - // } - - //} - - #endregion - - #region old code - - //internal JsArrayBuilder GetNodesJsArray() - //{ - // return GetNodesJsArray(Nodes); - //} - - /* - internal JsArrayBuilder GetNodesJsArray(TreeNodeCollection nodes, bool includeListeners) - { - JsArrayBuilder nodesBuilder = new JsArrayBuilder(); - foreach (TreeNode node in nodes) - { - JsObjectBuilder nodeBuilder = new JsObjectBuilder(); - - #region options - - nodeBuilder.AddProperty("text", node.Text); - nodeBuilder.AddProperty("leaf", node.Leaf); - if (!String.IsNullOrEmpty(node.NodeID)) - { - nodeBuilder.AddProperty("id", node.NodeID); - } - nodeBuilder.AddProperty("disabled", !node.Enabled); - if (node.EnableCheckBox) - { - nodeBuilder.AddProperty("checked", node.Checked); - } - - // Leaf doesn't has expanded property. - if (!node.Leaf) - { - nodeBuilder.AddProperty("expanded", node.Expanded); - } - - #endregion - - #region href - - if (!String.IsNullOrEmpty(node.NavigateUrl)) - { - nodeBuilder.AddProperty("href", ResolveUrl(node.NavigateUrl)); - - if (!String.IsNullOrEmpty(node.Target)) - { - nodeBuilder.AddProperty("hrefTarget", node.Target); - } - } - - #endregion - - #region IconUrl - - if (!String.IsNullOrEmpty(node.IconUrl)) - { - nodeBuilder.AddProperty("icon", ResolveUrl(node.IconUrl)); - - #region old code - // 添加CSS样式,这种方法添加的图片位置靠上 - // string className = AddStartupCSS(String.Format("{0}-button-icon-image", ClientID), - // GetBackgroundStyleCss(ResolveUrl(IconUrl))); - - //OB.AddProperty(OptionName.IconCls, className); - #endregion - } - - #endregion - - #region qtip - - if (!String.IsNullOrEmpty(node.ToolTip)) - { - nodeBuilder.AddProperty("qtip", node.ToolTip); - } - - #endregion - - #region Listeners - - if (includeListeners) - { - JsObjectBuilder listenersBuilder = new JsObjectBuilder(); - - #region old code - - //// 展开时判断是否需要到后台取数据 - ////listenersBuilder.AddProperty("beforeappend", String.Format("function(node,deep,anim){{\r\nif(!node.loaded){{alert(node.id);\r\n}}}}"), true); - - //// 折叠/展开 - ////listenersBuilder.AddProperty(OptionName.Expand, String.Format("function(node){{X.util.addValueToHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); - ////listenersBuilder.AddProperty(OptionName.Collapse, String.Format("function(node){{X.util.removeValueFromHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); - //listenersBuilder.AddProperty("expand", Render_NodeExpandScriptID, true); - //listenersBuilder.AddProperty("collapse", Render_NodeCollapseScriptID, true); - - - #endregion - - #region 点击 - - // 如果禁用此节点,则不响应点击事件(不可选中) - // Added by sanshi.ustc#gmail.com 2009-8-24 - if (!node.Enabled) - { - //clientScript += "e.stopEvent();"; - listenersBuilder.AddProperty("beforeclick", "function(){return false;}", true); - } - - - if (String.IsNullOrEmpty(node.OnClientClick) && !node.EnablePostBack) - { - // 这段代码主要是为了减少代码体积,避免为每个节点添加重复的代码 - listenersBuilder.AddProperty("click", Render_NodeClickScriptID, true); - } - else - { - // 点击的脚本 - string clientScript = String.Empty; - - // 用户自定义脚本 - string clientClickScript = node.OnClientClick; - if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) - { - clientClickScript += ";"; - } - clientScript += clientClickScript; - - - // 选中此项 - //clientScript += String.Format("Ext.get('{0}').dom.value=node.id;", SelectedNodeHiddenFieldID); - clientScript += String.Format("{0}.apply(window, [node]);", Render_NodeClickScriptID); - - // 回发脚本 - if (node.EnablePostBack) - { - string paramStr = String.Format("Command${0}${1}${2}", node.NodeID, node.CommandName.Replace("'", "\""), node.CommandArgument.Replace("'", "\"")); - clientScript += GetPostBackEventReference(paramStr); - } - - - listenersBuilder.AddProperty("click", String.Format("function(node,e){{{0}}}", clientScript), true); - - } - - #endregion - - #region CheckBox - AutoPostback - - // CheckBox选中 - if (node.EnableCheckBox) - { - if (!node.AutoPostBack) - { - // 改变CheckBox,不需要自动回发,则将checkchange指向预定义的函数,这有助于减少代码量 - //listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{if(checked){{X.util.addValueToHiddenField('{0}',node.id);}}else{{X.util.removeValueFromHiddenField('{0}',node.id);}}}}", CheckedNodesHiddenFieldID), true); - listenersBuilder.AddProperty("checkchange", Render_NodeCheckChangeScriptID, true); - } - else - { - string checkchangeScript = String.Empty; - - // 改变页面中隐藏字段的值 - checkchangeScript += String.Format("{0}.apply(window, [node, checked]);", Render_NodeCheckChangeScriptID); - - // 自动回发到服务器 - checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); - checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); - - listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{{0}}}", checkchangeScript), true); - } - } - - #endregion - - nodeBuilder.AddProperty("listeners", listenersBuilder); - } - - #endregion - - #region children - - if (node.Nodes != null && node.Nodes.Count > 0) - { - nodeBuilder.AddProperty("children", GetNodesJsArray(node.Nodes, includeListeners)); - } - - #endregion - - #region SingleClickExpand - - if (node.SingleClickExpand) - { - nodeBuilder.AddProperty("singleClickExpand", true); - } - - #endregion - - nodesBuilder.AddProperty(nodeBuilder); - } - - return nodesBuilder; - } - - */ - #endregion - - #endregion - - #region DataBind - - /// <summary> - /// 绑定数据源 - /// </summary> - /// <seealso cref="DataSource" /> - public override void DataBind() - { - if (_dataSource != null) - { - // 重新绑定数据前清空选中的值 - SelectedNodeIDArray = null; - - // 清空所有节点 - Nodes.Clear(); - - if (DataSource is DataSet) - { - DataSet ds = DataSource as DataSet; - - DataBindToXml(ds.GetXml()); - } - else if (DataSource is XmlDataSource) - { - XmlDataSource xds = DataSource as XmlDataSource; - XmlDocument xdoc = xds.GetXmlDocument(); - - DataBindToXml(xdoc.OuterXml); - } - else if (DataSource is XmlDocument) - { - XmlDocument xdoc = DataSource as XmlDocument; - - DataBindToXml(xdoc.OuterXml); - } - //else if (this.DataSource is IHierarchicalDataSource) - //{ - // IHierarchicalDataSource oDS = (IHierarchicalDataSource)(this.DataSource); - - // this.LoadFromHierarchy(oDS.GetHierarchicalView("").Select(), null); - //} - else - { - throw new Exception("不支持的数据源类型:" + _dataSource.GetType().ToString()); - } - } - - base.DataBind(); - } - - #endregion - - #region internal methods - - #region FixTreeNodes - - /// <summary> - /// 如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 - /// 同时处理 AutoLeafIdentification 属性 - /// </summary> - internal void FixTreeNodes() - { - FixTreeNodes(Nodes); - } - - private void FixTreeNodes(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (!node.Leaf) - { - if (node.Nodes.Count == 0) - { - if (node.Expanded) - { - node.Expanded = false; - } - // If this node has no child and it's not a leaf node - // And AutoLeafIdentification is enabled, then make this node a leaf node. - if (AutoLeafIdentification) - { - node.Leaf = true; - } - } - - if (node.Nodes.Count > 0) - { - FixTreeNodes(node.Nodes); - } - - } - } - } - - #endregion - - #region DataBindToXml - - private void DataBindToXml(string xml) - { - XmlDocument xdoc = new XmlDocument(); - xdoc.LoadXml(xml); - - DataBindToXml(xdoc); - } - - private void DataBindToXml(XmlDocument xdoc) - { - XmlNodeList nodes = xdoc.DocumentElement.ChildNodes; - - foreach (XmlNode node in nodes) - { - if (node.NodeType == XmlNodeType.Element) - { - TreeNode treeNode = new TreeNode(); - Nodes.Add(treeNode); - - LoadXmlNode(treeNode, node); - - //OnNodeDataBound(oNewNode, node); - } - } - } - - private void LoadXmlNode(TreeNode treeNode, XmlNode xmlNode) - { - treeNode.ReadXmlAttributes(xmlNode.Attributes, this); - - foreach (XmlNode node in xmlNode.ChildNodes) - { - // Only process Xml elements (ignore comments, etc) - if (node.NodeType == XmlNodeType.Element) - { - TreeNode childNode = new TreeNode(); - treeNode.Nodes.Add(childNode); - - LoadXmlNode(childNode, node); - - //OnNodeDataBound(oNewNode, node); - } - } - - } - - #endregion - - #region GetXmlAttributeMappingFrom - - internal string GetXmlAttributeMappingFrom(string toValue) - { - if (Mappings.Count > 0) - { - for (int i = 0; i < Mappings.Count; i++) - { - XmlAttributeMapping mapping = Mappings[i]; - - if (mapping.To == toValue) - { - return mapping.From; - } - } - } - - return toValue; - } - - internal string GetXmlAttributeMappingTo(string fromValue) - { - if (Mappings.Count > 0) - { - for (int i = 0; i < Mappings.Count; i++) - { - XmlAttributeMapping mapping = Mappings[i]; - - if (mapping.From == fromValue) - { - return mapping.To; - } - } - } - - return fromValue; - } - - #endregion - - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - base.LoadPostData(postDataKey, postCollection); - - // 选中的行 - string[] selectedNodeIDArray = StringUtil.GetStringListFromString(postCollection[SelectedNodeIDArrayHiddenFieldID], true).ToArray(); - if (!StringUtil.CompareStringArray(SelectedNodeIDArray, selectedNodeIDArray)) - { - SelectedNodeIDArray = selectedNodeIDArray; - XState.BackupPostDataProperty("SelectedNodeIDArray"); - } - - - // Expanded Nodes - string expandedNodesPostValue = postCollection[ExpandedNodesHiddenFieldID]; - List<string> expandedNodeListPostValue = StringUtil.GetStringListFromString(expandedNodesPostValue, true); - // 1. Collapse some nodes that have been expanded. - TreeNode[] originalExpandedNodes = GetExpandedNodes(); - foreach (TreeNode node in originalExpandedNodes) - { - if (!expandedNodeListPostValue.Contains(node.NodeID)) - { - node.Expanded = false; - } - } - // 2. Expand the post nodes. - foreach (string nodeID in expandedNodeListPostValue) - { - FindNode(nodeID).Expanded = true; - } - - - // Checked Nodes - string checkedNodesPostValue = postCollection[CheckedNodesHiddenFieldID]; - List<string> checkedNodeListPostValue = StringUtil.GetStringListFromString(checkedNodesPostValue, true); - // 1. Uncheck some nodes that have been checked. - TreeNode[] originalCheckedNodes = GetCheckedNodes(); - foreach (TreeNode node in originalCheckedNodes) - { - if (!checkedNodeListPostValue.Contains(node.NodeID)) - { - node.Checked = false; - } - } - // 2. Check the post nodes. - foreach (string nodeID in checkedNodeListPostValue) - { - FindNode(nodeID).Checked = true; - } - - XState.BackupPostDataProperty("X_Nodes"); - - - return false; - } - - //public override void RaisePostDataChangedEvent() - //{ - // //OnCollapsedChanged(EventArgs.Empty); - //} - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - if (eventArgument.StartsWith("Command$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 4) - { - OnNodeCommand(new TreeCommandEventArgs(FindNode(commandArgs[1]), commandArgs[2], commandArgs[3])); - } - } - else if (eventArgument.StartsWith("Expand$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 2) - { - OnNodeExpand(new TreeExpandEventArgs(FindNode(commandArgs[1]))); - } - } - else if (eventArgument.StartsWith("Check$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 3) - { - OnNodeCheck(new TreeCheckEventArgs(FindNode(commandArgs[1]), Convert.ToBoolean(commandArgs[2]))); - } - } - - } - - #endregion - - #region OnNodeCheck - - private static readonly object _nodeCheckHandlerKey = new object(); - - /// <summary> - /// 节点选中事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("节点选中事件")] - public event EventHandler<TreeCheckEventArgs> NodeCheck - { - add - { - Events.AddHandler(_nodeCheckHandlerKey, value); - } - remove - { - Events.RemoveHandler(_nodeCheckHandlerKey, value); - } - } - - /// <summary> - /// 触发节点选中事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnNodeCheck(TreeCheckEventArgs e) - { - EventHandler<TreeCheckEventArgs> handler = Events[_nodeCheckHandlerKey] as EventHandler<TreeCheckEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnNodeCommand - - private static readonly object _nodeCommandHandlerKey = new object(); - - /// <summary> - /// 节点点击事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("节点点击事件")] - public event EventHandler<TreeCommandEventArgs> NodeCommand - { - add - { - Events.AddHandler(_nodeCommandHandlerKey, value); - } - remove - { - Events.RemoveHandler(_nodeCommandHandlerKey, value); - } - } - - /// <summary> - /// 触发节点点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnNodeCommand(TreeCommandEventArgs e) - { - EventHandler<TreeCommandEventArgs> handler = Events[_nodeCommandHandlerKey] as EventHandler<TreeCommandEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnNodeExpand - - private static readonly object _nodeExpandHandlerKey = new object(); - - /// <summary> - /// 节点展开事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("节点展开事件")] - public event EventHandler<TreeExpandEventArgs> NodeExpand - { - add - { - Events.AddHandler(_nodeExpandHandlerKey, value); - } - remove - { - Events.RemoveHandler(_nodeExpandHandlerKey, value); - } - } - - /// <summary> - /// 触发节点展开事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnNodeExpand(TreeExpandEventArgs e) - { - EventHandler<TreeExpandEventArgs> handler = Events[_nodeExpandHandlerKey] as EventHandler<TreeExpandEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region Public Methods - - #region GetExpandedNodes - - /// <summary> - /// 获取所有展开节点的ID数组 - /// </summary> - /// <returns>节点的ID数组</returns> - public string[] GetExpandedNodeIDs() - { - return GetExpandedNodeIDs(Nodes); - } - - /// <summary> - /// 获取指定节点集合中所有展开节点的ID数组 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - /// <returns>节点的ID数组</returns> - public string[] GetExpandedNodeIDs(TreeNodeCollection nodes) - { - List<string> expandedNodeIDs = new List<string>(); - TreeNode[] expandedNodes = GetExpandedNodes(nodes); - foreach (TreeNode node in expandedNodes) - { - expandedNodeIDs.Add(node.NodeID); - } - return expandedNodeIDs.ToArray(); - } - - /// <summary> - /// 获取所有展开节点的数组 - /// </summary> - /// <returns>节点的数组</returns> - public TreeNode[] GetExpandedNodes() - { - return GetExpandedNodes(Nodes); - } - - /// <summary> - /// 获取指定节点集合中所有展开节点的数组 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - /// <returns>节点的数组</returns> - public TreeNode[] GetExpandedNodes(TreeNodeCollection nodes) - { - List<TreeNode> returnNodes = new List<TreeNode>(); - ResolveExpandedNodes(returnNodes, nodes); - return returnNodes.ToArray(); - } - - private void ResolveExpandedNodes(List<TreeNode> returnNodes, TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (!node.Leaf && node.Expanded) - { - returnNodes.Add(node); - } - - if (node.Nodes != null && node.Nodes.Count > 0) - { - ResolveExpandedNodes(returnNodes, node.Nodes); - } - } - } - - #endregion - - #region CollapseAllNodes/ExpandAllNodes - - /// <summary> - /// 折叠所有节点 - /// </summary> - public void CollapseAllNodes() - { - CollapseAllNodes(Nodes); - } - - /// <summary> - /// 折叠指定节点集合中的所有节点 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - public void CollapseAllNodes(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (!node.Leaf) - { - node.Expanded = false; - - if (node.Nodes != null && node.Nodes.Count > 0) - { - CollapseAllNodes(node.Nodes); - } - } - } - } - - /// <summary> - /// 展开所有节点 - /// </summary> - public void ExpandAllNodes() - { - ExpandAllNodes(Nodes); - } - - /// <summary> - /// 展开指定节点集合中的所有节点 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - public void ExpandAllNodes(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (!node.Leaf) - { - node.Expanded = true; - - if (node.Nodes != null && node.Nodes.Count > 0) - { - ExpandAllNodes(node.Nodes); - } - } - } - } - - #endregion - - #region GetCheckedNodes - - /// <summary> - /// 获取选中节点的ID数组 - /// </summary> - /// <returns>节点的ID数组</returns> - public string[] GetCheckedNodeIDs() - { - return GetCheckedNodeIDs(Nodes); - } - - /// <summary> - /// 获取指定节点集合中选中节点的ID数组 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - /// <returns>节点的ID数组</returns> - public string[] GetCheckedNodeIDs(TreeNodeCollection nodes) - { - List<string> checkedNodeIDs = new List<string>(); - TreeNode[] checkedNodes = GetCheckedNodes(nodes); - foreach (TreeNode node in checkedNodes) - { - checkedNodeIDs.Add(node.NodeID); - } - return checkedNodeIDs.ToArray(); - } - - /// <summary> - /// 获取选中节点的数组 - /// </summary> - /// <returns>节点的数组</returns> - public TreeNode[] GetCheckedNodes() - { - return GetCheckedNodes(Nodes); - } - - /// <summary> - /// 获取指定节点集合中选中节点的数组 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - /// <returns>节点的数组</returns> - public TreeNode[] GetCheckedNodes(TreeNodeCollection nodes) - { - List<TreeNode> rtList = new List<TreeNode>(); - ResolveCheckedNodes(rtList, nodes); - return rtList.ToArray(); - } - - - private void ResolveCheckedNodes(List<TreeNode> rtList, TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (node.EnableCheckBox && node.Checked) - { - rtList.Add(node); - } - - if (node.Nodes != null && node.Nodes.Count > 0) - { - ResolveCheckedNodes(rtList, node.Nodes); - } - } - } - - #endregion - - #region CheckAllNodes UncheckAllNodes - - /// <summary> - /// 选中所有节点的复选框 - /// </summary> - public void CheckAllNodes() - { - CheckAllNodes(Nodes); - } - - /// <summary> - /// 选中指定节点的复选框 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - public void CheckAllNodes(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (node.EnableCheckBox) - { - node.Checked = true; - } - - if (!node.Leaf && node.Nodes != null && node.Nodes.Count > 0) - { - CheckAllNodes(node.Nodes); - } - - } - } - - /// <summary> - /// 反选所有节点的复选框 - /// </summary> - public void UncheckAllNodes() - { - UncheckAllNodes(Nodes); - } - - /// <summary> - /// 反选指定节点的复选框 - /// </summary> - /// <param name="nodes">指定的节点集合</param> - public void UncheckAllNodes(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - if (node.EnableCheckBox) - { - node.Checked = false; - } - - if (!node.Leaf && node.Nodes != null && node.Nodes.Count > 0) - { - UncheckAllNodes(node.Nodes); - } - } - } - - #endregion - - #region FindNode - - /// <summary> - /// 查找树节点 - /// </summary> - /// <param name="nodeId">节点ID</param> - /// <returns>树节点</returns> - public TreeNode FindNode(string nodeId) - { - return FindNode(nodeId, Nodes); - } - - /// <summary> - /// 在指定的节点集合中查找树节点 - /// </summary> - /// <param name="nodeId">节点ID</param> - /// <param name="nodes">指定的节点集合</param> - /// <returns>树节点</returns> - public TreeNode FindNode(string nodeId, TreeNodeCollection nodes) - { - if (nodes.Count == 0) - { - return null; - } - - foreach (TreeNode node in nodes) - { - if (node.NodeID == nodeId) - { - return node; - } - - if (node.Nodes.Count > 0) - { - TreeNode childNode = FindNode(nodeId, node.Nodes); - - if (childNode != null) - { - return childNode; - } - } - } - - return null; - } - - #endregion - - #region GetExpandAllNodesReference GetCollapseAllNodesReference - - /// <summary> - /// 获取展开全部节点的的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetExpandAllNodesReference() - { - return String.Format("{0}.expandAll();", ScriptID); - } - - /// <summary> - /// 获取折叠全部节点的的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetCollapseAllNodesReference() - { - return String.Format("{0}.collapseAll();", ScriptID); - } - - #endregion - - #region oldcode - - //public void ClearNodes() - //{ - // CheckedNodeIDArray = null; - // SelectedNodeID = null; - // ExpandedNodeIDArray = null; - // Nodes.Clear(); - //} - - //public TreeNode AddNode() - //{ - // TreeNode node = new TreeNode(); - // Nodes.Add(node); - - // return node; - //} - - #endregion - - #endregion - - #region oldcode - - //[Description("Ajax回发时强制更新此控件全部内容")] - //internal override bool AjaxForceCompleteUpdate - //{ - // get - // { - // return true; - // } - //} - - #endregion - - #region oldcode - - //private int _nextNodeIndex = 0; - - ///// <summary> - ///// 获取下一个节点的ID,为那些没有设置NodeId的节点自定设置NodeId - ///// </summary> - ///// <returns></returns> - //internal string GetNextNodeId() - //{ - // return String.Format("{0}_n{1}", ClientJavascriptID, _nextNodeIndex++); - //} - - #endregion - - #region oldcode - - //protected override object SaveViewState() - //{ - // object[] states = new object[] { - // base.SaveViewState(), - // ((IStateManager)Nodes).SaveViewState(), - // ((IStateManager)Mappings).SaveViewState() - // }; - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Nodes).LoadViewState(states[1]); - - // ((IStateManager)Mappings).LoadViewState(states[2]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Nodes).TrackViewState(); - - // ((IStateManager)Mappings).TrackViewState(); - //} - - #endregion - - #region oldcode - - ///// <summary> - ///// 展开的行 - ///// </summary> - //[DefaultValue(null)] - //[Description("展开的行")] - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public string[] ExpandedNodeIDArray - //{ - // get - // { - // //// We don't need to save this state in ViewState, because TreeNode has it's state persistance. - // //object obj = BoxState["ExpandedNodeIDArray"]; - - // //if (obj == null) - // //{ - // // obj = BoxState["ExpandedNodeIDArray"] = GetExpandedNodeIDArray(); - // //} - - // //return (string[])obj; - // return GetExpandedNodeIDArray(); - // } - // set - // { - // if (value != null) - // { - // List<string> strList = new List<string>(value); - - // // 折叠所有节点,只展开value中的节点 - // CollapseAllNodes(); - // foreach (string nodeId in strList) - // { - // FindNode(nodeId).Expanded = true; - // } - - // BoxState["ExpandedNodeIDArray"] = strList.ToArray(); - // } - // else - // { - // BoxState["ExpandedNodeIDArray"] = new string[0] { }; - // } - // } - //} - - ///// <summary> - ///// 选中的行 - ///// </summary> - //[DefaultValue(null)] - //[Description("选中的行")] - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public string[] CheckedNodeIDArray - //{ - // get - // { - // object obj = BoxState["CheckedNodeIDArray"]; - - // if (obj == null) - // { - // obj = BoxState["CheckedNodeIDArray"] = GetCheckedNodeIDArray(); - // } - - // return (string[])obj; - // } - // set - // { - // if (value != null) - // { - // List<string> strList = new List<string>(value); - - // // 不选中所有节点,只选中value中的节点 - // UncheckAllNodes(); - // foreach (string nodeId in strList) - // { - // TreeNode node = FindNode(nodeId); - // if (node.EnableCheckBox) - // { - // node.Checked = true; - // } - // } - - // BoxState["CheckedNodeIDArray"] = strList.ToArray(); - // } - // else - // { - // BoxState["CheckedNodeIDArray"] = new string[0] { }; - // } - // } - //} - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Tree.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using System.Web.UI.HtmlControls; +using System.Data; +using System.Xml; + +namespace FineUI +{ + /// <summary> + /// 树控件 + /// </summary> + [Designer("FineUI.Design.TreeDesigner, FineUI.Design")] + [ToolboxData("<{0}:Tree Title=\"Tree\" AutoScroll=\"true\" runat=\"server\"></{0}:Tree>")] + [ToolboxBitmap(typeof(Tree), "toolbox.Tree.bmp")] + [Description("树控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Tree : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Tree() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("F_Nodes", "SelectedNodeIDArray"); + + AddGzippedAjaxProperties("F_Nodes"); + } + + //internal int NodeIDIncrement = 0; + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Container; + } + } + + #endregion + + #region Properties + + + /// <summary> + /// 单击切换节点的折叠展开状态 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("单击切换节点的折叠展开状态")] + public bool EnableSingleClickExpand + { + get + { + object obj = FState["EnableSingleClickExpand"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSingleClickExpand"] = value; + } + } + + /// <summary> + /// 启用箭头 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用箭头")] + public bool EnableArrows + { + get + { + object obj = FState["EnableArrows"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableArrows"] = value; + } + } + + /// <summary> + /// 启用节点之间连线 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用节点之间连线")] + public bool EnableLines + { + get + { + object obj = FState["EnableLines"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableLines"] = value; + } + } + + /// <summary> + /// 启用动画 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用动画")] + public bool EnableAnimate + { + get + { + object obj = FState["EnableAnimate"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableAnimate"] = value; + } + } + + /// <summary> + /// 每次只能展开一个 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("每次只能展开一个")] + public bool EnableSingleExpand + { + get + { + object obj = FState["EnableSingleExpand"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSingleExpand"] = value; + } + } + + + + + /// <summary> + /// 启用图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用图标")] + public bool EnableIcons + { + get + { + object obj = FState["EnableIcons"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableIcons"] = value; + } + } + + /// <summary> + /// 自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性(默认:true) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性")] + public bool AutoLeafIdentification + { + get + { + object obj = FState["AutoLeafIdentification"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["AutoLeafIdentification"] = value; + } + } + + + /// <summary> + /// 启用多行选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用多行选择")] + public bool EnableMultiSelect + { + get + { + object obj = FState["EnableMultiSelect"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMultiSelect"] = value; + } + } + + #endregion + + #region DataSource + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region Nodes + + private TreeNodeCollection _nodes; + + /// <summary> + /// 树节点集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("树节点集合")] + public virtual TreeNodeCollection Nodes + { + get + { + if (_nodes == null) + { + // 如果不加上 DesignMode 的判断,则在设计时出现如下错误 + // 无法从TreeInstance属性的字符串表示形式创建FineUI.Tree类型的对象 + if (DesignMode) + { + _nodes = new TreeNodeCollection(null, null); + } + else + { + _nodes = new TreeNodeCollection(this, null); + } + } + return _nodes; + } + } + #endregion + + #region SelectedNodeIDArray + + /// <summary> + /// 选中的树节点 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public TreeNode SelectedNode + { + get + { + return FindNode(SelectedNodeID); + } + } + + /// <summary> + /// [AJAX属性]选中的树节点ID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]选中的行节点ID")] + public string SelectedNodeID + { + get + { + if (SelectedNodeIDArray.Length > 0) + { + return SelectedNodeIDArray[0]; + } + else + { + return String.Empty; + } + } + set + { + SelectedNodeIDArray = new string[] { value }; + } + } + + /// <summary> + /// [AJAX属性]选中的树节点ID列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中的行节点ID列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] SelectedNodeIDArray + { + get + { + object obj = FState["SelectedNodeIDArray"]; + return obj == null ? new string[] { } : (string[])obj; + } + set + { + // 排序主要是为了拿两次的值做比较 + FState["SelectedNodeIDArray"] = GetSortedArray(value).ToArray(); + } + } + + private List<string> GetSortedArray(string[] value) + { + List<string> list = new List<string>(); + if (value != null) + { + list.AddRange(value); + list.Sort(); + } + return list; + } + + #endregion + + #region Mappings + + private XmlAttributeMappingCollection _mappings; + + /// <summary> + /// 树控件属性与数据源节点的映射关系 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("树控件属性与数据源节点的映射关系")] + public virtual XmlAttributeMappingCollection Mappings + { + get + { + if (_mappings == null) + { + _mappings = new XmlAttributeMappingCollection(); + } + return _mappings; + } + } + #endregion + + #region HiddenFieldID + + /// <summary> + /// 选中行 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedNodeIDArrayHiddenFieldID + { + get + { + return String.Format("{0}_SelectedNodeIDArray", ClientID); + } + } + + /// <summary> + /// 展开的节点列表 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ExpandedNodesHiddenFieldID + { + get + { + return String.Format("{0}_ExpandedNodes", ClientID); + } + } + + /// <summary> + /// 选中的节点列表 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string CheckedNodesHiddenFieldID + { + get + { + return String.Format("{0}_CheckedNodes", ClientID); + } + } + + + #endregion + + #region F_Nodes + + /// <summary> + /// 树节点集合的 JSON 表示(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Nodes + { + get + { + return GetNodesJArray(Nodes); + } + set + { + // 从请求中恢复 Nodes 属性,这个 set 方法在 OnInit 中被调用 + Nodes.Clear(); + FromNodesJArray(value, Nodes); + } + } + + #region FromNodesJArray GetNodesJArray + + private void FromNodesJArray(JArray ja, TreeNodeCollection nodes) + { + foreach (JArray ja2 in ja) + { + TreeNode treeNode = new TreeNode(); + nodes.Add(treeNode); + + // 0 - Text + // 1 - Leaf + // 2 - NodeID + // 3 - Enabled + // 4 - EnableCheckBox + // 5 - Checked + // 6 - Expanded + // 7 - NavigateUrl + // 8 - Target + // 9 - href + // 10 - Icon + // 11 - IconUrl + // 12 - iconUrl - 这个是客户端用来生成图标的 + // 13 - ToolTip + // 14 - OnClientClick + // 15 - EnableClickEvent + // 16 - CommandName + // 17 - CommandArgument + + // 18 - EnableCheckEvent + // 19 - EnableExpandEvent + // 20 - EnableCollapseEvent + + // 21 - Nodes + treeNode.Text = ja2[0].Value<string>(); //ja2.getString(0); + treeNode.Leaf = ja2[1].Value<int>() == 1 ? true : false; + treeNode.NodeID = ja2[2].Value<string>(); ; + treeNode.Enabled = ja2[3].Value<int>() == 1 ? true : false; + treeNode.EnableCheckBox = ja2[4].Value<int>() == 1 ? true : false; + treeNode.Checked = ja2[5].Value<int>() == 1 ? true : false; + treeNode.Expanded = ja2[6].Value<int>() == 1 ? true : false; + treeNode.NavigateUrl = ja2[7].Value<string>(); + treeNode.Target = ja2[8].Value<string>(); + string iconName = ja2[10].Value<string>(); + if (String.IsNullOrEmpty(iconName)) + { + iconName = StringUtil.EnumToName(Icon.None); + } + treeNode.Icon = (Icon)StringUtil.EnumFromName(typeof(Icon), iconName); + treeNode.IconUrl = ja2[11].Value<string>(); + treeNode.ToolTip = ja2[13].Value<string>(); + + treeNode.OnClientClick = ja2[14].Value<string>(); + treeNode.EnableClickEvent = ja2[15].Value<int>() == 1 ? true : false; + treeNode.CommandName = ja2[16].Value<string>(); + treeNode.CommandArgument = ja2[17].Value<string>(); + + + treeNode.EnableCheckEvent = ja2[18].Value<int>() == 1 ? true : false; + + treeNode.EnableExpandEvent = ja2[19].Value<int>() == 1 ? true : false; + treeNode.EnableCollapseEvent = ja2[20].Value<int>() == 1 ? true : false; + + + + JArray childNodes = ja2[21].Value<JArray>(); + if (childNodes != null && childNodes.Count > 0) + { + FromNodesJArray(childNodes, treeNode.Nodes); + } + } + } + + private JArray GetNodesJArray(TreeNodeCollection nodes) + { + JArray ja = new JArray(); + foreach (TreeNode node in nodes) + { + JArray ja2 = new JArray(); + + // 0 - Text + // 1 - Leaf + // 2 - NodeID + // 3 - Enabled + // 4 - EnableCheckBox + // 5 - Checked + // 6 - Expanded + // 7 - NavigateUrl + // 8 - Target + // 9 - href + // 10 - Icon + // 11 - IconUrl + // 12 - iconUrl - 这个是客户端用来生成图标的 + // 13 - ToolTip + // 14 - OnClientClick + // 15 - EnableClickEvent + // 16 - CommandName + // 17 - CommandArgument + + // 18 - EnableCheckEvent + // 19 - EnableExpandEvent + // 20 - EnableCollapseEvent + + // 21 - Nodes + ja2.Add(node.Text); + ja2.Add(node.Leaf ? 1 : 0); + ja2.Add(node.NodeID); + ja2.Add(node.Enabled ? 1 : 0); + ja2.Add(node.EnableCheckBox ? 1 : 0); + ja2.Add(node.Checked ? 1 : 0); + ja2.Add(node.Expanded ? 1 : 0); + + ja2.Add(node.NavigateUrl); + ja2.Add(node.Target); + ja2.Add(ResolveUrl(node.NavigateUrl)); + + ja2.Add(node.Icon == Icon.None ? "" : StringUtil.EnumToName(node.Icon)); + ja2.Add(String.IsNullOrEmpty(node.IconUrl) ? "" : node.IconUrl); + ja2.Add(IconHelper.GetResolvedIconUrl(node.Icon, node.IconUrl)); + + ja2.Add(String.IsNullOrEmpty(node.ToolTip) ? "" : node.ToolTip); + + ja2.Add(node.OnClientClick); + ja2.Add(node.EnableClickEvent ? 1 : 0); + ja2.Add(node.CommandName); + ja2.Add(node.CommandArgument); + + + ja2.Add(node.EnableCheckEvent ? 1 : 0); + + ja2.Add(node.EnableExpandEvent ? 1 : 0); + ja2.Add(node.EnableCollapseEvent ? 1 : 0); + + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ja2.Add(GetNodesJArray(node.Nodes)); + } + else + { + ja2.Add(new JArray()); + } + + ja.Add(ja2); + + #region old code - JObject + + //JObject jo = new JObject(); + + //jo.Add("Text", node.Text); + //jo.Add("Leaf", node.Leaf); + //jo.Add("NodeID", node.NodeID); + //jo.Add("Enabled", node.Enabled); + //jo.Add("EnableCheckBox", node.EnableCheckBox); + //jo.Add("Checked", node.Checked); + //jo.Add("Expanded", node.Expanded); + + //jo.Add("NavigateUrl", node.NavigateUrl); + //jo.Add("Target", node.Target); + //jo.Add("href", ResolveUrl(node.NavigateUrl)); + + //jo.Add("Icon", StringUtil.EnumToName(node.Icon)); + //jo.Add("IconUrl", node.IconUrl); + //jo.Add("iconUrl", GetResolvedIconUrl(node.Icon, IconUrl)); + + //jo.Add("ToolTip", node.ToolTip); + + //jo.Add("SingleClickExpand", node.SingleClickExpand); + + //jo.Add("OnClientClick", node.OnClientClick); + //jo.Add("EnablePostBack", node.EnablePostBack); + + //jo.Add("AutoPostBack", node.AutoPostBack); + //jo.Add("CommandName", node.CommandName); + //jo.Add("CommandArgument", node.CommandArgument); + + //if (node.Nodes != null && node.Nodes.Count > 0) + //{ + // jo.Add("Nodes", GetNodesJArray(node.Nodes)); + //} + + //ja.Add(jo); + + #endregion + + #region old code + //#region options + + //jo.Add("text", node.Text); + //jo.Add("leaf", node.Leaf); + //jo.Add("id", node.NodeID); + //if (!node.Enabled) + //{ + // jo.Add("disabled", true); + //} + //if (node.EnableCheckBox) + //{ + // jo.Add("checked", node.Checked); + //} + //// Leaf doesn't has expanded property. + //if (!node.Leaf) + //{ + // jo.Add("expanded", node.Expanded); + //} + + //#endregion + + //#region href + + //if (!String.IsNullOrEmpty(node.NavigateUrl)) + //{ + // jo.Add("href", ResolveUrl(node.NavigateUrl)); + + // if (!String.IsNullOrEmpty(node.Target)) + // { + // jo.Add("hrefTarget", node.Target); + // } + //} + + //#endregion + + //#region IconUrl + + //if (!String.IsNullOrEmpty(node.IconUrl)) + //{ + // jo.Add("icon", ResolveUrl(node.IconUrl)); + + // #region old code + // // 添加CSS样式,这种方法添加的图片位置靠上 + // // string className = AddStartupCSS(String.Format("{0}-button-icon-image", ClientID), + // // GetBackgroundStyleCss(ResolveUrl(IconUrl))); + + // //OB.AddProperty(OptionName.IconCls, className); + // #endregion + //} + + //#endregion + + //#region qtip + + //if (!String.IsNullOrEmpty(node.ToolTip)) + //{ + // jo.Add("qtip", node.ToolTip); + //} + + //#endregion + + //#region SingleClickExpand + + //if (node.SingleClickExpand) + //{ + // jo.Add("singleClickExpand", true); + //} + + //#endregion + + //#region old code + + ////JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + + ////#region old code + + //////// 展开时判断是否需要到后台取数据 + ////////listenersBuilder.AddProperty("beforeappend", String.Format("function(node,deep,anim){{\r\nif(!node.loaded){{alert(node.id);\r\n}}}}"), true); + + //////// 折叠/展开 + ////////listenersBuilder.AddProperty(OptionName.Expand, String.Format("function(node){{F.util.addValueToHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + ////////listenersBuilder.AddProperty(OptionName.Collapse, String.Format("function(node){{F.util.removeValueFromHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + //////listenersBuilder.AddProperty("expand", Render_NodeExpandScriptID, true); + //////listenersBuilder.AddProperty("collapse", Render_NodeCollapseScriptID, true); + + + ////#endregion + + ////#region Click Event + + ////// 如果禁用此节点,则不响应点击事件(不可选中) + ////// Added by sanshi.ustc#gmail.com 2009-8-24 + ////if (!node.Enabled) + ////{ + //// listenersBuilder.AddProperty("beforeclick", "function(){return false;}", true); + ////} + + ////string clickScript = node.OnClientClick; + ////if (!String.IsNullOrEmpty(clickScript) && !clickScript.EndsWith(";")) + ////{ + //// clickScript += ";"; + ////} + ////if (node.EnablePostBack) + ////{ + //// string paramStr = String.Format("Command${0}${1}${2}", node.NodeID, node.CommandName.Replace("'", "\""), node.CommandArgument.Replace("'", "\"")); + //// clickScript += GetPostBackEventReference(paramStr); + ////} + ////if (!String.IsNullOrEmpty(clickScript)) + ////{ + //// listenersBuilder.AddProperty("click", JsHelper.GetFunction(clickScript, "node"), true); + ////} + + ////#endregion + + ////#region CheckBox - AutoPostback + + ////// CheckBox选中 + ////if (node.EnableCheckBox) + ////{ + //// string checkchangeScript = String.Empty; + + //// // 自动回发到服务器 + //// checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); + //// checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); + + //// listenersBuilder.AddProperty("checkchange", JsHelper.GetFunction(checkchangeScript, "node", "checked"), true); + + //// #region old code + //// //if (!node.AutoPostBack) + //// //{ + //// // // 改变CheckBox,不需要自动回发,则将checkchange指向预定义的函数,这有助于减少代码量 + //// // //listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{if(checked){{F.util.addValueToHiddenField('{0}',node.id);}}else{{F.util.removeValueFromHiddenField('{0}',node.id);}}}}", CheckedNodesHiddenFieldID), true); + //// // listenersBuilder.AddProperty("checkchange", Render_NodeCheckChangeScriptID, true); + //// //} + //// //else + //// //{ + //// // string checkchangeScript = String.Empty; + + //// // // 改变页面中隐藏字段的值 + //// // checkchangeScript += String.Format("{0}.apply(window, [node, checked]);", Render_NodeCheckChangeScriptID); + + //// // // 自动回发到服务器 + //// // checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); + //// // checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); + + //// // listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{{0}}}", checkchangeScript), true); + //// //} + //// #endregion + ////} + + ////#endregion + + ////jo.Add("listeners", listenersBuilder); + + //#endregion + #endregion + } + + return ja; + } + + #endregion + + #endregion + + #region OnPreRender + + #region Render_StoreID + + private string Render_StoreID + { + get + { + return String.Format("{0}_store", XID); + } + } + + #region oldcode + + //private string Render_NodesID + //{ + // get + // { + // return String.Format("{0}_nodes", XID); + // } + //} + + + //private string Render_RootId + //{ + // get + // { + // return String.Format("{0}_root", ClientJavascriptID); + // } + //} + + //private string Render_SelectModelID + //{ + // get + // { + // return String.Format("{0}_select_model", XID); + // } + //} + + //private string Render_NodeExpandScriptID + //{ + // get + // { + // return String.Format("{0}_node_expand", XID); + // } + //} + + //private string Render_NodeCollapseScriptID + //{ + // get + // { + // return String.Format("{0}_node_collapse", XID); + // } + //} + + //private string Render_NodeClickScriptID + //{ + // get + // { + // return String.Format("{0}_node_click", XID); + // } + //} + + //private string Render_NodeCheckChangeScriptID + //{ + // get + // { + // return String.Format("{0}_node_checkchange", XID); + // } + //} + #endregion + + #endregion + + #region OnPreRender + + /// <summary> + /// 初始化控件 + /// </summary> + protected override void OnInitControl() + { + base.OnInitControl(); + + // 修复Tree的节点,这里可能会修改树节点的属性,从而影响 F_Nodes 的计算结果 + // 在这个地方调用是安全的: + // -> 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 + // -> 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 F_STATE 已经恢复完毕 + FixTreeNodes(); + } + + /// <summary> + /// 渲染 HTML 之前调用 + /// </summary> + protected override void OnBothPreRender() + { + base.OnBothPreRender(); + + // Nodes 属性有可能在页面加载后被用户修改,比如绑定数据,所以在输出之前应该调用此函数 + FixTreeNodes(); + } + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + bool reloaded = false; + if (PropertyModified("F_Nodes")) + { + sb.AppendFormat("{0}.f_loadData();", XID); + reloaded = true; + } + + if (reloaded) + { + // 如果重新加载了数据,则要重新设置选中项 + sb.AppendFormat("{0}.f_selectNodes();", XID); + } + else + { + if (PropertyModified("SelectedNodeIDArray")) + { + sb.AppendFormat("{0}.f_selectNodes();", XID); + } + } + + AddAjaxScript(sb); + } + + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Nodes 在页面第一次加载时都存在于 F_STATE 中,因为客户端需要这个数据来渲染树控件 + // 并且这个代码要放在 base.OnFirstPreRender(); 之前,因为在那里面会生成 F_STATE + FState.AddModifiedProperty("F_Nodes"); + + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("tree"); + + #region options + + OB.AddProperty("useArrows", EnableArrows); + OB.AddProperty("lines", EnableLines); + + OB.AddProperty("animate", EnableAnimate); + + OB.AddProperty("singleExpand", EnableSingleExpand); + + + if (!EnableIcons) + { + OB.AddProperty("bodyCls", "x-tree-noicon"); + } + + + // 这个为了在客户端生成 PostBack 脚本,比如 __doPostBack('RegionPanel1$TreePanel1','') + OB.AddProperty("name", UniqueID); + + #endregion + + #region oldcode + + //string hiddenFieldsScript = String.Empty; + + //// 选中的行 + //hiddenFieldsScript += GetSetHiddenFieldValueScript(SelectedNodeHiddenFieldID, SelectedNode == null ? "" : SelectedNode.NodeID); + + //// 展开的行 + //hiddenFieldsScript += GetSetHiddenFieldValueScript(ExpandedNodesHiddenFieldID, StringUtil.GetStringFromStringArray(GetExpandedNodeIDs())); + + //// 选中的行 + //hiddenFieldsScript += GetSetHiddenFieldValueScript(CheckedNodesHiddenFieldID, StringUtil.GetStringFromStringArray(GetCheckedNodeIDs())); + + + #endregion + + #region Loader + + string loaderScript = String.Empty; + + JsObjectBuilder loaderBuilder = new JsObjectBuilder(); + + + JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + + string paramStr = String.Format("LazyLoad${0}", "#ID#"); + string postBackScript = GetPostBackEventReference(paramStr); + postBackScript = postBackScript.Replace("#ID#'", "'+op.id"); + listenersBuilder.AddProperty("beforeload", String.Format("function(store,op){{if(op.action==='read'&&op.id!=='root'){{{0}}}return false;}}", postBackScript), true); + + //listenersBuilder.AddProperty(OptionName.Scope, "box", true); + loaderBuilder.AddProperty("listeners", listenersBuilder); + // 必须添加dataUrl,才会引发beforeload事件 + //loaderBuilder.AddProperty("dataUrl", "about:blank"); + //loaderBuilder.AddProperty("preloadChildren", true); + //loaderBuilder.AddProperty("clearOnLoad", false); + + loaderScript = String.Format("var {0}=Ext.create('Ext.data.TreeStore',{1});", Render_StoreID, loaderBuilder); + + OB.AddProperty("store", Render_StoreID, true); + #endregion + + #region Listeners + + string beforeclickScript = "if(node.disabled){return false;}"; + //OB.Listeners.AddProperty("beforeitemclick", JsHelper.GetFunction(beforeclickScript, "view", "node", "item", "index"), true); + AddListener("beforeitemclick", beforeclickScript, "view", "node", "item", "index"); + + + string singleclickexpandScript = ""; + if (EnableSingleClickExpand) + { + //singleclickexpandScript = "if(!node.isLeaf()){if(node.isExpanded()){node.collapse();}else{node.expand();}}"; + singleclickexpandScript = "if(node.isExpandable()&&!node.isLeaf()){if(node.isExpanded()){this.collapseNode(node);}else{this.expandNode(node);}}"; + } + + string itemclickScript = "var args='Command$'+node.getId()+'$'+node.raw.f_commandname+'$'+node.raw.f_commandargument;"; + itemclickScript += GetPostBackEventReference("#Click#").Replace("'#Click#'", "args"); + itemclickScript = String.Format("if(node.raw.f_enableclickevent){{{0}}}", itemclickScript); + itemclickScript = "if(node.raw.f_clientclick){if(new Function(node.raw.f_clientclick)()===false){return;}}" + itemclickScript; + //itemclickScript = "if(node.raw.f_clientclick){eval(node.raw.f_clientclick);}" + itemclickScript; // new Function(node.raw.f_clientclick)(); + //OB.Listeners.AddProperty("itemclick", JsHelper.GetFunction(singleclickexpandScript + itemclickScript, "view", "node", "item", "index"), true); + AddListener("itemclick", singleclickexpandScript + itemclickScript, "view", "node", "item", "index"); + + + + string checkchangeScript = "var args='Check$'+node.getId()+'$'+checked;"; + checkchangeScript += GetPostBackEventReference("#CheckChange#").Replace("'#CheckChange#'", "args"); + checkchangeScript = String.Format("if(node.raw.f_enablecheckevent){{{0}}}", checkchangeScript); + //OB.Listeners.AddProperty("checkchange", JsHelper.GetFunction(checkchangeScript, "node", "checked"), true); + AddListener("checkchange", checkchangeScript, "node", "checked"); + + + string expandScript = "var args='Expand$'+node.getId();"; + expandScript += GetPostBackEventReference("#Expand#").Replace("'#Expand#'", "args"); + expandScript = String.Format("if(node.raw.f_enableexpandevent){{{0}}}", expandScript); + //OB.Listeners.AddProperty("itemexpand", JsHelper.GetFunction(expandScript, "node"), true); + AddListener("itemexpand", expandScript, "node"); + + + string collapseScript = "var args='Collapse$'+node.getId();"; + collapseScript += GetPostBackEventReference("#Collapse#").Replace("'#Collapse#'", "args"); + collapseScript = String.Format("if(node.raw.f_enablecollapseevent){{{0}}}", collapseScript); + //OB.Listeners.AddProperty("itemcollapse", JsHelper.GetFunction(collapseScript, "node"), true); + AddListener("itemcollapse", collapseScript, "node"); + + #endregion + + #region selectModel + + string selectModelScript = String.Empty; + if (EnableMultiSelect) + { + selectModelScript = "Ext.create('Ext.selection.TreeModel',{mode:'MULTI'})"; + } + else + { + selectModelScript = "Ext.create('Ext.selection.TreeModel',{mode:'SINGLE'})"; + } + OB.AddProperty("selModel", selectModelScript, true); + + #endregion + + #region old code + + // nodes + //string nodesScript = Render_NodesId + "=[{'text':'Audi','id':100,'leaf':false,'cls':'folder','children':[{'text':'A3','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]},{'text':'TT','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]}]},{'text':'Cadillac','id':300,'leaf':false,'cls':'folder','children':[{'text':'CTS','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]},{'text':'CTS-V','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]}]}];"; + //string nodesJsArray = GetNodesJsArray2(Nodes).ToString(); + //string nodesScript = String.Format("{0}={1};", Render_NodesID, nodesJsArray); + + #endregion + + #region Root + + //JsObjectBuilder rootBuilder = new JsObjectBuilder(); + ////rootBuilder.AddProperty(OptionName.Id, "root"); + ////rootBuilder.AddProperty(OptionName.Text, "root"); + ////rootBuilder.AddProperty("loaded", false); + //rootBuilder.AddProperty(OptionName.Children, Render_NodesId, true); + + //string rootNodeScript = String.Format("var {0}=new Ext.tree.AsyncTreeNode({1});", Render_RootId, rootBuilder.ToString()); + //rootNodeScript += "\r\n"; + + + //OB.AddProperty("root", "new Ext.tree.AsyncTreeNode()", true); + OB.AddProperty("rootVisible", false); + + #endregion + + #region renderScript + + //string renderScript = String.Empty; + ////renderScript += "cmp.f_loadData();"; + //if (SelectedNodeIDArray.Length > 0) + //{ + // renderScript += "var model=cmp.getSelectionModel();"; + // foreach (string nodeId in SelectedNodeIDArray) + // { + // renderScript += String.Format("model.select(cmp.getNodeById('{0}'),null,true);", nodeId); + // } + //} + + ////renderScript = "function(cmp){window.setTimeout(function(){ cmp.f_loadData(); },1000);}"; + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.f_loadData();", "cmp"), true); + AddListener("render", "cmp.f_loadData();", "cmp"); + + + //OB.Listeners.AddProperty("viewready", JsHelper.GetFunction("cmp.f_selectNodes();", "cmp"), true); + AddListener("viewready", "cmp.f_selectNodes();", "cmp"); + + #endregion + + #region AddStartupScript + //// 展开,折叠,点击,选中CheckBox事件处理函数, + //// 因为这些函数会被几乎每个节点使用,所以提取出公共的方法来 + //scripts.AppendFormat("{0}=function(node){{F.util.addValueToHiddenField('{1}',node.id);}};", Render_NodeExpandScriptID, ExpandedNodesHiddenFieldID); + //scripts.AppendFormat("{0}=function(node){{F.util.removeValueFromHiddenField('{1}',node.id);}};", Render_NodeCollapseScriptID, ExpandedNodesHiddenFieldID); + //scripts.AppendFormat("{0}=function(node,checked){{if(checked){{F.util.addValueToHiddenField('{1}',node.id);}}else{{F.util.removeValueFromHiddenField('{1}',node.id);}}}};", Render_NodeCheckChangeScriptID, CheckedNodesHiddenFieldID); + //scripts.AppendFormat("{0}=function(node){{Ext.get('{1}').dom.value=node.id;}};", Render_NodeClickScriptID, SelectedNodeHiddenFieldID); + + //scripts.AppendLine(hiddenFieldsScript); + + //OB.AddProperty("store", "Ext.create('Ext.data.TreeStore')", true); + + + //StringBuilder sb = new StringBuilder(); + + //scripts.AppendLine(loaderScript); + string startupScript = String.Format("var {0}=Ext.create('Ext.tree.Panel',{1});", XID, OB); + + AddStartupScript(loaderScript + startupScript); + + #endregion + } + + #endregion + + #region old code + + //private void ResolveTreeSelectModel(ref string selectModelScript) + //{ + // JsObjectBuilder selectOptionBuilder = new JsObjectBuilder(); + + // //// 选中行,不选中行 + // //JsObjectBuilder selectListenersBuilder = new JsObjectBuilder(); + // //selectListenersBuilder.AddProperty("selectionchange", String.Format("function(sm,node){{Ext.get('{0}').dom.value=node.id;}}", SelectedNodeHiddenFieldID), true); + // //selectListenersBuilder.AddProperty(OptionName.Scope, "box", true); + + // //selectOptionBuilder.AddProperty("listeners", selectListenersBuilder); + + // if (EnableMultiSelect) + // { + // selectModelScript = String.Format("var {0}=new Ext.tree.MultiSelectionModel({1});", Render_SelectModelID, selectOptionBuilder); + // } + // else + // { + // selectModelScript = String.Format("var {0}=new Ext.tree.DefaultSelectionModel({1});", Render_SelectModelID, selectOptionBuilder); + // } + + //} + + #endregion + + #region old code + + //internal JsArrayBuilder GetNodesJsArray() + //{ + // return GetNodesJsArray(Nodes); + //} + + /* + internal JsArrayBuilder GetNodesJsArray(TreeNodeCollection nodes, bool includeListeners) + { + JsArrayBuilder nodesBuilder = new JsArrayBuilder(); + foreach (TreeNode node in nodes) + { + JsObjectBuilder nodeBuilder = new JsObjectBuilder(); + + #region options + + nodeBuilder.AddProperty("text", node.Text); + nodeBuilder.AddProperty("leaf", node.Leaf); + if (!String.IsNullOrEmpty(node.NodeID)) + { + nodeBuilder.AddProperty("id", node.NodeID); + } + nodeBuilder.AddProperty("disabled", !node.Enabled); + if (node.EnableCheckBox) + { + nodeBuilder.AddProperty("checked", node.Checked); + } + + // Leaf doesn't has expanded property. + if (!node.Leaf) + { + nodeBuilder.AddProperty("expanded", node.Expanded); + } + + #endregion + + #region href + + if (!String.IsNullOrEmpty(node.NavigateUrl)) + { + nodeBuilder.AddProperty("href", ResolveUrl(node.NavigateUrl)); + + if (!String.IsNullOrEmpty(node.Target)) + { + nodeBuilder.AddProperty("hrefTarget", node.Target); + } + } + + #endregion + + #region IconUrl + + if (!String.IsNullOrEmpty(node.IconUrl)) + { + nodeBuilder.AddProperty("icon", ResolveUrl(node.IconUrl)); + + #region old code + // 添加CSS样式,这种方法添加的图片位置靠上 + // string className = AddStartupCSS(String.Format("{0}-button-icon-image", ClientID), + // GetBackgroundStyleCss(ResolveUrl(IconUrl))); + + //OB.AddProperty(OptionName.IconCls, className); + #endregion + } + + #endregion + + #region qtip + + if (!String.IsNullOrEmpty(node.ToolTip)) + { + nodeBuilder.AddProperty("qtip", node.ToolTip); + } + + #endregion + + #region Listeners + + if (includeListeners) + { + JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + + #region old code + + //// 展开时判断是否需要到后台取数据 + ////listenersBuilder.AddProperty("beforeappend", String.Format("function(node,deep,anim){{\r\nif(!node.loaded){{alert(node.id);\r\n}}}}"), true); + + //// 折叠/展开 + ////listenersBuilder.AddProperty(OptionName.Expand, String.Format("function(node){{F.util.addValueToHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + ////listenersBuilder.AddProperty(OptionName.Collapse, String.Format("function(node){{F.util.removeValueFromHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + //listenersBuilder.AddProperty("expand", Render_NodeExpandScriptID, true); + //listenersBuilder.AddProperty("collapse", Render_NodeCollapseScriptID, true); + + + #endregion + + #region 点击 + + // 如果禁用此节点,则不响应点击事件(不可选中) + // Added by sanshi.ustc#gmail.com 2009-8-24 + if (!node.Enabled) + { + //clientScript += "e.stopEvent();"; + listenersBuilder.AddProperty("beforeclick", "function(){return false;}", true); + } + + + if (String.IsNullOrEmpty(node.OnClientClick) && !node.EnablePostBack) + { + // 这段代码主要是为了减少代码体积,避免为每个节点添加重复的代码 + listenersBuilder.AddProperty("click", Render_NodeClickScriptID, true); + } + else + { + // 点击的脚本 + string clientScript = String.Empty; + + // 用户自定义脚本 + string clientClickScript = node.OnClientClick; + if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) + { + clientClickScript += ";"; + } + clientScript += clientClickScript; + + + // 选中此项 + //clientScript += String.Format("Ext.get('{0}').dom.value=node.id;", SelectedNodeHiddenFieldID); + clientScript += String.Format("{0}.apply(window, [node]);", Render_NodeClickScriptID); + + // 回发脚本 + if (node.EnablePostBack) + { + string paramStr = String.Format("Command${0}${1}${2}", node.NodeID, node.CommandName.Replace("'", "\""), node.CommandArgument.Replace("'", "\"")); + clientScript += GetPostBackEventReference(paramStr); + } + + + listenersBuilder.AddProperty("click", String.Format("function(node,e){{{0}}}", clientScript), true); + + } + + #endregion + + #region CheckBox - AutoPostback + + // CheckBox选中 + if (node.EnableCheckBox) + { + if (!node.AutoPostBack) + { + // 改变CheckBox,不需要自动回发,则将checkchange指向预定义的函数,这有助于减少代码量 + //listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{if(checked){{F.util.addValueToHiddenField('{0}',node.id);}}else{{F.util.removeValueFromHiddenField('{0}',node.id);}}}}", CheckedNodesHiddenFieldID), true); + listenersBuilder.AddProperty("checkchange", Render_NodeCheckChangeScriptID, true); + } + else + { + string checkchangeScript = String.Empty; + + // 改变页面中隐藏字段的值 + checkchangeScript += String.Format("{0}.apply(window, [node, checked]);", Render_NodeCheckChangeScriptID); + + // 自动回发到服务器 + checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); + checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); + + listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{{0}}}", checkchangeScript), true); + } + } + + #endregion + + nodeBuilder.AddProperty("listeners", listenersBuilder); + } + + #endregion + + #region children + + if (node.Nodes != null && node.Nodes.Count > 0) + { + nodeBuilder.AddProperty("children", GetNodesJsArray(node.Nodes, includeListeners)); + } + + #endregion + + #region SingleClickExpand + + if (node.SingleClickExpand) + { + nodeBuilder.AddProperty("singleClickExpand", true); + } + + #endregion + + nodesBuilder.AddProperty(nodeBuilder); + } + + return nodesBuilder; + } + + */ + #endregion + + #endregion + + #region DataBind + + /// <summary> + /// 绑定数据源 + /// </summary> + /// <seealso cref="DataSource" /> + public override void DataBind() + { + // 重新绑定数据前清空选中的值 + SelectedNodeIDArray = null; + + // 清空所有节点 + Nodes.Clear(); + + if (_dataSource != null) + { + if (DataSource is DataSet) + { + DataSet ds = DataSource as DataSet; + + DataBindToXml(ds.GetXml()); + } + else if (DataSource is XmlDataSource) + { + XmlDataSource xds = DataSource as XmlDataSource; + XmlDocument xdoc = xds.GetXmlDocument(); + + DataBindToXml(xdoc.OuterXml); + } + else if (DataSource is XmlDocument) + { + XmlDocument xdoc = DataSource as XmlDocument; + + DataBindToXml(xdoc.OuterXml); + } + //else if (this.DataSource is IHierarchicalDataSource) + //{ + // IHierarchicalDataSource oDS = (IHierarchicalDataSource)(this.DataSource); + + // this.LoadFromHierarchy(oDS.GetHierarchicalView("").Select(), null); + //} + else + { + throw new Exception("不支持的数据源类型:" + _dataSource.GetType().ToString()); + } + } + + base.DataBind(); + } + + #endregion + + #region internal methods + + #region FixTreeNodes + + /// <summary> + /// 如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 + /// 同时处理 AutoLeafIdentification 属性 + /// </summary> + internal void FixTreeNodes() + { + FixTreeNodes(Nodes); + } + + private void FixTreeNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf) + { + if (node.Nodes.Count == 0) + { + if (node.Expanded) + { + node.Expanded = false; + } + // If this node has no child and it's not a leaf node + // And AutoLeafIdentification is enabled, then make this node a leaf node. + if (AutoLeafIdentification) + { + node.Leaf = true; + } + } + + if (node.Nodes.Count > 0) + { + FixTreeNodes(node.Nodes); + } + + } + } + } + + #endregion + + #region DataBindToXml + + private void DataBindToXml(string xml) + { + XmlDocument xdoc = new XmlDocument(); + xdoc.LoadXml(xml); + + DataBindToXml(null, xdoc.DocumentElement.ChildNodes); + } + + //private void DataBindToXml(XmlDocument xdoc) + //{ + // XmlNodeList nodes = xdoc.DocumentElement.ChildNodes; + + // foreach (XmlNode node in nodes) + // { + // if (node.NodeType == XmlNodeType.Element) + // { + // TreeNode treeNode = new TreeNode(); + // Nodes.Add(treeNode); + + // LoadXmlNode(treeNode, node); + + + // } + // } + //} + + private void DataBindToXml(TreeNode treeNode, XmlNodeList nodes) + { + foreach (XmlNode node in nodes) + { + // Only process Xml elements (ignore comments, etc) + if (node.NodeType == XmlNodeType.Element) + { + TreePreNodeEventArgs preArgs = new TreePreNodeEventArgs(node); + + OnPreNodeDataBound(preArgs); + + // 事件处理函数要求取消添加本节点 + if (!preArgs.Cancelled) + { + TreeNode childNode = new TreeNode(); + if (treeNode == null) + { + Nodes.Add(childNode); + } + else + { + treeNode.Nodes.Add(childNode); + } + + childNode.ReadXmlAttributes(node.Attributes, this); + + OnNodeDataBound(new TreeNodeEventArgs(childNode, node)); + + + DataBindToXml(childNode, node.ChildNodes); + } + } + } + } + + //private void LoadXmlNode(TreeNode treeNode, XmlNode xmlNode) + //{ + // treeNode.ReadXmlAttributes(xmlNode.Attributes, this); + + // OnNodeDataBound(new TreeNodeEventArgs(treeNode, xmlNode)); + + // foreach (XmlNode node in xmlNode.ChildNodes) + // { + // // Only process Xml elements (ignore comments, etc) + // if (node.NodeType == XmlNodeType.Element) + // { + // TreePreNodeEventArgs preArgs = new TreePreNodeEventArgs(node); + + // OnPreNodeDataBound(preArgs); + + // // 事件处理函数要求取消添加本节点 + // if (!preArgs.Cancelled) + // { + // TreeNode childNode = new TreeNode(); + // treeNode.Nodes.Add(childNode); + + // LoadXmlNode(childNode, node); + // } + // } + // } + + //} + + #endregion + + #region GetXmlAttributeMappingFrom + + internal string GetXmlAttributeMappingFrom(string toValue) + { + if (Mappings.Count > 0) + { + for (int i = 0; i < Mappings.Count; i++) + { + XmlAttributeMapping mapping = Mappings[i]; + + if (mapping.To == toValue) + { + return mapping.From; + } + } + } + + return toValue; + } + + internal string GetXmlAttributeMappingTo(string fromValue) + { + if (Mappings.Count > 0) + { + for (int i = 0; i < Mappings.Count; i++) + { + XmlAttributeMapping mapping = Mappings[i]; + + if (mapping.From == fromValue) + { + return mapping.To; + } + } + } + + return fromValue; + } + + #endregion + + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + // 选中的行 + string[] selectedNodeIDArray = StringUtil.GetStringListFromString(postCollection[SelectedNodeIDArrayHiddenFieldID], true).ToArray(); + if (!StringUtil.CompareStringArray(SelectedNodeIDArray, selectedNodeIDArray)) + { + SelectedNodeIDArray = selectedNodeIDArray; + FState.BackupPostDataProperty("SelectedNodeIDArray"); + } + + + // Expanded Nodes + string expandedNodesPostValue = postCollection[ExpandedNodesHiddenFieldID]; + List<string> expandedNodeListPostValue = StringUtil.GetStringListFromString(expandedNodesPostValue, true); + // 1. Collapse some nodes that have been expanded. + TreeNode[] originalExpandedNodes = GetExpandedNodes(); + foreach (TreeNode node in originalExpandedNodes) + { + if (!expandedNodeListPostValue.Contains(node.NodeID)) + { + node.Expanded = false; + } + } + // 2. Expand the post nodes. + foreach (string nodeID in expandedNodeListPostValue) + { + FindNode(nodeID).Expanded = true; + } + + + // Checked Nodes + string checkedNodesPostValue = postCollection[CheckedNodesHiddenFieldID]; + List<string> checkedNodeListPostValue = StringUtil.GetStringListFromString(checkedNodesPostValue, true); + // 1. Uncheck some nodes that have been checked. + TreeNode[] originalCheckedNodes = GetCheckedNodes(); + foreach (TreeNode node in originalCheckedNodes) + { + if (!checkedNodeListPostValue.Contains(node.NodeID)) + { + node.Checked = false; + } + } + // 2. Check the post nodes. + foreach (string nodeID in checkedNodeListPostValue) + { + FindNode(nodeID).Checked = true; + } + + FState.BackupPostDataProperty("F_Nodes"); + + + return false; + } + + //public override void RaisePostDataChangedEvent() + //{ + // //OnCollapsedChanged(EventArgs.Empty); + //} + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Command$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 4) + { + OnNodeCommand(new TreeCommandEventArgs(FindNode(commandArgs[1]), commandArgs[2], commandArgs[3])); + } + } + else if (eventArgument.StartsWith("LazyLoad$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnNodeLazyLoad(new TreeNodeEventArgs(FindNode(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("Expand$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnNodeExpand(new TreeNodeEventArgs(FindNode(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("Collapse$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnNodeCollapse(new TreeNodeEventArgs(FindNode(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("Check$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 3) + { + OnNodeCheck(new TreeCheckEventArgs(FindNode(commandArgs[1]), Convert.ToBoolean(commandArgs[2]))); + } + } + + } + + #endregion + + #region OnNodeDataBound + + private static readonly object _nodeDataBoundHandlerKey = new object(); + + /// <summary> + /// 节点绑定后事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点绑定后事件")] + public event EventHandler<TreeNodeEventArgs> NodeDataBound + { + add + { + Events.AddHandler(_nodeDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发节点绑定后事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeDataBound(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeDataBoundHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPreNodeDataBound + + private static readonly object _preNodeDataBoundHandlerKey = new object(); + + /// <summary> + /// 节点预绑定事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点预绑定事件")] + public event EventHandler<TreePreNodeEventArgs> PreNodeDataBound + { + add + { + Events.AddHandler(_preNodeDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_preNodeDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发节点预绑定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPreNodeDataBound(TreePreNodeEventArgs e) + { + EventHandler<TreePreNodeEventArgs> handler = Events[_preNodeDataBoundHandlerKey] as EventHandler<TreePreNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeCheck + + private static readonly object _nodeCheckHandlerKey = new object(); + + /// <summary> + /// 节点选中事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点选中事件")] + public event EventHandler<TreeCheckEventArgs> NodeCheck + { + add + { + Events.AddHandler(_nodeCheckHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeCheckHandlerKey, value); + } + } + + /// <summary> + /// 触发节点选中事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeCheck(TreeCheckEventArgs e) + { + EventHandler<TreeCheckEventArgs> handler = Events[_nodeCheckHandlerKey] as EventHandler<TreeCheckEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeCommand + + private static readonly object _nodeCommandHandlerKey = new object(); + + /// <summary> + /// 节点点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点点击事件")] + public event EventHandler<TreeCommandEventArgs> NodeCommand + { + add + { + Events.AddHandler(_nodeCommandHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeCommandHandlerKey, value); + } + } + + /// <summary> + /// 触发节点点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeCommand(TreeCommandEventArgs e) + { + EventHandler<TreeCommandEventArgs> handler = Events[_nodeCommandHandlerKey] as EventHandler<TreeCommandEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeExpand + + private static readonly object _nodeExpandHandlerKey = new object(); + + /// <summary> + /// 节点展开事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点展开事件")] + public event EventHandler<TreeNodeEventArgs> NodeExpand + { + add + { + Events.AddHandler(_nodeExpandHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeExpandHandlerKey, value); + } + } + + /// <summary> + /// 触发节点展开事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeExpand(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeExpandHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeCollapse + + private static readonly object _nodeCollapseHandlerKey = new object(); + + /// <summary> + /// 节点展开事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点展开事件")] + public event EventHandler<TreeNodeEventArgs> NodeCollapse + { + add + { + Events.AddHandler(_nodeCollapseHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeCollapseHandlerKey, value); + } + } + + /// <summary> + /// 触发节点展开事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeCollapse(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeCollapseHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeLazyLoad + + private static readonly object _nodeLazyLoadHandlerKey = new object(); + + /// <summary> + /// 节点延迟加载事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点延迟加载事件")] + public event EventHandler<TreeNodeEventArgs> NodeLazyLoad + { + add + { + Events.AddHandler(_nodeLazyLoadHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeLazyLoadHandlerKey, value); + } + } + + /// <summary> + /// 触发节点延迟加载事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeLazyLoad(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeLazyLoadHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region Public Methods + + #region GetExpandedNodes + + /// <summary> + /// 获取所有展开节点的ID数组 + /// </summary> + /// <returns>节点的ID数组</returns> + public string[] GetExpandedNodeIDs() + { + return GetExpandedNodeIDs(Nodes); + } + + /// <summary> + /// 获取指定节点集合中所有展开节点的ID数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的ID数组</returns> + public string[] GetExpandedNodeIDs(TreeNodeCollection nodes) + { + List<string> expandedNodeIDs = new List<string>(); + TreeNode[] expandedNodes = GetExpandedNodes(nodes); + foreach (TreeNode node in expandedNodes) + { + expandedNodeIDs.Add(node.NodeID); + } + return expandedNodeIDs.ToArray(); + } + + /// <summary> + /// 获取所有展开节点的数组 + /// </summary> + /// <returns>节点的数组</returns> + public TreeNode[] GetExpandedNodes() + { + return GetExpandedNodes(Nodes); + } + + /// <summary> + /// 获取指定节点集合中所有展开节点的数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的数组</returns> + public TreeNode[] GetExpandedNodes(TreeNodeCollection nodes) + { + List<TreeNode> returnNodes = new List<TreeNode>(); + ResolveExpandedNodes(returnNodes, nodes); + return returnNodes.ToArray(); + } + + private void ResolveExpandedNodes(List<TreeNode> returnNodes, TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf && node.Expanded) + { + returnNodes.Add(node); + } + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ResolveExpandedNodes(returnNodes, node.Nodes); + } + } + } + + #endregion + + #region CollapseAllNodes/ExpandAllNodes + + /// <summary> + /// 折叠所有节点 + /// </summary> + public void CollapseAllNodes() + { + CollapseAllNodes(Nodes); + } + + /// <summary> + /// 折叠指定节点集合中的所有节点 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void CollapseAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf) + { + node.Expanded = false; + + if (node.Nodes != null && node.Nodes.Count > 0) + { + CollapseAllNodes(node.Nodes); + } + } + } + } + + /// <summary> + /// 展开所有节点 + /// </summary> + public void ExpandAllNodes() + { + ExpandAllNodes(Nodes); + } + + /// <summary> + /// 展开指定节点集合中的所有节点 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void ExpandAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf) + { + node.Expanded = true; + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ExpandAllNodes(node.Nodes); + } + } + } + } + + #endregion + + #region GetCheckedNodes + + /// <summary> + /// 获取选中节点的ID数组 + /// </summary> + /// <returns>节点的ID数组</returns> + public string[] GetCheckedNodeIDs() + { + return GetCheckedNodeIDs(Nodes); + } + + /// <summary> + /// 获取指定节点集合中选中节点的ID数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的ID数组</returns> + public string[] GetCheckedNodeIDs(TreeNodeCollection nodes) + { + List<string> checkedNodeIDs = new List<string>(); + TreeNode[] checkedNodes = GetCheckedNodes(nodes); + foreach (TreeNode node in checkedNodes) + { + checkedNodeIDs.Add(node.NodeID); + } + return checkedNodeIDs.ToArray(); + } + + /// <summary> + /// 获取选中节点的数组 + /// </summary> + /// <returns>节点的数组</returns> + public TreeNode[] GetCheckedNodes() + { + return GetCheckedNodes(Nodes); + } + + /// <summary> + /// 获取指定节点集合中选中节点的数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的数组</returns> + public TreeNode[] GetCheckedNodes(TreeNodeCollection nodes) + { + List<TreeNode> rtList = new List<TreeNode>(); + ResolveCheckedNodes(rtList, nodes); + return rtList.ToArray(); + } + + + private void ResolveCheckedNodes(List<TreeNode> rtList, TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.EnableCheckBox && node.Checked) + { + rtList.Add(node); + } + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ResolveCheckedNodes(rtList, node.Nodes); + } + } + } + + #endregion + + #region CheckAllNodes UncheckAllNodes + + /// <summary> + /// 选中所有节点的复选框 + /// </summary> + public void CheckAllNodes() + { + CheckAllNodes(Nodes); + } + + /// <summary> + /// 选中指定节点的复选框 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void CheckAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.EnableCheckBox) + { + node.Checked = true; + } + + if (!node.Leaf && node.Nodes != null && node.Nodes.Count > 0) + { + CheckAllNodes(node.Nodes); + } + + } + } + + /// <summary> + /// 反选所有节点的复选框 + /// </summary> + public void UncheckAllNodes() + { + UncheckAllNodes(Nodes); + } + + /// <summary> + /// 反选指定节点的复选框 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void UncheckAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.EnableCheckBox) + { + node.Checked = false; + } + + if (!node.Leaf && node.Nodes != null && node.Nodes.Count > 0) + { + UncheckAllNodes(node.Nodes); + } + } + } + + #endregion + + #region FindNode + + /// <summary> + /// 查找树节点 + /// </summary> + /// <param name="nodeId">节点ID</param> + /// <returns>树节点</returns> + public TreeNode FindNode(string nodeId) + { + return FindNode(nodeId, Nodes); + } + + /// <summary> + /// 在指定的节点集合中查找树节点 + /// </summary> + /// <param name="nodeId">节点ID</param> + /// <param name="nodes">指定的节点集合</param> + /// <returns>树节点</returns> + public TreeNode FindNode(string nodeId, TreeNodeCollection nodes) + { + if (nodes.Count == 0) + { + return null; + } + + foreach (TreeNode node in nodes) + { + if (node.NodeID == nodeId) + { + return node; + } + + if (node.Nodes.Count > 0) + { + TreeNode childNode = FindNode(nodeId, node.Nodes); + + if (childNode != null) + { + return childNode; + } + } + } + + return null; + } + + #endregion + + #region GetExpandAllNodesReference GetCollapseAllNodesReference + + /// <summary> + /// 获取展开全部节点的的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetExpandAllNodesReference() + { + return String.Format("{0}.expandAll();", ScriptID); + } + + /// <summary> + /// 获取折叠全部节点的的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetCollapseAllNodesReference() + { + return String.Format("{0}.collapseAll();", ScriptID); + } + + #endregion + + #region oldcode + + //public void ClearNodes() + //{ + // CheckedNodeIDArray = null; + // SelectedNodeID = null; + // ExpandedNodeIDArray = null; + // Nodes.Clear(); + //} + + //public TreeNode AddNode() + //{ + // TreeNode node = new TreeNode(); + // Nodes.Add(node); + + // return node; + //} + + #endregion + + #endregion + + #region oldcode + + //[Description("Ajax回发时强制更新此控件全部内容")] + //internal override bool AjaxForceCompleteUpdate + //{ + // get + // { + // return true; + // } + //} + + #endregion + + #region oldcode + + //private int _nextNodeIndex = 0; + + ///// <summary> + ///// 获取下一个节点的ID,为那些没有设置NodeId的节点自定设置NodeId + ///// </summary> + ///// <returns></returns> + //internal string GetNextNodeId() + //{ + // return String.Format("{0}_n{1}", ClientJavascriptID, _nextNodeIndex++); + //} + + #endregion + + #region oldcode + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { + // base.SaveViewState(), + // ((IStateManager)Nodes).SaveViewState(), + // ((IStateManager)Mappings).SaveViewState() + // }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Nodes).LoadViewState(states[1]); + + // ((IStateManager)Mappings).LoadViewState(states[2]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Nodes).TrackViewState(); + + // ((IStateManager)Mappings).TrackViewState(); + //} + + #endregion + + #region oldcode + + ///// <summary> + ///// 展开的行 + ///// </summary> + //[DefaultValue(null)] + //[Description("展开的行")] + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string[] ExpandedNodeIDArray + //{ + // get + // { + // //// We don't need to save this state in ViewState, because TreeNode has it's state persistance. + // //object obj = BoxState["ExpandedNodeIDArray"]; + + // //if (obj == null) + // //{ + // // obj = BoxState["ExpandedNodeIDArray"] = GetExpandedNodeIDArray(); + // //} + + // //return (string[])obj; + // return GetExpandedNodeIDArray(); + // } + // set + // { + // if (value != null) + // { + // List<string> strList = new List<string>(value); + + // // 折叠所有节点,只展开value中的节点 + // CollapseAllNodes(); + // foreach (string nodeId in strList) + // { + // FindNode(nodeId).Expanded = true; + // } + + // BoxState["ExpandedNodeIDArray"] = strList.ToArray(); + // } + // else + // { + // BoxState["ExpandedNodeIDArray"] = new string[0] { }; + // } + // } + //} + + ///// <summary> + ///// 选中的行 + ///// </summary> + //[DefaultValue(null)] + //[Description("选中的行")] + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string[] CheckedNodeIDArray + //{ + // get + // { + // object obj = BoxState["CheckedNodeIDArray"]; + + // if (obj == null) + // { + // obj = BoxState["CheckedNodeIDArray"] = GetCheckedNodeIDArray(); + // } + + // return (string[])obj; + // } + // set + // { + // if (value != null) + // { + // List<string> strList = new List<string>(value); + + // // 不选中所有节点,只选中value中的节点 + // UncheckAllNodes(); + // foreach (string nodeId in strList) + // { + // TreeNode node = FindNode(nodeId); + // if (node.EnableCheckBox) + // { + // node.Checked = true; + // } + // } + + // BoxState["CheckedNodeIDArray"] = strList.ToArray(); + // } + // else + // { + // BoxState["CheckedNodeIDArray"] = new string[0] { }; + // } + // } + //} + + #endregion + } +} diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs index ca75029..1f41e77 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs @@ -1,711 +1,740 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: TreeNode.cs - * CreatedOn: 2008-07-21 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; -using System.Web.UI.Design; -using System.Drawing.Design; -using System.Xml; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// <summary> - /// ڵ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true, DefaultProperty = "Nodes")] - [PersistChildren(false)] - public class TreeNode - { - #region TreeInstance - - private Tree _tree; - - /// <summary> - /// ʵ - /// </summary> - public Tree TreeInstance - { - get - { - return _tree; - } - set - { - _tree = value; - } - } - - private TreeNode _parentNode; - - /// <summary> - /// ڵ - /// </summary> - public TreeNode ParentNode - { - get - { - return _parentNode; - } - set - { - _parentNode = value; - } - } - - - #endregion - - #region Nodes - - private TreeNodeCollection _nodes; - - /// <summary> - /// ڵ㼯 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerDefaultProperty)] - public TreeNodeCollection Nodes - { - get - { - if (_nodes == null) - { - // ʱTreeInstanceΪnullASPXNodesڵʱ - // ʱTreeInstanceΪnull̵ֶͨΣӸڵ㣬Ȼӽڵ - _nodes = new TreeNodeCollection(TreeInstance, this); - } - return _nodes; - } - } - - #endregion - - #region EnablePostBack|OnClientClick - - private bool _enablePostBack = false; - /// <summary> - /// ڵǷط - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ڵǷط")] - public bool EnablePostBack - { - get - { - return _enablePostBack; - } - set - { - _enablePostBack = value; - } - } - - private string _onClientClick = String.Empty; - /// <summary> - /// ťʱҪִеĿͻ˽ű - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ťʱҪִеĿͻ˽ű")] - public string OnClientClick - { - get - { - return _onClientClick; - } - set - { - _onClientClick = value; - } - } - - #endregion - - #region CommandName|CommandArgument - - private string _commandName = String.Empty; - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("")] - public string CommandName - { - get - { - return _commandName; - } - set - { - _commandName = value; - } - } - - private string _commandArgument = String.Empty; - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("")] - public string CommandArgument - { - get - { - return _commandArgument; - } - set - { - _commandArgument = value; - } - } - - - #endregion - - #region EnableCheckBox|Checked|AutoPostBack - - private bool _checked = false; - /// <summary> - /// Ƿѡ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿѡ")] - public bool Checked - { - get - { - return _checked; - } - set - { - _checked = value; - } - } - - private bool _enableCheckBox = false; - /// <summary> - /// Ƿøѡ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿøѡ")] - public bool EnableCheckBox - { - get - { - return _enableCheckBox; - } - set - { - _enableCheckBox = value; - } - } - - /* - private bool _autoPostBack = false; - - /// <summary> - /// ǷԶطı临ѡ״̬ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ǷԶطı临ѡ״̬")] - public bool AutoPostBack - { - get - { - return _autoPostBack; - } - set - { - _autoPostBack = value; - } - } - */ - - private bool _enableCheckChangeEvent = false; - - /// <summary> - /// ı临ѡ״̬ǷԶط - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ı临ѡ״̬ǷԶط")] - public bool AutoPostBack - { - get - { - return _enableCheckChangeEvent; - } - set - { - _enableCheckChangeEvent = value; - } - } - - - #endregion - - #region Properties - - private string _text = String.Empty; - /// <summary> - /// ı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ı")] - public string Text - { - get - { - return _text; - } - set - { - _text = value; - } - } - - private string _nodeID = String.Empty; - /// <summary> - /// ڵID - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ڵID")] - public string NodeID - { - get - { - if (String.IsNullOrEmpty(_nodeID)) - { - //_nodeID = String.Format("x_{0}", TreeInstance.NodeIDIncrement++); // ClientJavascriptIDManager.Instance.GetNextJavascriptID(); - _nodeID = TreeNodeIDManager.Instance.GetNextTreeNodeID(); - } - return _nodeID; - - #region old code - - //object obj = ViewState["NodeID"]; - //if (obj == null) - //{ - // // GUIDķʽ̫ռViewState - // //obj = ViewState["NodeID"] = Guid.NewGuid().ToString(); - // //obj = ViewState["NodeID"] = String.Format("{0}_n{1}", TreeInstance.ClientJavascriptID, _nextNodeIndex++); - - // obj = ViewState["NodeID"] = ClientJavascriptIDManager.Instance.GetNextJavascriptID(); - //} - //return (string)obj; - - #endregion - } - set - { - _nodeID = value; - } - } - - private bool _leaf = false; - /// <summary> - /// ǷҶӽڵ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ǷҶӽڵ")] - public bool Leaf - { - get - { - return _leaf; - } - set - { - _leaf = value; - } - } - - private bool _enabled = true; - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("Ƿ")] - public bool Enabled - { - get - { - return _enabled; - } - set - { - _enabled = value; - } - } - - - private bool _expanded = false; - /// <summary> - /// Ƿչ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿչ")] - public bool Expanded - { - get - { - return _expanded; - } - set - { - _expanded = value; - } - } - - private string _target = String.Empty; - /// <summary> - /// Ŀ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("Ŀ")] - public string Target - { - get - { - return _target; - } - set - { - _target = value; - } - } - - - private string _navigateUrl = String.Empty; - /// <summary> - /// ӵַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ӵַ")] - public string NavigateUrl - { - get - { - return _navigateUrl; - } - set - { - _navigateUrl = value; - } - } - - - //private string _iconUrl = String.Empty; - ///// <summary> - ///// ͼַ - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("ͼַ")] - //[Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - //public string IconUrl - //{ - // get - // { - // if (String.IsNullOrEmpty(_iconUrl)) - // { - // if (Icon != Icon.None) - // { - // _iconUrl = IconHelper.GetIconUrl(Icon); - // } - // } - // return _iconUrl; - // } - // set - // { - // _iconUrl = value; - // } - //} - - private string _iconUrl = String.Empty; - /// <summary> - /// ͼַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ͼַ")] - [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - public string IconUrl - { - get - { - return _iconUrl; - } - set - { - _iconUrl = value; - } - } - - - private Icon _icon = Icon.None; - /// <summary> - /// Ԥͼ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Icon.None)] - [Description("Ԥͼ")] - public virtual Icon Icon - { - get - { - return _icon; - } - set - { - _icon = value; - } - } - - private string _toolTip = String.Empty; - /// <summary> - /// ʾı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ʾı")] - public string ToolTip - { - get - { - return _toolTip; - } - set - { - _toolTip = value; - } - } - - //private bool _singleClickExpand = false; - ///// <summary> - ///// лڵ۵չ״̬ - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("лڵ۵չ״̬")] - //public bool SingleClickExpand - //{ - // get - // { - // return _singleClickExpand; - // } - // set - // { - // _singleClickExpand = value; - // } - //} - - - #endregion - - #region private DataBindRow - - ///// <summary> - ///// еֵ - ///// </summary> - //public void DataBindRow() - //{ - // #region old code - // //// ûгʼValuesʼ - // //if (Values == null) - // //{ - // // GridColumnCollection columns = _grid.Columns; - - // // // ÿеֵ - // // Values = new object[columns.Count]; - // // ExtraValues = new object[columns.Count]; - // // for (int i = 0, count = columns.Count; i < count; i++) - // // { - // // Values[i] = columns[i].GetColumnValue(this); - // // } - - // // // DataKeysֵ - // // if (_grid.DataKeyNames != null) - // // { - // // string[] keyNames = _grid.DataKeyNames; - // // DataKeys = new object[keyNames.Length]; - // // for (int i = 0, count = keyNames.Length; i < count; i++) - // // { - // // DataKeys[i] = GetPropertyValue(keyNames[i]); - // // } - // // } - - // // //// CheckBoxFieldҪ⴦ - // // //for (int i = 0, count = columns.Count; i < count; i++) - // // //{ - // // // CheckBoxField cbField = columns[i] as CheckBoxField; - // // // if (cbField != null) - // // // { - // // // cbField.IniValues(); - // // // } - // // //} - // //} - // #endregion - //} - - #endregion - - #region GetPropertyValue - - ///// <summary> - ///// ȡԵֵ - ///// </summary> - ///// <param name="rowObj"></param> - ///// <param name="propertyName"></param> - ///// <returns></returns> - //public object GetPropertyValue(string propertyName) - //{ - // //return ObjectUtil.GetPropertyValue(_dataItem, propertyName); - //} - - - #endregion - - #region old code - - //internal TreeNode AddNode() - //{ - // TreeNode node = new TreeNode(); - // Nodes.Add(node); - - // return node; - //} - - #endregion - - #region ReadXmlAttributes - - internal void ReadXmlAttributes(XmlAttributeCollection attributes, Tree tree) - { - foreach (XmlAttribute attribute in attributes) - { - string name = attribute.Name; - - if (tree != null && tree.Mappings.Count > 0) - { - name = tree.GetXmlAttributeMappingTo(name); - } - - SetPropertyValue(name, attribute.Value); - } - } - - /// <summary> - /// Եֵ - /// </summary> - /// <param name="name"></param> - /// <param name="value"></param> - private void SetPropertyValue(string name, string value) - { - PropertyInfo pInfo = GetType().GetProperty(name); - - if (pInfo != null) - { - object objValue = null; - - if (pInfo.PropertyType == typeof(System.String)) - { - objValue = value; - } - else if (pInfo.PropertyType == typeof(System.Boolean)) - { - objValue = Convert.ToBoolean(value); - } - else if (pInfo.PropertyType == typeof(System.Int32)) - { - objValue = Convert.ToInt32(value); - } - else if (pInfo.PropertyType == typeof(Icon)) - { - objValue = (Icon)Enum.Parse(typeof(Icon), value, true); - } - - pInfo.SetValue(this, objValue, null); - } - } - - #endregion - - #region oldcode - - //public override object SaveViewState() - //{ - // object[] states = new object[] { - // base.SaveViewState(), - // ((IStateManager)Nodes).SaveViewState() - // }; - - // return states; - //} - - //public override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Nodes).LoadViewState(states[1]); - // } - //} - - //public override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Nodes).TrackViewState(); - //} - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeNode.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Web.UI.Design; +using System.Drawing.Design; +using System.Xml; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ڵ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Nodes")] + [PersistChildren(false)] + public class TreeNode + { + #region TreeInstance + + private Tree _tree; + + /// <summary> + /// ʵ + /// </summary> + public Tree TreeInstance + { + get + { + return _tree; + } + set + { + _tree = value; + } + } + + private TreeNode _parentNode; + + /// <summary> + /// ڵ + /// </summary> + public TreeNode ParentNode + { + get + { + return _parentNode; + } + set + { + _parentNode = value; + } + } + + + #endregion + + #region Nodes + + private TreeNodeCollection _nodes; + + /// <summary> + /// ڵ㼯 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + public TreeNodeCollection Nodes + { + get + { + if (_nodes == null) + { + // TreeInstance == null жϣʱ´ + // ޷ ParentNode Եַʾʽ FineUI.TreeNode FineUI.TreeNode ͵Ķ + if (TreeInstance == null) + { + _nodes = new TreeNodeCollection(null, null); + } + else + { + // ʱTreeInstanceΪnullASPXNodesڵʱ + // ʱTreeInstanceΪnull̵ֶͨΣӸڵ㣬Ȼӽڵ + _nodes = new TreeNodeCollection(TreeInstance, this); + } + } + return _nodes; + } + } + + #endregion + + #region EnableExpandEvent + + private bool _enableExpandEvent = false; + /// <summary> + /// չڵǷط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("չڵǷط")] + public bool EnableExpandEvent + { + get + { + return _enableExpandEvent; + } + set + { + _enableExpandEvent = value; + } + } + + private bool _enableCollapseEvent = false; + /// <summary> + /// ۵ڵǷط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("۵ڵǷط")] + public bool EnableCollapseEvent + { + get + { + return _enableCollapseEvent; + } + set + { + _enableCollapseEvent = value; + } + } + + #endregion + + #region EnableClickEvent|OnClientClick + + private bool _enablePostBack = false; + /// <summary> + /// ڵǷط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ڵǷط")] + public bool EnableClickEvent + { + get + { + return _enablePostBack; + } + set + { + _enablePostBack = value; + } + } + + private string _onClientClick = String.Empty; + /// <summary> + /// ťʱҪִеĿͻ˽ű + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ťʱҪִеĿͻ˽ű")] + public string OnClientClick + { + get + { + return _onClientClick; + } + set + { + _onClientClick = value; + } + } + + #endregion + + #region CommandName|CommandArgument + + private string _commandName = String.Empty; + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandName + { + get + { + return _commandName; + } + set + { + _commandName = value; + } + } + + private string _commandArgument = String.Empty; + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandArgument + { + get + { + return _commandArgument; + } + set + { + _commandArgument = value; + } + } + + + #endregion + + #region EnableCheckBox|Checked|EnableCheckEvent + + private bool _checked = false; + /// <summary> + /// Ƿѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿѡ")] + public bool Checked + { + get + { + return _checked; + } + set + { + _checked = value; + } + } + + private bool _enableCheckBox = false; + /// <summary> + /// Ƿøѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿøѡ")] + public bool EnableCheckBox + { + get + { + return _enableCheckBox; + } + set + { + _enableCheckBox = value; + } + } + + private bool _enableCheckEvent = false; + + /// <summary> + /// ı临ѡ״̬ǷԶط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ı临ѡ״̬ǷԶط")] + public bool EnableCheckEvent + { + get + { + return _enableCheckEvent; + } + set + { + _enableCheckEvent = value; + } + } + + + #endregion + + #region Properties + + private string _text = String.Empty; + /// <summary> + /// ı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _nodeID = String.Empty; + /// <summary> + /// ڵID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ڵID")] + public string NodeID + { + get + { + if (String.IsNullOrEmpty(_nodeID)) + { + //_nodeID = String.Format("f_{0}", TreeInstance.NodeIDIncrement++); // ClientJavascriptIDManager.Instance.GetNextJavascriptID(); + _nodeID = TreeNodeIDManager.Instance.GetNextTreeNodeID(); + } + return _nodeID; + + #region old code + + //object obj = ViewState["NodeID"]; + //if (obj == null) + //{ + // // GUIDķʽ̫ռViewState + // //obj = ViewState["NodeID"] = Guid.NewGuid().ToString(); + // //obj = ViewState["NodeID"] = String.Format("{0}_n{1}", TreeInstance.ClientJavascriptID, _nextNodeIndex++); + + // obj = ViewState["NodeID"] = ClientJavascriptIDManager.Instance.GetNextJavascriptID(); + //} + //return (string)obj; + + #endregion + } + set + { + _nodeID = value; + } + } + + private bool _leaf = false; + /// <summary> + /// ǷҶӽڵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ǷҶӽڵ")] + public bool Leaf + { + get + { + return _leaf; + } + set + { + _leaf = value; + } + } + + private bool _enabled = true; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + + private bool _expanded = false; + /// <summary> + /// Ƿչ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿչ")] + public bool Expanded + { + get + { + return _expanded; + } + set + { + _expanded = value; + } + } + + private string _target = String.Empty; + /// <summary> + /// Ŀ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("Ŀ")] + public string Target + { + get + { + return _target; + } + set + { + _target = value; + } + } + + + private string _navigateUrl = String.Empty; + /// <summary> + /// ӵַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӵַ")] + public string NavigateUrl + { + get + { + return _navigateUrl; + } + set + { + _navigateUrl = value; + } + } + + + //private string _iconUrl = String.Empty; + ///// <summary> + ///// ͼַ + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("ͼַ")] + //[Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + //public string IconUrl + //{ + // get + // { + // if (String.IsNullOrEmpty(_iconUrl)) + // { + // if (Icon != Icon.None) + // { + // _iconUrl = IconHelper.GetIconUrl(Icon); + // } + // } + // return _iconUrl; + // } + // set + // { + // _iconUrl = value; + // } + //} + + private string _iconUrl = String.Empty; + /// <summary> + /// ͼַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼַ")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + return _iconUrl; + } + set + { + _iconUrl = value; + } + } + + + private Icon _icon = Icon.None; + /// <summary> + /// Ԥͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("Ԥͼ")] + public virtual Icon Icon + { + get + { + return _icon; + } + set + { + _icon = value; + } + } + + private string _toolTip = String.Empty; + /// <summary> + /// ʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾı")] + public string ToolTip + { + get + { + return _toolTip; + } + set + { + _toolTip = value; + } + } + + //private bool _singleClickExpand = false; + ///// <summary> + ///// лڵ۵չ״̬ + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("лڵ۵չ״̬")] + //public bool SingleClickExpand + //{ + // get + // { + // return _singleClickExpand; + // } + // set + // { + // _singleClickExpand = value; + // } + //} + + + #endregion + + #region private DataBindRow + + ///// <summary> + ///// еֵ + ///// </summary> + //public void DataBindRow() + //{ + // #region old code + // //// ûгʼValuesʼ + // //if (Values == null) + // //{ + // // GridColumnCollection columns = _grid.Columns; + + // // // ÿеֵ + // // Values = new object[columns.Count]; + // // ExtraValues = new object[columns.Count]; + // // for (int i = 0, count = columns.Count; i < count; i++) + // // { + // // Values[i] = columns[i].GetColumnValue(this); + // // } + + // // // DataKeysֵ + // // if (_grid.DataKeyNames != null) + // // { + // // string[] keyNames = _grid.DataKeyNames; + // // DataKeys = new object[keyNames.Length]; + // // for (int i = 0, count = keyNames.Length; i < count; i++) + // // { + // // DataKeys[i] = GetPropertyValue(keyNames[i]); + // // } + // // } + + // // //// CheckBoxFieldҪ⴦ + // // //for (int i = 0, count = columns.Count; i < count; i++) + // // //{ + // // // CheckBoxField cbField = columns[i] as CheckBoxField; + // // // if (cbField != null) + // // // { + // // // cbField.IniValues(); + // // // } + // // //} + // //} + // #endregion + //} + + #endregion + + #region GetPropertyValue + + ///// <summary> + ///// ȡԵֵ + ///// </summary> + ///// <param name="rowObj"></param> + ///// <param name="propertyName"></param> + ///// <returns></returns> + //public object GetPropertyValue(string propertyName) + //{ + // //return ObjectUtil.GetPropertyValue(_dataItem, propertyName); + //} + + + #endregion + + #region old code + + //internal TreeNode AddNode() + //{ + // TreeNode node = new TreeNode(); + // Nodes.Add(node); + + // return node; + //} + + #endregion + + #region ReadXmlAttributes + + internal void ReadXmlAttributes(XmlAttributeCollection attributes, Tree tree) + { + foreach (XmlAttribute attribute in attributes) + { + string name = attribute.Name; + + if (tree != null && tree.Mappings.Count > 0) + { + name = tree.GetXmlAttributeMappingTo(name); + } + + SetPropertyValue(name, attribute.Value); + } + } + + /// <summary> + /// Եֵ + /// </summary> + /// <param name="name"></param> + /// <param name="value"></param> + private void SetPropertyValue(string name, string value) + { + PropertyInfo pInfo = GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + if (pInfo != null) + { + object objValue = null; + + if (pInfo.PropertyType == typeof(System.String)) + { + objValue = value; + } + else if (pInfo.PropertyType == typeof(System.Boolean)) + { + objValue = Convert.ToBoolean(value); + } + else if (pInfo.PropertyType == typeof(System.Int32)) + { + objValue = Convert.ToInt32(value); + } + else if (pInfo.PropertyType == typeof(Icon)) + { + objValue = (Icon)Enum.Parse(typeof(Icon), value, true); + } + + pInfo.SetValue(this, objValue, null); + } + } + + #endregion + + #region oldcode + + //public override object SaveViewState() + //{ + // object[] states = new object[] { + // base.SaveViewState(), + // ((IStateManager)Nodes).SaveViewState() + // }; + + // return states; + //} + + //public override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Nodes).LoadViewState(states[1]); + // } + //} + + //public override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Nodes).TrackViewState(); + //} + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs index c2e2f5b..72bbbd4 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs @@ -1,111 +1,111 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: TreeNodeCollection.cs - * CreatedOn: 2008-07-21 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.Data; -using System.Collections.ObjectModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ڵؼ - /// </summary> - public class TreeNodeCollection : Collection<TreeNode> - { - private Tree _treeInstance; - private TreeNode _parentNode; - - /// <summary> - /// 캯 - /// </summary> - /// <param name="tree">ʵ</param> - /// <param name="parentNode">ڵ</param> - public TreeNodeCollection(Tree tree, TreeNode parentNode) - { - _treeInstance = tree; - _parentNode = parentNode; - } - - - // ע1: - // - // TreeNodeCollection nodes = new TreeNodeCollection(); - // TreeNode node = new TreeNode(); - // עʱnodeûйtree1κϢ֮ںtree1.Nodes.Addʱ֪ǰʵ - // nodes.Add(node); - // tree1.Nodes.Add(nodes); - - // ע2: - // Ľڵ㶨壨ASPXжģ - // -China - // -Zhumadian - // -Suiping - // -Xiping - // ע InsertItem һεSuipingڵʱеģ - // Ҳ˵Suipingʱ֪ǰʵֻChinatree1.Nodesʱ֪ʵ - // Ҫ _treeInstance ΪʱҲӸڵʱݹеӽڵ㣬ʵ - - /// <summary> - /// ڵ - /// </summary> - /// <param name="index">λ</param> - /// <param name="item">ڵʵ</param> - protected override void InsertItem(int index, TreeNode item) - { - if (_treeInstance != null) - { - ResolveTreeNode(item); - } - - item.ParentNode = _parentNode; - - base.InsertItem(index, item); - } - - - /// <summary> - /// ÿڵTreeʵ - /// </summary> - /// <param name="node"></param> - private void ResolveTreeNode(TreeNode node) - { - node.TreeInstance = _treeInstance; - if (node.Nodes.Count > 0) - { - foreach (TreeNode subNode in node.Nodes) - { - ResolveTreeNode(subNode); - } - } - } - - } - -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeNodeCollection.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.Data; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ڵؼ + /// </summary> + public class TreeNodeCollection : Collection<TreeNode> + { + private Tree _treeInstance; + private TreeNode _parentNode; + + /// <summary> + /// 캯 + /// </summary> + /// <param name="tree">ʵ</param> + /// <param name="parentNode">ڵ</param> + public TreeNodeCollection(Tree tree, TreeNode parentNode) + { + _treeInstance = tree; + _parentNode = parentNode; + } + + + // ע1: + // + // TreeNodeCollection nodes = new TreeNodeCollection(); + // TreeNode node = new TreeNode(); + // עʱnodeûйtree1κϢ֮ںtree1.Nodes.Addʱ֪ǰʵ + // nodes.Add(node); + // tree1.Nodes.Add(nodes); + + // ע2: + // Ľڵ㶨壨ASPXжģ + // -China + // -Zhumadian + // -Suiping + // -Xiping + // ע InsertItem һεSuipingڵʱеģ + // Ҳ˵Suipingʱ֪ǰʵֻChinatree1.Nodesʱ֪ʵ + // Ҫ _treeInstance ΪʱҲӸڵʱݹеӽڵ㣬ʵ + + /// <summary> + /// ڵ + /// </summary> + /// <param name="index">λ</param> + /// <param name="item">ڵʵ</param> + protected override void InsertItem(int index, TreeNode item) + { + if (_treeInstance != null) + { + ResolveTreeNode(item); + } + + item.ParentNode = _parentNode; + + base.InsertItem(index, item); + } + + + /// <summary> + /// ÿڵTreeʵ + /// </summary> + /// <param name="node"></param> + private void ResolveTreeNode(TreeNode node) + { + node.TreeInstance = _treeInstance; + if (node.Nodes.Count > 0) + { + foreach (TreeNode subNode in node.Nodes) + { + ResolveTreeNode(subNode); + } + } + } + + } + +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs index af2d5ad..2532703 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs @@ -1,95 +1,95 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: XmlAttributeMapping.cs - * CreatedOn: 2008-07-21 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; -using System.Web.UI.Design; -using System.Drawing.Design; -using System.Xml; - - -namespace FineUI -{ - /// <summary> - /// ڵӳ - /// </summary> - [ToolboxItem(false)] - public class XmlAttributeMapping - { - - #region Properties - - private string _from = String.Empty; - - /// <summary> - /// ӳԴ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ӳԴ")] - public string From - { - get - { - return _from; - } - set - { - _from = value; - } - } - - private string _to = String.Empty; - - - /// <summary> - /// ӳĿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ӳĿ")] - public string To - { - get - { - return _to; - } - set - { - _to = value; - } - } - - - - #endregion - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: XmlAttributeMapping.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Web.UI.Design; +using System.Drawing.Design; +using System.Xml; + + +namespace FineUI +{ + /// <summary> + /// ڵӳ + /// </summary> + [ToolboxItem(false)] + public class XmlAttributeMapping + { + + #region Properties + + private string _from = String.Empty; + + /// <summary> + /// ӳԴ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӳԴ")] + public string From + { + get + { + return _from; + } + set + { + _from = value; + } + } + + private string _to = String.Empty; + + + /// <summary> + /// ӳĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӳĿ")] + public string To + { + get + { + return _to; + } + set + { + _to = value; + } + } + + + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs index 524f808..71d9454 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs @@ -1,45 +1,45 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: XmlAttributeMappingCollection.cs - * CreatedOn: 2008-07-21 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.Data; -using System.Collections.ObjectModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ڵӳ伯 - /// </summary> - public class XmlAttributeMappingCollection : Collection<XmlAttributeMapping> - { - - } - -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: XmlAttributeMappingCollection.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.Data; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ڵӳ伯 + /// </summary> + public class XmlAttributeMappingCollection : Collection<XmlAttributeMapping> + { + + } + +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs index b948a63..96fa3c2 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs @@ -1,65 +1,65 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: WindowCloseEventArgs.cs - * CreatedOn: 2008-06-27 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ر¼ - /// </summary> - public class WindowCloseEventArgs : EventArgs - { - - private string _closeArgument; - - /// <summary> - /// رղ - /// </summary> - public string CloseArgument - { - get { return _closeArgument; } - set { _closeArgument = value; } - } - - - /// <summary> - /// 캯 - /// </summary> - /// <param name="closeArgument">رղ</param> - public WindowCloseEventArgs(string closeArgument) - { - _closeArgument = closeArgument; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: WindowCloseEventArgs.cs + * CreatedOn: 2008-06-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ر¼ + /// </summary> + public class WindowCloseEventArgs : EventArgs + { + + private string _closeArgument; + + /// <summary> + /// رղ + /// </summary> + public string CloseArgument + { + get { return _closeArgument; } + set { _closeArgument = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="closeArgument">رղ</param> + public WindowCloseEventArgs(string closeArgument) + { + _closeArgument = closeArgument; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs b/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs index fa757a9..d6b6ece 100644 --- a/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs +++ b/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs @@ -1,1813 +1,1920 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Window.cs - * CreatedOn: 2008-05-20 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * ->Window有很多特殊的地方: - 1.不受页面中嵌套层次的限制 - 2.ClientJavascriptID和ID一样(这个不好,容易混淆多个层次中的Window,废除) - 3.不使用ClientJavascriptID(也即是不压缩js对象的名称)(这个不好,容易混淆多个层次中的Window,废除) - 4.想到一个办法,通过IFrame的url向子页面传递所在的窗口的信息(比如窗口的客户端名称) - 5.综合2,3点,现在ClientJavascriptID==ClientID,同时ClientID经过特殊处理,保证在多个页面唯一性。 - * - * - * ->想让Ext-Window不受嵌套层次的限制(总在最外层),好办 - * 只需在创建Window对象之前,使用Javascript向form中添加一个DIV用来放置Window对象(而不是使用RenderImmediately的方法实现) - * 30372245@qq.com 2009-02-25 - * - * ->当前的Ext-Window可能要在父页面弹出,也就是要添加到父页面,为了放置名称的冲突,需要随机一个GUID,以便向父页面添加Ext-Window时使用 - * 30372245@qq.com 2009-02-25 - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; -using System.ComponentModel.Design; - -namespace FineUI -{ - // Window控件区别于其他容器控件的地方:RenderImmediately=true,也就是说Window不会渲染为其它控件的子控件,尽管Window可以放在其它控件内 - /// <summary> - /// 窗体控件 - /// </summary> - [Designer("FineUI.Design.WindowDesigner, FineUI.Design")] - [ToolboxData("<{0}:Window IsModal=\"true\" Popup=\"true\" Width=\"500px\" Height=\"350px\" Title=\"Window\" BodyPadding=\"5px\" runat=\"server\"></{0}:Window>")] - [ToolboxBitmap(typeof(Window), "toolbox.Window.bmp")] - [Description("窗体控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Window : CollapsablePanel, IPostBackEventHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Window() - { - ServerAjaxProperties.Remove("Hidden"); - ClientAjaxProperties.Add("Hidden"); - - AddServerAjaxProperties(); - AddClientAjaxProperties(); - } - - #endregion - - #region private properties - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("是否将窗体标题限制在可视区域")] - //[Browsable(false)] - //private bool ConstrainHeader - //{ - // get - // { - // object obj = BoxState["ConstrainHeader"]; - // return obj == null ? true : (bool)obj; - // } - // set - // { - // BoxState["ConstrainHeader"] = value; - // } - //} - - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否将窗体限制在可视区域")] - //[Browsable(false)] - //private bool Constrain - //{ - // get - // { - // object obj = BoxState["Constrain"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["Constrain"] = value; - // } - //} - - ///// <summary> - ///// 是否内容区域为透明色 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否内容区域为透明色")] - //[Browsable(false)] - //private bool Plain - //{ - // get - // { - // object obj = BoxState["Plain"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // BoxState["Plain"] = value; - // } - //} - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool ShowHeader - { - get - { - return base.ShowHeader; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool ShowBorder - { - get - { - return base.ShowBorder; - } - } - - #endregion - - #region GUID & IFrameName - - ///// <summary> - ///// 这是Window非常特殊的地方 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("控件的客户端ID")] - //internal override string ClientJavascriptID - //{ - // get - // { - // return ClientID; - // } - //} - - ///// <summary> - ///// 为了放置不同页面的Window的ClientID发生冲突,加上GUID - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("控件的客户端ID")] - //public override string ClientID - //{ - // get - // { - // object obj = BoxState["ClientID"]; - // if (obj == null) - // { - // obj = BoxState["ClientID"] = String.Format("{0}_{1}", base.ClientID, System.Guid.NewGuid().ToString("N")); - // } - - // return (string)obj; - // } - //} - - /// <summary> - /// 为了放置不同页面的Window的ClientID发生冲突,加上GUID - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Description("GUID")] - internal string GUID - { - get - { - object obj = XState["GUID"]; - if (obj == null) - { - obj = XState["GUID"] = String.Format("{0}_{1}", XID, System.Guid.NewGuid().ToString("N")); - } - - return (string)obj; - } - } - - /// <summary> - /// [只读]Window的IFrameName必须是唯一的,在所有页面中是唯一的 - /// 所以不要手工定义Window的IFrameName - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameName - { - get - { - return GUID; - } - } - - #endregion - - #region Properties - - - /// <summary> - /// 窗口的位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(WindowPosition.Center)] - [Description("窗口的位置")] - public WindowPosition WindowPosition - { - get - { - object obj = XState["WindowPosition"]; - return obj == null ? WindowPosition.Center : (WindowPosition)obj; - } - set - { - XState["WindowPosition"] = value; - } - } - - - /// <summary> - /// 是否弹出窗体 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否弹出窗体")] - [Obsolete("请使用Hidden属性来标记是否弹出窗口")] - public bool Popup - { - get - { - return !Hidden; - } - set - { - Hidden = !value; - } - } - - - ///// <summary> - ///// 是否最大化 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否最大化")] - //public bool Maximized - //{ - // get - // { - // object obj = XState["Maximized"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["Maximized"] = value; - // } - //} - - - /// <summary> - /// 左上角位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "")] - [Description("左上角位置")] - public Unit Top - { - get - { - object obj = XState["Top"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["Top"] = value; - } - } - - - /// <summary> - /// 左上角位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "")] - [Description("左上角位置")] - public Unit Left - { - get - { - object obj = XState["Left"]; - return obj == null ? Unit.Empty : (Unit)obj; - } - set - { - XState["Left"] = value; - } - } - - - /// <summary> - /// 是否可以关闭 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以关闭")] - public bool EnableClose - { - get - { - object obj = XState["EnableClose"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableClose"] = value; - } - } - - - /// <summary> - /// 是否可以移动 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否可以移动")] - public bool EnableDrag - { - get - { - object obj = XState["EnableDrag"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableDrag"] = value; - } - } - - - /// <summary> - /// 是否可以最大化 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否可以最大化")] - public bool EnableMaximize - { - get - { - object obj = XState["EnableMaximize"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableMaximize"] = value; - } - } - - - /// <summary> - /// 是否可以最小化 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否可以最小化")] - public bool EnableMinimize - { - get - { - object obj = XState["EnableMinimize"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableMinimize"] = value; - } - } - - - /// <summary> - /// 最小高度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "100")] - [Description("最小高度")] - public Unit MinHeight - { - get - { - object obj = XState["MinHeight"]; - return obj == null ? (Unit)100 : (Unit)obj; - } - set - { - XState["MinHeight"] = value; - } - } - - - /// <summary> - /// 最小宽度 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "200")] - [Description("最小宽度")] - public Unit MinWidth - { - get - { - object obj = XState["MinWidth"]; - return obj == null ? (Unit)200 : (Unit)obj; - } - set - { - XState["MinWidth"] = value; - } - } - - /// <summary> - /// 是否模式窗口 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否模式窗口")] - public bool IsModal - { - get - { - object obj = XState["IsModal"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["IsModal"] = value; - } - } - - /// <summary> - /// 是否可以改变窗口大小 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否可以改变窗口大小")] - public bool EnableResize - { - get - { - object obj = XState["EnableResize"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableResize"] = value; - } - } - - - /// <summary> - /// 点击关闭按钮时需要执行的客户端脚本 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("点击关闭按钮时需要执行的客户端脚本")] - public string OnClientCloseButtonClick - { - get - { - object obj = XState["OnClientCloseButtonClick"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["OnClientCloseButtonClick"] = value; - } - } - - - /// <summary> - /// 关闭Window之前弹出确认当前表单改变的对话框 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("关闭Window之前弹出确认当前表单改变的对话框")] - public bool EnableConfirmOnClose - { - get - { - object obj = XState["EnableConfirmOnClose"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableConfirmOnClose"] = value; - } - } - - /// <summary> - /// 关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(CloseAction.Hide)] - [Description("关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作)")] - public CloseAction CloseAction - { - get - { - object obj = XState["CloseAction"]; - return obj == null ? CloseAction.Hide : (CloseAction)obj; - } - set - { - XState["CloseAction"] = value; - } - } - - - ///// <summary> - ///// 弹出窗口的目标位置,支持_self,_parent - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("_self")] - //[Description("弹出窗口的目标位置,支持_self,_parent")] - //public string Target - //{ - // get - // { - // object obj = BoxState["Target"]; - // return obj == null ? "_self" : (string)obj; - // } - // set - // { - // BoxState["Target"] = value; - // } - //} - - /// <summary> - /// 弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效)")] - public Target Target - { - get - { - object obj = XState["Target"]; - return obj == null ? Target.Self : (Target)obj; - } - set - { - XState["Target"] = value; - } - } - - /// <summary> - /// 内容区域颜色是否和边框颜色相同,默认为true - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("内容区域颜色是否和边框颜色相同,默认为true")] - public bool Plain - { - get - { - object obj = XState["Plain"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["Plain"] = value; - } - } - - #region old code - - //private CloseAction CloseAction_Default = CloseAction.None; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(CloseAction.None)] - //[Description("关闭窗体的动作")] - //public CloseAction CloseAction - //{ - // get - // { - // object obj = BoxState["CloseAction"]; - // return obj == null ? CloseAction_Default : (CloseAction)obj; - // } - // set - // { - // BoxState["CloseAction"] = value; - // } - //} - - - //private string ClosePostBackArgument_Default = ""; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("关闭窗体引起回发的参数")] - //public string ClosePostBackArgument - //{ - // get - // { - // object obj = BoxState["ClosePostBackArgument"]; - // return obj == null ? ClosePostBackArgument_Default : (string)obj; - // } - // set - // { - // BoxState["ClosePostBackArgument"] = value; - // } - //} - - //private string DefaultButtonID_Default = ""; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("缺省按钮ID")] - //public string DefaultButtonID - //{ - // get - // { - // object obj = BoxState["DefaultButtonID"]; - // return obj == null ? DefaultButtonID_Default : (string)obj; - // } - // set - // { - // BoxState["DefaultButtonID"] = value; - // } - //} - - - - ///// <summary> - ///// 在父窗口中显示(根据Target属性判断) - ///// </summary> - //internal bool ShowInParent - //{ - // get - // { - // if (!String.IsNullOrEmpty(Target) && Target.ToLower() == "_parent") - // { - // return true; - // } - // return false; - // } - //} - #endregion - - #endregion - - #region Constrain/ConstrainHeader - - // 目前,没法加这两个属性,因为Window是渲染到<form>标签中的一个DIV中的,而这个DIV如果是全屏显示的话会遮盖住后面的元素。 - ///// <summary> - ///// 强制整个窗体始终位于页面的可视区域内 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("强制整个窗体始终位于页面的可视区域内")] - //public bool Constrain - //{ - // get - // { - // object obj = XState["Constrain"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["Constrain"] = value; - // } - //} - - ///// <summary> - ///// 强制窗体的标题栏始终位于页面的可视区域内 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("强制窗体的标题栏始终位于页面的可视区域内")] - //public bool ConstrainHeader - //{ - // get - // { - // object obj = XState["ConstrainHeader"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["ConstrainHeader"] = value; - // } - //} - - #endregion - - #region RenderBeginTag/RenderEndTag - - /// <summary> - /// 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderBeginTag(HtmlTextWriter writer) - { - //base.RenderBeginTag(writer); - - //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", - // PopUpHiddenFieldID, Popup.ToString().ToLower())); - - //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", - // TitleHiddenFieldID, Title.ToString())); - - //// 如果启用IFrame - //if (EnableIFrame) - //{ - // writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", - // IFrameUrlHiddenFieldID, IFrameUrl.ToString())); - //} - } - - /// <summary> - /// 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderEndTag(HtmlTextWriter writer) - { - //base.RenderEndTag(writer); - } - - #endregion - - #region OnPreRender - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Description("是否隐藏窗体")] - private string HiddenHiddenFieldID - { - get - { - return String.Format("{0}_Hidden", ClientID); - } - } - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("window"); - - #region old code - - ////string windowObj = "window"; - //bool showInParent = false; - - //if (!String.IsNullOrEmpty(Target) && Target.ToLower() == "_parent") - //{ - // //windowObj = "parent.window"; - // showInParent = true; - //} - - - //// 以后IFrame中的高度自动处理,不会涉及这块的内容 - //// 因为Window渲染时,如果设置高度600px,则实际生成的高度有601px,所以这里减一 - //if (Height != Unit.Empty) - //{ - // OB.RemoveProperty(OptionName.Height); - // OB.AddProperty(OptionName.Height, Height.Value - 1); - //} - - #endregion - - #region Properties - - OB.AddProperty("closeAction", "hide"); - - //if (EnableClose != EnableClose_Default) OB.AddProperty(OptionName.Closable, EnableClose); - //OB.AddProperty(OptionName.Constrain, Constrain); - //OB.AddProperty(OptionName.ConstrainHeader, ConstrainHeader); - OB.AddProperty("plain", Plain); - OB.AddProperty("modal", IsModal); - OB.AddProperty("draggable", EnableDrag); - - OB.AddProperty("minimizable", EnableMinimize); - OB.AddProperty("minHeight", MinHeight.Value); - OB.AddProperty("minWidth", MinWidth.Value); - - OB.AddProperty("resizable", EnableResize); - - //OB.AddProperty("maximized", Maximized); - - - //// 如果定义了左上角的位置 - //if (Top != Unit.Empty && Left != Unit.Empty) - //{ - // OB.AddProperty(OptionName.X, Left.Value); - // OB.AddProperty(OptionName.Y, Top.Value); - //} - //else - //{ - - //} - - // 在 X.util.init 中定义 - OB.AddProperty("manager", "X.window_default_group", true); - - - // 此Window显示的位置 - //OB.AddProperty("box_property_show_in_parent", ShowInParent); - OB.AddProperty("x_property_target", TargetHelper.GetName(Target)); - OB.AddProperty("x_property_guid", GUID); - OB.AddProperty("x_property_left", Left != Unit.Empty ? Convert.ToInt32(Left.Value).ToString() : ""); - OB.AddProperty("x_property_top", Top != Unit.Empty ? Convert.ToInt32(Top.Value).ToString() : ""); - OB.AddProperty("x_property_position", WindowPosition == WindowPosition.GoldenSection ? "true" : "false", true); - - //if (Constrain) - //{ - // OB.AddProperty("constrain", true); - //} - - //if (ConstrainHeader) - //{ - // OB.AddProperty("constrainHeader", true); - //} - - // 这个为了在客户端生成 PostBack 脚本,比如 __doPostBack('ctl00$ContentPlaceHolder1$Toolbar1$testwindow','') - OB.AddProperty("name", UniqueID); - - #endregion - - #region IconUrl - - if (!String.IsNullOrEmpty(IconUrl)) - { - // 重新对PanelBase中的IconUrl进行定义 - // 因为Window控件可能会在父页面打开,所以在页面中添加CSS的方式是不行的。 - // Modified by sanshi.ustc@gamil.com at 2009-8-1 - - // 首先删除已经添加的CSS样式 - RemoveStartupCSS(String.Format("box-{0}-panelbase-icon", XID)); - - string className = String.Format("box-{0}-window-icon", GUID); - - var addCSSPrefix = String.Empty; - if (Target == Target.Parent) - { - addCSSPrefix = "parent."; - } - else if (Target == Target.Top) - { - addCSSPrefix = "top."; - } - string addCSSScript = String.Format("{0}X.util.addCSS('{1}','{2}');", addCSSPrefix, className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, ResolveUrl(IconUrl))); - - - // 这里不需要extWindow渲染之前才添加CSS样式,只需要在页面加载完毕后就能添加此CSS样式 - //OB.Listeners.AddProperty("beforerender", String.Format("function(){{{0}}}", addCSSScript), true); - AddStartupAbsoluteScript(addCSSScript); - - - OB.AddProperty("iconCls", className); - - //AddStartupScript(this, "X.util.addCSS('xxxxxxxxxxxxxxxx','');"); - //AddStartupScript(this, "Ext.DomHelper.append(Ext.fly(document.getElementsByTagName('head')[0]),{tag: 'style',type: 'text/css'});"); - //AddStartupScript(this, "Ext.DomHelper.append(document.getElementsByTagName('head')[0], '<style type=\"text/css\"></style>');"); - } - - - #endregion - - #region boxHideScript - - #region old code - - ////string hideFunctionId = String.Format("{0}_hide", ClientJavascriptID); - - //// 1.正常关闭 - //StringBuilder boxHideSB = new StringBuilder(); - - //boxHideSB.Append("var panel=null;"); - //if (ShowInParent) - //{ - // boxHideSB.Append("var panel=this.box_parent_window;"); - //} - //else - //{ - // boxHideSB.Append("var panel=this;"); - //} - - - - - //boxHideSB.AppendFormat("Ext.get('{0}').dom.value='false';", PopUpHiddenFieldID); - //// 清空iframe的src,好像不起作用 - //if (EnableIFrame) - //{ - // //boxHideSB.AppendFormat("{0}.setSrc('#');", IFrameID); - // //boxHideSB.AppendFormat("Ext.get('{0}').dom.innerHTML='';", ChildrenContentID); - // //boxHideSB.AppendFormat("panel.body.dom.innerHTML='';"); - // //boxHideSB.AppendFormat("panel.box_property_iframe_loaded=false;"); - // boxHideSB.AppendFormat("panel.body.first().dom.src='about:blank';");//alert(panel.body.first().dom.src); - // //boxHideSB.AppendFormat("panel.box_property_iframe_url='about:blank';"); - - //} - - //boxHideSB.AppendFormat("panel.hide();"); - - //// 以后可能还要做,回收垃圾 - ////if (ShowInParent) - ////{ - //// boxHideSB.AppendFormat("parent.window.Ext.get('{0}').remove();", ClientJavascriptID); - //// boxHideSB.Append("this.box_parent_window=null;"); - ////} - - //// 1.正常关闭 - //OB.AddProperty("box_hide", JsHelper.GetFunctionWrapper(boxHideSB.ToString()), true); - - #endregion - - /* - * 隐藏窗体的JS代码在 extender.js 中定义 - * - string hideFunctionScript = String.Format("function(){{X.wnd.hide(this, '{0}', {1}, '{2}', '{3}');}}", - TargetHelper.GetName(Target), - EnableIFrame.ToString().ToLower(), - HiddenHiddenFieldID, - GUID); - OB.AddProperty("box_hide", hideFunctionScript, true); - - - OB.AddProperty("box_hide_refresh", JsHelper.GetFunction("this.box_hide();window.location.reload();"), true); - - OB.AddProperty("box_hide_postback", String.Format("function(argument){{this.box_hide();{0}}}", GetPostBackEventReference("$ARG$").Replace("'$ARG$'", "argument")), true); - */ - - #endregion - - #region boxShowScript - - #region old code - - //X.c1 = new Ext.Window({ - //renderTo: "__Window2_wrapper", id: "Window2", - //width: 650, height: 450, bodyStyle: "", - //border: true, box_property_iframe: true, box_property_iframe_url: "", - //box_property_iframe_name: "c1_iframe", box_property_iframe_loaded: false, - //animCollapse: false, collapsible: false, collapsed: false, - //title: " 弹出的窗口 2", closeAction: "hide", plain: false, modal: true, - //draggable: true, maximizable: false, minimizable: false, minHeight: 100, - //minWidth: 200, resizable: false, manager: X.window_default_group, - //box_hide: function() { - // var panel = null; var panel = this.box_parent_window; - // Ext.get('__c1_popup').dom.value = 'false'; - // panel.body.first().dom.src = 'about:blank'; - // panel.hide(); - //}, - //box_hide_refresh: function() { - // this.box_hide(); - // window.location = window.location; - //}, - //box_hide_postback: function(argument) { - // this.box_hide(); - // __doPostBack('Window2', argument); - //}, - //box_show: function(iframeUrl, windowTitle) { - // var panel = null; - // if (!this.box_parent_window) { - // if (!parent.window.Ext.get('__Window2_wrapper')) { - // Ext.DomHelper.append(parent.window.document.forms[0], '<div id="__Window2_wrapper" style="display:inline;"></div>'); - // } else { - // parent.window.Ext.get('__Window2_wrapper').dom.innerHTML = ''; - // } - // this.box_parent_window = new parent.window.Ext.Window(this.cloneConfig({ - // manager: parent.window.X.window_default_group, - // id: "c1", - // box_hide: null, box_hide_refresh: null, - // box_hide_postback: null, box_show: null, - // box_property_frame_element_name: window.frameElement.name - // })); - // } - // var panel = this.box_parent_window; - // if (iframeUrl != '') { - // box_resolveIFrameElement(panel, iframeUrl); - // } - // if (windowTitle != '') { - // panel.setTitle(windowTitle); - // } - // var bodySize = parent.window.Ext.getBody().getSize(); - // var windowSize = panel.getSize(); - // var leftTop = box_calculateGoldenPosition(bodySize, windowSize); - // panel.setPosition(leftTop.left, leftTop.top); - // Ext.get('__c1_popup').dom.value = 'true'; - // panel.show(); - //}, - //closable: false, - //tools: [{ id: "close", - // qtip: "关闭此窗口", - // handler: function(event, toolEl, panel) { - // box_getIFrameWindowObject(X.c1.box_parent_window).X.box_pageStateChanged(); - // } }] - //}); - - /////////////////////////////////////////////////////////// - - //StringBuilder boxShowSB = new StringBuilder(); - //boxShowSB.Append("var panel=null;"); - //if (ShowInParent) - //{ - // boxShowSB.Append("if(!this.box_parent_window){"); - - // boxShowSB.AppendFormat("if(!parent.window.Ext.get('{0}')){{Ext.DomHelper.append(parent.window.document.forms[0],'<div id=\"{0}\" style=\"display:inline;\"></div>');}}else{{parent.window.Ext.get('{0}').dom.innerHTML='';}}", WrapperID); - // //// 添加Manager - // //OB.AddProperty(OptionName.Manager, String.Format("{1}", ResourceManager.WINDOW_DEFAULT_GROUP_ID), true); - - // JsObjectBuilder configBuilder = new JsObjectBuilder(); - // configBuilder.AddProperty("manager", "parent.window." + ResourceManager.WINDOW_DEFAULT_GROUP_ID, true); - // // 注意:一定要传递参数进来,否则的话ext会自动生成id - // // An id property can be passed on this object, otherwise one will be generated to avoid duplicates. - // configBuilder.AddProperty("id", ClientJavascriptID); - // configBuilder.AddProperty("box_hide", "null", true); - // configBuilder.AddProperty("box_hide_refresh", "null", true); - // configBuilder.AddProperty("box_hide_postback", "null", true); - // configBuilder.AddProperty("box_show", "null", true); - // //configBuilder.AddProperty("draggable", true); - - // // 需要设置本Window所在页面的iframe的名称 - // configBuilder.AddProperty("box_property_frame_element_name", "window.frameElement.name", true); - - // //configBuilder.AddProperty("box_property_frame_element_name", "window.frameElement.name", true); - - - // boxShowSB.AppendFormat("this.box_parent_window=new parent.window.Ext.Window(this.cloneConfig({0}));", configBuilder); - - // boxShowSB.Append("}"); - - // boxShowSB.AppendFormat("var panel=this.box_parent_window;"); - //} - //else - //{ - // boxShowSB.Append("var panel=this;"); - //} - - - //// 将IFrameUrl的设置放在显示弹出窗口值 - //boxShowSB.Append("if(iframeUrl!=''){"); // alert(new Date()-time11); - ////boxShowSB.Append("\r\n"); - ////boxShowSB.AppendFormat("{0}.setSrc(iframeUrl);", IFrameID); - ////boxShowSB.AppendFormat("{0}.box_property_iframe_url=iframeUrl;", ClientJavascriptID); - //boxShowSB.AppendFormat("box_resolveIFrameElement(panel,iframeUrl);"); - ////boxShowSB.AppendFormat("Ext.get('{0}').dom.value=iframeUrl;", IFrameUrlHiddenFieldID); - ////boxShowSB.Append("\r\n"); - //boxShowSB.Append("}"); - - - //boxShowSB.Append("if(windowTitle!=''){"); - //boxShowSB.AppendFormat("panel.setTitle(windowTitle);"); - ////boxShowSB.AppendFormat("Ext.get('{0}').dom.value=windowTitle;", TitleHiddenFieldID); - //boxShowSB.Append("}"); - - //// 如果定义了左上角的位置 - //if (Top != Unit.Empty && Left != Unit.Empty) - //{ - // // 设置了Top/Left - // boxShowSB.AppendFormat("panel.setPosition({0},{1});", Left.Value, Top.Value); - //} - //else - //{ - // // 如果没有定义左上角的位置 - // if (WindowPosition == WindowPositionType.GoldenSection) - // { - // // 1.使用黄金分割点 - // // TOP: Vertical = (screen.height - (screen.height/1.618)) - (pop-up_height/2) - // // Left: Horizontal = (screen.width - pop-up_width)/2 - // if (ShowInParent) - // { - // boxShowSB.Append("var bodySize=parent.window.Ext.getBody().getSize();"); - // } - // else - // { - // boxShowSB.Append("var bodySize=Ext.getBody().getSize();"); - // } - // boxShowSB.Append("var windowSize=panel.getSize();"); - // // 计算黄金分割点 - // boxShowSB.Append("var leftTop=box_calculateGoldenPosition(bodySize,windowSize);"); - // boxShowSB.Append("panel.setPosition(leftTop.left,leftTop.top);"); - // } - // else - // { - // // 2.中间位置 - // boxShowSB.AppendFormat("panel.alignTo(Ext.getBody(), \"c-c\");"); - // } - //} - //boxShowSB.AppendFormat("Ext.get('{0}').dom.value='true';", PopUpHiddenFieldID); - //boxShowSB.AppendFormat("panel.show();"); //alert(new Date()-time11) - ////boxShowSB.Append("var time_2=new Date();if(time_1){alert(time_2-time_1);}"); - - - //string boxShowFunction = String.Format("function(iframeUrl,windowTitle){{{0}}}", boxShowSB.ToString()); - ////string boxShowScript = String.Format("{0}_show={1};", ClientJavascriptID, boxShowFunction); - //OB.AddProperty("box_show", boxShowFunction, true); - - #endregion - - /* - string showFunctionScript = String.Format("function(iframeUrl, windowTitle){{X.wnd.show(this, iframeUrl, windowTitle, '{0}', '{1}', {2}, '{3}');}}", - Left != Unit.Empty ? Convert.ToInt32(Left.Value).ToString() : "", - Top != Unit.Empty ? Convert.ToInt32(Top.Value).ToString() : "", - WindowPosition == WindowPosition.GoldenSection ? "true" : "false", - HiddenHiddenFieldID); - OB.AddProperty("x_show", showFunctionScript, true); - */ - - #endregion - - #region tools - - #region old code - - //string closeButtonClickScript = String.Empty; - - //closeButtonClickScript += "\r\n"; - - //if (EnableClose) - //{ - // #region old code - - // //string closeScript = String.Empty; - // //if (CloseAction == CloseAction.None) - // //{ - // // closeScript = String.Format("(this.{0}_hide).createDelegate(this)", ClientJavascriptID); - // //} - // //else if (CloseAction == CloseAction.PostBack) - // //{ - // // closeScript = String.Format("(this.{0}_hide_postback).createDelegate(this,['{1}'])", ClientJavascriptID, ClosePostBackArgument); - // //} - // //else if (CloseAction == CloseAction.Refresh) - // //{ - // // closeScript = String.Format("(this.{0}_hide_refresh).createDelegate(this)", ClientJavascriptID); - // //} - - - // //string closeButtonClickScript = String.Format("{0}.tools.close.on('click',{1},this);", ClientJavascriptID, closeScript); - // //AddAbsoluteStartupScript( closeButtonClickScript); - - // #endregion - - // string closeButtonScript = OnClientCloseButtonClick; - // if (String.IsNullOrEmpty(closeButtonScript)) - // { - // closeButtonScript = GetCloseReference(); - // } - // closeButtonScript = String.Format("function(e){{{0}}}", closeButtonScript); - - // // 要先取消 close 注册的事件 - // closeButtonClickScript += String.Format("{0}.tools.close.removeAllListeners();X.{0}.tools.close.on('click',{1},box);", ClientJavascriptID, closeButtonScript); - // //AddAbsoluteStartupScript( closeButtonClickScript); - //} - #endregion - - //JsArrayBuilder toolsBuilder = new JsArrayBuilder(); - - if (EnableMaximize) - { - OB.AddProperty("maximizable", true); - - // 这个事件可以处理两种情况,一是点击最大化按钮,二是双击Window标题栏最大化 - OB.Listeners.AddProperty("maximize", "function(win){X.wnd.fixMaximize(win);}", true); - - //OB.Listeners.AddProperty("resize", "function(win,width,height){console.log(width + ' - ' +height);}", true); - //JsObjectBuilder maxObj = new JsObjectBuilder(); - //maxObj.AddProperty("type", "maximize"); - //maxObj.AddProperty("handler", String.Format("function(event,toolEl,win){{{0}}}", "win.maximize();"), true); - //toolsBuilder.AddProperty(maxObj); - - //JsObjectBuilder minObj = new JsObjectBuilder(); - //minObj.AddProperty("type", "restore"); - //minObj.AddProperty("hidden", true); - //minObj.AddProperty("handler", String.Format("function(event,toolEl,win){{{0}}}", "win.restore();"), true); - //toolsBuilder.AddProperty(minObj); - - - //// This is a bug of Extjs. - //// If the window is not render to window.body, the maximize button works abnormal. - //OB.Listeners.AddProperty("maximize", "function(window){var bodySize=Ext.getBody().getViewSize();window.setSize(bodySize.width,bodySize.height);}", true); - } - else - { - OB.AddProperty("maximizable", false); - } - - if (EnableClose) - { - OB.AddProperty("closable", true); - - string closeScript = String.Empty; - if (!String.IsNullOrEmpty(OnClientCloseButtonClick)) - { - closeScript = OnClientCloseButtonClick; - } - else - { - if (EnableConfirmOnClose) - { - switch (CloseAction) - { - case CloseAction.Hide: - closeScript = GetConfirmHideReference(); - break; - case CloseAction.HideRefresh: - closeScript = GetConfirmHideRefreshReference(); - break; - case CloseAction.HidePostBack: - closeScript = GetConfirmHidePostBackReference(); - break; - } - } - else - { - switch (CloseAction) - { - case CloseAction.Hide: - closeScript = GetHideReference(); - break; - case CloseAction.HideRefresh: - closeScript = GetHideRefreshReference(); - break; - case CloseAction.HidePostBack: - closeScript = GetHidePostBackReference(); - break; - } - } - } - - //JsObjectBuilder closeObj = new JsObjectBuilder(); - //closeObj.AddProperty("type", "close"); - //closeObj.AddProperty("qtip", "X.wnd.closeButtonTooltip", true); - //if (!String.IsNullOrEmpty(closeScript)) - //{ - // // ESC 按键和右上角的关闭按钮使用相同的事件处理函数 - // string closeFunction = JsHelper.GetFunction(closeScript); - // closeObj.AddProperty("handler", closeFunction, true); - // OB.AddProperty("onEsc", closeFunction, true); - - // // TODO:这样会死循环 - // //OB.Listeners.AddProperty("beforehide", JsHelper.GetFunction(closeScript + "return false;"), true); - //} - - //toolsBuilder.AddProperty(closeObj); - - - // ESC 按键和右上角的关闭按钮使用相同的事件处理函数 - string closeFunction = JsHelper.GetFunction(closeScript); - OB.AddProperty("onEsc", closeFunction, true); - - string closeButtonScript = String.Format("win.tools.close.addListener('click', function(){{{0}}});", closeScript); - - //string windowResizeScript = String.Empty; - - //// 窗体控件最大化时改变浏览器大小可以自动调整窗体控件的大小 - //if (EnableMaximize) - //{ - // windowResizeScript = "Ext.EventManager.onWindowResize(function(){X.wnd.fixMaximize(win);});"; - //} - - OB.Listeners.AddProperty("render", JsHelper.GetFunction(closeButtonScript, "win"), true); - - // X('Window1').tools.close.addListener('click', function() {alert('ss');}) - - } - else - { - OB.AddProperty("closable", false); - } - - // 现在不用toolsBuilder - //if (toolsBuilder.Count > 0) - //{ - // //OB.AddProperty("tools", String.Format("{0}", toolsBuilder), true); - //} - - #endregion - - #region Show Window - - // 我们不依赖于extjs的hidden配置属性,而是手工调用 - OB.RemoveProperty("hidden"); - - // 如果页面第一次加载或者非原生回发,需要显示窗体 - if (!Hidden) - { - AddStartupAbsoluteScript(GetShowReference()); - } - - - #endregion - - #region HiddenFields - - // - // 有一个原则:只要是能在客户端改变的属性,均要在回发时保持状态,否则会出现莫名奇妙的问题 - // - string hiddenFieldsScript = String.Empty; - - hiddenFieldsScript += GetSetHiddenFieldValueScript(HiddenHiddenFieldID, Hidden.ToString().ToLower()); - //hiddenFieldsScript += "\r\n"; - - //hiddenFieldsScript += GetAddHiddenFieldScript(TitleHiddenFieldID, Title.ToString()); - - //// 如果启用IFrame - //if (EnableIFrame) - //{ - // hiddenFieldsScript += GetAddHiddenFieldScript(IFrameUrlHiddenFieldID, IFrameUrl.ToString()); - //} - #endregion - - #region AddStartupScript - - // 创建Window对象 - string jsContent = String.Format("var {0}=Ext.create('Ext.window.Window',{1});", XID, OB.ToString()); - - // 通过Javascript的方式向页面添加Window的DIV包裹容器 - string addWrapperScript = String.Format("X.util.appendFormNode('{0}');", String.Format("<div class=\"x-window-wrapper\" id=\"{0}\"></div>", WrapperID)); - //addWrapperScript += "\r\n"; - - // 添加隐藏表单字段的脚本和创建Window对象的脚本 - jsContent = addWrapperScript + hiddenFieldsScript + jsContent; - AddStartupScript(jsContent); - - #endregion - - } - - /// <summary> - /// Override the same method exist in ControlBase, because we have separate logic to hide this control. - /// </summary> - protected override string GetHiddenPropertyChangedScript() - { - if (PropertyModified("Hidden")) - { - //if (ClientPropertyModifiedInServer("Hidden")) - - return Hidden ? GetHideReference() : GetShowReference(); - - } - return String.Empty; - } - - #region old code - - ///// <summary> - ///// 隐藏窗体,并且执行窗体关闭动作 - ///// </summary> - ///// <returns></returns> - //private string GetHideFunctionId() - //{ - // if (CloseAction == CloseAction.Refresh) - // { - // return String.Format("{0}_hide_refresh", ClientJavascriptID); - // } - // else if (CloseAction == CloseAction.PostBack) - // { - // return String.Format("{0}_hide_postback", ClientJavascriptID); - // } - // else - // { - // return String.Format("{0}_hide", ClientJavascriptID); - // } - //} - - #endregion - - #endregion - - #region GetSaveStateReference - - /// <summary> - /// 保存服务器控件的ClientID - /// 可以调用ActiveWindow.GetWriteBackValueReference在子页面向这些服务器控件写入值 - /// </summary> - public string GetSaveStateReference(params string[] values) - { - #region old code - - //string valuesJS = String.Empty; - //if (values == null || values.Length == 0) - //{ - // valuesJS = String.Format("'{0}'", value); - //} - //else - //{ - // string[] tempValues = new string[values.Length + 1]; - // tempValues[0] = value; - // for (int i = 0; i < values.Length; i++) - // { - // tempValues[i + 1] = values[i]; - // } - - // valuesJS = JsHelper.GetJsStringArray(tempValues); - //} - //return String.Format("{0}.box_string_state={1};", ClientJavascriptID, valuesJS); - - #endregion - - string valuesJS = JsHelper.GetJsStringArray(values); - - return String.Format("{0}.x_property_save_state_control_client_ids={1};", ScriptID, valuesJS); - } - - ///// <summary> - ///// 保存值到Window对象中 - ///// </summary> - //public string GetSaveValueReference(bool value) - //{ - // return String.Format("{0}.box_bool_value='{1}';", ClientJavascriptID, value.ToString().ToLower()); - //} - - #endregion - - #region GetShowReference - - /// <summary> - /// 获取显示窗体的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetShowReference() - { - string iframeUrl = String.Empty; - if (EnableIFrame) - { - iframeUrl = IFrameUrl; - } - - return GetShowReference(iframeUrl, Title); - } - - /// <summary> - /// 获取显示窗体的客户端脚本 - /// </summary> - /// <param name="iframeUrl">IFrame地址</param> - /// <returns>客户端脚本</returns> - public string GetShowReference(string iframeUrl) - { - - return GetShowReference(iframeUrl, Title); - } - - /// <summary> - /// 获取显示窗体的客户端脚本 - /// </summary> - /// <param name="iframeUrl">IFrame地址</param> - /// <param name="windowTitle">窗体标题</param> - /// <returns>客户端脚本</returns> - public string GetShowReference(string iframeUrl, string windowTitle) - { - if (!String.IsNullOrEmpty(iframeUrl)) - { - iframeUrl = ResolveIFrameUrl(iframeUrl); - } - - return String.Format("{0}.x_show({1},{2});", ScriptID, JsHelper.GetJsStringWithScriptTag(iframeUrl), JsHelper.GetJsString(windowTitle)); - } - - /// <summary> - /// 获取最大化窗体尺寸的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetMaximizeReference() - { - return String.Format("{0}.x_maximize();", ScriptID); - } - - /// <summary> - /// 获取恢复窗体尺寸的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetRestoreReference() - { - return String.Format("{0}.x_restore();", ScriptID); - } - - /// <summary> - /// 获取最小化窗体尺寸的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetMinimizeReference() - { - return String.Format("{0}.x_minimize();", ScriptID); - } - - - #endregion - - #region GetHideReference GetHideRefreshReference GetHidePostBackReference - - /// <summary> - /// 获取关闭当前激活Window的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetHideReference() - { - return String.Format("{0}.x_hide();", ScriptID); - } - - /// <summary> - /// 获取关闭当前激活Window然后刷新页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetHideRefreshReference() - { - return String.Format("{0}.x_hide_refresh();", ScriptID); - } - - /// <summary> - /// 获取关闭当前激活Window然后回发页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetHidePostBackReference() - { - return String.Format("{0}.x_hide_postback();", ScriptID); - } - - /// <summary> - /// 获取关闭当前激活Window然后回发页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetHidePostBackReference(string argument) - { - //return String.Format("{0}.box_hide_postback('{1}');", ScriptID, argument.Replace("'", "\"")); - return String.Format("{0}.x_hide_postback({1});", ScriptID, JsHelper.GetJsString(argument)); - } - - #endregion - - #region GetConfirmHideReference - - /// <summary> - /// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetConfirmHideReference() - { - return String.Format("X.wnd.extWindowIFrameFormModifiedConfirm({0}, function(){{{1}}});", - ScriptID, - GetHideReference()); - } - - /// <summary> - /// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后刷新父页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetConfirmHideRefreshReference() - { - return String.Format("X.wnd.extWindowIFrameFormModifiedConfirm({0}, function(){{{1}}});", - ScriptID, - GetHideRefreshReference()); - } - - /// <summary> - /// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetConfirmHidePostBackReference() - { - return String.Format("X.wnd.extWindowIFrameFormModifiedConfirm({0}, function(){{{1}}});", - ScriptID, - GetHidePostBackReference()); - } - - - /// <summary> - /// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetConfirmHidePostBackReference(string argument) - { - return String.Format("X.wnd.extWindowIFrameFormModifiedConfirm({0},function(){{{1}}});", - ScriptID, - GetHidePostBackReference(argument)); - } - - - #region oldcode - //public string GetConfirmFormModifiedCloseRefreshReference() - //{ - // return String.Format("X.wnd.extWindowIFrameFormModifiedConfirm({0}, {1}, '{2}');", - // String.Format("{0}", ClientJavascriptID), - // ShowInParent.ToString().ToLower(), - // GUID); - //} - - - - ///// <summary> - ///// - ///// </summary> - ///// <returns></returns> - //public string GetIFramePageStateChangedReference() - //{ - // string panel = String.Format("{0}", ClientJavascriptID); - // if (ShowInParent) - // { - // panel = String.Format("parent.X.{0}", GUID); - // } - // return String.Format("X.wnd.getIFrameWindowObject({0}).X.util.isPageStateChanged()", panel); - //} - - //public string GetIFramePageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript) - //{ - // return GetIFramePageStateChangedConfirmReference(confirmTitle, confirmMsg, okScript, cancelScript, okScript); - //} - - ///// <summary> - ///// 页面状态已经变化的提示信息 - ///// </summary> - ///// <param name="alertMsg"></param> - ///// <returns></returns> - //public string GetIFramePageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript, string notChangeScript) - //{ - // string confirmScript = Confirm.GetShowReference(confirmMsg, confirmTitle, MessageBoxIcon.Warning, okScript, cancelScript, String.Format("{0}.getWindow()", IFrameID)); - // return String.Format("if({0}){{{1}}}else{{{2}}}", GetIFramePageStateChangedReference(), confirmScript, notChangeScript); - //} - #endregion - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - base.LoadPostData(postDataKey, postCollection); - - bool postHidden = Convert.ToBoolean(postCollection[HiddenHiddenFieldID]); - if (Hidden != postHidden) - { - Hidden = postHidden; - XState.BackupPostDataProperty("Hidden"); - return true; - } - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public override void RaisePostDataChangedEvent() - { - base.RaisePostDataChangedEvent(); - - //OnCollapsedChanged(EventArgs.Empty); - } - - #endregion - - #region IPostBackEventHandler Members - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - OnClose(new WindowCloseEventArgs(eventArgument)); - } - - #endregion - - #region OnClose - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack)")] - public event EventHandler<WindowCloseEventArgs> Close - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发窗体关闭事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnClose(WindowCloseEventArgs e) - { - EventHandler<WindowCloseEventArgs> handler = Events[_handlerKey] as EventHandler<WindowCloseEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - #endregion - - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Window.cs + * CreatedOn: 2008-05-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * ->Window有很多特殊的地方: + 1.不受页面中嵌套层次的限制 + 2.ClientJavascriptID和ID一样(这个不好,容易混淆多个层次中的Window,废除) + 3.不使用ClientJavascriptID(也即是不压缩js对象的名称)(这个不好,容易混淆多个层次中的Window,废除) + 4.想到一个办法,通过IFrame的url向子页面传递所在的窗口的信息(比如窗口的客户端名称) + 5.综合2,3点,现在ClientJavascriptID==ClientID,同时ClientID经过特殊处理,保证在多个页面唯一性。 + * + * + * ->想让Ext-Window不受嵌套层次的限制(总在最外层),好办 + * 只需在创建Window对象之前,使用Javascript向form中添加一个DIV用来放置Window对象(而不是使用RenderImmediately的方法实现) + * 30372245@qq.com 2009-02-25 + * + * ->当前的Ext-Window可能要在父页面弹出,也就是要添加到父页面,为了放置名称的冲突,需要随机一个GUID,以便向父页面添加Ext-Window时使用 + * 30372245@qq.com 2009-02-25 + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.ComponentModel.Design; + +namespace FineUI +{ + // Window控件区别于其他容器控件的地方:RenderImmediately=true,也就是说Window不会渲染为其它控件的子控件,尽管Window可以放在其它控件内 + /// <summary> + /// 窗体控件 + /// </summary> + [Designer("FineUI.Design.WindowDesigner, FineUI.Design")] + [ToolboxData("<{0}:Window IsModal=\"true\" Width=\"500px\" Height=\"350px\" Title=\"Window\" BodyPadding=\"5px\" runat=\"server\"></{0}:Window>")] + [ToolboxBitmap(typeof(Window), "toolbox.Window.bmp")] + [Description("窗体控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Window : CollapsablePanel, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Window() + { + ServerAjaxProperties.Remove("Hidden"); + ClientAjaxProperties.Add("Hidden"); + + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region private properties + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否将窗体标题限制在可视区域")] + //[Browsable(false)] + //private bool ConstrainHeader + //{ + // get + // { + // object obj = BoxState["ConstrainHeader"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // BoxState["ConstrainHeader"] = value; + // } + //} + + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否将窗体限制在可视区域")] + //[Browsable(false)] + //private bool Constrain + //{ + // get + // { + // object obj = BoxState["Constrain"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["Constrain"] = value; + // } + //} + + ///// <summary> + ///// 是否内容区域为透明色 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否内容区域为透明色")] + //[Browsable(false)] + //private bool Plain + //{ + // get + // { + // object obj = BoxState["Plain"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["Plain"] = value; + // } + //} + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return base.ShowHeader; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowBorder + { + get + { + return base.ShowBorder; + } + } + + #endregion + + #region GUID & IFrameName + + ///// <summary> + ///// 这是Window非常特殊的地方 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("控件的客户端ID")] + //internal override string ClientJavascriptID + //{ + // get + // { + // return ClientID; + // } + //} + + ///// <summary> + ///// 为了放置不同页面的Window的ClientID发生冲突,加上GUID + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("控件的客户端ID")] + //public override string ClientID + //{ + // get + // { + // object obj = BoxState["ClientID"]; + // if (obj == null) + // { + // obj = BoxState["ClientID"] = String.Format("{0}_{1}", base.ClientID, System.Guid.NewGuid().ToString("N")); + // } + + // return (string)obj; + // } + //} + + /// <summary> + /// 为了放置不同页面的Window的ClientID发生冲突,加上GUID + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("GUID")] + internal string GUID + { + get + { + object obj = FState["GUID"]; + if (obj == null) + { + obj = FState["GUID"] = String.Format("{0}_{1}", XID, System.Guid.NewGuid().ToString("N")); + } + + return (string)obj; + } + } + + /// <summary> + /// [只读]Window的IFrameName必须是唯一的,在所有页面中是唯一的 + /// 所以不要手工定义Window的IFrameName + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return GUID; + } + } + + #endregion + + #region Properties + + + /// <summary> + /// 窗口的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(WindowPosition.Center)] + [Description("窗口的位置")] + public WindowPosition WindowPosition + { + get + { + object obj = FState["WindowPosition"]; + return obj == null ? WindowPosition.Center : (WindowPosition)obj; + } + set + { + FState["WindowPosition"] = value; + } + } + + + ///// <summary> + ///// 是否弹出窗体 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否弹出窗体")] + //[Obsolete("请使用Hidden属性来标记是否弹出窗口")] + //public bool Popup + //{ + // get + // { + // return !Hidden; + // } + // set + // { + // Hidden = !value; + // } + //} + + + ///// <summary> + ///// 是否最大化 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否最大化")] + //public bool Maximized + //{ + // get + // { + // object obj = FState["Maximized"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Maximized"] = value; + // } + //} + + + /// <summary> + /// 左上角位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("左上角位置")] + public Unit Top + { + get + { + object obj = FState["Top"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Top"] = value; + } + } + + + /// <summary> + /// 左上角位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("左上角位置")] + public Unit Left + { + get + { + object obj = FState["Left"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Left"] = value; + } + } + + + /// <summary> + /// 是否可以关闭 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以关闭")] + public bool EnableClose + { + get + { + object obj = FState["EnableClose"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableClose"] = value; + } + } + + + /// <summary> + /// 是否可以移动 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以移动")] + public bool EnableDrag + { + get + { + object obj = FState["EnableDrag"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableDrag"] = value; + } + } + + + /// <summary> + /// 是否可以最大化 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以最大化")] + public bool EnableMaximize + { + get + { + object obj = FState["EnableMaximize"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMaximize"] = value; + } + } + + + /// <summary> + /// 是否可以最小化 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以最小化")] + public bool EnableMinimize + { + get + { + object obj = FState["EnableMinimize"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMinimize"] = value; + } + } + + + /// <summary> + /// 最小高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "100")] + [Description("最小高度")] + public Unit MinHeight + { + get + { + object obj = FState["MinHeight"]; + return obj == null ? (Unit)100 : (Unit)obj; + } + set + { + FState["MinHeight"] = value; + } + } + + + /// <summary> + /// 最小宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "200")] + [Description("最小宽度")] + public Unit MinWidth + { + get + { + object obj = FState["MinWidth"]; + return obj == null ? (Unit)200 : (Unit)obj; + } + set + { + FState["MinWidth"] = value; + } + } + + /// <summary> + /// 是否模式窗口 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否模式窗口")] + public bool IsModal + { + get + { + object obj = FState["IsModal"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["IsModal"] = value; + } + } + + /// <summary> + /// 是否可以改变窗口大小 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以改变窗口大小")] + public bool EnableResize + { + get + { + object obj = FState["EnableResize"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableResize"] = value; + } + } + + + /// <summary> + /// 点击关闭按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击关闭按钮时需要执行的客户端脚本")] + public string OnClientCloseButtonClick + { + get + { + object obj = FState["OnClientCloseButtonClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientCloseButtonClick"] = value; + } + } + + + ///// <summary> + ///// 关闭窗体之前弹出确认窗体内IFrame中表单改变的对话框 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("关闭窗体之前弹出确认窗体内IFrame中表单改变的对话框")] + //public bool EnableConfirmOnClose + //{ + // get + // { + // object obj = FState["EnableConfirmOnClose"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableConfirmOnClose"] = value; + // } + //} + + /// <summary> + /// 关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(CloseAction.Hide)] + [Description("关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作)")] + public CloseAction CloseAction + { + get + { + object obj = FState["CloseAction"]; + return obj == null ? CloseAction.Hide : (CloseAction)obj; + } + set + { + FState["CloseAction"] = value; + } + } + + + ///// <summary> + ///// 弹出窗口的目标位置,支持_self,_parent + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("_self")] + //[Description("弹出窗口的目标位置,支持_self,_parent")] + //public string Target + //{ + // get + // { + // object obj = BoxState["Target"]; + // return obj == null ? "_self" : (string)obj; + // } + // set + // { + // BoxState["Target"] = value; + // } + //} + + /// <summary> + /// 弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效)")] + public Target Target + { + get + { + object obj = FState["Target"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["Target"] = value; + } + } + + ///// <summary> + ///// 内容区域颜色是否和边框颜色相同,默认为true + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("内容区域颜色是否和边框颜色相同,默认为true")] + //public bool Plain + //{ + // get + // { + // object obj = FState["Plain"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["Plain"] = value; + // } + //} + + #region old code + + //private CloseAction CloseAction_Default = CloseAction.None; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(CloseAction.None)] + //[Description("关闭窗体的动作")] + //public CloseAction CloseAction + //{ + // get + // { + // object obj = BoxState["CloseAction"]; + // return obj == null ? CloseAction_Default : (CloseAction)obj; + // } + // set + // { + // BoxState["CloseAction"] = value; + // } + //} + + + //private string ClosePostBackArgument_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("关闭窗体引起回发的参数")] + //public string ClosePostBackArgument + //{ + // get + // { + // object obj = BoxState["ClosePostBackArgument"]; + // return obj == null ? ClosePostBackArgument_Default : (string)obj; + // } + // set + // { + // BoxState["ClosePostBackArgument"] = value; + // } + //} + + //private string DefaultButtonID_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("缺省按钮ID")] + //public string DefaultButtonID + //{ + // get + // { + // object obj = BoxState["DefaultButtonID"]; + // return obj == null ? DefaultButtonID_Default : (string)obj; + // } + // set + // { + // BoxState["DefaultButtonID"] = value; + // } + //} + + + + ///// <summary> + ///// 在父窗口中显示(根据Target属性判断) + ///// </summary> + //internal bool ShowInParent + //{ + // get + // { + // if (!String.IsNullOrEmpty(Target) && Target.ToLower() == "_parent") + // { + // return true; + // } + // return false; + // } + //} + #endregion + + #endregion + + #region Constrain/ConstrainHeader + + // 目前,没法加这两个属性,因为Window是渲染到<form>标签中的一个DIV中的,而这个DIV如果是全屏显示的话会遮盖住后面的元素。 + ///// <summary> + ///// 强制整个窗体始终位于页面的可视区域内 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("强制整个窗体始终位于页面的可视区域内")] + //public bool Constrain + //{ + // get + // { + // object obj = FState["Constrain"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Constrain"] = value; + // } + //} + + ///// <summary> + ///// 强制窗体的标题栏始终位于页面的可视区域内 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("强制窗体的标题栏始终位于页面的可视区域内")] + //public bool ConstrainHeader + //{ + // get + // { + // object obj = FState["ConstrainHeader"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["ConstrainHeader"] = value; + // } + //} + + #endregion + + #region RenderBeginTag/RenderEndTag + + /// <summary> + /// 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + //base.RenderBeginTag(writer); + + //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // PopUpHiddenFieldID, Popup.ToString().ToLower())); + + //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // TitleHiddenFieldID, Title.ToString())); + + //// 如果启用IFrame + //if (EnableIFrame) + //{ + // writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // IFrameUrlHiddenFieldID, IFrameUrl.ToString())); + //} + } + + /// <summary> + /// 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + //base.RenderEndTag(writer); + } + + #endregion + + #region OnPreRender + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("是否隐藏窗体")] + private string HiddenHiddenFieldID + { + get + { + return String.Format("{0}_Hidden", ClientID); + } + } + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("window"); + + #region old code + + ////string windowObj = "window"; + //bool showInParent = false; + + //if (!String.IsNullOrEmpty(Target) && Target.ToLower() == "_parent") + //{ + // //windowObj = "parent.window"; + // showInParent = true; + //} + + + //// 以后IFrame中的高度自动处理,不会涉及这块的内容 + //// 因为Window渲染时,如果设置高度600px,则实际生成的高度有601px,所以这里减一 + //if (Height != Unit.Empty) + //{ + // OB.RemoveProperty(OptionName.Height); + // OB.AddProperty(OptionName.Height, Height.Value - 1); + //} + + #endregion + + #region 验证EnableIFrame和Target是否冲突 + + if (!EnableIFrame && Target != Target.Self) + { + Target = Target.Self; + } + + #endregion + + #region Properties + + OB.AddProperty("closeAction", "hide"); + + //if (EnableClose != EnableClose_Default) OB.AddProperty(OptionName.Closable, EnableClose); + //OB.AddProperty(OptionName.Constrain, Constrain); + //OB.AddProperty(OptionName.ConstrainHeader, ConstrainHeader); + //OB.AddProperty("plain", Plain); + + OB.AddProperty("draggable", EnableDrag); + + OB.AddProperty("minimizable", EnableMinimize); + OB.AddProperty("minHeight", MinHeight.Value); + OB.AddProperty("minWidth", MinWidth.Value); + + OB.AddProperty("resizable", EnableResize); + + //OB.AddProperty("maximized", Maximized); + + + // 由于renderTo不是Ext.getBody,所以modal不能正常工作 + OB.AddProperty("modal", IsModal); + + + // 在 F.util.init 中定义 + OB.AddProperty("manager", "F.window_default_group", true); + + + // 此Window显示的位置 + //OB.AddProperty("box_property_show_in_parent", ShowInParent); + OB.AddProperty("f_property_target", TargetHelper.GetName(Target)); + OB.AddProperty("f_property_guid", GUID); + OB.AddProperty("f_property_left", Left != Unit.Empty ? Convert.ToInt32(Left.Value).ToString() : ""); + OB.AddProperty("f_property_top", Top != Unit.Empty ? Convert.ToInt32(Top.Value).ToString() : ""); + OB.AddProperty("f_property_position", WindowPosition == WindowPosition.GoldenSection ? "true" : "false", true); + + if (!EnableAjax) + { + OB.AddProperty("f_property_enable_ajax", false); + } + + //if (Constrain) + //{ + // OB.AddProperty("constrain", true); + //} + + //if (ConstrainHeader) + //{ + // OB.AddProperty("constrainHeader", true); + //} + + + + // 这个为了在客户端生成 PostBack 脚本,比如 __doPostBack('ctl00$ContentPlaceHolder1$Toolbar1$testwindow','') + OB.AddProperty("name", UniqueID); + + #endregion + + #region IconUrl + + if (!String.IsNullOrEmpty(IconUrl)) + { + // 重新对PanelBase中的IconUrl进行定义 + // 因为Window控件可能会在父页面打开,所以在页面中添加CSS的方式是不行的。 + // Modified by sanshi.ustc@gamil.com at 2009-8-1 + + // 首先删除已经添加的CSS样式 + RemoveStartupCSS(String.Format("f-{0}-panelbase-icon", XID)); + + string className = String.Format("f-{0}-window-icon", GUID); + + var addCSSPrefix = String.Empty; + if (Target == Target.Parent) + { + addCSSPrefix = "parent."; + } + else if (Target == Target.Top) + { + addCSSPrefix = "top."; + } + string addCSSScript = String.Format("{0}F.addCSS('{1}','{2}');", addCSSPrefix, className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, ResolveUrl(IconUrl))); + + + // 这里不需要extWindow渲染之前才添加CSS样式,只需要在页面加载完毕后就能添加此CSS样式 + //OB.Listeners.AddProperty("beforerender", String.Format("function(){{{0}}}", addCSSScript), true); + AddStartupAbsoluteScript(addCSSScript); + + + OB.AddProperty("iconCls", className); + + //AddStartupScript(this, "F.util.addCSS('xxxxxxxxxxxxxxxx','');"); + //AddStartupScript(this, "Ext.DomHelper.append(Ext.fly(document.getElementsByTagName('head')[0]),{tag: 'style',type: 'text/css'});"); + //AddStartupScript(this, "Ext.DomHelper.append(document.getElementsByTagName('head')[0], '<style type=\"text/css\"></style>');"); + } + + + #endregion + + #region boxHideScript + + #region old code + + ////string hideFunctionId = String.Format("{0}_hide", ClientJavascriptID); + + //// 1.正常关闭 + //StringBuilder boxHideSB = new StringBuilder(); + + //boxHideSB.Append("var panel=null;"); + //if (ShowInParent) + //{ + // boxHideSB.Append("var panel=this.box_parent_window;"); + //} + //else + //{ + // boxHideSB.Append("var panel=this;"); + //} + + + + + //boxHideSB.AppendFormat("Ext.get('{0}').dom.value='false';", PopUpHiddenFieldID); + //// 清空iframe的src,好像不起作用 + //if (EnableIFrame) + //{ + // //boxHideSB.AppendFormat("{0}.setSrc('#');", IFrameID); + // //boxHideSB.AppendFormat("Ext.get('{0}').dom.innerHTML='';", ChildrenContentID); + // //boxHideSB.AppendFormat("panel.body.dom.innerHTML='';"); + // //boxHideSB.AppendFormat("panel.box_property_iframe_loaded=false;"); + // boxHideSB.AppendFormat("panel.body.first().dom.src='about:blank';");//alert(panel.body.first().dom.src); + // //boxHideSB.AppendFormat("panel.box_property_iframe_url='about:blank';"); + + //} + + //boxHideSB.AppendFormat("panel.hide();"); + + //// 以后可能还要做,回收垃圾 + ////if (ShowInParent) + ////{ + //// boxHideSB.AppendFormat("parent.window.Ext.get('{0}').remove();", ClientJavascriptID); + //// boxHideSB.Append("this.box_parent_window=null;"); + ////} + + //// 1.正常关闭 + //OB.AddProperty("box_hide", JsHelper.GetFunctionWrapper(boxHideSB.ToString()), true); + + #endregion + + /* + * 隐藏窗体的JS代码在 extender.js 中定义 + * + string hideFunctionScript = String.Format("function(){{F.wnd.hide(this, '{0}', {1}, '{2}', '{3}');}}", + TargetHelper.GetName(Target), + EnableIFrame.ToString().ToLower(), + HiddenHiddenFieldID, + GUID); + OB.AddProperty("box_hide", hideFunctionScript, true); + + + OB.AddProperty("box_hide_refresh", JsHelper.GetFunction("this.box_hide();window.location.reload();"), true); + + OB.AddProperty("box_hide_postback", String.Format("function(argument){{this.box_hide();{0}}}", GetPostBackEventReference("$ARG$").Replace("'$ARG$'", "argument")), true); + */ + + #endregion + + #region boxShowScript + + #region old code + + //X.c1 = new Ext.Window({ + //renderTo: "__Window2_wrapper", id: "Window2", + //width: 650, height: 450, bodyStyle: "", + //border: true, box_property_iframe: true, box_property_iframe_url: "", + //box_property_iframe_name: "c1_iframe", box_property_iframe_loaded: false, + //animCollapse: false, collapsible: false, collapsed: false, + //title: " 弹出的窗口 2", closeAction: "hide", plain: false, modal: true, + //draggable: true, maximizable: false, minimizable: false, minHeight: 100, + //minWidth: 200, resizable: false, manager: X.window_default_group, + //box_hide: function() { + // var panel = null; var panel = this.box_parent_window; + // Ext.get('__c1_popup').dom.value = 'false'; + // panel.body.first().dom.src = 'about:blank'; + // panel.hide(); + //}, + //box_hide_refresh: function() { + // this.box_hide(); + // window.location = window.location; + //}, + //box_hide_postback: function(argument) { + // this.box_hide(); + // __doPostBack('Window2', argument); + //}, + //box_show: function(iframeUrl, windowTitle) { + // var panel = null; + // if (!this.box_parent_window) { + // if (!parent.window.Ext.get('__Window2_wrapper')) { + // Ext.DomHelper.append(parent.window.document.forms[0], '<div id="__Window2_wrapper" style="display:inline;"></div>'); + // } else { + // parent.window.Ext.get('__Window2_wrapper').dom.innerHTML = ''; + // } + // this.box_parent_window = new parent.window.Ext.Window(this.cloneConfig({ + // manager: parent.window.X.window_default_group, + // id: "c1", + // box_hide: null, box_hide_refresh: null, + // box_hide_postback: null, box_show: null, + // box_property_frame_element_name: window.frameElement.name + // })); + // } + // var panel = this.box_parent_window; + // if (iframeUrl != '') { + // box_resolveIFrameElement(panel, iframeUrl); + // } + // if (windowTitle != '') { + // panel.setTitle(windowTitle); + // } + // var bodySize = parent.window.Ext.getBody().getSize(); + // var windowSize = panel.getSize(); + // var leftTop = box_calculateGoldenPosition(bodySize, windowSize); + // panel.setPosition(leftTop.left, leftTop.top); + // Ext.get('__c1_popup').dom.value = 'true'; + // panel.show(); + //}, + //closable: false, + //tools: [{ id: "close", + // qtip: "关闭此窗口", + // handler: function(event, toolEl, panel) { + // box_getIFrameWindowObject(X.c1.box_parent_window).X.box_pageStateChanged(); + // } }] + //}); + + /////////////////////////////////////////////////////////// + + //StringBuilder boxShowSB = new StringBuilder(); + //boxShowSB.Append("var panel=null;"); + //if (ShowInParent) + //{ + // boxShowSB.Append("if(!this.box_parent_window){"); + + // boxShowSB.AppendFormat("if(!parent.window.Ext.get('{0}')){{Ext.DomHelper.append(parent.window.document.forms[0],'<div id=\"{0}\" style=\"display:inline;\"></div>');}}else{{parent.window.Ext.get('{0}').dom.innerHTML='';}}", WrapperID); + // //// 添加Manager + // //OB.AddProperty(OptionName.Manager, String.Format("{1}", ResourceManager.WINDOW_DEFAULT_GROUP_ID), true); + + // JsObjectBuilder configBuilder = new JsObjectBuilder(); + // configBuilder.AddProperty("manager", "parent.window." + ResourceManager.WINDOW_DEFAULT_GROUP_ID, true); + // // 注意:一定要传递参数进来,否则的话ext会自动生成id + // // An id property can be passed on this object, otherwise one will be generated to avoid duplicates. + // configBuilder.AddProperty("id", ClientJavascriptID); + // configBuilder.AddProperty("box_hide", "null", true); + // configBuilder.AddProperty("box_hide_refresh", "null", true); + // configBuilder.AddProperty("box_hide_postback", "null", true); + // configBuilder.AddProperty("box_show", "null", true); + // //configBuilder.AddProperty("draggable", true); + + // // 需要设置本Window所在页面的iframe的名称 + // configBuilder.AddProperty("box_property_frame_element_name", "window.frameElement.name", true); + + // //configBuilder.AddProperty("box_property_frame_element_name", "window.frameElement.name", true); + + + // boxShowSB.AppendFormat("this.box_parent_window=new parent.window.Ext.Window(this.cloneConfig({0}));", configBuilder); + + // boxShowSB.Append("}"); + + // boxShowSB.AppendFormat("var panel=this.box_parent_window;"); + //} + //else + //{ + // boxShowSB.Append("var panel=this;"); + //} + + + //// 将IFrameUrl的设置放在显示弹出窗口值 + //boxShowSB.Append("if(iframeUrl!=''){"); // alert(new Date()-time11); + ////boxShowSB.Append("\r\n"); + ////boxShowSB.AppendFormat("{0}.setSrc(iframeUrl);", IFrameID); + ////boxShowSB.AppendFormat("{0}.box_property_iframe_url=iframeUrl;", ClientJavascriptID); + //boxShowSB.AppendFormat("box_resolveIFrameElement(panel,iframeUrl);"); + ////boxShowSB.AppendFormat("Ext.get('{0}').dom.value=iframeUrl;", IFrameUrlHiddenFieldID); + ////boxShowSB.Append("\r\n"); + //boxShowSB.Append("}"); + + + //boxShowSB.Append("if(windowTitle!=''){"); + //boxShowSB.AppendFormat("panel.setTitle(windowTitle);"); + ////boxShowSB.AppendFormat("Ext.get('{0}').dom.value=windowTitle;", TitleHiddenFieldID); + //boxShowSB.Append("}"); + + //// 如果定义了左上角的位置 + //if (Top != Unit.Empty && Left != Unit.Empty) + //{ + // // 设置了Top/Left + // boxShowSB.AppendFormat("panel.setPosition({0},{1});", Left.Value, Top.Value); + //} + //else + //{ + // // 如果没有定义左上角的位置 + // if (WindowPosition == WindowPositionType.GoldenSection) + // { + // // 1.使用黄金分割点 + // // TOP: Vertical = (screen.height - (screen.height/1.618)) - (pop-up_height/2) + // // Left: Horizontal = (screen.width - pop-up_width)/2 + // if (ShowInParent) + // { + // boxShowSB.Append("var bodySize=parent.window.Ext.getBody().getSize();"); + // } + // else + // { + // boxShowSB.Append("var bodySize=Ext.getBody().getSize();"); + // } + // boxShowSB.Append("var windowSize=panel.getSize();"); + // // 计算黄金分割点 + // boxShowSB.Append("var leftTop=box_calculateGoldenPosition(bodySize,windowSize);"); + // boxShowSB.Append("panel.setPosition(leftTop.left,leftTop.top);"); + // } + // else + // { + // // 2.中间位置 + // boxShowSB.AppendFormat("panel.alignTo(Ext.getBody(), \"c-c\");"); + // } + //} + //boxShowSB.AppendFormat("Ext.get('{0}').dom.value='true';", PopUpHiddenFieldID); + //boxShowSB.AppendFormat("panel.show();"); //alert(new Date()-time11) + ////boxShowSB.Append("var time_2=new Date();if(time_1){alert(time_2-time_1);}"); + + + //string boxShowFunction = String.Format("function(iframeUrl,windowTitle){{{0}}}", boxShowSB.ToString()); + ////string boxShowScript = String.Format("{0}_show={1};", ClientJavascriptID, boxShowFunction); + //OB.AddProperty("box_show", boxShowFunction, true); + + #endregion + + /* + string showFunctionScript = String.Format("function(iframeUrl, windowTitle){{F.wnd.show(this, iframeUrl, windowTitle, '{0}', '{1}', {2}, '{3}');}}", + Left != Unit.Empty ? Convert.ToInt32(Left.Value).ToString() : "", + Top != Unit.Empty ? Convert.ToInt32(Top.Value).ToString() : "", + WindowPosition == WindowPosition.GoldenSection ? "true" : "false", + HiddenHiddenFieldID); + OB.AddProperty("f_show", showFunctionScript, true); + */ + + #endregion + + #region tools + + #region old code + + //string closeButtonClickScript = String.Empty; + + //closeButtonClickScript += "\r\n"; + + //if (EnableClose) + //{ + // #region old code + + // //string closeScript = String.Empty; + // //if (CloseAction == CloseAction.None) + // //{ + // // closeScript = String.Format("(this.{0}_hide).createDelegate(this)", ClientJavascriptID); + // //} + // //else if (CloseAction == CloseAction.PostBack) + // //{ + // // closeScript = String.Format("(this.{0}_hide_postback).createDelegate(this,['{1}'])", ClientJavascriptID, ClosePostBackArgument); + // //} + // //else if (CloseAction == CloseAction.Refresh) + // //{ + // // closeScript = String.Format("(this.{0}_hide_refresh).createDelegate(this)", ClientJavascriptID); + // //} + + + // //string closeButtonClickScript = String.Format("{0}.tools.close.on('click',{1},this);", ClientJavascriptID, closeScript); + // //AddAbsoluteStartupScript( closeButtonClickScript); + + // #endregion + + // string closeButtonScript = OnClientCloseButtonClick; + // if (String.IsNullOrEmpty(closeButtonScript)) + // { + // closeButtonScript = GetCloseReference(); + // } + // closeButtonScript = String.Format("function(e){{{0}}}", closeButtonScript); + + // // 要先取消 close 注册的事件 + // closeButtonClickScript += String.Format("{0}.tools.close.removeAllListeners();X.{0}.tools.close.on('click',{1},box);", ClientJavascriptID, closeButtonScript); + // //AddAbsoluteStartupScript( closeButtonClickScript); + //} + #endregion + + //JsArrayBuilder toolsBuilder = new JsArrayBuilder(); + + if (EnableMaximize) + { + OB.AddProperty("maximizable", true); + + // 这个事件可以处理两种情况,一是点击最大化按钮,二是双击Window标题栏最大化 + //OB.Listeners.AddProperty("maximize", "function(win){F.wnd.fixMaximize(win);}", true); + AddListener("maximize", "F.wnd.fixMaximize(win);", "win"); + + //OB.Listeners.AddProperty("resize", "function(win,width,height){console.log(width + ' - ' +height);}", true); + //JsObjectBuilder maxObj = new JsObjectBuilder(); + //maxObj.AddProperty("type", "maximize"); + //maxObj.AddProperty("handler", String.Format("function(event,toolEl,win){{{0}}}", "win.maximize();"), true); + //toolsBuilder.AddProperty(maxObj); + + //JsObjectBuilder minObj = new JsObjectBuilder(); + //minObj.AddProperty("type", "restore"); + //minObj.AddProperty("hidden", true); + //minObj.AddProperty("handler", String.Format("function(event,toolEl,win){{{0}}}", "win.restore();"), true); + //toolsBuilder.AddProperty(minObj); + + + //// This is a bug of Extjs. + //// If the window is not render to window.body, the maximize button works abnormal. + //OB.Listeners.AddProperty("maximize", "function(window){var bodySize=Ext.getBody().getViewSize();window.setSize(bodySize.width,bodySize.height);}", true); + } + else + { + OB.AddProperty("maximizable", false); + } + + + + if (EnableClose) + { + string closeScript = String.Empty; + + OB.AddProperty("closable", true); + + if (!String.IsNullOrEmpty(OnClientCloseButtonClick)) + { + closeScript = OnClientCloseButtonClick; + } + else + { + //if (EnableConfirmOnClose) + //{ + // switch (CloseAction) + // { + // case CloseAction.Hide: + // closeScript = GetConfirmHideReference(); + // break; + // case CloseAction.HideRefresh: + // closeScript = GetConfirmHideRefreshReference(); + // break; + // case CloseAction.HidePostBack: + // closeScript = GetConfirmHidePostBackReference(); + // break; + // } + //} + //else + //{ + switch (CloseAction) + { + case CloseAction.Hide: + closeScript = GetHideReference(); + break; + case CloseAction.HideRefresh: + closeScript = GetHideRefreshReference(); + break; + case CloseAction.HidePostBack: + closeScript = GetHidePostBackReference(); + break; + } + //} + } + + //JsObjectBuilder closeObj = new JsObjectBuilder(); + //closeObj.AddProperty("type", "close"); + //closeObj.AddProperty("qtip", "F.wnd.closeButtonTooltip", true); + //if (!String.IsNullOrEmpty(closeScript)) + //{ + // // ESC 按键和右上角的关闭按钮使用相同的事件处理函数 + // string closeFunction = JsHelper.GetFunction(closeScript); + // closeObj.AddProperty("handler", closeFunction, true); + // OB.AddProperty("onEsc", closeFunction, true); + + // // TODO:这样会死循环 + // //OB.Listeners.AddProperty("beforehide", JsHelper.GetFunction(closeScript + "return false;"), true); + //} + + //toolsBuilder.AddProperty(closeObj); + + + //// ESC 按键和右上角的关闭按钮使用相同的事件处理函数 + //string closeFN = XID + "_close"; + //closeScript = String.Format("var {0}={1};", closeFN, JsHelper.GetFunction(closeScript + "return false;")); + + //// 用户按ESC键关闭窗口 + //OB.AddProperty("onEsc", closeFN, true); + //// 用户点击右上角关闭按钮关闭窗口 + //OB.Listeners.AddProperty("beforeclose", closeFN, true); + + + // 【点击右上角关闭按钮】和【用户按ESC键】都会调用 beforeclose 事件处理函数,return false; 表示自行处理关闭事件 + AddListener("beforeclose", closeScript + "return false;"); + } + else + { + OB.AddProperty("closable", false); + } + + #endregion + + #region Show Window + + string showWindowScript = String.Empty; + + // 我们不依赖于extjs的hidden配置属性,而是手工调用 + OB.RemoveProperty("hidden"); + + // 如果页面第一次加载或者非原生回发,需要显示窗体 + if (!Hidden) + { + showWindowScript = GetShowReference().Replace(ScriptID + ".", XID + "."); + //AddStartupAbsoluteScript(GetShowReference()); + } + + + #endregion + + #region HiddenFields + + // + // 有一个原则:只要是能在客户端改变的属性,均要在回发时保持状态,否则会出现莫名奇妙的问题 + // + string hiddenFieldsScript = String.Empty; + + hiddenFieldsScript += GetSetHiddenFieldValueScript(HiddenHiddenFieldID, Hidden.ToString().ToLower()); + //hiddenFieldsScript += "\r\n"; + + //hiddenFieldsScript += GetAddHiddenFieldScript(TitleHiddenFieldID, Title.ToString()); + + //// 如果启用IFrame + //if (EnableIFrame) + //{ + // hiddenFieldsScript += GetAddHiddenFieldScript(IFrameUrlHiddenFieldID, IFrameUrl.ToString()); + //} + #endregion + + #region AddStartupScript + + // 无论把 Window 控件放在哪里(母版页,或者用户控件中都行),因为下面会输出 Window 在页面上的节点,所以一定要输出 renderTo + OB.AddProperty("renderTo", WrapperID); + + + // 创建Window对象 + string jsContent = String.Format("var {0}=Ext.create('Ext.window.Window',{1});", XID, OB.ToString()); + + // 通过Javascript的方式向页面添加Window的DIV包裹容器 + string addWrapperScript = String.Format("F.util.appendFormNode('{0}');", String.Format("<div class=\"x-window-wrapper\" id=\"{0}\"></div>", WrapperID)); + //addWrapperScript += "\r\n"; + + // 添加隐藏表单字段的脚本和创建Window对象的脚本 + jsContent = addWrapperScript + hiddenFieldsScript + jsContent + showWindowScript; + AddStartupScript(jsContent); + + #endregion + + } + + /// <summary> + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// Window 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + /// </summary> + protected override string GetHiddenPropertyChangedScript() + { + if (PropertyModified("Hidden")) + { + return Hidden ? GetHideReference() : GetShowReference(); + + } + return String.Empty; + } + + #region old code + + ///// <summary> + ///// 隐藏窗体,并且执行窗体关闭动作 + ///// </summary> + ///// <returns></returns> + //private string GetHideFunctionId() + //{ + // if (CloseAction == CloseAction.Refresh) + // { + // return String.Format("{0}_hide_refresh", ClientJavascriptID); + // } + // else if (CloseAction == CloseAction.PostBack) + // { + // return String.Format("{0}_hide_postback", ClientJavascriptID); + // } + // else + // { + // return String.Format("{0}_hide", ClientJavascriptID); + // } + //} + + #endregion + + #endregion + + #region GetSaveStateReference + + /// <summary> + /// 保存服务器控件的ClientID + /// 可以调用ActiveWindow.GetWriteBackValueReference在子页面向这些服务器控件写入值 + /// </summary> + public string GetSaveStateReference(params string[] values) + { + string valuesJS = JsHelper.EnquoteStringArray(values); + + return String.Format("{0}.f_property_save_state_control_client_ids={1};", ScriptID, valuesJS); + } + + ///// <summary> + ///// 保存值到Window对象中 + ///// </summary> + //public string GetSaveValueReference(bool value) + //{ + // return String.Format("{0}.box_bool_value='{1}';", ClientJavascriptID, value.ToString().ToLower()); + //} + + #endregion + + #region GetIFramePostBackEventReference + /// <summary> + /// 获取窗体内IFrame回发页面的客户端脚本(比如:__doPostBack('','eventArgument');) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <returns>客户端脚本</returns> + public string GetIFramePostBackEventReference(string eventArgument) + { + return String.Format("F.wnd.getIFrameWindowObject({0}).__doPostBack('',{1});", ScriptID, JsHelper.Enquote(eventArgument)); + } + + /// <summary> + /// 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <returns>客户端脚本</returns> + public string GetIFrameCustomEventReference(string eventArgument) + { + return GetIFrameCustomEventReference(eventArgument, false); + } + + /// <summary> + /// 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + /// <returns>客户端脚本</returns> + public string GetIFrameCustomEventReference(string eventArgument, bool validateForms) + { + return String.Format("F.wnd.getIFrameWindowObject({0}).F.customEvent({1}, {2});", ScriptID, JsHelper.Enquote(eventArgument), validateForms.ToString().ToLower()); + } + #endregion + + #region GetShowReference + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetShowReference() + { + string iframeUrl = String.Empty; + if (EnableIFrame) + { + iframeUrl = IFrameUrl; + } + + return GetShowReference(iframeUrl, String.Empty); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="iframeUrl">IFrame地址</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string iframeUrl) + { + return GetShowReference(iframeUrl, String.Empty); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="windowTitle">窗体标题</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string iframeUrl, string windowTitle) + { + return GetShowReference(iframeUrl, windowTitle, Unit.Empty, Unit.Empty); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="width">窗体宽度</param> + /// <param name="height">窗体高度</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(Unit width, Unit height) + { + string iframeUrl = String.Empty; + if (EnableIFrame) + { + iframeUrl = IFrameUrl; + } + + return GetShowReference(iframeUrl, String.Empty, width, height); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="windowTitle">窗体标题</param> + /// <param name="width">窗体宽度</param> + /// <param name="height">窗体高度</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string windowTitle, Unit width, Unit height) + { + string iframeUrl = String.Empty; + if (EnableIFrame) + { + iframeUrl = IFrameUrl; + } + + return GetShowReference(iframeUrl, windowTitle, width, height); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="windowTitle">窗体标题</param> + /// <param name="width">窗体宽度</param> + /// <param name="height">窗体高度</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string iframeUrl, string windowTitle, Unit width, Unit height) + { + if (!String.IsNullOrEmpty(iframeUrl)) + { + iframeUrl = ResolveIFrameUrl(iframeUrl); + } + + iframeUrl = JsHelper.EnquoteWithScriptTag(iframeUrl); + windowTitle = JsHelper.Enquote(windowTitle); + + if (width != Unit.Empty && height != Unit.Empty) + { + return String.Format("{0}.f_show({1},{2},{3},{4});", ScriptID, + iframeUrl, + windowTitle, + width.Value, + height.Value); + } + else + { + return String.Format("{0}.f_show({1},{2});", ScriptID, + iframeUrl, + windowTitle); + } + } + + /// <summary> + /// 获取最大化窗体尺寸的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetMaximizeReference() + { + return String.Format("{0}.f_maximize();", ScriptID); + } + + /// <summary> + /// 获取恢复窗体尺寸的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetRestoreReference() + { + return String.Format("{0}.f_restore();", ScriptID); + } + + /// <summary> + /// 获取最小化窗体尺寸的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetMinimizeReference() + { + return String.Format("{0}.f_minimize();", ScriptID); + } + + + #endregion + + #region GetHideReference GetHideRefreshReference GetHidePostBackReference + + /// <summary> + /// 获取关闭当前激活Window的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHideReference() + { + return String.Format("{0}.f_hide();", ScriptID); + } + + /// <summary> + /// 获取关闭当前激活Window然后刷新页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHideRefreshReference() + { + return String.Format("{0}.f_hide_refresh();", ScriptID); + } + + /// <summary> + /// 获取关闭当前激活Window然后回发页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHidePostBackReference() + { + return String.Format("{0}.f_hide_postback();", ScriptID); + } + + /// <summary> + /// 获取关闭当前激活Window然后回发页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHidePostBackReference(string argument) + { + //return String.Format("{0}.box_hide_postback('{1}');", ScriptID, argument.Replace("'", "\"")); + return String.Format("{0}.f_hide_postback({1});", ScriptID, JsHelper.Enquote(argument)); + } + + /// <summary> + /// 获取关闭当前激活Window然后执行脚本的客户端脚本 + /// </summary> + /// <param name="argument">执行的脚本</param> + /// <returns>客户端脚本</returns> + public string GetHideExecuteScriptReference(string argument) + { + return String.Format("{0}.f_hide_executescript({1});", ScriptID, JsHelper.Enquote(argument)); + } + + #endregion + + #region oldcode + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHideReference() + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0}, function(){{{1}}});", + // ScriptID, + // GetHideReference()); + //} + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后刷新父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHideRefreshReference() + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0}, function(){{{1}}});", + // ScriptID, + // GetHideRefreshReference()); + //} + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHidePostBackReference() + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0}, function(){{{1}}});", + // ScriptID, + // GetHidePostBackReference()); + //} + + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHidePostBackReference(string argument) + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0},function(){{{1}}});", + // ScriptID, + // GetHidePostBackReference(argument)); + //} + + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后执行脚本的客户端脚本 + ///// </summary> + ///// <param name="argument">回发参数</param> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHideExecuteScriptReference(string argument) + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0},function(){{{1}}});", + // ScriptID, + // GetHideExecuteScriptReference(argument)); + //} + + + #region oldcode + //public string GetConfirmFormModifiedCloseRefreshReference() + //{ + // return String.Format("F.wnd.extWindowIFrameFormModifiedConfirm({0}, {1}, '{2}');", + // String.Format("{0}", ClientJavascriptID), + // ShowInParent.ToString().ToLower(), + // GUID); + //} + + + + ///// <summary> + ///// + ///// </summary> + ///// <returns></returns> + //public string GetIFramePageStateChangedReference() + //{ + // string panel = String.Format("{0}", ClientJavascriptID); + // if (ShowInParent) + // { + // panel = String.Format("parent.X.{0}", GUID); + // } + // return String.Format("F.wnd.getIFrameWindowObject({0}).F.util.isPageStateChanged()", panel); + //} + + //public string GetIFramePageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript) + //{ + // return GetIFramePageStateChangedConfirmReference(confirmTitle, confirmMsg, okScript, cancelScript, okScript); + //} + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //public string GetIFramePageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript, string notChangeScript) + //{ + // string confirmScript = Confirm.GetShowReference(confirmMsg, confirmTitle, MessageBoxIcon.Warning, okScript, cancelScript, String.Format("{0}.getWindow()", IFrameID)); + // return String.Format("if({0}){{{1}}}else{{{2}}}", GetIFramePageStateChangedReference(), confirmScript, notChangeScript); + //} + #endregion + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + bool postHidden = Convert.ToBoolean(postCollection[HiddenHiddenFieldID]); + if (Hidden != postHidden) + { + Hidden = postHidden; + FState.BackupPostDataProperty("Hidden"); + } + + return false; + } + + ///// <summary> + ///// 触发回发数据改变事件 + ///// </summary> + //public override void RaisePostDataChangedEvent() + //{ + // base.RaisePostDataChangedEvent(); + + //} + + #endregion + + #region IPostBackEventHandler Members + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Close$")) + { + OnClose(new WindowCloseEventArgs(eventArgument.Substring("Close$".Length))); + } + } + + #endregion + + #region OnClose + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack)")] + public event EventHandler<WindowCloseEventArgs> Close + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发窗体关闭事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClose(WindowCloseEventArgs e) + { + EventHandler<WindowCloseEventArgs> handler = Events[_handlerKey] as EventHandler<WindowCloseEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + + } +} diff --git a/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs b/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs index 57f26fb..951320b 100644 --- a/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs +++ b/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs @@ -1,50 +1,50 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: FieldCollection.cs - * CreatedOn: 2013-05-01 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; -using System.Collections; - -namespace FineUI -{ - /// <summary> - /// 控件集合 - /// </summary> - public class GridColumnEditorCollection : BaseCollection<Field> - { - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="parent">父控件实例</param> - public GridColumnEditorCollection(GridColumn parent) - : base(parent) - { - - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: FieldCollection.cs + * CreatedOn: 2013-05-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 控件集合 + /// </summary> + public class GridColumnEditorCollection : BaseCollection<Field> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public GridColumnEditorCollection(GridColumn parent) + : base(parent) + { + + } + + } +} diff --git a/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs b/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs index bdce54c..714185c 100644 --- a/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs +++ b/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs @@ -1,53 +1,53 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - public class ModifiedCell - { - private int rowIndex; - - public int RowIndex - { - get { return rowIndex; } - set { rowIndex = value; } - } - - - private int columnIndex; - - public int ColumnIndex - { - get { return columnIndex; } - set { columnIndex = value; } - } - - private string columnID; - - public string ColumnID - { - get { return columnID; } - set { columnID = value; } - } - - - private string cellValue; - - public string CellValue - { - get { return cellValue; } - set { cellValue = value; } - } - - - private string oldCellValue; - - public string OldCellValue - { - get { return oldCellValue; } - set { oldCellValue = value; } - } - - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + public class ModifiedCell + { + private int rowIndex; + + public int RowIndex + { + get { return rowIndex; } + set { rowIndex = value; } + } + + + private int columnIndex; + + public int ColumnIndex + { + get { return columnIndex; } + set { columnIndex = value; } + } + + private string columnID; + + public string ColumnID + { + get { return columnID; } + set { columnID = value; } + } + + + private string cellValue; + + public string CellValue + { + get { return cellValue; } + set { cellValue = value; } + } + + + private string oldCellValue; + + public string OldCellValue + { + get { return oldCellValue; } + set { oldCellValue = value; } + } + + } +} diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs index 61b8386..fc6261e 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs @@ -1,77 +1,77 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridAfterEditEventArgs.cs - * CreatedOn: 2013-07-28 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// е¼ - /// </summary> - public class GridAfterEditEventArgs : EventArgs - { - - private int _rowIndex; - - /// <summary> - /// - /// </summary> - public int RowIndex - { - get { return _rowIndex; } - set { _rowIndex = value; } - } - - private string _columnID; - - /// <summary> - /// ID - /// </summary> - public string ColumnID - { - get { return _columnID; } - set { _columnID = value; } - } - - /// <summary> - /// 캯 - /// </summary> - /// <param name="rowIndex"></param> - /// /// <param name="columnID">ID</param> - public GridAfterEditEventArgs(int rowIndex, string columnID) - { - _rowIndex = rowIndex; - _columnID = columnID; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridAfterEditEventArgs.cs + * CreatedOn: 2013-07-28 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// е¼ + /// </summary> + public class GridAfterEditEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + set { _rowIndex = value; } + } + + private string _columnID; + + /// <summary> + /// ID + /// </summary> + public string ColumnID + { + get { return _columnID; } + set { _columnID = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + /// /// <param name="columnID">ID</param> + public GridAfterEditEventArgs(int rowIndex, string columnID) + { + _rowIndex = rowIndex; + _columnID = columnID; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs index 004cadb..6fac0a6 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs @@ -1,106 +1,106 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridCommandEventArgs.cs - * CreatedOn: 2008-06-23 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ¼ - /// </summary> - public class GridCommandEventArgs : EventArgs - { - - private int _rowIndex; - - /// <summary> - /// - /// </summary> - public int RowIndex - { - get { return _rowIndex; } - set { _rowIndex = value; } - } - - private int _columnIndex; - - /// <summary> - /// - /// </summary> - public int ColumnIndex - { - get { return _columnIndex; } - set { _columnIndex = value; } - } - - - private string _commandName; - - /// <summary> - /// - /// </summary> - public string CommandName - { - get { return _commandName; } - set { _commandName = value; } - } - - - private string _commandArgument; - - /// <summary> - /// - /// </summary> - public string CommandArgument - { - get { return _commandArgument; } - set { _commandArgument = value; } - } - - - /// <summary> - /// 캯 - /// </summary> - /// <param name="rowIndex"></param> - /// <param name="columnIndex"></param> - /// <param name="commandName"></param> - /// <param name="commandArgument"></param> - public GridCommandEventArgs(int rowIndex, int columnIndex, string commandName, string commandArgument) - { - _rowIndex = rowIndex; - _columnIndex = columnIndex; - _commandName = commandName; - _commandArgument = commandArgument; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridCommandEventArgs.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ¼ + /// </summary> + public class GridCommandEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + set { _rowIndex = value; } + } + + private int _columnIndex; + + /// <summary> + /// + /// </summary> + public int ColumnIndex + { + get { return _columnIndex; } + set { _columnIndex = value; } + } + + + private string _commandName; + + /// <summary> + /// + /// </summary> + public string CommandName + { + get { return _commandName; } + set { _commandName = value; } + } + + + private string _commandArgument; + + /// <summary> + /// + /// </summary> + public string CommandArgument + { + get { return _commandArgument; } + set { _commandArgument = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + /// <param name="columnIndex"></param> + /// <param name="commandName"></param> + /// <param name="commandArgument"></param> + public GridCommandEventArgs(int rowIndex, int columnIndex, string commandName, string commandArgument) + { + _rowIndex = rowIndex; + _columnIndex = columnIndex; + _commandName = commandName; + _commandArgument = commandArgument; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs index 7434c6d..511e137 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs @@ -1,65 +1,65 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridPageEventArgs.cs - * CreatedOn: 2008-06-25 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ҳ¼ - /// </summary> - public class GridPageEventArgs : EventArgs - { - - private int _newPageIndex; - - /// <summary> - /// ҳ - /// </summary> - public int NewPageIndex - { - get { return _newPageIndex; } - set { _newPageIndex = value; } - } - - - /// <summary> - /// 캯 - /// </summary> - /// <param name="newPageIndex">ҳ</param> - public GridPageEventArgs(int newPageIndex) - { - _newPageIndex = newPageIndex; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridPageEventArgs.cs + * CreatedOn: 2008-06-25 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ҳ¼ + /// </summary> + public class GridPageEventArgs : EventArgs + { + + private int _newPageIndex; + + /// <summary> + /// ҳ + /// </summary> + public int NewPageIndex + { + get { return _newPageIndex; } + set { _newPageIndex = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="newPageIndex">ҳ</param> + public GridPageEventArgs(int newPageIndex) + { + _newPageIndex = newPageIndex; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs index 631d86d..ab95a2d 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs @@ -1,78 +1,89 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridPreRowEventArgs.cs - * CreatedOn: 2008-06-27 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// Ԥ¼ - /// </summary> - public class GridPreRowEventArgs : EventArgs - { - - private object _dataItem; - - /// <summary> - /// ԴԴΪDataTableDataItemΪDataRowView - /// </summary> - public object DataItem - { - get { return _dataItem; } - set { _dataItem = value; } - } - - - private int _rowIndex; - - /// <summary> - /// - /// </summary> - public int RowIndex - { - get { return _rowIndex; } - set { _rowIndex = value; } - } - - /// <summary> - /// 캯 - /// </summary> - /// <param name="dataItem">Դ</param> - /// <param name="rowIndex"></param> - public GridPreRowEventArgs(object dataItem, int rowIndex) - { - _dataItem = dataItem; - _rowIndex = rowIndex; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridPreRowEventArgs.cs + * CreatedOn: 2008-06-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// Ԥ¼ + /// </summary> + public class GridPreRowEventArgs : EventArgs + { + private bool _cancelled = false; + + /// <summary> + /// Ƿȡӱڵ + /// </summary> + public bool Cancelled + { + get { return _cancelled; } + set { _cancelled = value; } + } + + + private object _dataItem; + + /// <summary> + /// ԴԴΪDataTableDataItemΪDataRowView + /// </summary> + public object DataItem + { + get { return _dataItem; } + set { _dataItem = value; } + } + + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + set { _rowIndex = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="dataItem">Դ</param> + /// <param name="rowIndex"></param> + public GridPreRowEventArgs(object dataItem, int rowIndex) + { + _dataItem = dataItem; + _rowIndex = rowIndex; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs index 8ec76c1..01d16a0 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs @@ -1,64 +1,64 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridRowClickEventArgs.cs - * CreatedOn: 2008-06-25 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// е¼ - /// </summary> - public class GridRowClickEventArgs : EventArgs - { - - private int _rowIndex; - - /// <summary> - /// - /// </summary> - public int RowIndex - { - get { return _rowIndex; } - set { _rowIndex = value; } - } - - /// <summary> - /// 캯 - /// </summary> - /// <param name="rowIndex"></param> - public GridRowClickEventArgs(int rowIndex) - { - _rowIndex = rowIndex; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowClickEventArgs.cs + * CreatedOn: 2008-06-25 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// е¼ + /// </summary> + public class GridRowClickEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + set { _rowIndex = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + public GridRowClickEventArgs(int rowIndex) + { + _rowIndex = rowIndex; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs index 111d5b0..4cf6418 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs @@ -1,93 +1,93 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridRowEventArgs.cs - * CreatedOn: 2008-06-23 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// а¼ - /// </summary> - public class GridRowEventArgs : EventArgs - { - - private object[] _values; - - /// <summary> - /// иеֵȾHTMLƬΣ - /// </summary> - public object[] Values - { - get { return _values; } - set { _values = value; } - } - - - private object _dataItem; - - /// <summary> - /// Դ - /// </summary> - public object DataItem - { - get { return _dataItem; } - set { _dataItem = value; } - } - - - private int _rowIndex; - - /// <summary> - /// - /// </summary> - public int RowIndex - { - get { return _rowIndex; } - set { _rowIndex = value; } - } - - - /// <summary> - /// 캯 - /// </summary> - /// <param name="dataItem">Դ</param> - /// <param name="rowIndex"></param> - /// <param name="values">иеֵ</param> - public GridRowEventArgs(object dataItem, int rowIndex, object[] values) - { - _dataItem = dataItem; - _values = values; - _rowIndex = rowIndex; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowEventArgs.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// а¼ + /// </summary> + public class GridRowEventArgs : EventArgs + { + + private object[] _values; + + /// <summary> + /// иеֵȾHTMLƬΣ + /// </summary> + public object[] Values + { + get { return _values; } + set { _values = value; } + } + + + private object _dataItem; + + /// <summary> + /// Դ + /// </summary> + public object DataItem + { + get { return _dataItem; } + set { _dataItem = value; } + } + + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + set { _rowIndex = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="dataItem">Դ</param> + /// <param name="rowIndex"></param> + /// <param name="values">иеֵ</param> + public GridRowEventArgs(object dataItem, int rowIndex, object[] values) + { + _dataItem = dataItem; + _values = values; + _rowIndex = rowIndex; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs index a892cc8..4f244b5 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs @@ -1,64 +1,64 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridRowSelectEventArgs.cs - * CreatedOn: 2013-02-27 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// ѡ¼ - /// </summary> - public class GridRowSelectEventArgs : EventArgs - { - - private int _rowIndex; - - /// <summary> - /// - /// </summary> - public int RowIndex - { - get { return _rowIndex; } - set { _rowIndex = value; } - } - - /// <summary> - /// 캯 - /// </summary> - /// <param name="rowIndex"></param> - public GridRowSelectEventArgs(int rowIndex) - { - _rowIndex = rowIndex; - } - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowSelectEventArgs.cs + * CreatedOn: 2013-02-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ѡ¼ + /// </summary> + public class GridRowSelectEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + set { _rowIndex = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + public GridRowSelectEventArgs(int rowIndex) + { + _rowIndex = rowIndex; + } + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs index a903b34..9b302ab 100644 --- a/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs +++ b/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs @@ -1,85 +1,85 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: GridSortEventArgs.cs - * CreatedOn: 2008-05-28 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; - -namespace FineUI -{ - /// <summary> - /// 表格排序事件参数 - /// </summary> - public class GridSortEventArgs : EventArgs - { - private string _sortField; - - /// <summary> - /// 排序字段 - /// </summary> - public string SortField - { - get { return _sortField; } - set { _sortField = value; } - } - - - private string _sortDirection; - - /// <summary> - /// 排序方向 - /// </summary> - public string SortDirection - { - get { return _sortDirection; } - set { _sortDirection = value; } - } - - private int _columnIndex; - - /// <summary> - /// 列索引 - /// </summary> - public int ColumnIndex - { - get { return _columnIndex; } - set { _columnIndex = value; } - } - - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="sortField">排序字段</param> - /// <param name="sortDirection">排序方向</param> - /// <param name="columnIndex">列索引</param> - public GridSortEventArgs(string sortField, string sortDirection, int columnIndex) - { - _sortField = sortField; - _sortDirection = sortDirection; - _columnIndex = columnIndex; - } - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: GridSortEventArgs.cs + * CreatedOn: 2008-05-28 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 表格排序事件参数 + /// </summary> + public class GridSortEventArgs : EventArgs + { + private string _sortField; + + /// <summary> + /// 排序字段 + /// </summary> + public string SortField + { + get { return _sortField; } + set { _sortField = value; } + } + + + private string _sortDirection; + + /// <summary> + /// 排序方向 + /// </summary> + public string SortDirection + { + get { return _sortDirection; } + set { _sortDirection = value; } + } + + private int _columnIndex; + + /// <summary> + /// 列索引 + /// </summary> + public int ColumnIndex + { + get { return _columnIndex; } + set { _columnIndex = value; } + } + + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="sortField">排序字段</param> + /// <param name="sortDirection">排序方向</param> + /// <param name="columnIndex">列索引</param> + public GridSortEventArgs(string sortField, string sortDirection, int columnIndex) + { + _sortField = sortField; + _sortDirection = sortDirection; + _columnIndex = columnIndex; + } + + } +} diff --git a/FineUI/WebControls/PanelBase.Grid/Grid.cs b/FineUI/WebControls/PanelBase.Grid/Grid.cs index ade8670..9aa8f33 100644 --- a/FineUI/WebControls/PanelBase.Grid/Grid.cs +++ b/FineUI/WebControls/PanelBase.Grid/Grid.cs @@ -1,4468 +1,4820 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Grid.cs - * CreatedOn: 2008-05-19 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -using System.Web.UI.HtmlControls; -using System.Data; -using System.Collections; -using System.Collections.Specialized; -using System.ComponentModel.Design; -using System.Collections.ObjectModel; - -namespace FineUI -{ - /// <summary> - /// 表格控件 - /// </summary> - [Designer("FineUI.Design.GridDesigner, FineUI.Design")] - [ToolboxData("<{0}:Grid Title=\"Grid\" runat=\"server\"><Columns></Columns></{0}:Grid>")] - [ToolboxBitmap(typeof(Grid), "toolbox.Grid.bmp")] - [Description("表格控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Grid : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler - { - #region static readonly - - /// <summary> - /// 模板列占位符前缀 - /// </summary> - public static readonly string TEMPLATE_PLACEHOLDER_PREFIX = "#@TPL@#"; - - #endregion - - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Grid() - { - // 严格的说,PageIndex、SortField、SortDirection这三个属性不可能在客户端被改变,而是向服务器发出改变的请求,然后服务器处理。 - // 因为这些属性的改变不会影响客户端的UI,必须服务器端发出UI改变的指令才行,所以它们算是服务器端属性。 - AddServerAjaxProperties("PageIndex", "PageSize", "RecordCount", "SortField", "SortDirection"); - AddClientAjaxProperties("X_Rows", "HiddenColumns", "SelectedRowIndexArray", "SelectedCell", "ExpandAllRowExpanders"); - - AddGzippedAjaxProperties("X_Rows"); - } - - // 是否需要在AJAX回发时注册展开或者折叠行扩展列的脚本 - private bool _registerScriptRowExpanders = false; - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override ControlBaseCollection Items - { - get - { - return base.Items; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableIFrame - { - get - { - return base.EnableIFrame; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameUrl - { - get - { - return base.IFrameUrl; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameName - { - get - { - return base.IFrameName; - } - } - - /// <summary> - /// 布局类型 - /// </summary> - [ReadOnly(true)] - [Category(CategoryName.LAYOUT)] - [DefaultValue(Layout.Container)] - [Description("布局类型")] - public override Layout Layout - { - get - { - return Layout.Container; - } - } - - #endregion - - #region AllowCellEditing - - /// <summary> - /// 允许单元格编辑 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("允许单元格编辑")] - public bool AllowCellEditing - { - get - { - object obj = XState["AllowCellEditing"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AllowCellEditing"] = value; - } - } - - - /// <summary> - /// 编辑单元格时点击单元格的次数(默认为2次) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(2)] - [Description("编辑单元格时点击单元格的次数(默认为2次)")] - public int ClicksToEdit - { - get - { - object obj = XState["ClicksToEdit"]; - return obj == null ? 2 : (int)obj; - } - set - { - XState["ClicksToEdit"] = value; - } - } - - #endregion - - #region AllowPaging/IsDatabasePaging/PageSize/PageCount/PageIndex/RecordCount - - - /// <summary> - /// 允许服务器端分页 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("允许服务器端分页")] - public bool AllowPaging - { - get - { - object obj = XState["AllowPaging"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AllowPaging"] = value; - } - } - - /// <summary> - /// 是否数据库分页 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否数据库分页")] - public bool IsDatabasePaging - { - get - { - object obj = XState["IsDatabasePaging"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["IsDatabasePaging"] = value; - } - } - - - /// <summary> - /// 服务器端分页后清空选中的行 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("服务器端分页后清空选中的行")] - public bool ClearSelectedRowsAfterPaging - { - get - { - object obj = XState["ClearSelectedRowsAfterPaging"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ClearSelectedRowsAfterPaging"] = value; - } - } - - - /// <summary> - /// 每页显示项数 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(20)] - [Description("每页显示项数")] - public int PageSize - { - get - { - object obj = XState["PageSize"]; - return obj == null ? 20 : (int)obj; - } - set - { - XState["PageSize"] = value; - } - } - - - /// <summary> - /// [AJAX属性]当前显示页索引 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(0)] - [Description("[AJAX属性]当前显示页索引")] - public int PageIndex - { - get - { - object obj = XState["PageIndex"]; - return obj == null ? 0 : (int)obj; - } - set - { - XState["PageIndex"] = value; - } - } - - - /// <summary> - /// [AJAX属性]总页数 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int PageCount - { - get - { - int pageCount = RecordCount / PageSize; - if (RecordCount % PageSize != 0) - { - pageCount += 1; - } - return pageCount; - } - } - - - /// <summary> - /// [AJAX属性]记录的总个数 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int RecordCount - { - get - { - object obj = XState["RecordCount"]; - return obj == null ? 0 : (int)obj; - } - set - { - XState["RecordCount"] = value; - } - } - - #endregion - - #region AllowSorting/SortDirection/SortField - - /// <summary> - /// 允许服务器端排序 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("允许服务器端排序")] - public bool AllowSorting - { - get - { - object obj = XState["AllowSorting"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AllowSorting"] = value; - } - } - - - /// <summary> - /// 排序方向("ASC", "DESC") - /// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Category(CategoryName.OPTIONS)] - [DefaultValue("ASC")] - [Description("排序方向(ASC、DESC)")] - public string SortDirection - { - get - { - object obj = XState["SortDirection"]; - return obj == null ? "ASC" : (string)obj; - } - set - { - XState["SortDirection"] = value; - } - } - - - - - /// <summary> - /// 当前排序字段(只读) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("[AJAX属性]当前排序字段")] - public string SortField - { - get - { - object obj = XState["SortField"]; - return obj == null ? "" : (string)obj; - - //object obj = XState["SortField"]; - //if (obj == null) - //{ - // if (SortColumnIndex >= 0 && SortColumnIndex < AllColumns.Count) - // { - // obj = AllColumns[SortColumnIndex].SortField; - // } - // else - // { - // obj = String.Empty; - // } - //} - //return (string)obj; - } - set - { - XState["SortField"] = value; - } - } - - - ///// <summary> - ///// [AJAX属性]当前按照第几列排序(从零算起) - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(-1)] - //[Description("[AJAX属性]当前按照第几列排序(从零算起)")] - //[Obsolete("此属性已废除,请使用SortField属性")] - //public int SortColumnIndex - //{ - // get - // { - // if (DesignMode) - // { - // return -1; - // } - // else - // { - // object obj = XState["SortColumnIndex"]; - // if (obj == null) - // { - // if (!String.IsNullOrEmpty(SortColumn)) - // { - // return FindColumn(SortColumn).ColumnIndex; - // } - // else - // { - // return -1; - // } - // } - // else - // { - // return (int)obj; - // } - // } - // } - // set - // { - // XState["SortColumnIndex"] = value; - // } - //} - - ///// <summary> - ///// [AJAX属性]排序列(ColumnID) - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("[AJAX属性]排序列(ColumnID)")] - //[Obsolete("此属性已废除,请使用SortField属性")] - //public string SortColumn - //{ - // get - // { - // object obj = XState["SortColumn"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // XState["SortColumn"] = value; - // } - //} - - #endregion - - #region Properties - - /// <summary> - /// 数据为空时显示在内容区域的文本,可以是HTML标签 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("数据为空时显示在内容区域的文本,可以是HTML标签")] - public string EmptyText - { - get - { - object obj = XState["EmptyText"]; - return obj == null ? String.Empty : (string)obj; - } - set - { - XState["EmptyText"] = value; - } - } - - - /// <summary> - /// 行中文字的垂直排列位置(默认为Middle) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(VerticalAlign.Middle)] - [Description("行中文字的垂直排列位置(默认为Middle)")] - public VerticalAlign RowVerticalAlign - { - get - { - object obj = XState["RowVerticalAlign"]; - return obj == null ? VerticalAlign.Middle : (VerticalAlign)obj; - } - set - { - XState["RowVerticalAlign"] = value; - } - } - - - ///// <summary> - ///// 序号列的宽度(默认为23px) - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(typeof(Unit), "")] - //[Description("序号列的宽度(默认为23px)")] - //public Unit RowNumberWidth - //{ - // get - // { - // object obj = XState["RowNumberWidth"]; - // return obj == null ? Unit.Empty : (Unit)obj; - // } - // set - // { - // XState["RowNumberWidth"] = value; - // } - //} - - - /// <summary> - /// 是否延迟渲染 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("是否延迟渲染")] - public bool EnableDelayRender - { - get - { - object obj = XState["EnableDelayRender"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableDelayRender"] = value; - } - } - - - /// <summary> - /// 展开所有的行扩展列 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("展开所有的行扩展列")] - public bool ExpandAllRowExpanders - { - get - { - object obj = XState["ExpandAllRowExpanders"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ExpandAllRowExpanders"] = value; - } - } - - - /// <summary> - /// 启用表格中的文字选择 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("启用表格中的文字选择")] - public bool EnableTextSelection - { - get - { - object obj = XState["EnableTextSelection"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableTextSelection"] = value; - } - } - - - #region old code - - //private bool EnableClientPaging_Default = false; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("启用客户端分页")] - //public bool EnableClientPaging - //{ - // get - // { - // object obj = BoxState["EnableClientPaging"]; - // return obj == null ? EnableClientPaging_Default : (bool)obj; - // } - // set - // { - // BoxState["EnableClientPaging"] = value; - // } - //} - - - //private bool EnableClientSort_Default = false; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("启用客户端排序")] - //public bool EnableClientSort - //{ - // get - // { - // object obj = BoxState["EnableClientSort"]; - // return obj == null ? EnableClientSort_Default : (bool)obj; - // } - // set - // { - // BoxState["EnableClientSort"] = value; - // } - //} - - - //private string AutoExpandColumnID_Default = ""; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("自动扩展的列ID")] - //public string AutoExpandColumnID - //{ - // get - // { - // object obj = BoxState["AutoExpandColumnID"]; - // return obj == null ? AutoExpandColumnID_Default : (string)obj; - // } - // set - // { - // BoxState["AutoExpandColumnID"] = value; - // } - //} - - #endregion - - ///// <summary> - ///// 启用行序号列 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("启用行序号列")] - //public bool EnableRowNumber - //{ - // get - // { - // object obj = XState["EnableRowNumber"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["EnableRowNumber"] = value; - // } - //} - - - ///// <summary> - ///// 行序号列是否支持分页(默认为false,也即是每页都从1开始) - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("行序号列是否支持分页(默认为false,也即是每页都从1开始)")] - //public bool EnableRowNumberPaging - //{ - // get - // { - // object obj = XState["EnableRowNumberPaging"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["EnableRowNumberPaging"] = value; - // } - //} - - /// <summary> - /// 显示表格表头 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("显示表格表头")] - public bool ShowGridHeader - { - get - { - object obj = XState["ShowGridHeader"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["ShowGridHeader"] = value; - } - } - - /// <summary> - /// 启用表头菜单 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用表头菜单")] - public bool EnableHeaderMenu - { - get - { - object obj = XState["EnableHeaderMenu"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableHeaderMenu"] = value; - } - } - - ///// <summary> - ///// 启用标题栏菜单中的隐藏列功能(默认为true,仅在EnableHeaderMenu=true时有效) - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("启用标题栏菜单中的隐藏列功能(默认为true,仅在EnableHeaderMenu=true时有效)")] - //public bool EnableColumnHide - //{ - // get - // { - // object obj = XState["EnableColumnHide"]; - // return obj == null ? true : (bool)obj; - // } - // set - // { - // XState["EnableColumnHide"] = value; - // } - //} - - /// <summary> - /// 启用表格列分隔线(默认为false) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("启用表格列分隔线(默认为false)")] - public bool EnableColumnLines - { - get - { - object obj = XState["EnableColumnLines"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableColumnLines"] = value; - } - } - - - /// <summary> - /// 启用交替行显示不同的颜色 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用交替行显示不同的颜色")] - public bool EnableAlternateRowColor - { - get - { - object obj = XState["EnableAlternateRowStyle"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableAlternateRowStyle"] = value; - } - } - - /// <summary> - /// 启用鼠标移动到行的颜色 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用鼠标移动到行的颜色")] - public bool EnableMouseOverColor - { - get - { - object obj = XState["EnableMouseOverColor"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableMouseOverColor"] = value; - } - } - - #endregion - - #region EnableRowClickEvent/EnableRowClickEvent - - /// <summary> - /// 点击行是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("点击行是否自动回发")] - [Obsolete("此属性已废除,请使用EnableRowClickEvent属性")] - public bool AutoPostBack - { - get - { - return EnableRowClickEvent; - } - set - { - EnableRowClickEvent = value; - } - } - - /// <summary> - /// 选中行是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选中行是否自动回发")] - [Obsolete("此属性已废除,请使用EnableRowSelectEvent属性")] - public bool EnableRowSelect - { - get - { - return EnableRowSelectEvent; - } - set - { - EnableRowSelectEvent = value; - } - } - - /// <summary> - /// 双击行是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("双击行是否自动回发")] - [Obsolete("此属性已废除,请使用EnableRowDoubleClickEvent属性")] - public bool EnableRowDoubleClick - { - get - { - return EnableRowDoubleClickEvent; - } - set - { - EnableRowDoubleClickEvent = value; - } - } - - - /// <summary> - /// 点击行是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("点击行是否自动回发")] - [Obsolete("此属性已废除,请使用EnableRowClickEvent属性")] - public bool EnableRowClick - { - get - { - return EnableRowClickEvent; - } - set - { - EnableRowClickEvent = value; - } - } - - - - /// <summary> - /// 选中行是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("选中行是否自动回发")] - public bool EnableRowSelectEvent - { - get - { - object obj = XState["EnableRowSelectEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableRowSelectEvent"] = value; - } - } - - - /// <summary> - /// 点击行是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("点击行是否自动回发")] - public bool EnableRowClickEvent - { - get - { - object obj = XState["EnableRowClickEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableRowClickEvent"] = value; - } - } - - - /// <summary> - /// 双击行是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("双击行是否自动回发")] - public bool EnableRowDoubleClickEvent - { - get - { - object obj = XState["EnableRowDoubleClickEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableRowDoubleClickEvent"] = value; - } - } - - /// <summary> - /// 结束编辑是否自动回发(需要启用AllowCellEditing) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("结束编辑是否自动回发(需要启用AllowCellEditing)")] - public bool EnableAfterEditEvent - { - get - { - object obj = XState["EnableAfterEditEvent"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableAfterEditEvent"] = value; - } - } - - #endregion - - #region ForceFitAllTime/AutoExpandColumn - - ///// <summary> - ///// 列的最小宽度 - ///// </summary> - //[Category(CategoryName.LAYOUT)] - //[DefaultValue(typeof(Unit), "")] - //[Description("列的最小宽度")] - //public Unit MinColumnWidth - //{ - // get - // { - // object obj = XState["MinColumnWidth"]; - // return obj == null ? Unit.Empty : (Unit)obj; - // } - // set - // { - // XState["MinColumnWidth"] = value; - // } - //} - - /// <summary> - /// 自动扩展宽度以填充剩余空间的列(ColumnID) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("自动扩展宽度以填充剩余空间的列(ColumnID)")] - public string AutoExpandColumn - { - get - { - object obj = XState["AutoExpandColumn"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["AutoExpandColumn"] = value; - } - } - - ///// <summary> - ///// 自动扩展列的最大宽度 - ///// </summary> - //[Category(CategoryName.LAYOUT)] - //[DefaultValue(typeof(Unit), "")] - //[Description("自动扩展列的最大宽度")] - //public Unit AutoExpandColumnMax - //{ - // get - // { - // object obj = XState["AutoExpandColumnMax"]; - // return obj == null ? Unit.Empty : (Unit)obj; - // } - // set - // { - // XState["AutoExpandColumnMax"] = value; - // } - //} - - ///// <summary> - ///// 自动扩展列的最小宽度 - ///// </summary> - //[Category(CategoryName.LAYOUT)] - //[DefaultValue(typeof(Unit), "")] - //[Description("自动扩展列的最小宽度")] - //public Unit AutoExpandColumnMin - //{ - // get - // { - // object obj = XState["AutoExpandColumnMin"]; - // return obj == null ? Unit.Empty : (Unit)obj; - // } - // set - // { - // XState["AutoExpandColumnMin"] = value; - // } - //} - - ///// <summary> - ///// 成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效) - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效)")] - //public bool ForceFitFirstTime - //{ - // get - // { - // object obj = XState["ForceFitFirstTime"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["ForceFitFirstTime"] = value; - // } - //} - - /// <summary> - /// 成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效)")] - public bool ForceFitAllTime - { - get - { - object obj = XState["ForceFitAllTime"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["ForceFitAllTime"] = value; - } - } - - ///// <summary> - ///// 垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度) - ///// </summary> - //[Category(CategoryName.LAYOUT)] - //[DefaultValue(typeof(Unit), "")] - //[Description("垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度)")] - //public Unit VerticalScrollWidth - //{ - // get - // { - // object obj = XState["VerticalScrollWidth"]; - // return obj == null ? Unit.Empty : (Unit)obj; - // } - // set - // { - // XState["VerticalScrollWidth"] = value; - // } - //} - - #endregion - - #region old code - - //private GridRowExpander _rowExpander; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerProperty)] - //public GridRowExpander RowExpander - //{ - // get - // { - // if (_rowExpander == null) - // { - // _rowExpander = new GridRowExpander(); - // } - // return _rowExpander; - // } - //} - - - #endregion - - #region EnableCheckBoxSelect/EnableMultiSelect/SelectedRowIndexArray - - /// <summary> - /// 启用多选框 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("启用多选框")] - public bool EnableCheckBoxSelect - { - get - { - object obj = XState["EnableCheckBoxSelect"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableCheckBoxSelect"] = value; - } - } - - /// <summary> - /// 只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效)")] - public bool CheckBoxSelectOnly - { - get - { - object obj = XState["CheckBoxSelectOnly"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["CheckBoxSelectOnly"] = value; - } - } - - - /// <summary> - /// 启用多行选择 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("启用多行选择")] - public bool EnableMultiSelect - { - get - { - object obj = XState["EnableMultiSelect"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableMultiSelect"] = value; - } - } - - /// <summary> - /// [AJAX属性]选中行的索引(列表中的第一项) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int SelectedRowIndex - { - get - { - if (SelectedRowIndexArray.Length > 0) - { - return SelectedRowIndexArray[0]; - } - else - { - return -1; - } - } - set - { - SelectedRowIndexArray = new int[] { value }; - } - } - - /// <summary> - /// [AJAX属性]选中的单元格([行索引,列索引]) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int[] SelectedCell - { - get - { - object obj = XState["SelectedCell"]; - return obj == null ? null : (int[])obj; - } - set - { - if (value == null || value.Length != 2) - { - XState["SelectedCell"] = null; - } - else - { - XState["SelectedCell"] = value; - } - } - } - - - /// <summary> - /// [AJAX属性]选中行的索引列表 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int[] SelectedRowIndexArray - { - get - { - object obj = XState["SelectedRowIndexArray"]; - return obj == null ? new int[] { } : (int[])obj; - } - set - { - XState["SelectedRowIndexArray"] = GetSortedArray(value).ToArray(); - } - } - - private List<int> GetSortedArray(int[] value) - { - List<int> list = new List<int>(); - if (value != null) - { - list.AddRange(value); - list.Sort(); - } - return list; - } - - ///// <summary> - ///// Whether this property changed. - ///// </summary> - ///// <param name="newValue"></param> - ///// <returns></returns> - //private bool SelectedRowIndexArrayChanged(int[] newValue) - //{ - // if (newValue == null) - // { - // newValue = new int[] { }; - // } - // if (newValue.Length > 0) - // { - // // Make sure this list order ASC [1, 2, 6, 8] - // List<int> intList = new List<int>(newValue); - // intList.Sort(); - // newValue = intList.ToArray(); - // } - - // return new JArray(SelectedRowIndexArray).ToString() != new JArray(newValue).ToString(); - //} - - ///// <summary> - ///// [AJAX属性]隐藏的列 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public int[] HiddenColumnIndexArray - //{ - // get - // { - // List<int> hiddens = new List<int>(); - // if (AllColumns.Count > 0) - // { - // int prefix = GetPrefixColumnNumber(); - // for (int i = 0; i < AllColumns.Count; i++) - // { - // if (AllColumns[i].Hidden) - // { - // hiddens.Add(i + prefix); - // } - // } - // } - // return hiddens.ToArray(); - // } - // set - // { - // List<int> hiddens = GetSortedArray(value); - // int prefix = GetPrefixColumnNumber(); - // for (int i = 0; i < AllColumns.Count; i++) - // { - // if (hiddens.Contains(i + prefix)) - // { - // AllColumns[i].Hidden = true; - // } - // else - // { - // AllColumns[i].Hidden = false; - // } - // } - // } - //} - - /// <summary> - /// [AJAX属性]隐藏的列名称列表(逗号分隔) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string[] HiddenColumns - { - get - { - List<string> hiddens = new List<string>(); - if (AllColumns.Count > 0) - { - for (int i = 0; i < AllColumns.Count; i++) - { - GridColumn column = AllColumns[i]; - if (column.Hidden) - { - hiddens.Add(column.ColumnID); - } - } - } - return hiddens.ToArray(); - } - set - { - List<string> hiddens = new List<string>(value); - for (int i = 0; i < AllColumns.Count; i++) - { - GridColumn column = AllColumns[i]; - if (hiddens.Contains(column.ColumnID)) - { - column.Hidden = true; - } - else - { - column.Hidden = false; - } - } - } - } - - #endregion - - #region DataSource/DataKeyNames/DataKeys - - private object _dataSource = null; - - /// <summary> - /// 数据源 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object DataSource - { - set - { - _dataSource = value; - } - get - { - return _dataSource; - } - } - - - /// <summary> - /// 行关键字段 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("行关键字段")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] DataKeyNames - { - get - { - object obj = XState["DataKeyNames"]; - return obj == null ? null : (string[])obj; - } - set - { - XState["DataKeyNames"] = value; - } - } - - - private List<object[]> _dataKeys = null; - - /// <summary> - /// 行关键字段的值 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public List<object[]> DataKeys - { - get - { - if (_dataKeys == null) - { - _dataKeys = new List<object[]>(); - - for (int i = 0, count = _rows.Count; i < count; i++) - { - _dataKeys.Add(_rows[i].DataKeys); - } - } - else - { - for (int i = _dataKeys.Count, count = _rows.Count; i < count; i++) - { - _dataKeys.Add(_rows[i].DataKeys); - } - - } - - return _dataKeys; - } - } - - - #endregion - - #region GroupColumns/Columns/Rows - - private ControlBaseCollection _pageItems; - - /// <summary> - /// 分页工具条项集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Editor(typeof(ControlBaseItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual ControlBaseCollection PageItems - { - get - { - if (_pageItems == null) - { - _pageItems = new ControlBaseCollection(this); - } - return _pageItems; - } - } - - - - //private GridGroupColumnCollection _groupColumns; - - ///// <summary> - ///// 分组列数据 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerProperty)] - //[Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] - //public virtual GridGroupColumnCollection GroupColumns - //{ - // get - // { - // if (_groupColumns == null) - // { - // _groupColumns = new GridGroupColumnCollection(this); - // } - // return _groupColumns; - // } - //} - - //private GridColumnCollection _allColumnsInternal; - ///// <summary> - ///// 全部的列 - ///// </summary> - //internal virtual GridColumnCollection AllColumnsInternal - //{ - // get - // { - // if (_allColumnsInternal == null) - // { - // _allColumnsInternal = new GridColumnCollection(this); - // } - // return _allColumnsInternal; - // } - //} - - internal Collection<GridColumn> _allColumns; - - /// <summary> - /// 全部的列 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public virtual Collection<GridColumn> AllColumns - { - get - { - if (_allColumns == null) - { - ResolveAllColumns(); - } - - return _allColumns; - } - } - - private void ResolveAllColumns() - { - _allColumns = new Collection<GridColumn>(); - - foreach (GridColumn column in Columns) - { - _allColumns.Add(column); - if (column is GroupField) - { - ResolveAllColumns(column as GroupField); - } - } - } - - private void ResolveAllColumns(GroupField column) - { - foreach (GridColumn subColumn in column.Columns) - { - _allColumns.Add(subColumn); - if (subColumn is GroupField) - { - ResolveAllColumns(subColumn as GroupField); - } - } - } - - - private GridColumnCollection _columns; - - /// <summary> - /// 列数据 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual GridColumnCollection Columns - { - get - { - if (_columns == null) - { - _columns = new GridColumnCollection(this); - - // Columns改变后,要更新AllColumns - _columns.ItemsChange += _columns_ItemsChange; - } - return _columns; - } - } - - private void _columns_ItemsChange() - { - _allColumns = null; - } - - - private GridRowCollection _rows; - - /// <summary> - /// 行数据 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public virtual GridRowCollection Rows - { - get - { - if (_rows == null) - { - _rows = new GridRowCollection(); - } - return _rows; - } - } - #endregion - - #region X Properties - - /// <summary> - /// 保存的行数据(内部使用) - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public JObject X_Rows - { - get - { - JObject jo = new JObject(); - - JArray valuesJA = new JArray(); - JArray datakeysJA = new JArray(); - JArray statesJA = new JArray(); - foreach (GridRow row in Rows) - { - valuesJA.Add(new JArray(row.Values)); - datakeysJA.Add(new JArray(row.DataKeys)); - statesJA.Add(new JArray(row.ToShortStates())); - } - jo.Add("Values", valuesJA); - jo.Add("DataKeys", datakeysJA); - jo.Add("States", statesJA); - - return jo; - } - set - { - // 注意,此时不能清空 SelectedRowIndexArray - // 现在只是从XState中恢复数据,如果清空 SelectedRowIndexArray ,可能会导致 SelectedRowIndexArray 状态不对 - ClearRows(); - - JArray valuesArray = value.Value<JArray>("Values"); // value.getJArray("Values"); - JArray dataKeysArray = value.Value<JArray>("DataKeys"); //value.getJArray("DataKeys"); - JArray statesArray = value.Value<JArray>("States"); //value.getJArray("States"); - for (int i = 0, length = valuesArray.Count; i < length; i++) - { - GridRow row = new GridRow(this, null, i); - - // row.Values - row.Values = JSONUtil.StringArrayFromJArray(valuesArray[i].Value<JArray>()); // .getJArray(i)); - - // row.DataKeys - row.DataKeys = JSONUtil.ObjectArrayFromJArray(dataKeysArray[i].Value<JArray>()); //.getJArray(i)); - - // row.States - row.FromShortStates(JSONUtil.ObjectArrayFromJArray(statesArray[i].Value<JArray>())); - - Rows.Add(row); - //Controls.Add(row); - - row.InitTemplateContainers(); - - - } - - } - } - - #endregion - - #region oldcode - - //protected override void LoadXState(JObject state, string property) - //{ - // base.LoadXState(state, property); - - // if (property == "X_Rows") - // { - // XRowsFromJSON(state.getJObject(property)); - // } - //} - - //protected override void OnInit(EventArgs e) - //{ - // base.OnInit(e); - - // // Init Columns property. - // int columnIndex = 0; - // foreach (GridColumn column in Columns) - // { - // column.Grid = this; - // column.ColumnIndex = columnIndex; - // columnIndex++; - // } - - // SaveXProperty("X_Rows", XRowsToJSON().ToString()); - // //SaveXProperty("SelectedRowIndexArray", new JArray(SelectedRowIndexArray).ToString()); - //} - - //protected override void OnBothPreRender() - //{ - // base.OnBothPreRender(); - - // // Rows has been changed in server-side code after onInit. - // if (XPropertyModified("X_Rows", XRowsToJSON().ToString())) - // { - // XState.AddModifiedProperty("X_Rows"); - // } - - // // Make sure SelectedRowIndexArray property exist in X_STATE during page's first load. - // if (!Page.IsPostBack) - // { - // XState.AddModifiedProperty("SelectedRowIndexArray"); - // } - - // //if (XPropertyModified("SelectedRowIndexArray", new JArray(SelectedRowIndexArray).ToString())) - // //{ - // // XState.AddModifiedProperties("SelectedRowIndexArray"); - // //} - // //else - // //{ - // // XState.RemoveModifiedProperties("SelectedRowIndexArray"); - // //} - //} - - //protected override void SaveXState(JObject state, string property) - //{ - // if (property == "X_Rows") - // { - // state.put(property, XRowsToJSON()); - // } - //} - - //private JObject XRowsToJSON() - //{ - // JObject jo = new JObject(); - - // JArray valuesJA = new JArray(); - // JArray datakeysJA = new JArray(); - // foreach (GridRow row in Rows) - // { - // valuesja.Add(new JArray(row.Values)); - // datakeysja.Add(new JArray(row.DataKeys)); - // } - // jo.Add("Values", valuesJA); - // jo.Add("DataKeys", datakeysJA); - - // return jo; - //} - - //private void XRowsFromJSON(JObject jo) - //{ - // JArray valuesArray = jo.getJArray("Values"); - // JArray dataKeysArray = jo.getJArray("DataKeys"); - // for (int i = 0, length = valuesArray.Count; i < length; i++) - // { - // GridRow row = new GridRow(); - - // // row.Values - // row.Values = JSONUtil.StringArrayFromJArray(valuesArray.getJArray(i)); - - // // row.DataKeys - // row.DataKeys = JSONUtil.ObjectArrayFromJArray(dataKeysArray.getJArray(i)); - - // Rows.Add(row); - // } - //} - - #endregion - - #region SelectedRowsHiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string SelectedCellHiddenFieldID - { - get - { - return String.Format("{0}_SelectedCell", ClientID); - } - } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string SelectedRowIndexArrayHiddenFieldID - { - get - { - return String.Format("{0}_SelectedRowIndexArray", ClientID); - } - } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string HiddenColumnsHiddenFieldID - { - get - { - return String.Format("{0}_HiddenColumns", ClientID); - } - } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string StatesHiddenFieldID - { - get - { - return String.Format("{0}_States", ClientID); - } - } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string ModifiedDataHiddenFieldID - { - get - { - return String.Format("{0}_ModifiedData", ClientID); - } - } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string NewAddedRowsHiddenFieldID - { - get - { - return String.Format("{0}_NewAddedRows", ClientID); - } - } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string DeletedRowsHiddenFieldID - { - get - { - return String.Format("{0}_DeletedRows", ClientID); - } - } - - ///// <summary> - ///// 实际绑定到页面上的值 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //internal int[] NeedPersistStateColumnIndexArray - //{ - // get - // { - // object obj = XState["NeedPersistStateColumnIndexArray"]; - // return obj == null ? null : (int[])obj; - // } - // set - // { - // XState["NeedPersistStateColumnIndexArray"] = value; - // } - //} - - //private string GetNeedPersistStateColumnIndexID(int columnIndex) - //{ - // return String.Format("{0}_columnIndex{1}", ClientID, columnIndex); - //} - - - #region old code - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("客户端分页时,开始行的序号")] - //private string EnableClientPagingStartRowIndexID - //{ - // get - // { - // return String.Format("{0}_startRowIndex", ClientID); - // } - //} - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("客户端分页时,开始行的序号")] - //internal int EnableClientPagingStartRowIndex - //{ - // get - // { - // object obj = BoxState["EnableClientPagingStartRowIndex"]; - // return obj == null ? 0 : (int)obj; - // } - // set - // { - // BoxState["EnableClientPagingStartRowIndex"] = value; - // } - //} - #endregion - - #endregion - - #region OnFirstPreRender/OnAjaxPreRender - - #region Render_IDS - - private string Render_SelectModelID - { - get - { - return String.Format("{0}_selModel", XID); - } - } - - private string Render_GridStoreID - { - get - { - return String.Format("{0}_store", XID); - } - } - - private string Render_GridColumnsID - { - get - { - return String.Format("{0}_columns", XID); - } - } - - //private string Render_GridRowExpanderID - //{ - // get - // { - // return String.Format("{0}_expander", XID); - // } - //} - - private string Render_GridGroupColumnID - { - get - { - return String.Format("{0}_groupcolumn", XID); - } - } - - private string Render_PagingID - { - get - { - return String.Format("{0}_paging", XID); - } - } - - //// FineUIAjax回发时,列是否发生变化 - //private bool _FineUIAjaxColumnsChanged = false; - - #endregion - - #region OnAjaxPreRender OnFirstPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - - //bool needUpdateSortIcon = false; - - bool dataReloaded = false; - if (AllowPaging) - { - // 不论这三个属性是在客户端还是在服务器端被改变,都需要执行grid.getBottomToolbar().load函数 - // 如果不是数据库分页,则X_Rows不会变化,但是必须执行x_loadData - if (PropertyModified("PageIndex", "PageSize", "RecordCount")) - { - sb.AppendFormat("{0}.x_getPaging().x_update({1});", XID, GetPagingBuilder()); - sb.AppendFormat("{0}.x_loadData();", XID); - - //needUpdateSortIcon = true; - - dataReloaded = true; - } - } - - if (PropertyModified("X_Rows")) - { - //if (ClientPropertyModifiedInServer("X_Rows")) - if (!dataReloaded) - { - sb.AppendFormat("{0}.x_loadData();", XID); - - //needUpdateSortIcon = true; - - dataReloaded = true; - } - - // 如果X_Rows改变了,则每行的模版列内容应该也要变化 - PageManager.Instance.AddAjaxGridClientID(ClientID); - } - - // 本次AJAX请求重新加载的表格 - if (dataReloaded) - { - PageManager.Instance.AddAjaxGridReloadedClientID(ClientID); - } - - //if (PropertyModified("X_States")) - //{ - // sb.AppendFormat("{0}.x_setRowStates();", XID); - //} - - //if (PropertyModified("SortField", "SortDirection")) - //{ - // needUpdateSortIcon = true; - //} - - - // 客户端已经改变了排序状态,无需再次设置 - //if (needUpdateSortIcon) - //{ - // sb.AppendFormat("{0}.x_setSortIcon('{1}','{2}');", XID, GetSortColummID(), SortDirection); - //} - - bool selectRowsScriptRegistered = false; - if (AllowCellEditing) - { - if (PropertyModified("SelectedCell")) - { - sb.AppendFormat("{0}.x_selectCell();", XID); - } - } - else - { - if (PropertyModified("SelectedRowIndexArray")) - { - sb.AppendFormat("{0}.x_selectRows();", XID); - selectRowsScriptRegistered = true; - } - } - - - if (PropertyModified("HiddenColumns")) - { - sb.AppendFormat("{0}.x_updateColumnsHiddenStatus();", XID); - } - - - bool rowExpandersScriptRegistered = false; - if (PropertyModified("ExpandAllRowExpanders") || _registerScriptRowExpanders) - { - if (ExpandAllRowExpanders) - { - sb.AppendFormat("{0}.x_expandAllRows();", XID); - } - else - { - sb.AppendFormat("{0}.x_collapseAllRows();", XID); - } - rowExpandersScriptRegistered = true; - } - - // 如果数据重新加载了,即每行的数据都更新了 - if (dataReloaded) - { - if (!rowExpandersScriptRegistered) - { - // 数据重新加载了,如果没有注册行扩展列的脚本,需要注册展开所有行扩展列的脚本 - if (ExpandAllRowExpanders) - { - sb.AppendFormat("{0}.x_expandAllRows();", XID); - } - else - { - sb.AppendFormat("{0}.x_collapseAllRows();", XID); - } - } - - //// 数据重新加载了,检查是否启用文本选择 - //if (EnableTextSelection) - //{ - // sb.AppendFormat("{0}.x_enableTextSelection();", XID); - //} - - if (!AllowCellEditing) - { - // 数据重新加载了,如果没有注册选中行的脚本,需要注册重新选中行的脚本 - if (!selectRowsScriptRegistered) - { - sb.AppendFormat("{0}.x_selectRows();", XID); - } - } - - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - // 确保 X_Rows 在页面第一次加载时都存在于x_state中 - XState.AddModifiedProperty("X_Rows"); - - //// 因为可以在 ASPX 中指定列的 Hidden 属性 - //// 如果在 ASPX 中指定了列的 Hidden 属性,但是 HiddenColumnIndexArray 不在改变的属性列表中, - //// 为了在客户端初始化隐藏的列,需要手工将 HiddenColumnIndexArray 添加到改变的属性列表中,以便使其存在于 x_state 属性中。 - //if (HiddenColumnIndexArray.Length > 0) - //{ - // XState.AddModifiedProperty("HiddenColumnIndexArray"); - //} - - - // 不需要手工添加 SelectedRowIndexArray 属性,是因为只能通过代码设置此属性 - - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("grid"); - - //// 分页工具栏使用了 Ext.form.NumberField 组件,所以必须引入 form 的JavaScript - //if (AllowPaging) - //{ - // ResourceManager.Instance.AddJavaScriptComponent("form"); - //} - - //OB.Listeners.AddProperty("rowmousedown", "function(){alert('ok');}", true); - - string cls = CssClass; - - #region selectModel/gridStore/gridColumn - - #region old code - //string dataScript = "var grid_data=[['My_Item1The id of a column in this grid that should expand to fill unused space. This id can not be 0.','1','2008'],['My_Item2','2','2007']];"; - //string storeScript = "var grid_store = new Ext.data.SimpleStore({fields:[{name:'name1'},{name:'value'},{name:'year'}]});\r\ngrid_store.loadData(grid_data);"; - //string storeScript = "var grid_store = new Ext.data.SimpleStore({fields:['name1','value1','year1'],data:[['My_Item1The id of a column in this grid that should expand to fill unused space. This id can not be 0.','1','2008'],['My_Item2','2','2007']]});"; - //OB.AddProperty(OptionName.Columns, "[{id:'name2', header: 'Price', sortable: true},{header: 'Price2', sortable: true},{header: 'Price3', sortable: true}]", true); - - #endregion - - string gridSelectModelScript = GetGridSelectModel(); - OB.AddProperty("selModel", Render_SelectModelID, true); - - - string gridColumnsScript = GetGridColumnScript(); - OB.AddProperty("columns", Render_GridColumnsID, true); - - string gridStoreScript = GetGridStore(); - OB.AddProperty("store", Render_GridStoreID, true); - - //Console.WriteLine(RowExpander.DataFields); - - #endregion - - #region Width - - //if (MinColumnWidth != Unit.Empty) - //{ - // OB.AddProperty("minColumnWidth", MinColumnWidth.Value); - //} - - //string autoExpandColumnID = AutoExpandColumn; // GetAutoExpandColumnID(); - //if (String.IsNullOrEmpty(autoExpandColumnID)) - //{ - // autoExpandColumnID = GetAutoExpandColumnID(); - //} - - //if (!String.IsNullOrEmpty(autoExpandColumnID)) - //{ - // OB.AddProperty("autoExpandColumn", autoExpandColumnID); - - // if (AutoExpandColumnMax != Unit.Empty) - // { - // OB.AddProperty("autoExpandMax", AutoExpandColumnMax.Value); - // } - - // if (AutoExpandColumnMin != Unit.Empty) - // { - // OB.AddProperty("autoExpandMin", AutoExpandColumnMin.Value); - // } - //} - - - - #endregion - - #region viewConfig - - JsObjectBuilder viewBuilder = new JsObjectBuilder(); - if (!String.IsNullOrEmpty(EmptyText)) - { - viewBuilder.AddProperty("deferEmptyText", false); - viewBuilder.AddProperty("emptyText", EmptyText); - } - - if (!EnableAlternateRowColor) - { - viewBuilder.AddProperty("stripeRows", false); - } - - if (EnableTextSelection) - { - viewBuilder.AddProperty("enableTextSelection", true); - } - - if (viewBuilder.Count > 0) - { - OB.AddProperty("viewConfig", viewBuilder); - } - - - #endregion - - #region Properties - - if (EnableColumnLines) - { - OB.AddProperty("columnLines", true); - } - - if (ForceFitAllTime) - { - OB.AddProperty("forceFit", true); - } - - //OB.AddProperty("enableHdMenu", EnableHeaderMenu); - - //if (EnableHeaderMenu) - //{ - // // 启用标题栏菜单,但是不启用标题栏菜单中的隐藏列功能 - // if (!EnableColumnHide) - // { - // OB.AddProperty("enableColumnHide", false); - // } - //} - - - - if (!ShowGridHeader) - { - OB.AddProperty("hideHeaders", true); - } - - if (!EnableMouseOverColor) - { - OB.AddProperty("trackMouseOver", false); - } - - // 延迟渲染 - if (!EnableDelayRender) - { - OB.AddProperty("deferRowRender", false); - } - - - - #endregion - - #region EnableRowClickEvent - - if (EnableRowClickEvent) - { - string validateScript = "var args='RowClick$'+index;"; - validateScript += GetPostBackEventReference("#RowClick#").Replace("'#RowClick#'", "args"); - - string rowClickScript = JsHelper.GetFunction(validateScript, "grid", "record", "item", "index"); // String.Format("function(grid,rowIndex,e){{{0}}}", validateScript); - - OB.Listeners.AddProperty("itemclick", rowClickScript, true); - } - - if (EnableRowDoubleClickEvent) - { - string validateScript = "var args='RowDoubleClick$'+index;"; - validateScript += GetPostBackEventReference("#RowDoubleClick#").Replace("'#RowDoubleClick#'", "args"); - - string rowClickScript = JsHelper.GetFunction(validateScript, "grid", "record", "item", "index"); //String.Format("function(grid,rowIndex,e){{{0}}}", validateScript); - - OB.Listeners.AddProperty("itemdblclick", rowClickScript, true); - } - - #endregion - - #region AllowPaging - - string pagingScript = String.Empty; - if (AllowPaging) - { - OptionBuilder pagingBuilder = GetPagingBuilder(); - - pagingBuilder.AddProperty("displayInfo", true); - - pagingBuilder.AddProperty("store", Render_GridStoreID, true); - //// Hide refresh button, we don't implement this logic now. - //pagingBuilder.Listeners.AddProperty("beforerender", JsHelper.GetFunction("this.x_hideRefresh();"), true); - - string postbackScript = String.Empty; - postbackScript = GetPostBackEventReference("#PLACEHOLDER#"); - string loadPageScript = JsHelper.GetFunction(postbackScript.Replace("'#PLACEHOLDER#'", "'Page$'+(pageNum-1)"), "bar", "pageNum"); - - pagingBuilder.Listeners.AddProperty("beforechange", loadPageScript, true); - - - if (PageItems.Count > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (ControlBase item in PageItems) - { - if (item.Visible) - { - ab.AddProperty(String.Format("{0}", item.XID), true); - } - } - - pagingBuilder.AddProperty("items", ab.ToString(), true); - } - - - pagingScript = String.Format("var {0}=Ext.create('Ext.ux.SimplePagingToolbar',{1});", Render_PagingID, pagingBuilder); - - OB.AddProperty("bbar", Render_PagingID, true); - } - - #endregion - - #region remove fx - - OB.AddProperty("draggable", false); - OB.AddProperty("enableColumnMove", false); - OB.AddProperty("enableDragDrop", false); - - #endregion - - #region AllowSorting - - - //// 如果启用服务器端排序,则需要注册headerclick事件处理 - //if (AllowSorting) - //{ - // string headerClickScript = "if(!cmp.getColumnModel().config[columnIndex].sortable){return false;}"; - // headerClickScript += "var args='Sort$'+columnIndex;"; - // headerClickScript += GetPostBackEventReference("#SORT#").Replace("'#SORT#'", "args"); - - // // 告诉 store 本次排序已经处理了,不要重复处理了 - // headerClickScript += "cmp.getStore().headerclickprocessed=true;"; - - // //string headerClickScript = String.Format("function(grid,columnIndex){{{0}}}", validateScript); - // OB.Listeners.AddProperty("headerclick", JsHelper.GetFunction(headerClickScript, "cmp", "columnIndex"), true); - //} - - #endregion - - #region Listeners - viewready - - StringBuilder viewreadySB = new StringBuilder(); - - // Note: this.x_state['X_Rows']['Values'] will always rendered to the client side. - //viewreadySB.Append("cmp.x_updateTpls();"); - - if (AllowSorting) - { - viewreadySB.AppendFormat("cmp.x_initSortHeaders();"); - } - - if (!AllowCellEditing) - { - viewreadySB.Append("cmp.x_selectRows();"); - } - - - //if (EnableTextSelection) - //{ - // cls += " x-grid-selectable"; - - // viewreadySB.Append("cmp.x_enableTextSelection();"); - //} - - // 展开所有的行扩展列 - if (ExpandAllRowExpanders) - { - viewreadySB.Append("cmp.x_expandAllRows();"); - } - - - OB.Listeners.AddProperty("viewready", JsHelper.GetFunction(viewreadySB.ToString(), "cmp"), true); - - - #endregion - - #region cls - - if (RowVerticalAlign != VerticalAlign.Middle) - { - cls += String.Format("row-align-{0}", VerticalAlignName.GetName(RowVerticalAlign)); - } - - cls = cls.Trim(); - if (!String.IsNullOrEmpty(cls)) - { - OB.AddProperty("cls", cls); - } - - #endregion - - #region Listeners - render - - StringBuilder renderSB = new StringBuilder(); - - // 加载表格数据 - renderSB.Append("cmp.x_loadData();"); - - //// 隐藏列 - //if (HiddenColumnIndexArray != null && HiddenColumnIndexArray.Length > 0) - //{ - // renderSB.Append("cmp.x_updateColumnsHiddenStatus();"); - //} - - OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderSB.ToString(), "cmp"), true); - - - #endregion - - - #region AllowCellEditing - - if (AllowCellEditing) - { - if (ClicksToEdit != 2) - { - OB.AddProperty("clicksToEdit", ClicksToEdit); - } - - //OB.Listeners.AddProperty("beforeedit", JsHelper.GetFunction("console.log(e);", "e"), true); - - //OB.Listeners.AddProperty("afteredit", JsHelper.GetFunction("console.log(e);", "e"), true); - - //OB.AddProperty("x_newAddedRows", "[]", true); - - if (EnableAfterEditEvent) - { - string validateScript = "var args='AfterEdit$'+e.row+'$'+e.field;"; - validateScript += GetPostBackEventReference("#AfterEdit#").Replace("'#AfterEdit#'", "args"); - - string rowClickScript = String.Format("function(e){{{0}}}", validateScript); - - OB.Listeners.AddProperty("afteredit", rowClickScript, true); - } - } - - #endregion - - StringBuilder sb = new StringBuilder(); - sb.Append(gridSelectModelScript + gridStoreScript + pagingScript + gridColumnsScript); - //sb.AppendFormat("var {0}=new Ext.grid.{2}({1});", XID, OB, AllowCellEditing ? "EditorGridPanel" : "GridPanel"); - sb.AppendFormat("var {0}=Ext.create('Ext.grid.Panel',{1});", XID, OB); - - AddStartupScript(sb.ToString()); - - #region old code - - ////List<string> totalModifiedProperties = XState.GetTotalModifiedProperties(); - ////if (SelectedRowIndexArray.Length > 0) - ////{ - //// string selectScript = String.Empty; - //// if (totalModifiedProperties.Contains("SelectedRowIndexArray")) - //// { - //// selectScript = String.Format("{0}.x_selectRows();", XID); - //// } - //// else - //// { - //// selectScript = String.Format("{0}.selectRows({1});", Render_SelectModelID, new JArray(SelectedRowIndexArray)); - //// } - //// sb.Append(JsHelper.GetDeferScript(selectScript, 200)); - ////} - - //// Make sure SelectedRowIndexArray property exist in X_STATE during page's first load. - //sb.Append(JsHelper.GetDeferScript(String.Format("{0}.x_selectRows();", XID), 200)); - - #endregion - } - - private string GetSortColummID() - { - string columnID = String.Empty; - foreach (GridColumn column in AllColumns) - { - if (column.SortField == SortField) - { - columnID = column.ColumnID; - break; - } - } - return columnID; - } - - private OptionBuilder GetPagingBuilder() - { - OptionBuilder pagingBuilder = new OptionBuilder(); - pagingBuilder.AddProperty("x_pageSize", PageSize); - pagingBuilder.AddProperty("x_pageIndex", PageIndex); - pagingBuilder.AddProperty("x_recordCount", RecordCount); - pagingBuilder.AddProperty("x_pageCount", PageCount); - - int startRowIndex, endRowIndex; - ResolveStartEndRowIndex(out startRowIndex, out endRowIndex); - if (IsDatabasePaging) - { - pagingBuilder.AddProperty("x_databasePaging", true); - } - else - { - pagingBuilder.AddProperty("x_startRowIndex", startRowIndex); - pagingBuilder.AddProperty("x_endRowIndex", endRowIndex); - } - - return pagingBuilder; - } - - #endregion - - #region GetGridColumnScript - - //private string GetAutoExpandColumnID() - //{ - // string result = String.Empty; - - // int columnIndex = 0; - // foreach (GridColumn column in AllColumns) - // { - // if (column.ExpandUnusedSpace) - // { - // result = column.ColumnID; - // break; - // } - - // columnIndex++; - // } - - // return result; - //} - - - private string GetGridColumnScript() - { - string selectModelID = Render_SelectModelID; - - // columns - JsArrayBuilder columnsBuilder = new JsArrayBuilder(); - - //// 如果启用行序号,则放在第一列 - //if (EnableRowNumber) - //{ - // JsObjectBuilder rowNumberBuilder = new JsObjectBuilder(); - // if (RowNumberWidth != Unit.Empty) - // { - // rowNumberBuilder.AddProperty("width", RowNumberWidth.Value); - // } - // if (AllowPaging) - // { - // rowNumberBuilder.AddProperty("x_paging", Render_PagingID, true); - // } - // if (EnableRowNumberPaging) - // { - // rowNumberBuilder.AddProperty("x_paging_enabled", EnableRowNumberPaging); - // } - - // columnsBuilder.AddProperty(String.Format("Ext.create('Ext.grid.column.RowNumberer',{0})", rowNumberBuilder.ToString()), true); - - //} - - //// 如果启用CheckBox,则放在第二列 - //// 如果启用单元格编辑,则EnableCheckBoxSelect属性失效 - //if (EnableCheckBoxSelect && !AllowCellEditing) - //{ - // columnsBuilder.AddProperty(selectModelID, true); - //} - - - //string groupColumnScript = GetGroupColumnScript(); - - - string expanderXID = String.Empty; - foreach (GridColumn column in Columns) - { - if (column is TemplateField && (column as TemplateField).RenderAsRowExpander) - { - expanderXID = column.XID; - } - else - { - columnsBuilder.AddProperty(column.XID, true); - } - } - - // 为Grid添加plugin属性 - JsArrayBuilder pluginBuilder = new JsArrayBuilder(); - - if (!String.IsNullOrEmpty(expanderXID)) - { - pluginBuilder.AddProperty(expanderXID, true); - } - - //if (!String.IsNullOrEmpty(groupColumnScript)) - //{ - // pluginBuilder.AddProperty(Render_GridGroupColumnID, true); - //} - - if (pluginBuilder.Count > 0) - { - OB.AddProperty("plugins", pluginBuilder.ToString(), true); - } - - //JsObjectBuilder defaultsBuilder = new JsObjectBuilder(); - //// 这是Extjs默认的客户端排序 - ////defaultsBuilder.AddProperty("sortable", false); - ////defaultsBuilder.AddProperty("menuDisabled", true); - //defaultsBuilder.AddProperty("width", 100); - - //string columnModelScript = String.Format("var {0}=new Ext.grid.ColumnModel({{columns:{1},defaults:{2}}});", gridColumnID, columnsBuilder, defaultsBuilder); - string columnsScript = String.Format("var {0}={1};", Render_GridColumnsID, columnsBuilder); - - - return columnsScript; - } - - #endregion - - #region GetGroupColumnScript/ResolveGroupColumns - - //private string GetGroupColumnScript() - //{ - // if (Columns.Count > 0) - // { - // return String.Empty; - // } - - // List<List<GridGroupColumn>> resolvedGroups = new List<List<GridGroupColumn>>(); - // ResolveGroupColumns(GroupColumns, 0, resolvedGroups); - - // JsArrayBuilder groupHeaderBuilder = new JsArrayBuilder(); - - // foreach (List<GridGroupColumn> groups in resolvedGroups) - // { - // JsArrayBuilder groupsBuilder = new JsArrayBuilder(); - // foreach (GridGroupColumn group in groups) - // { - // JsObjectBuilder groupBuilder = new JsObjectBuilder(); - // groupBuilder.AddProperty("header", group.HeaderText); - // if (group.TextAlign != TextAlign.Left) - // { - // groupBuilder.AddProperty("align", TextAlignName.GetName(group.TextAlign)); - // } - - // int groupColumnCount = 0; - // ResolveColumnCount(group, ref groupColumnCount); - // groupBuilder.AddProperty("colspan", groupColumnCount); - - // groupsBuilder.AddProperty(groupBuilder); - // } - - // groupHeaderBuilder.AddProperty(groupsBuilder); - // } - - // return String.Format("var {0}=new Ext.ux.grid.ColumnHeaderGroup({{rows:{1}}});", Render_GridGroupColumnID, groupHeaderBuilder.ToString()); - - //} - - //// 递归获得每个分组头中包含的列数 - //private void ResolveColumnCount(GridGroupColumn group, ref int columnCount) - //{ - // if (group.Columns.Count > 0) - // { - // columnCount += group.Columns.Count; - // } - // else if (group.GroupColumns.Count > 0) - // { - // foreach (GridGroupColumn subGroup in group.GroupColumns) - // { - // ResolveColumnCount(subGroup, ref columnCount); - // } - // } - //} - - //// 将表头的树状分组转换为数组形式 - //private void ResolveGroupColumns(GridGroupColumnCollection groups, int level, List<List<GridGroupColumn>> resolvedGroups) - //{ - // foreach (GridGroupColumn group in groups) - // { - // if (resolvedGroups.Count <= level) - // { - // resolvedGroups.Add(new List<GridGroupColumn>()); - // } - // resolvedGroups[level].Add(group); - - // if (group.GroupColumns.Count > 0) - // { - // ResolveGroupColumns(group.GroupColumns, ++level, resolvedGroups); - // level--; - // } - // } - //} - - #endregion - - #region GetGridSelectModel - - private string GetGridSelectModel() - { - //JsObjectBuilder selectOB = new JsObjectBuilder(); - OptionBuilder selectOB = new OptionBuilder(); - - if (AllowCellEditing) - { - return String.Format("var {0}=new Ext.grid.CellSelectionModel({1});", Render_SelectModelID, selectOB); - } - else - { - selectOB.AddProperty("singleSelect", !EnableMultiSelect); - - if (EnableCheckBoxSelect && CheckBoxSelectOnly) - { - selectOB.AddProperty("checkOnly", true); - } - - //selectOB.AddProperty("listeners", "{beforerowselect:function(){return false;}}", true); - - if (EnableRowSelectEvent) - { - string validateScript = "var args='RowSelect$'+index;"; - validateScript += GetPostBackEventReference("#RowSelect#").Replace("'#RowSelect#'", "args"); - - string rowSelectScript = JsHelper.GetFunction(validateScript, "model", "record", "index"); //String.Format("function(model,rowIndex){{{0}}}", validateScript); - - selectOB.Listeners.AddProperty("select", rowSelectScript, true); - //selectOB.AddProperty("listeners", "{select:" + rowSelectScript + "}", true); - - } - - if (EnableCheckBoxSelect) - { - return String.Format("var {0}=Ext.create('Ext.selection.CheckboxModel',{1});", Render_SelectModelID, selectOB); - } - else - { - return String.Format("var {0}=Ext.create('Ext.selection.RowModel',{1});", Render_SelectModelID, selectOB); - } - } - } - #endregion - - #region GetGridStore - - private string GetGridStore() - { - OptionBuilder storeBuilder = new OptionBuilder(); - - // store - fields - JsArrayBuilder fieldsBuidler = new JsArrayBuilder(); - foreach (GridColumn column in AllColumns) - { - JsObjectBuilder fieldBuilder = new JsObjectBuilder(); - fieldBuilder.AddProperty("name", column.ColumnID); - - if (AllowCellEditing) - { - RenderBaseField field = column as RenderBaseField; - if (field != null) - { - if (field is RenderField) - { - RenderField renderFiled = field as RenderField; - if (renderFiled.FieldType != FieldType.Auto) - { - fieldBuilder.AddProperty("type", FieldTypeName.GetName(renderFiled.FieldType)); - } - } - else if (field is RenderCheckField) - { - fieldBuilder.AddProperty("type", "boolean"); - } - } - } - fieldsBuidler.AddProperty(fieldBuilder); - } - - storeBuilder.AddProperty("fields", fieldsBuidler, true); - - storeBuilder.AddProperty("remoteSort", true); - - // 设置初始排序列 - if (AllowSorting) - { - string sortColumnID = GetSortColummID(); - if (!String.IsNullOrEmpty(sortColumnID)) - { - JsObjectBuilder sorterBuilder = new JsObjectBuilder(); - sorterBuilder.AddProperty("property", GetSortColummID()); - sorterBuilder.AddProperty("direction", SortDirection.ToString()); - storeBuilder.AddProperty("sorters", sorterBuilder); - } - } - - - string postbackScript = GetPostBackEventReference("#SORT#").Replace("'#SORT#'", "'Sort$'+sorter.property+'$'+sorter.direction"); - postbackScript = "var sorter=operation.sorters[0];if(sorter){" + postbackScript + "}return false;"; - - storeBuilder.Listeners.AddProperty("beforeload", JsHelper.GetFunction(postbackScript, "store", "operation"), true); - - return String.Format("var {0}=Ext.create('Ext.data.ArrayStore',{1});", Render_GridStoreID, storeBuilder.ToString()); - - #region old code - - //storeBuilder.AddProperty("remoteSort", true); - //storeBuilder.AddProperty("proxy", String.Format("new Ext.ux.AspNetProxy('{0}')", ClientID), true); - - //storeBuilder.AddProperty("autoLoad", "{params:{start:0,limit:" + PageSize + "}}", true); - //storeBuilder.AddProperty("data", GetDatas()); - - //if (AllowSorting) - //{ - // // Default sort info - // if (SortColumnIndex >= 0 && SortColumnIndex < Columns.Count) - // { - // JsObjectBuilder sortInfoBuilder = new JsObjectBuilder(); - // sortInfoBuilder.AddProperty("field", Columns[SortColumnIndex].ColumnID); - // sortInfoBuilder.AddProperty("direction", SortDirection); - - // storeBuilder.AddProperty("sortInfo", sortInfoBuilder); - // } - //} - - - //return String.Format("var {0}=new Ext.data.ArrayStore({1});", Render_GridStoreID, storeBuilder.ToString()); - - - //#region store - data - ////string dataArrayString = GetDataArrayString(startEndRowIndex[0], startEndRowIndex[1]); - - - - //int[] startEndRowIndex = GetStartEndRowIndex(); - //// 计算完要渲染到前台的数据的条数,就要检查当前选中的项是不是有越界的 - //ResolveSelectedRowIndexArray(startEndRowIndex[1] - startEndRowIndex[0]); - - //#endregion - #endregion - - #region old code - - //JsArrayBuilder rowIndexBuilder = new JsArrayBuilder(); - - //if (SelectedRowIndexArray != null && SelectedRowIndexArray.Length > 0) - //{ - // foreach (int rowIndex in SelectedRowIndexArray) - // { - // rowIndexBuilder.AddProperty(rowIndex); - // } - //} - //string selectRowScript = String.Format("{0}.selectRows({1});", Render_SelectModelID, rowIndexBuilder); - //// 选中哪些行,这个必须要defer(100),否则选不中,晕(10ms就不行) - //selectRowScript = String.Format("(function(){{{0}}}).defer(100);", selectRowScript); - - //storeBuilder.AddProperty("listeners", String.Format("{{load:{0}}}", String.Format("function(){{{0}}}", selectRowScript)), true); - - #endregion - - #region old code - - // TODO - //string selectedRowIndexArrayString = StringUtil.GetStringFromIntArray(SelectedRowIndexArray); - //// FineUIAjax回发并且Columns发生变化,需要重新 - //if (_FineUIAjaxColumnsChanged) - //{ - // string reconfigScript = String.Empty; - // reconfigScript += gridStoreScript; - // reconfigScript += String.Format("{0}.reconfigure({1},{2});", XID, Render_GridStoreID, Render_GridColumnModelID); - // reconfigScript += String.Format("{0}.load();", Render_GridStoreID); - // // 重新加载数据后要更新input选中哪些项(因为可能选中项也会变化) - // reconfigScript += GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); - - // AddAjaxPropertyChangedScript(reconfigScript); - //} - //else - //{ - // bool reloadData = false; - // string updateSelectRowScript = selectRowScript + GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); - // if (AjaxPropertyChanged("DataArrayString", dataArrayString)) - // { - // string reloadDataScript = String.Format("{0}.loadData({1});", Render_GridStoreID, dataArrayString); - // // 虽然有可能“不需要修改隐藏字段的值,因为SelectedRowIndexArray其实并没有变化,只是重新加载数据(reloadData)导致选中项丢失了” - // // 但是我们还是修改了input的值,这没有什么影响 - // reloadDataScript += updateSelectRowScript; - - // AddAjaxPropertyChangedScript(reloadDataScript); - - // reloadData = true; - // } - - // // 不管SelectedRowIndexArray==null或者是不为空,都要做这一步 - // // 在Ajax回发中,selectedRowIndexArrayString改变了,并且没有重新加载数据 - // if (AjaxPropertyChanged("SelectedRowIndexArrayString", selectedRowIndexArrayString) && !reloadData) - // { - // AddAjaxPropertyChangedScript(updateSelectRowScript); - // } - - //} - #endregion - - #region old code - - //gridStoreScript += "\r\n"; - //if (EnableClientPaging) - //{ - - // // 进行分页时,改变隐藏input的值,以在回发时保持状态 - // // 同时注意:客户端分页时,清空选中的值 - // JsObjectBuilder listenersBuilder = new JsObjectBuilder(); - // listenersBuilder.AddProperty(OptionName.Load, String.Format("function(store,records,options){{Ext.get('{0}').dom.value=options.params.start;Ext.get('{1}').dom.value='';}}", EnableClientPagingStartRowIndexID, SelectedRowsHiddenFieldID), true); - // storeBuilder.AddProperty("listeners", listenersBuilder); - //} - - // 每次都是加载全部 - //loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + (endRowIndex - startRowIndex + 1) + "}}"); - - - //// load store - ////string loadStoreScript = String.Empty; - //if (EnableClientPaging) - //{ - // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:" + EnableClientPagingStartRowIndex + ",limit:" + PageSize + "}}"); - //} - //else - //{ - // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + Rows.Count + "}}"); - //} - - //gridStoreScript += loadStoreScript; - #endregion - } - - #region old code - - //private string GetDataArrayString(int startRowIndex, int endRowIndex) - //{ - // // store - data - // JsArrayBuilder dataBuidler = new JsArrayBuilder(); - - // for (int i = startRowIndex; i <= endRowIndex; i++) - // { - // // 当前行 - // GridRow row = Rows[i]; - - // JsArrayBuilder cellBuilder = new JsArrayBuilder(); - // foreach (object obj in row.Values) - // { - // cellBuilder.AddProperty(obj.ToString()); - // } - // dataBuidler.AddProperty(cellBuilder); - // } - - // // 二维数组 - // return dataBuidler.ToString(); - //} - - #endregion - - /// <summary> - /// 当前分页的开始行和结束行 - /// </summary> - /// <returns></returns> - internal void ResolveStartEndRowIndex(out int startRowIndex, out int endRowIndex) - { - startRowIndex = 0; - endRowIndex = Rows.Count - 1; - - if (AllowPaging) - { - if (IsDatabasePaging) - { - // 数据库分页 - startRowIndex = 0; - endRowIndex = Rows.Count - 1; - } - else - { - // 简单的服务器端分页 - startRowIndex = PageSize * PageIndex; - endRowIndex = (PageIndex + 1) * PageSize - 1; - endRowIndex = endRowIndex < RecordCount - 1 ? endRowIndex : RecordCount - 1; - } - } - } - - #endregion - - #endregion - - #region RenderBeginTag/RenderEndTag - - /// <summary> - /// 渲染开始标签 - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderBeginTag(HtmlTextWriter writer) - { - base.RenderBeginTag(writer); - - writer.Write(String.Format("<div id=\"{0}_tpls\" class=\"x-grid-tpls x-hide-display\">", ClientID)); - } - - /// <summary> - /// 渲染结束标签 - /// </summary> - /// <param name="writer">输出流</param> - protected override void RenderEndTag(HtmlTextWriter writer) - { - writer.Write("</div>"); - - base.RenderEndTag(writer); - } - - #endregion - - #region UpdateTemplateFields - - /// <summary> - /// 当在客户端修改了模板列中的值,调用此函数来告诉表格控件需要更新这些值; - /// 如果对表格重新进行了数据绑定,则不需要调用此函数,因为重新绑定后会更新表格的全部内容 - /// </summary> - public void UpdateTemplateFields() - { - PageManager.Instance.AddAjaxGridClientID(ClientID); - } - - #endregion - - #region DataBind - - /// <summary> - /// 绑定到数据源 - /// </summary> - public override void DataBind() - { - //base.DataBind(); - - // 如果重新绑定数据,则每行的模版列内容有可能发生变化,就需要更新 - // 因为目前,没有判断模板列是否改变的机制,所以只要可能导致模板列的动作都要更新模板列 - PageManager.Instance.AddAjaxGridClientID(ClientID); - - // 数据绑定之前要先清空 _dataKeys - _dataKeys = null; - - // 重新绑定数据前清空选中的值 - SelectedRowIndexArray = null; - SelectedCell = null; - - // 数据绑定之前要先清空现有的数据 - ClearRows(); - - int recordCount = 0; - - if (_dataSource != null) - { - if (_dataSource is IDataReader) - { - DataTable dataTable = new DataTable(); - dataTable.Load(_dataSource as IDataReader); - - recordCount = DataBindToDataTable(dataTable); - } - else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) - { - DataTable dataTable = null; - - if (_dataSource is DataView) - { - dataTable = ((DataView)_dataSource).ToTable(); - } - else if (_dataSource is DataSet) - { - dataTable = ((DataSet)_dataSource).Tables[0]; - } - else - { - dataTable = ((DataTable)_dataSource); - } - - recordCount = DataBindToDataTable(dataTable); - } - else if (_dataSource is IEnumerable) - { - recordCount = DataBindToEnumerable((IEnumerable)_dataSource); - } - else - { - throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); - } - } - - AfterDataBind(recordCount); - } - - - private int DataBindToDataTable(DataTable dataTable) - { - BeforeDataBind(); - - int rowIndex = 0, count = dataTable.DefaultView.Count; - for (; rowIndex < count; rowIndex++) - { - DataBindRow(rowIndex, dataTable.DefaultView[rowIndex]); - } - - return rowIndex; - } - - private int DataBindToEnumerable(IEnumerable list) - { - BeforeDataBind(); - - int rowIndex = 0; - foreach (object rowObj in list) - { - DataBindRow(rowIndex, rowObj); - - rowIndex++; - } - - return rowIndex; - } - - private void DataBindRow(int rowIndex, object rowObj) - { - GridRow row = new GridRow(this, rowObj, rowIndex); - Rows.Add(row); - //Controls.Add(row); - row.InitTemplateContainers(); - - OnPreRowDataBound(new GridPreRowEventArgs(rowObj, rowIndex)); - - //row.DataBindRow(); - row.DataBindRow(); - - OnRowDataBound(new GridRowEventArgs(rowObj, rowIndex, row.Values)); - } - - private void BeforeDataBind() - { - OnPreDataBound(EventArgs.Empty); - } - - #region AfterDataBind - - private void AfterDataBind(int recordCount) - { - if (!IsDatabasePaging) - { - // 如果不是数据库分页,则每次DataBind都要更新RecordCount的值 - // 数据库分页的话,RecordCount需要用户显式的赋值 - RecordCount = recordCount; - } - - - // 在所有行都绑定结束后,需要检查模拟树显示的列,并重新计算当前列的内容(在列内容前加上树分隔符) - // 1.查找需要模拟树显示的列 - BaseField simulateTreeColumn = null; - foreach (GridColumn gridColumn in AllColumns) - { - BaseField column = gridColumn as BaseField; - if (column != null && !String.IsNullOrEmpty(column.DataSimulateTreeLevelField)) - { - simulateTreeColumn = column; - break; - } - } - - // 2.如果找到这样的列 - if (simulateTreeColumn != null) - { - List<SimulateTreeNode> silumateTree = new List<SimulateTreeNode>(); - - // 存在需要模拟树显示的列 - for (int rowIndex = 0, rowCount = Rows.Count; rowIndex < rowCount; rowIndex++) - { - GridRow row = Rows[rowIndex]; - int level = Convert.ToInt32(row.GetPropertyValue(simulateTreeColumn.DataSimulateTreeLevelField)); - object content = row.Values[simulateTreeColumn.ColumnIndex]; - - SimulateTreeNode node = new SimulateTreeNode(); - node.Text = content.ToString(); - node.Level = level; - node.HasLittleBrother = false; - node.ParentNode = null; - silumateTree.Add(node); - } - - // 计算树 - SimulateTreeHeper treeHelper = new SimulateTreeHeper(); - treeHelper.ResolveSimulateTree(silumateTree, true); - - // 赋值 - for (int rowIndex = 0, rowCount = Rows.Count; rowIndex < rowCount; rowIndex++) - { - Rows[rowIndex].Values[simulateTreeColumn.ColumnIndex] = silumateTree[rowIndex].Text; - } - } - - } - #endregion - - - #region ClearRows - - /// <summary> - /// 清空Rows,同时清除所有子控件中的GridRow控件 - /// </summary> - private void ClearRows() - { - // 清空现有的行 - Rows.Clear(); - - // Grid.Controls 下面包含全部列控件(列控件里面又包含Editor)和全部模板列控件 - // 注意:Editor控件是属于列控件的,而模板列中的控件是输入每一行的模板列控件的! - - // 会重新创建这些控件,所以要先删除之前存在的GridRowControl - for (int i = Controls.Count - 1; i >= 0; i--) - { - if (Controls[i] is GridRowControl) - { - Controls.RemoveAt(i); - } - } - } - - #endregion - - #endregion - - #region GetModifiedCells - - private JArray _modifiedData = new JArray(); - - /// <summary> - /// 获取用户修改的数据 - /// </summary> - /// <returns></returns> - public JArray GetModifiedData() - { - return _modifiedData; - } - - - //private List<ModifiedCell> _modifiedCells = new List<ModifiedCell>(); - - ///// <summary> - ///// 获取用户修改的单元格,包含新增的数据 - ///// </summary> - ///// <returns></returns> - //internal List<ModifiedCell> GetModifiedCells() - //{ - // return _modifiedCells; - //} - - - private List<int> _deletedList; - - /// <summary> - /// 获取删除的行索引列表 - /// </summary> - /// <returns></returns> - public List<int> GetDeletedList() - { - return _deletedList; - } - - - private List<Dictionary<string, string>> _newAddedList; - - /// <summary> - /// 获取新增的行数据 - /// </summary> - /// <returns></returns> - public List<Dictionary<string, string>> GetNewAddedList() - { - return _newAddedList; - } - - - private Dictionary<int, Dictionary<string, string>> _modifiedDict; - - /// <summary> - /// 获取用户修改的行数据 - /// </summary> - /// <returns></returns> - public Dictionary<int, Dictionary<string, string>> GetModifiedDict() - { - return _modifiedDict; - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - base.LoadPostData(postDataKey, postCollection); - - - string paramHiddenColumns = postCollection[HiddenColumnsHiddenFieldID]; - List<string> hiddenColumnsList = new List<string>(); - if (!String.IsNullOrEmpty(paramHiddenColumns)) - { - hiddenColumnsList = StringUtil.GetStringListFromString(paramHiddenColumns, true); - } - string[] hiddenColumns = hiddenColumnsList.ToArray(); - if (!StringUtil.CompareStringArray(HiddenColumns, hiddenColumns)) - { - HiddenColumns = hiddenColumns; - XState.BackupPostDataProperty("HiddenColumns"); - } - - - /* - JArray rowStates = JArray.Parse(postCollection[RowStatesHiddenFieldID]); - int startRowIndex, endRowIndex; - ResolveStartEndRowIndex(out startRowIndex, out endRowIndex); - for (int i = startRowIndex; i <= endRowIndex; i++) - { - int index = i - startRowIndex; - List<object> shortStates = new List<object>(); - foreach (JArray ja in rowStates) - { - shortStates.Add(ja[index]); - } - Rows[i].FromShortStates(shortStates.ToArray()); - } - XState.BackupPostDataProperty("X_Rows"); - */ - - // 列状态(目前只有CheckBoxField用到) - String statesStr = postCollection[StatesHiddenFieldID]; - if (!String.IsNullOrEmpty(statesStr)) - { - JArray states = JArray.Parse(statesStr); - if (states.Count > 0) - { - int startRowIndex, endRowIndex; - ResolveStartEndRowIndex(out startRowIndex, out endRowIndex); - for (int i = startRowIndex; i <= endRowIndex; i++) - { - int index = i - startRowIndex; - - Rows[i].FromShortStates(states[index].ToObject<List<object>>().ToArray()); - } - XState.BackupPostDataProperty("X_Rows"); - } - } - - - // 删除的行索引列表 - string paramDeletedRows = postCollection[DeletedRowsHiddenFieldID]; - _deletedList = new List<int>(); - if (!String.IsNullOrEmpty(paramDeletedRows)) - { - _deletedList = StringUtil.GetIntListFromString(paramDeletedRows, true); - } - - - // 启用单元格编辑 - if (AllowCellEditing) - { - // 新增的行索引列表 - string paramNewAddedRows = postCollection[NewAddedRowsHiddenFieldID]; - List<int> newAddedRows = new List<int>(); - if (!String.IsNullOrEmpty(paramNewAddedRows)) - { - newAddedRows = StringUtil.GetIntListFromString(paramNewAddedRows, true); - } - - //// 应该从客户端的RowIndex中减去这个数字,这个数字是客户端新增的行数 - //int addedRowNumbers = 0; - //if (newAddedRows.Contains(0)) - //{ - // addedRowNumbers = newAddedRows.Count; - //} - - // 根据用户的输入修改每个单元格的Values - _modifiedDict = new Dictionary<int, Dictionary<string, string>>(); - _newAddedList = new List<Dictionary<string, string>>(); - _modifiedData = new JArray(); - String editorDataStr = postCollection[ModifiedDataHiddenFieldID]; - if (!String.IsNullOrEmpty(editorDataStr)) - { - _modifiedData = JArray.Parse(editorDataStr); - - foreach (JArray modifiedItem in _modifiedData) - { - // 修改的数据在新集合中的行索引 - int rowIndex = modifiedItem[0].ToObject<int>(); - // 修改的数据在原始集合中的行索引,如果是新增行则为-1 - int originalRowIndex = modifiedItem[1].ToObject<int>(); - - //bool thisRowIsNewAdded = false; - //if (newAddedRows.Count > 0 && newAddedRows.Contains(rowIndex)) - //{ - // thisRowIsNewAdded = true; - //} - //else - //{ - // thisRowIsNewAdded = false; - // rowIndex -= addedRowNumbers; - //} - - // 获取本行(Record)中所有修改的记录(Field),并保存到字典中(rowModifiedDic) - Dictionary<string, string> rowModifiedDic = new Dictionary<string, string>(); - JObject rowModifiedData = modifiedItem[2].ToObject<JObject>(); - foreach (JProperty propertyObj in rowModifiedData.Properties()) - { - string columnID = propertyObj.Name; - object cellValue = rowModifiedData.Value<object>(columnID); - int columnIndex = FindColumn(columnID).ColumnIndex; - - string newCellValue = cellValue.ToString(); - - rowModifiedDic.Add(columnID, newCellValue); - - // 如果本行不是新增的,还需要更新行的Values属性 - if (originalRowIndex >= 0) - { - Rows[originalRowIndex].Values[columnIndex] = newCellValue; - } - } - - if (originalRowIndex >= 0) - { - // 已经存在的行 - _modifiedDict.Add(originalRowIndex, rowModifiedDic); - } - else - { - // 新增行 - _newAddedList.Add(rowModifiedDic); - } - - } - - XState.BackupPostDataProperty("X_Rows"); - } - - - // 选中的单元格(数组中元素的顺序是固定的,不能排序) - int[] selectedCell = StringUtil.GetIntListFromString(postCollection[SelectedCellHiddenFieldID], false).ToArray(); - if (!StringUtil.CompareIntArray(SelectedCell, selectedCell)) - { - SelectedCell = selectedCell; - XState.BackupPostDataProperty("SelectedCell"); - } - - } - else - { - - // 选中的行 - int[] selectedRowIndexArray = StringUtil.GetIntListFromString(postCollection[SelectedRowIndexArrayHiddenFieldID], true).ToArray(); - if (!StringUtil.CompareIntArray(SelectedRowIndexArray, selectedRowIndexArray)) - { - SelectedRowIndexArray = selectedRowIndexArray; - XState.BackupPostDataProperty("SelectedRowIndexArray"); - } - - } - //// 需要恢复哪一列的数据 - //if (NeedPersistStateColumnIndexArray != null && NeedPersistStateColumnIndexArray.Length > 0) - //{ - // foreach (int columnIndex in NeedPersistStateColumnIndexArray) - // { - // Columns[columnIndex].LoadColumnState(postCollection[GetNeedPersistStateColumnIndexID(columnIndex)]); - // } - //} - - - return false; - } - - - - //public override void RaisePostDataChangedEvent() - //{ - // //OnCollapsedChanged(EventArgs.Empty); - //} - - #endregion - - #region CommitChanges/RejectChanges/ClearSelections/AddNewRecord - - /// <summary> - /// 接受用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) - /// </summary> - public void CommitChanges() - { - PageContext.RegisterStartupScript(GetCommitChangesReference()); - } - - /// <summary> - /// 获取接受用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) - /// </summary> - /// <returns>客户端脚本</returns> - public string GetCommitChangesReference() - { - return String.Format("{0}.x_commitChanges();", ScriptID); - } - - - /// <summary> - /// 拒绝用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) - /// </summary> - public void RejectChanges() - { - PageContext.RegisterStartupScript(GetRejectChangesReference()); - } - - /// <summary> - /// 获取拒绝用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) - /// </summary> - public string GetRejectChangesReference() - { - return String.Format("{0}.getStore().rejectChanges();", ScriptID); - } - - - /// <summary> - /// 清空表格选中项 - /// </summary> - public void ClearSelections() - { - PageContext.RegisterStartupScript(GetClearSelectionsReference()); - } - - /// <summary> - /// 获取清空表格选中项的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetClearSelectionsReference() - { - return String.Format("{0}.getSelectionModel().clearSelections();", ScriptID); - } - - /// <summary> - /// 添加一条新纪录 - /// </summary> - /// <param name="defaultObject">缺省值</param> - public void AddNewRecord(JObject defaultObject) - { - PageContext.RegisterStartupScript(GetAddNewRecordReference(defaultObject)); - } - - /// <summary> - /// 添加一条新纪录 - /// </summary> - /// <param name="defaultObject">缺省值</param> - /// <param name="appendToEnd">是否添加到末尾</param> - public void AddNewRecord(JObject defaultObject, bool appendToEnd) - { - PageContext.RegisterStartupScript(GetAddNewRecordReference(defaultObject, appendToEnd)); - } - - - /// <summary> - /// 获取添加一条新纪录的客户端脚本 - /// </summary> - /// <param name="defaultObject">缺省值</param> - /// <returns>客户端脚本</returns> - public string GetAddNewRecordReference(JObject defaultObject) - { - return GetAddNewRecordReference(defaultObject, false); - } - - - /// <summary> - /// 获取添加一条新纪录的客户端脚本 - /// </summary> - /// <param name="defaultObject">缺省值</param> - /// <param name="appendToEnd">是否添加到末尾</param> - /// <returns>客户端脚本</returns> - public string GetAddNewRecordReference(JObject defaultObject, bool appendToEnd) - { - return String.Format("{0}.x_addNewRecord({1},{2});", ScriptID, defaultObject.ToString(Formatting.None), appendToEnd.ToString().ToLower()); - } - - - /// <summary> - /// 删除选中行(或者单元格) - /// </summary> - public void DeleteSelected() - { - PageContext.RegisterStartupScript(GetDeleteSelectedReference()); - } - - /// <summary> - /// 获取删除选中行(或者单元格)的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetDeleteSelectedReference() - { - return String.Format("{0}.x_deleteSelected();", ScriptID); - } - - #endregion - - #region GetHasSelectionReference GetSelectCountReference - - - - /// <summary> - /// 获取表格是否有选中项的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetHasSelectionReference() - { - return String.Format("{0}.getSelectionModel().hasSelection()", ScriptID); - } - - /// <summary> - /// 获取表格选中项数的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - [Obsolete("此方法已废除,请使用GetSelectedCountReference方法")] - public string GetSelectCountReference() - { - return GetSelectedCountReference(); - } - - /// <summary> - /// 获取表格选中项数的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetSelectedCountReference() - { - return String.Format("{0}.x_getSelectedCount()", ScriptID); - } - - /// <summary> - /// 获取表格选中单元格的客户端脚本(仅用于AllowCellEditing模式) - /// </summary> - /// <returns>客户端脚本</returns> - public string GetSelectedCellReference() - { - return String.Format("{0}.x_getSelectedCell()", ScriptID); - } - - - - #endregion - - #region GetNoSelectionAlertReference GetNoSelectionAlertInParentReference - - /// <summary> - /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertReference(string message) - { - return GetNoSelectionAlertReference(message, String.Empty, Alert.DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertReference(string message, string title) - { - return GetNoSelectionAlertReference(message, title, Alert.DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">对话框图标</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertReference(string message, string title, MessageBoxIcon icon) - { - return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowReference(message, title, icon)); - } - - - /// <summary> - /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertInParentReference(string message) - { - return GetNoSelectionAlertInParentReference(message, String.Empty, Alert.DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertInParentReference(string message, string title) - { - return GetNoSelectionAlertInParentReference(message, title, Alert.DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">对话框图标</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertInParentReference(string message, string title, MessageBoxIcon icon) - { - return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowInParentReference(message, title, icon)); - } - - /// <summary> - /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertInTopReference(string message) - { - return GetNoSelectionAlertInTopReference(message, String.Empty, Alert.DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertInTopReference(string message, string title) - { - return GetNoSelectionAlertInTopReference(message, title, Alert.DefaultMessageBoxIcon); - } - - /// <summary> - /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - /// </summary> - /// <param name="message">对话框消息</param> - /// <param name="title">对话框标题</param> - /// <param name="icon">对话框图标</param> - /// <returns>客户端脚本</returns> - public string GetNoSelectionAlertInTopReference(string message, string title, MessageBoxIcon icon) - { - return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowInTopReference(message, title, icon)); - } - #endregion - - #region FindColumn/SelectAllRows - - /// <summary> - /// 通过列ID获取列实例 - /// </summary> - /// <param name="columnID">列ID</param> - /// <returns>列实例</returns> - public GridColumn FindColumn(string columnID) - { - foreach (GridColumn column in AllColumns) - { - if (column.ColumnID == columnID) - { - return column; - } - } - - return null; - } - - /// <summary> - /// 通过列索引获取列实例 - /// </summary> - /// <param name="columnIndex">列索引</param> - /// <returns>列实例</returns> - public GridColumn FindColumn(int columnIndex) - { - return AllColumns[columnIndex]; - } - - - /// <summary> - /// 选中所有行(设置SelectedRowIndexArray属性) - /// </summary> - public void SelectAllRows() - { - /* - List<int> rowIndexs = new List<int>(); - for (int i = 0; i < Rows.Count; i++) - { - rowIndexs.Add(i); - } - SelectedRowIndexArray = rowIndexs.ToArray(); - */ - - PageContext.RegisterStartupScript(String.Format("{0}.x_selectAllRows();", ScriptID)); - } - - /// <summary> - /// 展开全部的行扩展列 - /// </summary> - public void ExpandRowExpanders() - { - _registerScriptRowExpanders = true; - - ExpandAllRowExpanders = true; - //PageContext.RegisterStartupScript(String.Format("{0}.x_expandAllRows();", ScriptID)); - } - - /// <summary> - /// 折叠全部的行扩展列 - /// </summary> - public void CollapseRowExpanders() - { - _registerScriptRowExpanders = true; - - ExpandAllRowExpanders = false; - //PageContext.RegisterStartupScript(String.Format("{0}.x_collapseAllRows();", ScriptID)); - } - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - if (eventArgument.StartsWith("Sort$")) - { - #region Sort - - string[] sortArgs = eventArgument.Split('$'); - //if (sortArgs.Length == 2) - //{ - // // 格式为 "Sort$2",其中columnIndex = 2,这个是把前面的RowNumber,CheckBox列也算上去的,应该减掉 - // // 所在的列 - // int columnIndex = Convert.ToInt32(sortArgs[1]); - // columnIndex -= GetPrefixColumnNumber(); - - - // // 当前列的排序字段和排序方向 - // string sortDirection = "ASC"; - // string sortField = AllColumns[columnIndex].SortField; - - // // Sort column index not changed in current postback. - // if (columnIndex == SortColumnIndex) - // { - // sortDirection = SortDirection == "ASC" ? "DESC" : "ASC"; - // } - - // // 为了和之前的兼容,还是先把表格的这两个属性设置好 - // SortDirection = sortDirection; - // SortColumnIndex = columnIndex; - - // OnSort(new GridSortEventArgs(sortField, sortDirection, columnIndex)); - //} - if (sortArgs.Length == 3) - { - // 格式为 "Sort$Grid1_ctl03$ASC" - string sortDir = sortArgs[2]; - string columnId = sortArgs[1]; - - int columnIndex = 0; - foreach (GridColumn column in AllColumns) - { - if (column.ColumnID == columnId) - { - break; - } - columnIndex++; - } - - // 当前列的排序字段和排序方向 - string sortField = AllColumns[columnIndex].SortField; - string sortDirection = sortDir.ToUpper() == "ASC" ? "ASC" : "DESC"; - - SortDirection = sortDirection; - SortField = sortField; - - OnSort(new GridSortEventArgs(sortField, sortDirection, columnIndex)); - } - - #endregion - } - else if (eventArgument.StartsWith("Command$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 5) - { - OnRowCommand(new GridCommandEventArgs(Convert.ToInt32(commandArgs[1]), Convert.ToInt32(commandArgs[2]), commandArgs[3], commandArgs[4])); - } - } - else if (eventArgument.StartsWith("Page$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 2) - { - OnPageIndexChange(new GridPageEventArgs(Convert.ToInt32(commandArgs[1]))); - - if (ClearSelectedRowsAfterPaging) - { - // 分页后清空选中的值 - // 因为服务器端分页时不会重新绑定数据(数据库分页才会重新绑定数据,所以数据库分页时自然会清空选中的行) - // 所以需要一个设置,在分页结束后自动清空选中的行 - SelectedRowIndexArray = null; - } - SelectedCell = null; - } - } - else if (eventArgument.StartsWith("RowClick$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 2) - { - OnRowClick(new GridRowClickEventArgs(Convert.ToInt32(commandArgs[1]))); - } - } - else if (eventArgument.StartsWith("RowDoubleClick$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 2) - { - OnRowDoubleClick(new GridRowClickEventArgs(Convert.ToInt32(commandArgs[1]))); - } - } - else if (eventArgument.StartsWith("RowSelect$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 2) - { - OnRowSelect(new GridRowSelectEventArgs(Convert.ToInt32(commandArgs[1]))); - } - } - else if (eventArgument.StartsWith("AfterEdit$")) - { - string[] commandArgs = eventArgument.Split('$'); - if (commandArgs.Length == 3) - { - OnAfterEdit(new GridAfterEditEventArgs(Convert.ToInt32(commandArgs[1]), commandArgs[2].ToString())); - } - } - } - - /// <summary> - /// 获取Columns前面的列(比如索引列,选择框列) - /// </summary> - /// <returns></returns> - private int GetPrefixColumnNumber() - { - int prefix = 0; - //if (EnableRowNumber) - //{ - // prefix++; - //} - - //if (EnableCheckBoxSelect && !AllowCellEditing) - //{ - // prefix++; - //} - return prefix; - } - - #endregion - - #region OnSort - - private static readonly object _sortHandlerKey = new object(); - - /// <summary> - /// 排序事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("排序事件")] - public event EventHandler<GridSortEventArgs> Sort - { - add - { - Events.AddHandler(_sortHandlerKey, value); - } - remove - { - Events.RemoveHandler(_sortHandlerKey, value); - } - } - - /// <summary> - /// 触发排序事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnSort(GridSortEventArgs e) - { - EventHandler<GridSortEventArgs> handler = Events[_sortHandlerKey] as EventHandler<GridSortEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnPreDataBound - - private static readonly object _preDataBoundHandlerKey = new object(); - - /// <summary> - /// 绑定前事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("绑定前事件")] - public event EventHandler<EventArgs> PreDataBound - { - add - { - Events.AddHandler(_preDataBoundHandlerKey, value); - } - remove - { - Events.RemoveHandler(_preDataBoundHandlerKey, value); - } - } - - /// <summary> - /// 触发绑定前事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnPreDataBound(EventArgs e) - { - EventHandler<EventArgs> handler = Events[_preDataBoundHandlerKey] as EventHandler<EventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnPreRowDataBound - - private static readonly object _preRowDataBoundHandlerKey = new object(); - - /// <summary> - /// 行绑定前事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("行绑定前事件")] - public event EventHandler<GridPreRowEventArgs> PreRowDataBound - { - add - { - Events.AddHandler(_preRowDataBoundHandlerKey, value); - } - remove - { - Events.RemoveHandler(_preRowDataBoundHandlerKey, value); - } - } - - /// <summary> - /// 触发行绑定前事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnPreRowDataBound(GridPreRowEventArgs e) - { - EventHandler<GridPreRowEventArgs> handler = Events[_preRowDataBoundHandlerKey] as EventHandler<GridPreRowEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnRowDataBound - - private static readonly object _rowDataBoundHandlerKey = new object(); - - /// <summary> - /// 行绑定后事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("行绑定后事件")] - public event EventHandler<GridRowEventArgs> RowDataBound - { - add - { - Events.AddHandler(_rowDataBoundHandlerKey, value); - } - remove - { - Events.RemoveHandler(_rowDataBoundHandlerKey, value); - } - } - - /// <summary> - /// 触发行绑定后事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnRowDataBound(GridRowEventArgs e) - { - EventHandler<GridRowEventArgs> handler = Events[_rowDataBoundHandlerKey] as EventHandler<GridRowEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnRowCommand - - private static readonly object _rowCommandHandlerKey = new object(); - - /// <summary> - /// 行内事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("行内事件")] - public event EventHandler<GridCommandEventArgs> RowCommand - { - add - { - Events.AddHandler(_rowCommandHandlerKey, value); - } - remove - { - Events.RemoveHandler(_rowCommandHandlerKey, value); - } - } - - /// <summary> - /// 触发行内事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnRowCommand(GridCommandEventArgs e) - { - EventHandler<GridCommandEventArgs> handler = Events[_rowCommandHandlerKey] as EventHandler<GridCommandEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnPageIndexChange - - private static readonly object _pageIndexChangeHandlerKey = new object(); - - /// <summary> - /// 页索引改变事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("页索引改变事件")] - public event EventHandler<GridPageEventArgs> PageIndexChange - { - add - { - Events.AddHandler(_pageIndexChangeHandlerKey, value); - } - remove - { - Events.RemoveHandler(_pageIndexChangeHandlerKey, value); - } - } - - /// <summary> - /// 触发页索引改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnPageIndexChange(GridPageEventArgs e) - { - EventHandler<GridPageEventArgs> handler = Events[_pageIndexChangeHandlerKey] as EventHandler<GridPageEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnRowClick - - private static readonly object _rowClickHandlerKey = new object(); - - /// <summary> - /// 行点击事件(需要启用EnableRowClick) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("行点击事件(需要启用EnableRowClick)")] - public event EventHandler<GridRowClickEventArgs> RowClick - { - add - { - Events.AddHandler(_rowClickHandlerKey, value); - } - remove - { - Events.RemoveHandler(_rowClickHandlerKey, value); - } - } - - /// <summary> - /// 触发行点击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnRowClick(GridRowClickEventArgs e) - { - EventHandler<GridRowClickEventArgs> handler = Events[_rowClickHandlerKey] as EventHandler<GridRowClickEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnRowDoubleClick - - private static readonly object _rowDoubleClickHandlerKey = new object(); - - /// <summary> - /// 行双击事件(需要启用EnableRowDoubleClick) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("行双击事件(需要启用EnableRowDoubleClick)")] - public event EventHandler<GridRowClickEventArgs> RowDoubleClick - { - add - { - Events.AddHandler(_rowDoubleClickHandlerKey, value); - } - remove - { - Events.RemoveHandler(_rowDoubleClickHandlerKey, value); - } - } - - /// <summary> - /// 触发行双击事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnRowDoubleClick(GridRowClickEventArgs e) - { - EventHandler<GridRowClickEventArgs> handler = Events[_rowDoubleClickHandlerKey] as EventHandler<GridRowClickEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnRowSelect - - private static readonly object _rowSelectHandlerKey = new object(); - - /// <summary> - /// 行选中事件(需要启用EnableRowSelect) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("行选中事件(需要启用EnableRowSelect)")] - public event EventHandler<GridRowSelectEventArgs> RowSelect - { - add - { - Events.AddHandler(_rowSelectHandlerKey, value); - } - remove - { - Events.RemoveHandler(_rowSelectHandlerKey, value); - } - } - - /// <summary> - /// 触发行选中事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnRowSelect(GridRowSelectEventArgs e) - { - EventHandler<GridRowSelectEventArgs> handler = Events[_rowSelectHandlerKey] as EventHandler<GridRowSelectEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region OnAfterEdit - - private static readonly object _afterEditHandlerKey = new object(); - - /// <summary> - /// 结束编辑事件(需要启用EnableAfterEditEvent) - /// </summary> - [Category(CategoryName.ACTION)] - [Description("结束编辑事件(需要启用EnableAfterEditEvent)")] - public event EventHandler<GridAfterEditEventArgs> AfterEdit - { - add - { - Events.AddHandler(_afterEditHandlerKey, value); - } - remove - { - Events.RemoveHandler(_afterEditHandlerKey, value); - } - } - - /// <summary> - /// 触发结束编辑事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnAfterEdit(GridAfterEditEventArgs e) - { - EventHandler<GridAfterEditEventArgs> handler = Events[_afterEditHandlerKey] as EventHandler<GridAfterEditEventArgs>; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region old code - - //protected override void OnPreLoad(object sender, EventArgs e) - //{ - // base.OnPreLoad(sender, e); - - // SaveAjaxProperty("GridColumnScript", GetGridColumnScript()); - // if (AllowSorting) - // { - // SaveAjaxProperty("SortIconScript", GetSortIconScript()); - // } - - // if (AllowPaging) - // { - // JsObjectBuilder pagingBuilder; - // SaveAjaxProperty("TempPagingString", GetTempPagingString(out pagingBuilder)); - // } - - // int startRowIndex; - // int endRowIndex; - // SaveAjaxProperty("DataArrayString", GetDataArrayString(out startRowIndex, out endRowIndex)); - - // SelectedRowIndexArray = ResolveSelectedRowIndexArray(SelectedRowIndexArray, endRowIndex - startRowIndex); - // SaveAjaxProperty("SelectedRowIndexArrayString", StringUtil.GetStringFromIntArray(SelectedRowIndexArray)); - - //} - - #endregion - - #region old code - - //protected override object SaveViewState() - //{ - // object[] states = new object[] { base.SaveViewState(), - // ((IStateManager)Columns).SaveViewState(), - // ((IStateManager)Rows).SaveViewState(), - // //((IStateManager)Toolbar).SaveViewState() - // }; - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Columns).LoadViewState(states[1]); - - // ((IStateManager)Rows).LoadViewState(states[2]); - - // //((IStateManager)Toolbar).LoadViewState(states[3]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Columns).TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - - // //((IStateManager)Toolbar).TrackViewState(); - //} - - #endregion - - #region old code - - //public override void RenderBeginTag(HtmlTextWriter writer) - //{ - // base.RenderBeginTag(writer); - - // //// 当前选中的哪些行的数据 - // //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", - // // SelectedRowsHiddenFieldID, GetSelectedRowIndexArrayHTML())); - - // ////// 如果启用客户端排序,需要在回发时记录当前所在的第几页 - // ////if (EnableClientPaging) - // ////{ - // //// writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", - // //// EnableClientPagingStartRowIndexID, EnableClientPagingStartRowIndex)); - // ////} - - // //// 有这些列需要保存状态 - // //if (NeedPersistStateColumnIndexArray != null && NeedPersistStateColumnIndexArray.Length > 0) - // //{ - // // foreach (int columnIndex in NeedPersistStateColumnIndexArray) - // // { - // // writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", - // // GetNeedPersistStateColumnIndexID(columnIndex), Columns[columnIndex].SaveColumnState())); - // // } - // //} - //} - - - - //public override void RenderEndTag(HtmlTextWriter writer) - //{ - // base.RenderEndTag(writer); - //} - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Grid.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using System.Web.UI.HtmlControls; +using System.Data; +using System.Collections; +using System.Collections.Specialized; +using System.ComponentModel.Design; +using System.Collections.ObjectModel; + +namespace FineUI +{ + /// <summary> + /// 表格控件 + /// </summary> + [Designer("FineUI.Design.GridDesigner, FineUI.Design")] + [ToolboxData("<{0}:Grid Title=\"Grid\" runat=\"server\"><Columns></Columns></{0}:Grid>")] + [ToolboxBitmap(typeof(Grid), "toolbox.Grid.bmp")] + [Description("表格控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Grid : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler + { + #region static readonly + + /// <summary> + /// 模板列占位符前缀 + /// </summary> + public static readonly string TEMPLATE_PLACEHOLDER_PREFIX = "#@TPL@#"; + + #endregion + + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Grid() + { + // 严格的说,PageIndex、SortField、SortDirection这三个属性不可能在客户端被改变,而是向服务器发出改变的请求,然后服务器处理。 + // 因为这些属性的改变不会影响客户端的UI,必须服务器端发出UI改变的指令才行,所以它们算是服务器端属性。 + AddServerAjaxProperties("PageIndex", "PageSize", "RecordCount", "SortField", "SortDirection", "SummaryData", "SummaryHidden"); + AddClientAjaxProperties("F_Rows", "HiddenColumns", "SelectedRowIndexArray", "SelectedCell", "ExpandAllRowExpanders"); + + AddGzippedAjaxProperties("F_Rows"); + } + + // AJAX回发时注册展开或者折叠行扩展列的脚本 + private bool _registerScriptRowExpanders = false; + + // AJAX回发回发时调用了 DataBind 函数 + private bool _databindInFineUIAjaxPostBack = false; + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Container; + } + } + + #endregion + + #region AllowCellEditing + + /// <summary> + /// 允许单元格编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许单元格编辑")] + public bool AllowCellEditing + { + get + { + object obj = FState["AllowCellEditing"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowCellEditing"] = value; + } + } + + + /// <summary> + /// 编辑单元格时点击单元格的次数(默认为2次) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(2)] + [Description("编辑单元格时点击单元格的次数(默认为2次)")] + public int ClicksToEdit + { + get + { + object obj = FState["ClicksToEdit"]; + return obj == null ? 2 : (int)obj; + } + set + { + FState["ClicksToEdit"] = value; + } + } + + /// <summary> + /// 允许列锁定 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许列锁定")] + public bool AllowColumnLocking + { + get + { + object obj = FState["AllowColumnLocking"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowColumnLocking"] = value; + } + } + + #endregion + + #region AllowPaging/IsDatabasePaging/PageSize/PageCount/PageIndex/RecordCount + + + /// <summary> + /// 允许服务器端分页 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许服务器端分页")] + public bool AllowPaging + { + get + { + object obj = FState["AllowPaging"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowPaging"] = value; + } + } + + /// <summary> + /// 是否数据库分页 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否数据库分页")] + public bool IsDatabasePaging + { + get + { + object obj = FState["IsDatabasePaging"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["IsDatabasePaging"] = value; + } + } + + + /// <summary> + /// 服务器端分页后清空选中的行 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("服务器端分页后清空选中的行")] + public bool ClearSelectedRowsAfterPaging + { + get + { + object obj = FState["ClearSelectedRowsAfterPaging"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ClearSelectedRowsAfterPaging"] = value; + } + } + + + /// <summary> + /// 每页显示项数 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(20)] + [Description("每页显示项数")] + public int PageSize + { + get + { + object obj = FState["PageSize"]; + return obj == null ? 20 : (int)obj; + } + set + { + FState["PageSize"] = value; + } + } + + + /// <summary> + /// [AJAX属性]当前显示页索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("[AJAX属性]当前显示页索引")] + public int PageIndex + { + get + { + //object obj = FState["PageIndex"]; + //int pageIndex = (obj == null) ? 0 : (int)obj; + + //int resolvedPageIndex = pageIndex; + //if (resolvedPageIndex < 0) + //{ + // resolvedPageIndex = 0; + //} + //else if (resolvedPageIndex > PageCount - 1) + //{ + // resolvedPageIndex = PageCount - 1; + //} + + //if (resolvedPageIndex != pageIndex) + //{ + // // 如果PageIndex越界,则重新设置PageIndex + // PageIndex = resolvedPageIndex; + //} + + //return resolvedPageIndex; + + object obj = FState["PageIndex"]; + int pageIndex = (obj == null) ? 0 : (int)obj; + + int resolvedPageIndex = pageIndex; + + // 只有定义了RecordCount之后,才检查是否越界(PageIndex - PageCount) + if (RecordCount > 0) + { + if (resolvedPageIndex > PageCount - 1) + { + resolvedPageIndex = PageCount - 1; + } + } + + // 每次都需要做不能为负数的检查 + if (resolvedPageIndex < 0) + { + resolvedPageIndex = 0; + } + + // 如果PageIndex越界,则重新设置PageIndex + if (resolvedPageIndex != pageIndex) + { + PageIndex = resolvedPageIndex; + } + + return resolvedPageIndex; + } + set + { + FState["PageIndex"] = value; + } + } + + + /// <summary> + /// [AJAX属性]总页数 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int PageCount + { + get + { + int pageCount = RecordCount / PageSize; + if (RecordCount % PageSize != 0) + { + pageCount += 1; + } + return pageCount; + } + } + + + /// <summary> + /// [AJAX属性]记录的总个数 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int RecordCount + { + get + { + object obj = FState["RecordCount"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["RecordCount"] = value; + } + } + + #endregion + + #region AllowSorting/SortDirection/SortField + + /// <summary> + /// 允许服务器端排序 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许服务器端排序")] + public bool AllowSorting + { + get + { + object obj = FState["AllowSorting"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowSorting"] = value; + } + } + + + /// <summary> + /// 排序方向("ASC", "DESC") + /// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Category(CategoryName.OPTIONS)] + [DefaultValue("ASC")] + [Description("排序方向(ASC、DESC)")] + public string SortDirection + { + get + { + object obj = FState["SortDirection"]; + return obj == null ? "ASC" : (string)obj; + } + set + { + FState["SortDirection"] = value; + } + } + + + + + /// <summary> + /// 当前排序字段(只读) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]当前排序字段")] + public string SortField + { + get + { + object obj = FState["SortField"]; + return obj == null ? "" : (string)obj; + + //object obj = FState["SortField"]; + //if (obj == null) + //{ + // if (SortColumnIndex >= 0 && SortColumnIndex < AllColumns.Count) + // { + // obj = AllColumns[SortColumnIndex].SortField; + // } + // else + // { + // obj = String.Empty; + // } + //} + //return (string)obj; + } + set + { + FState["SortField"] = value; + } + } + + + ///// <summary> + ///// [AJAX属性]当前按照第几列排序(从零算起) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(-1)] + //[Description("[AJAX属性]当前按照第几列排序(从零算起)")] + //[Obsolete("此属性已废除,请使用SortField属性")] + //public int SortColumnIndex + //{ + // get + // { + // if (DesignMode) + // { + // return -1; + // } + // else + // { + // object obj = FState["SortColumnIndex"]; + // if (obj == null) + // { + // if (!String.IsNullOrEmpty(SortColumn)) + // { + // return FindColumn(SortColumn).ColumnIndex; + // } + // else + // { + // return -1; + // } + // } + // else + // { + // return (int)obj; + // } + // } + // } + // set + // { + // FState["SortColumnIndex"] = value; + // } + //} + + ///// <summary> + ///// [AJAX属性]排序列(ColumnID) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("[AJAX属性]排序列(ColumnID)")] + //[Obsolete("此属性已废除,请使用SortField属性")] + //public string SortColumn + //{ + // get + // { + // object obj = FState["SortColumn"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["SortColumn"] = value; + // } + //} + + #endregion + + #region EnableSummary + + /// <summary> + /// 启用合计行 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用合计行")] + public bool EnableSummary + { + get + { + object obj = FState["EnableSummary"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSummary"] = value; + } + } + + /// <summary> + /// [AJAX属性]合计行数据 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JObject SummaryData + { + get + { + object obj = FState["SummaryData"]; + return obj == null ? null : (JObject)obj; + } + set + { + FState["SummaryData"] = value; + } + } + + /// <summary> + /// 合计行的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(SummaryPosition.Flow)] + [Description("合计行的位置")] + public SummaryPosition SummaryPosition + { + get + { + object obj = FState["SummaryPosition"]; + return obj == null ? SummaryPosition.Flow : (SummaryPosition)obj; + } + set + { + FState["SummaryPosition"] = value; + } + } + + ///// <summary> + ///// 是否隐藏合计行 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否隐藏合计行")] + //public bool SummaryHidden + //{ + // get + // { + // object obj = FState["SummaryHidden"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["SummaryHidden"] = value; + // } + //} + + #endregion + + #region Properties + + /// <summary> + /// 数据为空时显示在内容区域的文本,可以是HTML标签 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("数据为空时显示在内容区域的文本,可以是HTML标签")] + public string EmptyText + { + get + { + object obj = FState["EmptyText"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["EmptyText"] = value; + } + } + + + /// <summary> + /// 行中文字的垂直排列位置(默认为Middle) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(VerticalAlign.Middle)] + [Description("行中文字的垂直排列位置(默认为Middle)")] + public VerticalAlign RowVerticalAlign + { + get + { + object obj = FState["RowVerticalAlign"]; + return obj == null ? VerticalAlign.Middle : (VerticalAlign)obj; + } + set + { + FState["RowVerticalAlign"] = value; + } + } + + + ///// <summary> + ///// 序号列的宽度(默认为23px) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "")] + //[Description("序号列的宽度(默认为23px)")] + //public Unit RowNumberWidth + //{ + // get + // { + // object obj = FState["RowNumberWidth"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["RowNumberWidth"] = value; + // } + //} + + + /// <summary> + /// 是否延迟渲染 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否延迟渲染")] + public bool EnableDelayRender + { + get + { + object obj = FState["EnableDelayRender"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableDelayRender"] = value; + } + } + + + /// <summary> + /// 展开所有的行扩展列 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("展开所有的行扩展列")] + public bool ExpandAllRowExpanders + { + get + { + object obj = FState["ExpandAllRowExpanders"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ExpandAllRowExpanders"] = value; + } + } + + + /// <summary> + /// 启用表格中的文字选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用表格中的文字选择")] + public bool EnableTextSelection + { + get + { + object obj = FState["EnableTextSelection"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableTextSelection"] = value; + } + } + + + #region old code + + //private bool EnableClientPaging_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用客户端分页")] + //public bool EnableClientPaging + //{ + // get + // { + // object obj = BoxState["EnableClientPaging"]; + // return obj == null ? EnableClientPaging_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableClientPaging"] = value; + // } + //} + + + //private bool EnableClientSort_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用客户端排序")] + //public bool EnableClientSort + //{ + // get + // { + // object obj = BoxState["EnableClientSort"]; + // return obj == null ? EnableClientSort_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableClientSort"] = value; + // } + //} + + + //private string AutoExpandColumnID_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("自动扩展的列ID")] + //public string AutoExpandColumnID + //{ + // get + // { + // object obj = BoxState["AutoExpandColumnID"]; + // return obj == null ? AutoExpandColumnID_Default : (string)obj; + // } + // set + // { + // BoxState["AutoExpandColumnID"] = value; + // } + //} + + #endregion + + ///// <summary> + ///// 启用行序号列 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用行序号列")] + //public bool EnableRowNumber + //{ + // get + // { + // object obj = FState["EnableRowNumber"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableRowNumber"] = value; + // } + //} + + + ///// <summary> + ///// 行序号列是否支持分页(默认为false,也即是每页都从1开始) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("行序号列是否支持分页(默认为false,也即是每页都从1开始)")] + //public bool EnableRowNumberPaging + //{ + // get + // { + // object obj = FState["EnableRowNumberPaging"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableRowNumberPaging"] = value; + // } + //} + + /// <summary> + /// 显示表格表头 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("显示表格表头")] + public bool ShowGridHeader + { + get + { + object obj = FState["ShowGridHeader"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowGridHeader"] = value; + } + } + + /// <summary> + /// 显示分页工具条右侧的分页信息 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("显示分页工具条右侧的分页信息")] + public bool ShowPagingMessage + { + get + { + object obj = FState["ShowPagingMessage"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowPagingMessage"] = value; + } + } + + /// <summary> + /// 启用表头菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用表头菜单")] + public bool EnableHeaderMenu + { + get + { + object obj = FState["EnableHeaderMenu"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableHeaderMenu"] = value; + } + } + + ///// <summary> + ///// 启用标题栏菜单中的隐藏列功能(默认为true,仅在EnableHeaderMenu=true时有效) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("启用标题栏菜单中的隐藏列功能(默认为true,仅在EnableHeaderMenu=true时有效)")] + //public bool EnableColumnHide + //{ + // get + // { + // object obj = FState["EnableColumnHide"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["EnableColumnHide"] = value; + // } + //} + + /// <summary> + /// 启用表格列分隔线(默认为false) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用表格列分隔线(默认为false)")] + public bool EnableColumnLines + { + get + { + object obj = FState["EnableColumnLines"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableColumnLines"] = value; + } + } + + + /// <summary> + /// 启用表格行分隔线(默认为true) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用表格行分隔线(默认为true)")] + public bool EnableRowLines + { + get + { + object obj = FState["EnableRowLines"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableRowLines"] = value; + } + } + + + /// <summary> + /// 启用交替行显示不同的颜色 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用交替行显示不同的颜色")] + public bool EnableAlternateRowColor + { + get + { + object obj = FState["EnableAlternateRowStyle"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableAlternateRowStyle"] = value; + } + } + + /// <summary> + /// 启用鼠标移动到行的颜色 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用鼠标移动到行的颜色")] + public bool EnableMouseOverColor + { + get + { + object obj = FState["EnableMouseOverColor"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableMouseOverColor"] = value; + } + } + + #endregion + + #region EnableRowClickEvent/EnableRowClickEvent + + ///// <summary> + ///// 点击行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("点击行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowClickEvent属性")] + //public bool AutoPostBack + //{ + // get + // { + // return EnableRowClickEvent; + // } + // set + // { + // EnableRowClickEvent = value; + // } + //} + + ///// <summary> + ///// 选中行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选中行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowSelectEvent属性")] + //public bool EnableRowSelect + //{ + // get + // { + // return EnableRowSelectEvent; + // } + // set + // { + // EnableRowSelectEvent = value; + // } + //} + + ///// <summary> + ///// 双击行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("双击行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowDoubleClickEvent属性")] + //public bool EnableRowDoubleClick + //{ + // get + // { + // return EnableRowDoubleClickEvent; + // } + // set + // { + // EnableRowDoubleClickEvent = value; + // } + //} + + + ///// <summary> + ///// 点击行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("点击行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowClickEvent属性")] + //public bool EnableRowClick + //{ + // get + // { + // return EnableRowClickEvent; + // } + // set + // { + // EnableRowClickEvent = value; + // } + //} + + + + /// <summary> + /// 选中行是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选中行是否自动回发")] + public bool EnableRowSelectEvent + { + get + { + object obj = FState["EnableRowSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableRowSelectEvent"] = value; + } + } + + + /// <summary> + /// 点击行是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("点击行是否自动回发")] + public bool EnableRowClickEvent + { + get + { + object obj = FState["EnableRowClickEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableRowClickEvent"] = value; + } + } + + + /// <summary> + /// 双击行是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("双击行是否自动回发")] + public bool EnableRowDoubleClickEvent + { + get + { + object obj = FState["EnableRowDoubleClickEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableRowDoubleClickEvent"] = value; + } + } + + /// <summary> + /// 结束编辑是否自动回发(需要启用AllowCellEditing) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("结束编辑是否自动回发(需要启用AllowCellEditing)")] + public bool EnableAfterEditEvent + { + get + { + object obj = FState["EnableAfterEditEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableAfterEditEvent"] = value; + } + } + + #endregion + + #region ForceFitAllTime/AutoExpandColumn + + ///// <summary> + ///// 列的最小宽度 + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("列的最小宽度")] + //public Unit MinColumnWidth + //{ + // get + // { + // object obj = FState["MinColumnWidth"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["MinColumnWidth"] = value; + // } + //} + + /// <summary> + /// 自动扩展宽度以填充剩余空间的列(ColumnID) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自动扩展宽度以填充剩余空间的列(ColumnID)")] + public string AutoExpandColumn + { + get + { + object obj = FState["AutoExpandColumn"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AutoExpandColumn"] = value; + } + } + + ///// <summary> + ///// 自动扩展列的最大宽度 + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("自动扩展列的最大宽度")] + //public Unit AutoExpandColumnMax + //{ + // get + // { + // object obj = FState["AutoExpandColumnMax"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["AutoExpandColumnMax"] = value; + // } + //} + + ///// <summary> + ///// 自动扩展列的最小宽度 + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("自动扩展列的最小宽度")] + //public Unit AutoExpandColumnMin + //{ + // get + // { + // object obj = FState["AutoExpandColumnMin"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["AutoExpandColumnMin"] = value; + // } + //} + + ///// <summary> + ///// 成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效)")] + //public bool ForceFitFirstTime + //{ + // get + // { + // object obj = FState["ForceFitFirstTime"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["ForceFitFirstTime"] = value; + // } + //} + + /// <summary> + /// 成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效)")] + public bool ForceFit + { + get + { + object obj = FState["ForceFit"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ForceFit"] = value; + } + } + + ///// <summary> + ///// 垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度) + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度)")] + //public Unit VerticalScrollWidth + //{ + // get + // { + // object obj = FState["VerticalScrollWidth"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["VerticalScrollWidth"] = value; + // } + //} + + #endregion + + #region old code + + //private GridRowExpander _rowExpander; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //public GridRowExpander RowExpander + //{ + // get + // { + // if (_rowExpander == null) + // { + // _rowExpander = new GridRowExpander(); + // } + // return _rowExpander; + // } + //} + + + #endregion + + #region EnableCheckBoxSelect/EnableMultiSelect/SelectedRowIndexArray + + /// <summary> + /// 启用多选框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用多选框")] + public bool EnableCheckBoxSelect + { + get + { + object obj = FState["EnableCheckBoxSelect"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableCheckBoxSelect"] = value; + } + } + + /// <summary> + /// 只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效)")] + public bool CheckBoxSelectOnly + { + get + { + object obj = FState["CheckBoxSelectOnly"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["CheckBoxSelectOnly"] = value; + } + } + + + /// <summary> + /// 启用多行选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用多行选择")] + public bool EnableMultiSelect + { + get + { + object obj = FState["EnableMultiSelect"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableMultiSelect"] = value; + } + } + + /// <summary> + /// [AJAX属性]选中行的索引(列表中的第一项) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int SelectedRowIndex + { + get + { + if (SelectedRowIndexArray.Length > 0) + { + return SelectedRowIndexArray[0]; + } + else + { + return -1; + } + } + set + { + SelectedRowIndexArray = new int[] { value }; + } + } + + /// <summary> + /// [AJAX属性]选中的单元格([行索引,列索引]) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedCell + { + get + { + object obj = FState["SelectedCell"]; + return obj == null ? null : (int[])obj; + } + set + { + if (value == null || value.Length != 2) + { + FState["SelectedCell"] = null; + } + else + { + FState["SelectedCell"] = value; + } + } + } + + + /// <summary> + /// [AJAX属性]选中行的索引列表 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedRowIndexArray + { + get + { + object obj = FState["SelectedRowIndexArray"]; + return obj == null ? new int[] { } : (int[])obj; + } + set + { + FState["SelectedRowIndexArray"] = GetSortedArray(value).ToArray(); + } + } + + private List<int> GetSortedArray(int[] value) + { + List<int> list = new List<int>(); + if (value != null) + { + list.AddRange(value); + list.Sort(); + } + return list; + } + + ///// <summary> + ///// Whether this property changed. + ///// </summary> + ///// <param name="newValue"></param> + ///// <returns></returns> + //private bool SelectedRowIndexArrayChanged(int[] newValue) + //{ + // if (newValue == null) + // { + // newValue = new int[] { }; + // } + // if (newValue.Length > 0) + // { + // // Make sure this list order ASC [1, 2, 6, 8] + // List<int> intList = new List<int>(newValue); + // intList.Sort(); + // newValue = intList.ToArray(); + // } + + // return new JArray(SelectedRowIndexArray).ToString() != new JArray(newValue).ToString(); + //} + + ///// <summary> + ///// [AJAX属性]隐藏的列 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public int[] HiddenColumnIndexArray + //{ + // get + // { + // List<int> hiddens = new List<int>(); + // if (AllColumns.Count > 0) + // { + // int prefix = GetPrefixColumnNumber(); + // for (int i = 0; i < AllColumns.Count; i++) + // { + // if (AllColumns[i].Hidden) + // { + // hiddens.Add(i + prefix); + // } + // } + // } + // return hiddens.ToArray(); + // } + // set + // { + // List<int> hiddens = GetSortedArray(value); + // int prefix = GetPrefixColumnNumber(); + // for (int i = 0; i < AllColumns.Count; i++) + // { + // if (hiddens.Contains(i + prefix)) + // { + // AllColumns[i].Hidden = true; + // } + // else + // { + // AllColumns[i].Hidden = false; + // } + // } + // } + //} + + /// <summary> + /// [AJAX属性]隐藏的列名称列表(逗号分隔) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string[] HiddenColumns + { + get + { + List<string> hiddens = new List<string>(); + if (AllColumns.Count > 0) + { + for (int i = 0; i < AllColumns.Count; i++) + { + GridColumn column = AllColumns[i]; + if (column.Hidden) + { + hiddens.Add(column.ColumnID); + } + } + } + return hiddens.ToArray(); + } + set + { + List<string> hiddens = new List<string>(value); + for (int i = 0; i < AllColumns.Count; i++) + { + GridColumn column = AllColumns[i]; + if (hiddens.Contains(column.ColumnID)) + { + column.Hidden = true; + } + else + { + column.Hidden = false; + } + } + } + } + + #endregion + + #region DataSource/DataKeyNames/DataKeys + + private object _dataSource = null; + + /// <summary> + /// 数据源 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + + /// <summary> + /// 行关键字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("行关键字段")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] DataKeyNames + { + get + { + object obj = FState["DataKeyNames"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["DataKeyNames"] = value; + } + } + + + private List<object[]> _dataKeys = null; + + /// <summary> + /// 行关键字段的值 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public List<object[]> DataKeys + { + get + { + if (_dataKeys == null) + { + _dataKeys = new List<object[]>(); + + for (int i = 0, count = _rows.Count; i < count; i++) + { + _dataKeys.Add(_rows[i].DataKeys); + } + } + else + { + for (int i = _dataKeys.Count, count = _rows.Count; i < count; i++) + { + _dataKeys.Add(_rows[i].DataKeys); + } + + } + + return _dataKeys; + } + } + + + #endregion + + #region GroupColumns/Columns/Rows + + private ControlBaseCollection _pageItems; + + /// <summary> + /// 分页工具条项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(ControlBaseItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ControlBaseCollection PageItems + { + get + { + if (_pageItems == null) + { + _pageItems = new ControlBaseCollection(this); + } + return _pageItems; + } + } + + + + //private GridGroupColumnCollection _groupColumns; + + ///// <summary> + ///// 分组列数据 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //[Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + //public virtual GridGroupColumnCollection GroupColumns + //{ + // get + // { + // if (_groupColumns == null) + // { + // _groupColumns = new GridGroupColumnCollection(this); + // } + // return _groupColumns; + // } + //} + + //private GridColumnCollection _allColumnsInternal; + ///// <summary> + ///// 全部的列 + ///// </summary> + //internal virtual GridColumnCollection AllColumnsInternal + //{ + // get + // { + // if (_allColumnsInternal == null) + // { + // _allColumnsInternal = new GridColumnCollection(this); + // } + // return _allColumnsInternal; + // } + //} + + internal Collection<GridColumn> _allColumns; + + /// <summary> + /// 全部的列 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public virtual Collection<GridColumn> AllColumns + { + get + { + if (_allColumns == null) + { + ResolveAllColumns(); + } + + return _allColumns; + } + } + + private void ResolveAllColumns() + { + _allColumns = new Collection<GridColumn>(); + + foreach (GridColumn column in Columns) + { + _allColumns.Add(column); + if (column is GroupField) + { + ResolveAllColumns(column as GroupField); + } + } + } + + private void ResolveAllColumns(GroupField column) + { + foreach (GridColumn subColumn in column.Columns) + { + _allColumns.Add(subColumn); + if (subColumn is GroupField) + { + ResolveAllColumns(subColumn as GroupField); + } + } + } + + + private GridColumnCollection _columns; + + /// <summary> + /// 列数据 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnCollection Columns + { + get + { + if (_columns == null) + { + _columns = new GridColumnCollection(this); + + // Columns改变后,要更新AllColumns + _columns.ItemsChange += _columns_ItemsChange; + } + return _columns; + } + } + + private void _columns_ItemsChange() + { + _allColumns = null; + } + + + private GridRowCollection _rows; + + /// <summary> + /// 行数据 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public virtual GridRowCollection Rows + { + get + { + if (_rows == null) + { + _rows = new GridRowCollection(); + } + return _rows; + } + } + #endregion + + #region F_Rows + + /// <summary> + /// 保存的行数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JObject F_Rows + { + get + { + JObject jo = new JObject(); + + JArray valuesJA = new JArray(); + JArray datakeysJA = new JArray(); + JArray statesJA = new JArray(); + foreach (GridRow row in Rows) + { + valuesJA.Add(new JArray(row.Values)); + datakeysJA.Add(new JArray(row.DataKeys)); + statesJA.Add(new JArray(row.ToShortStates())); + } + jo.Add("Values", valuesJA); + jo.Add("DataKeys", datakeysJA); + jo.Add("States", statesJA); + + return jo; + } + set + { + // 注意,此时不能清空 SelectedRowIndexArray + // 现在只是从FState中恢复数据,如果清空 SelectedRowIndexArray ,可能会导致 SelectedRowIndexArray 状态不对 + ClearRows(); + + JArray valuesArray = value.Value<JArray>("Values"); // value.getJArray("Values"); + JArray dataKeysArray = value.Value<JArray>("DataKeys"); //value.getJArray("DataKeys"); + JArray statesArray = value.Value<JArray>("States"); //value.getJArray("States"); + for (int i = 0, length = valuesArray.Count; i < length; i++) + { + GridRow row = new GridRow(this, null, i); + + // row.Values + row.Values = JSONUtil.ObjectArrayFromJArray(valuesArray[i].Value<JArray>()); // .getJArray(i)); + + // row.DataKeys + row.DataKeys = JSONUtil.ObjectArrayFromJArray(dataKeysArray[i].Value<JArray>()); //.getJArray(i)); + + // row.States + row.FromShortStates(JSONUtil.ObjectArrayFromJArray(statesArray[i].Value<JArray>())); + + Rows.Add(row); + //Controls.Add(row); + + //row.InitTemplateContainers(); + } + } + } + + #endregion + + #region oldcode + + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // if (property == "F_Rows") + // { + // XRowsFromJSON(state.getJObject(property)); + // } + //} + + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // // Init Columns property. + // int columnIndex = 0; + // foreach (GridColumn column in Columns) + // { + // column.Grid = this; + // column.ColumnIndex = columnIndex; + // columnIndex++; + // } + + // SaveXProperty("F_Rows", XRowsToJSON().ToString()); + // //SaveXProperty("SelectedRowIndexArray", new JArray(SelectedRowIndexArray).ToString()); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // // Rows has been changed in server-side code after onInit. + // if (XPropertyModified("F_Rows", XRowsToJSON().ToString())) + // { + // FState.AddModifiedProperty("F_Rows"); + // } + + // // Make sure SelectedRowIndexArray property exist in F_STATE during page's first load. + // if (!Page.IsPostBack) + // { + // FState.AddModifiedProperty("SelectedRowIndexArray"); + // } + + // //if (XPropertyModified("SelectedRowIndexArray", new JArray(SelectedRowIndexArray).ToString())) + // //{ + // // FState.AddModifiedProperties("SelectedRowIndexArray"); + // //} + // //else + // //{ + // // FState.RemoveModifiedProperties("SelectedRowIndexArray"); + // //} + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // if (property == "F_Rows") + // { + // state.put(property, XRowsToJSON()); + // } + //} + + //private JObject XRowsToJSON() + //{ + // JObject jo = new JObject(); + + // JArray valuesJA = new JArray(); + // JArray datakeysJA = new JArray(); + // foreach (GridRow row in Rows) + // { + // valuesja.Add(new JArray(row.Values)); + // datakeysja.Add(new JArray(row.DataKeys)); + // } + // jo.Add("Values", valuesJA); + // jo.Add("DataKeys", datakeysJA); + + // return jo; + //} + + //private void XRowsFromJSON(JObject jo) + //{ + // JArray valuesArray = jo.getJArray("Values"); + // JArray dataKeysArray = jo.getJArray("DataKeys"); + // for (int i = 0, length = valuesArray.Count; i < length; i++) + // { + // GridRow row = new GridRow(); + + // // row.Values + // row.Values = JSONUtil.StringArrayFromJArray(valuesArray.getJArray(i)); + + // // row.DataKeys + // row.DataKeys = JSONUtil.ObjectArrayFromJArray(dataKeysArray.getJArray(i)); + + // Rows.Add(row); + // } + //} + + #endregion + + #region SelectedRowsHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedCellHiddenFieldID + { + get + { + return String.Format("{0}_SelectedCell", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedRowIndexArrayHiddenFieldID + { + get + { + return String.Format("{0}_SelectedRowIndexArray", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string HiddenColumnsHiddenFieldID + { + get + { + return String.Format("{0}_HiddenColumns", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string StatesHiddenFieldID + { + get + { + return String.Format("{0}_States", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ModifiedDataHiddenFieldID + { + get + { + return String.Format("{0}_ModifiedData", ClientID); + } + } + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //private string NewAddedRowsHiddenFieldID + //{ + // get + // { + // return String.Format("{0}_NewAddedRows", ClientID); + // } + //} + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string DeletedRowsHiddenFieldID + { + get + { + return String.Format("{0}_DeletedRows", ClientID); + } + } + + ///// <summary> + ///// 实际绑定到页面上的值 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //internal int[] NeedPersistStateColumnIndexArray + //{ + // get + // { + // object obj = FState["NeedPersistStateColumnIndexArray"]; + // return obj == null ? null : (int[])obj; + // } + // set + // { + // FState["NeedPersistStateColumnIndexArray"] = value; + // } + //} + + //private string GetNeedPersistStateColumnIndexID(int columnIndex) + //{ + // return String.Format("{0}_columnIndex{1}", ClientID, columnIndex); + //} + + + #region old code + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("客户端分页时,开始行的序号")] + //private string EnableClientPagingStartRowIndexID + //{ + // get + // { + // return String.Format("{0}_startRowIndex", ClientID); + // } + //} + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("客户端分页时,开始行的序号")] + //internal int EnableClientPagingStartRowIndex + //{ + // get + // { + // object obj = BoxState["EnableClientPagingStartRowIndex"]; + // return obj == null ? 0 : (int)obj; + // } + // set + // { + // BoxState["EnableClientPagingStartRowIndex"] = value; + // } + //} + #endregion + + #endregion + + #region OnFirstPreRender/OnAjaxPreRender + + #region Render_IDS + + private string Render_SelectModelID + { + get + { + return String.Format("{0}_selModel", XID); + } + } + + private string Render_GridStoreID + { + get + { + return String.Format("{0}_store", XID); + } + } + + private string Render_GridFieldsID + { + get + { + return String.Format("{0}_fields", XID); + } + } + + private string Render_GridColumnsID + { + get + { + return String.Format("{0}_columns", XID); + } + } + + //private string Render_GridRowExpanderID + //{ + // get + // { + // return String.Format("{0}_expander", XID); + // } + //} + + private string Render_GridGroupColumnID + { + get + { + return String.Format("{0}_groupcolumn", XID); + } + } + + internal string Render_PagingID + { + get + { + return String.Format("{0}_paging", XID); + } + } + + //// FineUIAjax回发时,列是否发生变化 + //private bool _FineUIAjaxColumnsChanged = false; + + #endregion + + #region OnAjaxPreRender OnFirstPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + //bool needUpdateSortIcon = false; + + bool dataReloaded = false; + if (AllowPaging) + { + // 不论这三个属性是在客户端还是在服务器端被改变,都需要执行grid.getBottomToolbar().load函数 + // 如果不是数据库分页,则F_Rows不会变化,但是必须执行x_loadData + if (PropertyModified("PageIndex", "PageSize", "RecordCount")) + { + sb.AppendFormat("{0}.f_getPaging().f_update({1});", XID, GetPagingBuilder()); + sb.AppendFormat("{0}.f_loadData();", XID); + + //needUpdateSortIcon = true; + + dataReloaded = true; + } + } + + if (PropertyModified("F_Rows")) + { + //if (ClientPropertyModifiedInServer("F_Rows")) + if (!dataReloaded) + { + sb.AppendFormat("{0}.f_loadData();", XID); + + //needUpdateSortIcon = true; + + dataReloaded = true; + } + + // 如果F_Rows改变了,则每行的模版列内容应该也要变化 + PageManager.Instance.AddAjaxGridClientID(ClientID); + } + + // 本次AJAX请求重新加载的表格 + if (dataReloaded) + { + PageManager.Instance.AddAjaxGridReloadedClientID(ClientID); + } + else + { + // 如果不重新加载客户端数据,但是调用了 DataBind 函数,则提交更改 + if (AllowCellEditing && _databindInFineUIAjaxPostBack) + { + CommitChanges(); + } + } + + + bool selectRowsScriptRegistered = false; + if (AllowCellEditing) + { + if (PropertyModified("SelectedCell")) + { + sb.AppendFormat("{0}.f_selectCell();", XID); + } + } + else + { + if (PropertyModified("SelectedRowIndexArray")) + { + sb.AppendFormat("{0}.f_selectRows();", XID); + selectRowsScriptRegistered = true; + } + } + + + if (PropertyModified("HiddenColumns")) + { + sb.AppendFormat("{0}.f_updateColumnsHiddenStatus();", XID); + } + + + bool rowExpandersScriptRegistered = false; + if (PropertyModified("ExpandAllRowExpanders") || _registerScriptRowExpanders) + { + if (ExpandAllRowExpanders) + { + sb.AppendFormat("{0}.f_expandAllRows();", XID); + } + else + { + sb.AppendFormat("{0}.f_collapseAllRows();", XID); + } + rowExpandersScriptRegistered = true; + } + + // 如果数据重新加载了,即每行的数据都更新了 + if (dataReloaded) + { + if (!rowExpandersScriptRegistered) + { + // 数据重新加载了,如果没有注册行扩展列的脚本,需要注册展开所有行扩展列的脚本 + if (ExpandAllRowExpanders) + { + sb.AppendFormat("{0}.f_expandAllRows();", XID); + } + else + { + sb.AppendFormat("{0}.f_collapseAllRows();", XID); + } + } + + + if (!AllowCellEditing) + { + // 数据重新加载了,如果没有注册选中行的脚本,需要注册重新选中行的脚本 + if (!selectRowsScriptRegistered) + { + sb.AppendFormat("{0}.f_selectRows();", XID); + } + } + + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Rows 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Rows"); + + // 不需要手工添加 SelectedRowIndexArray 属性,是因为只能通过代码设置此属性 + // 只要通过代码设置了 SelectedRowIndexArray 属性,则一定会存在于 F_States + + + base.OnFirstPreRender(); + + + //ResourceManager.Instance.AddJavaScriptComponent("grid"); + JsArrayBuilder pluginBuilder = new JsArrayBuilder(); + + #region selectModel/gridStore/gridColumn + + #region old code + //string dataScript = "var grid_data=[['My_Item1The id of a column in this grid that should expand to fill unused space. This id can not be 0.','1','2008'],['My_Item2','2','2007']];"; + //string storeScript = "var grid_store = new Ext.data.SimpleStore({fields:[{name:'name1'},{name:'value'},{name:'year'}]});\r\ngrid_store.loadData(grid_data);"; + //string storeScript = "var grid_store = new Ext.data.SimpleStore({fields:['name1','value1','year1'],data:[['My_Item1The id of a column in this grid that should expand to fill unused space. This id can not be 0.','1','2008'],['My_Item2','2','2007']]});"; + //OB.AddProperty(OptionName.Columns, "[{id:'name2', header: 'Price', sortable: true},{header: 'Price2', sortable: true},{header: 'Price3', sortable: true}]", true); + + #endregion + + string gridSelectModelScript = GetGridSelectModel(); + OB.AddProperty("selModel", Render_SelectModelID, true); + + + string gridColumnsScript = GetGridColumnScript(pluginBuilder); + OB.AddProperty("columns", Render_GridColumnsID, true); + + string gridStoreScript = GetGridStore(); + OB.AddProperty("store", Render_GridStoreID, true); + + OB.AddProperty("f_fields", Render_GridFieldsID, true); + //Console.WriteLine(RowExpander.DataFields); + + #endregion + + #region Width + + //if (MinColumnWidth != Unit.Empty) + //{ + // OB.AddProperty("minColumnWidth", MinColumnWidth.Value); + //} + + //string autoExpandColumnID = AutoExpandColumn; // GetAutoExpandColumnID(); + //if (String.IsNullOrEmpty(autoExpandColumnID)) + //{ + // autoExpandColumnID = GetAutoExpandColumnID(); + //} + + //if (!String.IsNullOrEmpty(autoExpandColumnID)) + //{ + // OB.AddProperty("autoExpandColumn", autoExpandColumnID); + + // if (AutoExpandColumnMax != Unit.Empty) + // { + // OB.AddProperty("autoExpandMax", AutoExpandColumnMax.Value); + // } + + // if (AutoExpandColumnMin != Unit.Empty) + // { + // OB.AddProperty("autoExpandMin", AutoExpandColumnMin.Value); + // } + //} + + + + #endregion + + #region viewConfig + + JsObjectBuilder viewBuilder = new JsObjectBuilder(); + if (!String.IsNullOrEmpty(EmptyText)) + { + viewBuilder.AddProperty("deferEmptyText", false); + viewBuilder.AddProperty("emptyText", EmptyText); + } + + if (!EnableAlternateRowColor) + { + viewBuilder.AddProperty("stripeRows", false); + } + + if (EnableTextSelection) + { + viewBuilder.AddProperty("enableTextSelection", true); + } + + viewBuilder.AddProperty("getRowClass", JsHelper.GetFunction("return 'f-grid-row';"), true); + //viewBuilder.AddProperty("selectedItemCls", "x-grid-row-selected f-grid-row-selected"); + + if (viewBuilder.Count > 0) + { + OB.AddProperty("viewConfig", viewBuilder); + } + + + #endregion + + #region Properties + + if (EnableColumnLines) + { + OB.AddProperty("columnLines", true); + } + + if (!EnableRowLines) + { + OB.AddProperty("rowLines", false); + } + + + + if (ForceFit) + { + OB.AddProperty("forceFit", true); + } + + //OB.AddProperty("enableHdMenu", EnableHeaderMenu); + + //if (EnableHeaderMenu) + //{ + // // 启用标题栏菜单,但是不启用标题栏菜单中的隐藏列功能 + // if (!EnableColumnHide) + // { + // OB.AddProperty("enableColumnHide", false); + // } + //} + + + + if (!ShowGridHeader) + { + OB.AddProperty("hideHeaders", true); + } + + if (!EnableMouseOverColor) + { + OB.AddProperty("trackMouseOver", false); + } + + // 延迟渲染 + if (!EnableDelayRender) + { + OB.AddProperty("deferRowRender", false); + } + + + + #endregion + + #region EnableRowClickEvent + + if (EnableRowClickEvent) + { + string validateScript = "var args='RowClick$'+index;"; + validateScript += GetPostBackEventReference("#RowClick#").Replace("'#RowClick#'", "args"); + + //string rowClickScript = JsHelper.GetFunction(validateScript, "grid", "record", "item", "index"); // String.Format("function(grid,rowIndex,e){{{0}}}", validateScript); + + //OB.Listeners.AddProperty("itemclick", rowClickScript, true); + AddListener("itemclick", validateScript, "grid", "record", "item", "index"); + } + + if (EnableRowDoubleClickEvent) + { + string validateScript = "var args='RowDoubleClick$'+index;"; + validateScript += GetPostBackEventReference("#RowDoubleClick#").Replace("'#RowDoubleClick#'", "args"); + + //string rowClickScript = JsHelper.GetFunction(validateScript, "grid", "record", "item", "index"); //String.Format("function(grid,rowIndex,e){{{0}}}", validateScript); + + //OB.Listeners.AddProperty("itemdblclick", rowClickScript, true); + AddListener("itemdblclick", validateScript, "grid", "record", "item", "index"); + } + + #endregion + + #region AllowPaging + + string pagingScript = String.Empty; + + if (AllowPaging) + { + OptionBuilder pagingBuilder = GetPagingBuilder(); + + if (!ShowPagingMessage) + { + pagingBuilder.AddProperty("displayInfo", false); + } + else + { + pagingBuilder.AddProperty("displayInfo", true); + } + + pagingBuilder.AddProperty("store", Render_GridStoreID, true); + //// Hide refresh button, we don't implement this logic now. + //pagingBuilder.Listeners.AddProperty("beforerender", JsHelper.GetFunction("this.f_hideRefresh();"), true); + + string postbackScript = String.Empty; + postbackScript = GetPostBackEventReference("#PLACEHOLDER#"); + string loadPageScript = JsHelper.GetFunction(postbackScript.Replace("'#PLACEHOLDER#'", "'Page$'+(pageNum-1)") + "return false;", "bar", "pageNum"); + + pagingBuilder.Listeners.AddProperty("beforechange", loadPageScript, true); + + + if (PageItems.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (ControlBase item in PageItems) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + + pagingBuilder.AddProperty("items", ab.ToString(), true); + } + + pagingBuilder.AddProperty("xtype", "simplepagingtoolbar"); + pagingBuilder.AddProperty("dock", "bottom"); + + pagingScript = String.Format("var {0}={1};", Render_PagingID, pagingBuilder); + + //OB.AddProperty("bbar", Render_PagingID, true); + } + + #endregion + + #region remove fx + + OB.AddProperty("draggable", false); + OB.AddProperty("enableColumnMove", false); + OB.AddProperty("enableDragDrop", false); + + #endregion + + #region AllowSorting + + + //// 如果启用服务器端排序,则需要注册headerclick事件处理 + //if (AllowSorting) + //{ + // string headerClickScript = "if(!cmp.getColumnModel().config[columnIndex].sortable){return false;}"; + // headerClickScript += "var args='Sort$'+columnIndex;"; + // headerClickScript += GetPostBackEventReference("#SORT#").Replace("'#SORT#'", "args"); + + // // 告诉 store 本次排序已经处理了,不要重复处理了 + // headerClickScript += "cmp.getStore().headerclickprocessed=true;"; + + // //string headerClickScript = String.Format("function(grid,columnIndex){{{0}}}", validateScript); + // OB.Listeners.AddProperty("headerclick", JsHelper.GetFunction(headerClickScript, "cmp", "columnIndex"), true); + //} + + #endregion + + #region EnableSummary + + JsArrayBuilder features = new JsArrayBuilder(); + + if (EnableSummary) + { + JsObjectBuilder summaryFeature = new JsObjectBuilder(); + summaryFeature.AddProperty("ftype", "summary"); + summaryFeature.AddProperty("id", "summary"); + + if (SummaryPosition != SummaryPosition.Flow) + { + summaryFeature.AddProperty("dock", SummaryPositionHelper.GetName(SummaryPosition)); + } + + //if (SummaryHidden) + //{ + // summaryFeature.AddProperty("showSummaryRow", false); + //} + + features.AddProperty(summaryFeature); + } + + + if (features.Count > 0) + { + OB.AddProperty("features", features); + } + + #endregion + + #region Listeners - afterrender + + StringBuilder viewreadySB = new StringBuilder(); + + // Note: this.f_state['F_Rows']['Values'] will always rendered to the client side. + //viewreadySB.Append("cmp.f_updateTpls();"); + + if (AllowSorting) + { + viewreadySB.AppendFormat("cmp.f_initSortHeaders();"); + } + + if (!AllowCellEditing) + { + viewreadySB.Append("cmp.f_selectRows();"); + } + + + //if (EnableTextSelection) + //{ + // cls += " x-grid-selectable"; + + // viewreadySB.Append("cmp.f_enableTextSelection();"); + //} + + // 展开所有的行扩展列 + if (ExpandAllRowExpanders) + { + viewreadySB.Append("cmp.f_expandAllRows();"); + } + + if (AllowColumnLocking) + { + // 必须延时调用 doLayout,否则显示不正常 + viewreadySB.Append("cmp.doLayout();"); + + } + + string viewreadyScript = "window.setTimeout(function(){" + viewreadySB.ToString() + "},200);"; + + // viewready在enableLocking时不会触发,只好改成afterrender + //OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction(viewreadyScript, "cmp"), true); + AddListener("afterrender", viewreadyScript, "cmp"); + + #endregion + + #region cls + + string cls = CssClass; + + if (RowVerticalAlign != VerticalAlign.Middle) + { + cls += String.Format("row-align-{0}", VerticalAlignName.GetName(RowVerticalAlign)); + } + + cls = cls.Trim(); + if (!String.IsNullOrEmpty(cls)) + { + OB.AddProperty("cls", cls); + } + + #endregion + + #region Listeners - render + + StringBuilder renderSB = new StringBuilder(); + + // 加载表格数据 + renderSB.Append("cmp.f_loadData();"); + + //// 隐藏列 + //if (HiddenColumnIndexArray != null && HiddenColumnIndexArray.Length > 0) + //{ + // renderSB.Append("cmp.f_updateColumnsHiddenStatus();"); + //} + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderSB.ToString(), "cmp"), true); + AddListener("render", renderSB.ToString(), "cmp"); + + #endregion + + #region AllowCellEditing + + string cellEditScript = String.Empty; + + if (AllowCellEditing) + { + string pluginId = String.Format("{0}_cellEditing", XID); + + JsObjectBuilder cellEditBuilder = new JsObjectBuilder(); + cellEditBuilder.AddProperty("pluginId", pluginId); + cellEditBuilder.AddProperty("clicksToEdit", ClicksToEdit); + + cellEditScript = String.Format("var {0}=Ext.create('Ext.grid.plugin.CellEditing',{1});", pluginId, cellEditBuilder); + + pluginBuilder.AddProperty(pluginId, true); + + if (EnableAfterEditEvent) + { + string validateScript = "var args='AfterEdit$'+e.rowIdx+'$'+e.field;"; + validateScript += GetPostBackEventReference("#AfterEdit#").Replace("'#AfterEdit#'", "args"); + + //string rowClickScript = String.Format("function(editor,e){{{0}}}", validateScript); + //OB.Listeners.AddProperty("edit", rowClickScript, true); + AddListener("edit", validateScript, "editor", "e"); + } + + OB.AddProperty("f_cellEditing", pluginId, true); + } + + + if (AllowColumnLocking) + { + OB.AddProperty("enableLocking", true); + } + else + { + OB.AddProperty("enableLocking", false); + } + + #endregion + + #region pluginBuilder + + if (pluginBuilder.Count > 0) + { + OB.AddProperty("plugins", pluginBuilder.ToString(), true); + } + + #endregion + + StringBuilder sb = new StringBuilder(); + sb.Append(gridSelectModelScript + gridStoreScript + pagingScript + gridColumnsScript + cellEditScript); + sb.AppendFormat("var {0}=Ext.create('Ext.grid.Panel',{1});", XID, OB); + + AddStartupScript(sb.ToString()); + + #region old code + + ////List<string> totalModifiedProperties = FState.GetTotalModifiedProperties(); + ////if (SelectedRowIndexArray.Length > 0) + ////{ + //// string selectScript = String.Empty; + //// if (totalModifiedProperties.Contains("SelectedRowIndexArray")) + //// { + //// selectScript = String.Format("{0}.f_selectRows();", XID); + //// } + //// else + //// { + //// selectScript = String.Format("{0}.selectRows({1});", Render_SelectModelID, new JArray(SelectedRowIndexArray)); + //// } + //// sb.Append(JsHelper.GetDeferScript(selectScript, 200)); + ////} + + //// Make sure SelectedRowIndexArray property exist in F_STATE during page's first load. + //sb.Append(JsHelper.GetDeferScript(String.Format("{0}.f_selectRows();", XID), 200)); + + #endregion + } + + + private string GetSortColummID() + { + string columnID = String.Empty; + foreach (GridColumn column in AllColumns) + { + if (column.SortField == SortField) + { + columnID = column.ColumnID; + break; + } + } + return columnID; + } + + private OptionBuilder GetPagingBuilder() + { + OptionBuilder pagingBuilder = new OptionBuilder(); + pagingBuilder.AddProperty("f_pageSize", PageSize); + pagingBuilder.AddProperty("f_pageIndex", PageIndex); + pagingBuilder.AddProperty("f_recordCount", RecordCount); + pagingBuilder.AddProperty("f_pageCount", PageCount); + + int startRowIndex, endRowIndex; + ResolveStartEndRowIndex(out startRowIndex, out endRowIndex); + if (IsDatabasePaging) + { + pagingBuilder.AddProperty("f_databasePaging", true); + } + else + { + pagingBuilder.AddProperty("f_startRowIndex", startRowIndex); + pagingBuilder.AddProperty("f_endRowIndex", endRowIndex); + } + + return pagingBuilder; + } + + #endregion + + #region GetGridColumnScript + + //private string GetAutoExpandColumnID() + //{ + // string result = String.Empty; + + // int columnIndex = 0; + // foreach (GridColumn column in AllColumns) + // { + // if (column.ExpandUnusedSpace) + // { + // result = column.ColumnID; + // break; + // } + + // columnIndex++; + // } + + // return result; + //} + + + private string GetGridColumnScript(JsArrayBuilder pluginBuilder) + { + string selectModelID = Render_SelectModelID; + + // columns + JsArrayBuilder columnsBuilder = new JsArrayBuilder(); + + //// 如果启用行序号,则放在第一列 + //if (EnableRowNumber) + //{ + // JsObjectBuilder rowNumberBuilder = new JsObjectBuilder(); + // if (RowNumberWidth != Unit.Empty) + // { + // rowNumberBuilder.AddProperty("width", RowNumberWidth.Value); + // } + // if (AllowPaging) + // { + // rowNumberBuilder.AddProperty("f_paging", Render_PagingID, true); + // } + // if (EnableRowNumberPaging) + // { + // rowNumberBuilder.AddProperty("f_paging_enabled", EnableRowNumberPaging); + // } + + // columnsBuilder.AddProperty(String.Format("Ext.create('Ext.grid.column.RowNumberer',{0})", rowNumberBuilder.ToString()), true); + + //} + + //// 如果启用CheckBox,则放在第二列 + //// 如果启用单元格编辑,则EnableCheckBoxSelect属性失效 + //if (EnableCheckBoxSelect && !AllowCellEditing) + //{ + // columnsBuilder.AddProperty(selectModelID, true); + //} + + + //string groupColumnScript = GetGroupColumnScript(); + + string expanderXID = String.Empty; + foreach (GridColumn column in Columns) + { + if (column is TemplateField && (column as TemplateField).RenderAsRowExpander) + { + expanderXID = column.XID; + } + else + { + columnsBuilder.AddProperty(column.XID, true); + } + } + + // 为Grid添加plugin属性 + //JsArrayBuilder pluginBuilder = new JsArrayBuilder(); + + if (!String.IsNullOrEmpty(expanderXID)) + { + pluginBuilder.AddProperty(expanderXID, true); + } + + //if (!String.IsNullOrEmpty(groupColumnScript)) + //{ + // pluginBuilder.AddProperty(Render_GridGroupColumnID, true); + //} + + + + //JsObjectBuilder defaultsBuilder = new JsObjectBuilder(); + //// 这是Extjs默认的客户端排序 + ////defaultsBuilder.AddProperty("sortable", false); + ////defaultsBuilder.AddProperty("menuDisabled", true); + //defaultsBuilder.AddProperty("width", 100); + + //string columnModelScript = String.Format("var {0}=new Ext.grid.ColumnModel({{columns:{1},defaults:{2}}});", gridColumnID, columnsBuilder, defaultsBuilder); + string columnsScript = String.Format("var {0}={1};", Render_GridColumnsID, columnsBuilder); + + return columnsScript; + } + + #endregion + + #region GetGroupColumnScript/ResolveGroupColumns + + //private string GetGroupColumnScript() + //{ + // if (Columns.Count > 0) + // { + // return String.Empty; + // } + + // List<List<GridGroupColumn>> resolvedGroups = new List<List<GridGroupColumn>>(); + // ResolveGroupColumns(GroupColumns, 0, resolvedGroups); + + // JsArrayBuilder groupHeaderBuilder = new JsArrayBuilder(); + + // foreach (List<GridGroupColumn> groups in resolvedGroups) + // { + // JsArrayBuilder groupsBuilder = new JsArrayBuilder(); + // foreach (GridGroupColumn group in groups) + // { + // JsObjectBuilder groupBuilder = new JsObjectBuilder(); + // groupBuilder.AddProperty("header", group.HeaderText); + // if (group.TextAlign != TextAlign.Left) + // { + // groupBuilder.AddProperty("align", TextAlignName.GetName(group.TextAlign)); + // } + + // int groupColumnCount = 0; + // ResolveColumnCount(group, ref groupColumnCount); + // groupBuilder.AddProperty("colspan", groupColumnCount); + + // groupsBuilder.AddProperty(groupBuilder); + // } + + // groupHeaderBuilder.AddProperty(groupsBuilder); + // } + + // return String.Format("var {0}=new Ext.ux.grid.ColumnHeaderGroup({{rows:{1}}});", Render_GridGroupColumnID, groupHeaderBuilder.ToString()); + + //} + + //// 递归获得每个分组头中包含的列数 + //private void ResolveColumnCount(GridGroupColumn group, ref int columnCount) + //{ + // if (group.Columns.Count > 0) + // { + // columnCount += group.Columns.Count; + // } + // else if (group.GroupColumns.Count > 0) + // { + // foreach (GridGroupColumn subGroup in group.GroupColumns) + // { + // ResolveColumnCount(subGroup, ref columnCount); + // } + // } + //} + + //// 将表头的树状分组转换为数组形式 + //private void ResolveGroupColumns(GridGroupColumnCollection groups, int level, List<List<GridGroupColumn>> resolvedGroups) + //{ + // foreach (GridGroupColumn group in groups) + // { + // if (resolvedGroups.Count <= level) + // { + // resolvedGroups.Add(new List<GridGroupColumn>()); + // } + // resolvedGroups[level].Add(group); + + // if (group.GroupColumns.Count > 0) + // { + // ResolveGroupColumns(group.GroupColumns, ++level, resolvedGroups); + // level--; + // } + // } + //} + + #endregion + + #region GetGridSelectModel + + private string GetGridSelectModel() + { + //JsObjectBuilder selectOB = new JsObjectBuilder(); + OptionBuilder selectOB = new OptionBuilder(); + + if (AllowCellEditing) + { + return String.Format("var {0}=Ext.create('Ext.selection.CellModel',{1});", Render_SelectModelID, selectOB); + } + else + { + //selectOB.AddProperty("singleSelect", !EnableMultiSelect); + + if (EnableMultiSelect) + { + selectOB.AddProperty("mode", "MULTI"); + } + else + { + selectOB.AddProperty("mode", "SINGLE"); + } + + + if (EnableCheckBoxSelect && CheckBoxSelectOnly) + { + selectOB.AddProperty("checkOnly", true); + } + + //selectOB.AddProperty("listeners", "{beforerowselect:function(){return false;}}", true); + + if (EnableRowSelectEvent) + { + string validateScript = "var args='RowSelect$'+index;"; + validateScript += GetPostBackEventReference("#RowSelect#").Replace("'#RowSelect#'", "args"); + + string rowSelectScript = JsHelper.GetFunction(validateScript, "model", "record", "index"); //String.Format("function(model,rowIndex){{{0}}}", validateScript); + + selectOB.Listeners.AddProperty("select", rowSelectScript, true); + + } + + if (EnableCheckBoxSelect) + { + return String.Format("var {0}=Ext.create('Ext.selection.CheckboxModel',{1});", Render_SelectModelID, selectOB); + } + else + { + return String.Format("var {0}=Ext.create('Ext.selection.RowModel',{1});", Render_SelectModelID, selectOB); + } + } + } + #endregion + + #region GetGridStore + + private string GetGridStore() + { + OptionBuilder storeBuilder = new OptionBuilder(); + + // store - fields + JsArrayBuilder fieldsBuidler = new JsArrayBuilder(); + foreach (GridColumn column in AllColumns) + { + JsObjectBuilder fieldBuilder = new JsObjectBuilder(); + fieldBuilder.AddProperty("name", column.ColumnID); + + if (AllowCellEditing) + { + RenderBaseField field = column as RenderBaseField; + if (field != null) + { + if (field is RenderField) + { + RenderField renderFiled = field as RenderField; + if (renderFiled.FieldType != FieldType.Auto) + { + fieldBuilder.AddProperty("type", FieldTypeName.GetName(renderFiled.FieldType)); + // 日期类型的,必须要设置这个 dateFormat 属性 + if (renderFiled.FieldType == FieldType.Date) + { + fieldBuilder.AddProperty("dateFormat", DateUtil.ConvertToClientDateFormat(renderFiled.RendererArgument)); + } + } + } + else if (field is RenderCheckField) + { + fieldBuilder.AddProperty("type", "boolean"); + } + } + } + fieldsBuidler.AddProperty(fieldBuilder); + } + string fieldsScript = String.Format("var {0}={1};", Render_GridFieldsID, fieldsBuidler); + + storeBuilder.AddProperty("fields", Render_GridFieldsID, true); + + storeBuilder.AddProperty("remoteSort", true); + + // 设置初始排序列 + if (AllowSorting) + { + string sortColumnID = GetSortColummID(); + if (!String.IsNullOrEmpty(sortColumnID)) + { + JsObjectBuilder sorterBuilder = new JsObjectBuilder(); + sorterBuilder.AddProperty("property", GetSortColummID()); + sorterBuilder.AddProperty("direction", SortDirection.ToString()); + storeBuilder.AddProperty("sorters", sorterBuilder); + } + } + + + string postbackScript = GetPostBackEventReference("#SORT#").Replace("'#SORT#'", "'Sort$'+sorter.property+'$'+sorter.direction"); + postbackScript = "var sorter=operation.sorters[0];if(sorter){" + postbackScript + "}return false;"; + + storeBuilder.Listeners.AddProperty("beforeload", JsHelper.GetFunction(postbackScript, "store", "operation"), true); + + return fieldsScript + String.Format("var {0}=Ext.create('Ext.data.ArrayStore',{1});", Render_GridStoreID, storeBuilder.ToString()); + + #region old code + + //storeBuilder.AddProperty("remoteSort", true); + //storeBuilder.AddProperty("proxy", String.Format("new Ext.ux.AspNetProxy('{0}')", ClientID), true); + + //storeBuilder.AddProperty("autoLoad", "{params:{start:0,limit:" + PageSize + "}}", true); + //storeBuilder.AddProperty("data", GetDatas()); + + //if (AllowSorting) + //{ + // // Default sort info + // if (SortColumnIndex >= 0 && SortColumnIndex < Columns.Count) + // { + // JsObjectBuilder sortInfoBuilder = new JsObjectBuilder(); + // sortInfoBuilder.AddProperty("field", Columns[SortColumnIndex].ColumnID); + // sortInfoBuilder.AddProperty("direction", SortDirection); + + // storeBuilder.AddProperty("sortInfo", sortInfoBuilder); + // } + //} + + + //return String.Format("var {0}=new Ext.data.ArrayStore({1});", Render_GridStoreID, storeBuilder.ToString()); + + + //#region store - data + ////string dataArrayString = GetDataArrayString(startEndRowIndex[0], startEndRowIndex[1]); + + + + //int[] startEndRowIndex = GetStartEndRowIndex(); + //// 计算完要渲染到前台的数据的条数,就要检查当前选中的项是不是有越界的 + //ResolveSelectedRowIndexArray(startEndRowIndex[1] - startEndRowIndex[0]); + + //#endregion + #endregion + + #region old code + + //JsArrayBuilder rowIndexBuilder = new JsArrayBuilder(); + + //if (SelectedRowIndexArray != null && SelectedRowIndexArray.Length > 0) + //{ + // foreach (int rowIndex in SelectedRowIndexArray) + // { + // rowIndexBuilder.AddProperty(rowIndex); + // } + //} + //string selectRowScript = String.Format("{0}.selectRows({1});", Render_SelectModelID, rowIndexBuilder); + //// 选中哪些行,这个必须要defer(100),否则选不中,晕(10ms就不行) + //selectRowScript = String.Format("(function(){{{0}}}).defer(100);", selectRowScript); + + //storeBuilder.AddProperty("listeners", String.Format("{{load:{0}}}", String.Format("function(){{{0}}}", selectRowScript)), true); + + #endregion + + #region old code + + // TODO + //string selectedRowIndexArrayString = StringUtil.GetStringFromIntArray(SelectedRowIndexArray); + //// FineUIAjax回发并且Columns发生变化,需要重新 + //if (_FineUIAjaxColumnsChanged) + //{ + // string reconfigScript = String.Empty; + // reconfigScript += gridStoreScript; + // reconfigScript += String.Format("{0}.reconfigure({1},{2});", XID, Render_GridStoreID, Render_GridColumnModelID); + // reconfigScript += String.Format("{0}.load();", Render_GridStoreID); + // // 重新加载数据后要更新input选中哪些项(因为可能选中项也会变化) + // reconfigScript += GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); + + // AddAjaxPropertyChangedScript(reconfigScript); + //} + //else + //{ + // bool reloadData = false; + // string updateSelectRowScript = selectRowScript + GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); + // if (AjaxPropertyChanged("DataArrayString", dataArrayString)) + // { + // string reloadDataScript = String.Format("{0}.loadData({1});", Render_GridStoreID, dataArrayString); + // // 虽然有可能“不需要修改隐藏字段的值,因为SelectedRowIndexArray其实并没有变化,只是重新加载数据(reloadData)导致选中项丢失了” + // // 但是我们还是修改了input的值,这没有什么影响 + // reloadDataScript += updateSelectRowScript; + + // AddAjaxPropertyChangedScript(reloadDataScript); + + // reloadData = true; + // } + + // // 不管SelectedRowIndexArray==null或者是不为空,都要做这一步 + // // 在Ajax回发中,selectedRowIndexArrayString改变了,并且没有重新加载数据 + // if (AjaxPropertyChanged("SelectedRowIndexArrayString", selectedRowIndexArrayString) && !reloadData) + // { + // AddAjaxPropertyChangedScript(updateSelectRowScript); + // } + + //} + #endregion + + #region old code + + //gridStoreScript += "\r\n"; + //if (EnableClientPaging) + //{ + + // // 进行分页时,改变隐藏input的值,以在回发时保持状态 + // // 同时注意:客户端分页时,清空选中的值 + // JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + // listenersBuilder.AddProperty(OptionName.Load, String.Format("function(store,records,options){{Ext.get('{0}').dom.value=options.params.start;Ext.get('{1}').dom.value='';}}", EnableClientPagingStartRowIndexID, SelectedRowsHiddenFieldID), true); + // storeBuilder.AddProperty("listeners", listenersBuilder); + //} + + // 每次都是加载全部 + //loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + (endRowIndex - startRowIndex + 1) + "}}"); + + + //// load store + ////string loadStoreScript = String.Empty; + //if (EnableClientPaging) + //{ + // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:" + EnableClientPagingStartRowIndex + ",limit:" + PageSize + "}}"); + //} + //else + //{ + // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + Rows.Count + "}}"); + //} + + //gridStoreScript += loadStoreScript; + #endregion + } + + #region old code + + //private string GetDataArrayString(int startRowIndex, int endRowIndex) + //{ + // // store - data + // JsArrayBuilder dataBuidler = new JsArrayBuilder(); + + // for (int i = startRowIndex; i <= endRowIndex; i++) + // { + // // 当前行 + // GridRow row = Rows[i]; + + // JsArrayBuilder cellBuilder = new JsArrayBuilder(); + // foreach (object obj in row.Values) + // { + // cellBuilder.AddProperty(obj.ToString()); + // } + // dataBuidler.AddProperty(cellBuilder); + // } + + // // 二维数组 + // return dataBuidler.ToString(); + //} + + #endregion + + /// <summary> + /// 当前分页的开始行和结束行 + /// </summary> + /// <returns></returns> + internal void ResolveStartEndRowIndex(out int startRowIndex, out int endRowIndex) + { + startRowIndex = 0; + endRowIndex = Rows.Count - 1; + + if (AllowPaging) + { + if (IsDatabasePaging) + { + // 数据库分页 + startRowIndex = 0; + endRowIndex = Rows.Count - 1; + } + else + { + // 简单的服务器端分页 + startRowIndex = PageSize * PageIndex; + endRowIndex = (PageIndex + 1) * PageSize - 1; + endRowIndex = endRowIndex < RecordCount - 1 ? endRowIndex : RecordCount - 1; + } + } + } + + #endregion + + #endregion + + #region RenderBeginTag/RenderEndTag + + /// <summary> + /// 渲染开始标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + base.RenderBeginTag(writer); + + writer.Write(String.Format("<div id=\"{0}_tpls\" class=\"f-grid-tpls f-hidden x-grid-tpls\">", ClientID)); + } + + /// <summary> + /// 渲染结束标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + writer.Write("</div>"); + + base.RenderEndTag(writer); + } + + #endregion + + #region UpdateTemplateFields + + /// <summary> + /// 当在客户端修改了模板列中的值,调用此函数来告诉表格控件需要更新这些值; + /// 如果对表格重新进行了数据绑定,则不需要调用此函数,因为重新绑定后会更新表格的全部内容 + /// </summary> + public void UpdateTemplateFields() + { + PageManager.Instance.AddAjaxGridClientID(ClientID); + } + + #endregion + + #region DataBind + + internal Dictionary<string, GridColumn> cellEditingDataKeyNameField = new Dictionary<string, GridColumn>(); + + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + //base.DataBind(); + + // 如果重新绑定数据,则每行的模版列内容有可能发生变化,就需要更新 + // 因为目前,没有判断模板列是否改变的机制,所以只要可能导致模板列的动作都要更新模板列 + PageManager.Instance.AddAjaxGridClientID(ClientID); + + // 如果重新绑定数据,则取消之前的编辑状态提示 + if (IsFineUIAjaxPostBack && AllowCellEditing) + { + _databindInFineUIAjaxPostBack = true; + } + + + // 如果允许单元格编辑,记录 DataKeyNames 对应的列序号,可能需要用列定义的FieldType + if (AllowCellEditing) + { + cellEditingDataKeyNameField.Clear(); + + if (DataKeyNames != null) + { + List<string> dataKeyNames = new List<string>(DataKeyNames); + foreach (GridColumn field in AllColumns) + { + if (field is RenderBaseField) + { + string dataField = (field as RenderBaseField).DataField; + if (dataKeyNames.Contains(dataField)) + { + if (!cellEditingDataKeyNameField.ContainsKey(dataField)) + { + cellEditingDataKeyNameField.Add(dataField, field); + } + } + } + } + } + } + + // 数据绑定之前要先清空 _dataKeys + _dataKeys = null; + + // 重新绑定数据前清空选中的值 + SelectedRowIndexArray = null; + SelectedCell = null; + + // 数据绑定之前要先清空现有的数据 + ClearRows(); + + int recordCount = 0; + + if (_dataSource != null) + { + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + recordCount = DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + recordCount = DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + recordCount = DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + } + + AfterDataBind(recordCount); + } + + + private int DataBindToDataTable(DataTable dataTable) + { + BeforeDataBind(); + + int rowIndex = 0, count = dataTable.DefaultView.Count; + for (; rowIndex < count; rowIndex++) + { + DataBindRow(rowIndex, dataTable.DefaultView[rowIndex]); + } + + return rowIndex; + } + + private int DataBindToEnumerable(IEnumerable list) + { + BeforeDataBind(); + + int rowIndex = 0; + + foreach (object rowObj in list) + { + DataBindRow(rowIndex, rowObj); + + rowIndex++; + } + + return rowIndex; + } + + private void DataBindRow(int rowIndex, object rowObj) + { + GridPreRowEventArgs preArgs = new GridPreRowEventArgs(rowObj, rowIndex); + OnPreRowDataBound(preArgs); + + // 事件处理函数要求取消添加本节点 + if (!preArgs.Cancelled) + { + + GridRow row = new GridRow(this, rowObj, rowIndex); + Rows.Add(row); + //Controls.Add(row); + row.InitTemplateContainers(); + + //row.DataBindRow(); + row.DataBindRow(); + + OnRowDataBound(new GridRowEventArgs(rowObj, rowIndex, row.Values)); + } + } + + private void BeforeDataBind() + { + OnPreDataBound(EventArgs.Empty); + } + + #region AfterDataBind + + private void AfterDataBind(int recordCount) + { + if (!IsDatabasePaging) + { + // 如果不是数据库分页,则每次DataBind都要更新RecordCount的值 + // 数据库分页的话,RecordCount需要用户显式的赋值 + RecordCount = recordCount; + } + + + // 在所有行都绑定结束后,需要检查模拟树显示的列,并重新计算当前列的内容(在列内容前加上树分隔符) + // 1.查找需要模拟树显示的列 + BaseField simulateTreeColumn = null; + foreach (GridColumn gridColumn in AllColumns) + { + BaseField column = gridColumn as BaseField; + if (column != null && !String.IsNullOrEmpty(column.DataSimulateTreeLevelField)) + { + simulateTreeColumn = column; + break; + } + } + + // 2.如果找到这样的列 + if (simulateTreeColumn != null) + { + List<SimulateTreeNode> silumateTree = new List<SimulateTreeNode>(); + + // 存在需要模拟树显示的列 + for (int rowIndex = 0, rowCount = Rows.Count; rowIndex < rowCount; rowIndex++) + { + GridRow row = Rows[rowIndex]; + int level = 0; + object treeLevelObj = row.GetPropertyValue(simulateTreeColumn.DataSimulateTreeLevelField); + if (treeLevelObj != null && treeLevelObj != DBNull.Value) + { + level = Convert.ToInt32(treeLevelObj); + } + + object content = row.Values[simulateTreeColumn.ColumnIndex]; + + SimulateTreeNode node = new SimulateTreeNode(); + node.Text = content.ToString(); + node.Level = level; + node.HasLittleBrother = false; + node.ParentNode = null; + silumateTree.Add(node); + } + + // 计算树 + SimulateTreeHeper treeHelper = new SimulateTreeHeper(); + treeHelper.ResolveSimulateTree(silumateTree, true); + + // 赋值 + for (int rowIndex = 0, rowCount = Rows.Count; rowIndex < rowCount; rowIndex++) + { + Rows[rowIndex].Values[simulateTreeColumn.ColumnIndex] = silumateTree[rowIndex].Text; + } + } + + } + #endregion + + + #region ClearRows + + /// <summary> + /// 清空Rows,同时清除所有子控件中的GridRow控件 + /// </summary> + private void ClearRows() + { + // 清空现有的行 + Rows.Clear(); + + // Grid.Controls 下面包含全部列控件(列控件里面又包含Editor)和全部模板列控件 + // 注意:Editor控件是属于列控件的,而模板列中的控件是输入每一行的模板列控件的! + + // 会重新创建这些控件,所以要先删除之前存在的GridRowControl + for (int i = Controls.Count - 1; i >= 0; i--) + { + if (Controls[i] is GridTemplateContainer) + { + Controls.RemoveAt(i); + } + } + } + + #endregion + + #endregion + + #region GetModifiedCells + + private JArray _modifiedData = new JArray(); + + /// <summary> + /// 获取用户修改的数据 + /// </summary> + /// <returns></returns> + public JArray GetModifiedData() + { + return _modifiedData; + } + + + //private List<ModifiedCell> _modifiedCells = new List<ModifiedCell>(); + + ///// <summary> + ///// 获取用户修改的单元格,包含新增的数据 + ///// </summary> + ///// <returns></returns> + //internal List<ModifiedCell> GetModifiedCells() + //{ + // return _modifiedCells; + //} + + + private List<int> _deletedList; + + /// <summary> + /// 获取删除的行索引列表 + /// </summary> + /// <returns></returns> + public List<int> GetDeletedList() + { + return _deletedList; + } + + + private List<Dictionary<string, object>> _newAddedList; + + /// <summary> + /// 获取新增的行数据 + /// </summary> + /// <returns></returns> + public List<Dictionary<string, object>> GetNewAddedList() + { + return _newAddedList; + } + + + private Dictionary<int, Dictionary<string, object>> _modifiedDict; + + /// <summary> + /// 获取用户修改的行数据 + /// </summary> + /// <returns></returns> + public Dictionary<int, Dictionary<string, object>> GetModifiedDict() + { + return _modifiedDict; + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + + string paramHiddenColumns = postCollection[HiddenColumnsHiddenFieldID]; + List<string> hiddenColumnsList = new List<string>(); + if (!String.IsNullOrEmpty(paramHiddenColumns)) + { + hiddenColumnsList = StringUtil.GetStringListFromString(paramHiddenColumns, true); + } + string[] hiddenColumns = hiddenColumnsList.ToArray(); + if (!StringUtil.CompareStringArray(HiddenColumns, hiddenColumns)) + { + HiddenColumns = hiddenColumns; + FState.BackupPostDataProperty("HiddenColumns"); + } + + + // 列状态(目前只有CheckBoxField用到) + String statesStr = postCollection[StatesHiddenFieldID]; + if (!String.IsNullOrEmpty(statesStr)) + { + JArray states = JArray.Parse(statesStr); + if (states.Count > 0) + { + int startRowIndex, endRowIndex; + ResolveStartEndRowIndex(out startRowIndex, out endRowIndex); + for (int i = startRowIndex; i <= endRowIndex; i++) + { + int index = i - startRowIndex; + + Rows[i].FromShortStates(states[index].ToObject<List<object>>().ToArray()); + } + FState.BackupPostDataProperty("F_Rows"); + } + } + + + // 启用单元格编辑 + if (AllowCellEditing) + { + // 删除的行索引列表 + string paramDeletedRows = postCollection[DeletedRowsHiddenFieldID]; + _deletedList = new List<int>(); + if (!String.IsNullOrEmpty(paramDeletedRows)) + { + _deletedList = StringUtil.GetIntListFromString(paramDeletedRows, true); + } + + //// 新增的行索引列表 + //string paramNewAddedRows = postCollection[NewAddedRowsHiddenFieldID]; + //List<int> newAddedRows = new List<int>(); + //if (!String.IsNullOrEmpty(paramNewAddedRows)) + //{ + // newAddedRows = StringUtil.GetIntListFromString(paramNewAddedRows, true); + //} + + List<string> dataKeyNames = null; + if (DataKeyNames != null) + { + dataKeyNames = new List<string>(DataKeyNames); + } + + // 根据用户的输入修改每个单元格的Values + _modifiedDict = new Dictionary<int, Dictionary<string, object>>(); + _newAddedList = new List<Dictionary<string, object>>(); + _modifiedData = new JArray(); + String editorDataStr = postCollection[ModifiedDataHiddenFieldID]; + if (!String.IsNullOrEmpty(editorDataStr)) + { + _modifiedData = JArray.Parse(editorDataStr); + + foreach (JArray modifiedItem in _modifiedData) + { + // 修改的数据在新集合中的行索引 + int rowIndex = modifiedItem[0].ToObject<int>(); + // 修改的数据在原始集合中的行索引,如果是新增行则为-1 + int originalRowIndex = modifiedItem[1].ToObject<int>(); + + + // 获取本行(Record)中所有修改的记录(Field),并保存到字典中(rowModifiedDic) + Dictionary<string, object> rowModifiedDic = new Dictionary<string, object>(); + JObject rowModifiedData = modifiedItem[2].ToObject<JObject>(); + foreach (JProperty propertyObj in rowModifiedData.Properties()) + { + string columnID = propertyObj.Name; + object cellValue = rowModifiedData.Value<JValue>(columnID).Value; + GridColumn column = FindColumn(columnID); + int columnIndex = column.ColumnIndex; + + //string newCellValue = cellValue.ToString(); + + rowModifiedDic.Add(columnID, cellValue); + + // 如果本行不是新增的,还需要更新行的Values属性 + if (originalRowIndex >= 0) + { + // 更新行的Values + Rows[originalRowIndex].Values[columnIndex] = cellValue; + + // 更新行的DataKeys + if (dataKeyNames != null) + { + RenderBaseField renderField = column as RenderBaseField; + if (renderField != null) + { + int dataKeyIndex = dataKeyNames.IndexOf(renderField.DataField); + if (dataKeyIndex >= 0) + { + Rows[originalRowIndex].DataKeys[dataKeyIndex] = cellValue; + } + } + } + } + } + + if (originalRowIndex >= 0) + { + // 已经存在的行 + _modifiedDict.Add(originalRowIndex, rowModifiedDic); + } + else + { + // 新增行 + _newAddedList.Add(rowModifiedDic); + } + + } + + FState.BackupPostDataProperty("F_Rows"); + } + + + // 选中的单元格(数组中元素的顺序是固定的,不能排序) + int[] selectedCell = StringUtil.GetIntListFromString(postCollection[SelectedCellHiddenFieldID], false).ToArray(); + if (!StringUtil.CompareIntArray(SelectedCell, selectedCell)) + { + SelectedCell = selectedCell; + FState.BackupPostDataProperty("SelectedCell"); + } + + } + else + { + + // 选中的行 + int[] selectedRowIndexArray = StringUtil.GetIntListFromString(postCollection[SelectedRowIndexArrayHiddenFieldID], true).ToArray(); + if (!StringUtil.CompareIntArray(SelectedRowIndexArray, selectedRowIndexArray)) + { + SelectedRowIndexArray = selectedRowIndexArray; + FState.BackupPostDataProperty("SelectedRowIndexArray"); + } + + } + + + + return false; + } + + + + //public override void RaisePostDataChangedEvent() + //{ + // //OnCollapsedChanged(EventArgs.Empty); + //} + + #endregion + + #region CommitChanges/RejectChanges/ClearSelections/AddNewRecord + + /// <summary> + /// 接受用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + public void CommitChanges() + { + PageContext.RegisterStartupScript(GetCommitChangesReference()); + } + + /// <summary> + /// 获取接受用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + /// <returns>客户端脚本</returns> + public string GetCommitChangesReference() + { + return String.Format("{0}.f_commitChanges();", ScriptID); + } + + + /// <summary> + /// 拒绝用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + public void RejectChanges() + { + PageContext.RegisterStartupScript(GetRejectChangesReference()); + } + + /// <summary> + /// 获取拒绝用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + public string GetRejectChangesReference() + { + return String.Format("{0}.getStore().rejectChanges();", ScriptID); + } + + + /// <summary> + /// 清空表格选中项 + /// </summary> + public void ClearSelections() + { + PageContext.RegisterStartupScript(GetClearSelectionsReference()); + } + + /// <summary> + /// 获取清空表格选中项的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetClearSelectionsReference() + { + return String.Format("{0}.getSelectionModel().clearSelections();", ScriptID); + } + + /// <summary> + /// 添加一条新纪录 + /// </summary> + /// <param name="defaultObject">缺省值</param> + public void AddNewRecord(JObject defaultObject) + { + PageContext.RegisterStartupScript(GetAddNewRecordReference(defaultObject)); + } + + /// <summary> + /// 添加一条新纪录 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <param name="appendToEnd">是否添加到末尾</param> + public void AddNewRecord(JObject defaultObject, bool appendToEnd) + { + PageContext.RegisterStartupScript(GetAddNewRecordReference(defaultObject, appendToEnd)); + } + + + /// <summary> + /// 获取添加一条新纪录的客户端脚本 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <returns>客户端脚本</returns> + public string GetAddNewRecordReference(JObject defaultObject) + { + return GetAddNewRecordReference(defaultObject, false); + } + + + /// <summary> + /// 获取添加一条新纪录的客户端脚本 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <param name="appendToEnd">是否添加到末尾</param> + /// <returns>客户端脚本</returns> + public string GetAddNewRecordReference(JObject defaultObject, bool appendToEnd) + { + return String.Format("{0}.f_addNewRecord({1},{2});", ScriptID, defaultObject.ToString(Formatting.None), appendToEnd.ToString().ToLower()); + } + + + /// <summary> + /// 删除选中行(或者单元格) + /// </summary> + public void DeleteSelected() + { + PageContext.RegisterStartupScript(GetDeleteSelectedReference()); + } + + /// <summary> + /// 获取删除选中行(或者单元格)的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetDeleteSelectedReference() + { + return String.Format("{0}.f_deleteSelected();", ScriptID); + } + + #endregion + + #region GetHasSelectionReference GetSelectCountReference + + + + /// <summary> + /// 获取表格是否有选中项的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHasSelectionReference() + { + return String.Format("{0}.getSelectionModel().hasSelection()", ScriptID); + } + + ///// <summary> + ///// 获取表格选中项数的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //[Obsolete("此方法已废除,请使用GetSelectedCountReference方法")] + //public string GetSelectCountReference() + //{ + // return GetSelectedCountReference(); + //} + + /// <summary> + /// 获取表格选中项数的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetSelectedCountReference() + { + return String.Format("{0}.f_getSelectedCount()", ScriptID); + } + + /// <summary> + /// 获取表格选中单元格的客户端脚本(仅用于AllowCellEditing模式) + /// </summary> + /// <returns>客户端脚本</returns> + public string GetSelectedCellReference() + { + return String.Format("{0}.f_getSelectedCell()", ScriptID); + } + + + + #endregion + + #region GetNoSelectionAlertReference GetNoSelectionAlertInParentReference + + /// <summary> + /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertReference(string message) + { + return GetNoSelectionAlertReference(message, String.Empty, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertReference(string message, string title) + { + return GetNoSelectionAlertReference(message, title, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertReference(string message, string title, MessageBoxIcon icon) + { + return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowReference(message, title, icon)); + } + + + /// <summary> + /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInParentReference(string message) + { + return GetNoSelectionAlertInParentReference(message, String.Empty, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInParentReference(string message, string title) + { + return GetNoSelectionAlertInParentReference(message, title, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInParentReference(string message, string title, MessageBoxIcon icon) + { + return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowInParentReference(message, title, icon)); + } + + /// <summary> + /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInTopReference(string message) + { + return GetNoSelectionAlertInTopReference(message, String.Empty, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInTopReference(string message, string title) + { + return GetNoSelectionAlertInTopReference(message, title, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInTopReference(string message, string title, MessageBoxIcon icon) + { + return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowInTopReference(message, title, icon)); + } + #endregion + + #region FindColumn/SelectAllRows + + /// <summary> + /// 通过列ID获取列实例 + /// </summary> + /// <param name="columnID">列ID</param> + /// <returns>列实例</returns> + public GridColumn FindColumn(string columnID) + { + foreach (GridColumn column in AllColumns) + { + if (column.ColumnID == columnID) + { + return column; + } + } + + return null; + } + + /// <summary> + /// 通过列索引获取列实例 + /// </summary> + /// <param name="columnIndex">列索引</param> + /// <returns>列实例</returns> + public GridColumn FindColumn(int columnIndex) + { + return AllColumns[columnIndex]; + } + + + /// <summary> + /// 选中所有行(设置SelectedRowIndexArray属性) + /// </summary> + public void SelectAllRows() + { + /* + List<int> rowIndexs = new List<int>(); + for (int i = 0; i < Rows.Count; i++) + { + rowIndexs.Add(i); + } + SelectedRowIndexArray = rowIndexs.ToArray(); + */ + + PageContext.RegisterStartupScript(String.Format("{0}.f_selectAllRows();", ScriptID)); + } + + /// <summary> + /// 展开全部的行扩展列 + /// </summary> + public void ExpandRowExpanders() + { + _registerScriptRowExpanders = true; + + ExpandAllRowExpanders = true; + //PageContext.RegisterStartupScript(String.Format("{0}.f_expandAllRows();", ScriptID)); + } + + /// <summary> + /// 折叠全部的行扩展列 + /// </summary> + public void CollapseRowExpanders() + { + _registerScriptRowExpanders = true; + + ExpandAllRowExpanders = false; + //PageContext.RegisterStartupScript(String.Format("{0}.f_collapseAllRows();", ScriptID)); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Sort$")) + { + #region Sort + + string[] sortArgs = eventArgument.Split('$'); + //if (sortArgs.Length == 2) + //{ + // // 格式为 "Sort$2",其中columnIndex = 2,这个是把前面的RowNumber,CheckBox列也算上去的,应该减掉 + // // 所在的列 + // int columnIndex = Convert.ToInt32(sortArgs[1]); + // columnIndex -= GetPrefixColumnNumber(); + + + // // 当前列的排序字段和排序方向 + // string sortDirection = "ASC"; + // string sortField = AllColumns[columnIndex].SortField; + + // // Sort column index not changed in current postback. + // if (columnIndex == SortColumnIndex) + // { + // sortDirection = SortDirection == "ASC" ? "DESC" : "ASC"; + // } + + // // 为了和之前的兼容,还是先把表格的这两个属性设置好 + // SortDirection = sortDirection; + // SortColumnIndex = columnIndex; + + // OnSort(new GridSortEventArgs(sortField, sortDirection, columnIndex)); + //} + if (sortArgs.Length == 3) + { + // 格式为 "Sort$Grid1_ctl03$ASC" + string sortDir = sortArgs[2]; + string columnId = sortArgs[1]; + + int columnIndex = 0; + foreach (GridColumn column in AllColumns) + { + if (column.ColumnID == columnId) + { + break; + } + columnIndex++; + } + + // 当前列的排序字段和排序方向 + string sortField = AllColumns[columnIndex].SortField; + string sortDirection = sortDir.ToUpper() == "ASC" ? "ASC" : "DESC"; + + SortDirection = sortDirection; + SortField = sortField; + + OnSort(new GridSortEventArgs(sortField, sortDirection, columnIndex)); + } + + #endregion + } + else if (eventArgument.StartsWith("Command$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 5) + { + OnRowCommand(new GridCommandEventArgs(Convert.ToInt32(commandArgs[1]), Convert.ToInt32(commandArgs[2]), commandArgs[3], commandArgs[4])); + } + } + else if (eventArgument.StartsWith("Page$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnPageIndexChange(new GridPageEventArgs(Convert.ToInt32(commandArgs[1]))); + + if (ClearSelectedRowsAfterPaging) + { + // 分页后清空选中的值 + // 因为服务器端分页时不会重新绑定数据(数据库分页才会重新绑定数据,所以数据库分页时自然会清空选中的行) + // 所以需要一个设置,在分页结束后自动清空选中的行 + SelectedRowIndexArray = null; + } + SelectedCell = null; + } + } + else if (eventArgument.StartsWith("RowClick$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnRowClick(new GridRowClickEventArgs(Convert.ToInt32(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("RowDoubleClick$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnRowDoubleClick(new GridRowClickEventArgs(Convert.ToInt32(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("RowSelect$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnRowSelect(new GridRowSelectEventArgs(Convert.ToInt32(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("AfterEdit$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 3) + { + OnAfterEdit(new GridAfterEditEventArgs(Convert.ToInt32(commandArgs[1]), commandArgs[2].ToString())); + } + } + } + + /// <summary> + /// 获取Columns前面的列(比如索引列,选择框列) + /// </summary> + /// <returns></returns> + private int GetPrefixColumnNumber() + { + int prefix = 0; + //if (EnableRowNumber) + //{ + // prefix++; + //} + + //if (EnableCheckBoxSelect && !AllowCellEditing) + //{ + // prefix++; + //} + return prefix; + } + + #endregion + + #region OnSort + + private static readonly object _sortHandlerKey = new object(); + + /// <summary> + /// 排序事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("排序事件")] + public event EventHandler<GridSortEventArgs> Sort + { + add + { + Events.AddHandler(_sortHandlerKey, value); + } + remove + { + Events.RemoveHandler(_sortHandlerKey, value); + } + } + + /// <summary> + /// 触发排序事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSort(GridSortEventArgs e) + { + EventHandler<GridSortEventArgs> handler = Events[_sortHandlerKey] as EventHandler<GridSortEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPreDataBound + + private static readonly object _preDataBoundHandlerKey = new object(); + + /// <summary> + /// 绑定前事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("绑定前事件")] + public event EventHandler<EventArgs> PreDataBound + { + add + { + Events.AddHandler(_preDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_preDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发绑定前事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPreDataBound(EventArgs e) + { + EventHandler<EventArgs> handler = Events[_preDataBoundHandlerKey] as EventHandler<EventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPreRowDataBound + + private static readonly object _preRowDataBoundHandlerKey = new object(); + + /// <summary> + /// 行绑定前事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行绑定前事件")] + public event EventHandler<GridPreRowEventArgs> PreRowDataBound + { + add + { + Events.AddHandler(_preRowDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_preRowDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发行绑定前事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPreRowDataBound(GridPreRowEventArgs e) + { + EventHandler<GridPreRowEventArgs> handler = Events[_preRowDataBoundHandlerKey] as EventHandler<GridPreRowEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowDataBound + + private static readonly object _rowDataBoundHandlerKey = new object(); + + /// <summary> + /// 行绑定后事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行绑定后事件")] + public event EventHandler<GridRowEventArgs> RowDataBound + { + add + { + Events.AddHandler(_rowDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发行绑定后事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowDataBound(GridRowEventArgs e) + { + EventHandler<GridRowEventArgs> handler = Events[_rowDataBoundHandlerKey] as EventHandler<GridRowEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowCommand + + private static readonly object _rowCommandHandlerKey = new object(); + + /// <summary> + /// 行内事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行内事件")] + public event EventHandler<GridCommandEventArgs> RowCommand + { + add + { + Events.AddHandler(_rowCommandHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowCommandHandlerKey, value); + } + } + + /// <summary> + /// 触发行内事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowCommand(GridCommandEventArgs e) + { + EventHandler<GridCommandEventArgs> handler = Events[_rowCommandHandlerKey] as EventHandler<GridCommandEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPageIndexChange + + private static readonly object _pageIndexChangeHandlerKey = new object(); + + /// <summary> + /// 页索引改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("页索引改变事件")] + public event EventHandler<GridPageEventArgs> PageIndexChange + { + add + { + Events.AddHandler(_pageIndexChangeHandlerKey, value); + } + remove + { + Events.RemoveHandler(_pageIndexChangeHandlerKey, value); + } + } + + /// <summary> + /// 触发页索引改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPageIndexChange(GridPageEventArgs e) + { + EventHandler<GridPageEventArgs> handler = Events[_pageIndexChangeHandlerKey] as EventHandler<GridPageEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowClick + + private static readonly object _rowClickHandlerKey = new object(); + + /// <summary> + /// 行点击事件(需要启用EnableRowClick) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行点击事件(需要启用EnableRowClick)")] + public event EventHandler<GridRowClickEventArgs> RowClick + { + add + { + Events.AddHandler(_rowClickHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowClickHandlerKey, value); + } + } + + /// <summary> + /// 触发行点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowClick(GridRowClickEventArgs e) + { + EventHandler<GridRowClickEventArgs> handler = Events[_rowClickHandlerKey] as EventHandler<GridRowClickEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowDoubleClick + + private static readonly object _rowDoubleClickHandlerKey = new object(); + + /// <summary> + /// 行双击事件(需要启用EnableRowDoubleClick) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行双击事件(需要启用EnableRowDoubleClick)")] + public event EventHandler<GridRowClickEventArgs> RowDoubleClick + { + add + { + Events.AddHandler(_rowDoubleClickHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowDoubleClickHandlerKey, value); + } + } + + /// <summary> + /// 触发行双击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowDoubleClick(GridRowClickEventArgs e) + { + EventHandler<GridRowClickEventArgs> handler = Events[_rowDoubleClickHandlerKey] as EventHandler<GridRowClickEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowSelect + + private static readonly object _rowSelectHandlerKey = new object(); + + /// <summary> + /// 行选中事件(需要启用EnableRowSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行选中事件(需要启用EnableRowSelect)")] + public event EventHandler<GridRowSelectEventArgs> RowSelect + { + add + { + Events.AddHandler(_rowSelectHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowSelectHandlerKey, value); + } + } + + /// <summary> + /// 触发行选中事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowSelect(GridRowSelectEventArgs e) + { + EventHandler<GridRowSelectEventArgs> handler = Events[_rowSelectHandlerKey] as EventHandler<GridRowSelectEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnAfterEdit + + private static readonly object _afterEditHandlerKey = new object(); + + /// <summary> + /// 结束编辑事件(需要启用EnableAfterEditEvent) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("结束编辑事件(需要启用EnableAfterEditEvent)")] + public event EventHandler<GridAfterEditEventArgs> AfterEdit + { + add + { + Events.AddHandler(_afterEditHandlerKey, value); + } + remove + { + Events.RemoveHandler(_afterEditHandlerKey, value); + } + } + + /// <summary> + /// 触发结束编辑事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnAfterEdit(GridAfterEditEventArgs e) + { + EventHandler<GridAfterEditEventArgs> handler = Events[_afterEditHandlerKey] as EventHandler<GridAfterEditEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region LoadControlState/SaveControlState + + // LoadControlState 处于 Page_Init 之后,控件的 LoadPostData 之前 + // 1. Page_Init 之后,才能保证动态添加的 Columns 存在 + // 2. LoadPostData 之前,才能保证模板列中的输入控件得到用户输入的值 + /// <summary> + /// 装载控件状态 + /// </summary> + /// <param name="savedState"></param> + protected override void LoadControlState(object savedState) + { + base.LoadControlState(((Pair)savedState).First); + + // 页面回发时,重新初始化每行中的模板列控件 + if (Page.IsPostBack) + { + foreach (GridRow row in Rows) + { + row.InitTemplateContainers(); + } + } + } + + // 必须添加值之后,才会在回发时走到 LoadViewState + // 使用ControlState而不是ViewState还有一个好处是,ControlState不可被用户关闭 + /// <summary> + /// 保存控件状态 + /// </summary> + /// <returns></returns> + protected override object SaveControlState() + { + return new Pair(base.SaveControlState(), ""); + + } + + /// <summary> + /// 初始化 + /// </summary> + /// <param name="e"></param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + Page.RegisterRequiresControlState(this); + } + + + + #endregion + + #region old code + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("GridColumnScript", GetGridColumnScript()); + // if (AllowSorting) + // { + // SaveAjaxProperty("SortIconScript", GetSortIconScript()); + // } + + // if (AllowPaging) + // { + // JsObjectBuilder pagingBuilder; + // SaveAjaxProperty("TempPagingString", GetTempPagingString(out pagingBuilder)); + // } + + // int startRowIndex; + // int endRowIndex; + // SaveAjaxProperty("DataArrayString", GetDataArrayString(out startRowIndex, out endRowIndex)); + + // SelectedRowIndexArray = ResolveSelectedRowIndexArray(SelectedRowIndexArray, endRowIndex - startRowIndex); + // SaveAjaxProperty("SelectedRowIndexArrayString", StringUtil.GetStringFromIntArray(SelectedRowIndexArray)); + + //} + + #endregion + + #region old code + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { base.SaveViewState(), + // ((IStateManager)Columns).SaveViewState(), + // ((IStateManager)Rows).SaveViewState(), + // //((IStateManager)Toolbar).SaveViewState() + // }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Columns).LoadViewState(states[1]); + + // ((IStateManager)Rows).LoadViewState(states[2]); + + // //((IStateManager)Toolbar).LoadViewState(states[3]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Columns).TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + + // //((IStateManager)Toolbar).TrackViewState(); + //} + + #endregion + + #region old code + + //public override void RenderBeginTag(HtmlTextWriter writer) + //{ + // base.RenderBeginTag(writer); + + // //// 当前选中的哪些行的数据 + // //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // // SelectedRowsHiddenFieldID, GetSelectedRowIndexArrayHTML())); + + // ////// 如果启用客户端排序,需要在回发时记录当前所在的第几页 + // ////if (EnableClientPaging) + // ////{ + // //// writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // //// EnableClientPagingStartRowIndexID, EnableClientPagingStartRowIndex)); + // ////} + + // //// 有这些列需要保存状态 + // //if (NeedPersistStateColumnIndexArray != null && NeedPersistStateColumnIndexArray.Length > 0) + // //{ + // // foreach (int columnIndex in NeedPersistStateColumnIndexArray) + // // { + // // writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // // GetNeedPersistStateColumnIndexID(columnIndex), Columns[columnIndex].SaveColumnState())); + // // } + // //} + //} + + + + //public override void RenderEndTag(HtmlTextWriter writer) + //{ + // base.RenderEndTag(writer); + //} + + #endregion + + + } +} diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs index ae39aed..4085043 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs @@ -1,210 +1,210 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: BaseField.cs - * CreatedOn: 2013-05-05 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Data; -using System.Reflection; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// <summary> - /// лࣩࣨ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public abstract class BaseField : GridColumn - { - #region Properties - - private string _dataSimulateTreeLevelField = String.Empty; - - /// <summary> - /// ģʾʱIJֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ģʾʱIJֶ")] - public string DataSimulateTreeLevelField - { - get - { - return _dataSimulateTreeLevelField; - } - set - { - _dataSimulateTreeLevelField = value; - } - } - - - #endregion - - #region DataTooltipField/DataTooltipFormatString - - private string _tooltip = String.Empty; - - /// <summary> - /// ʾı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ʾı")] - public string ToolTip - { - get - { - return _tooltip; - } - set - { - _tooltip = value; - } - } - - - - private string _dataToolTipField = String.Empty; - - /// <summary> - /// ʾֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ʾֶ")] - public string DataToolTipField - { - get - { - return _dataToolTipField; - } - set - { - _dataToolTipField = value; - } - } - - private string _dataToolTipFormatString = String.Empty; - - /// <summary> - /// ʾֶθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ʾֶθʽַ")] - public string DataToolTipFormatString - { - get - { - return _dataToolTipFormatString; - } - set - { - _dataToolTipFormatString = value; - } - } - - #endregion - - #region GetTooltipString - - /// <summary> - /// ȡʾַ - /// </summary> - /// <param name="row"></param> - /// <returns></returns> - protected string GetTooltipString(GridRow row) - { - string result = null; - - if (!String.IsNullOrEmpty(DataToolTipField)) - { - object value = row.GetPropertyValue(DataToolTipField); - - if (value == null) - { - result = null; - } - else - { - if (!String.IsNullOrEmpty(DataToolTipFormatString)) - { - result = String.Format(DataToolTipFormatString, value); - } - else - { - result = value.ToString(); - } - } - } - else if(!String.IsNullOrEmpty(ToolTip)) - { - result = ToolTip; - } - - return result == null ? "" : String.Format(" data-qtip=\"{0}\" ", result); - } - - #endregion - - #region OnFirstPreRender - - ///// <summary> - ///// Ⱦ HTML ֮ǰãҳһμػͨط - ///// </summary> - //protected override void OnFirstPreRender() - //{ - // base.OnFirstPreRender(); - - // if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) - // { - // // GridColumnѾ - // } - // else - // { - - // string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - // AddStartupScript(jsContent); - // } - - - //} - - #endregion - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: BaseField.cs + * CreatedOn: 2013-05-05 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// лࣩࣨ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class BaseField : GridColumn + { + #region Properties + + private string _dataSimulateTreeLevelField = String.Empty; + + /// <summary> + /// ģʾʱIJֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ģʾʱIJֶ")] + public string DataSimulateTreeLevelField + { + get + { + return _dataSimulateTreeLevelField; + } + set + { + _dataSimulateTreeLevelField = value; + } + } + + + #endregion + + #region DataTooltipField/DataTooltipFormatString + + private string _tooltip = String.Empty; + + /// <summary> + /// ʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾı")] + public string ToolTip + { + get + { + return _tooltip; + } + set + { + _tooltip = value; + } + } + + + + private string _dataToolTipField = String.Empty; + + /// <summary> + /// ʾֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾֶ")] + public string DataToolTipField + { + get + { + return _dataToolTipField; + } + set + { + _dataToolTipField = value; + } + } + + private string _dataToolTipFormatString = String.Empty; + + /// <summary> + /// ʾֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾֶθʽַ")] + public string DataToolTipFormatString + { + get + { + return _dataToolTipFormatString; + } + set + { + _dataToolTipFormatString = value; + } + } + + #endregion + + #region GetTooltipString + + /// <summary> + /// ȡʾַ + /// </summary> + /// <param name="row"></param> + /// <returns></returns> + protected string GetTooltipString(GridRow row) + { + string result = null; + + if (!String.IsNullOrEmpty(DataToolTipField)) + { + object value = row.GetPropertyValue(DataToolTipField); + + if (value == null) + { + result = null; + } + else + { + if (!String.IsNullOrEmpty(DataToolTipFormatString)) + { + result = String.Format(DataToolTipFormatString, value); + } + else + { + result = value.ToString(); + } + } + } + else if(!String.IsNullOrEmpty(ToolTip)) + { + result = ToolTip; + } + + return result == null ? "" : String.Format(" data-qtip=\"{0}\" ", result); + } + + #endregion + + #region OnFirstPreRender + + ///// <summary> + ///// Ⱦ HTML ֮ǰãҳһμػͨط + ///// </summary> + //protected override void OnFirstPreRender() + //{ + // base.OnFirstPreRender(); + + // if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) + // { + // // GridColumnѾ + // } + // else + // { + + // string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + // AddStartupScript(jsContent); + // } + + + //} + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs index f20fde5..23b6f4a 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs @@ -1,265 +1,266 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: BoundField.cs - * CreatedOn: 2008-05-27 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Reflection; - - -namespace FineUI -{ - /// <summary> - /// ݰ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class BoundField : BaseField - { - #region Properties - - private bool _enabled = true; - - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("Ƿ")] - public override bool Enabled - { - get - { - return _enabled; - } - set - { - _enabled = value; - } - } - - - private string _dataField = String.Empty; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶ")] - public string DataField - { - get - { - return _dataField; - } - set - { - _dataField = value; - } - } - - - private string _dataFormatString = String.Empty; - - /// <summary> - /// ֶθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶθʽַ")] - public string DataFormatString - { - get - { - return _dataFormatString; - } - set - { - _dataFormatString = value; - } - } - - - private string _nullDisplayText = String.Empty; - - /// <summary> - /// ݿnullֵĬΪַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ݿnullֵĬΪַ")] - public string NullDisplayText - { - get - { - return _nullDisplayText; - } - set - { - _nullDisplayText = value; - } - } - - - private bool _htmlEncode = true; - - /// <summary> - /// ʾ֮ǰHTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ʾ֮ǰHTML루ĬΪtrue")] - public bool HtmlEncode - { - get - { - return _htmlEncode; - } - set - { - _htmlEncode = value; - } - } - - - private bool _htmlEncodeFormatString = true; - - /// <summary> - /// ǷӦDataFormatString֮HTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] - public bool HtmlEncodeFormatString - { - get - { - return _htmlEncodeFormatString; - } - set - { - _htmlEncodeFormatString = value; - } - } - - #endregion - - #region Methods - - internal override string GetColumnValue(GridRow row) - { - string text = String.Empty; - - if (!String.IsNullOrEmpty(DataField)) - { - object value = row.GetPropertyValue(DataField); - - if (value == null) - { - text = NullDisplayText; - } - else - { - if (!String.IsNullOrEmpty(DataFormatString)) - { - text = String.Format(DataFormatString, value); - if (HtmlEncodeFormatString) - { - text = HttpUtility.HtmlEncode(text); - } - } - else - { - text = value.ToString(); - if (HtmlEncode) - { - text = HttpUtility.HtmlEncode(text); - } - } - } - } - - HtmlNodeBuilder nb = new HtmlNodeBuilder("span"); - - nb.InnerProperty = text; - - if (!Enabled) - { - nb.SetProperty("class", "x-item-disabled"); - nb.SetProperty("disabled", "disabled"); - } - - - string result = nb.ToString(); - - string tooltip = GetTooltipString(row); - if (!String.IsNullOrEmpty(tooltip)) - { - result = result.ToString().Insert("<span".Length, tooltip); - } - - // <span>󶨵</span> - if (result.StartsWith("<span>")) - { - result = result.Substring("<span>".Length, result.Length - "<span></span>".Length); - } - - return result; - } - - //public override string GetFieldType() - //{ - // return "string"; - //} - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: BoundField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + + +namespace FineUI +{ + /// <summary> + /// ݰ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class BoundField : BaseField + { + #region Properties + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + + private string _dataField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataField + { + get + { + return _dataField; + } + set + { + _dataField = value; + } + } + + + private string _dataFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataFormatString + { + get + { + return _dataFormatString; + } + set + { + _dataFormatString = value; + } + } + + + private string _nullDisplayText = String.Empty; + + /// <summary> + /// ݿnullֵĬΪַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ݿnullֵĬΪַ")] + public string NullDisplayText + { + get + { + return _nullDisplayText; + } + set + { + _nullDisplayText = value; + } + } + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + private bool _htmlEncodeFormatString = true; + + /// <summary> + /// ǷӦDataFormatString֮HTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncodeFormatString; + } + set + { + _htmlEncodeFormatString = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + string text = String.Empty; + + if (!String.IsNullOrEmpty(DataField)) + { + object value = row.GetPropertyValue(DataField); + + if (value == null || value == DBNull.Value || (value is String && String.IsNullOrEmpty(value.ToString()))) + { + text = NullDisplayText; + } + else + { + if (!String.IsNullOrEmpty(DataFormatString)) + { + text = String.Format(DataFormatString, value); + if (HtmlEncodeFormatString) + { + text = HttpUtility.HtmlEncode(text); + } + } + else + { + text = value.ToString(); + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + } + } + + HtmlNodeBuilder nb = new HtmlNodeBuilder("span"); + + nb.InnerProperty = text; + + if (!Enabled) + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + } + + + string result = nb.ToString(); + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<span".Length, tooltip); + } + + // <span>󶨵</span> + if (result.StartsWith("<span>")) + { + result = result.Substring("<span>".Length, result.Length - "<span></span>".Length); + } + + return result; + } + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs index b7c307e..b1defb8 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs @@ -1,422 +1,461 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: CheckBoxField.cs - * CreatedOn: 2008-05-27 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Reflection; -using System.Collections.Generic; - - -namespace FineUI -{ - /// <summary> - /// ѡ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class CheckBoxField : BaseField - { - #region Properties - - private bool _enabled = true; - - /// <summary> - /// ǷãֻRenderAsStaticField=falseʱЧ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ǷãֻRenderAsStaticField=falseʱЧ")] - public override bool Enabled - { - get - { - return _enabled; - } - set - { - _enabled = value; - } - } - - private bool _autoPostBack = false; - - /// <summary> - /// ǷԶطֻRenderAsStaticField=falseʱЧ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ǷԶطֻRenderAsStaticField=falseShowHeaderCheckBox=falseʱЧ")] - public bool AutoPostBack - { - get - { - return _autoPostBack; - } - set - { - _autoPostBack = value; - } - } - - - private string _dataField = ""; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶ")] - public string DataField - { - get - { - return _dataField; - } - set - { - _dataField = value; - } - } - - - private bool _renderAsStaticField = true; - - /// <summary> - /// ȾΪ̬ͼƬȾΪɱ༭ĸѡ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ȾΪ̬ͼƬȾΪɱ༭ĸѡ")] - public bool RenderAsStaticField - { - get - { - return _renderAsStaticField; - } - set - { - _renderAsStaticField = value; - } - } - - - private bool _showHeaderCheckBox = false; - - - /// <summary> - /// ʾͷѡֻRenderAsStaticField=falseʱЧ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ʾͷѡֻRenderAsStaticField=falseʱЧ")] - public bool ShowHeaderCheckBox - { - get - { - return _showHeaderCheckBox; - } - set - { - _showHeaderCheckBox = value; - } - } - - internal override string InnerCls - { - get - { - return "box-grid-cell-inner-image"; - } - } - - #endregion - - #region CommandName - - private string _commandName = ""; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("")] - public string CommandName - { - get - { - return _commandName; - } - set - { - _commandName = value; - } - } - - private string _commandArgument = ""; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("")] - public string CommandArgument - { - get - { - return _commandArgument; - } - set - { - _commandArgument = value; - } - } - - - #endregion - - #region GetHeaderValue/GetColumnValue - - internal override string GetHeaderValue() - { - if (!RenderAsStaticField && ShowHeaderCheckBox) - { - string result = String.Empty; - - //string textAlignClass = String.Empty; - //if (TextAlign != TextAlign.Left) - //{ - // textAlignClass = "align-" + TextAlignName.GetName(TextAlign); - //} - - string onClickScript = "X.toggle(this,'unchecked');"; - //onClickScript += "X.stop();"; - - //string tooltip = String.Empty; - //if (!String.IsNullOrEmpty(HeaderText)) - //{ - // tooltip = String.Format(" ext:qtip=\"{0}\" ", HeaderText); - //} - - result = String.Format("<div class=\"box-grid-checkbox unchecked\" onclick=\"{0}\">{1}</div>", - onClickScript, HeaderText); - - return result; - } - else - { - return base.GetHeaderValue(); - } - } - - - internal override string GetColumnValue(GridRow row) - { - string result = String.Empty; - - bool checkState = Convert.ToBoolean(GetColumnState(row)); - - result = GetColumnValue(row, checkState); - - string tooltip = GetTooltipString(row); - if (!String.IsNullOrEmpty(tooltip)) - { - result = result.ToString().Insert("<img".Length, tooltip); - } - - return result; - } - - /// <summary> - /// ȡõԪ - /// </summary> - /// <param name="row"></param> - /// <param name="checkState"></param> - /// <returns></returns> - private string GetColumnValue(GridRow row, bool checkState) - { - string result = String.Empty; - string emptyImageUrl = Grid.ResolveUrl(ResourceHelper.GetEmptyImageUrl()); - - if (!String.IsNullOrEmpty(DataField)) - { - //string textAlignClass = String.Empty; - //if (TextAlign != TextAlign.Left) - //{ - // textAlignClass = "align-" + TextAlignName.GetName(TextAlign); - //} - - if (RenderAsStaticField) - { - if (checkState) - { - result = String.Format("<img class=\"box-grid-static-checkbox\" src=\"{0}\"/>", emptyImageUrl); - } - else - { - result = String.Format("<img class=\"box-grid-static-checkbox unchecked\" src=\"{0}\"/>", emptyImageUrl); - } - } - else - { - string paramStr = String.Format("Command${0}${1}${2}${3}", row.RowIndex, ColumnIndex, CommandName.Replace("'", "\""), CommandArgument.Replace("'", "\"")); - - // ӳִУȷǰѡ״̬Ѿı - string postBackReference = JsHelper.GetDeferScript(Grid.GetPostBackEventReference(paramStr), 0); - - // string onClickScript = String.Format("{0}_checkbox{1}(event,this,{2});", Grid.XID, ColumnIndex, row.RowIndex); - //string onClickScript = "Ext.get(this).toggleClass('unchecked');"; - string onClickScript = "X.toggle(this,'unchecked');"; - if (!ShowHeaderCheckBox && AutoPostBack) - { - onClickScript += postBackReference; - } - - //onClickScript += "X.stop();"; - - if (checkState) - { - if (Enabled) - { - result = String.Format("<img class=\"box-grid-checkbox\" src=\"{0}\" onclick=\"{1}\"/>", emptyImageUrl, onClickScript); - } - else - { - result = String.Format("<img class=\"box-grid-checkbox disabled\" src=\"{0}\"/>", emptyImageUrl); - } - } - else - { - if (Enabled) - { - result = String.Format("<img class=\"box-grid-checkbox unchecked\" src=\"{0}\" onclick=\"{1}\"/>", emptyImageUrl, onClickScript); - } - else - { - result = String.Format("<img class=\"box-grid-checkbox unchecked disabled\" src=\"{0}\"/>", emptyImageUrl); - } - } - } - } - - return result; - } - - - //public override string GetFieldType() - //{ - // return "string"; - //} - - #endregion - - #region SaveColumnState/LoadColumnState - - internal override bool PersistState - { - get - { - if (RenderAsStaticField) - { - return false; - } - return true; - } - } - - internal override object GetColumnState(GridRow row) - { - if (row.DataItem == null) - { - return row.States[ColumnIndex]; - } - else - { - return row.GetPropertyValue(DataField); - } - } - - #endregion - - #region GetCheckedState/SetCheckedState - - /// <summary> - /// еĸѡǷѡ״̬ - /// </summary> - /// <param name="rowIndex"></param> - /// <returns>ѡ״̬</returns> - public bool GetCheckedState(int rowIndex) - { - GridRow row = this.Grid.Rows[rowIndex]; - - return Convert.ToBoolean(row.States[ColumnIndex]); - } - - /// <summary> - /// ñиѡѡ״̬ - /// </summary> - /// <param name="rowIndex"></param> - /// <param name="isChecked">Ƿѡ</param> - public void SetCheckedState(int rowIndex, bool isChecked) - { - GridRow row = this.Grid.Rows[rowIndex]; - - row.States[ColumnIndex] = isChecked; - - // ״̬ͬʱҪŸȾHTML - row.UpdateValuesAt(ColumnIndex); - } - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: CheckBoxField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; +using System.Collections.Generic; + + +namespace FineUI +{ + /// <summary> + /// ѡ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class CheckBoxField : BaseField + { + #region Properties + + private bool _enabled = true; + + /// <summary> + /// ǷãֻRenderAsStaticField=falseʱЧ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷãֻRenderAsStaticField=falseʱЧ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + private bool _autoPostBack = false; + + /// <summary> + /// ǷԶطֻRenderAsStaticField=falseʱЧ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ǷԶطֻRenderAsStaticField=falseShowHeaderCheckBox=falseʱЧ")] + public bool AutoPostBack + { + get + { + return _autoPostBack; + } + set + { + _autoPostBack = value; + } + } + + + private string _dataField = ""; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataField + { + get + { + return _dataField; + } + set + { + _dataField = value; + } + } + + + private bool _renderAsStaticField = true; + + /// <summary> + /// ȾΪ̬ͼƬȾΪɱ༭ĸѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ȾΪ̬ͼƬȾΪɱ༭ĸѡ")] + public bool RenderAsStaticField + { + get + { + return _renderAsStaticField; + } + set + { + _renderAsStaticField = value; + } + } + + + private bool _showHeaderCheckBox = false; + + + /// <summary> + /// ʾͷѡֻRenderAsStaticField=falseʱЧ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ʾͷѡֻRenderAsStaticField=falseʱЧ")] + public bool ShowHeaderCheckBox + { + get + { + return _showHeaderCheckBox; + } + set + { + _showHeaderCheckBox = value; + } + } + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + + + + #endregion + + #region EnableAjax + + private object _enableAjax = null; + + /// <summary> + /// ǷAJAX + /// </summary> + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("ǷAJAX")] + public override bool EnableAjax + { + get + { + if (_enableAjax == null) + { + if (DesignMode) + { + return true; + } + else + { + return Grid.EnableAjax; + } + } + return (bool)_enableAjax; + } + set + { + _enableAjax = value; + } + } + + #endregion + + #region CommandName + + private string _commandName = ""; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandName + { + get + { + return _commandName; + } + set + { + _commandName = value; + } + } + + private string _commandArgument = ""; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandArgument + { + get + { + return _commandArgument; + } + set + { + _commandArgument = value; + } + } + + + #endregion + + #region GetHeaderValue/GetColumnValue + + internal override string GetHeaderValue() + { + if (!RenderAsStaticField && ShowHeaderCheckBox) + { + string result = String.Empty; + + //string textAlignClass = String.Empty; + //if (TextAlign != TextAlign.Left) + //{ + // textAlignClass = "align-" + TextAlignName.GetName(TextAlign); + //} + + string onClickScript = "F.toggle(this,'unchecked');"; + //onClickScript += "F.stop();"; + + //string tooltip = String.Empty; + //if (!String.IsNullOrEmpty(HeaderText)) + //{ + // tooltip = String.Format(" ext:qtip=\"{0}\" ", HeaderText); + //} + + result = String.Format("<div class=\"f-grid-checkbox unchecked\" onclick=\"{0}\">{1}</div>", + onClickScript, HeaderText); + + return result; + } + else + { + return base.GetHeaderValue(); + } + } + + + internal override object GetColumnValue(GridRow row) + { + string result = String.Empty; + + bool checkState = Convert.ToBoolean(GetColumnState(row)); + + result = GetColumnValue(row, checkState); + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<img".Length, tooltip); + } + + return result; + } + + /// <summary> + /// ȡõԪ + /// </summary> + /// <param name="row"></param> + /// <param name="checkState"></param> + /// <returns></returns> + private string GetColumnValue(GridRow row, bool checkState) + { + string result = String.Empty; + string emptyImageUrl = Grid.ResolveUrl(ResourceHelper.GetEmptyImageUrl()); + + if (!String.IsNullOrEmpty(DataField)) + { + //string textAlignClass = String.Empty; + //if (TextAlign != TextAlign.Left) + //{ + // textAlignClass = "align-" + TextAlignName.GetName(TextAlign); + //} + + if (RenderAsStaticField) + { + if (checkState) + { + result = String.Format("<img class=\"f-grid-static-checkbox\" src=\"{0}\"/>", emptyImageUrl); + } + else + { + result = String.Format("<img class=\"f-grid-static-checkbox unchecked\" src=\"{0}\"/>", emptyImageUrl); + } + } + else + { + string paramStr = String.Format("Command${0}${1}${2}${3}", row.RowIndex, ColumnIndex, CommandName.Replace("'", "\""), CommandArgument.Replace("'", "\"")); + + // ӳִУȷǰѡ״̬Ѿı + string postBackReference = JsHelper.GetDeferScript(Grid.GetPostBackEventReference(paramStr, EnableAjax), 0); + + // string onClickScript = String.Format("{0}_checkbox{1}(event,this,{2});", Grid.XID, ColumnIndex, row.RowIndex); + //string onClickScript = "Ext.get(this).toggleClass('unchecked');"; + string onClickScript = "F.toggle(this,'unchecked');"; + if (!ShowHeaderCheckBox && AutoPostBack) + { + onClickScript += postBackReference; + } + + //onClickScript += "F.stop();"; + + if (checkState) + { + if (Enabled) + { + result = String.Format("<img class=\"f-grid-checkbox\" src=\"{0}\" onclick=\"{1}\"/>", emptyImageUrl, onClickScript); + } + else + { + result = String.Format("<img class=\"f-grid-checkbox disabled\" src=\"{0}\"/>", emptyImageUrl); + } + } + else + { + if (Enabled) + { + result = String.Format("<img class=\"f-grid-checkbox unchecked\" src=\"{0}\" onclick=\"{1}\"/>", emptyImageUrl, onClickScript); + } + else + { + result = String.Format("<img class=\"f-grid-checkbox unchecked disabled\" src=\"{0}\"/>", emptyImageUrl); + } + } + } + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region SaveColumnState/LoadColumnState + + internal override bool PersistState + { + get + { + if (RenderAsStaticField) + { + return false; + } + return true; + } + } + + internal override object GetColumnState(GridRow row) + { + if (row.DataItem == null) + { + return row.States[ColumnIndex]; + } + else + { + return row.GetPropertyValue(DataField); + } + } + + #endregion + + #region GetCheckedState/SetCheckedState + + /// <summary> + /// еĸѡǷѡ״̬ + /// </summary> + /// <param name="rowIndex"></param> + /// <returns>ѡ״̬</returns> + public bool GetCheckedState(int rowIndex) + { + GridRow row = this.Grid.Rows[rowIndex]; + + return Convert.ToBoolean(row.States[ColumnIndex]); + } + + /// <summary> + /// ñиѡѡ״̬ + /// </summary> + /// <param name="rowIndex"></param> + /// <param name="isChecked">Ƿѡ</param> + public void SetCheckedState(int rowIndex, bool isChecked) + { + GridRow row = this.Grid.Rows[rowIndex]; + + row.States[ColumnIndex] = isChecked; + + // ״̬ͬʱҪŸȾHTML + row.UpdateValuesAt(ColumnIndex); + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs index bf2a514..f41d6a8 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs @@ -1,599 +1,721 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridColumn.cs - * CreatedOn: 2008-05-19 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Data; -using System.Reflection; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// <summary> - /// лࣩࣨ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - [DefaultProperty("HeaderText")] - public abstract class GridColumn : ControlBase - { - #region Grid/ColumnIndex - - private Grid _grid; - - /// <summary> - /// - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Description("")] - public Grid Grid - { - get - { - if (_grid == null) - { - _grid = GetParentGrid(); - } - return _grid; - } - } - - private Grid GetParentGrid() - { - if (Parent is Grid) - { - return (Grid)Parent; - } - else - { - return ResolveParentGrid(Parent as GridColumn); - } - } - - private Grid ResolveParentGrid(GridColumn column) - { - if (column != null) - { - if (column.Parent is Grid) - { - return (Grid)column.Parent; - } - else - { - return ResolveParentGrid(column.Parent as GridColumn); - } - } - else - { - return null; - } - } - - /// <summary> - /// - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Description("")] - public int ColumnIndex - { - get - { - return Grid.AllColumns.IndexOf(this); - } - } - - #endregion - - #region SortField - - ///// <summary> - ///// ǰеʽ - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public string SortExpression - //{ - // get - // { - // return String.Format("{0} {1}", SortField, SortDirection); - // } - //} - - //public string _sortDirection = "ASC"; - - ///// <summary> - ///// - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public string SortDirection - //{ - // get - // { - // return _sortDirection; - // } - // set - // { - // _sortDirection = value; - // } - //} - - private string _sortField = String.Empty; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶ")] - public string SortField - { - get - { - return _sortField; - } - set - { - _sortField = value; - } - } - - #endregion - - #region Properties - - private bool _hidden = false; - - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿ")] - public override bool Hidden - { - get - { - return _hidden; - } - set - { - _hidden = value; - } - } - - - - private string _columnID = String.Empty; - - /// <summary> - /// IDûãΪClientID - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("IDûãΪClientID")] - public string ColumnID - { - get - { - if (String.IsNullOrEmpty(_columnID)) - { - return ClientID; - } - return _columnID; - } - set - { - _columnID = value; - } - } - - - private string _headerText = String.Empty; - /// <summary> - /// ʾ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ʾ")] - public string HeaderText - { - get - { - return _headerText; - } - set - { - _headerText = value; - } - } - - private string _headerToolTip = String.Empty; - /// <summary> - /// ֵʾı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֵʾı")] - public string HeaderToolTip - { - get - { - return _headerToolTip; - } - set - { - _headerToolTip = value; - } - } - - private ToolTipType _headerTooltipType = ToolTipType.Qtip; - /// <summary> - /// ֵʾı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(ToolTipType.Qtip)] - [Description("ֵʾı")] - public ToolTipType HeaderToolTipType - { - get - { - return _headerTooltipType; - } - set - { - _headerTooltipType = value; - } - } - - - private Unit _width = Unit.Empty; - /// <summary> - /// п - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "")] - [Description("п")] - public virtual Unit Width - { - get - { - return _width; - } - set - { - _width = value; - } - } - - - /// <summary> - /// ӿؼijߴ磨ʹHBox֣ - /// </summary> - [Category(CategoryName.LAYOUT)] - [DefaultValue(0)] - [Description("ӿؼijߴ磨ʹHBox֣")] - public int BoxFlex - { - get - { - object obj = XState["BoxFlex"]; - return obj == null ? 0 : (int)obj; - } - set - { - XState["BoxFlex"] = value; - } - } - - - private bool _expandUnusedSpace = false; - - /// <summary> - /// лչδʹõĿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("лչδʹõĿ")] - public bool ExpandUnusedSpace - { - get - { - return _expandUnusedSpace; - } - set - { - _expandUnusedSpace = value; - } - } - - - private TextAlign _textalign = TextAlign.Left; - - /// <summary> - /// ıλ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(TextAlign.Left)] - [Description("ıλ")] - public TextAlign TextAlign - { - get - { - return _textalign; - } - set - { - _textalign = value; - } - } - - private bool _enableHeaderMenu = true; - /// <summary> - /// ñͷ˵ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ñͷ˵")] - public virtual bool EnableHeaderMenu - { - get - { - return _enableHeaderMenu; - } - set - { - _enableHeaderMenu = value; - } - } - - - private bool _enableColumnHide = true; - /// <summary> - /// й - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("й")] - public virtual bool EnableColumnHide - { - get - { - return _enableColumnHide; - } - set - { - _enableColumnHide = value; - } - } - - - /// <summary> - /// Ԫʽ - /// </summary> - internal virtual string InnerCls - { - get - { - return String.Empty; - } - } - - - #endregion - - #region virtual GetColumnValue/GetColumnState/PersistState - - /// <summary> - /// ȡͷȾHTML - /// </summary> - /// <returns>ȾHTML</returns> - internal virtual string GetHeaderValue() - { - return String.IsNullOrEmpty(HeaderText) ? " " : HeaderText; - } - - /// <summary> - /// ȡȾHTML - /// </summary> - /// <param name="row">ʵ</param> - /// <returns>ȾHTML</returns> - internal virtual string GetColumnValue(GridRow row) - { - return String.Empty; - } - - - /// <summary> - /// ǷҪ״̬ĿǰֻCheckBoxFieldʵ壩 - /// </summary> - internal virtual bool PersistState - { - get - { - return false; - } - } - - /// <summary> - /// ȡе״̬ - /// </summary> - /// <param name="row"></param> - /// <returns></returns> - internal virtual object GetColumnState(GridRow row) - { - return null; - } - - #endregion - - #region OnPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãAJAXط - /// </summary> - protected override void OnAjaxPreRender() - { - // пؼԵĸı - } - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) - { - // չҪ⴦ - } - else - { - //JsObjectBuilder columnBuilder = new JsObjectBuilder(); - - // еĽûᷴӳÿԪϣͷ - OB.RemoveProperty("disabled"); - - if (this is RowNumberField) - { - OB.AddProperty("xtype", "rownumberer"); - } - - OB.AddProperty("text", GetHeaderValue()); - - if (!String.IsNullOrEmpty(HeaderToolTip)) - { - OB.AddProperty("tooltip", HeaderToolTip); - OB.AddProperty("tooltipType", ToolTipTypeName.GetName(HeaderToolTipType)); - } - - if (Hidden) - { - OB.AddProperty("hidden", true); - } - - if (!String.IsNullOrEmpty(InnerCls)) - { - OB.AddProperty("innerCls", InnerCls); - } - - if (Grid.AllowSorting) - { - if (String.IsNullOrEmpty(SortField)) - { - OB.AddProperty("sortable", false); - } - else - { - OB.AddProperty("sortable", true); - } - } - else - { - OB.AddProperty("sortable", false); - } - - - if (PersistState) - { - OB.AddProperty("x_persistState", true); - OB.AddProperty("x_persistStateType", "checkbox"); - } - - - - //If not specified, the column's index is used as an index into the Record's data Array. - OB.AddProperty("dataIndex", ColumnID); - OB.AddProperty("id", ColumnID); - - if (TextAlign != TextAlign.Left) - { - OB.AddProperty("align", TextAlignName.GetName(TextAlign)); - } - - if (Width != Unit.Empty) - { - OB.AddProperty("width", Width.Value); - } - else if (BoxFlex != 0) - { - OB.AddProperty("flex", BoxFlex); - } - - if (ExpandUnusedSpace) - { - OB.AddProperty("flex", 1); - } - - if (Grid.EnableHeaderMenu) - { - if (EnableHeaderMenu) - { - OB.AddProperty("menuDisabled", false); - } - else - { - OB.AddProperty("menuDisabled", true); - } - } - else - { - OB.AddProperty("menuDisabled", true); - } - - if (EnableColumnHide) - { - OB.AddProperty("hideable", true); - } - else - { - OB.AddProperty("hideable", false); - } - } - - - } - - #endregion - - - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridColumn.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// лࣩࣨ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + [DefaultProperty("HeaderText")] + public abstract class GridColumn : ControlBase + { + #region Grid/ColumnIndex + + private Grid _grid; + + /// <summary> + /// + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("")] + public Grid Grid + { + get + { + if (_grid == null) + { + _grid = GetParentGrid(); + } + return _grid; + } + } + + private Grid GetParentGrid() + { + if (Parent is Grid) + { + return (Grid)Parent; + } + else + { + return ResolveParentGrid(Parent as GridColumn); + } + } + + private Grid ResolveParentGrid(GridColumn column) + { + if (column != null) + { + if (column.Parent is Grid) + { + return (Grid)column.Parent; + } + else + { + return ResolveParentGrid(column.Parent as GridColumn); + } + } + else + { + return null; + } + } + + /// <summary> + /// + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("")] + public int ColumnIndex + { + get + { + return Grid.AllColumns.IndexOf(this); + } + } + + #endregion + + #region Properties + + ///// <summary> + ///// ǰеʽ + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string SortExpression + //{ + // get + // { + // return String.Format("{0} {1}", SortField, SortDirection); + // } + //} + + //public string _sortDirection = "ASC"; + + ///// <summary> + ///// + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string SortDirection + //{ + // get + // { + // return _sortDirection; + // } + // set + // { + // _sortDirection = value; + // } + //} + + private string _sortField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string SortField + { + get + { + return _sortField; + } + set + { + _sortField = value; + } + } + + + private bool _enableLock = false; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("")] + public bool EnableLock + { + get + { + return _enableLock; + } + set + { + _enableLock = value; + } + } + + + private bool _locked = false; + + /// <summary> + /// Ƿ״̬ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ״̬")] + public bool Locked + { + get + { + return _locked; + } + set + { + _locked = value; + } + } + + + private bool _hidden = false; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool Hidden + { + get + { + return _hidden; + } + set + { + _hidden = value; + } + } + + + + private string _columnID = String.Empty; + + /// <summary> + /// IDûãΪClientID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("IDûãΪClientID")] + public string ColumnID + { + get + { + if (String.IsNullOrEmpty(_columnID)) + { + return ClientID; + } + return _columnID; + } + set + { + _columnID = value; + } + } + + + private string _headerText = String.Empty; + /// <summary> + /// ʾ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾ")] + public string HeaderText + { + get + { + return _headerText; + } + set + { + _headerText = value; + } + } + + private string _headerToolTip = String.Empty; + /// <summary> + /// ֵʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֵʾı")] + public string HeaderToolTip + { + get + { + return _headerToolTip; + } + set + { + _headerToolTip = value; + } + } + + private ToolTipType _headerTooltipType = ToolTipType.Qtip; + /// <summary> + /// ֵʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolTipType.Qtip)] + [Description("ֵʾı")] + public ToolTipType HeaderToolTipType + { + get + { + return _headerTooltipType; + } + set + { + _headerTooltipType = value; + } + } + + + private Unit _width = Unit.Empty; + /// <summary> + /// п + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("п")] + public virtual Unit Width + { + get + { + return _width; + } + set + { + _width = value; + } + } + + + /// <summary> + /// ӿؼijߴ磨ʹHBox֣ + /// </summary> + [Category(CategoryName.LAYOUT)] + [DefaultValue(0)] + [Description("ӿؼijߴ磨ʹHBox֣")] + public int BoxFlex + { + get + { + object obj = FState["BoxFlex"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["BoxFlex"] = value; + } + } + + + private bool _expandUnusedSpace = false; + + /// <summary> + /// лչδʹõĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("лչδʹõĿ")] + public bool ExpandUnusedSpace + { + get + { + return _expandUnusedSpace; + } + set + { + _expandUnusedSpace = value; + } + } + + + /* + private TextAlign _textalign = TextAlign.Left; + + /// <summary> + /// ıλ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TextAlign.Left)] + [Description("ıλ")] + public TextAlign TextAlign + { + get + { + return _textalign; + } + set + { + _textalign = value; + } + } + */ + + private TextAlign? _textalign = null; + + /// <summary> + /// ıλ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("ıλ")] + public TextAlign? TextAlign + { + get + { + return _textalign; + } + set + { + _textalign = value; + } + } + + + private bool _enableHeaderMenu = true; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ñͷ˵")] + public virtual bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _enableColumnHide = true; + /// <summary> + /// й + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("й")] + public virtual bool EnableColumnHide + { + get + { + return _enableColumnHide; + } + set + { + _enableColumnHide = value; + } + } + + + /// <summary> + /// Ԫʽ + /// </summary> + internal virtual string InnerCls + { + get + { + return String.Empty; + } + } + + + #endregion + + #region virtual GetColumnValue/GetColumnState/PersistState + + /// <summary> + /// ȡͷȾHTML + /// </summary> + /// <returns>ȾHTML</returns> + internal virtual string GetHeaderValue() + { + return String.IsNullOrEmpty(HeaderText) ? " " : HeaderText; + } + + /// <summary> + /// ȡȾHTML + /// </summary> + /// <param name="row">ʵ</param> + /// <returns>ȾHTML</returns> + internal virtual object GetColumnValue(GridRow row) + { + return String.Empty; + } + + + /// <summary> + /// ǷҪ״̬ĿǰֻCheckBoxFieldʵ壩 + /// </summary> + internal virtual bool PersistState + { + get + { + return false; + } + } + + /// <summary> + /// ȡе״̬ + /// </summary> + /// <param name="row"></param> + /// <returns></returns> + internal virtual object GetColumnState(GridRow row) + { + return null; + } + + #endregion + + #region OnPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãAJAXط + /// </summary> + protected override void OnAjaxPreRender() + { + // пؼԵĸı + } + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) + { + // չҪ⴦ + } + else + { + //JsObjectBuilder columnBuilder = new JsObjectBuilder(); + + // еĽûᷴӳÿԪϣͷ + OB.RemoveProperty("disabled"); + + if (this is RowNumberField) + { + OB.AddProperty("xtype", "rownumberer"); + } + + OB.AddProperty("text", GetHeaderValue()); + + if (!String.IsNullOrEmpty(HeaderToolTip)) + { + OB.AddProperty("tooltip", HeaderToolTip); + OB.AddProperty("tooltipType", ToolTipTypeName.GetName(HeaderToolTipType)); + } + + if (Hidden) + { + OB.AddProperty("hidden", true); + } + + if (!String.IsNullOrEmpty(InnerCls)) + { + OB.AddProperty("innerCls", InnerCls); + } + + if (Grid.AllowSorting) + { + if (String.IsNullOrEmpty(SortField)) + { + OB.AddProperty("sortable", false); + } + else + { + OB.AddProperty("sortable", true); + } + } + else + { + OB.AddProperty("sortable", false); + } + + + // + if (Grid.AllowColumnLocking) + { + if (EnableLock) + { + OB.AddProperty("lockable", true); + } + else + { + OB.AddProperty("lockable", false); + } + + if (Locked) + { + OB.AddProperty("lockable", true); + OB.AddProperty("locked", true); + } + } + + + if (PersistState) + { + OB.AddProperty("f_persistState", true); + OB.AddProperty("f_persistStateType", "checkbox"); + } + + + + //If not specified, the column's index is used as an index into the Record's data Array. + OB.AddProperty("dataIndex", ColumnID); + OB.AddProperty("id", ColumnID); + + // ʹõColumnIndex + OB.AddProperty("f_columnIndex", ColumnIndex); + + + /* + if (TextAlign != TextAlign.Left) + { + OB.AddProperty("align", TextAlignName.GetName(TextAlign)); + } + */ + if (TextAlign != null) + { + // ĬϿʾʾֻҪ TextAlign + OB.AddProperty("align", TextAlignName.GetName(TextAlign.Value)); + } + + if (Width != Unit.Empty) + { + OB.AddProperty("width", Width.Value); + } + else if (BoxFlex != 0) + { + OB.AddProperty("flex", BoxFlex); + } + + if (ExpandUnusedSpace) + { + OB.AddProperty("flex", 1); + } + + if (Grid.EnableHeaderMenu) + { + if (EnableHeaderMenu) + { + OB.AddProperty("menuDisabled", false); + } + else + { + OB.AddProperty("menuDisabled", true); + } + } + else + { + OB.AddProperty("menuDisabled", true); + } + + if (EnableColumnHide) + { + OB.AddProperty("hideable", true); + } + else + { + OB.AddProperty("hideable", false); + } + + + if (Grid.EnableSummary) + { + if (this is RowNumberField) + { + // ûкϼ + } + else + { + OB.AddProperty("summaryType", String.Format("F.util.summaryType('{0}')", Grid.ClientID), true); + } + } + + + + + + + + } + } + + #endregion + + #region AddGridColumnScript + + /// <summary> + /// ӱеȾű + /// </summary> + /// <param name="jsContent"></param> + protected void AddGridColumnScript(string jsContent) + { + AddStartupScript(jsContent); + } + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs index e98b472..e08b6b6 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs @@ -1,81 +1,81 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridColumn.cs - * CreatedOn: 2008-05-19 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Xml; -using System.Text; -using System.Collections; -using System.ComponentModel; -using System.Collections.ObjectModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// м - /// </summary> - public class GridColumnCollection : BaseCollection<GridColumn> - { - /// <summary> - /// 캯 - /// </summary> - /// <param name="parent">ؼʵ</param> - public GridColumnCollection(ControlBase parent) - : base(parent) - { - - } - - /* - private Grid _grid; - - /// <summary> - /// 캯 - /// </summary> - /// <param name="grid">ʵ</param> - public GridColumnCollection(Grid grid) - { - _grid = grid; - - } - - /// <summary> - /// - /// </summary> - /// <param name="index"></param> - /// <param name="item"></param> - protected override void InsertItem(int index, GridColumn item) - { - item.ColumnIndex = index; - item.Grid = _grid; - - base.InsertItem(index, item); - } - */ - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridColumn.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Xml; +using System.Text; +using System.Collections; +using System.ComponentModel; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// м + /// </summary> + public class GridColumnCollection : BaseCollection<GridColumn> + { + /// <summary> + /// 캯 + /// </summary> + /// <param name="parent">ؼʵ</param> + public GridColumnCollection(ControlBase parent) + : base(parent) + { + + } + + /* + private Grid _grid; + + /// <summary> + /// 캯 + /// </summary> + /// <param name="grid">ʵ</param> + public GridColumnCollection(Grid grid) + { + _grid = grid; + + } + + /// <summary> + /// + /// </summary> + /// <param name="index"></param> + /// <param name="item"></param> + protected override void InsertItem(int index, GridColumn item) + { + item.ColumnIndex = index; + item.Grid = _grid; + + base.InsertItem(index, item); + } + */ + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs index d9382b8..4bb2c31 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs @@ -1,103 +1,103 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GroupField.cs - * CreatedOn: 2013-10-08 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Data; -using System.Reflection; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// <summary> - /// - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class GroupField : GridColumn - { - #region Properties - - - private GridColumnCollection _columns; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual GridColumnCollection Columns - { - get - { - if (_columns == null) - { - _columns = new GridColumnCollection(this); - } - return _columns; - } - } - - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - JsArrayBuilder columnsBuilder = new JsArrayBuilder(); - foreach (GridColumn column in Columns) - { - columnsBuilder.AddProperty(column.XID, true); - } - OB.AddProperty("columns", columnsBuilder); - - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GroupField.cs + * CreatedOn: 2013-10-08 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class GroupField : GridColumn + { + #region Properties + + + private GridColumnCollection _columns; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnCollection Columns + { + get + { + if (_columns == null) + { + _columns = new GridColumnCollection(this); + } + return _columns; + } + } + + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + JsArrayBuilder columnsBuilder = new JsArrayBuilder(); + foreach (GridColumn column in Columns) + { + columnsBuilder.AddProperty(column.XID, true); + } + OB.AddProperty("columns", columnsBuilder); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + } + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs index a450de3..7f86de4 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs @@ -1,463 +1,464 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: HyperLinkField.cs - * CreatedOn: 2008-05-27 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Reflection; - -using System.Collections.Generic; -using System.Web.UI.WebControls; - -namespace FineUI -{ - /// <summary> - /// - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class HyperLinkField : BaseField - { - - #region Properties - - private bool _enabled = true; - - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("Ƿ")] - public override bool Enabled - { - get - { - return _enabled; - } - set - { - _enabled = value; - } - } - - private string _dataTextField = String.Empty; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶ")] - public string DataTextField - { - get - { - return _dataTextField; - } - set - { - _dataTextField = value; - } - } - - private string _dataTextFormatString = String.Empty; - - /// <summary> - /// ֶθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶθʽַ")] - public string DataTextFormatString - { - get - { - return _dataTextFormatString; - } - set - { - _dataTextFormatString = value; - } - } - - private string[] _dataNavigateUrlFields = null; - - /// <summary> - /// 󶨵ӵֶַб - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("󶨵ӵֶַб")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] DataNavigateUrlFields - { - get - { - return _dataNavigateUrlFields; - } - set - { - _dataNavigateUrlFields = value; - } - } - - //private bool _dataNavigateUrlFieldsEncode = false; - - /// <summary> - /// ÿ󶨵ӵֶַνURL루ԷʹUrlEncodeԣ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ÿ󶨵ӵֶַνURL루ԷʹUrlEncodeԣ")] - public bool DataNavigateUrlFieldsEncode - { - get - { - return _urlEncode; - } - set - { - _urlEncode = value; - } - } - - - private bool _urlEncode = true; - - /// <summary> - /// ÿ󶨵ӵֶַνURL루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ÿ󶨵ӵֶַνURL")] - public bool UrlEncode - { - get - { - return _urlEncode; - } - set - { - _urlEncode = value; - } - } - - - private string _dataNavigateUrlFormatString = String.Empty; - - /// <summary> - /// 󶨵ӵֶַθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("󶨵ӵֶַθʽַ")] - public string DataNavigateUrlFormatString - { - get - { - return _dataNavigateUrlFormatString; - } - set - { - _dataNavigateUrlFormatString = value; - } - } - - private string _target = String.Empty; - - /// <summary> - /// 򿪳ӵĿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("򿪳ӵĿ")] - public string Target - { - get - { - return _target; - } - set - { - _target = value; - } - } - - - private string _navigateUrl = String.Empty; - - /// <summary> - /// ӵַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ӵַ")] - public string NavigateUrl - { - get - { - return _navigateUrl; - } - set - { - _navigateUrl = value; - } - } - - private string _text = String.Empty; - - /// <summary> - /// ı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ı")] - public string Text - { - get - { - return _text; - } - set - { - _text = value; - } - } - - - - private bool _htmlEncode = true; - - /// <summary> - /// ʾ֮ǰHTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ʾ֮ǰHTML루ĬΪtrue")] - public bool HtmlEncode - { - get - { - return _htmlEncode; - } - set - { - _htmlEncode = value; - } - } - - - private bool _htmlEncodeFormatString = true; - - /// <summary> - /// ǷӦDataFormatString֮HTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] - public bool HtmlEncodeFormatString - { - get - { - return _htmlEncodeFormatString; - } - set - { - _htmlEncodeFormatString = value; - } - } - - #endregion - - #region Methods - - internal override string GetColumnValue(GridRow row) - { - HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); - - #region DataTextField - - if (!String.IsNullOrEmpty(DataTextField)) - { - object value = row.GetPropertyValue(DataTextField); - - string text = String.Empty; - if (value != null) - { - if (!String.IsNullOrEmpty(DataTextFormatString)) - { - text = String.Format(DataTextFormatString, value); - if (HtmlEncodeFormatString) - { - text = HttpUtility.HtmlEncode(text); - } - } - else - { - text = value.ToString(); - if (HtmlEncode) - { - text = HttpUtility.HtmlEncode(text); - } - } - } - - nb.InnerProperty = text; - } - else - { - nb.InnerProperty = Text; - } - - #endregion - - if (Enabled) - { - #region DataNavigateUrlFields - - string hrefOriginal = String.Empty; - - if (DataNavigateUrlFields != null && DataNavigateUrlFields.Length > 0) - { - //string[] fields = DataNavigateUrlFields.Trim().TrimEnd(',').Split(','); - string[] fields = DataNavigateUrlFields; - - List<object> fieldValues = new List<object>(); - foreach (string field in fields) - { - if (!String.IsNullOrEmpty(field)) - { - object fieldObj = row.GetPropertyValue(field); - - string fieldValue = String.Empty; - if (fieldObj != null) - { - fieldValue = fieldObj.ToString(); - if (UrlEncode) - { - fieldValue = HttpUtility.UrlEncode(fieldValue); - } - } - fieldValues.Add(fieldValue); - } - } - - if (!String.IsNullOrEmpty(DataNavigateUrlFormatString)) - { - hrefOriginal = String.Format(DataNavigateUrlFormatString, fieldValues.ToArray()); - } - else - { - if (fieldValues.Count > 0) - { - hrefOriginal = fieldValues[0].ToString(); - } - } - } - else - { - hrefOriginal = NavigateUrl; - } - - nb.SetProperty("href", Grid.ResolveUrl(hrefOriginal)); - - #endregion - - #region Target - - if (!String.IsNullOrEmpty(Target)) - { - nb.SetProperty("target", Target); - } - else - { - nb.SetProperty("target", "_blank"); - } - - #endregion - } - else - { - nb.SetProperty("class", "x-item-disabled"); - nb.SetProperty("disabled", "disabled"); - } - - //string result2 = nb.ToString(); - - //string tooltip = GetTooltipString(row); - //if (!String.IsNullOrEmpty(tooltip)) - //{ - // result2 = result2.ToString().Insert(2, tooltip); - //} - - - //return result2; - - string result = nb.ToString(); - - string tooltip = GetTooltipString(row); - if (!String.IsNullOrEmpty(tooltip)) - { - result = result.ToString().Insert("<a".Length, tooltip); - } - - return result; - } - - - //public override string GetFieldType() - //{ - // return "string"; - //} - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: HyperLinkField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + +using System.Collections.Generic; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class HyperLinkField : BaseField + { + + #region Properties + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + private string _dataTextField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataTextField + { + get + { + return _dataTextField; + } + set + { + _dataTextField = value; + } + } + + private string _dataTextFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataTextFormatString + { + get + { + return _dataTextFormatString; + } + set + { + _dataTextFormatString = value; + } + } + + private string[] _dataNavigateUrlFields = null; + + /// <summary> + /// 󶨵ӵֶַб + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("󶨵ӵֶַб")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] DataNavigateUrlFields + { + get + { + return _dataNavigateUrlFields; + } + set + { + _dataNavigateUrlFields = value; + } + } + + //private bool _dataNavigateUrlFieldsEncode = false; + + /// <summary> + /// ÿ󶨵ӵֶַνURL루ԷʹUrlEncodeԣ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ÿ󶨵ӵֶַνURL루ԷʹUrlEncodeԣ")] + public bool DataNavigateUrlFieldsEncode + { + get + { + return _urlEncode; + } + set + { + _urlEncode = value; + } + } + + + private bool _urlEncode = true; + + /// <summary> + /// ÿ󶨵ӵֶַνURL루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ÿ󶨵ӵֶַνURL")] + public bool UrlEncode + { + get + { + return _urlEncode; + } + set + { + _urlEncode = value; + } + } + + + private string _dataNavigateUrlFormatString = String.Empty; + + /// <summary> + /// 󶨵ӵֶַθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("󶨵ӵֶַθʽַ")] + public string DataNavigateUrlFormatString + { + get + { + return _dataNavigateUrlFormatString; + } + set + { + _dataNavigateUrlFormatString = value; + } + } + + private string _target = String.Empty; + + /// <summary> + /// 򿪳ӵĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("򿪳ӵĿ")] + public string Target + { + get + { + return _target; + } + set + { + _target = value; + } + } + + + private string _navigateUrl = String.Empty; + + /// <summary> + /// ӵַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӵַ")] + public string NavigateUrl + { + get + { + return _navigateUrl; + } + set + { + _navigateUrl = value; + } + } + + private string _text = String.Empty; + + /// <summary> + /// ı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + private bool _htmlEncodeFormatString = true; + + /// <summary> + /// ǷӦDataFormatString֮HTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncodeFormatString; + } + set + { + _htmlEncodeFormatString = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); + + #region DataTextField + + if (!String.IsNullOrEmpty(DataTextField)) + { + object value = row.GetPropertyValue(DataTextField); + + string text = String.Empty; + if (value != null) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + text = String.Format(DataTextFormatString, value); + if (HtmlEncodeFormatString) + { + text = HttpUtility.HtmlEncode(text); + } + } + else + { + text = value.ToString(); + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + } + + nb.InnerProperty = text; + } + else + { + nb.InnerProperty = Text; + } + + #endregion + + if (Enabled) + { + #region DataNavigateUrlFields + + string hrefOriginal = String.Empty; + + if (DataNavigateUrlFields != null && DataNavigateUrlFields.Length > 0) + { + //string[] fields = DataNavigateUrlFields.Trim().TrimEnd(',').Split(','); + string[] fields = DataNavigateUrlFields; + + List<object> fieldValues = new List<object>(); + foreach (string field in fields) + { + if (!String.IsNullOrEmpty(field)) + { + object fieldObj = row.GetPropertyValue(field); + + string fieldValue = String.Empty; + if (fieldObj != null) + { + fieldValue = fieldObj.ToString(); + if (UrlEncode) + { + fieldValue = HttpUtility.UrlEncode(fieldValue); + } + } + fieldValues.Add(fieldValue); + } + } + + if (!String.IsNullOrEmpty(DataNavigateUrlFormatString)) + { + hrefOriginal = String.Format(DataNavigateUrlFormatString, fieldValues.ToArray()); + } + else + { + if (fieldValues.Count > 0) + { + hrefOriginal = fieldValues[0].ToString(); + } + } + } + else + { + hrefOriginal = NavigateUrl; + } + + nb.SetProperty("href", Grid.ResolveUrl(hrefOriginal)); + + #endregion + + #region Target + + if (!String.IsNullOrEmpty(Target)) + { + nb.SetProperty("target", Target); + } + else + { + nb.SetProperty("target", "_blank"); + } + + #endregion + } + else + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + } + + //string result2 = nb.ToString(); + + //string tooltip = GetTooltipString(row); + //if (!String.IsNullOrEmpty(tooltip)) + //{ + // result2 = result2.ToString().Insert(2, tooltip); + //} + + + //return result2; + + string result = nb.ToString(); + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<a".Length, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs index 039ad58..5d70a9b 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs @@ -1,227 +1,228 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: ImageField.cs - * CreatedOn: 2008-05-28 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Globalization; -using System.Reflection; - - -namespace FineUI -{ - /// <summary> - /// ͼƬ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class ImageField : BaseField - { - #region Properties - - - private string _dataImageUrlField = String.Empty; - - /// <summary> - /// ͼƬֶַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ͼƬֶַ")] - public string DataImageUrlField - { - get - { - return _dataImageUrlField; - } - set - { - _dataImageUrlField = value; - } - } - - - - private string _dataImageUrlFormatString = String.Empty; - - /// <summary> - /// ͼƬֶַθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ͼƬֶַθʽַ")] - public string DataImageUrlFormatString - { - get - { - return _dataImageUrlFormatString; - } - set - { - _dataImageUrlFormatString = value; - } - } - - - private Unit _imageWidth = Unit.Empty; - - /// <summary> - /// ͼƬĿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "")] - [Description("ͼƬĿ")] - public Unit ImageWidth - { - get - { - return _imageWidth; - } - set - { - _imageWidth = value; - } - } - - private Unit _imageHeight = Unit.Empty; - - /// <summary> - /// ͼƬĸ߶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(typeof(Unit), "")] - [Description("ͼƬĸ߶")] - public Unit ImageHeight - { - get - { - return _imageHeight; - } - set - { - _imageHeight = value; - } - } - - - internal override string InnerCls - { - get - { - return "box-grid-cell-inner-image"; - } - } - - #endregion - - #region Methods - - internal override string GetColumnValue(GridRow row) - { - string result = String.Empty; - - if (!String.IsNullOrEmpty(DataImageUrlField)) - { - object value = row.GetPropertyValue(DataImageUrlField); - string imageUrl = String.Empty; - - if (value != null) - { - if (!String.IsNullOrEmpty(DataImageUrlFormatString)) - { - imageUrl = String.Format(DataImageUrlFormatString, value); - } - else - { - imageUrl = value.ToString(); - } - } - - string cssStyle = String.Empty; - - if (ImageWidth != Unit.Empty) - { - cssStyle += String.Format("width:{0}px;", ImageWidth.Value); - } - if (ImageHeight != Unit.Empty) - { - cssStyle += String.Format("height:{0}px;", ImageHeight.Value); - } - - if (!String.IsNullOrEmpty(cssStyle)) - { - cssStyle = String.Format(" style=\"{0}\"", cssStyle); - } - - - - result = String.Format("<img src=\"{0}\" class=\"box-grid-imagefield\"{1}/>", - Grid.ResolveUrl(imageUrl), - cssStyle); - } - - string tooltip = GetTooltipString(row); - if (!String.IsNullOrEmpty(tooltip)) - { - result = result.ToString().Insert(4, tooltip); - } - - return result; - } - - - //public override string GetFieldType() - //{ - // return "string"; - //} - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: ImageField.cs + * CreatedOn: 2008-05-28 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Globalization; +using System.Reflection; + + +namespace FineUI +{ + /// <summary> + /// ͼƬ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class ImageField : BaseField + { + #region Properties + + + private string _dataImageUrlField = String.Empty; + + /// <summary> + /// ͼƬֶַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼƬֶַ")] + public string DataImageUrlField + { + get + { + return _dataImageUrlField; + } + set + { + _dataImageUrlField = value; + } + } + + + + private string _dataImageUrlFormatString = String.Empty; + + /// <summary> + /// ͼƬֶַθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼƬֶַθʽַ")] + public string DataImageUrlFormatString + { + get + { + return _dataImageUrlFormatString; + } + set + { + _dataImageUrlFormatString = value; + } + } + + + private Unit _imageWidth = Unit.Empty; + + /// <summary> + /// ͼƬĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("ͼƬĿ")] + public Unit ImageWidth + { + get + { + return _imageWidth; + } + set + { + _imageWidth = value; + } + } + + private Unit _imageHeight = Unit.Empty; + + /// <summary> + /// ͼƬĸ߶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("ͼƬĸ߶")] + public Unit ImageHeight + { + get + { + return _imageHeight; + } + set + { + _imageHeight = value; + } + } + + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + string result = String.Empty; + + if (!String.IsNullOrEmpty(DataImageUrlField)) + { + object value = row.GetPropertyValue(DataImageUrlField); + string imageUrl = String.Empty; + + if (value != null) + { + if (!String.IsNullOrEmpty(DataImageUrlFormatString)) + { + imageUrl = String.Format(DataImageUrlFormatString, value); + } + else + { + imageUrl = value.ToString(); + } + } + + string cssStyle = String.Empty; + + if (ImageWidth != Unit.Empty) + { + cssStyle += String.Format("width:{0}px;", ImageWidth.Value); + } + if (ImageHeight != Unit.Empty) + { + cssStyle += String.Format("height:{0}px;", ImageHeight.Value); + } + + if (!String.IsNullOrEmpty(cssStyle)) + { + cssStyle = String.Format(" style=\"{0}\"", cssStyle); + } + + + + result = String.Format("<img src=\"{0}\" class=\"f-grid-imagefield\"{1}/>", + Grid.ResolveUrl(imageUrl), + cssStyle); + } + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert(4, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs index 24507fc..fa88fb8 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs @@ -1,662 +1,698 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: LinkButtonField.cs - * CreatedOn: 2008-06-23 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Reflection; - -using System.Collections.Generic; -using System.Web.UI.WebControls; -using System.Web.UI.Design; -using System.Drawing.Design; - -namespace FineUI -{ - /// <summary> - /// Ӱť - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class LinkButtonField : BaseField - { - #region override - - internal override string InnerCls - { - get - { - return "box-grid-cell-inner-image"; - } - } - - private bool _enableHeaderMenu = false; - /// <summary> - /// ñͷ˵ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ñͷ˵")] - public override bool EnableHeaderMenu - { - get - { - return _enableHeaderMenu; - } - set - { - _enableHeaderMenu = value; - } - } - - - private bool _allowHideColumn = false; - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿ")] - public override bool EnableColumnHide - { - get - { - return _allowHideColumn; - } - set - { - _allowHideColumn = value; - } - } - - #endregion - - #region Properties - - - private string _dataTextField = String.Empty; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶ")] - public string DataTextField - { - get - { - return _dataTextField; - } - set - { - _dataTextField = value; - } - } - - - private string _dataTextFormatString = String.Empty; - - /// <summary> - /// ֶθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶθʽַ")] - public string DataTextFormatString - { - get - { - return _dataTextFormatString; - } - set - { - _dataTextFormatString = value; - } - } - - - private string _text = String.Empty; - - /// <summary> - /// ťı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ťı")] - public string Text - { - get - { - return _text; - } - set - { - _text = value; - } - } - - - - private bool _htmlEncode = true; - - /// <summary> - /// ʾ֮ǰHTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ʾ֮ǰHTML루ĬΪtrue")] - public bool HtmlEncode - { - get - { - return _htmlEncode; - } - set - { - _htmlEncode = value; - } - } - - - private bool _htmlEncodeFormatString = true; - - /// <summary> - /// ǷӦDataFormatString֮HTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] - public bool HtmlEncodeFormatString - { - get - { - return _htmlEncodeFormatString; - } - set - { - _htmlEncodeFormatString = value; - } - } - - - - #endregion - - #region Properties - - - - - private bool _enablePostBack = true; - - /// <summary> - /// ǷԻط - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ǷԻط")] - public bool EnablePostBack - { - get - { - return _enablePostBack; - } - set - { - _enablePostBack = value; - } - } - - private bool _enabled = true; - - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("Ƿ")] - public override bool Enabled - { - get - { - return _enabled; - } - set - { - _enabled = value; - } - } - - private string _onClientClick = String.Empty; - - /// <summary> - /// ťʱҪִеĿͻ˽ű - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ťʱҪִеĿͻ˽ű")] - public string OnClientClick - { - get - { - return _onClientClick; - } - set - { - _onClientClick = value; - } - } - - private string[] _validateForms = null; - - /// <summary> - /// ύ֮ǰҪ֤ıб - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(null)] - [Description("ύ֮ǰҪ֤ıб")] - [TypeConverter(typeof(StringArrayConverter))] - public string[] ValidateForms - { - get - { - return _validateForms; - } - set - { - _validateForms = value; - } - } - - private Target _validateTarget = Target.Self; - - /// <summary> - /// ֤ʧʱʾԻ򵯳λ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("֤ʧʱʾԻ򵯳λ")] - public Target ValidateTarget - { - get - { - return _validateTarget; - } - set - { - _validateTarget = value; - } - } - - private bool _validateMessageBox = true; - - /// <summary> - /// ֤ʧʱǷʾԻ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("֤ʧʱǷʾԻ")] - public bool ValidateMessageBox - { - get - { - return _validateMessageBox; - } - set - { - _validateMessageBox = value; - } - } - - - - private Icon _icon = Icon.None; - - /// <summary> - /// ͼ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Icon.None)] - [Description("ͼ")] - public Icon Icon - { - get - { - return _icon; - } - set - { - _icon = value; - } - } - - private string _iconUrl = String.Empty; - - /// <summary> - /// ͼַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ͼַ")] - [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - public string IconUrl - { - get - { - return _iconUrl; - } - set - { - _iconUrl = value; - } - } - - #endregion - - #region ConfirmText/ConfirmTitle/ConfirmIcon - - private string _confirmTitle = ""; - - /// <summary> - /// ȷ϶Ի - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ȷ϶Ի")] - public string ConfirmTitle - { - get - { - return _confirmTitle; - } - set - { - _confirmTitle = value; - } - } - - private string _confirmText = String.Empty; - - /// <summary> - /// ȷ϶Ի - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ȷ϶Ի")] - public string ConfirmText - { - get - { - return _confirmText; - } - set - { - _confirmText = value; - } - } - - private MessageBoxIcon _confirmIcon = MessageBoxIcon.Warning; - - /// <summary> - /// ȷ϶Իʾͼ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(MessageBoxIcon.Warning)] - [Description("ȷ϶Իʾͼ")] - public MessageBoxIcon ConfirmIcon - { - get - { - return _confirmIcon; - } - set - { - _confirmIcon = value; - } - } - - private Target _confirmTarget = Target.Self; - - /// <summary> - /// ȷ϶Ի򵯳λ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Target.Self)] - [Description("ȷ϶Ի򵯳λ")] - public Target ConfirmTarget - { - get - { - return _confirmTarget; - } - set - { - _confirmTarget = value; - } - } - - #endregion - - #region CommandName/CommandArgument - - private string _commandName = String.Empty; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("")] - public string CommandName - { - get - { - return _commandName; - } - set - { - _commandName = value; - } - } - - private string _commandArgument = String.Empty; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("")] - public string CommandArgument - { - get - { - return _commandArgument; - } - set - { - _commandArgument = value; - } - } - - - #endregion - - #region Methods - - internal override string GetColumnValue(GridRow row) - { - //string result = String.Empty; - - #region DataTextField - - string text = String.Empty; - - if (!String.IsNullOrEmpty(DataTextField)) - { - object value = row.GetPropertyValue(DataTextField); - - if (value != null) - { - if (!String.IsNullOrEmpty(DataTextFormatString)) - { - text = String.Format(DataTextFormatString, value); - if (HtmlEncodeFormatString) - { - text = HttpUtility.HtmlEncode(text); - } - } - else - { - text = value.ToString(); - if (HtmlEncode) - { - text = HttpUtility.HtmlEncode(text); - } - } - } - } - else - { - text = Text; - } - - #endregion - - HtmlNodeBuilder nb; - - #region Enabled - - nb = new HtmlNodeBuilder("a"); - - if (Enabled) - { - nb.SetProperty("href", "javascript:;"); - - // click - string paramStr = String.Format("Command${0}${1}${2}${3}", row.RowIndex, ColumnIndex, CommandName.Replace("'", "\""), CommandArgument.Replace("'", "\"")); - string postBackReference = Grid.GetPostBackEventReference(paramStr); - - string clientScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, postBackReference, - ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, String.Empty); - - //clientScript = JsHelper.GetDeferScript(clientScript, 0) + "X.stopEvent();"; - //clientScript = clientScript + "X.stop();"; - - nb.SetProperty("onclick", clientScript); - - //result = nb.ToString(); - } - else - { - nb.SetProperty("class", "x-item-disabled"); - nb.SetProperty("disabled", "disabled"); - - //nb = new HtmlNodeBuilder("span"); - //nb.SetProperty("class", "gray"); - //nb.InnerProperty = text; - //result = String.Format("<span class=\"gray\">{0}</span>", text); - } - - nb.InnerProperty = text; - - #endregion - - string tooltip = GetTooltipString(row); - - #region Icon IconUrl - - string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); - if (!String.IsNullOrEmpty(resolvedIconUrl)) - { - nb.InnerProperty = String.Format("<img src=\"{0}\" {1} />", resolvedIconUrl, tooltip) + nb.InnerProperty; - } - - #endregion - - //string result = nb.ToString(); - //#region Tooltip - - //if (!String.IsNullOrEmpty(tooltip)) - //{ - // if (result.StartsWith("<a ")) - // { - // result = result.ToString().Insert(2, tooltip); - // } - // else if (result.StartsWith("<span ")) - // { - // result = result.ToString().Insert(5, tooltip); - // } - //} - - //#endregion - - //return result; - - string result = nb.ToString(); - - if (!String.IsNullOrEmpty(tooltip)) - { - result = result.ToString().Insert("<a".Length, tooltip); - } - - return result; - } - - - //public override string GetFieldType() - //{ - // return "string"; - //} - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: LinkButtonField.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + +using System.Collections.Generic; +using System.Web.UI.WebControls; +using System.Web.UI.Design; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// Ӱť + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class LinkButtonField : BaseField + { + #region override + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + private bool _enableHeaderMenu = false; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ñͷ˵")] + public override bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _allowHideColumn = false; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool EnableColumnHide + { + get + { + return _allowHideColumn; + } + set + { + _allowHideColumn = value; + } + } + + #endregion + + #region Properties + + + private string _dataTextField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataTextField + { + get + { + return _dataTextField; + } + set + { + _dataTextField = value; + } + } + + + private string _dataTextFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataTextFormatString + { + get + { + return _dataTextFormatString; + } + set + { + _dataTextFormatString = value; + } + } + + + private string _text = String.Empty; + + /// <summary> + /// ťı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ťı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + private bool _htmlEncodeFormatString = true; + + /// <summary> + /// ǷӦDataFormatString֮HTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncodeFormatString; + } + set + { + _htmlEncodeFormatString = value; + } + } + + + + #endregion + + #region Properties + + + + + private bool _enablePostBack = true; + + /// <summary> + /// ǷԻط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷԻط")] + public bool EnablePostBack + { + get + { + return _enablePostBack; + } + set + { + _enablePostBack = value; + } + } + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + private string _onClientClick = String.Empty; + + /// <summary> + /// ťʱҪִеĿͻ˽ű + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ťʱҪִеĿͻ˽ű")] + public string OnClientClick + { + get + { + return _onClientClick; + } + set + { + _onClientClick = value; + } + } + + private string[] _validateForms = null; + + /// <summary> + /// ύ֮ǰҪ֤ıб + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("ύ֮ǰҪ֤ıб")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + return _validateForms; + } + set + { + _validateForms = value; + } + } + + private Target _validateTarget = Target.Self; + + /// <summary> + /// ֤ʧʱʾԻ򵯳λ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("֤ʧʱʾԻ򵯳λ")] + public Target ValidateTarget + { + get + { + return _validateTarget; + } + set + { + _validateTarget = value; + } + } + + private bool _validateMessageBox = true; + + /// <summary> + /// ֤ʧʱǷʾԻ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("֤ʧʱǷʾԻ")] + public bool ValidateMessageBox + { + get + { + return _validateMessageBox; + } + set + { + _validateMessageBox = value; + } + } + + + + private Icon _icon = Icon.None; + + /// <summary> + /// ͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("ͼ")] + public Icon Icon + { + get + { + return _icon; + } + set + { + _icon = value; + } + } + + private string _iconUrl = String.Empty; + + /// <summary> + /// ͼַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼַ")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + return _iconUrl; + } + set + { + _iconUrl = value; + } + } + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon + + private string _confirmTitle = ""; + + /// <summary> + /// ȷ϶Ի + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ȷ϶Ի")] + public string ConfirmTitle + { + get + { + return _confirmTitle; + } + set + { + _confirmTitle = value; + } + } + + private string _confirmText = String.Empty; + + /// <summary> + /// ȷ϶Ի + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ȷ϶Ի")] + public string ConfirmText + { + get + { + return _confirmText; + } + set + { + _confirmText = value; + } + } + + private MessageBoxIcon _confirmIcon = MessageBoxIcon.Warning; + + /// <summary> + /// ȷ϶Իʾͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("ȷ϶Իʾͼ")] + public MessageBoxIcon ConfirmIcon + { + get + { + return _confirmIcon; + } + set + { + _confirmIcon = value; + } + } + + private Target _confirmTarget = Target.Self; + + /// <summary> + /// ȷ϶Ի򵯳λ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("ȷ϶Ի򵯳λ")] + public Target ConfirmTarget + { + get + { + return _confirmTarget; + } + set + { + _confirmTarget = value; + } + } + + #endregion + + #region CommandName/CommandArgument + + private string _commandName = String.Empty; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandName + { + get + { + return _commandName; + } + set + { + _commandName = value; + } + } + + private string _commandArgument = String.Empty; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandArgument + { + get + { + return _commandArgument; + } + set + { + _commandArgument = value; + } + } + + + #endregion + + #region EnableAjax + + private object _enableAjax = null; + + /// <summary> + /// ǷAJAX + /// </summary> + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("ǷAJAX")] + public override bool EnableAjax + { + get + { + if (_enableAjax == null) + { + if (DesignMode) + { + return true; + } + else + { + return Grid.EnableAjax; + } + } + return (bool)_enableAjax; + } + set + { + _enableAjax = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + //string result = String.Empty; + + #region DataTextField + + string text = String.Empty; + + if (!String.IsNullOrEmpty(DataTextField)) + { + object value = row.GetPropertyValue(DataTextField); + + if (value != null) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + text = String.Format(DataTextFormatString, value); + if (HtmlEncodeFormatString) + { + text = HttpUtility.HtmlEncode(text); + } + } + else + { + text = value.ToString(); + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + } + } + else + { + text = Text; + } + + #endregion + + HtmlNodeBuilder nb; + + #region Enabled + + nb = new HtmlNodeBuilder("a"); + + if (Enabled) + { + nb.SetProperty("href", "javascript:;"); + + // click + string paramStr = String.Format("Command${0}${1}${2}${3}", row.RowIndex, ColumnIndex, CommandName.Replace("'", "\""), CommandArgument.Replace("'", "\"")); + string postBackReference = Grid.GetPostBackEventReference(paramStr, EnableAjax); + + string clientScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, postBackReference, + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, String.Empty); + + //clientScript = JsHelper.GetDeferScript(clientScript, 0) + "F.stopEvent();"; + //clientScript = clientScript + "F.stop();"; + + nb.SetProperty("onclick", clientScript); + + //result = nb.ToString(); + } + else + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + + //nb = new HtmlNodeBuilder("span"); + //nb.SetProperty("class", "gray"); + //nb.InnerProperty = text; + //result = String.Format("<span class=\"gray\">{0}</span>", text); + } + + nb.InnerProperty = text; + + #endregion + + string tooltip = GetTooltipString(row); + + #region Icon IconUrl + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + nb.InnerProperty = String.Format("<img src=\"{0}\" {1} />", resolvedIconUrl, tooltip) + nb.InnerProperty; + } + + #endregion + + //string result = nb.ToString(); + //#region Tooltip + + //if (!String.IsNullOrEmpty(tooltip)) + //{ + // if (result.StartsWith("<a ")) + // { + // result = result.ToString().Insert(2, tooltip); + // } + // else if (result.StartsWith("<span ")) + // { + // result = result.ToString().Insert(5, tooltip); + // } + //} + + //#endregion + + //return result; + + string result = nb.ToString(); + + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<a".Length, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs index 1baaa07..9114cc8 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs @@ -1,79 +1,79 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: RenderBaseField.cs - * CreatedOn: 2013-05-18 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Data; -using System.Reflection; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// <summary> - /// ɱ༭еĻ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public abstract class RenderBaseField : GridColumn - { - #region Properties - - - private string _dataField = String.Empty; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶ")] - public string DataField - { - get - { - return _dataField; - } - set - { - _dataField = value; - } - } - - #endregion - - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: RenderBaseField.cs + * CreatedOn: 2013-05-18 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ɱ༭еĻ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class RenderBaseField : GridColumn + { + #region Properties + + + private string _dataField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataField + { + get + { + return _dataField; + } + set + { + _dataField = value; + } + } + + #endregion + + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs index ff7a45b..5626441 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs @@ -1,106 +1,116 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: RenderCheckField.cs - * CreatedOn: 2013-05-18 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Data; -using System.Reflection; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// <summary> - /// ɱ༭ѡ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class RenderCheckField : RenderBaseField - { - #region Properties - - - #endregion - - #region GetColumnValue - - internal override string GetColumnValue(GridRow row) - { - string text = String.Empty; - - if (!String.IsNullOrEmpty(DataField)) - { - object value = row.GetPropertyValue(DataField); - - if (value == null) - { - text = "false"; - } - else - { - text = value.ToString().ToLower(); - } - } - - return text; - } - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - if (Grid.AllowCellEditing) - { - OB.AddProperty("xtype", "checkcolumn"); - } - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - - - #endregion - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: RenderCheckField.cs + * CreatedOn: 2013-05-18 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ɱ༭ѡ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class RenderCheckField : RenderBaseField + { + #region Properties + + + #endregion + + #region GetColumnValue + + internal override object GetColumnValue(GridRow row) + { + bool isChecked = false; + + if (!String.IsNullOrEmpty(DataField)) + { + object value = row.GetPropertyValue(DataField); + + if (value == null || value == DBNull.Value || (value is String && String.IsNullOrEmpty(value.ToString()))) + { + // + } + else + { + isChecked = Convert.ToBoolean(value); + } + } + + return isChecked; + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (Grid.AllowCellEditing) + { + OB.AddProperty("xtype", "checkcolumn"); + + if (Grid.EnableAfterEditEvent) + { + string validateScript = "var args='AfterEdit$'+rowIndex+'$" + ColumnID + "';"; + validateScript += Grid.GetPostBackEventReference("#AfterEdit#").Replace("'#AfterEdit#'", "args"); + + //string checkchangeScript = String.Format("function(checkcolumn,rowIndex,checked){{{0}}}", validateScript); + //OB.Listeners.AddProperty("checkchange", checkchangeScript, true); + AddListener("checkchange", validateScript, "checkcolumn", "rowIndex", "checked"); + } + } + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs index 3ef4fb6..375fb15 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs @@ -1,375 +1,387 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: RenderField.cs - * CreatedOn: 2013-05-05 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Data; -using System.Reflection; -using System.Web.UI.WebControls; - - -namespace FineUI -{ - /// <summary> - /// ɱ༭ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class RenderField : RenderBaseField - { - #region Editor - - private GridColumnEditorCollection _editor; - - /// <summary> - /// Ԫ༭ؼ - /// </summary> - [Browsable(false)] - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - [Description("Ԫ༭ؼ")] - [Editor(typeof(GridColumnEditorEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual GridColumnEditorCollection Editor - { - get - { - if (_editor == null) - { - _editor = new GridColumnEditorCollection(this); - } - return _editor; - } - } - - - #endregion - - #region Properties - - private FieldType _fieldType = FieldType.Auto; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(FieldType.Auto)] - [Description("ֶ")] - public FieldType FieldType - { - get - { - return _fieldType; - } - set - { - _fieldType = value; - } - } - - - private Renderer _renderer = Renderer.None; - - /// <summary> - /// Ⱦ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Renderer.None)] - [Description("Ⱦ")] - public Renderer Renderer - { - get - { - return _renderer; - } - set - { - _renderer = value; - } - } - - private string _rendererArgument = String.Empty; - - /// <summary> - /// ȾIJ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ȾIJ")] - public string RendererArgument - { - get - { - return _rendererArgument; - } - set - { - _rendererArgument = value; - } - } - - - private string _rendererFunction = String.Empty; - - /// <summary> - /// ԶȾJavaScript - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ԶȾJavaScript")] - public string RendererFunction - { - get - { - return _rendererFunction; - } - set - { - _rendererFunction = value; - } - } - - - //private string _dateFormat = String.Empty; - - ///// <summary> - ///// ֶεĸʽַ - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("ֶεĸʽַ")] - //public string DateFormat - //{ - // get - // { - // return _dateFormat; - // } - // set - // { - // _dateFormat = value; - // } - //} - - - private string _nullDisplayText = String.Empty; - - /// <summary> - /// ݿnullֵĬΪַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ݿnullֵĬΪַ")] - public string NullDisplayText - { - get - { - return _nullDisplayText; - } - set - { - _nullDisplayText = value; - } - } - - - private bool _htmlEncode = true; - - /// <summary> - /// ʾ֮ǰHTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ʾ֮ǰHTML루ĬΪtrue")] - public bool HtmlEncode - { - get - { - return _htmlEncode; - } - set - { - _htmlEncode = value; - } - } - - - #endregion - - #region GetColumnValue - - internal override string GetColumnValue(GridRow row) - { - string text = String.Empty; - - if (!String.IsNullOrEmpty(DataField)) - { - object value = row.GetPropertyValue(DataField); - - if (value == null) - { - text = NullDisplayText; - } - else - { - if (FieldType == FieldType.Boolean) - { - text = value.ToString().ToLower(); - } - else if (FieldType == FieldType.Date) - { - // http://www.dotnetperls.com/datetime-format - DateTime date = DateTime.Now; - if (value.GetType() == typeof(DateTime)) - { - date = (DateTime)value; - } - else - { - date = DateTime.Parse(value.ToString()); - } - - // 2009-02-27T12:12:22 - text = date.ToString("s"); - int tIndex = text.IndexOf("T"); - if (tIndex >= 0) - { - text = text.Substring(0, tIndex) + "T00:00:00"; - } - - //text = date.ToString(RendererArgument); - } - else - { - text = value.ToString(); - } - - if (HtmlEncode) - { - text = HttpUtility.HtmlEncode(text); - } - } - } - - return text; - } - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - string renderer = GetRenderer(); - if (!String.IsNullOrEmpty(renderer)) - { - OB.AddProperty("renderer", renderer, true); - } - - - if (Grid.AllowCellEditing) - { - if (Editor.Count > 0) - { - OB.AddProperty("editor", Editor[0].XID, true); - } - - //if (FieldType == FieldType.Boolean) - //{ - // OB.AddProperty("xtype", "booleancolumn"); - //} - } - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - - private string GetRenderer() - { - if (!String.IsNullOrEmpty(RendererFunction)) - { - return RendererFunction; - } - - if (Renderer == Renderer.None) - { - return String.Empty; - } - - if (Renderer == Renderer.Date) - { - string argument = "yyyy-MM-dd"; - if (!String.IsNullOrEmpty(RendererArgument)) - { - argument = RendererArgument; - } - return String.Format("X.format.date('{0}')", ExtDateTimeConvertor.ConvertToExtDateFormat(argument)); - } - else if (Renderer == Renderer.Ellipsis) - { - string argument = "10"; - if (!String.IsNullOrEmpty(RendererArgument)) - { - argument = RendererArgument; - } - return String.Format("X.format.ellipsis({0})", argument); - } - else if (Renderer == Renderer.Number) - { - string argument = "0.00"; - if (!String.IsNullOrEmpty(RendererArgument)) - { - argument = RendererArgument; - } - return String.Format("X.format.number('{0}')", argument); - } - else - { - return String.Format("X.format.{0}", RendererName.GetName(Renderer)); - } - - } - - #endregion - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: RenderField.cs + * CreatedOn: 2013-05-05 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ɱ༭ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class RenderField : RenderBaseField + { + #region Editor + + private GridColumnEditorCollection _editor; + + /// <summary> + /// Ԫ༭ؼ + /// </summary> + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Description("Ԫ༭ؼ")] + [Editor(typeof(GridColumnEditorEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnEditorCollection Editor + { + get + { + if (_editor == null) + { + _editor = new GridColumnEditorCollection(this); + } + return _editor; + } + } + + + #endregion + + #region Properties + + private FieldType _fieldType = FieldType.Auto; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(FieldType.Auto)] + [Description("ֶ")] + public FieldType FieldType + { + get + { + return _fieldType; + } + set + { + _fieldType = value; + } + } + + + private Renderer _renderer = Renderer.None; + + /// <summary> + /// Ⱦ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Renderer.None)] + [Description("Ⱦ")] + public Renderer Renderer + { + get + { + return _renderer; + } + set + { + _renderer = value; + } + } + + private string _rendererArgument = String.Empty; + + /// <summary> + /// ȾIJ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ȾIJ")] + public string RendererArgument + { + get + { + return _rendererArgument; + } + set + { + _rendererArgument = value; + } + } + + + private string _rendererFunction = String.Empty; + + /// <summary> + /// ԶȾJavaScript + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ԶȾJavaScript")] + public string RendererFunction + { + get + { + return _rendererFunction; + } + set + { + _rendererFunction = value; + } + } + + + //private string _dateFormat = String.Empty; + + ///// <summary> + ///// ֶεĸʽַ + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("ֶεĸʽַ")] + //public string DateFormat + //{ + // get + // { + // return _dateFormat; + // } + // set + // { + // _dateFormat = value; + // } + //} + + + private string _nullDisplayText = String.Empty; + + /// <summary> + /// ݿnullֵĬΪַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ݿnullֵĬΪַ")] + public string NullDisplayText + { + get + { + return _nullDisplayText; + } + set + { + _nullDisplayText = value; + } + } + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + #endregion + + #region GetColumnValue + + internal override object GetColumnValue(GridRow row) + { + object result = String.Empty; + + if (!String.IsNullOrEmpty(DataField)) + { + object value = row.GetPropertyValue(DataField); + + if (value == null || value == DBNull.Value || (value is String && String.IsNullOrEmpty(value.ToString()))) + { + result = NullDisplayText; + } + else + { + if (FieldType == FieldType.Boolean) + { + result = Convert.ToBoolean(value); + } + else if (FieldType == FieldType.Int) + { + result = Convert.ToInt32(value); + } + else if (FieldType == FieldType.Float) + { + result = Convert.ToSingle(value); + } + else if (FieldType == FieldType.Date) + { + // http://www.dotnetperls.com/datetime-format + DateTime date = DateTime.Now; + if (value.GetType() == typeof(DateTime)) + { + date = (DateTime)value; + } + else + { + date = DateTime.Parse(value.ToString()); + } + + //// 2009-02-27T12:12:22 + //text = date.ToString("s"); + //int tIndex = text.IndexOf("T"); + //if (tIndex >= 0) + //{ + // text = text.Substring(0, tIndex) + "T00:00:00"; + //} + + result = date.ToString(RendererArgument); + } + else + { + result = value.ToString(); + + if (HtmlEncode) + { + result = HttpUtility.HtmlEncode(result.ToString()); + } + } + } + } + + return result; + } + + #endregion + + #region GetRenderer + + private string GetRenderer() + { + if (!String.IsNullOrEmpty(RendererFunction)) + { + return RendererFunction; + } + + if (Renderer == Renderer.None) + { + return String.Empty; + } + + if (Renderer == Renderer.Date) + { + string argument = "yyyy-MM-dd"; + if (!String.IsNullOrEmpty(RendererArgument)) + { + argument = RendererArgument; + } + return String.Format("F.format.dateRenderer('{0}')", DateUtil.ConvertToClientDateFormat(argument)); + } + else if (Renderer == Renderer.Ellipsis) + { + string argument = "10"; + if (!String.IsNullOrEmpty(RendererArgument)) + { + argument = RendererArgument; + } + return String.Format("F.format.ellipsisRenderer({0})", argument); + } + //else if (Renderer == Renderer.Number) + //{ + // string argument = "0.00"; + // if (!String.IsNullOrEmpty(RendererArgument)) + // { + // argument = RendererArgument; + // } + // return String.Format("F.format.number('{0}')", argument); + //} + else + { + return String.Format("F.format.{0}", RendererName.GetName(Renderer)); + } + + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + string renderer = GetRenderer(); + if (!String.IsNullOrEmpty(renderer)) + { + OB.AddProperty("renderer", renderer, true); + } + + + if (Grid.AllowCellEditing) + { + if (Editor.Count > 0) + { + OB.AddProperty("editor", Editor[0].XID, true); + } + + //if (FieldType == FieldType.Boolean) + //{ + // OB.AddProperty("xtype", "booleancolumn"); + //} + } + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs index 680d674..e36c869 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs @@ -1,144 +1,145 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: RowNumberField.cs - * CreatedOn: 2013-09-23 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Reflection; - - -namespace FineUI -{ - /// <summary> - /// ݰ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class RowNumberField : BaseField - { - #region Properties - - private bool _enableHeaderMenu = false; - /// <summary> - /// ñͷ˵ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ñͷ˵")] - public override bool EnableHeaderMenu - { - get - { - return _enableHeaderMenu; - } - set - { - _enableHeaderMenu = value; - } - } - - - private bool _allowHideColumn = false; - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿ")] - public override bool EnableColumnHide - { - get - { - return _allowHideColumn; - } - set - { - _allowHideColumn = value; - } - } - - - private bool _enablePagingNumber = false; - /// <summary> - /// Ƿ÷ҳк - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿ÷ҳк")] - public bool EnablePagingNumber - { - get - { - return _enablePagingNumber; - } - set - { - _enablePagingNumber = value; - } - } - - #endregion - - #region Methods - - internal override string GetColumnValue(GridRow row) - { - return String.Empty; - } - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - if (EnablePagingNumber) - { - OB.AddProperty("x_paging", true); - OB.AddProperty("x_paging_grid", Grid.ClientID); - } - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: RowNumberField.cs + * CreatedOn: 2013-09-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + + +namespace FineUI +{ + /// <summary> + /// ݰ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class RowNumberField : BaseField + { + #region Properties + + private bool _enableHeaderMenu = false; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ñͷ˵")] + public override bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _allowHideColumn = false; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool EnableColumnHide + { + get + { + return _allowHideColumn; + } + set + { + _allowHideColumn = value; + } + } + + + private bool _enablePagingNumber = false; + /// <summary> + /// Ƿ÷ҳк + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ÷ҳк")] + public bool EnablePagingNumber + { + get + { + return _enablePagingNumber; + } + set + { + _enablePagingNumber = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + return String.Empty; + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (EnablePagingNumber) + { + OB.AddProperty("f_paging", true); + OB.AddProperty("f_paging_grid", Grid.ClientID); + } + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs index 83bc8bd..90cb605 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs @@ -1,142 +1,219 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: TemplateField.cs - * CreatedOn: 2008-05-27 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Reflection; -using System.Web.UI.HtmlControls; -using System.IO; - - -namespace FineUI -{ - /// <summary> - /// ģ - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class TemplateField : BaseField - { - #region Properties - - private ITemplate _itemTemplate; - - /// <summary> - /// ģ - /// </summary> - [Browsable(false)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [TemplateInstance(TemplateInstance.Single)] - [TemplateContainer(typeof(GridRowControl))] - [Description("ģ")] - public virtual ITemplate ItemTemplate - { - get - { - return _itemTemplate; - } - set - { - _itemTemplate = value; - } - } - - - private bool _renderAsRowExpander = false; - - /// <summary> - /// ǷȾΪչ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ǷȾΪչ")] - public bool RenderAsRowExpander - { - get - { - return _renderAsRowExpander; - } - set - { - _renderAsRowExpander = value; - } - } - - #endregion - - #region GetColumnValue - - internal override string GetColumnValue(GridRow row) - { - GridRowControl control = row.TemplateContainers[ColumnIndex]; - - return String.Format("{0}{1}", Grid.TEMPLATE_PLACEHOLDER_PREFIX, control.ID); - } - - //public override string GetFieldType() - //{ - // return "string"; - //} - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) - { - JsObjectBuilder rowExpanderBuilder = new JsObjectBuilder(); - rowExpanderBuilder.AddProperty("rowBodyTpl", String.Format("Ext.create('Ext.XTemplate','{{{0}}}')", ColumnID), true); - rowExpanderBuilder.AddProperty("pluginId", String.Format("{0}_rowexpander", Grid.ClientID)); - - string jsContent = String.Format("var {0}=Ext.create('Ext.grid.plugin.RowExpander',{1});", XID, rowExpanderBuilder); - AddStartupScript(jsContent); - } - else - { - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: TemplateField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; +using System.Web.UI.HtmlControls; +using System.IO; + + +namespace FineUI +{ + /// <summary> + /// ģ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class TemplateField : BaseField + { + #region Properties + + private ITemplate _itemTemplate; + + /// <summary> + /// ģ + /// </summary> + [Browsable(false)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [TemplateInstance(TemplateInstance.Single)] + [TemplateContainer(typeof(GridTemplateContainer))] + [Description("ģ")] + public virtual ITemplate ItemTemplate + { + get + { + return _itemTemplate; + } + set + { + _itemTemplate = value; + } + } + + + private bool _renderAsRowExpander = false; + + /// <summary> + /// ǷȾΪչ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ǷȾΪչ")] + public bool RenderAsRowExpander + { + get + { + return _renderAsRowExpander; + } + set + { + _renderAsRowExpander = value; + } + } + + + private bool _expandOnDoubleClick = true; + /// <summary> + /// ˫չ۵չ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("˫չ۵չ")] + public bool ExpandOnDoubleClick + { + get + { + return _expandOnDoubleClick; + } + set + { + _expandOnDoubleClick = value; + } + } + + private bool _expandOnEnter = true; + /// <summary> + /// سչ۵չ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("سչ۵չ")] + public bool ExpandOnEnter + { + get + { + return _expandOnEnter; + } + set + { + _expandOnEnter = value; + } + } + + private bool _expandToSelectRow = false; + /// <summary> + /// ͼչ۵չʱѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ͼչ۵չʱѡ")] + public bool ExpandToSelectRow + { + get + { + return _expandToSelectRow; + } + set + { + _expandToSelectRow = value; + } + } + + + #endregion + + #region GetColumnValue + + internal override object GetColumnValue(GridRow row) + { + GridTemplateContainer control = row.TemplateContainers[ColumnIndex]; + + return String.Format("{0}{1}", Grid.TEMPLATE_PLACEHOLDER_PREFIX, control.ID); + } + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) + { + JsObjectBuilder rowExpanderBuilder = new JsObjectBuilder(); + rowExpanderBuilder.AddProperty("rowBodyTpl", String.Format("Ext.create('Ext.XTemplate','{{{0}}}')", ColumnID), true); + rowExpanderBuilder.AddProperty("pluginId", String.Format("{0}_rowexpander", Grid.ClientID)); + + if (!ExpandOnDoubleClick) + { + rowExpanderBuilder.AddProperty("expandOnDblClick", false); + } + + if (!ExpandOnEnter) + { + rowExpanderBuilder.AddProperty("expandOnEnter", false); + } + + if (ExpandToSelectRow) + { + rowExpanderBuilder.AddProperty("selectRowOnExpand", true); + } + + + string jsContent = String.Format("var {0}=Ext.create('Ext.grid.plugin.RowExpander',{1});", XID, rowExpanderBuilder); + AddGridColumnScript(jsContent); + + } + else + { + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs b/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs index 728a929..ede01b9 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs @@ -1,656 +1,657 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: WindowField.cs - * CreatedOn: 2008-06-03 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Reflection; - -using System.Collections.Generic; -using System.Web.UI.Design; -using System.Drawing.Design; - -namespace FineUI -{ - /// <summary> - /// - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - public class WindowField : BaseField - { - #region override - - internal override string InnerCls - { - get - { - return "box-grid-cell-inner-image"; - } - } - - private bool _enableHeaderMenu = false; - /// <summary> - /// ñͷ˵ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("ñͷ˵")] - public override bool EnableHeaderMenu - { - get - { - return _enableHeaderMenu; - } - set - { - _enableHeaderMenu = value; - } - } - - - private bool _allowHideColumn = false; - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("Ƿ")] - public override bool EnableColumnHide - { - get - { - return _allowHideColumn; - } - set - { - _allowHideColumn = value; - } - } - - #endregion - - #region Properties - - private bool _enabled = true; - - /// <summary> - /// Ƿ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("Ƿ")] - public override bool Enabled - { - get - { - return _enabled; - } - set - { - _enabled = value; - } - } - - - private string _windowID = String.Empty; - - /// <summary> - /// ӦĴؼID - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ӦĴؼID")] - public string WindowID - { - get - { - return _windowID; - } - set - { - _windowID = value; - } - } - - private string _dataWindowTitleField = String.Empty; - - /// <summary> - /// Ӧֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("Ӧֶ")] - public string DataWindowTitleField - { - get - { - return _dataWindowTitleField; - } - set - { - _dataWindowTitleField = value; - } - } - - - private string _dataWindowTitleFormatString = String.Empty; - - /// <summary> - /// Ӧֶθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("Ӧֶθʽַ")] - public string DataWindowTitleFormatString - { - get - { - return _dataWindowTitleFormatString; - } - set - { - _dataWindowTitleFormatString = value; - } - } - - - private string _dataTextField = String.Empty; - - /// <summary> - /// ֶ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶ")] - public string DataTextField - { - get - { - return _dataTextField; - } - set - { - _dataTextField = value; - } - } - - - private string _dataTextFormatString = String.Empty; - - /// <summary> - /// ֶθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ֶθʽַ")] - public string DataTextFormatString - { - get - { - return _dataTextFormatString; - } - set - { - _dataTextFormatString = value; - } - } - - - - private bool _htmlEncode = true; - - /// <summary> - /// ʾ֮ǰHTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ʾ֮ǰHTML루ĬΪtrue")] - public bool HtmlEncode - { - get - { - return _htmlEncode; - } - set - { - _htmlEncode = value; - } - } - - - private bool _htmlEncodeFormatString = true; - - /// <summary> - /// ǷӦDataFormatString֮HTML루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] - public bool HtmlEncodeFormatString - { - get - { - return _htmlEncodeFormatString; - } - set - { - _htmlEncodeFormatString = value; - } - } - - - - private string _dataIFrameUrlFields = String.Empty; - - /// <summary> - /// 󶨵IFrameֶַб - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("󶨵IFrameֶַб")] - public string DataIFrameUrlFields - { - get - { - return _dataIFrameUrlFields; - } - set - { - _dataIFrameUrlFields = value; - } - } - - private string _dataIFrameUrlFormatString = String.Empty; - - /// <summary> - /// 󶨵IFrameֶַθʽַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("󶨵IFrameֶַθʽַ")] - public string DataIFrameUrlFormatString - { - get - { - return _dataIFrameUrlFormatString; - } - set - { - _dataIFrameUrlFormatString = value; - } - } - - - private bool _urlEncode = true; - - /// <summary> - /// ÿ󶨵IFrameֶַνURL루ĬΪtrue - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("ÿ󶨵IFrameֶַνURL")] - public bool UrlEncode - { - get - { - return _urlEncode; - } - set - { - _urlEncode = value; - } - } - - - - private string _iframeUrl = String.Empty; - - /// <summary> - /// IFrameַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("IFrameַ")] - public string IFrameUrl - { - get - { - return _iframeUrl; - } - set - { - _iframeUrl = value; - } - } - - - private string _text = String.Empty; - - /// <summary> - /// ʾı - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ʾı")] - public string Text - { - get - { - return _text; - } - set - { - _text = value; - } - } - - private string _title = String.Empty; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("")] - public string Title - { - get - { - return _title; - } - set - { - _title = value; - } - } - - private Icon _icon = Icon.None; - - /// <summary> - /// ͼ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Icon.None)] - [Description("ͼ")] - public Icon Icon - { - get - { - return _icon; - } - set - { - _icon = value; - } - } - - private string _iconUrl = String.Empty; - - /// <summary> - /// ͼַ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ͼַ")] - [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] - public string IconUrl - { - get - { - return _iconUrl; - } - set - { - _iconUrl = value; - } - } - - #endregion - - #region Methods - - internal override string GetColumnValue(GridRow row) - { - HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); - - #region DataTextField - - if (!String.IsNullOrEmpty(DataTextField)) - { - object value = row.GetPropertyValue(DataTextField); - - //if (!String.IsNullOrEmpty(DataTextFormatString)) - //{ - // nb.InnerProperty = String.Format(DataTextFormatString, value); - //} - //else - //{ - // nb.InnerProperty = value.ToString(); - //} - string text = String.Empty; - if (value != null) - { - if (!String.IsNullOrEmpty(DataTextFormatString)) - { - text = String.Format(DataTextFormatString, value); - if (HtmlEncodeFormatString) - { - text = HttpUtility.HtmlEncode(text); - } - } - else - { - text = value.ToString(); - if (HtmlEncode) - { - text = HttpUtility.HtmlEncode(text); - } - } - } - - nb.InnerProperty = text; - } - else - { - nb.InnerProperty = Text; - } - - #endregion - - if (Enabled) - { - string url = "#"; - - #region DataIFrameUrlFields - - string hrefOriginal = String.Empty; - - if (!String.IsNullOrEmpty(DataIFrameUrlFields)) - { - string[] fields = DataIFrameUrlFields.Trim().TrimEnd(',').Split(','); - - List<object> fieldValues = new List<object>(); - foreach (string field in fields) - { - if (!String.IsNullOrEmpty(field)) - { - //fieldValues.Add(row.GetPropertyValue(field)); - object fieldObj = row.GetPropertyValue(field); - - string fieldValue = String.Empty; - if (fieldObj != null) - { - fieldValue = fieldObj.ToString(); - if (UrlEncode) - { - fieldValue = HttpUtility.UrlEncode(fieldValue); - } - } - fieldValues.Add(fieldValue); - } - } - - - if (!String.IsNullOrEmpty(DataIFrameUrlFormatString)) - { - hrefOriginal = String.Format(DataIFrameUrlFormatString, fieldValues.ToArray()); - } - else - { - if (fieldValues.Count > 0) - { - hrefOriginal = fieldValues[0].ToString(); - } - } - } - else - { - hrefOriginal = IFrameUrl; - } - - url = Grid.ResolveUrl(hrefOriginal); - - #endregion - - string title = String.Empty; - - #region DataTextField - - if (!String.IsNullOrEmpty(DataWindowTitleField)) - { - object value = row.GetPropertyValue(DataWindowTitleField); - - if (value != null) - { - if (!String.IsNullOrEmpty(DataWindowTitleFormatString)) - { - title = String.Format(DataWindowTitleFormatString, value); - } - else - { - title = value.ToString(); - } - } - } - else - { - title = Title; - } - - #endregion - - #region WindowID - - if (!String.IsNullOrEmpty(WindowID)) - { - Window window = ControlUtil.FindControl(Grid.Page, WindowID) as Window; - if (window != null) - { - nb.SetProperty("href", "javascript:;"); - nb.SetProperty("onclick", String.Format("javascript:{0}", window.GetShowReference(url, title))); - //nb.SetProperty("href", String.Format("javascript:X.{0}_show('{1}','{2}');", window.ClientID, url, title.Replace("'", "\""))); - } - } - - #endregion - - } - else - { - nb.SetProperty("class", "x-item-disabled"); - nb.SetProperty("disabled", "disabled"); - } - - string tooltip = GetTooltipString(row); - - #region Icon IconUrl - - string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); - if (!String.IsNullOrEmpty(resolvedIconUrl)) - { - nb.InnerProperty = String.Format("<img src=\"{0}\" {1} />", resolvedIconUrl, tooltip) + nb.InnerProperty; - } - - #endregion - - //string result2 = nb.ToString(); - - //#region Tooltip - - - //if (!String.IsNullOrEmpty(tooltip)) - //{ - // result2 = result2.ToString().Insert(2, tooltip); - //} - - //#endregion - - //return result2; - - string result = nb.ToString(); - - if (!String.IsNullOrEmpty(tooltip)) - { - result = result.ToString().Insert("<a".Length, tooltip); - } - - return result; - } - - - //public override string GetFieldType() - //{ - // return "string"; - //} - - #endregion - - #region OnFirstPreRender - - /// <summary> - /// Ⱦ HTML ֮ǰãҳһμػͨط - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: WindowField.cs + * CreatedOn: 2008-06-03 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + +using System.Collections.Generic; +using System.Web.UI.Design; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class WindowField : BaseField + { + #region override + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + private bool _enableHeaderMenu = false; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ñͷ˵")] + public override bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _allowHideColumn = false; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool EnableColumnHide + { + get + { + return _allowHideColumn; + } + set + { + _allowHideColumn = value; + } + } + + #endregion + + #region Properties + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + + private string _windowID = String.Empty; + + /// <summary> + /// ӦĴؼID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӦĴؼID")] + public string WindowID + { + get + { + return _windowID; + } + set + { + _windowID = value; + } + } + + private string _dataWindowTitleField = String.Empty; + + /// <summary> + /// Ӧֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("Ӧֶ")] + public string DataWindowTitleField + { + get + { + return _dataWindowTitleField; + } + set + { + _dataWindowTitleField = value; + } + } + + + private string _dataWindowTitleFormatString = String.Empty; + + /// <summary> + /// Ӧֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("Ӧֶθʽַ")] + public string DataWindowTitleFormatString + { + get + { + return _dataWindowTitleFormatString; + } + set + { + _dataWindowTitleFormatString = value; + } + } + + + private string _dataTextField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataTextField + { + get + { + return _dataTextField; + } + set + { + _dataTextField = value; + } + } + + + private string _dataTextFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataTextFormatString + { + get + { + return _dataTextFormatString; + } + set + { + _dataTextFormatString = value; + } + } + + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + private bool _htmlEncodeFormatString = true; + + /// <summary> + /// ǷӦDataFormatString֮HTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncodeFormatString; + } + set + { + _htmlEncodeFormatString = value; + } + } + + + + private string _dataIFrameUrlFields = String.Empty; + + /// <summary> + /// 󶨵IFrameֶַб + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("󶨵IFrameֶַб")] + public string DataIFrameUrlFields + { + get + { + return _dataIFrameUrlFields; + } + set + { + _dataIFrameUrlFields = value; + } + } + + private string _dataIFrameUrlFormatString = String.Empty; + + /// <summary> + /// 󶨵IFrameֶַθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("󶨵IFrameֶַθʽַ")] + public string DataIFrameUrlFormatString + { + get + { + return _dataIFrameUrlFormatString; + } + set + { + _dataIFrameUrlFormatString = value; + } + } + + + private bool _urlEncode = true; + + /// <summary> + /// ÿ󶨵IFrameֶַνURL루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ÿ󶨵IFrameֶַνURL")] + public bool UrlEncode + { + get + { + return _urlEncode; + } + set + { + _urlEncode = value; + } + } + + + + private string _iframeUrl = String.Empty; + + /// <summary> + /// IFrameַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("IFrameַ")] + public string IFrameUrl + { + get + { + return _iframeUrl; + } + set + { + _iframeUrl = value; + } + } + + + private string _text = String.Empty; + + /// <summary> + /// ʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _title = String.Empty; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string Title + { + get + { + return _title; + } + set + { + _title = value; + } + } + + private Icon _icon = Icon.None; + + /// <summary> + /// ͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("ͼ")] + public Icon Icon + { + get + { + return _icon; + } + set + { + _icon = value; + } + } + + private string _iconUrl = String.Empty; + + /// <summary> + /// ͼַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼַ")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + return _iconUrl; + } + set + { + _iconUrl = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); + + #region DataTextField + + if (!String.IsNullOrEmpty(DataTextField)) + { + object value = row.GetPropertyValue(DataTextField); + + //if (!String.IsNullOrEmpty(DataTextFormatString)) + //{ + // nb.InnerProperty = String.Format(DataTextFormatString, value); + //} + //else + //{ + // nb.InnerProperty = value.ToString(); + //} + string text = String.Empty; + if (value != null) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + text = String.Format(DataTextFormatString, value); + if (HtmlEncodeFormatString) + { + text = HttpUtility.HtmlEncode(text); + } + } + else + { + text = value.ToString(); + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + } + + nb.InnerProperty = text; + } + else + { + nb.InnerProperty = Text; + } + + #endregion + + if (Enabled) + { + string url = "#"; + + #region DataIFrameUrlFields + + string hrefOriginal = String.Empty; + + if (!String.IsNullOrEmpty(DataIFrameUrlFields)) + { + string[] fields = DataIFrameUrlFields.Trim().TrimEnd(',').Split(','); + + List<object> fieldValues = new List<object>(); + foreach (string field in fields) + { + if (!String.IsNullOrEmpty(field)) + { + //fieldValues.Add(row.GetPropertyValue(field)); + object fieldObj = row.GetPropertyValue(field); + + string fieldValue = String.Empty; + if (fieldObj != null) + { + fieldValue = fieldObj.ToString(); + if (UrlEncode) + { + fieldValue = HttpUtility.UrlEncode(fieldValue); + } + } + fieldValues.Add(fieldValue); + } + } + + + if (!String.IsNullOrEmpty(DataIFrameUrlFormatString)) + { + hrefOriginal = String.Format(DataIFrameUrlFormatString, fieldValues.ToArray()); + } + else + { + if (fieldValues.Count > 0) + { + hrefOriginal = fieldValues[0].ToString(); + } + } + } + else + { + hrefOriginal = IFrameUrl; + } + + url = Grid.ResolveUrl(hrefOriginal); + + #endregion + + string title = String.Empty; + + #region DataTextField + + if (!String.IsNullOrEmpty(DataWindowTitleField)) + { + object value = row.GetPropertyValue(DataWindowTitleField); + + if (value != null) + { + if (!String.IsNullOrEmpty(DataWindowTitleFormatString)) + { + title = String.Format(DataWindowTitleFormatString, value); + } + else + { + title = value.ToString(); + } + } + } + else + { + title = Title; + } + + #endregion + + #region WindowID + + if (!String.IsNullOrEmpty(WindowID)) + { + Window window = ControlUtil.FindControl(Grid.Page, WindowID) as Window; + if (window != null) + { + nb.SetProperty("href", "javascript:;"); + nb.SetProperty("onclick", String.Format("javascript:{0}", window.GetShowReference(url, title))); + //nb.SetProperty("href", String.Format("javascript:X.{0}_show('{1}','{2}');", window.ClientID, url, title.Replace("'", "\""))); + } + } + + #endregion + + } + else + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + } + + string tooltip = GetTooltipString(row); + + #region Icon IconUrl + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + nb.InnerProperty = String.Format("<img src=\"{0}\" {1} />", resolvedIconUrl, tooltip) + nb.InnerProperty; + } + + #endregion + + //string result2 = nb.ToString(); + + //#region Tooltip + + + //if (!String.IsNullOrEmpty(tooltip)) + //{ + // result2 = result2.ToString().Insert(2, tooltip); + //} + + //#endregion + + //return result2; + + string result = nb.ToString(); + + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<a".Length, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs b/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs index 02f6b03..81d527f 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs @@ -1,147 +1,147 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridGroupColumn.cs - * CreatedOn: 2012-05-29 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design.Serialization; -using System.Text; -using System.Xml; -using System.Web; -using System.Web.UI; -using System.Globalization; -using System.Data; -using System.Reflection; -using System.Web.UI.WebControls; -using System.ComponentModel.Design; - - -namespace FineUI -{ - /// <summary> - /// - /// </summary> - [ToolboxItem(false)] - [ParseChildren(true)] - [PersistChildren(false)] - [DefaultProperty("HeaderText")] - public class GridGroupColumn : ControlBase - { - #region Properties - - - private string _headerText = String.Empty; - - /// <summary> - /// ʾ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("ʾ")] - public string HeaderText - { - get - { - return _headerText; - } - set - { - _headerText = value; - } - } - - private TextAlign _textalign = TextAlign.Left; - - /// <summary> - /// ıλ - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(TextAlign.Left)] - [Description("ıλ")] - public TextAlign TextAlign - { - get - { - return _textalign; - } - set - { - _textalign = value; - } - } - - - #endregion - - #region Columns/Rows - - private GridGroupColumnCollection _groupColumns; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual GridGroupColumnCollection GroupColumns - { - get - { - if (_groupColumns == null) - { - _groupColumns = new GridGroupColumnCollection(this); - } - return _groupColumns; - } - } - - - private GridColumnCollection _columns; - - /// <summary> - /// - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] - public virtual GridColumnCollection Columns - { - get - { - if (_columns == null) - { - _columns = new GridColumnCollection(this); - } - return _columns; - } - } - - #endregion - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridGroupColumn.cs + * CreatedOn: 2012-05-29 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; +using System.ComponentModel.Design; + + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + [DefaultProperty("HeaderText")] + public class GridGroupColumn : ControlBase + { + #region Properties + + + private string _headerText = String.Empty; + + /// <summary> + /// ʾ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾ")] + public string HeaderText + { + get + { + return _headerText; + } + set + { + _headerText = value; + } + } + + private TextAlign _textalign = TextAlign.Left; + + /// <summary> + /// ıλ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TextAlign.Left)] + [Description("ıλ")] + public TextAlign TextAlign + { + get + { + return _textalign; + } + set + { + _textalign = value; + } + } + + + #endregion + + #region Columns/Rows + + private GridGroupColumnCollection _groupColumns; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridGroupColumnCollection GroupColumns + { + get + { + if (_groupColumns == null) + { + _groupColumns = new GridGroupColumnCollection(this); + } + return _groupColumns; + } + } + + + private GridColumnCollection _columns; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnCollection Columns + { + get + { + if (_columns == null) + { + _columns = new GridColumnCollection(this); + } + return _columns; + } + } + + #endregion + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs b/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs index 6194663..87d6b74 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs @@ -1,104 +1,104 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridGroupColumnCollection.cs - * CreatedOn: 2012-05-29 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Xml; -using System.Text; -using System.Collections; -using System.ComponentModel; -using System.Collections.ObjectModel; - - -namespace FineUI -{ - /// <summary> - /// м - /// </summary> - public class GridGroupColumnCollection : BaseCollection<GridGroupColumn> - { - /// <summary> - /// 캯 - /// </summary> - /// <param name="parent">ؼʵ</param> - public GridGroupColumnCollection(ControlBase parent) - : base(parent) - { - - } - - /* - private Grid _grid; - - /// <summary> - /// 캯 - /// </summary> - /// <param name="grid">ʵ</param> - public GridGroupColumnCollection(Grid grid) - { - _grid = grid; - } - - protected override void InsertItem(int index, GridGroupColumn item) - { - item.Grid = _grid; - - if (_grid != null) - { - ResolveChildren(item); - } - - base.InsertItem(index, item); - } - - - - /// <summary> - /// ÿӽڵGridʵ - /// </summary> - /// <param name="node"></param> - private void ResolveChildren(GridGroupColumn column) - { - if (column.Columns.Count > 0) - { - foreach (GridColumn subColumn in column.Columns) - { - _grid.AllColumnsInternal.Add(subColumn); - } - } - else if(column.GroupColumns.Count > 0) - { - foreach (GridGroupColumn subColumn in column.GroupColumns) - { - ResolveChildren(subColumn); - } - } - } - - */ - - } -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridGroupColumnCollection.cs + * CreatedOn: 2012-05-29 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Xml; +using System.Text; +using System.Collections; +using System.ComponentModel; +using System.Collections.ObjectModel; + + +namespace FineUI +{ + /// <summary> + /// м + /// </summary> + public class GridGroupColumnCollection : BaseCollection<GridGroupColumn> + { + /// <summary> + /// 캯 + /// </summary> + /// <param name="parent">ؼʵ</param> + public GridGroupColumnCollection(ControlBase parent) + : base(parent) + { + + } + + /* + private Grid _grid; + + /// <summary> + /// 캯 + /// </summary> + /// <param name="grid">ʵ</param> + public GridGroupColumnCollection(Grid grid) + { + _grid = grid; + } + + protected override void InsertItem(int index, GridGroupColumn item) + { + item.Grid = _grid; + + if (_grid != null) + { + ResolveChildren(item); + } + + base.InsertItem(index, item); + } + + + + /// <summary> + /// ÿӽڵGridʵ + /// </summary> + /// <param name="node"></param> + private void ResolveChildren(GridGroupColumn column) + { + if (column.Columns.Count > 0) + { + foreach (GridColumn subColumn in column.Columns) + { + _grid.AllColumnsInternal.Add(subColumn); + } + } + else if(column.GroupColumns.Count > 0) + { + foreach (GridGroupColumn subColumn in column.GroupColumns) + { + ResolveChildren(subColumn); + } + } + } + + */ + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs b/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs index 478f7e7..4a30cd3 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs @@ -1,542 +1,438 @@ -#region Comment - -/* - * Project FineUI - * - * FileName: GridRow.cs - * CreatedOn: 2008-05-19 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Data; -using System.Reflection; -using System.ComponentModel; -using System.Web.UI; -using System.Collections.Generic; -using System.Text.RegularExpressions; -using System.Web.UI.WebControls; - -using Newtonsoft.Json.Linq; -using System.Collections.ObjectModel; - -namespace FineUI -{ - /// <summary> - /// - /// </summary> - [ToolboxItem(false)] - public class GridRow //: WebControl - { - #region Constructor - - /// <summary> - /// 캯 - /// </summary> - public GridRow() - { - - } - - /// <summary> - /// 캯 - /// </summary> - /// <param name="grid">ʵ</param> - /// <param name="dataItem">жӦԴڻطʱΪnull</param> - /// <param name="rowIndex"></param> - public GridRow(Grid grid, object dataItem, int rowIndex) - { - _grid = grid; - _dataItem = dataItem; - _rowIndex = rowIndex; - } - - #endregion - - #region Grid/DataItem/RowIndex - - private Grid _grid; - - /// <summary> - /// ʵ - /// </summary> - public Grid Grid - { - get - { - return _grid; - } - } - - private object _dataItem = null; - - /// <summary> - /// жӦԴά״̬ - /// </summary> - public object DataItem - { - get { return _dataItem; } - set { _dataItem = value; } - } - - - private int _rowIndex = 0; - - /// <summary> - /// ڼ - /// </summary> - public int RowIndex - { - get - { - return _rowIndex; - } - set - { - _rowIndex = value; - } - } - - - #endregion - - #region Properties - - private string[] _values = null; - - /// <summary> - /// е״̬Ϣ - /// </summary> - public string[] Values - { - get - { - return _values; - } - set - { - _values = value; - } - } - - private object[] _dataKeys = null; - - /// <summary> - /// DataKeyNamesֶεֵ - /// </summary> - public object[] DataKeys - { - get - { - return _dataKeys; - } - set - { - _dataKeys = value; - } - } - - private object[] _states = null; - - /// <summary> - /// ǹԣCheckBoxFieldͨGetCheckedState - /// </summary> - internal object[] States - { - get - { - return _states; - } - set - { - _states = value; - } - } - - //private object[] _extraValues = null; - ///// <summary> - ///// ҪֵCheckBoxFieldҪǷѡе״̬ - ///// </summary> - //internal object[] ExtraValues - //{ - // get - // { - // return _extraValues; - // } - // set - // { - // _extraValues = value; - // } - //} - - #endregion - - #region ToShortStates/FromShortStates - - /// <summary> - /// ǰ״̬б - /// </summary> - /// <returns></returns> - internal object[] ToShortStates() - { - List<object> shortStates = new List<object>(); - Collection<GridColumn> columns = _grid.AllColumns; - for (int i = 0, count = columns.Count; i < count; i++) - { - if (columns[i].PersistState) - { - shortStates.Add(States[i]); - } - } - return shortStates.ToArray(); - } - - /// <summary> - /// ָǰ״̬бͬʱӦValuesֵ - /// </summary> - /// <param name="shortStates"></param> - internal void FromShortStates(object[] shortStates) - { - Collection<GridColumn> columns = _grid.AllColumns; - States = new object[columns.Count]; - int shortStateIndex = 0; - for (int i = 0, count = columns.Count; i < count; i++) - { - GridColumn column = columns[i]; - if (column.PersistState) - { - object state = shortStates[shortStateIndex++]; - if (state is JValue) - { - States[i] = (state as JValue).Value; - } - else - { - States[i] = state; - } - - - UpdateValuesAt(i); - } - } - } - - - /// <summary> - /// µǰijеȾHTML - /// </summary> - /// <param name="columnIndex"></param> - internal void UpdateValuesAt(int columnIndex) - { - Values[columnIndex] = RemoveNewLine(_grid.AllColumns[columnIndex].GetColumnValue(this)); - } - - #endregion - - #region TemplateContainers - - - private GridRowControl[] _templateContainers = null; - - /// <summary> - /// ģпؼбһ͵Ϊ[GridRowControl, null, null, GridRowControl, null, null, null, null, null] - /// </summary> - public GridRowControl[] TemplateContainers - { - get - { - return _templateContainers; - } - set - { - _templateContainers = value; - } - } - - /// <summary> - /// ģпؼбݰʱԶÿģпؼIDطʱXStateлطģпؼID - /// </summary> - public void InitTemplateContainers() - { - Collection<GridColumn> columns = _grid.AllColumns; - TemplateContainers = new GridRowControl[columns.Count]; - - for (int i = 0, count = columns.Count; i < count; i++) - { - GridColumn column = columns[i]; - if (column is TemplateField) - { - TemplateField field = column as TemplateField; - GridRowControl control = new GridRowControl(DataItem, RowIndex); - // ָIDԶ ct123 ΨһID - //control.ID = String.Format("c{0}r{1}", column.ColumnIndex, RowIndex); - - if (DataItem == null) - { - // طʱָXState׶Σݰ󶨽׶ΣValuesжȡģеķIDڵһμʱԶɵģ - string fieldValue = Values[i]; - if (fieldValue.StartsWith(Grid.TEMPLATE_PLACEHOLDER_PREFIX)) - { - control.ID = fieldValue.Substring(Grid.TEMPLATE_PLACEHOLDER_PREFIX.Length); - } - } - - field.ItemTemplate.InstantiateIn(control); - - _grid.Controls.Add(control); - TemplateContainers[column.ColumnIndex] = control; - - } - - } - } - - #endregion - - #region DataBindRow - - ///// <summary> - ///// ӿؼ - ///// </summary> - //protected override void DataBindChildren() - //{ - // base.DataBindChildren(); - - // DataBindRow(); - //} - - /// <summary> - /// еֵ - /// </summary> - internal void DataBindRow() - { - foreach (GridRowControl tplCtrl in TemplateContainers) - { - if (tplCtrl != null) - { - tplCtrl.DataBind(); - } - } - - - Collection<GridColumn> columns = _grid.AllColumns; - - // ÿеֵ - Values = new string[columns.Count]; - States = new object[columns.Count]; - - for (int i = 0, count = columns.Count; i < count; i++) - { - GridColumn column = columns[i]; - Values[i] = RemoveNewLine(column.GetColumnValue(this)); - - if (column.PersistState) - { - States[i] = column.GetColumnState(this); - } - } - - // DataKeysֵ - if (_grid.DataKeyNames != null) - { - string[] keyNames = _grid.DataKeyNames; - DataKeys = new object[keyNames.Length]; - for (int j = 0, count = keyNames.Length; j < count; j++) - { - DataKeys[j] = GetPropertyValue(keyNames[j]); - } - } - } - - - internal object GetPropertyValue(string propertyName) - { - return ObjectUtil.GetPropertyValue(DataItem, propertyName); - } - - private string RemoveNewLine(string columnValue) - { - // ɾHTMLе "\r\n " - return Regex.Replace(columnValue, "\r?\n\\s*", ""); - } - - #endregion - - #region FindControl - - /// <summary> - /// ұڵĿؼ - /// </summary> - /// <param name="id"></param> - /// <returns></returns> - public Control FindControl(string id) - { - foreach (GridRowControl control in TemplateContainers) - { - if (control != null) - { - Control found; - if (control.ID == id) - { - found = control; - } - else - { - found = control.FindControl(id); - } - - if (found != null) - { - return found; - } - } - } - - return null; - } - - #endregion - - #region old code - - ///// <summary> - ///// ȡԵֵ - ///// </summary> - ///// <param name="rowObj"></param> - ///// <param name="propertyName"></param> - ///// <returns></returns> - //public object GetPropertyValue(string propertyName) - //{ - // object rowObj = _dataItem; - // object result = null; - - // try - // { - // if (rowObj is DataRow) - // { - // result = (rowObj as DataRow)[propertyName]; - // } - // else - // { - // result = ObjectUtil.GetPropertyValueFormObject(rowObj, propertyName); - // } - // } - // catch (Exception) - // { - // // Ҳ - // } - - // return result; - //} - - - - - #endregion - - #region old code - - ///// <summary> - ///// Returns a value from the item indexed by the field name or index. - ///// </summary> - ///// <param name="obj">Field name or numeric index.</param> - ///// <returns>Cell value</returns> - //public object this[object obj] - //{ - // get - // { - // if (obj is string) - // { - // if (_columns != null && _values != null) - // { - // int iColumnIndex = _columns.IndexOf((string)obj); - // if (iColumnIndex >= 0) - // { - // return _values[iColumnIndex]; - // } - // else - // { - // return null; - // } - // } - // else - // { - // return null; - // } - // } - // else if (obj is int) - // { - // return _values[(int)obj]; - // } - // else - // { - // throw new ArgumentException("Only a string (field name) or integer index is permitted."); - // } - // } - // set - // { - // if (obj is string) - // { - // if (_columns != null && _values != null) - // { - // _values[_columns.IndexOf((string)obj)] = value; - // } - // } - // else if (obj is int) - // { - // _values[(int)obj] = value; - // } - // else - // { - // throw new ArgumentException("Only a string (column name) or int parameter are permitted."); - // } - // } - //} - - - - ///// <summary> - ///// Returns whether this item equals the passed-in item. - ///// </summary> - ///// <param name="o">A GridItem.</param> - ///// <returns>Whether this item equals the passed-in item.</returns> - //public override bool Equals(object o) - //{ - // if (o is GridItem && o != null) - // { - // GridItem other = (GridItem)o; - - // for (int i = 0; i < _values.Length; i++) - // { - // if (!Object.Equals(this[i], other[i])) - // { - // return false; - // } - // } - - // return true; - // } - - // return false; - //} - - #endregion - - } -} - - - +#region Comment + +/* + * Project FineUI + * + * FileName: GridRow.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Web.UI.WebControls; + +using Newtonsoft.Json.Linq; +using System.Collections.ObjectModel; + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + public class GridRow // : WebControl + { + #region Constructor + + /// <summary> + /// 캯 + /// </summary> + public GridRow() + { + + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="grid">ʵ</param> + /// <param name="dataItem">жӦԴڻطʱΪnull</param> + /// <param name="rowIndex"></param> + public GridRow(Grid grid, object dataItem, int rowIndex) + { + _grid = grid; + _dataItem = dataItem; + _rowIndex = rowIndex; + } + + #endregion + + #region Grid/DataItem/RowIndex + + private Grid _grid; + + /// <summary> + /// ʵ + /// </summary> + public Grid Grid + { + get + { + return _grid; + } + } + + private object _dataItem = null; + + /// <summary> + /// жӦԴά״̬ + /// </summary> + public object DataItem + { + get { return _dataItem; } + set { _dataItem = value; } + } + + + private int _rowIndex = 0; + + /// <summary> + /// ڼ + /// </summary> + public int RowIndex + { + get + { + return _rowIndex; + } + set + { + _rowIndex = value; + } + } + + + #endregion + + #region Properties + + private object[] _values = null; + + /// <summary> + /// е״̬Ϣ + /// </summary> + public object[] Values + { + get + { + return _values; + } + set + { + _values = value; + } + } + + private object[] _dataKeys = null; + + /// <summary> + /// DataKeyNamesֶεֵ + /// </summary> + public object[] DataKeys + { + get + { + return _dataKeys; + } + set + { + _dataKeys = value; + } + } + + private object[] _states = null; + + /// <summary> + /// ǹԣCheckBoxFieldͨGetCheckedState + /// </summary> + internal object[] States + { + get + { + return _states; + } + set + { + _states = value; + } + } + + //private object[] _extraValues = null; + ///// <summary> + ///// ҪֵCheckBoxFieldҪǷѡе״̬ + ///// </summary> + //internal object[] ExtraValues + //{ + // get + // { + // return _extraValues; + // } + // set + // { + // _extraValues = value; + // } + //} + + #endregion + + #region ToShortStates/FromShortStates + + /// <summary> + /// ǰ״̬б + /// </summary> + /// <returns></returns> + internal object[] ToShortStates() + { + List<object> shortStates = new List<object>(); + Collection<GridColumn> columns = _grid.AllColumns; + for (int i = 0, count = columns.Count; i < count; i++) + { + if (columns[i].PersistState) + { + shortStates.Add(States[i]); + } + } + return shortStates.ToArray(); + } + + /// <summary> + /// ָǰ״̬бͬʱӦValuesֵ + /// </summary> + /// <param name="shortStates"></param> + internal void FromShortStates(object[] shortStates) + { + Collection<GridColumn> columns = _grid.AllColumns; + States = new object[columns.Count]; + int shortStateIndex = 0; + for (int i = 0, count = columns.Count; i < count; i++) + { + GridColumn column = columns[i]; + if (column.PersistState) + { + object state = shortStates[shortStateIndex++]; + if (state is JValue) + { + States[i] = (state as JValue).Value; + } + else + { + States[i] = state; + } + + + UpdateValuesAt(i); + } + } + } + + + /// <summary> + /// µǰijеȾHTML + /// </summary> + /// <param name="columnIndex"></param> + internal void UpdateValuesAt(int columnIndex) + { + Values[columnIndex] = _grid.AllColumns[columnIndex].GetColumnValue(this); + } + + #endregion + + #region TemplateContainers + + + private GridTemplateContainer[] _templateContainers = null; + + /// <summary> + /// ģпؼбһ͵Ϊ[GridRowControl, null, null, GridRowControl, null, null, null, null, null] + /// </summary> + public GridTemplateContainer[] TemplateContainers + { + get + { + return _templateContainers; + } + set + { + _templateContainers = value; + } + } + + /// <summary> + /// ģпؼбݰʱԶÿģпؼIDطʱFStateлطģпؼID + /// </summary> + public void InitTemplateContainers() + { + Collection<GridColumn> columns = _grid.AllColumns; + TemplateContainers = new GridTemplateContainer[columns.Count]; + + for (int i = 0, count = columns.Count; i < count; i++) + { + GridColumn column = columns[i]; + if (column is TemplateField) + { + TemplateField field = column as TemplateField; + GridTemplateContainer control = new GridTemplateContainer(DataItem, RowIndex); + + + // ָIDԶ ct123 ΨһID + //control.ID = String.Format("c{0}r{1}", column.ColumnIndex, RowIndex); + + if (DataItem == null) + { + // طʱָFState׶Σݰ󶨽׶ΣValuesжȡģеķIDڵһμʱԶɵģ + string fieldValue = Values[i].ToString(); + if (fieldValue.StartsWith(Grid.TEMPLATE_PLACEHOLDER_PREFIX)) + { + control.ID = fieldValue.Substring(Grid.TEMPLATE_PLACEHOLDER_PREFIX.Length); + } + } + + + + field.ItemTemplate.InstantiateIn(control); + + _grid.Controls.Add(control); + TemplateContainers[column.ColumnIndex] = control; + + + } + + } + } + + #endregion + + #region DataBindRow + + ///// <summary> + ///// ӿؼ + ///// </summary> + //protected override void DataBindChildren() + //{ + // base.DataBindChildren(); + + // DataBindRow(); + //} + + /// <summary> + /// еֵ + /// </summary> + internal void DataBindRow() + { + foreach (GridTemplateContainer tplCtrl in TemplateContainers) + { + if (tplCtrl != null) + { + tplCtrl.DataBind(); + } + } + + + Collection<GridColumn> columns = _grid.AllColumns; + + // ÿеֵ + Values = new object[columns.Count]; + States = new object[columns.Count]; + + for (int i = 0, count = columns.Count; i < count; i++) + { + GridColumn column = columns[i]; + Values[i] = column.GetColumnValue(this); + + if (column.PersistState) + { + States[i] = column.GetColumnState(this); + } + } + + // DataKeysֵ + if (_grid.DataKeyNames != null) + { + string[] keyNames = _grid.DataKeyNames; + DataKeys = new object[keyNames.Length]; + for (int j = 0, count = keyNames.Length; j < count; j++) + { + string keyName = keyNames[j]; + + if (_grid.AllowCellEditing) + { + // Ԫ༭DataKeysֵͳʹжFieldType + // ȷûڿͻ޸DataKeyNamesжֵͬʱGridLoadPostDataиֵ + if (_grid.cellEditingDataKeyNameField.ContainsKey(keyName)) + { + DataKeys[j] = _grid.cellEditingDataKeyNameField[keyName].GetColumnValue(this); + } + } + + if (DataKeys[j] == null) + { + DataKeys[j] = GetPropertyValue(keyName); + } + } + } + } + + + internal object GetPropertyValue(string propertyName) + { + return ObjectUtil.GetPropertyValue(DataItem, propertyName); + } + + private string RemoveNewLine(string columnValue) + { + // ɾHTMLе "\r\n " + return Regex.Replace(columnValue, "\r?\n\\s*", ""); + } + + #endregion + + #region FindControl + + /// <summary> + /// ұڵĿؼ + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + public Control FindControl(string id) + { + foreach (GridTemplateContainer control in TemplateContainers) + { + if (control != null) + { + Control found; + if (control.ID == id) + { + found = control; + } + else + { + found = control.FindControl(id); + } + + if (found != null) + { + return found; + } + } + } + + return null; + } + + #endregion + + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs b/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs index 24efaec..02b6d9a 100644 --- a/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs +++ b/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs @@ -1,46 +1,46 @@ - -#region Comment - -/* - * Project FineUI - * - * FileName: GridRowCollection.cs - * CreatedOn: 2008-05-19 - * CreatedBy: 30372245@qq.com - * - * - * Description - * -> - * - * History - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections; -using System.Data; -using System.Collections.ObjectModel; -using System.Web.UI; - - -namespace FineUI -{ - /// <summary> - /// пؼ - /// </summary> - public class GridRowCollection : Collection<GridRow> - { - - - } - -} - - - + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowCollection.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.Data; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// пؼ + /// </summary> + public class GridRowCollection : Collection<GridRow> + { + + + } + +} + + + diff --git a/FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs b/FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs new file mode 100644 index 0000000..ffd28f3 --- /dev/null +++ b/FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs @@ -0,0 +1,138 @@ +#region Comment + +/* + * Project FineUI + * + * FileName: GridTemplateContainer.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using System.IO; +using System.Globalization; + + +namespace FineUI +{ + /// <summary> + /// ΪģеݰʵIDataItemContainerӿ + /// </summary> + [ToolboxItem(false)] + public class GridTemplateContainer : WebControl, IDataItemContainer, INamingContainer + { + /// <summary> + /// 캯 + /// </summary> + /// <param name="dataItem">Դ</param> + /// <param name="rowIndex"></param> + public GridTemplateContainer(object dataItem, int rowIndex) + { + _dataItem = dataItem; + _dataItemIndex = _displayIndex = rowIndex; + + } + + /// <summary> + /// ؼʼ¼ + /// </summary> + /// <param name="e">¼</param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + // ȷӿؼѾ + EnsureChildControls(); + + // ؼû IDԶһ磺ct100 + base.EnsureID(); + } + + } + + #region RenderBeginTag + + /// <summary> + /// Ⱦʼǩ + /// </summary> + /// <param name="writer">ASP.NETؼ</param> + public override void RenderBeginTag(HtmlTextWriter writer) + { + //base.RenderBeginTag(writer); + + writer.Write(String.Format("<div class=\"f-grid-tpl x-grid-tpl\" id=\"{0}\">", ClientID)); + } + + /// <summary> + /// Ⱦǩ + /// </summary> + /// <param name="writer">ASP.NETؼ</param> + public override void RenderEndTag(HtmlTextWriter writer) + { + //base.RenderEndTag(writer); + + writer.Write("</div>"); + } + + #endregion + + #region IDataItemContainer Members + + private object _dataItem; + + /// <summary> + /// ԴIDataItemContainerԱ + /// </summary> + public object DataItem + { + get { return _dataItem; } + } + + private int _dataItemIndex; + + /// <summary> + /// IDataItemContainerԱ + /// </summary> + public int DataItemIndex + { + get { return _dataItemIndex; } + } + + private int _displayIndex; + + /// <summary> + /// ڿؼʾλõIDataItemContainerԱ + /// </summary> + public int DisplayIndex + { + get { return _displayIndex; } + } + + #endregion + + } +} + + + diff --git a/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs b/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs index e38661c..cf16af1 100644 --- a/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs +++ b/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs @@ -1,551 +1,556 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RegionCollection.cs - * CreatedOn: 2008-06-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - - -namespace FineUI -{ - /// <summary> - /// 区域控件 - /// </summary> - [Designer("FineUI.Design.RegionDesigner, FineUI.Design")] - [ToolboxData("<{0}:Region Position=\"Center\" runat=\"server\"></{0}:Region>")] - [ToolboxBitmap(typeof(Region), "toolbox.Region.bmp")] - [Description("区域控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Region : CollapsablePanel - { - #region Unsupported Properties - - //[Category(CategoryName.OPTIONS)] - //[Description("布局类型")] - //[Browsable(false)] - //public override LayoutType Layout - //{ - // get - // { - // return LayoutType.Fit; - // } - //} - - - #endregion - - #region Properties - - //private string ContentPlaceHolderId_Default = ""; - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("ContentPlaceHolderId")] - //public string ContentPlaceHolderId - //{ - // get - // { - // object obj = BoxState["ContentPlaceHolderId"]; - // return obj == null ? ContentPlaceHolderId_Default : (string)obj; - // } - // set - // { - // BoxState["ContentPlaceHolderId"] = value; - // } - //} - - /// <summary> - /// 是否可以拖动分隔条 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否可以拖动分隔条")] - public bool Split - { - get - { - object obj = XState["Split"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["Split"] = value; - } - } - - - ///// <summary> - ///// 是否启用分隔条提示 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否启用分隔条提示")] - //public bool EnableSplitTip - //{ - // get - // { - // object obj = XState["EnableSplitTip"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["EnableSplitTip"] = value; - // } - //} - - - ///// <summary> - ///// 分隔条提示信息 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("分隔条提示信息")] - //public string SplitTip - //{ - // get - // { - // object obj = XState["SplitTip"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // XState["SplitTip"] = value; - // } - //} - - ///// <summary> - ///// 可折叠区域的分隔条提示信息 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("可折叠区域的分隔条提示信息")] - //public string CollapsibleSplitTip - //{ - // get - // { - // object obj = XState["CollapsibleSplitTip"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // XState["CollapsibleSplitTip"] = value; - // } - //} - - - /// <summary> - /// 边距 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue("")] - [Description("边距")] - public string Margins - { - get - { - object obj = XState["Margins"]; - return obj == null ? "" : (string)obj; - } - set - { - XState["Margins"] = value; - } - } - - ///// <summary> - ///// 折叠后的边距 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue("")] - //[Description("折叠后的边距")] - //public string CMargins - //{ - // get - // { - // object obj = XState["CMargins"]; - // return obj == null ? "" : (string)obj; - // } - // set - // { - // XState["CMargins"] = value; - // } - //} - - - /// <summary> - /// 位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(Position.Center)] - [Description("位置")] - public Position Position - { - get - { - object obj = XState["PositionType"]; - return obj == null ? Position.Center : (Position)obj; - } - set - { - XState["PositionType"] = value; - } - } - - ///// <summary> - ///// 折叠模式(通过点击工具栏上的按钮还是点击分隔条上的按钮来展开折叠面板) - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(CollapseMode.Default)] - //[Description("折叠模式(通过点击工具栏上的按钮还是点击分隔条上的按钮来展开折叠面板)")] - //public CollapseMode CollapseMode - //{ - // get - // { - // object obj = XState["CollapseMode"]; - // return obj == null ? CollapseMode.Default : (CollapseMode)obj; - // } - // set - // { - // XState["CollapseMode"] = value; - // } - //} - - - #endregion - - #region OnInit - - /// <summary> - /// Tab 控件必须包含在 TabStrip 中 - /// </summary> - /// <param name="e"></param> - protected override void OnInit(EventArgs e) - { - base.OnInit(e); - - if (!DesignMode) - { - if (!(Parent is RegionPanel)) - { - throw new Exception("Region control must be included in RegionPanel control."); - } - } - - } - - #endregion - - #region oldcode - - //private ControlBaseCollection _items; - - //[Category(CategoryName.OPTIONS)] - //[NotifyParentProperty(true)] - //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] - //public virtual ControlBaseCollection Items - //{ - // get - // { - // if (_items == null) - // { - // _items = new ControlBaseCollection(this); - - // //if (base.IsTrackingViewState) - // //{ - // // ((IStateManager)_rows).TrackViewState(); - // //} - // } - // return _items; - // } - //} - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - #region Options - - //// 默认Layout - //OB.AddProperty(OptionName.Layout, LayoutTypeName.GetName(Layout)); - - // 必须设置位置 - OB.AddProperty("region", PositionHelper.GetName(Position)); - - if (!String.IsNullOrEmpty(Margins)) - { - OB.AddProperty("margins", Margins); - } - - if (Split) - { - OB.AddProperty("split", true); - } - - //if (EnableSplitTip) - //{ - // OB.AddProperty("useSplitTips", true); - // if (EnableCollapse) - // { - // if (!String.IsNullOrEmpty(CollapsibleSplitTip)) - // { - // OB.AddProperty("collapsibleSplitTip", CollapsibleSplitTip); - // } - // } - // else - // { - // if (!String.IsNullOrEmpty(SplitTip)) - // { - // OB.AddProperty("splitTip", SplitTip); - // } - // } - //} - - //if (CollapseMode == CollapseMode.Mini) - //{ - // OB.AddProperty("collapseMode", CollapseModeName.GetName(CollapseMode)); - - //} - - //if (!String.IsNullOrEmpty(CMargins)) - //{ - // OB.AddProperty("cmargins", CMargins); - //} - - - #endregion - - #region oldcode - - //if (!String.IsNullOrEmpty(ContentPlaceHolderId)) - //{ - // // 取得ContentPlaceHolder - // Control hoderControl = ControlUtil.FindControl(Page, ContentPlaceHolderId); - - // // Clear Items - // OB.RemoveProperty(OptionName.Items); - - // // 内容页面的控件列表 - // foreach (Control c in hoderControl.Controls) - // { - // ControlBase component = c as ControlBase; - // if (component != null) - // { - // component.RenderImmediately = false; - // component.RefParentControl = this; - - // FineUI.PanelBase panel = component as FineUI.PanelBase; - // if (panel != null) - // { - // panel.AutoHeight = false; - // panel.AutoWidth = false; - // } - // } - // } - - // AddItemsToOB(hoderControl.Controls); - - // #region old code - // //// 这中改变控件层级的做法不对 - // //// 取得 ContentPlaceHolder 下面的所有控件 - // //List<ControlBase> componentList = new List<ControlBase>(); - // //for (int i = 0, count = hoderControl.Controls.Count; i < count; i++) - // //{ - // // ControlBase component = hoderControl.Controls[i] as ControlBase; - // // if (component != null) - // // { - // // componentList.Add(component); - // // } - // //} - - // //// 把这些控件添加到 本控件的子控件 - // //foreach (ControlBase c in componentList) - // //{ - // // c.RenderImmediately = false; - - // // Controls.Add(c); - // //} - - // //// Add Items - // //AddItemsToOB(); - - // #endregion - //} - - #endregion - - #region oldcode - - //if (!String.IsNullOrEmpty(SplitColor)) - //{ - // AddPageFirstLoadAbsoluteScript(String.Format("Ext.get('{0}-xsplit').setStyle('background-color','{1}');", ClientID, SplitColor), 1000); - //} - - //string renderScript = String.Empty; - - //if (!String.IsNullOrEmpty(SplitColor)) - //{ - // renderScript += String.Format("Ext.get('{0}-xsplit').setStyle('background-color','{1}');", ClientID, SplitColor); - //} - - //OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - - } - - #endregion - - #region old code - - - //#region ChildrenContentID - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("子控件的容器的样式类(Tab用到了)")] - //protected override string ChildrenContentClass - //{ - // get - // { - // return "x-hide-display"; - // } - //} - - //#endregion - - //#region internal RenderChildrenAsContent - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("渲染子控件为容器内容")] - //internal override bool RenderChildrenAsContent - //{ - // get - // { - // return true; - // } - //} - //#endregion - - //#region IStateManager Members - - //bool IStateManager.IsTrackingViewState - //{ - // get { return base.IsTrackingViewState; } - //} - - //void IStateManager.LoadViewState(object state) - //{ - // base.LoadViewState(state); - //} - - //object IStateManager.SaveViewState() - //{ - // return base.SaveViewState(); - //} - - //void IStateManager.TrackViewState() - //{ - // base.TrackViewState(); - //} - - //#endregion - - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegionCollection.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + + +namespace FineUI +{ + /// <summary> + /// 区域控件 + /// </summary> + [Designer("FineUI.Design.RegionDesigner, FineUI.Design")] + [ToolboxData("<{0}:Region Position=\"Center\" runat=\"server\"></{0}:Region>")] + [ToolboxBitmap(typeof(Region), "toolbox.Region.bmp")] + [Description("区域控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Region : CollapsablePanel + { + #region Unsupported Properties + + //[Category(CategoryName.OPTIONS)] + //[Description("布局类型")] + //[Browsable(false)] + //public override LayoutType Layout + //{ + // get + // { + // return LayoutType.Fit; + // } + //} + + + #endregion + + #region Properties + + //private string ContentPlaceHolderId_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("ContentPlaceHolderId")] + //public string ContentPlaceHolderId + //{ + // get + // { + // object obj = BoxState["ContentPlaceHolderId"]; + // return obj == null ? ContentPlaceHolderId_Default : (string)obj; + // } + // set + // { + // BoxState["ContentPlaceHolderId"] = value; + // } + //} + + /// <summary> + /// 是否可以拖动分隔条 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以拖动分隔条")] + [Obsolete("已废除,请使用RegionSplit属性")] + public bool Split + { + get + { + //object obj = FState["Split"]; + //return obj == null ? false : (bool)obj; + return RegionSplit; + } + set + { + RegionSplit = value; + } + } + + + /// <summary> + /// 位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Position.Center)] + [Description("位置")] + [Obsolete("已废除,请使用RegionPosition属性")] + public Position Position + { + get + { + //object obj = FState["PositionType"]; + //return obj == null ? Position.Center : (Position)obj; + return RegionPosition; + } + set + { + RegionPosition = value; + } + } + + + ///// <summary> + ///// 是否启用分隔条提示 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用分隔条提示")] + //public bool EnableSplitTip + //{ + // get + // { + // object obj = FState["EnableSplitTip"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableSplitTip"] = value; + // } + //} + + + ///// <summary> + ///// 分隔条提示信息 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("分隔条提示信息")] + //public string SplitTip + //{ + // get + // { + // object obj = FState["SplitTip"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["SplitTip"] = value; + // } + //} + + ///// <summary> + ///// 可折叠区域的分隔条提示信息 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("可折叠区域的分隔条提示信息")] + //public string CollapsibleSplitTip + //{ + // get + // { + // object obj = FState["CollapsibleSplitTip"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["CollapsibleSplitTip"] = value; + // } + //} + + + ///// <summary> + ///// 外边距 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("外边距")] + //[Obsolete("已废除,请使用Margin属性")] + //public string Margins + //{ + // get + // { + // return Margin; + // } + // set + // { + // Margin = value; + // } + //} + + ///// <summary> + ///// 折叠后的边距 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("折叠后的边距")] + //public string CMargins + //{ + // get + // { + // object obj = FState["CMargins"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["CMargins"] = value; + // } + //} + + + ///// <summary> + ///// 折叠模式(通过点击工具栏上的按钮还是点击分隔条上的按钮来展开折叠面板) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(CollapseMode.Default)] + //[Description("折叠模式(通过点击工具栏上的按钮还是点击分隔条上的按钮来展开折叠面板)")] + //public CollapseMode CollapseMode + //{ + // get + // { + // object obj = FState["CollapseMode"]; + // return obj == null ? CollapseMode.Default : (CollapseMode)obj; + // } + // set + // { + // FState["CollapseMode"] = value; + // } + //} + + + #endregion + + #region OnInit + + /// <summary> + /// Tab 控件必须包含在 TabStrip 中 + /// </summary> + /// <param name="e"></param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + if (!(Parent is RegionPanel)) + { + throw new Exception("Region control must be included in RegionPanel control."); + } + } + + } + + #endregion + + #region oldcode + + //private ControlBaseCollection _items; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ControlBaseCollection Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new ControlBaseCollection(this); + + // //if (base.IsTrackingViewState) + // //{ + // // ((IStateManager)_rows).TrackViewState(); + // //} + // } + // return _items; + // } + //} + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region Options + + //// 默认Layout + //OB.AddProperty(OptionName.Layout, LayoutTypeName.GetName(Layout)); + + //// 必须设置位置 + //OB.AddProperty("region", PositionHelper.GetName(Position)); + + ////if (!String.IsNullOrEmpty(Margins)) + ////{ + //// OB.AddProperty("margins", Margins); + ////} + + //if (Split) + //{ + // OB.AddProperty("split", true); + //} + + //if (EnableSplitTip) + //{ + // OB.AddProperty("useSplitTips", true); + // if (EnableCollapse) + // { + // if (!String.IsNullOrEmpty(CollapsibleSplitTip)) + // { + // OB.AddProperty("collapsibleSplitTip", CollapsibleSplitTip); + // } + // } + // else + // { + // if (!String.IsNullOrEmpty(SplitTip)) + // { + // OB.AddProperty("splitTip", SplitTip); + // } + // } + //} + + //if (CollapseMode == CollapseMode.Mini) + //{ + // OB.AddProperty("collapseMode", CollapseModeName.GetName(CollapseMode)); + + //} + + //if (!String.IsNullOrEmpty(CMargins)) + //{ + // OB.AddProperty("cmargins", CMargins); + //} + + + #endregion + + #region oldcode + + //if (!String.IsNullOrEmpty(ContentPlaceHolderId)) + //{ + // // 取得ContentPlaceHolder + // Control hoderControl = ControlUtil.FindControl(Page, ContentPlaceHolderId); + + // // Clear Items + // OB.RemoveProperty(OptionName.Items); + + // // 内容页面的控件列表 + // foreach (Control c in hoderControl.Controls) + // { + // ControlBase component = c as ControlBase; + // if (component != null) + // { + // component.RenderImmediately = false; + // component.RefParentControl = this; + + // FineUI.PanelBase panel = component as FineUI.PanelBase; + // if (panel != null) + // { + // panel.AutoHeight = false; + // panel.AutoWidth = false; + // } + // } + // } + + // AddItemsToOB(hoderControl.Controls); + + // #region old code + // //// 这中改变控件层级的做法不对 + // //// 取得 ContentPlaceHolder 下面的所有控件 + // //List<ControlBase> componentList = new List<ControlBase>(); + // //for (int i = 0, count = hoderControl.Controls.Count; i < count; i++) + // //{ + // // ControlBase component = hoderControl.Controls[i] as ControlBase; + // // if (component != null) + // // { + // // componentList.Add(component); + // // } + // //} + + // //// 把这些控件添加到 本控件的子控件 + // //foreach (ControlBase c in componentList) + // //{ + // // c.RenderImmediately = false; + + // // Controls.Add(c); + // //} + + // //// Add Items + // //AddItemsToOB(); + + // #endregion + //} + + #endregion + + #region oldcode + + //if (!String.IsNullOrEmpty(SplitColor)) + //{ + // AddPageFirstLoadAbsoluteScript(String.Format("Ext.get('{0}-xsplit').setStyle('background-color','{1}');", ClientID, SplitColor), 1000); + //} + + //string renderScript = String.Empty; + + //if (!String.IsNullOrEmpty(SplitColor)) + //{ + // renderScript += String.Format("Ext.get('{0}-xsplit').setStyle('background-color','{1}');", ClientID, SplitColor); + //} + + //OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + + } + + #endregion + + #region old code + + + //#region ChildrenContentID + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("子控件的容器的样式类(Tab用到了)")] + //protected override string ChildrenContentClass + //{ + // get + // { + // return "x-hide-display"; + // } + //} + + //#endregion + + //#region internal RenderChildrenAsContent + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("渲染子控件为容器内容")] + //internal override bool RenderChildrenAsContent + //{ + // get + // { + // return true; + // } + //} + //#endregion + + //#region IStateManager Members + + //bool IStateManager.IsTrackingViewState + //{ + // get { return base.IsTrackingViewState; } + //} + + //void IStateManager.LoadViewState(object state) + //{ + // base.LoadViewState(state); + //} + + //object IStateManager.SaveViewState() + //{ + // return base.SaveViewState(); + //} + + //void IStateManager.TrackViewState() + //{ + // base.TrackViewState(); + //} + + //#endregion + + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs b/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs index dcc2e0c..445bbd2 100644 --- a/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs +++ b/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs @@ -1,69 +1,69 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RegionCollection.cs - * CreatedOn: 2008-06-12 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; - -namespace FineUI -{ - /// <summary> - /// Region控件集合 - /// </summary> - public class RegionCollection : BaseCollection<Region> - { - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="parent">父控件实例</param> - public RegionCollection(PanelBase parent) - : base(parent) - { - - } - /* - private PanelBase panelBase; - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="panelBase">面板实例</param> - public RegionCollection(PanelBase panelBase) - { - this.panelBase = panelBase; - } - - - protected override void InsertItem(int index, Region item) - { - base.InsertItem(index, item); - - item.RenderWrapperNode = false; - panelBase.Controls.AddAt(index, item); - } - */ - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegionCollection.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// Region控件集合 + /// </summary> + public class RegionCollection : BaseCollection<Region> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public RegionCollection(PanelBase parent) + : base(parent) + { + + } + /* + private PanelBase panelBase; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="panelBase">面板实例</param> + public RegionCollection(PanelBase panelBase) + { + this.panelBase = panelBase; + } + + + protected override void InsertItem(int index, Region item) + { + base.InsertItem(index, item); + + item.RenderWrapperNode = false; + panelBase.Controls.AddAt(index, item); + } + */ + } +} diff --git a/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs b/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs index 190b6d2..b462268 100644 --- a/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs +++ b/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs @@ -1,243 +1,256 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: RegionPanel.cs - * CreatedOn: 2008-08-14 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 区域面板控件 - /// </summary> - [Designer("FineUI.Design.RegionPanelDesigner, FineUI.Design")] - [ToolboxData("<{0}:RegionPanel ShowBorder=\"false\" runat=\"server\"><Regions><{0}:Region Split=\"true\" Width=\"200px\" ShowHeader=\"true\" Title=\"Left Region\" Position=\"Left\" runat=\"server\"></{0}:Region><{0}:Region Title=\"Center Region\" Position=\"Center\" ShowHeader=\"true\" runat=\"server\"></{0}:Region></Regions></{0}:RegionPanel>")] - [ToolboxBitmap(typeof(RegionPanel), "toolbox.RegionPanel.bmp")] - [Description("区域面板控件")] - [ParseChildren(true)] - [PersistChildren(false)] - public class RegionPanel : PanelBase - { - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override ControlBaseCollection Items - { - get - { - return base.Items; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableIFrame - { - get - { - return base.EnableIFrame; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameUrl - { - get - { - return base.IFrameUrl; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameName - { - get - { - return base.IFrameName; - } - } - - /// <summary> - /// 布局类型 - /// </summary> - [ReadOnly(true)] - [Category(CategoryName.LAYOUT)] - [DefaultValue(Layout.Border)] - [Description("布局类型")] - public override Layout Layout - { - get - { - return Layout.Border; - } - } - - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("设置Wrapper的Display=inline")] - //public override bool WrapperDisplayInline - //{ - // get - // { - // return true; - // } - //} - - ///// <summary> - ///// 不支持此属性 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public override bool AutoHeight - //{ - // get - // { - // return false; - // } - //} - - - ///// <summary> - ///// 不支持此属性 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public override bool AutoWidth - //{ - // get - // { - // return false; - // } - //} - - #endregion - - #region Regions - - private RegionCollection _regions; - - /// <summary> - /// 区域集合 - /// </summary> - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - public virtual RegionCollection Regions - { - get - { - if (_regions == null) - { - _regions = new RegionCollection(this); - } - return _regions; - } - } - - #endregion - - #region OnPreRender - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - - - #region Regions - - if (Regions.Count > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (Region item in Regions) - { - if (item.Visible) - { - ab.AddProperty(String.Format("{0}", item.XID), true); - } - } - - OB.AddProperty("items", ab.ToString(), true); - } - - #endregion - - - string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); - - AddStartupScript(jsContent); - - } - - #endregion - - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegionPanel.cs + * CreatedOn: 2008-08-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 区域面板控件 + /// </summary> + [Designer("FineUI.Design.RegionPanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:RegionPanel ShowBorder=\"false\" runat=\"server\"><Regions><{0}:Region Split=\"true\" Width=\"200px\" ShowHeader=\"true\" Title=\"Left Region\" Position=\"Left\" runat=\"server\"></{0}:Region><{0}:Region Title=\"Center Region\" Position=\"Center\" ShowHeader=\"true\" runat=\"server\"></{0}:Region></Regions></{0}:RegionPanel>")] + [ToolboxBitmap(typeof(RegionPanel), "toolbox.RegionPanel.bmp")] + [Description("区域面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + public class RegionPanel : PanelBase + { + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Region)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Region; + } + } + + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("设置Wrapper的Display=inline")] + //public override bool WrapperDisplayInline + //{ + // get + // { + // return true; + // } + //} + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool AutoHeight + //{ + // get + // { + // return false; + // } + //} + + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool AutoWidth + //{ + // get + // { + // return false; + // } + //} + + #endregion + + #region Regions + + private RegionCollection _regions; + + /// <summary> + /// 区域集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + public virtual RegionCollection Regions + { + get + { + if (_regions == null) + { + _regions = new RegionCollection(this); + } + return _regions; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + #region Regions + + if (Regions.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (Region item in Regions) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + + OB.AddProperty("items", ab.ToString(), true); + } + + #endregion + + + string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs b/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs index 6ebf6a2..6ee3058 100644 --- a/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs +++ b/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs @@ -1,458 +1,475 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: Tab.cs - * CreatedOn: 2008-04-21 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - - -namespace FineUI -{ - /// <summary> - /// 选项卡控件 - /// </summary> - [Designer("FineUI.Design.TabDesigner, FineUI.Design")] - [ToolboxData("<{0}:Tab Title=\"Tab\" BodyPadding=\"5px\" runat=\"server\"></{0}:Tab>")] - [ToolboxBitmap(typeof(Tab), "toolbox.Tab.bmp")] - [Description("选项卡控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [DefaultProperty("Title")] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - public class Tab : CollapsablePanel - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public Tab() - { - ServerAjaxProperties.Remove("Hidden"); - ClientAjaxProperties.Add("Hidden"); - - AddServerAjaxProperties(); - AddClientAjaxProperties(); - } - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool ShowBorder - { - get - { - return false; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableCollapse - { - get - { - return false; - } - } - - #endregion - - #region Properties - - /// <summary> - /// 是否可以关闭 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否可以关闭")] - public bool EnableClose - { - get - { - object obj = XState["EnableClose"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableClose"] = value; - } - } - - ///// <summary> - ///// 是否自动高度 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否自动高度")] - //public override bool AutoHeight - //{ - // get - // { - // object obj = XState["AutoHeight"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["AutoHeight"] = value; - // } - //} - - ///// <summary> - ///// 是否自动宽度 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否自动宽度")] - //public override bool AutoWidth - //{ - // get - // { - // object obj = XState["AutoWidth"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["AutoWidth"] = value; - // } - //} - - - ///// <summary> - ///// 是否可以回发 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(false)] - //[Description("是否可以回发")] - //public bool EnablePostBack - //{ - // get - // { - // object obj = XState["EnablePostBack"]; - // return obj == null ? false : (bool)obj; - // } - // set - // { - // XState["EnablePostBack"] = value; - // } - //} - - //[Browsable(true)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("延迟加载此选项卡的IFrame")] - //internal bool IFrameDelayLoad - //{ - // get - // { - // object obj = XState["IFrameDelayLoad"]; - // return obj == null ? true : (bool)obj; - // } - // set - // { - // XState["IFrameDelayLoad"] = value; - // } - //} - - #endregion - - #region OnInit - - /// <summary> - /// Tab 控件必须包含在 TabStrip 中 - /// </summary> - /// <param name="e"></param> - protected override void OnInit(EventArgs e) - { - base.OnInit(e); - - if (!DesignMode) - { - if (!(Parent is TabStrip)) - { - throw new Exception("Tab must be inside TabStrip."); - } - } - } - - #endregion - - #region OnAjaxPreRender/OnFirstPreRender - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Description("是否隐藏Tab")] - private string HiddenHiddenFieldID - { - get - { - return String.Format("{0}_Hidden", ClientID); - } - } - - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - //if (PropertyModified("Text")) - //{ - // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); - //} - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - TabStrip tabStrip = Parent as TabStrip; - - if (EnableIFrame) - { - // 对于非激活Tab,其中的Iframe需要延迟加载 - if (this != tabStrip.Tabs[tabStrip.ActiveTabIndex]) - { - OB.RemoveProperty("html"); - OB.RemoveProperty("x_iframe_loaded"); - OB.AddProperty("x_iframe_loaded", false); - } - } - - OB.AddProperty("x_type", "tab"); - - //OB.AddProperty("__box_hidden_field_id", HiddenHiddenFieldID); - - if (EnableClose) - { - OB.AddProperty("closable", true); - } - - //OB.RemoveProperty("hidden"); - //if (Hidden) - //{ - // AddStartupAbsoluteScript(GetHideReference()); - //} - - //OB.Listeners.AddProperty("beforeclose", JsHelper.GetFunction(GetHideReference() + "return false;", "cmp"), true); - - - //string hiddenFieldsScript = String.Empty; - //hiddenFieldsScript += GetSetHiddenFieldValueScript(HiddenHiddenFieldID, Hidden.ToString().ToLower()); - ////hiddenFieldsScript += "\r\n"; - - - string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - - } - - /// <summary> - /// Override the same method exist in ControlBase, because we have separate logic to hide this control. - /// </summary> - protected override string GetHiddenPropertyChangedScript() - { - if (PropertyModified("Hidden")) - { - //if (ClientPropertyModifiedInServer("Hidden")) - - return Hidden ? GetHideReference() : GetShowReference(); - - } - return String.Empty; - } - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - base.LoadPostData(postDataKey, postCollection); - - bool postHidden = Convert.ToBoolean(postCollection[HiddenHiddenFieldID]); - if (Hidden != postHidden) - { - Hidden = postHidden; - XState.BackupPostDataProperty("Hidden"); - return true; - } - - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public override void RaisePostDataChangedEvent() - { - base.RaisePostDataChangedEvent(); - } - - #endregion - - #region GetShowReference GetHideReference - - /// <summary> - /// 获取显示选项卡的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetShowReference() - { - TabStrip tabStrip = Parent as TabStrip; - if (tabStrip != null) - { - return String.Format("{0}.showTab('{1}');", tabStrip.ScriptID, ClientID); - } - return String.Empty; - } - - /// <summary> - /// 获取隐藏选项卡的客户端脚本 - /// </summary> - /// <returns>客户端脚本</returns> - public string GetHideReference() - { - TabStrip tabStrip = Parent as TabStrip; - if (tabStrip != null) - { - return String.Format("{0}.hideTab('{1}');", tabStrip.ScriptID, ClientID); - } - return String.Empty; - } - - #endregion - - - #region old code - //#region internal RenderChildrenAsContent - - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(true)] - //[Description("渲染子控件为容器内容")] - //internal override bool RenderChildrenAsContent - //{ - // get - // { - // return true; - // } - //} - //#endregion - - //#region IStateManager Members - - //bool IStateManager.IsTrackingViewState - //{ - // get { return base.IsTrackingViewState; } - //} - - //void IStateManager.LoadViewState(object state) - //{ - // base.LoadViewState(state); - //} - - //object IStateManager.SaveViewState() - //{ - // return base.SaveViewState(); - //} - - //void IStateManager.TrackViewState() - //{ - // base.TrackViewState(); - //} - - //#endregion - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[2]; - - // states[0] = base.SaveViewState(); - - // states[1] = ((IStateManager)Rows).SaveViewState(); - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Rows).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Rows).TrackViewState(); - //} - - //#endregion - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: Tab.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + + +namespace FineUI +{ + /// <summary> + /// 选项卡控件 + /// </summary> + [Designer("FineUI.Design.TabDesigner, FineUI.Design")] + [ToolboxData("<{0}:Tab Title=\"Tab\" BodyPadding=\"5px\" runat=\"server\"></{0}:Tab>")] + [ToolboxBitmap(typeof(Tab), "toolbox.Tab.bmp")] + [Description("选项卡控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [DefaultProperty("Title")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Tab : CollapsablePanel + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Tab() + { + ServerAjaxProperties.Remove("Hidden"); + ClientAjaxProperties.Add("Hidden"); + + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return true; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowBorder + { + get + { + return false; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableCollapse + { + get + { + return false; + } + } + + #endregion + + #region Properties + + /// <summary> + /// 是否可以关闭 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以关闭")] + public bool EnableClose + { + get + { + object obj = FState["EnableClose"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableClose"] = value; + } + } + + ///// <summary> + ///// 是否自动高度 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否自动高度")] + //public override bool AutoHeight + //{ + // get + // { + // object obj = FState["AutoHeight"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["AutoHeight"] = value; + // } + //} + + ///// <summary> + ///// 是否自动宽度 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否自动宽度")] + //public override bool AutoWidth + //{ + // get + // { + // object obj = FState["AutoWidth"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["AutoWidth"] = value; + // } + //} + + + ///// <summary> + ///// 是否可以回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否可以回发")] + //public bool EnablePostBack + //{ + // get + // { + // object obj = FState["EnablePostBack"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnablePostBack"] = value; + // } + //} + + //[Browsable(true)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("延迟加载此选项卡的IFrame")] + //internal bool IFrameDelayLoad + //{ + // get + // { + // object obj = FState["IFrameDelayLoad"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["IFrameDelayLoad"] = value; + // } + //} + + #endregion + + #region OnInit + + /// <summary> + /// Tab 控件必须包含在 TabStrip 中 + /// </summary> + /// <param name="e"></param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + if (!(Parent is TabStrip)) + { + throw new Exception("Tab must be inside TabStrip."); + } + } + } + + #endregion + + #region OnAjaxPreRender/OnFirstPreRender + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("是否隐藏Tab")] + private string HiddenHiddenFieldID + { + get + { + return String.Format("{0}_Hidden", ClientID); + } + } + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + TabStrip tabStrip = Parent as TabStrip; + + if (EnableIFrame) + { + if (tabStrip.ActiveTabIndex >= 0 && + tabStrip.ActiveTabIndex < tabStrip.Tabs.Count && + this == tabStrip.Tabs[tabStrip.ActiveTabIndex]) + { + // 当前是激活选项卡 + } + else + { + // 对于非激活Tab,其中的Iframe需要延迟加载 + OB.RemoveProperty("html"); + OB.RemoveProperty("f_iframe_loaded"); + OB.AddProperty("f_iframe_loaded", false); + } + } + + OB.AddProperty("f_type", "tab"); + + //OB.AddProperty("__box_hidden_field_id", HiddenHiddenFieldID); + + if (EnableClose) + { + OB.AddProperty("closable", true); + } + + //OB.RemoveProperty("hidden"); + //if (Hidden) + //{ + // AddStartupAbsoluteScript(GetHideReference()); + //} + + //OB.Listeners.AddProperty("beforeclose", JsHelper.GetFunction(GetHideReference() + "return false;", "cmp"), true); + + + //string hiddenFieldsScript = String.Empty; + //hiddenFieldsScript += GetSetHiddenFieldValueScript(HiddenHiddenFieldID, Hidden.ToString().ToLower()); + ////hiddenFieldsScript += "\r\n"; + + + string jsContent = String.Format("var {0}=Ext.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + /// <summary> + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// Tab 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + /// </summary> + protected override string GetHiddenPropertyChangedScript() + { + if (PropertyModified("Hidden")) + { + return Hidden ? GetHideReference() : GetShowReference(); + + } + return String.Empty; + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + bool postHidden = Convert.ToBoolean(postCollection[HiddenHiddenFieldID]); + if (Hidden != postHidden) + { + Hidden = postHidden; + FState.BackupPostDataProperty("Hidden"); + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public override void RaisePostDataChangedEvent() + { + base.RaisePostDataChangedEvent(); + } + + #endregion + + #region GetShowReference GetHideReference + + /// <summary> + /// 获取显示选项卡的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetShowReference() + { + TabStrip tabStrip = Parent as TabStrip; + if (tabStrip != null) + { + return String.Format("{0}.showTab('{1}');", tabStrip.ScriptID, ClientID); + } + return String.Empty; + } + + /// <summary> + /// 获取隐藏选项卡的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHideReference() + { + TabStrip tabStrip = Parent as TabStrip; + if (tabStrip != null) + { + return String.Format("{0}.hideTab('{1}');", tabStrip.ScriptID, ClientID); + } + return String.Empty; + } + + #endregion + + + #region old code + //#region internal RenderChildrenAsContent + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("渲染子控件为容器内容")] + //internal override bool RenderChildrenAsContent + //{ + // get + // { + // return true; + // } + //} + //#endregion + + //#region IStateManager Members + + //bool IStateManager.IsTrackingViewState + //{ + // get { return base.IsTrackingViewState; } + //} + + //void IStateManager.LoadViewState(object state) + //{ + // base.LoadViewState(state); + //} + + //object IStateManager.SaveViewState() + //{ + // return base.SaveViewState(); + //} + + //void IStateManager.TrackViewState() + //{ + // base.TrackViewState(); + //} + + //#endregion + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs b/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs index f1b1fde..eb472f2 100644 --- a/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs +++ b/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs @@ -1,88 +1,88 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TabCollection.cs - * CreatedOn: 2008-05-06 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections.ObjectModel; -using System.Web.UI; - -namespace FineUI -{ - /// <summary> - /// 选项卡集合 - /// </summary> - public class TabCollection : BaseCollection<Tab> - { - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="parent">父控件实例</param> - public TabCollection(TabStrip parent) - : base(parent) - { - - } - /* - private TabStrip _tabStrip; - - /// <summary> - /// 构造函数 - /// </summary> - /// <param name="tabStrip">选项卡面板实例</param> - public TabCollection(TabStrip tabStrip) - { - _tabStrip = tabStrip; - } - - protected override void InsertItem(int index, Tab item) - { - item.RenderWrapperNode = false; - _tabStrip.Controls.AddAt(index, item); - - base.InsertItem(index, item); - } - - protected override void RemoveItem(int index) - { - _tabStrip.Controls.RemoveAt(index); - - base.RemoveItem(index); - } - - protected override void ClearItems() - { - // We should only remove this collection related controls - // Note we must loop from the last element(Count-1) to the first one(0) - for (int i = Count - 1; i >= 0; i--) - { - _tabStrip.Controls.RemoveAt(i); - } - - base.ClearItems(); - } - - */ - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TabCollection.cs + * CreatedOn: 2008-05-06 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 选项卡集合 + /// </summary> + public class TabCollection : BaseCollection<Tab> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public TabCollection(TabStrip parent) + : base(parent) + { + + } + /* + private TabStrip _tabStrip; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="tabStrip">选项卡面板实例</param> + public TabCollection(TabStrip tabStrip) + { + _tabStrip = tabStrip; + } + + protected override void InsertItem(int index, Tab item) + { + item.RenderWrapperNode = false; + _tabStrip.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + _tabStrip.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = Count - 1; i >= 0; i--) + { + _tabStrip.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + + */ + } +} diff --git a/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs b/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs index 0de8940..80bb31f 100644 --- a/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs +++ b/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs @@ -1,815 +1,831 @@ - -#region Comment - -/* - * Project: FineUI - * - * FileName: TabStrip.cs - * CreatedOn: 2008-04-21 - * CreatedBy: 30372245@qq.com - * - * - * Description: - * -> - * - * History: - * -> - * - * - * - * - */ - -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Drawing; -using System.Drawing.Design; -using System.Web.UI.Design.WebControls; - -using Newtonsoft.Json; -using System.Web.UI.HtmlControls; - -namespace FineUI -{ - /// <summary> - /// 选项卡面板控件 - /// </summary> - [Designer("FineUI.Design.TabStripDesigner, FineUI.Design")] - [ToolboxData("<{0}:TabStrip ShowBorder=\"True\" ActiveTabIndex=\"0\" runat=\"server\"><Tabs><{0}:Tab runat=\"server\" Title=\"Tab1\" BodyPadding=\"5px\"></{0}:Tab><{0}:Tab runat=\"server\" Title=\"Tab2\" EnableBackgroundColor=\"true\" BodyPadding=\"5px\"></{0}:Tab></Tabs></{0}:TabStrip>")] - [ToolboxBitmap(typeof(TabStrip), "toolbox.TabStrip.bmp")] - [Description("选项卡面板控件")] - [ParseChildren(true)] - [PersistChildren(false)] - [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] - [DefaultEvent("TabIndexChanged")] - public class TabStrip : PanelBase, IPostBackDataHandler, IPostBackEventHandler - { - #region Constructor - - /// <summary> - /// 构造函数 - /// </summary> - public TabStrip() - { - AddServerAjaxProperties(); - AddClientAjaxProperties("ActiveTabIndex"); - } - - #endregion - - #region Unsupported Properties - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override ControlBaseCollection Items - { - get - { - return base.Items; - } - } - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override bool EnableIFrame - { - get - { - return base.EnableIFrame; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameUrl - { - get - { - return base.IFrameUrl; - } - } - - - /// <summary> - /// 不支持此属性 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string IFrameName - { - get - { - return base.IFrameName; - } - } - - /// <summary> - /// 布局类型 - /// </summary> - [ReadOnly(true)] - [Category(CategoryName.LAYOUT)] - [DefaultValue(Layout.Card)] - [Description("布局类型")] - public override Layout Layout - { - get - { - return Layout.Card; - } - } - - ///// <summary> - ///// 不支持此属性 - ///// </summary> - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //public override bool EnableLightBackgroundColor - //{ - // get - // { - // return false; - // } - //} - - #endregion - - #region Properties - - /// <summary> - /// 切换选项卡时是否自动回发 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("切换选项卡时是否自动回发")] - public bool AutoPostBack - { - get - { - object obj = XState["AutoPostBack"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["AutoPostBack"] = value; - } - } - - /// <summary> - /// 显示标题的背景颜色 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(true)] - [Description("显示标题的背景颜色")] - public bool EnableTitleBackgroundColor - { - get - { - object obj = XState["EnableTitleBackgroundColor"]; - return obj == null ? true : (bool)obj; - } - set - { - XState["EnableTitleBackgroundColor"] = value; - } - } - - /// <summary> - /// 是否启用右键菜单(可用来关闭当前Tab和所有其他Tab) - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否启用右键菜单(可用来关闭当前Tab和所有其他Tab)")] - public bool EnableTabCloseMenu - { - get - { - object obj = XState["EnableTabCloseMenu"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableTabCloseMenu"] = value; - } - } - - - ///// <summary> - ///// 选项卡之间空白 - ///// </summary> - //[Category(CategoryName.OPTIONS)] - //[DefaultValue(typeof(Unit), "2")] - //[Description("选项卡之间空白")] - //public Unit TabMargin - //{ - // get - // { - // object obj = BoxState["TabMargin"]; - // return obj == null ? (Unit)2 : (Unit)obj; - // } - // set - // { - // BoxState["TabMargin"] = value; - // } - //} - - - /// <summary> - /// 选项卡显示的位置 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(TabPosition.Top)] - [Description("选项卡显示的位置")] - public TabPosition TabPosition - { - get - { - object obj = XState["TabPosition"]; - return obj == null ? TabPosition.Top : (TabPosition)obj; - } - set - { - XState["TabPosition"] = value; - } - } - - - /// <summary> - /// 是否启用延迟加载选项卡 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(false)] - [Description("是否启用延迟加载选项卡")] - public bool EnableDeferredRender - { - get - { - object obj = XState["EnableDeferredRender"]; - return obj == null ? false : (bool)obj; - } - set - { - XState["EnableDeferredRender"] = value; - } - } - - - - /// <summary> - /// [AJAX属性]当前激活选项卡的索引 - /// </summary> - [Category(CategoryName.OPTIONS)] - [DefaultValue(0)] - [Description("[AJAX属性]当前激活选项卡的索引")] - public int ActiveTabIndex - { - get - { - object obj = XState["ActiveTabIndex"]; - return obj == null ? 0 : (int)obj; - } - set - { - XState["ActiveTabIndex"] = value; - } - } - - /// <summary> - /// 当前激活的选项卡 - /// </summary> - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Tab ActiveTab - { - get - { - if (ActiveTabIndex >= 0 && ActiveTabIndex < Tabs.Count) - { - return Tabs[ActiveTabIndex]; - } - return null; - } - } - - #endregion - - #region Tabs - - private TabCollection tabs; - - /// <summary> - /// 选项卡集合 - /// </summary> - [Browsable(false)] - [Category(CategoryName.OPTIONS)] - [NotifyParentProperty(true)] - [PersistenceMode(PersistenceMode.InnerProperty)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - public virtual TabCollection Tabs - { - get - { - if (tabs == null) - { - tabs = new TabCollection(this); - } - return tabs; - } - } - - #endregion - - #region ActiveTabIndexHiddenFieldID - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - private string ActiveTabIndexHiddenFieldID - { - get - { - return String.Format("{0}_ActiveTabIndex", ClientID); - } - } - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - //[Description("需要回发的Tab列表")] - //private string NeedPostBackTabIDS - //{ - // get - // { - // return String.Format("{0}_need_postback_tab_ids", XID); - // } - //} - - #endregion - - #region old code - LoadXState/SaveXState - - //protected override void LoadXState(JObject state, string property) - //{ - // base.LoadXState(state, property); - - // // This property is persisted inside every Tabs. - // //if (property == "X_AutoPostBackTabs") - // //{ - // // AutoPostBackTabsFromJSON(state.getJArray(property)); - // //} - //} - - //protected override void OnInit(EventArgs e) - //{ - // base.OnInit(e); - - // //SaveXProperty("X_AutoPostBackTabs", AutoPostBackTabsToJSON().ToString()); - //} - - //protected override void OnBothPreRender() - //{ - // base.OnBothPreRender(); - - // //// Make sure X_AutoPostBackTabs property exist in X_STATE during page's first load. - // //if (!Page.IsPostBack) - // //{ - // // XState.AddModifiedProperties("X_AutoPostBackTabs"); - // //} - // //else - // //{ - // // // Items has been changed in server-side code after onInit. - // // if (XPropertyModified("X_AutoPostBackTabs", AutoPostBackTabsToJSON().ToString())) - // // { - // // XState.AddModifiedProperties("X_AutoPostBackTabs"); - // // } - // //} - //} - - //protected override void SaveXState(JObject state, string property) - //{ - // //if (property == "X_AutoPostBackTabs") - // //{ - // // state.put(property, AutoPostBackTabsToJSON()); - // //} - //} - - /////// <summary> - /////// These tabs need to auto postback when actived. - /////// </summary> - /////// <returns></returns> - ////private JArray AutoPostBackTabsToJSON() - ////{ - //// JArray ja = new JArray(); - //// for (int i = 0; i < Tabs.Count; i++) - //// { - //// Tab tab = Tabs[i]; - //// if (tab.EnablePostBack) - //// { - //// ja.Add(tab.ClientID); - //// } - //// } - //// return ja; - ////} - - ////private void AutoPostBackTabsFromJSON(JArray ja) - ////{ - //// List<string> autoPostackTabIds = new List<string>(JSONUtil.StringArrayFromJArray(ja)); - //// foreach (Tab tab in Tabs) - //// { - //// if (autoPostackTabIds.Contains(tab.ClientID)) - //// { - //// tab.EnablePostBack = true; - //// } - //// else - //// { - //// tab.EnablePostBack = false; - //// } - //// } - ////} - - #endregion - - #region old code - OnPreLoad - - //protected override void OnPreLoad(object sender, EventArgs e) - //{ - // base.OnPreLoad(sender, e); - - // SaveAjaxProperty("ActiveTabIndex", ActiveTabIndex); - // SaveAjaxProperty("NeedPostBackTabIdsScript", GetNeedPostBackTabIDsScript()); - - //} - - #endregion - - #region OnPreRender - /// <summary> - /// 渲染 HTML 之前调用(AJAX回发) - /// </summary> - protected override void OnAjaxPreRender() - { - base.OnAjaxPreRender(); - - StringBuilder sb = new StringBuilder(); - if (PropertyModified("ActiveTabIndex")) - { - //if (ClientPropertyModifiedInServer("ActiveTabIndex")) - - sb.AppendFormat("{0}.x_setActiveTab();", XID); - - } - - AddAjaxScript(sb); - } - - /// <summary> - /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) - /// </summary> - protected override void OnFirstPreRender() - { - base.OnFirstPreRender(); - - //ResourceManager.Instance.AddJavaScriptComponent("tab"); - - //if (EnableTabCloseMenu) - //{ - // ResourceManager.Instance.AddJavaScriptComponent("menu"); - //} - - #region Tabs - - if (Tabs.Count > 0) - { - JsArrayBuilder ab = new JsArrayBuilder(); - foreach (Tab tab in Tabs) - { - if (tab.Visible) - { - ab.AddProperty(String.Format("{0}", tab.XID), true); - } - } - OB.AddProperty("items", ab.ToString(), true); - } - - #endregion - - #region options - - // 删除Layout配置参数 - OB.RemoveProperty("layout"); - - //OB.AddProperty(OptionName.TabMargin, TabMargin.Value); - OB.AddProperty("tabPosition", TabPositionHelper.GetName(TabPosition)); - //if (Plain) OB.AddProperty(OptionName.Plain, Plain); - if (!EnableTitleBackgroundColor) - { - OB.AddProperty("plain", true); - } - - - // 去掉deferredRender=true,渲染速度会提高200ms左右 - // 每个Tab是否只在第一次访问时渲染,false表示全部渲染,否则没有访问的Tab的内容渲染的位置不正确。 - OB.AddProperty("deferredRender", EnableDeferredRender); - - //OB.AddProperty("bufferResize", true); - - //// 在切换Tab时重新布局Tab的内容 - //OB.AddProperty("layoutOnTabChange", true); - //OB.AddProperty("enableTabScroll", true); - - if (EnableTabCloseMenu) - { - OB.AddProperty("plugins", "Ext.create('Ext.ux.TabCloseMenu')", true); - } - - ////Note: By default, a tab's close tool destroys the child tab Component and all its descendants. - //// This makes the child tab Component, and all its descendants unusable. - //// To enable re-use of a tab, configure the TabPanel with autoDestroy: false. - //OB.AddProperty("autoDestroy", false); - - #endregion - - #region ActiveTabIndex/IFrameDelayLoad - - OB.AddProperty("activeTab", ActiveTabIndex); - - //for (int i = 0; i < Tabs.Count; i++) - //{ - // Tab tab = Tabs[i]; - // if (tab.EnableIFrame && i != ActiveTabIndex) - // { - // // 拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url - // tab.IFrameDelayLoad = true; - // } - // else - // { - // tab.IFrameDelayLoad = false; - // } - //} - - #endregion - - #region Listeners - - #region old code - - // 如果存在Tabs集合 - //if (Tabs.Count > 0) - //{ - // JsArrayBuilder ab = new JsArrayBuilder(); - // foreach (Tab tab in Tabs) - // { - // ab.AddProperty(String.Format("{0}", tab.ClientID), true); - // } - // OB.AddProperty(OptionName.Items, ab.ToString(), true); - //} - - // listeners - //JsObjectBuilder listenersBuilder = new JsObjectBuilder(); - //listenersBuilder.AddProperty(OptionName.Tabchange, String.Format("function(tabPanel, activeTab){{Ext.get('{0}').dom.value=tabPanel.items.indexOf(activeTab);}}", ActiveTabHiddenField.ClientID), true); - //OBuilder.AddProperty("listeners", listenersBuilder.ToString(), true); - - #endregion - - // 如果要激活的Tab含有IFrame,则需要加载IFrame - // 改变Tab需要回发的脚本 - // Make sure X_AutoPostBackTabs property exist in X_STATE during page's first load. - //string tabchangeScript2 = String.Format("if(tabPanel.x_autoPostBackTabsContains(tab.id)){{{0}}}", GetPostBackEventReference()); - - string tabchangeScript = "X.wnd.updateIFrameNode(tab);"; - string postbackScript = String.Empty; - if (AutoPostBack) - { - tabchangeScript += "if(!tab.x_dynamic_added_tab){" + GetPostBackEventReference() + "}"; - } - - // 如果是动态添加的Tab,不做任何处理(在js/box/extender.js中) - //string tabchangeScript = "X.wnd.updateIFrameNode(tab);if(!tab.x_dynamic_added_tab){" + postbackScript + "}"; - OB.Listeners.AddProperty("tabchange", JsHelper.GetFunction(tabchangeScript, "tabPanel", "tab"), true); - - #endregion - - #region old code - - //// 添加隐藏字段 - //string needPostBackTabIDsScript = GetNeedPostBackTabIDsScript(); - //hiddenFieldsScript += needPostBackTabIDsScript; - - //if (AjaxPropertyChanged("NeedPostBackTabIdsScript", needPostBackTabIDsScript)) - //{ - // AddAjaxPropertyChangedScript(needPostBackTabIDsScript); - //} - - - //hiddenFieldsScript += GetSetHiddenFieldValueScript(ActiveTabHiddenFieldID, ActiveTabIndex.ToString().ToLower()); - - #endregion - - #region old code - - //// An bug in IE. - //string renderScript = "if(Ext.isIE){(function(){this.getActiveTab().removeClass('x-hide-display');}).defer(20,this);}"; - - //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); - - #endregion - - string jsContent = String.Format("var {0}=Ext.create('Ext.tab.Panel',{1});", XID, OB.ToString()); - AddStartupScript(jsContent); - } - - - #endregion - - #region IPostBackDataHandler Members - - /// <summary> - /// 处理回发数据 - /// </summary> - /// <param name="postDataKey">回发数据键</param> - /// <param name="postCollection">回发数据集</param> - /// <returns>回发数据是否改变</returns> - public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) - { - string postValue = postCollection[ActiveTabIndexHiddenFieldID]; - - int postActiveTabIndex = Convert.ToInt32(postValue); - if (ActiveTabIndex != postActiveTabIndex) - { - ActiveTabIndex = postActiveTabIndex; - XState.BackupPostDataProperty("ActiveTabIndex"); - return true; - } - return false; - } - - /// <summary> - /// 触发回发数据改变事件 - /// </summary> - public void RaisePostDataChangedEvent() - { - OnTabIndexChanged(EventArgs.Empty); - } - - #endregion - - #region IPostBackEventHandler - - /// <summary> - /// 处理回发事件 - /// </summary> - /// <param name="eventArgument">事件参数</param> - public void RaisePostBackEvent(string eventArgument) - { - OnTabIndexChanged(EventArgs.Empty); - } - - #endregion - - #region OnTabIndexChanged - - private static readonly object _handlerKey = new object(); - - /// <summary> - /// 选项卡改变事件 - /// </summary> - [Category(CategoryName.ACTION)] - [Description("选项卡改变事件")] - public event EventHandler TabIndexChanged - { - add - { - Events.AddHandler(_handlerKey, value); - } - remove - { - Events.RemoveHandler(_handlerKey, value); - } - } - - /// <summary> - /// 触发选项卡改变事件 - /// </summary> - /// <param name="e">事件参数</param> - protected virtual void OnTabIndexChanged(EventArgs e) - { - EventHandler handler = Events[_handlerKey] as EventHandler; - if (handler != null) - { - handler(this, e); - } - } - - #endregion - - #region GetShowReference - - /// <summary> - /// 获取添加选项卡的脚本 - /// </summary> - /// <param name="tabID">选项卡ID</param> - /// <param name="iframeUrl">IFrame地址</param> - /// <param name="tabTitle">选项卡标题</param> - /// <param name="enableClose">是否可以关闭</param> - /// <returns>客户端脚本</returns> - public string GetAddTabReference(string tabID, string iframeUrl, string tabTitle, bool enableClose) - { - return GetAddTabReference(tabID, iframeUrl, tabTitle, String.Empty, enableClose); - } - - /// <summary> - /// 获取添加选项卡的脚本 - /// </summary> - /// <param name="tabID">选项卡ID</param> - /// <param name="iframeUrl">IFrame地址</param> - /// <param name="tabTitle">选项卡标题</param> - /// <param name="iconUrl">选项卡图标</param> - /// <param name="enableClose">是否可以关闭</param> - /// <returns>客户端脚本</returns> - public string GetAddTabReference(string tabID, string iframeUrl, string tabTitle, string iconUrl, bool enableClose) - { - if (!String.IsNullOrEmpty(iframeUrl)) - { - iframeUrl = ResolveIFrameUrl(iframeUrl); - } - - JsObjectBuilder options = new JsObjectBuilder(); - options.AddProperty("id", tabID); - options.AddProperty("url", iframeUrl); - options.AddProperty("title", tabTitle); - options.AddProperty("closable", enableClose); - - string iconScript = String.Empty; - if (!String.IsNullOrEmpty(iconUrl)) - { - string className = String.Format("icon_{0}", System.Guid.NewGuid().ToString("N")); - iconScript = String.Format("X.util.addCSS('{0}','{1}');", className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, ResolveUrl(iconUrl))); - - options.AddProperty("iconCls", className); - } - - return iconScript + String.Format("{0}.addTab({1});", ScriptID, options); - } - - - /// <summary> - /// 获取移除选项卡的脚本 - /// </summary> - /// <param name="tabID">选项卡ID</param> - /// <returns>客户端脚本</returns> - public string GetRemoveTabReference(string tabID) - { - return String.Format("{0}.removeTab('{1}');", ScriptID, tabID); - } - - #endregion - - #region old code - - //#region SaveViewState/LoadViewState/TrackViewState - - //protected override object SaveViewState() - //{ - // object[] states = new object[] { base.SaveViewState(), ((IStateManager)Tabs).SaveViewState() }; - - // return states; - //} - - //protected override void LoadViewState(object savedState) - //{ - // if (savedState != null) - // { - // object[] states = (object[])savedState; - - // base.LoadViewState(states[0]); - - // ((IStateManager)Tabs).LoadViewState(states[1]); - // } - //} - - //protected override void TrackViewState() - //{ - // base.TrackViewState(); - - // ((IStateManager)Tabs).TrackViewState(); - //} - - //#endregion - - #endregion - } -} + +#region Comment + +/* + * Project: FineUI + * + * FileName: TabStrip.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 选项卡面板控件 + /// </summary> + [Designer("FineUI.Design.TabStripDesigner, FineUI.Design")] + [ToolboxData("<{0}:TabStrip ShowBorder=\"True\" ActiveTabIndex=\"0\" runat=\"server\"><Tabs><{0}:Tab runat=\"server\" Title=\"Tab1\" BodyPadding=\"5px\"></{0}:Tab><{0}:Tab runat=\"server\" Title=\"Tab2\" EnableBackgroundColor=\"true\" BodyPadding=\"5px\"></{0}:Tab></Tabs></{0}:TabStrip>")] + [ToolboxBitmap(typeof(TabStrip), "toolbox.TabStrip.bmp")] + [Description("选项卡面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("TabIndexChanged")] + public class TabStrip : PanelBase, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TabStrip() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("ActiveTabIndex"); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Card)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Card; + } + } + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool EnableLightBackgroundColor + //{ + // get + // { + // return false; + // } + //} + + #endregion + + #region Properties + + /// <summary> + /// 切换选项卡时是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("切换选项卡时是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + ///// <summary> + ///// 显示标题的背景颜色 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("显示标题的背景颜色")] + //public bool EnableTitleBackgroundColor + //{ + // get + // { + // object obj = FState["EnableTitleBackgroundColor"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["EnableTitleBackgroundColor"] = value; + // } + //} + + /// <summary> + /// 是否启用右键菜单(可用来关闭当前Tab和所有其他Tab) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用右键菜单(可用来关闭当前Tab和所有其他Tab)")] + public bool EnableTabCloseMenu + { + get + { + object obj = FState["EnableTabCloseMenu"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableTabCloseMenu"] = value; + } + } + + + ///// <summary> + ///// 选项卡之间空白 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "2")] + //[Description("选项卡之间空白")] + //public Unit TabMargin + //{ + // get + // { + // object obj = BoxState["TabMargin"]; + // return obj == null ? (Unit)2 : (Unit)obj; + // } + // set + // { + // BoxState["TabMargin"] = value; + // } + //} + + + /// <summary> + /// 选项卡显示的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TabPosition.Top)] + [Description("选项卡显示的位置")] + public TabPosition TabPosition + { + get + { + object obj = FState["TabPosition"]; + return obj == null ? TabPosition.Top : (TabPosition)obj; + } + set + { + FState["TabPosition"] = value; + } + } + + + ///// <summary> + ///// 是否启用延迟加载选项卡 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用延迟加载选项卡")] + //public bool EnableDeferredRender + //{ + // get + // { + // object obj = FState["EnableDeferredRender"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableDeferredRender"] = value; + // } + //} + + + + /// <summary> + /// [AJAX属性]激活选项卡的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("[AJAX属性]激活选项卡的索引")] + public int ActiveTabIndex + { + get + { + object obj = FState["ActiveTabIndex"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ActiveTabIndex"] = value; + } + } + + /// <summary> + /// 当前激活的选项卡 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Tab ActiveTab + { + get + { + if (ActiveTabIndex >= 0 && ActiveTabIndex < Tabs.Count) + { + return Tabs[ActiveTabIndex]; + } + return null; + } + } + + #endregion + + #region Tabs + + private TabCollection tabs; + + /// <summary> + /// 选项卡集合 + /// </summary> + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public virtual TabCollection Tabs + { + get + { + if (tabs == null) + { + tabs = new TabCollection(this); + } + return tabs; + } + } + + #endregion + + #region ActiveTabIndexHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ActiveTabIndexHiddenFieldID + { + get + { + return String.Format("{0}_ActiveTabIndex", ClientID); + } + } + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("需要回发的Tab列表")] + //private string NeedPostBackTabIDS + //{ + // get + // { + // return String.Format("{0}_need_postback_tab_ids", XID); + // } + //} + + #endregion + + #region old code - LoadFState/SaveFState + + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // // This property is persisted inside every Tabs. + // //if (property == "X_AutoPostBackTabs") + // //{ + // // AutoPostBackTabsFromJSON(state.getJArray(property)); + // //} + //} + + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // //SaveXProperty("X_AutoPostBackTabs", AutoPostBackTabsToJSON().ToString()); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // //// Make sure X_AutoPostBackTabs property exist in F_STATE during page's first load. + // //if (!Page.IsPostBack) + // //{ + // // FState.AddModifiedProperties("X_AutoPostBackTabs"); + // //} + // //else + // //{ + // // // Items has been changed in server-side code after onInit. + // // if (XPropertyModified("X_AutoPostBackTabs", AutoPostBackTabsToJSON().ToString())) + // // { + // // FState.AddModifiedProperties("X_AutoPostBackTabs"); + // // } + // //} + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // //if (property == "X_AutoPostBackTabs") + // //{ + // // state.put(property, AutoPostBackTabsToJSON()); + // //} + //} + + /////// <summary> + /////// These tabs need to auto postback when actived. + /////// </summary> + /////// <returns></returns> + ////private JArray AutoPostBackTabsToJSON() + ////{ + //// JArray ja = new JArray(); + //// for (int i = 0; i < Tabs.Count; i++) + //// { + //// Tab tab = Tabs[i]; + //// if (tab.EnablePostBack) + //// { + //// ja.Add(tab.ClientID); + //// } + //// } + //// return ja; + ////} + + ////private void AutoPostBackTabsFromJSON(JArray ja) + ////{ + //// List<string> autoPostackTabIds = new List<string>(JSONUtil.StringArrayFromJArray(ja)); + //// foreach (Tab tab in Tabs) + //// { + //// if (autoPostackTabIds.Contains(tab.ClientID)) + //// { + //// tab.EnablePostBack = true; + //// } + //// else + //// { + //// tab.EnablePostBack = false; + //// } + //// } + ////} + + #endregion + + #region old code - OnPreLoad + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("ActiveTabIndex", ActiveTabIndex); + // SaveAjaxProperty("NeedPostBackTabIdsScript", GetNeedPostBackTabIDsScript()); + + //} + + #endregion + + #region OnPreRender + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ActiveTabIndex")) + { + sb.AppendFormat("{0}.f_setActiveTab();", XID); + + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("tab"); + + //if (EnableTabCloseMenu) + //{ + // ResourceManager.Instance.AddJavaScriptComponent("menu"); + //} + + #region Tabs + + if (Tabs.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (Tab tab in Tabs) + { + if (tab.Visible) + { + ab.AddProperty(String.Format("{0}", tab.XID), true); + } + } + OB.AddProperty("items", ab.ToString(), true); + } + + #endregion + + #region options + + // 删除Layout配置参数 + OB.RemoveProperty("layout"); + + //OB.AddProperty(OptionName.TabMargin, TabMargin.Value); + OB.AddProperty("tabPosition", TabPositionHelper.GetName(TabPosition)); + + + //if (!EnableTitleBackgroundColor) + //{ + // OB.AddProperty("plain", true); + //} + + + + // 全部渲染,否则没有访问的Tab的内容渲染的位置不正确。 + OB.AddProperty("deferredRender", false); + + //OB.AddProperty("bufferResize", true); + + //// 在切换Tab时重新布局Tab的内容 + //OB.AddProperty("layoutOnTabChange", true); + //OB.AddProperty("enableTabScroll", true); + + if (EnableTabCloseMenu) + { + OB.AddProperty("plugins", "Ext.create('Ext.ux.TabCloseMenu')", true); + } + + ////Note: By default, a tab's close tool destroys the child tab Component and all its descendants. + //// This makes the child tab Component, and all its descendants unusable. + //// To enable re-use of a tab, configure the TabPanel with autoDestroy: false. + //OB.AddProperty("autoDestroy", false); + + #endregion + + #region ActiveTabIndex/IFrameDelayLoad + + OB.AddProperty("activeTab", ActiveTabIndex); + + //for (int i = 0; i < Tabs.Count; i++) + //{ + // Tab tab = Tabs[i]; + // if (tab.EnableIFrame && i != ActiveTabIndex) + // { + // // 拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url + // tab.IFrameDelayLoad = true; + // } + // else + // { + // tab.IFrameDelayLoad = false; + // } + //} + + #endregion + + #region Listeners + + #region old code + + // 如果存在Tabs集合 + //if (Tabs.Count > 0) + //{ + // JsArrayBuilder ab = new JsArrayBuilder(); + // foreach (Tab tab in Tabs) + // { + // ab.AddProperty(String.Format("{0}", tab.ClientID), true); + // } + // OB.AddProperty(OptionName.Items, ab.ToString(), true); + //} + + // listeners + //JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + //listenersBuilder.AddProperty(OptionName.Tabchange, String.Format("function(tabPanel, activeTab){{Ext.get('{0}').dom.value=tabPanel.items.indexOf(activeTab);}}", ActiveTabHiddenField.ClientID), true); + //OBuilder.AddProperty("listeners", listenersBuilder.ToString(), true); + + #endregion + + // 如果要激活的Tab含有IFrame,则需要加载IFrame + // 改变Tab需要回发的脚本 + // Make sure X_AutoPostBackTabs property exist in F_STATE during page's first load. + //string tabchangeScript2 = String.Format("if(tabPanel.f_autoPostBackTabsContains(tab.id)){{{0}}}", GetPostBackEventReference()); + + string tabchangeScript = "F.wnd.updateIFrameNode(tab);"; + string postbackScript = String.Empty; + if (AutoPostBack) + { + tabchangeScript += "if(!tab.f_dynamic_added_tab){" + GetPostBackEventReference("TabIndexChanged") + "}"; + } + + // 如果是动态添加的Tab,不做任何处理(在js/box/extender.js中) + //string tabchangeScript = "F.wnd.updateIFrameNode(tab);if(!tab.f_dynamic_added_tab){" + postbackScript + "}"; + //OB.Listeners.AddProperty("tabchange", JsHelper.GetFunction(tabchangeScript, "tabPanel", "tab"), true); + AddListener("tabchange", tabchangeScript, "tabPanel", "tab"); + + #endregion + + #region old code + + //// 添加隐藏字段 + //string needPostBackTabIDsScript = GetNeedPostBackTabIDsScript(); + //hiddenFieldsScript += needPostBackTabIDsScript; + + //if (AjaxPropertyChanged("NeedPostBackTabIdsScript", needPostBackTabIDsScript)) + //{ + // AddAjaxPropertyChangedScript(needPostBackTabIDsScript); + //} + + + //hiddenFieldsScript += GetSetHiddenFieldValueScript(ActiveTabHiddenFieldID, ActiveTabIndex.ToString().ToLower()); + + #endregion + + #region old code + + //// An bug in IE. + //string renderScript = "if(Ext.isIE){(function(){this.getActiveTab().removeClass('x-hide-display');}).defer(20,this);}"; + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); + + #endregion + + string jsContent = String.Format("var {0}=Ext.create('Ext.tab.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postValue = postCollection[ActiveTabIndexHiddenFieldID]; + + int postActiveTabIndex = Convert.ToInt32(postValue); + if (ActiveTabIndex != postActiveTabIndex) + { + ActiveTabIndex = postActiveTabIndex; + FState.BackupPostDataProperty("ActiveTabIndex"); + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + //OnTabIndexChanged(EventArgs.Empty); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + if (eventArgument == "TabIndexChanged") + { + OnTabIndexChanged(EventArgs.Empty); + } + } + + #endregion + + #region OnTabIndexChanged + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 选项卡改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选项卡改变事件")] + public event EventHandler TabIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选项卡改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTabIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region GetShowReference + + /// <summary> + /// 获取添加选项卡的脚本 + /// </summary> + /// <param name="tabID">选项卡ID</param> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="tabTitle">选项卡标题</param> + /// <param name="enableClose">是否可以关闭</param> + /// <returns>客户端脚本</returns> + public string GetAddTabReference(string tabID, string iframeUrl, string tabTitle, bool enableClose) + { + return GetAddTabReference(tabID, iframeUrl, tabTitle, String.Empty, enableClose); + } + + /// <summary> + /// 获取添加选项卡的脚本 + /// </summary> + /// <param name="tabID">选项卡ID</param> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="tabTitle">选项卡标题</param> + /// <param name="iconUrl">选项卡图标</param> + /// <param name="enableClose">是否可以关闭</param> + /// <returns>客户端脚本</returns> + public string GetAddTabReference(string tabID, string iframeUrl, string tabTitle, string iconUrl, bool enableClose) + { + if (!String.IsNullOrEmpty(iframeUrl)) + { + iframeUrl = ResolveIFrameUrl(iframeUrl); + } + + JsObjectBuilder options = new JsObjectBuilder(); + options.AddProperty("id", tabID); + options.AddProperty("url", iframeUrl); + options.AddProperty("title", tabTitle); + options.AddProperty("closable", enableClose); + + string iconScript = String.Empty; + if (!String.IsNullOrEmpty(iconUrl)) + { + string className = String.Format("icon_{0}", System.Guid.NewGuid().ToString("N")); + iconScript = String.Format("F.addCSS('{0}','{1}');", className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, ResolveUrl(iconUrl))); + + options.AddProperty("iconCls", className); + } + + return iconScript + String.Format("{0}.addTab({1});", ScriptID, options); + } + + + /// <summary> + /// 获取移除选项卡的脚本 + /// </summary> + /// <param name="tabID">选项卡ID</param> + /// <returns>客户端脚本</returns> + public string GetRemoveTabReference(string tabID) + { + return String.Format("{0}.removeTab('{1}');", ScriptID, tabID); + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { base.SaveViewState(), ((IStateManager)Tabs).SaveViewState() }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Tabs).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Tabs).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI/bin/Release/FineUI.dll b/FineUI/bin/Release/FineUI.dll index 63b17876df781a26ff519e61f993a6f7dcc0838c..076836213fc6c73b240bd41db198d1d0e04d27b1 100644 GIT binary patch literal 641024 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�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 literal 620032 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 #Q2_G<4HwBDNC%p2-J<=V@| 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�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⁣Hd6)#ty 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 Y_&50{QQ-_l!M@48)BpeT|6B|FPY`a!DgXcg diff --git a/FineUI/bin/Release/FineUI.xml b/FineUI/bin/Release/FineUI.xml index 3545719..47d050a 100644 --- a/FineUI/bin/Release/FineUI.xml +++ b/FineUI/bin/Release/FineUI.xml @@ -1,20693 +1,21256 @@ -<?xml version="1.0"?> -<doc> - <assembly> - <name>FineUI</name> - </assembly> - <members> - <member name="T:FineUI.FormBase"> - <summary> - 表单容器控件基类 - </summary> - </member> - <member name="T:FineUI.CollapsablePanel"> - <summary> - 可折叠面板控件基类(抽象类) - </summary> - </member> - <member name="T:FineUI.PanelBase"> - <summary> - 面板控件基类(抽象类) - </summary> - </member> - <member name="T:FineUI.Container"> - <summary> - 容器控件基类(抽象类) - </summary> - </member> - <member name="T:FineUI.BoxComponent"> - <summary> - 控件基类(抽象类) - </summary> - </member> - <member name="T:FineUI.Component"> - <summary> - 控件基类(抽象类) - </summary> - </member> - <member name="T:FineUI.ControlBase"> - <summary> - 控件基类(抽象类) - </summary> - </member> - <member name="M:FineUI.ControlBase.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.ControlBase.AddServerAjaxProperties(System.String[])"> - <summary> - 添加服务器AJAX属性 - </summary> - <param name="props">属性列表</param> - </member> - <member name="M:FineUI.ControlBase.AddClientAjaxProperties(System.String[])"> - <summary> - 添加客户端AJAX属性 - </summary> - <param name="props">属性列表</param> - </member> - <member name="M:FineUI.ControlBase.AddGzippedAjaxProperties(System.String[])"> - <summary> - 添加Gzip压缩属性 - </summary> - <param name="props">属性列表</param> - </member> - <member name="F:FineUI.ControlBase.InitialComplete"> - <summary> - 标示是否初始化完成 - </summary> - </member> - <member name="M:FineUI.ControlBase.OnInit(System.EventArgs)"> - <summary> - 页面初始化事件 - </summary> - <param name="e"></param> - </member> - <member name="M:FineUI.ControlBase.OnInitControl"> - <summary> - 在备份初始化属性之前修改属性值 - - 此时对控件的属性做修改是安全的: - 1. 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 - 2. 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 X_STATE 已经恢复完毕 - </summary> - </member> - <member name="M:FineUI.ControlBase.RenderControl(System.Web.UI.HtmlTextWriter)"> - <summary> - 重载 RenderControl,为了向子控件公开 RenderBeginTag 和 RenderEndTag 两个方法 - </summary> - <param name="writer">服务器控件输出流</param> - </member> - <member name="M:FineUI.ControlBase.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的开始标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.ControlBase.RenderEndTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的结束标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.ControlBase.OnPreRender(System.EventArgs)"> - <summary> - 渲染 HTML 之前调用 - </summary> - <param name="e"></param> - </member> - <member name="M:FineUI.ControlBase.OnBothPreRender"> - <summary> - 渲染 HTML 之前调用(计算被修改属性列表之前调用,可以在此修改属性) - </summary> - </member> - <member name="M:FineUI.ControlBase.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.ControlBase.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.ControlBase.GetXStateScriptID"> - <summary> - 获取XState的JS变量 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.ControlBase.PropertyModified(System.String)"> - <summary> - 回发过程中此属性是否被改变 - 如果是客户端可以改变的属性,仅在服务器端改变时才返回 true, - (如果仅是客户端改变,则返回 false,因为客户端改变的属性不需要再输出相应的 JavaScript 脚本) - </summary> - <param name="propertyName"></param> - <returns></returns> - </member> - <member name="M:FineUI.ControlBase.PropertyModified(System.String[])"> - <summary> - 回发过程中这些属性是否被改变 - 只要任何属性被改变,就返回 true - </summary> - <param name="propertyNames"></param> - <returns></returns> - </member> - <member name="M:FineUI.ControlBase.RecoverPropertiesFromJObject(Newtonsoft.Json.Linq.JObject)"> - <summary> - 从JObject恢复控件的属性 - </summary> - <param name="state">对象属性的JObject形式</param> - </member> - <member name="M:FineUI.ControlBase.ConvertPropertiesToJObject(System.Collections.Generic.List{System.String})"> - <summary> - 将控件的属性列表转化为JObject对象 - </summary> - <param name="propertyList">属性列表</param> - <returns>属性列表的JObject形式</returns> - </member> - <member name="M:FineUI.ControlBase.AddAjaxScript(System.String)"> - <summary> - AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 - </summary> - <param name="script"></param> - </member> - <member name="M:FineUI.ControlBase.AddAjaxScript(System.Text.StringBuilder)"> - <summary> - AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 - </summary> - <param name="sb"></param> - </member> - <member name="M:FineUI.ControlBase.AddStartupCSS(System.String,System.String)"> - <summary> - 添加CSS样式 - </summary> - <param name="key">键</param> - <param name="cssContent">CSS内容</param> - </member> - <member name="M:FineUI.ControlBase.RemoveStartupCSS(System.String)"> - <summary> - 删除CSS样式 - </summary> - <param name="key">键</param> - </member> - <member name="M:FineUI.ControlBase.AddStartupAbsoluteScript(System.String)"> - <summary> - 向页面添加控件无关脚本 - </summary> - <param name="script">客户端脚本</param> - </member> - <member name="M:FineUI.ControlBase.AddStartupAbsoluteScript(System.String,System.Int32)"> - <summary> - 向页面添加控件无关脚本 - </summary> - <param name="script">客户端脚本</param> - <param name="level">脚本层级</param> - </member> - <member name="M:FineUI.ControlBase.AddStartupScript(System.String)"> - <summary> - 添加控件相关脚本 - </summary> - <param name="scriptContent">客户端脚本</param> - </member> - <member name="M:FineUI.ControlBase.GetHiddenPropertyChangedScript"> - <summary> - 获取 Hidden 属性改变的 JavaScript 脚本 - 有些控件可能需要特别的逻辑,因此这里为虚函数(比如 Window 控件) - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ControlBase.GetEnabledPropertyChangedScript"> - <summary> - 获取 Enabled 属性改变的 JavaScript 脚本 - 有些控件可能需要特别的逻辑,因此这里为虚函数 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ControlBase.GetPostBackEventReference"> - <summary> - 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','');) - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ControlBase.GetPostBackEventReference(System.String)"> - <summary> - 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) - </summary> - <param name="eventArgument">事件参数</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ControlBase.GetSetHiddenFieldValueScript(System.String,System.String)"> - <summary> - 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) - </summary> - <param name="id">隐藏字段ID</param> - <param name="value">隐藏字段值</param> - <returns></returns> - </member> - <member name="M:FineUI.ControlBase.GetSetHiddenFieldValueScript(System.String,System.String,System.String)"> - <summary> - 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) - </summary> - <param name="id">隐藏字段ID</param> - <param name="value">隐藏字段值</param> - <param name="windowObj">隐藏字段所在的页面对象(JavaScript实例window)</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ControlBase.ResolveAttribuites(FineUI.HtmlNodeBuilder)"> - <summary> - 添加Attributes中的属性值 - </summary> - <param name="htmlBuilder">HtmlNodeBuilder对象</param> - </member> - <member name="P:FineUI.ControlBase.XState"> - <summary> - XState用来在服务器和客户端之间持久化控件状态。 - </summary> - </member> - <member name="P:FineUI.ControlBase.GzippedAjaxProperties"> - <summary> - 目前Gzippped的属性支持JObject/JArray/String类型 - </summary> - </member> - <member name="P:FineUI.ControlBase.XID"> - <summary> - JavaScript中使用ID(比如:x0, x1) - </summary> - </member> - <member name="P:FineUI.ControlBase.ScriptID"> - <summary> - 获取控件实例的JavaScript代码(比如:X('RegionPanel1_Button1')) - </summary> - </member> - <member name="P:FineUI.ControlBase.RenderWrapperNode"> - <summary> - 是否向页面输出控件的外部容器(默认:true) - 否:只创建Javascript对象而不添加到页面中 - 是:创建Javascript对象,并添加到页面中,页面上添加占位符 - </summary> - </member> - <member name="P:FineUI.ControlBase.OB"> - <summary> - 参数对象创建器 - </summary> - </member> - <member name="P:FineUI.ControlBase.PostBackState"> - <summary> - 从 HTTP 请求中恢复当前控件的状态 - 比如当前请求 Request.Form["X_STATE"] = {"btnClientClick":{"OnClientClick":"X.util.alert(\"This is an alert dialog\",\"\",Ext.MessageBox.INFO,'');"},"btnPressed":{"Pressed":false}} - 并且当前控件的 ClientID 是 "btnPressed",则返回值为 JObject 对象 {"Pressed":false} - </summary> - </member> - <member name="P:FineUI.ControlBase.CollectionGroupName"> - <summary> - 此控件所在的集合分组,只在BaseCollection中使用 - </summary> - </member> - <member name="P:FineUI.ControlBase.EnableViewState"> - <summary> - 不支持此属性(禁用控件默认的ViewState) - </summary> - </member> - <member name="P:FineUI.ControlBase.ClientID"> - <summary> - 控件的客户端ID(比如:RegionPanel1_Button1) - </summary> - </member> - <member name="P:FineUI.ControlBase.WrapperID"> - <summary> - 控件外部容器的客户端ID(比如:Button1_wrapper) - </summary> - </member> - <member name="P:FineUI.ControlBase.ProductName"> - <summary> - 产品名称 - </summary> - </member> - <member name="P:FineUI.ControlBase.ProductVersion"> - <summary> - 产品版本 - </summary> - </member> - <member name="P:FineUI.ControlBase.Attributes"> - <summary> - HTML标签属性 - </summary> - </member> - <member name="P:FineUI.ControlBase.ID"> - <summary> - 控件ID - </summary> - </member> - <member name="P:FineUI.ControlBase.Enabled"> - <summary> - [AJAX属性]是否可用 - </summary> - </member> - <member name="P:FineUI.ControlBase.Visible"> - <summary> - 指示控件是否被渲染出来(如果想要显示隐藏控件,请使用Hidden属性) - </summary> - </member> - <member name="P:FineUI.ControlBase.Hidden"> - <summary> - [AJAX属性]是否隐藏控件 - </summary> - </member> - <member name="P:FineUI.ControlBase.HideMode"> - <summary> - 隐藏模式 - </summary> - </member> - <member name="P:FineUI.ControlBase.EnableAjax"> - <summary> - 是否启用AJAX - </summary> - </member> - <member name="P:FineUI.ControlBase.EnableXStateCompress"> - <summary> - 是否启用XState压缩(默认为true) - </summary> - </member> - <member name="P:FineUI.ControlBase.EnableAjaxLoading"> - <summary> - 是否启用Ajax正在加载提示 - </summary> - </member> - <member name="P:FineUI.ControlBase.AjaxLoadingType"> - <summary> - Ajax正在加载提示的类型 - </summary> - </member> - <member name="P:FineUI.ControlBase.IsFineUIAjaxPostBack"> - <summary> - 是否处于FineUI的AJAX回发过程 - </summary> - </member> - <member name="M:FineUI.Component.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Component.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Component.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Component.Focus"> - <summary> - 使控件获得焦点 - </summary> - </member> - <member name="M:FineUI.Component.Focus(System.Boolean)"> - <summary> - 使控件获得焦点,并选中控件中的文本内容 - </summary> - <param name="selectText">是否选中控件中的文本内容</param> - </member> - <member name="M:FineUI.Component.Focus(System.Boolean,System.Int32)"> - <summary> - 使控件获得焦点,并选中控件中的文本内容 - </summary> - <param name="selectText">是否选中控件中的文本内容</param> - <param name="delayMilliseconds">使控件获得焦点前延迟的毫秒数</param> - </member> - <member name="M:FineUI.Component.GetFocusReference"> - <summary> - 获得使控件获得焦点的脚本 - </summary> - <returns>JS脚本</returns> - </member> - <member name="M:FineUI.Component.GetFocusReference(System.Boolean)"> - <summary> - 获得使控件获得焦点,并选中控件中的文本内容的脚本 - </summary> - <param name="selectText">是否选中控件中的文本内容</param> - <returns>JS脚本</returns> - </member> - <member name="M:FineUI.Component.GetFocusReference(System.Boolean,System.Int32)"> - <summary> - 获得使控件获得焦点,并选中控件中的文本内容的脚本 - </summary> - <param name="selectText">是否选中控件中的文本内容</param> - <param name="delayMilliseconds">使控件获得焦点前延迟的毫秒数</param> - <returns>JS脚本</returns> - </member> - <member name="M:FineUI.Component.AddExtraStyle(System.String,System.String)"> - <summary> - 为已经添加到OB中的Style增加新的样式 - 注意:这个key-value不会保存到属性CssStyle中 - </summary> - <param name="key"></param> - <param name="value"></param> - </member> - <member name="P:FineUI.Component.FocusOnPageLoad"> - <summary> - 页面加载后立即获得焦点 - </summary> - </member> - <member name="P:FineUI.Component.CssClass"> - <summary> - [AJAX属性]控件样式类名 - </summary> - </member> - <member name="P:FineUI.Component.CssStyle"> - <summary> - [AJAX属性]控件样式 - </summary> - </member> - <member name="M:FineUI.BoxComponent.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.BoxComponent.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.BoxComponent.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.BoxComponent.Width"> - <summary> - 宽度 - </summary> - </member> - <member name="P:FineUI.BoxComponent.Height"> - <summary> - 高度 - </summary> - </member> - <member name="P:FineUI.BoxComponent.AnchorValue"> - <summary> - 锚点值(当父容器的Layout=Anchor时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.ColumnWidth"> - <summary> - 列的宽度(当父容器的Layout=Column时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.RowHeight"> - <summary> - 行的宽度(当父容器的Layout=Row时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.AbsoluteX"> - <summary> - 绝对定位的X坐标(当父容器的Layout=Absolute时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.AbsoluteY"> - <summary> - 绝对定位的Y坐标(当父容器的Layout=Absolute时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.TableConfigColumns"> - <summary> - 表格列数(当父容器的Layout=Table时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.TableRowspan"> - <summary> - 表格合并行(当父容器的Layout=Table时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.TableColspan"> - <summary> - 表格合并列(当父容器的Layout=Table时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.BoxConfigAlign"> - <summary> - 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.BoxConfigPosition"> - <summary> - 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.BoxConfigPadding"> - <summary> - 内边距(当本容器的Layout=VBox或者HBox时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.BoxConfigChildMargin"> - <summary> - 子控件的外边距(当本容器的Layout=VBox或者HBox时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.BoxFlex"> - <summary> - 控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效) - </summary> - </member> - <member name="P:FineUI.BoxComponent.BoxMargin"> - <summary> - 外边距(当父容器的Layout=VBox或者HBox时有效) - </summary> - </member> - <member name="M:FineUI.Container.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Container.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Container.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.Container.FocusOnPageLoad"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Container.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="M:FineUI.PanelBase.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.PanelBase.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的开始标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.PanelBase.RenderEndTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的结束标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.PanelBase.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.PanelBase.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.PanelBase.RefreshIFrame"> - <summary> - 刷新面板中的IFrame页面 - </summary> - </member> - <member name="M:FineUI.PanelBase.GetRefreshIFrameReference"> - <summary> - 获取刷新面板中IFrame页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.PanelBase.Reset"> - <summary> - 重置面板中所有字段 - </summary> - </member> - <member name="M:FineUI.PanelBase.GetResetReference"> - <summary> - 获取重置面板中所有字段的客户端脚本 - </summary> - <returns></returns> - </member> - <member name="P:FineUI.PanelBase.AutoScroll"> - <summary> - 是否自动滚动 - </summary> - </member> - <member name="P:FineUI.PanelBase.FooterBarAlign"> - <summary> - 页脚工具栏的排列位置 - </summary> - </member> - <member name="P:FineUI.PanelBase.EnableFrame"> - <summary> - 启用自定义的圆角边框 - </summary> - </member> - <member name="P:FineUI.PanelBase.EnableBackgroundColor"> - <summary> - 废弃EnableBackgroundColor属性,以便和ExtJS保持一致。 - </summary> - </member> - <member name="P:FineUI.PanelBase.BodyStyle"> - <summary> - 内容区域的样式 - </summary> - </member> - <member name="P:FineUI.PanelBase.BodyPadding"> - <summary> - 内容区域的内边距,字符串类型,可以设置上下左右的内边距,比如'0px 5px'或'5px 10px 2px 2px' - </summary> - </member> - <member name="P:FineUI.PanelBase.ShowBorder"> - <summary> - 是否显示边框 - </summary> - </member> - <member name="P:FineUI.PanelBase.Toolbars"> - <summary> - 工具栏控件 - </summary> - </member> - <member name="P:FineUI.PanelBase.Items"> - <summary> - 子控件 - </summary> - </member> - <member name="P:FineUI.PanelBase.IFrameUrl"> - <summary> - [AJAX属性]IFrame的地址 - </summary> - </member> - <member name="P:FineUI.PanelBase.IFrameName"> - <summary> - IFrame的名称 - </summary> - </member> - <member name="P:FineUI.PanelBase.EnableIFrame"> - <summary> - 是否启用IFrame - </summary> - </member> - <member name="M:FineUI.CollapsablePanel.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.CollapsablePanel.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.CollapsablePanel.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.CollapsablePanel.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.CollapsablePanel.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="P:FineUI.CollapsablePanel.Expanded"> - <summary> - 是否展开 - </summary> - </member> - <member name="P:FineUI.CollapsablePanel.Collapsed"> - <summary> - [AJAX属性]是否折叠 - </summary> - </member> - <member name="P:FineUI.CollapsablePanel.EnableCollapse"> - <summary> - 是否允许折叠 - </summary> - </member> - <member name="P:FineUI.CollapsablePanel.Title"> - <summary> - [AJAX属性]标题 - </summary> - </member> - <member name="P:FineUI.CollapsablePanel.ShowHeader"> - <summary> - 是否显示标题栏 - </summary> - </member> - <member name="P:FineUI.CollapsablePanel.IconUrl"> - <summary> - 图标地址 - </summary> - </member> - <member name="P:FineUI.CollapsablePanel.Icon"> - <summary> - 图标 - </summary> - </member> - <member name="M:FineUI.FormBase.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.FormBase.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.FormBase.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.FormBase.EnableIFrame"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.FormBase.IFrameUrl"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.FormBase.IFrameName"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.FormBase.Layout"> - <summary> - [只读]布局类型 - </summary> - </member> - <member name="P:FineUI.FormBase.LabelWidth"> - <summary> - 标签的宽度 - </summary> - </member> - <member name="P:FineUI.FormBase.LabelSeparator"> - <summary> - 标签与字段的分隔符 - </summary> - </member> - <member name="P:FineUI.FormBase.OffsetRight"> - <summary> - 距离右侧边界的宽度 - </summary> - </member> - <member name="P:FineUI.FormBase.LabelAlign"> - <summary> - 标签的位置 - </summary> - </member> - <member name="P:FineUI.FormBase.MessageTarget"> - <summary> - 表单中消息的位置 - </summary> - </member> - <member name="T:FineUI.RealTextField"> - <summary> - 表单文本输入框字段基类(抽象类) - </summary> - </member> - <member name="T:FineUI.TextField"> - <summary> - 表单文本输入框字段基类(抽象类) - </summary> - </member> - <member name="T:FineUI.Field"> - <summary> - 表单字段基类(抽象类) - </summary> - </member> - <member name="M:FineUI.Field.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Field.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Field.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Field.Reset"> - <summary> - 重置此字段的值(比如用来清空FileUpload的内容) - </summary> - </member> - <member name="M:FineUI.Field.GetResetReference"> - <summary> - 获取重置此字段的客户端脚本 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Field.GetValueReference"> - <summary> - 获取此字段值的客户端脚本(注意返回的脚本不带结束分号) - </summary> - <returns>客户端脚本</returns> - </member> - <member name="P:FineUI.Field.ShowLabel"> - <summary> - 是否显示标签 - </summary> - </member> - <member name="P:FineUI.Field.ShowEmptyLabel"> - <summary> - 是否显示空白的标签 - </summary> - </member> - <member name="P:FineUI.Field.Label"> - <summary> - [AJAX属性]标签文本 - </summary> - </member> - <member name="P:FineUI.Field.LabelSeparator"> - <summary> - 表单中字段与标签的分隔符 - </summary> - </member> - <member name="P:FineUI.Field.ShowRedStar"> - <summary> - 在标签后面显示红色的星号(用来标识必填项) - </summary> - </member> - <member name="P:FineUI.Field.Readonly"> - <summary> - [AJAX属性]表单控件的只读状态 - </summary> - </member> - <member name="P:FineUI.Field.TabIndex"> - <summary> - Tab按键的跳转顺序 - </summary> - </member> - <member name="P:FineUI.Field.OffsetRight"> - <summary> - 距离右侧边界的宽度 - </summary> - </member> - <member name="M:FineUI.TextField.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.TextField.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TextField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.TextField.MarkInvalid(System.String)"> - <summary> - 设置字段验证失败的提示信息 - </summary> - <param name="message">提示信息</param> - </member> - <member name="M:FineUI.TextField.ClearInvalid"> - <summary> - 清除验证失败的提示信息 - </summary> - </member> - <member name="M:FineUI.TextField.GetMarkInvalidReference(System.String)"> - <summary> - 获取字段验证失败提示信息的客户端脚本 - </summary> - <param name="message">提示信息</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.TextField.GetClearInvalidReference"> - <summary> - 获取清除验证失败提示信息的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="P:FineUI.TextField.Required"> - <summary> - 是否必填项 - </summary> - </member> - <member name="P:FineUI.TextField.RequiredMessage"> - <summary> - 为空时提示信息 - </summary> - </member> - <member name="P:FineUI.TextField.MaxLength"> - <summary> - 最大长度 - </summary> - </member> - <member name="P:FineUI.TextField.MaxLengthMessage"> - <summary> - 超过最大长度时提示信息 - </summary> - </member> - <member name="P:FineUI.TextField.MinLength"> - <summary> - 最小长度 - </summary> - </member> - <member name="P:FineUI.TextField.MinLengthMessage"> - <summary> - 少于最小长度时提示信息 - </summary> - </member> - <member name="P:FineUI.TextField.RegexPattern"> - <summary> - RegexPattern - </summary> - </member> - <member name="P:FineUI.TextField.Regex"> - <summary> - 正则表达式 - </summary> - </member> - <member name="P:FineUI.TextField.RegexMessage"> - <summary> - 不满足正则表达式时提示信息 - </summary> - </member> - <member name="P:FineUI.TextField.RegexIgnoreCase"> - <summary> - 正则表达式是否忽略大小写 - </summary> - </member> - <member name="P:FineUI.TextField.CompareControl"> - <summary> - 需要比较的控件ID - </summary> - </member> - <member name="P:FineUI.TextField.CompareValue"> - <summary> - 需要比较的值 - </summary> - </member> - <member name="P:FineUI.TextField.CompareOperator"> - <summary> - 比较操作符 - </summary> - </member> - <member name="P:FineUI.TextField.CompareType"> - <summary> - 比较的类型 - </summary> - </member> - <member name="P:FineUI.TextField.CompareMessage"> - <summary> - 不满足比较条件时提示信息 - </summary> - </member> - <member name="P:FineUI.TextField.NextFocusControl"> - <summary> - 下一步获得焦点的控件(响应回车事件) - </summary> - </member> - <member name="M:FineUI.RealTextField.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.RealTextField.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.RealTextField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.RealTextField.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.RealTextField.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.RealTextField.OnTextChanged(System.EventArgs)"> - <summary> - 触发文本改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.RealTextField.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.RealTextField.OnBlur(System.EventArgs)"> - <summary> - 触发失去焦点事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.RealTextField.EmptyText"> - <summary> - 文本框为空时显示的文本 - </summary> - </member> - <member name="P:FineUI.RealTextField.Text"> - <summary> - [AJAX属性]文本 - </summary> - </member> - <member name="P:FineUI.RealTextField.AutoPostBack"> - <summary> - 是否自动回发(文本值改变) - </summary> - </member> - <member name="P:FineUI.RealTextField.EnableBlurEvent"> - <summary> - 启用失去焦点事件 - </summary> - </member> - <member name="E:FineUI.RealTextField.TextChanged"> - <summary> - 文本改变事件(需要启用AutoPostBack) - </summary> - </member> - <member name="E:FineUI.RealTextField.Blur"> - <summary> - 失去焦点事件(需要启用EnableBlurEvent) - </summary> - </member> - <member name="T:FineUI.FieldType"> - <summary> - 表格可编辑字段的类型 - </summary> - </member> - <member name="F:FineUI.FieldType.Auto"> - <summary> - 自动(默认值) - </summary> - </member> - <member name="F:FineUI.FieldType.String"> - <summary> - 字符串 - </summary> - </member> - <member name="F:FineUI.FieldType.Int"> - <summary> - 整型 - </summary> - </member> - <member name="F:FineUI.FieldType.Float"> - <summary> - 浮点数 - </summary> - </member> - <member name="F:FineUI.FieldType.Boolean"> - <summary> - 布尔型 - </summary> - </member> - <member name="F:FineUI.FieldType.Date"> - <summary> - 日期 - </summary> - </member> - <member name="T:FineUI.FieldTypeName"> - <summary> - 表格可编辑字段的类型名称 - </summary> - </member> - <member name="T:FineUI.Renderer"> - <summary> - 表格可编辑字段渲染器 - </summary> - </member> - <member name="F:FineUI.Renderer.None"> - <summary> - 无(默认值) - </summary> - </member> - <member name="F:FineUI.Renderer.Capitalize"> - <summary> - 首字母大写 - </summary> - </member> - <member name="F:FineUI.Renderer.Date"> - <summary> - 日期(RendererArgument来指定日期格式化字符串) - RendererArgument: - 1. d 月中的某一天。一位数的日期没有前导零。 - 2. dd 月中的某一天。一位数的日期有一个前导零。 - 3. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 - 4. dddd 周中某天的完整名称,在 DayNames 中定义。 - 5. M 月份数字。一位数的月份没有前导零。 - 6. MM 月份数字。一位数的月份有一个前导零。 - 7. MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 - 8. MMMM 月份的完整名称,在 MonthNames 中定义。 - 9. y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 - 10. yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 - 11. yyyy 包括纪元的四位数的年份。 - </summary> - </member> - <member name="F:FineUI.Renderer.Ellipsis"> - <summary> - 截断字符串并添加省略号(RendererArgument来指定最大长度) - </summary> - </member> - <member name="F:FineUI.Renderer.FileSize"> - <summary> - 文件大小 - </summary> - </member> - <member name="F:FineUI.Renderer.HtmlEncode"> - <summary> - HTML编码 - </summary> - </member> - <member name="F:FineUI.Renderer.HtmlDecode"> - <summary> - HTML解码 - </summary> - </member> - <member name="F:FineUI.Renderer.Lowercase"> - <summary> - 转化为小写字符 - </summary> - </member> - <member name="F:FineUI.Renderer.Uppercase"> - <summary> - 转化为大写字符 - </summary> - </member> - <member name="F:FineUI.Renderer.NL2BR"> - <summary> - 换行符转换为HTML标签<br/> - </summary> - </member> - <member name="F:FineUI.Renderer.Number"> - <summary> - 格式化为数字(RendererArgument来指定数字的显示格式) - RendererArgument: - 1. 0 - (123456) 只显示数字,没有精度 - 2. 0.00 - (123456.78) 只显示数字,两位精度 - 3. 0.0000 - (123456.7890) 只显示数字,四位精度 - 4. 0,000 - (123,456) 显示数字和逗号,没有精度 - 5. 0,000.00 - (123,456.78) 显示数字和逗号,两位精度 - </summary> - </member> - <member name="F:FineUI.Renderer.StripScripts"> - <summary> - 删除所有的脚本标签 - </summary> - </member> - <member name="F:FineUI.Renderer.StripTags"> - <summary> - 删除所有的标签 - </summary> - </member> - <member name="F:FineUI.Renderer.Trim"> - <summary> - 清除字符串两端的空白字符 - </summary> - </member> - <member name="F:FineUI.Renderer.UsMoney"> - <summary> - 美元 - </summary> - </member> - <member name="T:FineUI.RendererName"> - <summary> - 表格可编辑字段渲染器名称 - </summary> - </member> - <member name="T:FineUI.MessageTarget"> - <summary> - 表单客户端验证提示消息的类型 - </summary> - </member> - <member name="F:FineUI.MessageTarget.Qtip"> - <summary> - 浮动提示(默认值) - </summary> - </member> - <member name="F:FineUI.MessageTarget.Title"> - <summary> - 使用HTML标签的title属性 - </summary> - </member> - <member name="F:FineUI.MessageTarget.Under"> - <summary> - 在字段下面通过一个div层来显示消息 - </summary> - </member> - <member name="F:FineUI.MessageTarget.Side"> - <summary> - 在字段右侧显示一个错误图标 - </summary> - </member> - <member name="F:FineUI.MessageTarget.None"> - <summary> - 不显示错误信息 - </summary> - </member> - <member name="T:FineUI.MessageTargetHelper"> - <summary> - 提示消息的类型名称 - </summary> - </member> - <member name="T:FineUI.CheckedEventArgs"> - <summary> - 复选框/单选框/复选框菜单按钮的事件参数 - </summary> - </member> - <member name="M:FineUI.CheckedEventArgs.#ctor(System.Boolean)"> - <summary> - 构造函数 - </summary> - <param name="isChecked">是否选中</param> - </member> - <member name="P:FineUI.CheckedEventArgs.Checked"> - <summary> - 是否选中 - </summary> - </member> - <member name="T:FineUI.GridColumnEditorCollection"> - <summary> - 控件集合 - </summary> - </member> - <member name="T:FineUI.BaseCollection`1"> - <summary> - 控件集合 - </summary> - </member> - <member name="M:FineUI.BaseCollection`1.#ctor(FineUI.ControlBase)"> - <summary> - 构造函数 - </summary> - <param name="parentControl">父控件实例</param> - </member> - <member name="M:FineUI.BaseCollection`1.InsertItem(System.Int32,`0)"> - <summary> - 向集合中插入一个元素 - </summary> - <param name="index"></param> - <param name="item"></param> - </member> - <member name="M:FineUI.BaseCollection`1.RemoveItem(System.Int32)"> - <summary> - 删除集合中的一个元素 - </summary> - <param name="index"></param> - </member> - <member name="M:FineUI.BaseCollection`1.ClearItems"> - <summary> - 清空集合 - </summary> - </member> - <member name="M:FineUI.BaseCollection`1.GetStartIndex"> - <summary> - 获取类型 T 在父控件子集中的开始位置 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.GridColumnEditorCollection.#ctor(FineUI.GridColumn)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.ControlBaseCollection"> - <summary> - 控件集合 - </summary> - </member> - <member name="M:FineUI.ControlBaseCollection.#ctor(FineUI.ControlBase)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.NotAllowWhitespaceLiteralsBuilder"> - <summary> - 控件内部不允许存在非标签形式的字符串 - </summary> - </member> - <member name="M:FineUI.NotAllowWhitespaceLiteralsBuilder.AllowWhitespaceLiterals"> - <summary> - 不允许空白字符 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.NotAllowWhitespaceLiteralsBuilder.AppendLiteralString(System.String)"> - <summary> - 忽略游离于标签外的字符串 - </summary> - <param name="s"></param> - </member> - <member name="T:FineUI.ContentPanelBuilder"> - <summary> - 支持页分析器生成控件及其包含的子控件 - </summary> - </member> - <member name="M:FineUI.ContentPanelBuilder.AllowWhitespaceLiterals"> - <summary> - 允许空白字符 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.ContentPanelBuilder.AppendLiteralString(System.String)"> - <summary> - 不忽略游离于标签外的字符串 - </summary> - <param name="s"></param> - </member> - <member name="T:FineUI.GlobalConfig"> - <summary> - 全局配置参数 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.#cctor"> - <summary> - 初始化section对象,如果在Web.config中没有定义,则初始化为空对象 - </summary> - </member> - <member name="F:FineUI.GlobalConfig.section"> - <summary> - Runtime Section - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetDesignTimeSection(System.ComponentModel.ISite)"> - <summary> - Refer:http://flimflan.com/blog/AccessingWebconfigAtDesignTimeInNET20.aspx - </summary> - <param name="site"></param> - <returns></returns> - </member> - <member name="M:FineUI.GlobalConfig.GetTheme"> - <summary> - 主题 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetLanguage"> - <summary> - 语言 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetFormMessageTarget"> - <summary> - 表单中消息的位置 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetFormLabelAlign"> - <summary> - 表单中标签的位置 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetFormOffsetRight"> - <summary> - 表单中字段距离右侧的宽度 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetFormLabelWidth"> - <summary> - 表单中字段标签的宽度 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetFormLabelSeparator"> - <summary> - 表单中字段与标签的分隔符 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetAjaxTimeout"> - <summary> - AJAX超时时间(单位:秒,默认:60s) - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetEnableAjax"> - <summary> - 是否启用Ajax - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetEnableAjaxLoading"> - <summary> - 是否启用AJAX提示 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetAjaxLoadingType"> - <summary> - AJAX提示的类型 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetDebugMode"> - <summary> - DEBUG 模式 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetIconBasePath"> - <summary> - 图标的根路径 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetExtjsBasePath"> - <summary> - Extjs库的根路径 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetCustomThemeBasePath"> - <summary> - 自定义样式的根路径 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetCustomTheme"> - <summary> - 自定义样式的名称 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetEnableXStateCompress"> - <summary> - 是否启用XState压缩 - </summary> - </member> - <member name="M:FineUI.GlobalConfig.GetDefaultBackgroundColor"> - <summary> - 获取默认的背景颜色 - </summary> - <returns>用于CSS的背景颜色值</returns> - </member> - <member name="P:FineUI.GlobalConfig.ProductName"> - <summary> - 产品名称 - </summary> - </member> - <member name="P:FineUI.GlobalConfig.ProductVersion"> - <summary> - 当前版本 - </summary> - </member> - <member name="T:FineUI.ControlBaseItemsEditor"> - <summary> - 为设计时提供集合编辑器 - </summary> - </member> - <member name="M:FineUI.ControlBaseItemsEditor.#ctor(System.Type)"> - <summary> - 构造函数 - </summary> - <param name="type">控件类型</param> - </member> - <member name="M:FineUI.ControlBaseItemsEditor.CreateNewItemTypes"> - <summary> - 获取此集合编辑器可包含的数据类型 - </summary> - <returns>类型集合</returns> - </member> - <member name="T:FineUI.MenuItemsEditor"> - <summary> - 为设计时提供的菜单项集合编辑器 - </summary> - </member> - <member name="M:FineUI.MenuItemsEditor.#ctor(System.Type)"> - <summary> - 构造函数 - </summary> - <param name="type">控件类型</param> - </member> - <member name="M:FineUI.MenuItemsEditor.CreateNewItemTypes"> - <summary> - 获取此集合编辑器可包含的数据类型 - </summary> - <returns>类型集合</returns> - </member> - <member name="T:FineUI.ToolbarItemsEditor"> - <summary> - 为设计时提供的工具栏项集合编辑器 - </summary> - </member> - <member name="M:FineUI.ToolbarItemsEditor.#ctor(System.Type)"> - <summary> - 构造函数 - </summary> - <param name="type">控件类型</param> - </member> - <member name="M:FineUI.ToolbarItemsEditor.CreateNewItemTypes"> - <summary> - 获取此集合编辑器可包含的数据类型 - </summary> - <returns>类型集合</returns> - </member> - <member name="T:FineUI.GridColumnEditorEditor"> - <summary> - 为设计时提供的表格列编辑器集合编辑器 - </summary> - </member> - <member name="M:FineUI.GridColumnEditorEditor.#ctor(System.Type)"> - <summary> - 构造函数 - </summary> - <param name="type">控件类型</param> - </member> - <member name="M:FineUI.GridColumnEditorEditor.CreateNewItemTypes"> - <summary> - 获取此集合编辑器可包含的数据类型 - </summary> - <returns>类型集合</returns> - </member> - <member name="T:FineUI.CompareType"> - <summary> - 相比较的数据类型(用于表单控件的客户端验证) - </summary> - </member> - <member name="F:FineUI.CompareType.Float"> - <summary> - 浮点数 - </summary> - </member> - <member name="F:FineUI.CompareType.Int"> - <summary> - 整形 - </summary> - </member> - <member name="F:FineUI.CompareType.String"> - <summary> - 字符串(默认值) - </summary> - </member> - <member name="T:FineUI.HideMode"> - <summary> - 隐藏的模式 - </summary> - </member> - <member name="F:FineUI.HideMode.Visibility"> - <summary> - 通过设置CSS属性visibility来控制显示隐藏 - </summary> - </member> - <member name="F:FineUI.HideMode.Offsets"> - <summary> - 通过设置CSS属性top/left来控制显示隐藏 - </summary> - </member> - <member name="F:FineUI.HideMode.Display"> - <summary> - 通过设置CSS属性display来控制显示隐藏(默认值) - </summary> - </member> - <member name="T:FineUI.HideModeName"> - <summary> - 隐藏的模式名称 - </summary> - </member> - <member name="T:FineUI.Icon"> - <summary> - 预定义图标 - </summary> - </member> - <member name="F:FineUI.Icon.None"> - <summary> - None - </summary> - </member> - <member name="F:FineUI.Icon.Accept"> - <summary> - Accept - </summary> - </member> - <member name="F:FineUI.Icon.Add"> - <summary> - Add - </summary> - </member> - <member name="F:FineUI.Icon.Anchor"> - <summary> - Anchor - </summary> - </member> - <member name="F:FineUI.Icon.Application"> - <summary> - Application - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationAdd"> - <summary> - ApplicationAdd - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationCascade"> - <summary> - ApplicationCascade - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationDelete"> - <summary> - ApplicationDelete - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationDouble"> - <summary> - ApplicationDouble - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationEdit"> - <summary> - ApplicationEdit - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationError"> - <summary> - ApplicationError - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationForm"> - <summary> - ApplicationForm - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationFormAdd"> - <summary> - ApplicationFormAdd - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationFormDelete"> - <summary> - ApplicationFormDelete - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationFormEdit"> - <summary> - ApplicationFormEdit - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationFormMagnify"> - <summary> - ApplicationFormMagnify - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationGet"> - <summary> - ApplicationGet - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationGo"> - <summary> - ApplicationGo - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationHome"> - <summary> - ApplicationHome - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationKey"> - <summary> - ApplicationKey - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationLightning"> - <summary> - ApplicationLightning - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationLink"> - <summary> - ApplicationLink - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsx"> - <summary> - ApplicationOsx - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxAdd"> - <summary> - ApplicationOsxAdd - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxCascade"> - <summary> - ApplicationOsxCascade - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxDelete"> - <summary> - ApplicationOsxDelete - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxDouble"> - <summary> - ApplicationOsxDouble - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxError"> - <summary> - ApplicationOsxError - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxGet"> - <summary> - ApplicationOsxGet - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxGo"> - <summary> - ApplicationOsxGo - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxHome"> - <summary> - ApplicationOsxHome - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxKey"> - <summary> - ApplicationOsxKey - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxLightning"> - <summary> - ApplicationOsxLightning - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxLink"> - <summary> - ApplicationOsxLink - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxSplit"> - <summary> - ApplicationOsxSplit - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxStart"> - <summary> - ApplicationOsxStart - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxStop"> - <summary> - ApplicationOsxStop - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationOsxTerminal"> - <summary> - ApplicationOsxTerminal - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationPut"> - <summary> - ApplicationPut - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationSideBoxes"> - <summary> - ApplicationSideBoxes - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationSideContract"> - <summary> - ApplicationSideContract - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationSideExpand"> - <summary> - ApplicationSideExpand - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationSideList"> - <summary> - ApplicationSideList - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationSideTree"> - <summary> - ApplicationSideTree - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationSplit"> - <summary> - ApplicationSplit - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationStart"> - <summary> - ApplicationStart - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationStop"> - <summary> - ApplicationStop - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationTileHorizontal"> - <summary> - ApplicationTileHorizontal - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationTileVertical"> - <summary> - ApplicationTileVertical - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationViewColumns"> - <summary> - ApplicationViewColumns - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationViewDetail"> - <summary> - ApplicationViewDetail - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationViewGallery"> - <summary> - ApplicationViewGallery - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationViewIcons"> - <summary> - ApplicationViewIcons - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationViewList"> - <summary> - ApplicationViewList - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationViewTile"> - <summary> - ApplicationViewTile - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationXp"> - <summary> - ApplicationXp - </summary> - </member> - <member name="F:FineUI.Icon.ApplicationXpTerminal"> - <summary> - ApplicationXpTerminal - </summary> - </member> - <member name="F:FineUI.Icon.ArrowBranch"> - <summary> - ArrowBranch - </summary> - </member> - <member name="F:FineUI.Icon.ArrowDivide"> - <summary> - ArrowDivide - </summary> - </member> - <member name="F:FineUI.Icon.ArrowDown"> - <summary> - ArrowDown - </summary> - </member> - <member name="F:FineUI.Icon.ArrowEw"> - <summary> - ArrowEw - </summary> - </member> - <member name="F:FineUI.Icon.ArrowIn"> - <summary> - ArrowIn - </summary> - </member> - <member name="F:FineUI.Icon.ArrowInout"> - <summary> - ArrowInout - </summary> - </member> - <member name="F:FineUI.Icon.ArrowInLonger"> - <summary> - ArrowInLonger - </summary> - </member> - <member name="F:FineUI.Icon.ArrowJoin"> - <summary> - ArrowJoin - </summary> - </member> - <member name="F:FineUI.Icon.ArrowLeft"> - <summary> - ArrowLeft - </summary> - </member> - <member name="F:FineUI.Icon.ArrowMerge"> - <summary> - ArrowMerge - </summary> - </member> - <member name="F:FineUI.Icon.ArrowNe"> - <summary> - ArrowNe - </summary> - </member> - <member name="F:FineUI.Icon.ArrowNs"> - <summary> - ArrowNs - </summary> - </member> - <member name="F:FineUI.Icon.ArrowNsew"> - <summary> - ArrowNsew - </summary> - </member> - <member name="F:FineUI.Icon.ArrowNw"> - <summary> - ArrowNw - </summary> - </member> - <member name="F:FineUI.Icon.ArrowNwNeSwSe"> - <summary> - ArrowNwNeSwSe - </summary> - </member> - <member name="F:FineUI.Icon.ArrowNwSe"> - <summary> - ArrowNwSe - </summary> - </member> - <member name="F:FineUI.Icon.ArrowOut"> - <summary> - ArrowOut - </summary> - </member> - <member name="F:FineUI.Icon.ArrowOutLonger"> - <summary> - ArrowOutLonger - </summary> - </member> - <member name="F:FineUI.Icon.ArrowRedo"> - <summary> - ArrowRedo - </summary> - </member> - <member name="F:FineUI.Icon.ArrowRefresh"> - <summary> - ArrowRefresh - </summary> - </member> - <member name="F:FineUI.Icon.ArrowRefreshSmall"> - <summary> - ArrowRefreshSmall - </summary> - </member> - <member name="F:FineUI.Icon.ArrowRight"> - <summary> - ArrowRight - </summary> - </member> - <member name="F:FineUI.Icon.ArrowRotateAnticlockwise"> - <summary> - ArrowRotateAnticlockwise - </summary> - </member> - <member name="F:FineUI.Icon.ArrowRotateClockwise"> - <summary> - ArrowRotateClockwise - </summary> - </member> - <member name="F:FineUI.Icon.ArrowSe"> - <summary> - ArrowSe - </summary> - </member> - <member name="F:FineUI.Icon.ArrowSw"> - <summary> - ArrowSw - </summary> - </member> - <member name="F:FineUI.Icon.ArrowSwitch"> - <summary> - ArrowSwitch - </summary> - </member> - <member name="F:FineUI.Icon.ArrowSwitchBluegreen"> - <summary> - ArrowSwitchBluegreen - </summary> - </member> - <member name="F:FineUI.Icon.ArrowSwNe"> - <summary> - ArrowSwNe - </summary> - </member> - <member name="F:FineUI.Icon.ArrowTurnLeft"> - <summary> - ArrowTurnLeft - </summary> - </member> - <member name="F:FineUI.Icon.ArrowTurnRight"> - <summary> - ArrowTurnRight - </summary> - </member> - <member name="F:FineUI.Icon.ArrowUndo"> - <summary> - ArrowUndo - </summary> - </member> - <member name="F:FineUI.Icon.ArrowUp"> - <summary> - ArrowUp - </summary> - </member> - <member name="F:FineUI.Icon.AsteriskOrange"> - <summary> - AsteriskOrange - </summary> - </member> - <member name="F:FineUI.Icon.AsteriskRed"> - <summary> - AsteriskRed - </summary> - </member> - <member name="F:FineUI.Icon.AsteriskYellow"> - <summary> - AsteriskYellow - </summary> - </member> - <member name="F:FineUI.Icon.Attach"> - <summary> - Attach - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarAdd"> - <summary> - AwardStarAdd - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarBronze1"> - <summary> - AwardStarBronze1 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarBronze2"> - <summary> - AwardStarBronze2 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarBronze3"> - <summary> - AwardStarBronze3 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarDelete"> - <summary> - AwardStarDelete - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarGold1"> - <summary> - AwardStarGold1 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarGold2"> - <summary> - AwardStarGold2 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarGold3"> - <summary> - AwardStarGold3 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarSilver1"> - <summary> - AwardStarSilver1 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarSilver2"> - <summary> - AwardStarSilver2 - </summary> - </member> - <member name="F:FineUI.Icon.AwardStarSilver3"> - <summary> - AwardStarSilver3 - </summary> - </member> - <member name="F:FineUI.Icon.Basket"> - <summary> - Basket - </summary> - </member> - <member name="F:FineUI.Icon.BasketAdd"> - <summary> - BasketAdd - </summary> - </member> - <member name="F:FineUI.Icon.BasketDelete"> - <summary> - BasketDelete - </summary> - </member> - <member name="F:FineUI.Icon.BasketEdit"> - <summary> - BasketEdit - </summary> - </member> - <member name="F:FineUI.Icon.BasketError"> - <summary> - BasketError - </summary> - </member> - <member name="F:FineUI.Icon.BasketGo"> - <summary> - BasketGo - </summary> - </member> - <member name="F:FineUI.Icon.BasketPut"> - <summary> - BasketPut - </summary> - </member> - <member name="F:FineUI.Icon.BasketRemove"> - <summary> - BasketRemove - </summary> - </member> - <member name="F:FineUI.Icon.Bell"> - <summary> - Bell - </summary> - </member> - <member name="F:FineUI.Icon.BellAdd"> - <summary> - BellAdd - </summary> - </member> - <member name="F:FineUI.Icon.BellDelete"> - <summary> - BellDelete - </summary> - </member> - <member name="F:FineUI.Icon.BellError"> - <summary> - BellError - </summary> - </member> - <member name="F:FineUI.Icon.BellGo"> - <summary> - BellGo - </summary> - </member> - <member name="F:FineUI.Icon.BellLink"> - <summary> - BellLink - </summary> - </member> - <member name="F:FineUI.Icon.BellSilver"> - <summary> - BellSilver - </summary> - </member> - <member name="F:FineUI.Icon.BellSilverStart"> - <summary> - BellSilverStart - </summary> - </member> - <member name="F:FineUI.Icon.BellSilverStop"> - <summary> - BellSilverStop - </summary> - </member> - <member name="F:FineUI.Icon.BellStart"> - <summary> - BellStart - </summary> - </member> - <member name="F:FineUI.Icon.BellStop"> - <summary> - BellStop - </summary> - </member> - <member name="F:FineUI.Icon.Bin"> - <summary> - Bin - </summary> - </member> - <member name="F:FineUI.Icon.BinClosed"> - <summary> - BinClosed - </summary> - </member> - <member name="F:FineUI.Icon.BinEmpty"> - <summary> - BinEmpty - </summary> - </member> - <member name="F:FineUI.Icon.Blank"> - <summary> - Blank - </summary> - </member> - <member name="F:FineUI.Icon.Bomb"> - <summary> - Bomb - </summary> - </member> - <member name="F:FineUI.Icon.Book"> - <summary> - Book - </summary> - </member> - <member name="F:FineUI.Icon.Bookmark"> - <summary> - Bookmark - </summary> - </member> - <member name="F:FineUI.Icon.BookmarkAdd"> - <summary> - BookmarkAdd - </summary> - </member> - <member name="F:FineUI.Icon.BookmarkDelete"> - <summary> - BookmarkDelete - </summary> - </member> - <member name="F:FineUI.Icon.BookmarkEdit"> - <summary> - BookmarkEdit - </summary> - </member> - <member name="F:FineUI.Icon.BookmarkError"> - <summary> - BookmarkError - </summary> - </member> - <member name="F:FineUI.Icon.BookmarkGo"> - <summary> - BookmarkGo - </summary> - </member> - <member name="F:FineUI.Icon.BookAdd"> - <summary> - BookAdd - </summary> - </member> - <member name="F:FineUI.Icon.BookAddresses"> - <summary> - BookAddresses - </summary> - </member> - <member name="F:FineUI.Icon.BookAddressesAdd"> - <summary> - BookAddressesAdd - </summary> - </member> - <member name="F:FineUI.Icon.BookAddressesDelete"> - <summary> - BookAddressesDelete - </summary> - </member> - <member name="F:FineUI.Icon.BookAddressesEdit"> - <summary> - BookAddressesEdit - </summary> - </member> - <member name="F:FineUI.Icon.BookAddressesError"> - <summary> - BookAddressesError - </summary> - </member> - <member name="F:FineUI.Icon.BookAddressesKey"> - <summary> - BookAddressesKey - </summary> - </member> - <member name="F:FineUI.Icon.BookDelete"> - <summary> - BookDelete - </summary> - </member> - <member name="F:FineUI.Icon.BookEdit"> - <summary> - BookEdit - </summary> - </member> - <member name="F:FineUI.Icon.BookError"> - <summary> - BookError - </summary> - </member> - <member name="F:FineUI.Icon.BookGo"> - <summary> - BookGo - </summary> - </member> - <member name="F:FineUI.Icon.BookKey"> - <summary> - BookKey - </summary> - </member> - <member name="F:FineUI.Icon.BookLink"> - <summary> - BookLink - </summary> - </member> - <member name="F:FineUI.Icon.BookMagnify"> - <summary> - BookMagnify - </summary> - </member> - <member name="F:FineUI.Icon.BookNext"> - <summary> - BookNext - </summary> - </member> - <member name="F:FineUI.Icon.BookOpen"> - <summary> - BookOpen - </summary> - </member> - <member name="F:FineUI.Icon.BookOpenMark"> - <summary> - BookOpenMark - </summary> - </member> - <member name="F:FineUI.Icon.BookPrevious"> - <summary> - BookPrevious - </summary> - </member> - <member name="F:FineUI.Icon.BookRed"> - <summary> - BookRed - </summary> - </member> - <member name="F:FineUI.Icon.BookTabs"> - <summary> - BookTabs - </summary> - </member> - <member name="F:FineUI.Icon.BorderAll"> - <summary> - BorderAll - </summary> - </member> - <member name="F:FineUI.Icon.BorderBottom"> - <summary> - BorderBottom - </summary> - </member> - <member name="F:FineUI.Icon.BorderDraw"> - <summary> - BorderDraw - </summary> - </member> - <member name="F:FineUI.Icon.BorderInner"> - <summary> - BorderInner - </summary> - </member> - <member name="F:FineUI.Icon.BorderInnerHorizontal"> - <summary> - BorderInnerHorizontal - </summary> - </member> - <member name="F:FineUI.Icon.BorderInnerVertical"> - <summary> - BorderInnerVertical - </summary> - </member> - <member name="F:FineUI.Icon.BorderLeft"> - <summary> - BorderLeft - </summary> - </member> - <member name="F:FineUI.Icon.BorderNone"> - <summary> - BorderNone - </summary> - </member> - <member name="F:FineUI.Icon.BorderOuter"> - <summary> - BorderOuter - </summary> - </member> - <member name="F:FineUI.Icon.BorderRight"> - <summary> - BorderRight - </summary> - </member> - <member name="F:FineUI.Icon.BorderTop"> - <summary> - BorderTop - </summary> - </member> - <member name="F:FineUI.Icon.Box"> - <summary> - Box - </summary> - </member> - <member name="F:FineUI.Icon.BoxError"> - <summary> - BoxError - </summary> - </member> - <member name="F:FineUI.Icon.BoxPicture"> - <summary> - BoxPicture - </summary> - </member> - <member name="F:FineUI.Icon.BoxWorld"> - <summary> - BoxWorld - </summary> - </member> - <member name="F:FineUI.Icon.Brick"> - <summary> - Brick - </summary> - </member> - <member name="F:FineUI.Icon.Bricks"> - <summary> - Bricks - </summary> - </member> - <member name="F:FineUI.Icon.BrickAdd"> - <summary> - BrickAdd - </summary> - </member> - <member name="F:FineUI.Icon.BrickDelete"> - <summary> - BrickDelete - </summary> - </member> - <member name="F:FineUI.Icon.BrickEdit"> - <summary> - BrickEdit - </summary> - </member> - <member name="F:FineUI.Icon.BrickError"> - <summary> - BrickError - </summary> - </member> - <member name="F:FineUI.Icon.BrickGo"> - <summary> - BrickGo - </summary> - </member> - <member name="F:FineUI.Icon.BrickLink"> - <summary> - BrickLink - </summary> - </member> - <member name="F:FineUI.Icon.BrickMagnify"> - <summary> - BrickMagnify - </summary> - </member> - <member name="F:FineUI.Icon.Briefcase"> - <summary> - Briefcase - </summary> - </member> - <member name="F:FineUI.Icon.Bug"> - <summary> - Bug - </summary> - </member> - <member name="F:FineUI.Icon.BugAdd"> - <summary> - BugAdd - </summary> - </member> - <member name="F:FineUI.Icon.BugDelete"> - <summary> - BugDelete - </summary> - </member> - <member name="F:FineUI.Icon.BugEdit"> - <summary> - BugEdit - </summary> - </member> - <member name="F:FineUI.Icon.BugError"> - <summary> - BugError - </summary> - </member> - <member name="F:FineUI.Icon.BugFix"> - <summary> - BugFix - </summary> - </member> - <member name="F:FineUI.Icon.BugGo"> - <summary> - BugGo - </summary> - </member> - <member name="F:FineUI.Icon.BugLink"> - <summary> - BugLink - </summary> - </member> - <member name="F:FineUI.Icon.BugMagnify"> - <summary> - BugMagnify - </summary> - </member> - <member name="F:FineUI.Icon.Build"> - <summary> - Build - </summary> - </member> - <member name="F:FineUI.Icon.Building"> - <summary> - Building - </summary> - </member> - <member name="F:FineUI.Icon.BuildingAdd"> - <summary> - BuildingAdd - </summary> - </member> - <member name="F:FineUI.Icon.BuildingDelete"> - <summary> - BuildingDelete - </summary> - </member> - <member name="F:FineUI.Icon.BuildingEdit"> - <summary> - BuildingEdit - </summary> - </member> - <member name="F:FineUI.Icon.BuildingError"> - <summary> - BuildingError - </summary> - </member> - <member name="F:FineUI.Icon.BuildingGo"> - <summary> - BuildingGo - </summary> - </member> - <member name="F:FineUI.Icon.BuildingKey"> - <summary> - BuildingKey - </summary> - </member> - <member name="F:FineUI.Icon.BuildingLink"> - <summary> - BuildingLink - </summary> - </member> - <member name="F:FineUI.Icon.BuildCancel"> - <summary> - BuildCancel - </summary> - </member> - <member name="F:FineUI.Icon.BulletAdd"> - <summary> - BulletAdd - </summary> - </member> - <member name="F:FineUI.Icon.BulletArrowBottom"> - <summary> - BulletArrowBottom - </summary> - </member> - <member name="F:FineUI.Icon.BulletArrowDown"> - <summary> - BulletArrowDown - </summary> - </member> - <member name="F:FineUI.Icon.BulletArrowTop"> - <summary> - BulletArrowTop - </summary> - </member> - <member name="F:FineUI.Icon.BulletArrowUp"> - <summary> - BulletArrowUp - </summary> - </member> - <member name="F:FineUI.Icon.BulletBlack"> - <summary> - BulletBlack - </summary> - </member> - <member name="F:FineUI.Icon.BulletBlue"> - <summary> - BulletBlue - </summary> - </member> - <member name="F:FineUI.Icon.BulletConnect"> - <summary> - BulletConnect - </summary> - </member> - <member name="F:FineUI.Icon.BulletCross"> - <summary> - BulletCross - </summary> - </member> - <member name="F:FineUI.Icon.BulletDatabase"> - <summary> - BulletDatabase - </summary> - </member> - <member name="F:FineUI.Icon.BulletDatabaseYellow"> - <summary> - BulletDatabaseYellow - </summary> - </member> - <member name="F:FineUI.Icon.BulletDelete"> - <summary> - BulletDelete - </summary> - </member> - <member name="F:FineUI.Icon.BulletDisk"> - <summary> - BulletDisk - </summary> - </member> - <member name="F:FineUI.Icon.BulletEarth"> - <summary> - BulletEarth - </summary> - </member> - <member name="F:FineUI.Icon.BulletEdit"> - <summary> - BulletEdit - </summary> - </member> - <member name="F:FineUI.Icon.BulletEject"> - <summary> - BulletEject - </summary> - </member> - <member name="F:FineUI.Icon.BulletError"> - <summary> - BulletError - </summary> - </member> - <member name="F:FineUI.Icon.BulletFeed"> - <summary> - BulletFeed - </summary> - </member> - <member name="F:FineUI.Icon.BulletGet"> - <summary> - BulletGet - </summary> - </member> - <member name="F:FineUI.Icon.BulletGo"> - <summary> - BulletGo - </summary> - </member> - <member name="F:FineUI.Icon.BulletGreen"> - <summary> - BulletGreen - </summary> - </member> - <member name="F:FineUI.Icon.BulletHome"> - <summary> - BulletHome - </summary> - </member> - <member name="F:FineUI.Icon.BulletKey"> - <summary> - BulletKey - </summary> - </member> - <member name="F:FineUI.Icon.BulletLeft"> - <summary> - BulletLeft - </summary> - </member> - <member name="F:FineUI.Icon.BulletLightning"> - <summary> - BulletLightning - </summary> - </member> - <member name="F:FineUI.Icon.BulletMagnify"> - <summary> - BulletMagnify - </summary> - </member> - <member name="F:FineUI.Icon.BulletMinus"> - <summary> - BulletMinus - </summary> - </member> - <member name="F:FineUI.Icon.BulletOrange"> - <summary> - BulletOrange - </summary> - </member> - <member name="F:FineUI.Icon.BulletPageWhite"> - <summary> - BulletPageWhite - </summary> - </member> - <member name="F:FineUI.Icon.BulletPicture"> - <summary> - BulletPicture - </summary> - </member> - <member name="F:FineUI.Icon.BulletPink"> - <summary> - BulletPink - </summary> - </member> - <member name="F:FineUI.Icon.BulletPlus"> - <summary> - BulletPlus - </summary> - </member> - <member name="F:FineUI.Icon.BulletPurple"> - <summary> - BulletPurple - </summary> - </member> - <member name="F:FineUI.Icon.BulletRed"> - <summary> - BulletRed - </summary> - </member> - <member name="F:FineUI.Icon.BulletRight"> - <summary> - BulletRight - </summary> - </member> - <member name="F:FineUI.Icon.BulletShape"> - <summary> - BulletShape - </summary> - </member> - <member name="F:FineUI.Icon.BulletSparkle"> - <summary> - BulletSparkle - </summary> - </member> - <member name="F:FineUI.Icon.BulletStar"> - <summary> - BulletStar - </summary> - </member> - <member name="F:FineUI.Icon.BulletStart"> - <summary> - BulletStart - </summary> - </member> - <member name="F:FineUI.Icon.BulletStop"> - <summary> - BulletStop - </summary> - </member> - <member name="F:FineUI.Icon.BulletStopAlt"> - <summary> - BulletStopAlt - </summary> - </member> - <member name="F:FineUI.Icon.BulletTick"> - <summary> - BulletTick - </summary> - </member> - <member name="F:FineUI.Icon.BulletToggleMinus"> - <summary> - BulletToggleMinus - </summary> - </member> - <member name="F:FineUI.Icon.BulletTogglePlus"> - <summary> - BulletTogglePlus - </summary> - </member> - <member name="F:FineUI.Icon.BulletWhite"> - <summary> - BulletWhite - </summary> - </member> - <member name="F:FineUI.Icon.BulletWrench"> - <summary> - BulletWrench - </summary> - </member> - <member name="F:FineUI.Icon.BulletWrenchRed"> - <summary> - BulletWrenchRed - </summary> - </member> - <member name="F:FineUI.Icon.BulletYellow"> - <summary> - BulletYellow - </summary> - </member> - <member name="F:FineUI.Icon.Button"> - <summary> - Button - </summary> - </member> - <member name="F:FineUI.Icon.Cake"> - <summary> - Cake - </summary> - </member> - <member name="F:FineUI.Icon.CakeOut"> - <summary> - CakeOut - </summary> - </member> - <member name="F:FineUI.Icon.CakeSliced"> - <summary> - CakeSliced - </summary> - </member> - <member name="F:FineUI.Icon.Calculator"> - <summary> - Calculator - </summary> - </member> - <member name="F:FineUI.Icon.CalculatorAdd"> - <summary> - CalculatorAdd - </summary> - </member> - <member name="F:FineUI.Icon.CalculatorDelete"> - <summary> - CalculatorDelete - </summary> - </member> - <member name="F:FineUI.Icon.CalculatorEdit"> - <summary> - CalculatorEdit - </summary> - </member> - <member name="F:FineUI.Icon.CalculatorError"> - <summary> - CalculatorError - </summary> - </member> - <member name="F:FineUI.Icon.CalculatorLink"> - <summary> - CalculatorLink - </summary> - </member> - <member name="F:FineUI.Icon.Calendar"> - <summary> - Calendar - </summary> - </member> - <member name="F:FineUI.Icon.CalendarAdd"> - <summary> - CalendarAdd - </summary> - </member> - <member name="F:FineUI.Icon.CalendarDelete"> - <summary> - CalendarDelete - </summary> - </member> - <member name="F:FineUI.Icon.CalendarEdit"> - <summary> - CalendarEdit - </summary> - </member> - <member name="F:FineUI.Icon.CalendarLink"> - <summary> - CalendarLink - </summary> - </member> - <member name="F:FineUI.Icon.CalendarSelectDay"> - <summary> - CalendarSelectDay - </summary> - </member> - <member name="F:FineUI.Icon.CalendarSelectNone"> - <summary> - CalendarSelectNone - </summary> - </member> - <member name="F:FineUI.Icon.CalendarSelectWeek"> - <summary> - CalendarSelectWeek - </summary> - </member> - <member name="F:FineUI.Icon.CalendarStar"> - <summary> - CalendarStar - </summary> - </member> - <member name="F:FineUI.Icon.CalendarViewDay"> - <summary> - CalendarViewDay - </summary> - </member> - <member name="F:FineUI.Icon.CalendarViewMonth"> - <summary> - CalendarViewMonth - </summary> - </member> - <member name="F:FineUI.Icon.CalendarViewWeek"> - <summary> - CalendarViewWeek - </summary> - </member> - <member name="F:FineUI.Icon.Camera"> - <summary> - Camera - </summary> - </member> - <member name="F:FineUI.Icon.CameraAdd"> - <summary> - CameraAdd - </summary> - </member> - <member name="F:FineUI.Icon.CameraConnect"> - <summary> - CameraConnect - </summary> - </member> - <member name="F:FineUI.Icon.CameraDelete"> - <summary> - CameraDelete - </summary> - </member> - <member name="F:FineUI.Icon.CameraEdit"> - <summary> - CameraEdit - </summary> - </member> - <member name="F:FineUI.Icon.CameraError"> - <summary> - CameraError - </summary> - </member> - <member name="F:FineUI.Icon.CameraGo"> - <summary> - CameraGo - </summary> - </member> - <member name="F:FineUI.Icon.CameraLink"> - <summary> - CameraLink - </summary> - </member> - <member name="F:FineUI.Icon.CameraMagnify"> - <summary> - CameraMagnify - </summary> - </member> - <member name="F:FineUI.Icon.CameraPicture"> - <summary> - CameraPicture - </summary> - </member> - <member name="F:FineUI.Icon.CameraSmall"> - <summary> - CameraSmall - </summary> - </member> - <member name="F:FineUI.Icon.CameraStart"> - <summary> - CameraStart - </summary> - </member> - <member name="F:FineUI.Icon.CameraStop"> - <summary> - CameraStop - </summary> - </member> - <member name="F:FineUI.Icon.Cancel"> - <summary> - Cancel - </summary> - </member> - <member name="F:FineUI.Icon.Car"> - <summary> - Car - </summary> - </member> - <member name="F:FineUI.Icon.Cart"> - <summary> - Cart - </summary> - </member> - <member name="F:FineUI.Icon.CartAdd"> - <summary> - CartAdd - </summary> - </member> - <member name="F:FineUI.Icon.CartDelete"> - <summary> - CartDelete - </summary> - </member> - <member name="F:FineUI.Icon.CartEdit"> - <summary> - CartEdit - </summary> - </member> - <member name="F:FineUI.Icon.CartError"> - <summary> - CartError - </summary> - </member> - <member name="F:FineUI.Icon.CartFull"> - <summary> - CartFull - </summary> - </member> - <member name="F:FineUI.Icon.CartGo"> - <summary> - CartGo - </summary> - </member> - <member name="F:FineUI.Icon.CartMagnify"> - <summary> - CartMagnify - </summary> - </member> - <member name="F:FineUI.Icon.CartPut"> - <summary> - CartPut - </summary> - </member> - <member name="F:FineUI.Icon.CartRemove"> - <summary> - CartRemove - </summary> - </member> - <member name="F:FineUI.Icon.CarAdd"> - <summary> - CarAdd - </summary> - </member> - <member name="F:FineUI.Icon.CarDelete"> - <summary> - CarDelete - </summary> - </member> - <member name="F:FineUI.Icon.CarError"> - <summary> - CarError - </summary> - </member> - <member name="F:FineUI.Icon.CarRed"> - <summary> - CarRed - </summary> - </member> - <member name="F:FineUI.Icon.CarStart"> - <summary> - CarStart - </summary> - </member> - <member name="F:FineUI.Icon.CarStop"> - <summary> - CarStop - </summary> - </member> - <member name="F:FineUI.Icon.Cd"> - <summary> - Cd - </summary> - </member> - <member name="F:FineUI.Icon.Cdr"> - <summary> - Cdr - </summary> - </member> - <member name="F:FineUI.Icon.CdrAdd"> - <summary> - CdrAdd - </summary> - </member> - <member name="F:FineUI.Icon.CdrBurn"> - <summary> - CdrBurn - </summary> - </member> - <member name="F:FineUI.Icon.CdrCross"> - <summary> - CdrCross - </summary> - </member> - <member name="F:FineUI.Icon.CdrDelete"> - <summary> - CdrDelete - </summary> - </member> - <member name="F:FineUI.Icon.CdrEdit"> - <summary> - CdrEdit - </summary> - </member> - <member name="F:FineUI.Icon.CdrEject"> - <summary> - CdrEject - </summary> - </member> - <member name="F:FineUI.Icon.CdrError"> - <summary> - CdrError - </summary> - </member> - <member name="F:FineUI.Icon.CdrGo"> - <summary> - CdrGo - </summary> - </member> - <member name="F:FineUI.Icon.CdrMagnify"> - <summary> - CdrMagnify - </summary> - </member> - <member name="F:FineUI.Icon.CdrPlay"> - <summary> - CdrPlay - </summary> - </member> - <member name="F:FineUI.Icon.CdrStart"> - <summary> - CdrStart - </summary> - </member> - <member name="F:FineUI.Icon.CdrStop"> - <summary> - CdrStop - </summary> - </member> - <member name="F:FineUI.Icon.CdrStopAlt"> - <summary> - CdrStopAlt - </summary> - </member> - <member name="F:FineUI.Icon.CdrTick"> - <summary> - CdrTick - </summary> - </member> - <member name="F:FineUI.Icon.CdAdd"> - <summary> - CdAdd - </summary> - </member> - <member name="F:FineUI.Icon.CdBurn"> - <summary> - CdBurn - </summary> - </member> - <member name="F:FineUI.Icon.CdDelete"> - <summary> - CdDelete - </summary> - </member> - <member name="F:FineUI.Icon.CdEdit"> - <summary> - CdEdit - </summary> - </member> - <member name="F:FineUI.Icon.CdEject"> - <summary> - CdEject - </summary> - </member> - <member name="F:FineUI.Icon.CdGo"> - <summary> - CdGo - </summary> - </member> - <member name="F:FineUI.Icon.CdMagnify"> - <summary> - CdMagnify - </summary> - </member> - <member name="F:FineUI.Icon.CdPlay"> - <summary> - CdPlay - </summary> - </member> - <member name="F:FineUI.Icon.CdStop"> - <summary> - CdStop - </summary> - </member> - <member name="F:FineUI.Icon.CdStopAlt"> - <summary> - CdStopAlt - </summary> - </member> - <member name="F:FineUI.Icon.CdTick"> - <summary> - CdTick - </summary> - </member> - <member name="F:FineUI.Icon.ChartBar"> - <summary> - ChartBar - </summary> - </member> - <member name="F:FineUI.Icon.ChartBarAdd"> - <summary> - ChartBarAdd - </summary> - </member> - <member name="F:FineUI.Icon.ChartBarDelete"> - <summary> - ChartBarDelete - </summary> - </member> - <member name="F:FineUI.Icon.ChartBarEdit"> - <summary> - ChartBarEdit - </summary> - </member> - <member name="F:FineUI.Icon.ChartBarError"> - <summary> - ChartBarError - </summary> - </member> - <member name="F:FineUI.Icon.ChartBarLink"> - <summary> - ChartBarLink - </summary> - </member> - <member name="F:FineUI.Icon.ChartCurve"> - <summary> - ChartCurve - </summary> - </member> - <member name="F:FineUI.Icon.ChartCurveAdd"> - <summary> - ChartCurveAdd - </summary> - </member> - <member name="F:FineUI.Icon.ChartCurveDelete"> - <summary> - ChartCurveDelete - </summary> - </member> - <member name="F:FineUI.Icon.ChartCurveEdit"> - <summary> - ChartCurveEdit - </summary> - </member> - <member name="F:FineUI.Icon.ChartCurveError"> - <summary> - ChartCurveError - </summary> - </member> - <member name="F:FineUI.Icon.ChartCurveGo"> - <summary> - ChartCurveGo - </summary> - </member> - <member name="F:FineUI.Icon.ChartCurveLink"> - <summary> - ChartCurveLink - </summary> - </member> - <member name="F:FineUI.Icon.ChartLine"> - <summary> - ChartLine - </summary> - </member> - <member name="F:FineUI.Icon.ChartLineAdd"> - <summary> - ChartLineAdd - </summary> - </member> - <member name="F:FineUI.Icon.ChartLineDelete"> - <summary> - ChartLineDelete - </summary> - </member> - <member name="F:FineUI.Icon.ChartLineEdit"> - <summary> - ChartLineEdit - </summary> - </member> - <member name="F:FineUI.Icon.ChartLineError"> - <summary> - ChartLineError - </summary> - </member> - <member name="F:FineUI.Icon.ChartLineLink"> - <summary> - ChartLineLink - </summary> - </member> - <member name="F:FineUI.Icon.ChartOrganisation"> - <summary> - ChartOrganisation - </summary> - </member> - <member name="F:FineUI.Icon.ChartOrganisationAdd"> - <summary> - ChartOrganisationAdd - </summary> - </member> - <member name="F:FineUI.Icon.ChartOrganisationDelete"> - <summary> - ChartOrganisationDelete - </summary> - </member> - <member name="F:FineUI.Icon.ChartOrgInverted"> - <summary> - ChartOrgInverted - </summary> - </member> - <member name="F:FineUI.Icon.ChartPie"> - <summary> - ChartPie - </summary> - </member> - <member name="F:FineUI.Icon.ChartPieAdd"> - <summary> - ChartPieAdd - </summary> - </member> - <member name="F:FineUI.Icon.ChartPieDelete"> - <summary> - ChartPieDelete - </summary> - </member> - <member name="F:FineUI.Icon.ChartPieEdit"> - <summary> - ChartPieEdit - </summary> - </member> - <member name="F:FineUI.Icon.ChartPieError"> - <summary> - ChartPieError - </summary> - </member> - <member name="F:FineUI.Icon.ChartPieLightning"> - <summary> - ChartPieLightning - </summary> - </member> - <member name="F:FineUI.Icon.ChartPieLink"> - <summary> - ChartPieLink - </summary> - </member> - <member name="F:FineUI.Icon.CheckError"> - <summary> - CheckError - </summary> - </member> - <member name="F:FineUI.Icon.Clipboard"> - <summary> - Clipboard - </summary> - </member> - <member name="F:FineUI.Icon.Clock"> - <summary> - Clock - </summary> - </member> - <member name="F:FineUI.Icon.ClockAdd"> - <summary> - ClockAdd - </summary> - </member> - <member name="F:FineUI.Icon.ClockDelete"> - <summary> - ClockDelete - </summary> - </member> - <member name="F:FineUI.Icon.ClockEdit"> - <summary> - ClockEdit - </summary> - </member> - <member name="F:FineUI.Icon.ClockError"> - <summary> - ClockError - </summary> - </member> - <member name="F:FineUI.Icon.ClockGo"> - <summary> - ClockGo - </summary> - </member> - <member name="F:FineUI.Icon.ClockLink"> - <summary> - ClockLink - </summary> - </member> - <member name="F:FineUI.Icon.ClockPause"> - <summary> - ClockPause - </summary> - </member> - <member name="F:FineUI.Icon.ClockPlay"> - <summary> - ClockPlay - </summary> - </member> - <member name="F:FineUI.Icon.ClockRed"> - <summary> - ClockRed - </summary> - </member> - <member name="F:FineUI.Icon.ClockStart"> - <summary> - ClockStart - </summary> - </member> - <member name="F:FineUI.Icon.ClockStop"> - <summary> - ClockStop - </summary> - </member> - <member name="F:FineUI.Icon.ClockStop2"> - <summary> - ClockStop2 - </summary> - </member> - <member name="F:FineUI.Icon.Cmy"> - <summary> - Cmy - </summary> - </member> - <member name="F:FineUI.Icon.Cog"> - <summary> - Cog - </summary> - </member> - <member name="F:FineUI.Icon.CogAdd"> - <summary> - CogAdd - </summary> - </member> - <member name="F:FineUI.Icon.CogDelete"> - <summary> - CogDelete - </summary> - </member> - <member name="F:FineUI.Icon.CogEdit"> - <summary> - CogEdit - </summary> - </member> - <member name="F:FineUI.Icon.CogError"> - <summary> - CogError - </summary> - </member> - <member name="F:FineUI.Icon.CogGo"> - <summary> - CogGo - </summary> - </member> - <member name="F:FineUI.Icon.CogStart"> - <summary> - CogStart - </summary> - </member> - <member name="F:FineUI.Icon.CogStop"> - <summary> - CogStop - </summary> - </member> - <member name="F:FineUI.Icon.Coins"> - <summary> - Coins - </summary> - </member> - <member name="F:FineUI.Icon.CoinsAdd"> - <summary> - CoinsAdd - </summary> - </member> - <member name="F:FineUI.Icon.CoinsDelete"> - <summary> - CoinsDelete - </summary> - </member> - <member name="F:FineUI.Icon.Color"> - <summary> - Color - </summary> - </member> - <member name="F:FineUI.Icon.ColorSwatch"> - <summary> - ColorSwatch - </summary> - </member> - <member name="F:FineUI.Icon.ColorWheel"> - <summary> - ColorWheel - </summary> - </member> - <member name="F:FineUI.Icon.Comment"> - <summary> - Comment - </summary> - </member> - <member name="F:FineUI.Icon.Comments"> - <summary> - Comments - </summary> - </member> - <member name="F:FineUI.Icon.CommentsAdd"> - <summary> - CommentsAdd - </summary> - </member> - <member name="F:FineUI.Icon.CommentsDelete"> - <summary> - CommentsDelete - </summary> - </member> - <member name="F:FineUI.Icon.CommentAdd"> - <summary> - CommentAdd - </summary> - </member> - <member name="F:FineUI.Icon.CommentDelete"> - <summary> - CommentDelete - </summary> - </member> - <member name="F:FineUI.Icon.CommentDull"> - <summary> - CommentDull - </summary> - </member> - <member name="F:FineUI.Icon.CommentEdit"> - <summary> - CommentEdit - </summary> - </member> - <member name="F:FineUI.Icon.CommentPlay"> - <summary> - CommentPlay - </summary> - </member> - <member name="F:FineUI.Icon.CommentRecord"> - <summary> - CommentRecord - </summary> - </member> - <member name="F:FineUI.Icon.Compass"> - <summary> - Compass - </summary> - </member> - <member name="F:FineUI.Icon.Compress"> - <summary> - Compress - </summary> - </member> - <member name="F:FineUI.Icon.Computer"> - <summary> - Computer - </summary> - </member> - <member name="F:FineUI.Icon.ComputerAdd"> - <summary> - ComputerAdd - </summary> - </member> - <member name="F:FineUI.Icon.ComputerConnect"> - <summary> - ComputerConnect - </summary> - </member> - <member name="F:FineUI.Icon.ComputerDelete"> - <summary> - ComputerDelete - </summary> - </member> - <member name="F:FineUI.Icon.ComputerEdit"> - <summary> - ComputerEdit - </summary> - </member> - <member name="F:FineUI.Icon.ComputerError"> - <summary> - ComputerError - </summary> - </member> - <member name="F:FineUI.Icon.ComputerGo"> - <summary> - ComputerGo - </summary> - </member> - <member name="F:FineUI.Icon.ComputerKey"> - <summary> - ComputerKey - </summary> - </member> - <member name="F:FineUI.Icon.ComputerLink"> - <summary> - ComputerLink - </summary> - </member> - <member name="F:FineUI.Icon.ComputerMagnify"> - <summary> - ComputerMagnify - </summary> - </member> - <member name="F:FineUI.Icon.ComputerOff"> - <summary> - ComputerOff - </summary> - </member> - <member name="F:FineUI.Icon.ComputerStart"> - <summary> - ComputerStart - </summary> - </member> - <member name="F:FineUI.Icon.ComputerStop"> - <summary> - ComputerStop - </summary> - </member> - <member name="F:FineUI.Icon.ComputerWrench"> - <summary> - ComputerWrench - </summary> - </member> - <member name="F:FineUI.Icon.Connect"> - <summary> - Connect - </summary> - </member> - <member name="F:FineUI.Icon.Contrast"> - <summary> - Contrast - </summary> - </member> - <member name="F:FineUI.Icon.ContrastDecrease"> - <summary> - ContrastDecrease - </summary> - </member> - <member name="F:FineUI.Icon.ContrastHigh"> - <summary> - ContrastHigh - </summary> - </member> - <member name="F:FineUI.Icon.ContrastIncrease"> - <summary> - ContrastIncrease - </summary> - </member> - <member name="F:FineUI.Icon.ContrastLow"> - <summary> - ContrastLow - </summary> - </member> - <member name="F:FineUI.Icon.Controller"> - <summary> - Controller - </summary> - </member> - <member name="F:FineUI.Icon.ControllerAdd"> - <summary> - ControllerAdd - </summary> - </member> - <member name="F:FineUI.Icon.ControllerDelete"> - <summary> - ControllerDelete - </summary> - </member> - <member name="F:FineUI.Icon.ControllerError"> - <summary> - ControllerError - </summary> - </member> - <member name="F:FineUI.Icon.ControlAdd"> - <summary> - ControlAdd - </summary> - </member> - <member name="F:FineUI.Icon.ControlAddBlue"> - <summary> - ControlAddBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlBlank"> - <summary> - ControlBlank - </summary> - </member> - <member name="F:FineUI.Icon.ControlBlankBlue"> - <summary> - ControlBlankBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlEject"> - <summary> - ControlEject - </summary> - </member> - <member name="F:FineUI.Icon.ControlEjectBlue"> - <summary> - ControlEjectBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlEnd"> - <summary> - ControlEnd - </summary> - </member> - <member name="F:FineUI.Icon.ControlEndBlue"> - <summary> - ControlEndBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlEqualizer"> - <summary> - ControlEqualizer - </summary> - </member> - <member name="F:FineUI.Icon.ControlEqualizerBlue"> - <summary> - ControlEqualizerBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlFastforward"> - <summary> - ControlFastforward - </summary> - </member> - <member name="F:FineUI.Icon.ControlFastforwardBlue"> - <summary> - ControlFastforwardBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlPause"> - <summary> - ControlPause - </summary> - </member> - <member name="F:FineUI.Icon.ControlPauseBlue"> - <summary> - ControlPauseBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlPlay"> - <summary> - ControlPlay - </summary> - </member> - <member name="F:FineUI.Icon.ControlPlayBlue"> - <summary> - ControlPlayBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlPower"> - <summary> - ControlPower - </summary> - </member> - <member name="F:FineUI.Icon.ControlPowerBlue"> - <summary> - ControlPowerBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlRecord"> - <summary> - ControlRecord - </summary> - </member> - <member name="F:FineUI.Icon.ControlRecordBlue"> - <summary> - ControlRecordBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlRemove"> - <summary> - ControlRemove - </summary> - </member> - <member name="F:FineUI.Icon.ControlRemoveBlue"> - <summary> - ControlRemoveBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlRepeat"> - <summary> - ControlRepeat - </summary> - </member> - <member name="F:FineUI.Icon.ControlRepeatBlue"> - <summary> - ControlRepeatBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlRewind"> - <summary> - ControlRewind - </summary> - </member> - <member name="F:FineUI.Icon.ControlRewindBlue"> - <summary> - ControlRewindBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlStart"> - <summary> - ControlStart - </summary> - </member> - <member name="F:FineUI.Icon.ControlStartBlue"> - <summary> - ControlStartBlue - </summary> - </member> - <member name="F:FineUI.Icon.ControlStop"> - <summary> - ControlStop - </summary> - </member> - <member name="F:FineUI.Icon.ControlStopBlue"> - <summary> - ControlStopBlue - </summary> - </member> - <member name="F:FineUI.Icon.Creditcards"> - <summary> - Creditcards - </summary> - </member> - <member name="F:FineUI.Icon.Cross"> - <summary> - Cross - </summary> - </member> - <member name="F:FineUI.Icon.Css"> - <summary> - Css - </summary> - </member> - <member name="F:FineUI.Icon.CssAdd"> - <summary> - CssAdd - </summary> - </member> - <member name="F:FineUI.Icon.CssDelete"> - <summary> - CssDelete - </summary> - </member> - <member name="F:FineUI.Icon.CssError"> - <summary> - CssError - </summary> - </member> - <member name="F:FineUI.Icon.CssGo"> - <summary> - CssGo - </summary> - </member> - <member name="F:FineUI.Icon.CssValid"> - <summary> - CssValid - </summary> - </member> - <member name="F:FineUI.Icon.Cup"> - <summary> - Cup - </summary> - </member> - <member name="F:FineUI.Icon.CupAdd"> - <summary> - CupAdd - </summary> - </member> - <member name="F:FineUI.Icon.CupBlack"> - <summary> - CupBlack - </summary> - </member> - <member name="F:FineUI.Icon.CupDelete"> - <summary> - CupDelete - </summary> - </member> - <member name="F:FineUI.Icon.CupEdit"> - <summary> - CupEdit - </summary> - </member> - <member name="F:FineUI.Icon.CupError"> - <summary> - CupError - </summary> - </member> - <member name="F:FineUI.Icon.CupGo"> - <summary> - CupGo - </summary> - </member> - <member name="F:FineUI.Icon.CupGreen"> - <summary> - CupGreen - </summary> - </member> - <member name="F:FineUI.Icon.CupKey"> - <summary> - CupKey - </summary> - </member> - <member name="F:FineUI.Icon.CupLink"> - <summary> - CupLink - </summary> - </member> - <member name="F:FineUI.Icon.CupTea"> - <summary> - CupTea - </summary> - </member> - <member name="F:FineUI.Icon.Cursor"> - <summary> - Cursor - </summary> - </member> - <member name="F:FineUI.Icon.CursorSmall"> - <summary> - CursorSmall - </summary> - </member> - <member name="F:FineUI.Icon.Cut"> - <summary> - Cut - </summary> - </member> - <member name="F:FineUI.Icon.CutRed"> - <summary> - CutRed - </summary> - </member> - <member name="F:FineUI.Icon.Database"> - <summary> - Database - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseAdd"> - <summary> - DatabaseAdd - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseConnect"> - <summary> - DatabaseConnect - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseCopy"> - <summary> - DatabaseCopy - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseDelete"> - <summary> - DatabaseDelete - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseEdit"> - <summary> - DatabaseEdit - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseError"> - <summary> - DatabaseError - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseGear"> - <summary> - DatabaseGear - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseGo"> - <summary> - DatabaseGo - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseKey"> - <summary> - DatabaseKey - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseLightning"> - <summary> - DatabaseLightning - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseLink"> - <summary> - DatabaseLink - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseRefresh"> - <summary> - DatabaseRefresh - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseSave"> - <summary> - DatabaseSave - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseStart"> - <summary> - DatabaseStart - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseStop"> - <summary> - DatabaseStop - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseTable"> - <summary> - DatabaseTable - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseWrench"> - <summary> - DatabaseWrench - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseYellow"> - <summary> - DatabaseYellow - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseYellowStart"> - <summary> - DatabaseYellowStart - </summary> - </member> - <member name="F:FineUI.Icon.DatabaseYellowStop"> - <summary> - DatabaseYellowStop - </summary> - </member> - <member name="F:FineUI.Icon.Date"> - <summary> - Date - </summary> - </member> - <member name="F:FineUI.Icon.DateAdd"> - <summary> - DateAdd - </summary> - </member> - <member name="F:FineUI.Icon.DateDelete"> - <summary> - DateDelete - </summary> - </member> - <member name="F:FineUI.Icon.DateEdit"> - <summary> - DateEdit - </summary> - </member> - <member name="F:FineUI.Icon.DateError"> - <summary> - DateError - </summary> - </member> - <member name="F:FineUI.Icon.DateGo"> - <summary> - DateGo - </summary> - </member> - <member name="F:FineUI.Icon.DateLink"> - <summary> - DateLink - </summary> - </member> - <member name="F:FineUI.Icon.DateMagnify"> - <summary> - DateMagnify - </summary> - </member> - <member name="F:FineUI.Icon.DateNext"> - <summary> - DateNext - </summary> - </member> - <member name="F:FineUI.Icon.DatePrevious"> - <summary> - DatePrevious - </summary> - </member> - <member name="F:FineUI.Icon.Decline"> - <summary> - Decline - </summary> - </member> - <member name="F:FineUI.Icon.Delete"> - <summary> - Delete - </summary> - </member> - <member name="F:FineUI.Icon.DeviceStylus"> - <summary> - DeviceStylus - </summary> - </member> - <member name="F:FineUI.Icon.Disconnect"> - <summary> - Disconnect - </summary> - </member> - <member name="F:FineUI.Icon.Disk"> - <summary> - Disk - </summary> - </member> - <member name="F:FineUI.Icon.DiskBlack"> - <summary> - DiskBlack - </summary> - </member> - <member name="F:FineUI.Icon.DiskBlackError"> - <summary> - DiskBlackError - </summary> - </member> - <member name="F:FineUI.Icon.DiskBlackMagnify"> - <summary> - DiskBlackMagnify - </summary> - </member> - <member name="F:FineUI.Icon.DiskDownload"> - <summary> - DiskDownload - </summary> - </member> - <member name="F:FineUI.Icon.DiskEdit"> - <summary> - DiskEdit - </summary> - </member> - <member name="F:FineUI.Icon.DiskError"> - <summary> - DiskError - </summary> - </member> - <member name="F:FineUI.Icon.DiskMagnify"> - <summary> - DiskMagnify - </summary> - </member> - <member name="F:FineUI.Icon.DiskMultiple"> - <summary> - DiskMultiple - </summary> - </member> - <member name="F:FineUI.Icon.DiskUpload"> - <summary> - DiskUpload - </summary> - </member> - <member name="F:FineUI.Icon.Door"> - <summary> - Door - </summary> - </member> - <member name="F:FineUI.Icon.DoorError"> - <summary> - DoorError - </summary> - </member> - <member name="F:FineUI.Icon.DoorIn"> - <summary> - DoorIn - </summary> - </member> - <member name="F:FineUI.Icon.DoorOpen"> - <summary> - DoorOpen - </summary> - </member> - <member name="F:FineUI.Icon.DoorOut"> - <summary> - DoorOut - </summary> - </member> - <member name="F:FineUI.Icon.Drink"> - <summary> - Drink - </summary> - </member> - <member name="F:FineUI.Icon.DrinkEmpty"> - <summary> - DrinkEmpty - </summary> - </member> - <member name="F:FineUI.Icon.DrinkRed"> - <summary> - DrinkRed - </summary> - </member> - <member name="F:FineUI.Icon.Drive"> - <summary> - Drive - </summary> - </member> - <member name="F:FineUI.Icon.DriveAdd"> - <summary> - DriveAdd - </summary> - </member> - <member name="F:FineUI.Icon.DriveBurn"> - <summary> - DriveBurn - </summary> - </member> - <member name="F:FineUI.Icon.DriveCd"> - <summary> - DriveCd - </summary> - </member> - <member name="F:FineUI.Icon.DriveCdr"> - <summary> - DriveCdr - </summary> - </member> - <member name="F:FineUI.Icon.DriveCdEmpty"> - <summary> - DriveCdEmpty - </summary> - </member> - <member name="F:FineUI.Icon.DriveDelete"> - <summary> - DriveDelete - </summary> - </member> - <member name="F:FineUI.Icon.DriveDisk"> - <summary> - DriveDisk - </summary> - </member> - <member name="F:FineUI.Icon.DriveEdit"> - <summary> - DriveEdit - </summary> - </member> - <member name="F:FineUI.Icon.DriveError"> - <summary> - DriveError - </summary> - </member> - <member name="F:FineUI.Icon.DriveGo"> - <summary> - DriveGo - </summary> - </member> - <member name="F:FineUI.Icon.DriveKey"> - <summary> - DriveKey - </summary> - </member> - <member name="F:FineUI.Icon.DriveLink"> - <summary> - DriveLink - </summary> - </member> - <member name="F:FineUI.Icon.DriveMagnify"> - <summary> - DriveMagnify - </summary> - </member> - <member name="F:FineUI.Icon.DriveNetwork"> - <summary> - DriveNetwork - </summary> - </member> - <member name="F:FineUI.Icon.DriveNetworkError"> - <summary> - DriveNetworkError - </summary> - </member> - <member name="F:FineUI.Icon.DriveNetworkStop"> - <summary> - DriveNetworkStop - </summary> - </member> - <member name="F:FineUI.Icon.DriveRename"> - <summary> - DriveRename - </summary> - </member> - <member name="F:FineUI.Icon.DriveUser"> - <summary> - DriveUser - </summary> - </member> - <member name="F:FineUI.Icon.DriveWeb"> - <summary> - DriveWeb - </summary> - </member> - <member name="F:FineUI.Icon.Dvd"> - <summary> - Dvd - </summary> - </member> - <member name="F:FineUI.Icon.DvdAdd"> - <summary> - DvdAdd - </summary> - </member> - <member name="F:FineUI.Icon.DvdDelete"> - <summary> - DvdDelete - </summary> - </member> - <member name="F:FineUI.Icon.DvdEdit"> - <summary> - DvdEdit - </summary> - </member> - <member name="F:FineUI.Icon.DvdError"> - <summary> - DvdError - </summary> - </member> - <member name="F:FineUI.Icon.DvdGo"> - <summary> - DvdGo - </summary> - </member> - <member name="F:FineUI.Icon.DvdKey"> - <summary> - DvdKey - </summary> - </member> - <member name="F:FineUI.Icon.DvdLink"> - <summary> - DvdLink - </summary> - </member> - <member name="F:FineUI.Icon.DvdStart"> - <summary> - DvdStart - </summary> - </member> - <member name="F:FineUI.Icon.DvdStop"> - <summary> - DvdStop - </summary> - </member> - <member name="F:FineUI.Icon.EjectBlue"> - <summary> - EjectBlue - </summary> - </member> - <member name="F:FineUI.Icon.EjectGreen"> - <summary> - EjectGreen - </summary> - </member> - <member name="F:FineUI.Icon.Email"> - <summary> - Email - </summary> - </member> - <member name="F:FineUI.Icon.EmailAdd"> - <summary> - EmailAdd - </summary> - </member> - <member name="F:FineUI.Icon.EmailAttach"> - <summary> - EmailAttach - </summary> - </member> - <member name="F:FineUI.Icon.EmailDelete"> - <summary> - EmailDelete - </summary> - </member> - <member name="F:FineUI.Icon.EmailEdit"> - <summary> - EmailEdit - </summary> - </member> - <member name="F:FineUI.Icon.EmailError"> - <summary> - EmailError - </summary> - </member> - <member name="F:FineUI.Icon.EmailGo"> - <summary> - EmailGo - </summary> - </member> - <member name="F:FineUI.Icon.EmailLink"> - <summary> - EmailLink - </summary> - </member> - <member name="F:FineUI.Icon.EmailMagnify"> - <summary> - EmailMagnify - </summary> - </member> - <member name="F:FineUI.Icon.EmailOpen"> - <summary> - EmailOpen - </summary> - </member> - <member name="F:FineUI.Icon.EmailOpenImage"> - <summary> - EmailOpenImage - </summary> - </member> - <member name="F:FineUI.Icon.EmailStar"> - <summary> - EmailStar - </summary> - </member> - <member name="F:FineUI.Icon.EmailStart"> - <summary> - EmailStart - </summary> - </member> - <member name="F:FineUI.Icon.EmailStop"> - <summary> - EmailStop - </summary> - </member> - <member name="F:FineUI.Icon.EmailTransfer"> - <summary> - EmailTransfer - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonEvilgrin"> - <summary> - EmoticonEvilgrin - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonGrin"> - <summary> - EmoticonGrin - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonHappy"> - <summary> - EmoticonHappy - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonSmile"> - <summary> - EmoticonSmile - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonSurprised"> - <summary> - EmoticonSurprised - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonTongue"> - <summary> - EmoticonTongue - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonUnhappy"> - <summary> - EmoticonUnhappy - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonWaii"> - <summary> - EmoticonWaii - </summary> - </member> - <member name="F:FineUI.Icon.EmoticonWink"> - <summary> - EmoticonWink - </summary> - </member> - <member name="F:FineUI.Icon.Erase"> - <summary> - Erase - </summary> - </member> - <member name="F:FineUI.Icon.Error"> - <summary> - Error - </summary> - </member> - <member name="F:FineUI.Icon.ErrorAdd"> - <summary> - ErrorAdd - </summary> - </member> - <member name="F:FineUI.Icon.ErrorDelete"> - <summary> - ErrorDelete - </summary> - </member> - <member name="F:FineUI.Icon.ErrorGo"> - <summary> - ErrorGo - </summary> - </member> - <member name="F:FineUI.Icon.Exclamation"> - <summary> - Exclamation - </summary> - </member> - <member name="F:FineUI.Icon.Eye"> - <summary> - Eye - </summary> - </member> - <member name="F:FineUI.Icon.Eyes"> - <summary> - Eyes - </summary> - </member> - <member name="F:FineUI.Icon.Feed"> - <summary> - Feed - </summary> - </member> - <member name="F:FineUI.Icon.FeedAdd"> - <summary> - FeedAdd - </summary> - </member> - <member name="F:FineUI.Icon.FeedDelete"> - <summary> - FeedDelete - </summary> - </member> - <member name="F:FineUI.Icon.FeedDisk"> - <summary> - FeedDisk - </summary> - </member> - <member name="F:FineUI.Icon.FeedEdit"> - <summary> - FeedEdit - </summary> - </member> - <member name="F:FineUI.Icon.FeedError"> - <summary> - FeedError - </summary> - </member> - <member name="F:FineUI.Icon.FeedGo"> - <summary> - FeedGo - </summary> - </member> - <member name="F:FineUI.Icon.FeedKey"> - <summary> - FeedKey - </summary> - </member> - <member name="F:FineUI.Icon.FeedLink"> - <summary> - FeedLink - </summary> - </member> - <member name="F:FineUI.Icon.FeedMagnify"> - <summary> - FeedMagnify - </summary> - </member> - <member name="F:FineUI.Icon.FeedStar"> - <summary> - FeedStar - </summary> - </member> - <member name="F:FineUI.Icon.Female"> - <summary> - Female - </summary> - </member> - <member name="F:FineUI.Icon.Film"> - <summary> - Film - </summary> - </member> - <member name="F:FineUI.Icon.FilmAdd"> - <summary> - FilmAdd - </summary> - </member> - <member name="F:FineUI.Icon.FilmDelete"> - <summary> - FilmDelete - </summary> - </member> - <member name="F:FineUI.Icon.FilmEdit"> - <summary> - FilmEdit - </summary> - </member> - <member name="F:FineUI.Icon.FilmEject"> - <summary> - FilmEject - </summary> - </member> - <member name="F:FineUI.Icon.FilmError"> - <summary> - FilmError - </summary> - </member> - <member name="F:FineUI.Icon.FilmGo"> - <summary> - FilmGo - </summary> - </member> - <member name="F:FineUI.Icon.FilmKey"> - <summary> - FilmKey - </summary> - </member> - <member name="F:FineUI.Icon.FilmLink"> - <summary> - FilmLink - </summary> - </member> - <member name="F:FineUI.Icon.FilmMagnify"> - <summary> - FilmMagnify - </summary> - </member> - <member name="F:FineUI.Icon.FilmSave"> - <summary> - FilmSave - </summary> - </member> - <member name="F:FineUI.Icon.FilmStar"> - <summary> - FilmStar - </summary> - </member> - <member name="F:FineUI.Icon.FilmStart"> - <summary> - FilmStart - </summary> - </member> - <member name="F:FineUI.Icon.FilmStop"> - <summary> - FilmStop - </summary> - </member> - <member name="F:FineUI.Icon.Find"> - <summary> - Find - </summary> - </member> - <member name="F:FineUI.Icon.FingerPoint"> - <summary> - FingerPoint - </summary> - </member> - <member name="F:FineUI.Icon.FlagAd"> - <summary> - FlagAd - </summary> - </member> - <member name="F:FineUI.Icon.FlagAe"> - <summary> - FlagAe - </summary> - </member> - <member name="F:FineUI.Icon.FlagAf"> - <summary> - FlagAf - </summary> - </member> - <member name="F:FineUI.Icon.FlagAg"> - <summary> - FlagAg - </summary> - </member> - <member name="F:FineUI.Icon.FlagAi"> - <summary> - FlagAi - </summary> - </member> - <member name="F:FineUI.Icon.FlagAl"> - <summary> - FlagAl - </summary> - </member> - <member name="F:FineUI.Icon.FlagAm"> - <summary> - FlagAm - </summary> - </member> - <member name="F:FineUI.Icon.FlagAn"> - <summary> - FlagAn - </summary> - </member> - <member name="F:FineUI.Icon.FlagAo"> - <summary> - FlagAo - </summary> - </member> - <member name="F:FineUI.Icon.FlagAr"> - <summary> - FlagAr - </summary> - </member> - <member name="F:FineUI.Icon.FlagAs"> - <summary> - FlagAs - </summary> - </member> - <member name="F:FineUI.Icon.FlagAt"> - <summary> - FlagAt - </summary> - </member> - <member name="F:FineUI.Icon.FlagAu"> - <summary> - FlagAu - </summary> - </member> - <member name="F:FineUI.Icon.FlagAw"> - <summary> - FlagAw - </summary> - </member> - <member name="F:FineUI.Icon.FlagAx"> - <summary> - FlagAx - </summary> - </member> - <member name="F:FineUI.Icon.FlagAz"> - <summary> - FlagAz - </summary> - </member> - <member name="F:FineUI.Icon.FlagBa"> - <summary> - FlagBa - </summary> - </member> - <member name="F:FineUI.Icon.FlagBb"> - <summary> - FlagBb - </summary> - </member> - <member name="F:FineUI.Icon.FlagBd"> - <summary> - FlagBd - </summary> - </member> - <member name="F:FineUI.Icon.FlagBe"> - <summary> - FlagBe - </summary> - </member> - <member name="F:FineUI.Icon.FlagBf"> - <summary> - FlagBf - </summary> - </member> - <member name="F:FineUI.Icon.FlagBg"> - <summary> - FlagBg - </summary> - </member> - <member name="F:FineUI.Icon.FlagBh"> - <summary> - FlagBh - </summary> - </member> - <member name="F:FineUI.Icon.FlagBi"> - <summary> - FlagBi - </summary> - </member> - <member name="F:FineUI.Icon.FlagBj"> - <summary> - FlagBj - </summary> - </member> - <member name="F:FineUI.Icon.FlagBlack"> - <summary> - FlagBlack - </summary> - </member> - <member name="F:FineUI.Icon.FlagBlue"> - <summary> - FlagBlue - </summary> - </member> - <member name="F:FineUI.Icon.FlagBm"> - <summary> - FlagBm - </summary> - </member> - <member name="F:FineUI.Icon.FlagBn"> - <summary> - FlagBn - </summary> - </member> - <member name="F:FineUI.Icon.FlagBo"> - <summary> - FlagBo - </summary> - </member> - <member name="F:FineUI.Icon.FlagBr"> - <summary> - FlagBr - </summary> - </member> - <member name="F:FineUI.Icon.FlagBs"> - <summary> - FlagBs - </summary> - </member> - <member name="F:FineUI.Icon.FlagBt"> - <summary> - FlagBt - </summary> - </member> - <member name="F:FineUI.Icon.FlagBv"> - <summary> - FlagBv - </summary> - </member> - <member name="F:FineUI.Icon.FlagBw"> - <summary> - FlagBw - </summary> - </member> - <member name="F:FineUI.Icon.FlagBy"> - <summary> - FlagBy - </summary> - </member> - <member name="F:FineUI.Icon.FlagBz"> - <summary> - FlagBz - </summary> - </member> - <member name="F:FineUI.Icon.FlagCa"> - <summary> - FlagCa - </summary> - </member> - <member name="F:FineUI.Icon.FlagCatalonia"> - <summary> - FlagCatalonia - </summary> - </member> - <member name="F:FineUI.Icon.FlagCc"> - <summary> - FlagCc - </summary> - </member> - <member name="F:FineUI.Icon.FlagCd"> - <summary> - FlagCd - </summary> - </member> - <member name="F:FineUI.Icon.FlagCf"> - <summary> - FlagCf - </summary> - </member> - <member name="F:FineUI.Icon.FlagCg"> - <summary> - FlagCg - </summary> - </member> - <member name="F:FineUI.Icon.FlagCh"> - <summary> - FlagCh - </summary> - </member> - <member name="F:FineUI.Icon.FlagChecked"> - <summary> - FlagChecked - </summary> - </member> - <member name="F:FineUI.Icon.FlagCi"> - <summary> - FlagCi - </summary> - </member> - <member name="F:FineUI.Icon.FlagCk"> - <summary> - FlagCk - </summary> - </member> - <member name="F:FineUI.Icon.FlagCl"> - <summary> - FlagCl - </summary> - </member> - <member name="F:FineUI.Icon.FlagCm"> - <summary> - FlagCm - </summary> - </member> - <member name="F:FineUI.Icon.FlagCn"> - <summary> - FlagCn - </summary> - </member> - <member name="F:FineUI.Icon.FlagCo"> - <summary> - FlagCo - </summary> - </member> - <member name="F:FineUI.Icon.FlagCr"> - <summary> - FlagCr - </summary> - </member> - <member name="F:FineUI.Icon.FlagCs"> - <summary> - FlagCs - </summary> - </member> - <member name="F:FineUI.Icon.FlagCu"> - <summary> - FlagCu - </summary> - </member> - <member name="F:FineUI.Icon.FlagCv"> - <summary> - FlagCv - </summary> - </member> - <member name="F:FineUI.Icon.FlagCx"> - <summary> - FlagCx - </summary> - </member> - <member name="F:FineUI.Icon.FlagCy"> - <summary> - FlagCy - </summary> - </member> - <member name="F:FineUI.Icon.FlagCz"> - <summary> - FlagCz - </summary> - </member> - <member name="F:FineUI.Icon.FlagDe"> - <summary> - FlagDe - </summary> - </member> - <member name="F:FineUI.Icon.FlagDj"> - <summary> - FlagDj - </summary> - </member> - <member name="F:FineUI.Icon.FlagDk"> - <summary> - FlagDk - </summary> - </member> - <member name="F:FineUI.Icon.FlagDm"> - <summary> - FlagDm - </summary> - </member> - <member name="F:FineUI.Icon.FlagDo"> - <summary> - FlagDo - </summary> - </member> - <member name="F:FineUI.Icon.FlagDz"> - <summary> - FlagDz - </summary> - </member> - <member name="F:FineUI.Icon.FlagEc"> - <summary> - FlagEc - </summary> - </member> - <member name="F:FineUI.Icon.FlagEe"> - <summary> - FlagEe - </summary> - </member> - <member name="F:FineUI.Icon.FlagEg"> - <summary> - FlagEg - </summary> - </member> - <member name="F:FineUI.Icon.FlagEh"> - <summary> - FlagEh - </summary> - </member> - <member name="F:FineUI.Icon.FlagEngland"> - <summary> - FlagEngland - </summary> - </member> - <member name="F:FineUI.Icon.FlagEr"> - <summary> - FlagEr - </summary> - </member> - <member name="F:FineUI.Icon.FlagEs"> - <summary> - FlagEs - </summary> - </member> - <member name="F:FineUI.Icon.FlagEt"> - <summary> - FlagEt - </summary> - </member> - <member name="F:FineUI.Icon.FlagEuropeanunion"> - <summary> - FlagEuropeanunion - </summary> - </member> - <member name="F:FineUI.Icon.FlagFam"> - <summary> - FlagFam - </summary> - </member> - <member name="F:FineUI.Icon.FlagFi"> - <summary> - FlagFi - </summary> - </member> - <member name="F:FineUI.Icon.FlagFj"> - <summary> - FlagFj - </summary> - </member> - <member name="F:FineUI.Icon.FlagFk"> - <summary> - FlagFk - </summary> - </member> - <member name="F:FineUI.Icon.FlagFm"> - <summary> - FlagFm - </summary> - </member> - <member name="F:FineUI.Icon.FlagFo"> - <summary> - FlagFo - </summary> - </member> - <member name="F:FineUI.Icon.FlagFr"> - <summary> - FlagFr - </summary> - </member> - <member name="F:FineUI.Icon.FlagFrance"> - <summary> - FlagFrance - </summary> - </member> - <member name="F:FineUI.Icon.FlagGa"> - <summary> - FlagGa - </summary> - </member> - <member name="F:FineUI.Icon.FlagGb"> - <summary> - FlagGb - </summary> - </member> - <member name="F:FineUI.Icon.FlagGd"> - <summary> - FlagGd - </summary> - </member> - <member name="F:FineUI.Icon.FlagGe"> - <summary> - FlagGe - </summary> - </member> - <member name="F:FineUI.Icon.FlagGf"> - <summary> - FlagGf - </summary> - </member> - <member name="F:FineUI.Icon.FlagGg"> - <summary> - FlagGg - </summary> - </member> - <member name="F:FineUI.Icon.FlagGh"> - <summary> - FlagGh - </summary> - </member> - <member name="F:FineUI.Icon.FlagGi"> - <summary> - FlagGi - </summary> - </member> - <member name="F:FineUI.Icon.FlagGl"> - <summary> - FlagGl - </summary> - </member> - <member name="F:FineUI.Icon.FlagGm"> - <summary> - FlagGm - </summary> - </member> - <member name="F:FineUI.Icon.FlagGn"> - <summary> - FlagGn - </summary> - </member> - <member name="F:FineUI.Icon.FlagGp"> - <summary> - FlagGp - </summary> - </member> - <member name="F:FineUI.Icon.FlagGq"> - <summary> - FlagGq - </summary> - </member> - <member name="F:FineUI.Icon.FlagGr"> - <summary> - FlagGr - </summary> - </member> - <member name="F:FineUI.Icon.FlagGreen"> - <summary> - FlagGreen - </summary> - </member> - <member name="F:FineUI.Icon.FlagGrey"> - <summary> - FlagGrey - </summary> - </member> - <member name="F:FineUI.Icon.FlagGs"> - <summary> - FlagGs - </summary> - </member> - <member name="F:FineUI.Icon.FlagGt"> - <summary> - FlagGt - </summary> - </member> - <member name="F:FineUI.Icon.FlagGu"> - <summary> - FlagGu - </summary> - </member> - <member name="F:FineUI.Icon.FlagGw"> - <summary> - FlagGw - </summary> - </member> - <member name="F:FineUI.Icon.FlagGy"> - <summary> - FlagGy - </summary> - </member> - <member name="F:FineUI.Icon.FlagHk"> - <summary> - FlagHk - </summary> - </member> - <member name="F:FineUI.Icon.FlagHm"> - <summary> - FlagHm - </summary> - </member> - <member name="F:FineUI.Icon.FlagHn"> - <summary> - FlagHn - </summary> - </member> - <member name="F:FineUI.Icon.FlagHr"> - <summary> - FlagHr - </summary> - </member> - <member name="F:FineUI.Icon.FlagHt"> - <summary> - FlagHt - </summary> - </member> - <member name="F:FineUI.Icon.FlagHu"> - <summary> - FlagHu - </summary> - </member> - <member name="F:FineUI.Icon.FlagId"> - <summary> - FlagId - </summary> - </member> - <member name="F:FineUI.Icon.FlagIe"> - <summary> - FlagIe - </summary> - </member> - <member name="F:FineUI.Icon.FlagIl"> - <summary> - FlagIl - </summary> - </member> - <member name="F:FineUI.Icon.FlagIn"> - <summary> - FlagIn - </summary> - </member> - <member name="F:FineUI.Icon.FlagIo"> - <summary> - FlagIo - </summary> - </member> - <member name="F:FineUI.Icon.FlagIq"> - <summary> - FlagIq - </summary> - </member> - <member name="F:FineUI.Icon.FlagIr"> - <summary> - FlagIr - </summary> - </member> - <member name="F:FineUI.Icon.FlagIs"> - <summary> - FlagIs - </summary> - </member> - <member name="F:FineUI.Icon.FlagIt"> - <summary> - FlagIt - </summary> - </member> - <member name="F:FineUI.Icon.FlagJm"> - <summary> - FlagJm - </summary> - </member> - <member name="F:FineUI.Icon.FlagJo"> - <summary> - FlagJo - </summary> - </member> - <member name="F:FineUI.Icon.FlagJp"> - <summary> - FlagJp - </summary> - </member> - <member name="F:FineUI.Icon.FlagKe"> - <summary> - FlagKe - </summary> - </member> - <member name="F:FineUI.Icon.FlagKg"> - <summary> - FlagKg - </summary> - </member> - <member name="F:FineUI.Icon.FlagKh"> - <summary> - FlagKh - </summary> - </member> - <member name="F:FineUI.Icon.FlagKi"> - <summary> - FlagKi - </summary> - </member> - <member name="F:FineUI.Icon.FlagKm"> - <summary> - FlagKm - </summary> - </member> - <member name="F:FineUI.Icon.FlagKn"> - <summary> - FlagKn - </summary> - </member> - <member name="F:FineUI.Icon.FlagKp"> - <summary> - FlagKp - </summary> - </member> - <member name="F:FineUI.Icon.FlagKr"> - <summary> - FlagKr - </summary> - </member> - <member name="F:FineUI.Icon.FlagKw"> - <summary> - FlagKw - </summary> - </member> - <member name="F:FineUI.Icon.FlagKy"> - <summary> - FlagKy - </summary> - </member> - <member name="F:FineUI.Icon.FlagKz"> - <summary> - FlagKz - </summary> - </member> - <member name="F:FineUI.Icon.FlagLa"> - <summary> - FlagLa - </summary> - </member> - <member name="F:FineUI.Icon.FlagLb"> - <summary> - FlagLb - </summary> - </member> - <member name="F:FineUI.Icon.FlagLc"> - <summary> - FlagLc - </summary> - </member> - <member name="F:FineUI.Icon.FlagLi"> - <summary> - FlagLi - </summary> - </member> - <member name="F:FineUI.Icon.FlagLk"> - <summary> - FlagLk - </summary> - </member> - <member name="F:FineUI.Icon.FlagLr"> - <summary> - FlagLr - </summary> - </member> - <member name="F:FineUI.Icon.FlagLs"> - <summary> - FlagLs - </summary> - </member> - <member name="F:FineUI.Icon.FlagLt"> - <summary> - FlagLt - </summary> - </member> - <member name="F:FineUI.Icon.FlagLu"> - <summary> - FlagLu - </summary> - </member> - <member name="F:FineUI.Icon.FlagLv"> - <summary> - FlagLv - </summary> - </member> - <member name="F:FineUI.Icon.FlagLy"> - <summary> - FlagLy - </summary> - </member> - <member name="F:FineUI.Icon.FlagMa"> - <summary> - FlagMa - </summary> - </member> - <member name="F:FineUI.Icon.FlagMc"> - <summary> - FlagMc - </summary> - </member> - <member name="F:FineUI.Icon.FlagMd"> - <summary> - FlagMd - </summary> - </member> - <member name="F:FineUI.Icon.FlagMe"> - <summary> - FlagMe - </summary> - </member> - <member name="F:FineUI.Icon.FlagMg"> - <summary> - FlagMg - </summary> - </member> - <member name="F:FineUI.Icon.FlagMh"> - <summary> - FlagMh - </summary> - </member> - <member name="F:FineUI.Icon.FlagMk"> - <summary> - FlagMk - </summary> - </member> - <member name="F:FineUI.Icon.FlagMl"> - <summary> - FlagMl - </summary> - </member> - <member name="F:FineUI.Icon.FlagMm"> - <summary> - FlagMm - </summary> - </member> - <member name="F:FineUI.Icon.FlagMn"> - <summary> - FlagMn - </summary> - </member> - <member name="F:FineUI.Icon.FlagMo"> - <summary> - FlagMo - </summary> - </member> - <member name="F:FineUI.Icon.FlagMp"> - <summary> - FlagMp - </summary> - </member> - <member name="F:FineUI.Icon.FlagMq"> - <summary> - FlagMq - </summary> - </member> - <member name="F:FineUI.Icon.FlagMr"> - <summary> - FlagMr - </summary> - </member> - <member name="F:FineUI.Icon.FlagMs"> - <summary> - FlagMs - </summary> - </member> - <member name="F:FineUI.Icon.FlagMt"> - <summary> - FlagMt - </summary> - </member> - <member name="F:FineUI.Icon.FlagMu"> - <summary> - FlagMu - </summary> - </member> - <member name="F:FineUI.Icon.FlagMv"> - <summary> - FlagMv - </summary> - </member> - <member name="F:FineUI.Icon.FlagMw"> - <summary> - FlagMw - </summary> - </member> - <member name="F:FineUI.Icon.FlagMx"> - <summary> - FlagMx - </summary> - </member> - <member name="F:FineUI.Icon.FlagMy"> - <summary> - FlagMy - </summary> - </member> - <member name="F:FineUI.Icon.FlagMz"> - <summary> - FlagMz - </summary> - </member> - <member name="F:FineUI.Icon.FlagNa"> - <summary> - FlagNa - </summary> - </member> - <member name="F:FineUI.Icon.FlagNc"> - <summary> - FlagNc - </summary> - </member> - <member name="F:FineUI.Icon.FlagNe"> - <summary> - FlagNe - </summary> - </member> - <member name="F:FineUI.Icon.FlagNf"> - <summary> - FlagNf - </summary> - </member> - <member name="F:FineUI.Icon.FlagNg"> - <summary> - FlagNg - </summary> - </member> - <member name="F:FineUI.Icon.FlagNi"> - <summary> - FlagNi - </summary> - </member> - <member name="F:FineUI.Icon.FlagNl"> - <summary> - FlagNl - </summary> - </member> - <member name="F:FineUI.Icon.FlagNo"> - <summary> - FlagNo - </summary> - </member> - <member name="F:FineUI.Icon.FlagNp"> - <summary> - FlagNp - </summary> - </member> - <member name="F:FineUI.Icon.FlagNr"> - <summary> - FlagNr - </summary> - </member> - <member name="F:FineUI.Icon.FlagNu"> - <summary> - FlagNu - </summary> - </member> - <member name="F:FineUI.Icon.FlagNz"> - <summary> - FlagNz - </summary> - </member> - <member name="F:FineUI.Icon.FlagOm"> - <summary> - FlagOm - </summary> - </member> - <member name="F:FineUI.Icon.FlagOrange"> - <summary> - FlagOrange - </summary> - </member> - <member name="F:FineUI.Icon.FlagPa"> - <summary> - FlagPa - </summary> - </member> - <member name="F:FineUI.Icon.FlagPe"> - <summary> - FlagPe - </summary> - </member> - <member name="F:FineUI.Icon.FlagPf"> - <summary> - FlagPf - </summary> - </member> - <member name="F:FineUI.Icon.FlagPg"> - <summary> - FlagPg - </summary> - </member> - <member name="F:FineUI.Icon.FlagPh"> - <summary> - FlagPh - </summary> - </member> - <member name="F:FineUI.Icon.FlagPink"> - <summary> - FlagPink - </summary> - </member> - <member name="F:FineUI.Icon.FlagPk"> - <summary> - FlagPk - </summary> - </member> - <member name="F:FineUI.Icon.FlagPl"> - <summary> - FlagPl - </summary> - </member> - <member name="F:FineUI.Icon.FlagPm"> - <summary> - FlagPm - </summary> - </member> - <member name="F:FineUI.Icon.FlagPn"> - <summary> - FlagPn - </summary> - </member> - <member name="F:FineUI.Icon.FlagPr"> - <summary> - FlagPr - </summary> - </member> - <member name="F:FineUI.Icon.FlagPs"> - <summary> - FlagPs - </summary> - </member> - <member name="F:FineUI.Icon.FlagPt"> - <summary> - FlagPt - </summary> - </member> - <member name="F:FineUI.Icon.FlagPurple"> - <summary> - FlagPurple - </summary> - </member> - <member name="F:FineUI.Icon.FlagPw"> - <summary> - FlagPw - </summary> - </member> - <member name="F:FineUI.Icon.FlagPy"> - <summary> - FlagPy - </summary> - </member> - <member name="F:FineUI.Icon.FlagQa"> - <summary> - FlagQa - </summary> - </member> - <member name="F:FineUI.Icon.FlagRe"> - <summary> - FlagRe - </summary> - </member> - <member name="F:FineUI.Icon.FlagRed"> - <summary> - FlagRed - </summary> - </member> - <member name="F:FineUI.Icon.FlagRo"> - <summary> - FlagRo - </summary> - </member> - <member name="F:FineUI.Icon.FlagRs"> - <summary> - FlagRs - </summary> - </member> - <member name="F:FineUI.Icon.FlagRu"> - <summary> - FlagRu - </summary> - </member> - <member name="F:FineUI.Icon.FlagRw"> - <summary> - FlagRw - </summary> - </member> - <member name="F:FineUI.Icon.FlagSa"> - <summary> - FlagSa - </summary> - </member> - <member name="F:FineUI.Icon.FlagSb"> - <summary> - FlagSb - </summary> - </member> - <member name="F:FineUI.Icon.FlagSc"> - <summary> - FlagSc - </summary> - </member> - <member name="F:FineUI.Icon.FlagScotland"> - <summary> - FlagScotland - </summary> - </member> - <member name="F:FineUI.Icon.FlagSd"> - <summary> - FlagSd - </summary> - </member> - <member name="F:FineUI.Icon.FlagSe"> - <summary> - FlagSe - </summary> - </member> - <member name="F:FineUI.Icon.FlagSg"> - <summary> - FlagSg - </summary> - </member> - <member name="F:FineUI.Icon.FlagSh"> - <summary> - FlagSh - </summary> - </member> - <member name="F:FineUI.Icon.FlagSi"> - <summary> - FlagSi - </summary> - </member> - <member name="F:FineUI.Icon.FlagSj"> - <summary> - FlagSj - </summary> - </member> - <member name="F:FineUI.Icon.FlagSk"> - <summary> - FlagSk - </summary> - </member> - <member name="F:FineUI.Icon.FlagSl"> - <summary> - FlagSl - </summary> - </member> - <member name="F:FineUI.Icon.FlagSm"> - <summary> - FlagSm - </summary> - </member> - <member name="F:FineUI.Icon.FlagSn"> - <summary> - FlagSn - </summary> - </member> - <member name="F:FineUI.Icon.FlagSo"> - <summary> - FlagSo - </summary> - </member> - <member name="F:FineUI.Icon.FlagSr"> - <summary> - FlagSr - </summary> - </member> - <member name="F:FineUI.Icon.FlagSt"> - <summary> - FlagSt - </summary> - </member> - <member name="F:FineUI.Icon.FlagSv"> - <summary> - FlagSv - </summary> - </member> - <member name="F:FineUI.Icon.FlagSy"> - <summary> - FlagSy - </summary> - </member> - <member name="F:FineUI.Icon.FlagSz"> - <summary> - FlagSz - </summary> - </member> - <member name="F:FineUI.Icon.FlagTc"> - <summary> - FlagTc - </summary> - </member> - <member name="F:FineUI.Icon.FlagTd"> - <summary> - FlagTd - </summary> - </member> - <member name="F:FineUI.Icon.FlagTf"> - <summary> - FlagTf - </summary> - </member> - <member name="F:FineUI.Icon.FlagTg"> - <summary> - FlagTg - </summary> - </member> - <member name="F:FineUI.Icon.FlagTh"> - <summary> - FlagTh - </summary> - </member> - <member name="F:FineUI.Icon.FlagTj"> - <summary> - FlagTj - </summary> - </member> - <member name="F:FineUI.Icon.FlagTk"> - <summary> - FlagTk - </summary> - </member> - <member name="F:FineUI.Icon.FlagTl"> - <summary> - FlagTl - </summary> - </member> - <member name="F:FineUI.Icon.FlagTm"> - <summary> - FlagTm - </summary> - </member> - <member name="F:FineUI.Icon.FlagTn"> - <summary> - FlagTn - </summary> - </member> - <member name="F:FineUI.Icon.FlagTo"> - <summary> - FlagTo - </summary> - </member> - <member name="F:FineUI.Icon.FlagTr"> - <summary> - FlagTr - </summary> - </member> - <member name="F:FineUI.Icon.FlagTt"> - <summary> - FlagTt - </summary> - </member> - <member name="F:FineUI.Icon.FlagTv"> - <summary> - FlagTv - </summary> - </member> - <member name="F:FineUI.Icon.FlagTw"> - <summary> - FlagTw - </summary> - </member> - <member name="F:FineUI.Icon.FlagTz"> - <summary> - FlagTz - </summary> - </member> - <member name="F:FineUI.Icon.FlagUa"> - <summary> - FlagUa - </summary> - </member> - <member name="F:FineUI.Icon.FlagUg"> - <summary> - FlagUg - </summary> - </member> - <member name="F:FineUI.Icon.FlagUm"> - <summary> - FlagUm - </summary> - </member> - <member name="F:FineUI.Icon.FlagUs"> - <summary> - FlagUs - </summary> - </member> - <member name="F:FineUI.Icon.FlagUy"> - <summary> - FlagUy - </summary> - </member> - <member name="F:FineUI.Icon.FlagUz"> - <summary> - FlagUz - </summary> - </member> - <member name="F:FineUI.Icon.FlagVa"> - <summary> - FlagVa - </summary> - </member> - <member name="F:FineUI.Icon.FlagVc"> - <summary> - FlagVc - </summary> - </member> - <member name="F:FineUI.Icon.FlagVe"> - <summary> - FlagVe - </summary> - </member> - <member name="F:FineUI.Icon.FlagVg"> - <summary> - FlagVg - </summary> - </member> - <member name="F:FineUI.Icon.FlagVi"> - <summary> - FlagVi - </summary> - </member> - <member name="F:FineUI.Icon.FlagVn"> - <summary> - FlagVn - </summary> - </member> - <member name="F:FineUI.Icon.FlagVu"> - <summary> - FlagVu - </summary> - </member> - <member name="F:FineUI.Icon.FlagWales"> - <summary> - FlagWales - </summary> - </member> - <member name="F:FineUI.Icon.FlagWf"> - <summary> - FlagWf - </summary> - </member> - <member name="F:FineUI.Icon.FlagWhite"> - <summary> - FlagWhite - </summary> - </member> - <member name="F:FineUI.Icon.FlagWs"> - <summary> - FlagWs - </summary> - </member> - <member name="F:FineUI.Icon.FlagYe"> - <summary> - FlagYe - </summary> - </member> - <member name="F:FineUI.Icon.FlagYellow"> - <summary> - FlagYellow - </summary> - </member> - <member name="F:FineUI.Icon.FlagYt"> - <summary> - FlagYt - </summary> - </member> - <member name="F:FineUI.Icon.FlagZa"> - <summary> - FlagZa - </summary> - </member> - <member name="F:FineUI.Icon.FlagZm"> - <summary> - FlagZm - </summary> - </member> - <member name="F:FineUI.Icon.FlagZw"> - <summary> - FlagZw - </summary> - </member> - <member name="F:FineUI.Icon.FlowerDaisy"> - <summary> - FlowerDaisy - </summary> - </member> - <member name="F:FineUI.Icon.Folder"> - <summary> - Folder - </summary> - </member> - <member name="F:FineUI.Icon.FolderAdd"> - <summary> - FolderAdd - </summary> - </member> - <member name="F:FineUI.Icon.FolderBell"> - <summary> - FolderBell - </summary> - </member> - <member name="F:FineUI.Icon.FolderBookmark"> - <summary> - FolderBookmark - </summary> - </member> - <member name="F:FineUI.Icon.FolderBrick"> - <summary> - FolderBrick - </summary> - </member> - <member name="F:FineUI.Icon.FolderBug"> - <summary> - FolderBug - </summary> - </member> - <member name="F:FineUI.Icon.FolderCamera"> - <summary> - FolderCamera - </summary> - </member> - <member name="F:FineUI.Icon.FolderConnect"> - <summary> - FolderConnect - </summary> - </member> - <member name="F:FineUI.Icon.FolderDatabase"> - <summary> - FolderDatabase - </summary> - </member> - <member name="F:FineUI.Icon.FolderDelete"> - <summary> - FolderDelete - </summary> - </member> - <member name="F:FineUI.Icon.FolderEdit"> - <summary> - FolderEdit - </summary> - </member> - <member name="F:FineUI.Icon.FolderError"> - <summary> - FolderError - </summary> - </member> - <member name="F:FineUI.Icon.FolderExplore"> - <summary> - FolderExplore - </summary> - </member> - <member name="F:FineUI.Icon.FolderFeed"> - <summary> - FolderFeed - </summary> - </member> - <member name="F:FineUI.Icon.FolderFilm"> - <summary> - FolderFilm - </summary> - </member> - <member name="F:FineUI.Icon.FolderFind"> - <summary> - FolderFind - </summary> - </member> - <member name="F:FineUI.Icon.FolderFont"> - <summary> - FolderFont - </summary> - </member> - <member name="F:FineUI.Icon.FolderGo"> - <summary> - FolderGo - </summary> - </member> - <member name="F:FineUI.Icon.FolderHeart"> - <summary> - FolderHeart - </summary> - </member> - <member name="F:FineUI.Icon.FolderHome"> - <summary> - FolderHome - </summary> - </member> - <member name="F:FineUI.Icon.FolderImage"> - <summary> - FolderImage - </summary> - </member> - <member name="F:FineUI.Icon.FolderKey"> - <summary> - FolderKey - </summary> - </member> - <member name="F:FineUI.Icon.FolderLightbulb"> - <summary> - FolderLightbulb - </summary> - </member> - <member name="F:FineUI.Icon.FolderLink"> - <summary> - FolderLink - </summary> - </member> - <member name="F:FineUI.Icon.FolderMagnify"> - <summary> - FolderMagnify - </summary> - </member> - <member name="F:FineUI.Icon.FolderPage"> - <summary> - FolderPage - </summary> - </member> - <member name="F:FineUI.Icon.FolderPageWhite"> - <summary> - FolderPageWhite - </summary> - </member> - <member name="F:FineUI.Icon.FolderPalette"> - <summary> - FolderPalette - </summary> - </member> - <member name="F:FineUI.Icon.FolderPicture"> - <summary> - FolderPicture - </summary> - </member> - <member name="F:FineUI.Icon.FolderStar"> - <summary> - FolderStar - </summary> - </member> - <member name="F:FineUI.Icon.FolderTable"> - <summary> - FolderTable - </summary> - </member> - <member name="F:FineUI.Icon.FolderUp"> - <summary> - FolderUp - </summary> - </member> - <member name="F:FineUI.Icon.FolderUser"> - <summary> - FolderUser - </summary> - </member> - <member name="F:FineUI.Icon.FolderWrench"> - <summary> - FolderWrench - </summary> - </member> - <member name="F:FineUI.Icon.Font"> - <summary> - Font - </summary> - </member> - <member name="F:FineUI.Icon.FontAdd"> - <summary> - FontAdd - </summary> - </member> - <member name="F:FineUI.Icon.FontColor"> - <summary> - FontColor - </summary> - </member> - <member name="F:FineUI.Icon.FontDelete"> - <summary> - FontDelete - </summary> - </member> - <member name="F:FineUI.Icon.FontGo"> - <summary> - FontGo - </summary> - </member> - <member name="F:FineUI.Icon.FontLarger"> - <summary> - FontLarger - </summary> - </member> - <member name="F:FineUI.Icon.FontSmaller"> - <summary> - FontSmaller - </summary> - </member> - <member name="F:FineUI.Icon.ForwardBlue"> - <summary> - ForwardBlue - </summary> - </member> - <member name="F:FineUI.Icon.ForwardGreen"> - <summary> - ForwardGreen - </summary> - </member> - <member name="F:FineUI.Icon.Group"> - <summary> - Group - </summary> - </member> - <member name="F:FineUI.Icon.GroupAdd"> - <summary> - GroupAdd - </summary> - </member> - <member name="F:FineUI.Icon.GroupDelete"> - <summary> - GroupDelete - </summary> - </member> - <member name="F:FineUI.Icon.GroupEdit"> - <summary> - GroupEdit - </summary> - </member> - <member name="F:FineUI.Icon.GroupError"> - <summary> - GroupError - </summary> - </member> - <member name="F:FineUI.Icon.GroupGear"> - <summary> - GroupGear - </summary> - </member> - <member name="F:FineUI.Icon.GroupGo"> - <summary> - GroupGo - </summary> - </member> - <member name="F:FineUI.Icon.GroupKey"> - <summary> - GroupKey - </summary> - </member> - <member name="F:FineUI.Icon.GroupLink"> - <summary> - GroupLink - </summary> - </member> - <member name="F:FineUI.Icon.Heart"> - <summary> - Heart - </summary> - </member> - <member name="F:FineUI.Icon.HeartAdd"> - <summary> - HeartAdd - </summary> - </member> - <member name="F:FineUI.Icon.HeartBroken"> - <summary> - HeartBroken - </summary> - </member> - <member name="F:FineUI.Icon.HeartConnect"> - <summary> - HeartConnect - </summary> - </member> - <member name="F:FineUI.Icon.HeartDelete"> - <summary> - HeartDelete - </summary> - </member> - <member name="F:FineUI.Icon.Help"> - <summary> - Help - </summary> - </member> - <member name="F:FineUI.Icon.Hourglass"> - <summary> - Hourglass - </summary> - </member> - <member name="F:FineUI.Icon.HourglassAdd"> - <summary> - HourglassAdd - </summary> - </member> - <member name="F:FineUI.Icon.HourglassDelete"> - <summary> - HourglassDelete - </summary> - </member> - <member name="F:FineUI.Icon.HourglassGo"> - <summary> - HourglassGo - </summary> - </member> - <member name="F:FineUI.Icon.HourglassLink"> - <summary> - HourglassLink - </summary> - </member> - <member name="F:FineUI.Icon.House"> - <summary> - House - </summary> - </member> - <member name="F:FineUI.Icon.HouseConnect"> - <summary> - HouseConnect - </summary> - </member> - <member name="F:FineUI.Icon.HouseGo"> - <summary> - HouseGo - </summary> - </member> - <member name="F:FineUI.Icon.HouseKey"> - <summary> - HouseKey - </summary> - </member> - <member name="F:FineUI.Icon.HouseLink"> - <summary> - HouseLink - </summary> - </member> - <member name="F:FineUI.Icon.HouseStar"> - <summary> - HouseStar - </summary> - </member> - <member name="F:FineUI.Icon.Html"> - <summary> - Html - </summary> - </member> - <member name="F:FineUI.Icon.HtmlAdd"> - <summary> - HtmlAdd - </summary> - </member> - <member name="F:FineUI.Icon.HtmlDelete"> - <summary> - HtmlDelete - </summary> - </member> - <member name="F:FineUI.Icon.HtmlError"> - <summary> - HtmlError - </summary> - </member> - <member name="F:FineUI.Icon.HtmlGo"> - <summary> - HtmlGo - </summary> - </member> - <member name="F:FineUI.Icon.HtmlValid"> - <summary> - HtmlValid - </summary> - </member> - <member name="F:FineUI.Icon.Image"> - <summary> - Image - </summary> - </member> - <member name="F:FineUI.Icon.Images"> - <summary> - Images - </summary> - </member> - <member name="F:FineUI.Icon.ImageAdd"> - <summary> - ImageAdd - </summary> - </member> - <member name="F:FineUI.Icon.ImageDelete"> - <summary> - ImageDelete - </summary> - </member> - <member name="F:FineUI.Icon.ImageEdit"> - <summary> - ImageEdit - </summary> - </member> - <member name="F:FineUI.Icon.ImageLink"> - <summary> - ImageLink - </summary> - </member> - <member name="F:FineUI.Icon.ImageMagnify"> - <summary> - ImageMagnify - </summary> - </member> - <member name="F:FineUI.Icon.ImageStar"> - <summary> - ImageStar - </summary> - </member> - <member name="F:FineUI.Icon.Information"> - <summary> - Information - </summary> - </member> - <member name="F:FineUI.Icon.Ipod"> - <summary> - Ipod - </summary> - </member> - <member name="F:FineUI.Icon.IpodCast"> - <summary> - IpodCast - </summary> - </member> - <member name="F:FineUI.Icon.IpodCastAdd"> - <summary> - IpodCastAdd - </summary> - </member> - <member name="F:FineUI.Icon.IpodCastDelete"> - <summary> - IpodCastDelete - </summary> - </member> - <member name="F:FineUI.Icon.IpodConnect"> - <summary> - IpodConnect - </summary> - </member> - <member name="F:FineUI.Icon.IpodNano"> - <summary> - IpodNano - </summary> - </member> - <member name="F:FineUI.Icon.IpodNanoConnect"> - <summary> - IpodNanoConnect - </summary> - </member> - <member name="F:FineUI.Icon.IpodSound"> - <summary> - IpodSound - </summary> - </member> - <member name="F:FineUI.Icon.Joystick"> - <summary> - Joystick - </summary> - </member> - <member name="F:FineUI.Icon.JoystickAdd"> - <summary> - JoystickAdd - </summary> - </member> - <member name="F:FineUI.Icon.JoystickConnect"> - <summary> - JoystickConnect - </summary> - </member> - <member name="F:FineUI.Icon.JoystickDelete"> - <summary> - JoystickDelete - </summary> - </member> - <member name="F:FineUI.Icon.JoystickError"> - <summary> - JoystickError - </summary> - </member> - <member name="F:FineUI.Icon.Key"> - <summary> - Key - </summary> - </member> - <member name="F:FineUI.Icon.Keyboard"> - <summary> - Keyboard - </summary> - </member> - <member name="F:FineUI.Icon.KeyboardAdd"> - <summary> - KeyboardAdd - </summary> - </member> - <member name="F:FineUI.Icon.KeyboardConnect"> - <summary> - KeyboardConnect - </summary> - </member> - <member name="F:FineUI.Icon.KeyboardDelete"> - <summary> - KeyboardDelete - </summary> - </member> - <member name="F:FineUI.Icon.KeyboardMagnify"> - <summary> - KeyboardMagnify - </summary> - </member> - <member name="F:FineUI.Icon.KeyAdd"> - <summary> - KeyAdd - </summary> - </member> - <member name="F:FineUI.Icon.KeyDelete"> - <summary> - KeyDelete - </summary> - </member> - <member name="F:FineUI.Icon.KeyGo"> - <summary> - KeyGo - </summary> - </member> - <member name="F:FineUI.Icon.KeyStart"> - <summary> - KeyStart - </summary> - </member> - <member name="F:FineUI.Icon.KeyStop"> - <summary> - KeyStop - </summary> - </member> - <member name="F:FineUI.Icon.Laptop"> - <summary> - Laptop - </summary> - </member> - <member name="F:FineUI.Icon.LaptopAdd"> - <summary> - LaptopAdd - </summary> - </member> - <member name="F:FineUI.Icon.LaptopConnect"> - <summary> - LaptopConnect - </summary> - </member> - <member name="F:FineUI.Icon.LaptopDelete"> - <summary> - LaptopDelete - </summary> - </member> - <member name="F:FineUI.Icon.LaptopDisk"> - <summary> - LaptopDisk - </summary> - </member> - <member name="F:FineUI.Icon.LaptopEdit"> - <summary> - LaptopEdit - </summary> - </member> - <member name="F:FineUI.Icon.LaptopError"> - <summary> - LaptopError - </summary> - </member> - <member name="F:FineUI.Icon.LaptopGo"> - <summary> - LaptopGo - </summary> - </member> - <member name="F:FineUI.Icon.LaptopKey"> - <summary> - LaptopKey - </summary> - </member> - <member name="F:FineUI.Icon.LaptopLink"> - <summary> - LaptopLink - </summary> - </member> - <member name="F:FineUI.Icon.LaptopMagnify"> - <summary> - LaptopMagnify - </summary> - </member> - <member name="F:FineUI.Icon.LaptopStart"> - <summary> - LaptopStart - </summary> - </member> - <member name="F:FineUI.Icon.LaptopStop"> - <summary> - LaptopStop - </summary> - </member> - <member name="F:FineUI.Icon.LaptopWrench"> - <summary> - LaptopWrench - </summary> - </member> - <member name="F:FineUI.Icon.Layers"> - <summary> - Layers - </summary> - </member> - <member name="F:FineUI.Icon.Layout"> - <summary> - Layout - </summary> - </member> - <member name="F:FineUI.Icon.LayoutAdd"> - <summary> - LayoutAdd - </summary> - </member> - <member name="F:FineUI.Icon.LayoutContent"> - <summary> - LayoutContent - </summary> - </member> - <member name="F:FineUI.Icon.LayoutDelete"> - <summary> - LayoutDelete - </summary> - </member> - <member name="F:FineUI.Icon.LayoutEdit"> - <summary> - LayoutEdit - </summary> - </member> - <member name="F:FineUI.Icon.LayoutError"> - <summary> - LayoutError - </summary> - </member> - <member name="F:FineUI.Icon.LayoutHeader"> - <summary> - LayoutHeader - </summary> - </member> - <member name="F:FineUI.Icon.LayoutKey"> - <summary> - LayoutKey - </summary> - </member> - <member name="F:FineUI.Icon.LayoutLightning"> - <summary> - LayoutLightning - </summary> - </member> - <member name="F:FineUI.Icon.LayoutLink"> - <summary> - LayoutLink - </summary> - </member> - <member name="F:FineUI.Icon.LayoutSidebar"> - <summary> - LayoutSidebar - </summary> - </member> - <member name="F:FineUI.Icon.Lightbulb"> - <summary> - Lightbulb - </summary> - </member> - <member name="F:FineUI.Icon.LightbulbAdd"> - <summary> - LightbulbAdd - </summary> - </member> - <member name="F:FineUI.Icon.LightbulbDelete"> - <summary> - LightbulbDelete - </summary> - </member> - <member name="F:FineUI.Icon.LightbulbOff"> - <summary> - LightbulbOff - </summary> - </member> - <member name="F:FineUI.Icon.Lightning"> - <summary> - Lightning - </summary> - </member> - <member name="F:FineUI.Icon.LightningAdd"> - <summary> - LightningAdd - </summary> - </member> - <member name="F:FineUI.Icon.LightningDelete"> - <summary> - LightningDelete - </summary> - </member> - <member name="F:FineUI.Icon.LightningGo"> - <summary> - LightningGo - </summary> - </member> - <member name="F:FineUI.Icon.Link"> - <summary> - Link - </summary> - </member> - <member name="F:FineUI.Icon.LinkAdd"> - <summary> - LinkAdd - </summary> - </member> - <member name="F:FineUI.Icon.LinkBreak"> - <summary> - LinkBreak - </summary> - </member> - <member name="F:FineUI.Icon.LinkDelete"> - <summary> - LinkDelete - </summary> - </member> - <member name="F:FineUI.Icon.LinkEdit"> - <summary> - LinkEdit - </summary> - </member> - <member name="F:FineUI.Icon.LinkError"> - <summary> - LinkError - </summary> - </member> - <member name="F:FineUI.Icon.LinkGo"> - <summary> - LinkGo - </summary> - </member> - <member name="F:FineUI.Icon.Lock"> - <summary> - Lock - </summary> - </member> - <member name="F:FineUI.Icon.LockAdd"> - <summary> - LockAdd - </summary> - </member> - <member name="F:FineUI.Icon.LockBreak"> - <summary> - LockBreak - </summary> - </member> - <member name="F:FineUI.Icon.LockDelete"> - <summary> - LockDelete - </summary> - </member> - <member name="F:FineUI.Icon.LockEdit"> - <summary> - LockEdit - </summary> - </member> - <member name="F:FineUI.Icon.LockGo"> - <summary> - LockGo - </summary> - </member> - <member name="F:FineUI.Icon.LockKey"> - <summary> - LockKey - </summary> - </member> - <member name="F:FineUI.Icon.LockOpen"> - <summary> - LockOpen - </summary> - </member> - <member name="F:FineUI.Icon.LockStart"> - <summary> - LockStart - </summary> - </member> - <member name="F:FineUI.Icon.LockStop"> - <summary> - LockStop - </summary> - </member> - <member name="F:FineUI.Icon.Lorry"> - <summary> - Lorry - </summary> - </member> - <member name="F:FineUI.Icon.LorryAdd"> - <summary> - LorryAdd - </summary> - </member> - <member name="F:FineUI.Icon.LorryDelete"> - <summary> - LorryDelete - </summary> - </member> - <member name="F:FineUI.Icon.LorryError"> - <summary> - LorryError - </summary> - </member> - <member name="F:FineUI.Icon.LorryFlatbed"> - <summary> - LorryFlatbed - </summary> - </member> - <member name="F:FineUI.Icon.LorryGo"> - <summary> - LorryGo - </summary> - </member> - <member name="F:FineUI.Icon.LorryLink"> - <summary> - LorryLink - </summary> - </member> - <member name="F:FineUI.Icon.LorryStart"> - <summary> - LorryStart - </summary> - </member> - <member name="F:FineUI.Icon.LorryStop"> - <summary> - LorryStop - </summary> - </member> - <member name="F:FineUI.Icon.MagifierZoomOut"> - <summary> - MagifierZoomOut - </summary> - </member> - <member name="F:FineUI.Icon.Magnifier"> - <summary> - Magnifier - </summary> - </member> - <member name="F:FineUI.Icon.MagnifierZoomIn"> - <summary> - MagnifierZoomIn - </summary> - </member> - <member name="F:FineUI.Icon.Mail"> - <summary> - Mail - </summary> - </member> - <member name="F:FineUI.Icon.Male"> - <summary> - Male - </summary> - </member> - <member name="F:FineUI.Icon.Map"> - <summary> - Map - </summary> - </member> - <member name="F:FineUI.Icon.MapAdd"> - <summary> - MapAdd - </summary> - </member> - <member name="F:FineUI.Icon.MapClipboard"> - <summary> - MapClipboard - </summary> - </member> - <member name="F:FineUI.Icon.MapCursor"> - <summary> - MapCursor - </summary> - </member> - <member name="F:FineUI.Icon.MapDelete"> - <summary> - MapDelete - </summary> - </member> - <member name="F:FineUI.Icon.MapEdit"> - <summary> - MapEdit - </summary> - </member> - <member name="F:FineUI.Icon.MapError"> - <summary> - MapError - </summary> - </member> - <member name="F:FineUI.Icon.MapGo"> - <summary> - MapGo - </summary> - </member> - <member name="F:FineUI.Icon.MapLink"> - <summary> - MapLink - </summary> - </member> - <member name="F:FineUI.Icon.MapMagnify"> - <summary> - MapMagnify - </summary> - </member> - <member name="F:FineUI.Icon.MapStart"> - <summary> - MapStart - </summary> - </member> - <member name="F:FineUI.Icon.MapStop"> - <summary> - MapStop - </summary> - </member> - <member name="F:FineUI.Icon.MedalBronze1"> - <summary> - MedalBronze1 - </summary> - </member> - <member name="F:FineUI.Icon.MedalBronze2"> - <summary> - MedalBronze2 - </summary> - </member> - <member name="F:FineUI.Icon.MedalBronze3"> - <summary> - MedalBronze3 - </summary> - </member> - <member name="F:FineUI.Icon.MedalBronzeAdd"> - <summary> - MedalBronzeAdd - </summary> - </member> - <member name="F:FineUI.Icon.MedalBronzeDelete"> - <summary> - MedalBronzeDelete - </summary> - </member> - <member name="F:FineUI.Icon.MedalGold1"> - <summary> - MedalGold1 - </summary> - </member> - <member name="F:FineUI.Icon.MedalGold2"> - <summary> - MedalGold2 - </summary> - </member> - <member name="F:FineUI.Icon.MedalGold3"> - <summary> - MedalGold3 - </summary> - </member> - <member name="F:FineUI.Icon.MedalGoldAdd"> - <summary> - MedalGoldAdd - </summary> - </member> - <member name="F:FineUI.Icon.MedalGoldDelete"> - <summary> - MedalGoldDelete - </summary> - </member> - <member name="F:FineUI.Icon.MedalSilver1"> - <summary> - MedalSilver1 - </summary> - </member> - <member name="F:FineUI.Icon.MedalSilver2"> - <summary> - MedalSilver2 - </summary> - </member> - <member name="F:FineUI.Icon.MedalSilver3"> - <summary> - MedalSilver3 - </summary> - </member> - <member name="F:FineUI.Icon.MedalSilverAdd"> - <summary> - MedalSilverAdd - </summary> - </member> - <member name="F:FineUI.Icon.MedalSilverDelete"> - <summary> - MedalSilverDelete - </summary> - </member> - <member name="F:FineUI.Icon.Money"> - <summary> - Money - </summary> - </member> - <member name="F:FineUI.Icon.MoneyAdd"> - <summary> - MoneyAdd - </summary> - </member> - <member name="F:FineUI.Icon.MoneyDelete"> - <summary> - MoneyDelete - </summary> - </member> - <member name="F:FineUI.Icon.MoneyDollar"> - <summary> - MoneyDollar - </summary> - </member> - <member name="F:FineUI.Icon.MoneyEuro"> - <summary> - MoneyEuro - </summary> - </member> - <member name="F:FineUI.Icon.MoneyPound"> - <summary> - MoneyPound - </summary> - </member> - <member name="F:FineUI.Icon.MoneyYen"> - <summary> - MoneyYen - </summary> - </member> - <member name="F:FineUI.Icon.Monitor"> - <summary> - Monitor - </summary> - </member> - <member name="F:FineUI.Icon.MonitorAdd"> - <summary> - MonitorAdd - </summary> - </member> - <member name="F:FineUI.Icon.MonitorDelete"> - <summary> - MonitorDelete - </summary> - </member> - <member name="F:FineUI.Icon.MonitorEdit"> - <summary> - MonitorEdit - </summary> - </member> - <member name="F:FineUI.Icon.MonitorError"> - <summary> - MonitorError - </summary> - </member> - <member name="F:FineUI.Icon.MonitorGo"> - <summary> - MonitorGo - </summary> - </member> - <member name="F:FineUI.Icon.MonitorKey"> - <summary> - MonitorKey - </summary> - </member> - <member name="F:FineUI.Icon.MonitorLightning"> - <summary> - MonitorLightning - </summary> - </member> - <member name="F:FineUI.Icon.MonitorLink"> - <summary> - MonitorLink - </summary> - </member> - <member name="F:FineUI.Icon.MoonFull"> - <summary> - MoonFull - </summary> - </member> - <member name="F:FineUI.Icon.Mouse"> - <summary> - Mouse - </summary> - </member> - <member name="F:FineUI.Icon.MouseAdd"> - <summary> - MouseAdd - </summary> - </member> - <member name="F:FineUI.Icon.MouseDelete"> - <summary> - MouseDelete - </summary> - </member> - <member name="F:FineUI.Icon.MouseError"> - <summary> - MouseError - </summary> - </member> - <member name="F:FineUI.Icon.Music"> - <summary> - Music - </summary> - </member> - <member name="F:FineUI.Icon.MusicNote"> - <summary> - MusicNote - </summary> - </member> - <member name="F:FineUI.Icon.Neighbourhood"> - <summary> - Neighbourhood - </summary> - </member> - <member name="F:FineUI.Icon.New"> - <summary> - New - </summary> - </member> - <member name="F:FineUI.Icon.Newspaper"> - <summary> - Newspaper - </summary> - </member> - <member name="F:FineUI.Icon.NewspaperAdd"> - <summary> - NewspaperAdd - </summary> - </member> - <member name="F:FineUI.Icon.NewspaperDelete"> - <summary> - NewspaperDelete - </summary> - </member> - <member name="F:FineUI.Icon.NewspaperGo"> - <summary> - NewspaperGo - </summary> - </member> - <member name="F:FineUI.Icon.NewspaperLink"> - <summary> - NewspaperLink - </summary> - </member> - <member name="F:FineUI.Icon.NewBlue"> - <summary> - NewBlue - </summary> - </member> - <member name="F:FineUI.Icon.NewRed"> - <summary> - NewRed - </summary> - </member> - <member name="F:FineUI.Icon.NextBlue"> - <summary> - NextBlue - </summary> - </member> - <member name="F:FineUI.Icon.NextGreen"> - <summary> - NextGreen - </summary> - </member> - <member name="F:FineUI.Icon.Note"> - <summary> - Note - </summary> - </member> - <member name="F:FineUI.Icon.NoteAdd"> - <summary> - NoteAdd - </summary> - </member> - <member name="F:FineUI.Icon.NoteDelete"> - <summary> - NoteDelete - </summary> - </member> - <member name="F:FineUI.Icon.NoteEdit"> - <summary> - NoteEdit - </summary> - </member> - <member name="F:FineUI.Icon.NoteError"> - <summary> - NoteError - </summary> - </member> - <member name="F:FineUI.Icon.NoteGo"> - <summary> - NoteGo - </summary> - </member> - <member name="F:FineUI.Icon.Outline"> - <summary> - Outline - </summary> - </member> - <member name="F:FineUI.Icon.Overlays"> - <summary> - Overlays - </summary> - </member> - <member name="F:FineUI.Icon.Package"> - <summary> - Package - </summary> - </member> - <member name="F:FineUI.Icon.PackageAdd"> - <summary> - PackageAdd - </summary> - </member> - <member name="F:FineUI.Icon.PackageDelete"> - <summary> - PackageDelete - </summary> - </member> - <member name="F:FineUI.Icon.PackageDown"> - <summary> - PackageDown - </summary> - </member> - <member name="F:FineUI.Icon.PackageGo"> - <summary> - PackageGo - </summary> - </member> - <member name="F:FineUI.Icon.PackageGreen"> - <summary> - PackageGreen - </summary> - </member> - <member name="F:FineUI.Icon.PackageIn"> - <summary> - PackageIn - </summary> - </member> - <member name="F:FineUI.Icon.PackageLink"> - <summary> - PackageLink - </summary> - </member> - <member name="F:FineUI.Icon.PackageSe"> - <summary> - PackageSe - </summary> - </member> - <member name="F:FineUI.Icon.PackageStart"> - <summary> - PackageStart - </summary> - </member> - <member name="F:FineUI.Icon.PackageStop"> - <summary> - PackageStop - </summary> - </member> - <member name="F:FineUI.Icon.PackageWhite"> - <summary> - PackageWhite - </summary> - </member> - <member name="F:FineUI.Icon.Page"> - <summary> - Page - </summary> - </member> - <member name="F:FineUI.Icon.PageAdd"> - <summary> - PageAdd - </summary> - </member> - <member name="F:FineUI.Icon.PageAttach"> - <summary> - PageAttach - </summary> - </member> - <member name="F:FineUI.Icon.PageBack"> - <summary> - PageBack - </summary> - </member> - <member name="F:FineUI.Icon.PageBreak"> - <summary> - PageBreak - </summary> - </member> - <member name="F:FineUI.Icon.PageBreakInsert"> - <summary> - PageBreakInsert - </summary> - </member> - <member name="F:FineUI.Icon.PageCancel"> - <summary> - PageCancel - </summary> - </member> - <member name="F:FineUI.Icon.PageCode"> - <summary> - PageCode - </summary> - </member> - <member name="F:FineUI.Icon.PageCopy"> - <summary> - PageCopy - </summary> - </member> - <member name="F:FineUI.Icon.PageDelete"> - <summary> - PageDelete - </summary> - </member> - <member name="F:FineUI.Icon.PageEdit"> - <summary> - PageEdit - </summary> - </member> - <member name="F:FineUI.Icon.PageError"> - <summary> - PageError - </summary> - </member> - <member name="F:FineUI.Icon.PageExcel"> - <summary> - PageExcel - </summary> - </member> - <member name="F:FineUI.Icon.PageFind"> - <summary> - PageFind - </summary> - </member> - <member name="F:FineUI.Icon.PageForward"> - <summary> - PageForward - </summary> - </member> - <member name="F:FineUI.Icon.PageGear"> - <summary> - PageGear - </summary> - </member> - <member name="F:FineUI.Icon.PageGo"> - <summary> - PageGo - </summary> - </member> - <member name="F:FineUI.Icon.PageGreen"> - <summary> - PageGreen - </summary> - </member> - <member name="F:FineUI.Icon.PageHeaderFooter"> - <summary> - PageHeaderFooter - </summary> - </member> - <member name="F:FineUI.Icon.PageKey"> - <summary> - PageKey - </summary> - </member> - <member name="F:FineUI.Icon.PageLandscape"> - <summary> - PageLandscape - </summary> - </member> - <member name="F:FineUI.Icon.PageLandscapeShot"> - <summary> - PageLandscapeShot - </summary> - </member> - <member name="F:FineUI.Icon.PageLightning"> - <summary> - PageLightning - </summary> - </member> - <member name="F:FineUI.Icon.PageLink"> - <summary> - PageLink - </summary> - </member> - <member name="F:FineUI.Icon.PageMagnify"> - <summary> - PageMagnify - </summary> - </member> - <member name="F:FineUI.Icon.PagePaintbrush"> - <summary> - PagePaintbrush - </summary> - </member> - <member name="F:FineUI.Icon.PagePaste"> - <summary> - PagePaste - </summary> - </member> - <member name="F:FineUI.Icon.PagePortrait"> - <summary> - PagePortrait - </summary> - </member> - <member name="F:FineUI.Icon.PagePortraitShot"> - <summary> - PagePortraitShot - </summary> - </member> - <member name="F:FineUI.Icon.PageRed"> - <summary> - PageRed - </summary> - </member> - <member name="F:FineUI.Icon.PageRefresh"> - <summary> - PageRefresh - </summary> - </member> - <member name="F:FineUI.Icon.PageSave"> - <summary> - PageSave - </summary> - </member> - <member name="F:FineUI.Icon.PageWhite"> - <summary> - PageWhite - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteAcrobat"> - <summary> - PageWhiteAcrobat - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteActionscript"> - <summary> - PageWhiteActionscript - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteAdd"> - <summary> - PageWhiteAdd - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteBreak"> - <summary> - PageWhiteBreak - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteC"> - <summary> - PageWhiteC - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCamera"> - <summary> - PageWhiteCamera - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCd"> - <summary> - PageWhiteCd - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCdr"> - <summary> - PageWhiteCdr - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCode"> - <summary> - PageWhiteCode - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCodeRed"> - <summary> - PageWhiteCodeRed - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteColdfusion"> - <summary> - PageWhiteColdfusion - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCompressed"> - <summary> - PageWhiteCompressed - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteConnect"> - <summary> - PageWhiteConnect - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCopy"> - <summary> - PageWhiteCopy - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCplusplus"> - <summary> - PageWhiteCplusplus - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCsharp"> - <summary> - PageWhiteCsharp - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteCup"> - <summary> - PageWhiteCup - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteDatabase"> - <summary> - PageWhiteDatabase - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteDatabaseYellow"> - <summary> - PageWhiteDatabaseYellow - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteDelete"> - <summary> - PageWhiteDelete - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteDvd"> - <summary> - PageWhiteDvd - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteEdit"> - <summary> - PageWhiteEdit - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteError"> - <summary> - PageWhiteError - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteExcel"> - <summary> - PageWhiteExcel - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteFind"> - <summary> - PageWhiteFind - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteFlash"> - <summary> - PageWhiteFlash - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteFont"> - <summary> - PageWhiteFont - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteFreehand"> - <summary> - PageWhiteFreehand - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteGear"> - <summary> - PageWhiteGear - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteGet"> - <summary> - PageWhiteGet - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteGo"> - <summary> - PageWhiteGo - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteH"> - <summary> - PageWhiteH - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteHorizontal"> - <summary> - PageWhiteHorizontal - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteKey"> - <summary> - PageWhiteKey - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteLightning"> - <summary> - PageWhiteLightning - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteLink"> - <summary> - PageWhiteLink - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteMagnify"> - <summary> - PageWhiteMagnify - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteMedal"> - <summary> - PageWhiteMedal - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteOffice"> - <summary> - PageWhiteOffice - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePaint"> - <summary> - PageWhitePaint - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePaintbrush"> - <summary> - PageWhitePaintbrush - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePaint2"> - <summary> - PageWhitePaint2 - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePaste"> - <summary> - PageWhitePaste - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePasteTable"> - <summary> - PageWhitePasteTable - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePhp"> - <summary> - PageWhitePhp - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePicture"> - <summary> - PageWhitePicture - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePowerpoint"> - <summary> - PageWhitePowerpoint - </summary> - </member> - <member name="F:FineUI.Icon.PageWhitePut"> - <summary> - PageWhitePut - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteRefresh"> - <summary> - PageWhiteRefresh - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteRuby"> - <summary> - PageWhiteRuby - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteSideBySide"> - <summary> - PageWhiteSideBySide - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteStack"> - <summary> - PageWhiteStack - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteStar"> - <summary> - PageWhiteStar - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteSwoosh"> - <summary> - PageWhiteSwoosh - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteText"> - <summary> - PageWhiteText - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteTextWidth"> - <summary> - PageWhiteTextWidth - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteTux"> - <summary> - PageWhiteTux - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteVector"> - <summary> - PageWhiteVector - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteVisualstudio"> - <summary> - PageWhiteVisualstudio - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteWidth"> - <summary> - PageWhiteWidth - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteWord"> - <summary> - PageWhiteWord - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteWorld"> - <summary> - PageWhiteWorld - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteWrench"> - <summary> - PageWhiteWrench - </summary> - </member> - <member name="F:FineUI.Icon.PageWhiteZip"> - <summary> - PageWhiteZip - </summary> - </member> - <member name="F:FineUI.Icon.PageWord"> - <summary> - PageWord - </summary> - </member> - <member name="F:FineUI.Icon.PageWorld"> - <summary> - PageWorld - </summary> - </member> - <member name="F:FineUI.Icon.Paint"> - <summary> - Paint - </summary> - </member> - <member name="F:FineUI.Icon.Paintbrush"> - <summary> - Paintbrush - </summary> - </member> - <member name="F:FineUI.Icon.PaintbrushColor"> - <summary> - PaintbrushColor - </summary> - </member> - <member name="F:FineUI.Icon.Paintcan"> - <summary> - Paintcan - </summary> - </member> - <member name="F:FineUI.Icon.PaintcanRed"> - <summary> - PaintcanRed - </summary> - </member> - <member name="F:FineUI.Icon.PaintCanBrush"> - <summary> - PaintCanBrush - </summary> - </member> - <member name="F:FineUI.Icon.Palette"> - <summary> - Palette - </summary> - </member> - <member name="F:FineUI.Icon.PastePlain"> - <summary> - PastePlain - </summary> - </member> - <member name="F:FineUI.Icon.PasteWord"> - <summary> - PasteWord - </summary> - </member> - <member name="F:FineUI.Icon.PauseBlue"> - <summary> - PauseBlue - </summary> - </member> - <member name="F:FineUI.Icon.PauseGreen"> - <summary> - PauseGreen - </summary> - </member> - <member name="F:FineUI.Icon.PauseRecord"> - <summary> - PauseRecord - </summary> - </member> - <member name="F:FineUI.Icon.Pencil"> - <summary> - Pencil - </summary> - </member> - <member name="F:FineUI.Icon.PencilAdd"> - <summary> - PencilAdd - </summary> - </member> - <member name="F:FineUI.Icon.PencilDelete"> - <summary> - PencilDelete - </summary> - </member> - <member name="F:FineUI.Icon.PencilGo"> - <summary> - PencilGo - </summary> - </member> - <member name="F:FineUI.Icon.Phone"> - <summary> - Phone - </summary> - </member> - <member name="F:FineUI.Icon.PhoneAdd"> - <summary> - PhoneAdd - </summary> - </member> - <member name="F:FineUI.Icon.PhoneDelete"> - <summary> - PhoneDelete - </summary> - </member> - <member name="F:FineUI.Icon.PhoneEdit"> - <summary> - PhoneEdit - </summary> - </member> - <member name="F:FineUI.Icon.PhoneError"> - <summary> - PhoneError - </summary> - </member> - <member name="F:FineUI.Icon.PhoneGo"> - <summary> - PhoneGo - </summary> - </member> - <member name="F:FineUI.Icon.PhoneKey"> - <summary> - PhoneKey - </summary> - </member> - <member name="F:FineUI.Icon.PhoneLink"> - <summary> - PhoneLink - </summary> - </member> - <member name="F:FineUI.Icon.PhoneSound"> - <summary> - PhoneSound - </summary> - </member> - <member name="F:FineUI.Icon.PhoneStart"> - <summary> - PhoneStart - </summary> - </member> - <member name="F:FineUI.Icon.PhoneStop"> - <summary> - PhoneStop - </summary> - </member> - <member name="F:FineUI.Icon.Photo"> - <summary> - Photo - </summary> - </member> - <member name="F:FineUI.Icon.Photos"> - <summary> - Photos - </summary> - </member> - <member name="F:FineUI.Icon.PhotoAdd"> - <summary> - PhotoAdd - </summary> - </member> - <member name="F:FineUI.Icon.PhotoDelete"> - <summary> - PhotoDelete - </summary> - </member> - <member name="F:FineUI.Icon.PhotoEdit"> - <summary> - PhotoEdit - </summary> - </member> - <member name="F:FineUI.Icon.PhotoLink"> - <summary> - PhotoLink - </summary> - </member> - <member name="F:FineUI.Icon.PhotoPaint"> - <summary> - PhotoPaint - </summary> - </member> - <member name="F:FineUI.Icon.Picture"> - <summary> - Picture - </summary> - </member> - <member name="F:FineUI.Icon.Pictures"> - <summary> - Pictures - </summary> - </member> - <member name="F:FineUI.Icon.PicturesThumbs"> - <summary> - PicturesThumbs - </summary> - </member> - <member name="F:FineUI.Icon.PictureAdd"> - <summary> - PictureAdd - </summary> - </member> - <member name="F:FineUI.Icon.PictureClipboard"> - <summary> - PictureClipboard - </summary> - </member> - <member name="F:FineUI.Icon.PictureDelete"> - <summary> - PictureDelete - </summary> - </member> - <member name="F:FineUI.Icon.PictureEdit"> - <summary> - PictureEdit - </summary> - </member> - <member name="F:FineUI.Icon.PictureEmpty"> - <summary> - PictureEmpty - </summary> - </member> - <member name="F:FineUI.Icon.PictureError"> - <summary> - PictureError - </summary> - </member> - <member name="F:FineUI.Icon.PictureGo"> - <summary> - PictureGo - </summary> - </member> - <member name="F:FineUI.Icon.PictureKey"> - <summary> - PictureKey - </summary> - </member> - <member name="F:FineUI.Icon.PictureLink"> - <summary> - PictureLink - </summary> - </member> - <member name="F:FineUI.Icon.PictureSave"> - <summary> - PictureSave - </summary> - </member> - <member name="F:FineUI.Icon.Pilcrow"> - <summary> - Pilcrow - </summary> - </member> - <member name="F:FineUI.Icon.Pill"> - <summary> - Pill - </summary> - </member> - <member name="F:FineUI.Icon.PillAdd"> - <summary> - PillAdd - </summary> - </member> - <member name="F:FineUI.Icon.PillDelete"> - <summary> - PillDelete - </summary> - </member> - <member name="F:FineUI.Icon.PillError"> - <summary> - PillError - </summary> - </member> - <member name="F:FineUI.Icon.PillGo"> - <summary> - PillGo - </summary> - </member> - <member name="F:FineUI.Icon.PlayBlue"> - <summary> - PlayBlue - </summary> - </member> - <member name="F:FineUI.Icon.PlayGreen"> - <summary> - PlayGreen - </summary> - </member> - <member name="F:FineUI.Icon.Plugin"> - <summary> - Plugin - </summary> - </member> - <member name="F:FineUI.Icon.PluginAdd"> - <summary> - PluginAdd - </summary> - </member> - <member name="F:FineUI.Icon.PluginDelete"> - <summary> - PluginDelete - </summary> - </member> - <member name="F:FineUI.Icon.PluginDisabled"> - <summary> - PluginDisabled - </summary> - </member> - <member name="F:FineUI.Icon.PluginEdit"> - <summary> - PluginEdit - </summary> - </member> - <member name="F:FineUI.Icon.PluginError"> - <summary> - PluginError - </summary> - </member> - <member name="F:FineUI.Icon.PluginGo"> - <summary> - PluginGo - </summary> - </member> - <member name="F:FineUI.Icon.PluginKey"> - <summary> - PluginKey - </summary> - </member> - <member name="F:FineUI.Icon.PluginLink"> - <summary> - PluginLink - </summary> - </member> - <member name="F:FineUI.Icon.PreviousGreen"> - <summary> - PreviousGreen - </summary> - </member> - <member name="F:FineUI.Icon.Printer"> - <summary> - Printer - </summary> - </member> - <member name="F:FineUI.Icon.PrinterAdd"> - <summary> - PrinterAdd - </summary> - </member> - <member name="F:FineUI.Icon.PrinterCancel"> - <summary> - PrinterCancel - </summary> - </member> - <member name="F:FineUI.Icon.PrinterColor"> - <summary> - PrinterColor - </summary> - </member> - <member name="F:FineUI.Icon.PrinterConnect"> - <summary> - PrinterConnect - </summary> - </member> - <member name="F:FineUI.Icon.PrinterDelete"> - <summary> - PrinterDelete - </summary> - </member> - <member name="F:FineUI.Icon.PrinterEmpty"> - <summary> - PrinterEmpty - </summary> - </member> - <member name="F:FineUI.Icon.PrinterError"> - <summary> - PrinterError - </summary> - </member> - <member name="F:FineUI.Icon.PrinterGo"> - <summary> - PrinterGo - </summary> - </member> - <member name="F:FineUI.Icon.PrinterKey"> - <summary> - PrinterKey - </summary> - </member> - <member name="F:FineUI.Icon.PrinterMono"> - <summary> - PrinterMono - </summary> - </member> - <member name="F:FineUI.Icon.PrinterStart"> - <summary> - PrinterStart - </summary> - </member> - <member name="F:FineUI.Icon.PrinterStop"> - <summary> - PrinterStop - </summary> - </member> - <member name="F:FineUI.Icon.Rainbow"> - <summary> - Rainbow - </summary> - </member> - <member name="F:FineUI.Icon.RainbowStar"> - <summary> - RainbowStar - </summary> - </member> - <member name="F:FineUI.Icon.RecordBlue"> - <summary> - RecordBlue - </summary> - </member> - <member name="F:FineUI.Icon.RecordGreen"> - <summary> - RecordGreen - </summary> - </member> - <member name="F:FineUI.Icon.RecordRed"> - <summary> - RecordRed - </summary> - </member> - <member name="F:FineUI.Icon.Reload"> - <summary> - Reload - </summary> - </member> - <member name="F:FineUI.Icon.Report"> - <summary> - Report - </summary> - </member> - <member name="F:FineUI.Icon.ReportAdd"> - <summary> - ReportAdd - </summary> - </member> - <member name="F:FineUI.Icon.ReportDelete"> - <summary> - ReportDelete - </summary> - </member> - <member name="F:FineUI.Icon.ReportDisk"> - <summary> - ReportDisk - </summary> - </member> - <member name="F:FineUI.Icon.ReportEdit"> - <summary> - ReportEdit - </summary> - </member> - <member name="F:FineUI.Icon.ReportGo"> - <summary> - ReportGo - </summary> - </member> - <member name="F:FineUI.Icon.ReportKey"> - <summary> - ReportKey - </summary> - </member> - <member name="F:FineUI.Icon.ReportLink"> - <summary> - ReportLink - </summary> - </member> - <member name="F:FineUI.Icon.ReportMagnify"> - <summary> - ReportMagnify - </summary> - </member> - <member name="F:FineUI.Icon.ReportPicture"> - <summary> - ReportPicture - </summary> - </member> - <member name="F:FineUI.Icon.ReportStart"> - <summary> - ReportStart - </summary> - </member> - <member name="F:FineUI.Icon.ReportStop"> - <summary> - ReportStop - </summary> - </member> - <member name="F:FineUI.Icon.ReportUser"> - <summary> - ReportUser - </summary> - </member> - <member name="F:FineUI.Icon.ReportWord"> - <summary> - ReportWord - </summary> - </member> - <member name="F:FineUI.Icon.ResultsetFirst"> - <summary> - ResultsetFirst - </summary> - </member> - <member name="F:FineUI.Icon.ResultsetLast"> - <summary> - ResultsetLast - </summary> - </member> - <member name="F:FineUI.Icon.ResultsetNext"> - <summary> - ResultsetNext - </summary> - </member> - <member name="F:FineUI.Icon.ResultsetPrevious"> - <summary> - ResultsetPrevious - </summary> - </member> - <member name="F:FineUI.Icon.ReverseBlue"> - <summary> - ReverseBlue - </summary> - </member> - <member name="F:FineUI.Icon.ReverseGreen"> - <summary> - ReverseGreen - </summary> - </member> - <member name="F:FineUI.Icon.RewindBlue"> - <summary> - RewindBlue - </summary> - </member> - <member name="F:FineUI.Icon.RewindGreen"> - <summary> - RewindGreen - </summary> - </member> - <member name="F:FineUI.Icon.Rgb"> - <summary> - Rgb - </summary> - </member> - <member name="F:FineUI.Icon.Rosette"> - <summary> - Rosette - </summary> - </member> - <member name="F:FineUI.Icon.RosetteBlue"> - <summary> - RosetteBlue - </summary> - </member> - <member name="F:FineUI.Icon.Rss"> - <summary> - Rss - </summary> - </member> - <member name="F:FineUI.Icon.RssAdd"> - <summary> - RssAdd - </summary> - </member> - <member name="F:FineUI.Icon.RssDelete"> - <summary> - RssDelete - </summary> - </member> - <member name="F:FineUI.Icon.RssError"> - <summary> - RssError - </summary> - </member> - <member name="F:FineUI.Icon.RssGo"> - <summary> - RssGo - </summary> - </member> - <member name="F:FineUI.Icon.RssValid"> - <summary> - RssValid - </summary> - </member> - <member name="F:FineUI.Icon.Ruby"> - <summary> - Ruby - </summary> - </member> - <member name="F:FineUI.Icon.RubyAdd"> - <summary> - RubyAdd - </summary> - </member> - <member name="F:FineUI.Icon.RubyDelete"> - <summary> - RubyDelete - </summary> - </member> - <member name="F:FineUI.Icon.RubyGear"> - <summary> - RubyGear - </summary> - </member> - <member name="F:FineUI.Icon.RubyGet"> - <summary> - RubyGet - </summary> - </member> - <member name="F:FineUI.Icon.RubyGo"> - <summary> - RubyGo - </summary> - </member> - <member name="F:FineUI.Icon.RubyKey"> - <summary> - RubyKey - </summary> - </member> - <member name="F:FineUI.Icon.RubyLink"> - <summary> - RubyLink - </summary> - </member> - <member name="F:FineUI.Icon.RubyPut"> - <summary> - RubyPut - </summary> - </member> - <member name="F:FineUI.Icon.Script"> - <summary> - Script - </summary> - </member> - <member name="F:FineUI.Icon.ScriptAdd"> - <summary> - ScriptAdd - </summary> - </member> - <member name="F:FineUI.Icon.ScriptCode"> - <summary> - ScriptCode - </summary> - </member> - <member name="F:FineUI.Icon.ScriptCodeOriginal"> - <summary> - ScriptCodeOriginal - </summary> - </member> - <member name="F:FineUI.Icon.ScriptCodeRed"> - <summary> - ScriptCodeRed - </summary> - </member> - <member name="F:FineUI.Icon.ScriptDelete"> - <summary> - ScriptDelete - </summary> - </member> - <member name="F:FineUI.Icon.ScriptEdit"> - <summary> - ScriptEdit - </summary> - </member> - <member name="F:FineUI.Icon.ScriptError"> - <summary> - ScriptError - </summary> - </member> - <member name="F:FineUI.Icon.ScriptGear"> - <summary> - ScriptGear - </summary> - </member> - <member name="F:FineUI.Icon.ScriptGo"> - <summary> - ScriptGo - </summary> - </member> - <member name="F:FineUI.Icon.ScriptKey"> - <summary> - ScriptKey - </summary> - </member> - <member name="F:FineUI.Icon.ScriptLightning"> - <summary> - ScriptLightning - </summary> - </member> - <member name="F:FineUI.Icon.ScriptLink"> - <summary> - ScriptLink - </summary> - </member> - <member name="F:FineUI.Icon.ScriptPalette"> - <summary> - ScriptPalette - </summary> - </member> - <member name="F:FineUI.Icon.ScriptSave"> - <summary> - ScriptSave - </summary> - </member> - <member name="F:FineUI.Icon.ScriptStart"> - <summary> - ScriptStart - </summary> - </member> - <member name="F:FineUI.Icon.ScriptStop"> - <summary> - ScriptStop - </summary> - </member> - <member name="F:FineUI.Icon.Seasons"> - <summary> - Seasons - </summary> - </member> - <member name="F:FineUI.Icon.SectionCollapsed"> - <summary> - SectionCollapsed - </summary> - </member> - <member name="F:FineUI.Icon.SectionExpanded"> - <summary> - SectionExpanded - </summary> - </member> - <member name="F:FineUI.Icon.Server"> - <summary> - Server - </summary> - </member> - <member name="F:FineUI.Icon.ServerAdd"> - <summary> - ServerAdd - </summary> - </member> - <member name="F:FineUI.Icon.ServerChart"> - <summary> - ServerChart - </summary> - </member> - <member name="F:FineUI.Icon.ServerCompressed"> - <summary> - ServerCompressed - </summary> - </member> - <member name="F:FineUI.Icon.ServerConnect"> - <summary> - ServerConnect - </summary> - </member> - <member name="F:FineUI.Icon.ServerDatabase"> - <summary> - ServerDatabase - </summary> - </member> - <member name="F:FineUI.Icon.ServerDelete"> - <summary> - ServerDelete - </summary> - </member> - <member name="F:FineUI.Icon.ServerEdit"> - <summary> - ServerEdit - </summary> - </member> - <member name="F:FineUI.Icon.ServerError"> - <summary> - ServerError - </summary> - </member> - <member name="F:FineUI.Icon.ServerGo"> - <summary> - ServerGo - </summary> - </member> - <member name="F:FineUI.Icon.ServerKey"> - <summary> - ServerKey - </summary> - </member> - <member name="F:FineUI.Icon.ServerLightning"> - <summary> - ServerLightning - </summary> - </member> - <member name="F:FineUI.Icon.ServerLink"> - <summary> - ServerLink - </summary> - </member> - <member name="F:FineUI.Icon.ServerStart"> - <summary> - ServerStart - </summary> - </member> - <member name="F:FineUI.Icon.ServerStop"> - <summary> - ServerStop - </summary> - </member> - <member name="F:FineUI.Icon.ServerUncompressed"> - <summary> - ServerUncompressed - </summary> - </member> - <member name="F:FineUI.Icon.ServerWrench"> - <summary> - ServerWrench - </summary> - </member> - <member name="F:FineUI.Icon.Shading"> - <summary> - Shading - </summary> - </member> - <member name="F:FineUI.Icon.ShapesMany"> - <summary> - ShapesMany - </summary> - </member> - <member name="F:FineUI.Icon.ShapesManySelect"> - <summary> - ShapesManySelect - </summary> - </member> - <member name="F:FineUI.Icon.Shape3d"> - <summary> - Shape3d - </summary> - </member> - <member name="F:FineUI.Icon.ShapeAlignBottom"> - <summary> - ShapeAlignBottom - </summary> - </member> - <member name="F:FineUI.Icon.ShapeAlignCenter"> - <summary> - ShapeAlignCenter - </summary> - </member> - <member name="F:FineUI.Icon.ShapeAlignLeft"> - <summary> - ShapeAlignLeft - </summary> - </member> - <member name="F:FineUI.Icon.ShapeAlignMiddle"> - <summary> - ShapeAlignMiddle - </summary> - </member> - <member name="F:FineUI.Icon.ShapeAlignRight"> - <summary> - ShapeAlignRight - </summary> - </member> - <member name="F:FineUI.Icon.ShapeAlignTop"> - <summary> - ShapeAlignTop - </summary> - </member> - <member name="F:FineUI.Icon.ShapeFlipHorizontal"> - <summary> - ShapeFlipHorizontal - </summary> - </member> - <member name="F:FineUI.Icon.ShapeFlipVertical"> - <summary> - ShapeFlipVertical - </summary> - </member> - <member name="F:FineUI.Icon.ShapeGroup"> - <summary> - ShapeGroup - </summary> - </member> - <member name="F:FineUI.Icon.ShapeHandles"> - <summary> - ShapeHandles - </summary> - </member> - <member name="F:FineUI.Icon.ShapeMoveBack"> - <summary> - ShapeMoveBack - </summary> - </member> - <member name="F:FineUI.Icon.ShapeMoveBackwards"> - <summary> - ShapeMoveBackwards - </summary> - </member> - <member name="F:FineUI.Icon.ShapeMoveForwards"> - <summary> - ShapeMoveForwards - </summary> - </member> - <member name="F:FineUI.Icon.ShapeMoveFront"> - <summary> - ShapeMoveFront - </summary> - </member> - <member name="F:FineUI.Icon.ShapeRotateAnticlockwise"> - <summary> - ShapeRotateAnticlockwise - </summary> - </member> - <member name="F:FineUI.Icon.ShapeRotateClockwise"> - <summary> - ShapeRotateClockwise - </summary> - </member> - <member name="F:FineUI.Icon.ShapeShadeA"> - <summary> - ShapeShadeA - </summary> - </member> - <member name="F:FineUI.Icon.ShapeShadeB"> - <summary> - ShapeShadeB - </summary> - </member> - <member name="F:FineUI.Icon.ShapeShadeC"> - <summary> - ShapeShadeC - </summary> - </member> - <member name="F:FineUI.Icon.ShapeShadow"> - <summary> - ShapeShadow - </summary> - </member> - <member name="F:FineUI.Icon.ShapeShadowToggle"> - <summary> - ShapeShadowToggle - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquare"> - <summary> - ShapeSquare - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareAdd"> - <summary> - ShapeSquareAdd - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareDelete"> - <summary> - ShapeSquareDelete - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareEdit"> - <summary> - ShapeSquareEdit - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareError"> - <summary> - ShapeSquareError - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareGo"> - <summary> - ShapeSquareGo - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareKey"> - <summary> - ShapeSquareKey - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareLink"> - <summary> - ShapeSquareLink - </summary> - </member> - <member name="F:FineUI.Icon.ShapeSquareSelect"> - <summary> - ShapeSquareSelect - </summary> - </member> - <member name="F:FineUI.Icon.ShapeUngroup"> - <summary> - ShapeUngroup - </summary> - </member> - <member name="F:FineUI.Icon.Share"> - <summary> - Share - </summary> - </member> - <member name="F:FineUI.Icon.Shield"> - <summary> - Shield - </summary> - </member> - <member name="F:FineUI.Icon.ShieldAdd"> - <summary> - ShieldAdd - </summary> - </member> - <member name="F:FineUI.Icon.ShieldDelete"> - <summary> - ShieldDelete - </summary> - </member> - <member name="F:FineUI.Icon.ShieldError"> - <summary> - ShieldError - </summary> - </member> - <member name="F:FineUI.Icon.ShieldGo"> - <summary> - ShieldGo - </summary> - </member> - <member name="F:FineUI.Icon.ShieldRainbow"> - <summary> - ShieldRainbow - </summary> - </member> - <member name="F:FineUI.Icon.ShieldSilver"> - <summary> - ShieldSilver - </summary> - </member> - <member name="F:FineUI.Icon.ShieldStart"> - <summary> - ShieldStart - </summary> - </member> - <member name="F:FineUI.Icon.ShieldStop"> - <summary> - ShieldStop - </summary> - </member> - <member name="F:FineUI.Icon.Sitemap"> - <summary> - Sitemap - </summary> - </member> - <member name="F:FineUI.Icon.SitemapColor"> - <summary> - SitemapColor - </summary> - </member> - <member name="F:FineUI.Icon.Smartphone"> - <summary> - Smartphone - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneAdd"> - <summary> - SmartphoneAdd - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneConnect"> - <summary> - SmartphoneConnect - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneDelete"> - <summary> - SmartphoneDelete - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneDisk"> - <summary> - SmartphoneDisk - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneEdit"> - <summary> - SmartphoneEdit - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneError"> - <summary> - SmartphoneError - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneGo"> - <summary> - SmartphoneGo - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneKey"> - <summary> - SmartphoneKey - </summary> - </member> - <member name="F:FineUI.Icon.SmartphoneWrench"> - <summary> - SmartphoneWrench - </summary> - </member> - <member name="F:FineUI.Icon.SortAscending"> - <summary> - SortAscending - </summary> - </member> - <member name="F:FineUI.Icon.SortDescending"> - <summary> - SortDescending - </summary> - </member> - <member name="F:FineUI.Icon.Sound"> - <summary> - Sound - </summary> - </member> - <member name="F:FineUI.Icon.SoundAdd"> - <summary> - SoundAdd - </summary> - </member> - <member name="F:FineUI.Icon.SoundDelete"> - <summary> - SoundDelete - </summary> - </member> - <member name="F:FineUI.Icon.SoundHigh"> - <summary> - SoundHigh - </summary> - </member> - <member name="F:FineUI.Icon.SoundIn"> - <summary> - SoundIn - </summary> - </member> - <member name="F:FineUI.Icon.SoundLow"> - <summary> - SoundLow - </summary> - </member> - <member name="F:FineUI.Icon.SoundMute"> - <summary> - SoundMute - </summary> - </member> - <member name="F:FineUI.Icon.SoundNone"> - <summary> - SoundNone - </summary> - </member> - <member name="F:FineUI.Icon.SoundOut"> - <summary> - SoundOut - </summary> - </member> - <member name="F:FineUI.Icon.Spellcheck"> - <summary> - Spellcheck - </summary> - </member> - <member name="F:FineUI.Icon.Sport8ball"> - <summary> - Sport8ball - </summary> - </member> - <member name="F:FineUI.Icon.SportBasketball"> - <summary> - SportBasketball - </summary> - </member> - <member name="F:FineUI.Icon.SportFootball"> - <summary> - SportFootball - </summary> - </member> - <member name="F:FineUI.Icon.SportGolf"> - <summary> - SportGolf - </summary> - </member> - <member name="F:FineUI.Icon.SportGolfPractice"> - <summary> - SportGolfPractice - </summary> - </member> - <member name="F:FineUI.Icon.SportRaquet"> - <summary> - SportRaquet - </summary> - </member> - <member name="F:FineUI.Icon.SportShuttlecock"> - <summary> - SportShuttlecock - </summary> - </member> - <member name="F:FineUI.Icon.SportSoccer"> - <summary> - SportSoccer - </summary> - </member> - <member name="F:FineUI.Icon.SportTennis"> - <summary> - SportTennis - </summary> - </member> - <member name="F:FineUI.Icon.Star"> - <summary> - Star - </summary> - </member> - <member name="F:FineUI.Icon.StarBronze"> - <summary> - StarBronze - </summary> - </member> - <member name="F:FineUI.Icon.StarBronzeHalfGrey"> - <summary> - StarBronzeHalfGrey - </summary> - </member> - <member name="F:FineUI.Icon.StarGold"> - <summary> - StarGold - </summary> - </member> - <member name="F:FineUI.Icon.StarGoldHalfGrey"> - <summary> - StarGoldHalfGrey - </summary> - </member> - <member name="F:FineUI.Icon.StarGoldHalfSilver"> - <summary> - StarGoldHalfSilver - </summary> - </member> - <member name="F:FineUI.Icon.StarGrey"> - <summary> - StarGrey - </summary> - </member> - <member name="F:FineUI.Icon.StarHalfGrey"> - <summary> - StarHalfGrey - </summary> - </member> - <member name="F:FineUI.Icon.StarSilver"> - <summary> - StarSilver - </summary> - </member> - <member name="F:FineUI.Icon.StatusAway"> - <summary> - StatusAway - </summary> - </member> - <member name="F:FineUI.Icon.StatusBeRightBack"> - <summary> - StatusBeRightBack - </summary> - </member> - <member name="F:FineUI.Icon.StatusBusy"> - <summary> - StatusBusy - </summary> - </member> - <member name="F:FineUI.Icon.StatusInvisible"> - <summary> - StatusInvisible - </summary> - </member> - <member name="F:FineUI.Icon.StatusOffline"> - <summary> - StatusOffline - </summary> - </member> - <member name="F:FineUI.Icon.StatusOnline"> - <summary> - StatusOnline - </summary> - </member> - <member name="F:FineUI.Icon.Stop"> - <summary> - Stop - </summary> - </member> - <member name="F:FineUI.Icon.StopBlue"> - <summary> - StopBlue - </summary> - </member> - <member name="F:FineUI.Icon.StopGreen"> - <summary> - StopGreen - </summary> - </member> - <member name="F:FineUI.Icon.StopRed"> - <summary> - StopRed - </summary> - </member> - <member name="F:FineUI.Icon.Style"> - <summary> - Style - </summary> - </member> - <member name="F:FineUI.Icon.StyleAdd"> - <summary> - StyleAdd - </summary> - </member> - <member name="F:FineUI.Icon.StyleDelete"> - <summary> - StyleDelete - </summary> - </member> - <member name="F:FineUI.Icon.StyleEdit"> - <summary> - StyleEdit - </summary> - </member> - <member name="F:FineUI.Icon.StyleGo"> - <summary> - StyleGo - </summary> - </member> - <member name="F:FineUI.Icon.Sum"> - <summary> - Sum - </summary> - </member> - <member name="F:FineUI.Icon.Tab"> - <summary> - Tab - </summary> - </member> - <member name="F:FineUI.Icon.Table"> - <summary> - Table - </summary> - </member> - <member name="F:FineUI.Icon.TableAdd"> - <summary> - TableAdd - </summary> - </member> - <member name="F:FineUI.Icon.TableCell"> - <summary> - TableCell - </summary> - </member> - <member name="F:FineUI.Icon.TableColumn"> - <summary> - TableColumn - </summary> - </member> - <member name="F:FineUI.Icon.TableColumnAdd"> - <summary> - TableColumnAdd - </summary> - </member> - <member name="F:FineUI.Icon.TableColumnDelete"> - <summary> - TableColumnDelete - </summary> - </member> - <member name="F:FineUI.Icon.TableConnect"> - <summary> - TableConnect - </summary> - </member> - <member name="F:FineUI.Icon.TableDelete"> - <summary> - TableDelete - </summary> - </member> - <member name="F:FineUI.Icon.TableEdit"> - <summary> - TableEdit - </summary> - </member> - <member name="F:FineUI.Icon.TableError"> - <summary> - TableError - </summary> - </member> - <member name="F:FineUI.Icon.TableGear"> - <summary> - TableGear - </summary> - </member> - <member name="F:FineUI.Icon.TableGo"> - <summary> - TableGo - </summary> - </member> - <member name="F:FineUI.Icon.TableKey"> - <summary> - TableKey - </summary> - </member> - <member name="F:FineUI.Icon.TableLightning"> - <summary> - TableLightning - </summary> - </member> - <member name="F:FineUI.Icon.TableLink"> - <summary> - TableLink - </summary> - </member> - <member name="F:FineUI.Icon.TableMultiple"> - <summary> - TableMultiple - </summary> - </member> - <member name="F:FineUI.Icon.TableRefresh"> - <summary> - TableRefresh - </summary> - </member> - <member name="F:FineUI.Icon.TableRelationship"> - <summary> - TableRelationship - </summary> - </member> - <member name="F:FineUI.Icon.TableRow"> - <summary> - TableRow - </summary> - </member> - <member name="F:FineUI.Icon.TableRowDelete"> - <summary> - TableRowDelete - </summary> - </member> - <member name="F:FineUI.Icon.TableRowInsert"> - <summary> - TableRowInsert - </summary> - </member> - <member name="F:FineUI.Icon.TableSave"> - <summary> - TableSave - </summary> - </member> - <member name="F:FineUI.Icon.TableSort"> - <summary> - TableSort - </summary> - </member> - <member name="F:FineUI.Icon.TabAdd"> - <summary> - TabAdd - </summary> - </member> - <member name="F:FineUI.Icon.TabBlue"> - <summary> - TabBlue - </summary> - </member> - <member name="F:FineUI.Icon.TabDelete"> - <summary> - TabDelete - </summary> - </member> - <member name="F:FineUI.Icon.TabEdit"> - <summary> - TabEdit - </summary> - </member> - <member name="F:FineUI.Icon.TabGo"> - <summary> - TabGo - </summary> - </member> - <member name="F:FineUI.Icon.TabGreen"> - <summary> - TabGreen - </summary> - </member> - <member name="F:FineUI.Icon.TabRed"> - <summary> - TabRed - </summary> - </member> - <member name="F:FineUI.Icon.Tag"> - <summary> - Tag - </summary> - </member> - <member name="F:FineUI.Icon.TagsGrey"> - <summary> - TagsGrey - </summary> - </member> - <member name="F:FineUI.Icon.TagsRed"> - <summary> - TagsRed - </summary> - </member> - <member name="F:FineUI.Icon.TagBlue"> - <summary> - TagBlue - </summary> - </member> - <member name="F:FineUI.Icon.TagBlueAdd"> - <summary> - TagBlueAdd - </summary> - </member> - <member name="F:FineUI.Icon.TagBlueDelete"> - <summary> - TagBlueDelete - </summary> - </member> - <member name="F:FineUI.Icon.TagBlueEdit"> - <summary> - TagBlueEdit - </summary> - </member> - <member name="F:FineUI.Icon.TagGreen"> - <summary> - TagGreen - </summary> - </member> - <member name="F:FineUI.Icon.TagOrange"> - <summary> - TagOrange - </summary> - </member> - <member name="F:FineUI.Icon.TagPink"> - <summary> - TagPink - </summary> - </member> - <member name="F:FineUI.Icon.TagPurple"> - <summary> - TagPurple - </summary> - </member> - <member name="F:FineUI.Icon.TagRed"> - <summary> - TagRed - </summary> - </member> - <member name="F:FineUI.Icon.TagYellow"> - <summary> - TagYellow - </summary> - </member> - <member name="F:FineUI.Icon.Telephone"> - <summary> - Telephone - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneAdd"> - <summary> - TelephoneAdd - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneDelete"> - <summary> - TelephoneDelete - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneEdit"> - <summary> - TelephoneEdit - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneError"> - <summary> - TelephoneError - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneGo"> - <summary> - TelephoneGo - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneKey"> - <summary> - TelephoneKey - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneLink"> - <summary> - TelephoneLink - </summary> - </member> - <member name="F:FineUI.Icon.TelephoneRed"> - <summary> - TelephoneRed - </summary> - </member> - <member name="F:FineUI.Icon.Television"> - <summary> - Television - </summary> - </member> - <member name="F:FineUI.Icon.TelevisionAdd"> - <summary> - TelevisionAdd - </summary> - </member> - <member name="F:FineUI.Icon.TelevisionDelete"> - <summary> - TelevisionDelete - </summary> - </member> - <member name="F:FineUI.Icon.TelevisionIn"> - <summary> - TelevisionIn - </summary> - </member> - <member name="F:FineUI.Icon.TelevisionOff"> - <summary> - TelevisionOff - </summary> - </member> - <member name="F:FineUI.Icon.TelevisionOut"> - <summary> - TelevisionOut - </summary> - </member> - <member name="F:FineUI.Icon.TelevisionStar"> - <summary> - TelevisionStar - </summary> - </member> - <member name="F:FineUI.Icon.Textfield"> - <summary> - Textfield - </summary> - </member> - <member name="F:FineUI.Icon.TextfieldAdd"> - <summary> - TextfieldAdd - </summary> - </member> - <member name="F:FineUI.Icon.TextfieldDelete"> - <summary> - TextfieldDelete - </summary> - </member> - <member name="F:FineUI.Icon.TextfieldKey"> - <summary> - TextfieldKey - </summary> - </member> - <member name="F:FineUI.Icon.TextfieldRename"> - <summary> - TextfieldRename - </summary> - </member> - <member name="F:FineUI.Icon.TextAb"> - <summary> - TextAb - </summary> - </member> - <member name="F:FineUI.Icon.TextAlignCenter"> - <summary> - TextAlignCenter - </summary> - </member> - <member name="F:FineUI.Icon.TextAlignJustify"> - <summary> - TextAlignJustify - </summary> - </member> - <member name="F:FineUI.Icon.TextAlignLeft"> - <summary> - TextAlignLeft - </summary> - </member> - <member name="F:FineUI.Icon.TextAlignRight"> - <summary> - TextAlignRight - </summary> - </member> - <member name="F:FineUI.Icon.TextAllcaps"> - <summary> - TextAllcaps - </summary> - </member> - <member name="F:FineUI.Icon.TextBold"> - <summary> - TextBold - </summary> - </member> - <member name="F:FineUI.Icon.TextColumns"> - <summary> - TextColumns - </summary> - </member> - <member name="F:FineUI.Icon.TextComplete"> - <summary> - TextComplete - </summary> - </member> - <member name="F:FineUI.Icon.TextDirection"> - <summary> - TextDirection - </summary> - </member> - <member name="F:FineUI.Icon.TextDoubleUnderline"> - <summary> - TextDoubleUnderline - </summary> - </member> - <member name="F:FineUI.Icon.TextDropcaps"> - <summary> - TextDropcaps - </summary> - </member> - <member name="F:FineUI.Icon.TextFit"> - <summary> - TextFit - </summary> - </member> - <member name="F:FineUI.Icon.TextFlip"> - <summary> - TextFlip - </summary> - </member> - <member name="F:FineUI.Icon.TextFontDefault"> - <summary> - TextFontDefault - </summary> - </member> - <member name="F:FineUI.Icon.TextHeading1"> - <summary> - TextHeading1 - </summary> - </member> - <member name="F:FineUI.Icon.TextHeading2"> - <summary> - TextHeading2 - </summary> - </member> - <member name="F:FineUI.Icon.TextHeading3"> - <summary> - TextHeading3 - </summary> - </member> - <member name="F:FineUI.Icon.TextHeading4"> - <summary> - TextHeading4 - </summary> - </member> - <member name="F:FineUI.Icon.TextHeading5"> - <summary> - TextHeading5 - </summary> - </member> - <member name="F:FineUI.Icon.TextHeading6"> - <summary> - TextHeading6 - </summary> - </member> - <member name="F:FineUI.Icon.TextHorizontalrule"> - <summary> - TextHorizontalrule - </summary> - </member> - <member name="F:FineUI.Icon.TextIndent"> - <summary> - TextIndent - </summary> - </member> - <member name="F:FineUI.Icon.TextIndentRemove"> - <summary> - TextIndentRemove - </summary> - </member> - <member name="F:FineUI.Icon.TextInverse"> - <summary> - TextInverse - </summary> - </member> - <member name="F:FineUI.Icon.TextItalic"> - <summary> - TextItalic - </summary> - </member> - <member name="F:FineUI.Icon.TextKerning"> - <summary> - TextKerning - </summary> - </member> - <member name="F:FineUI.Icon.TextLeftToRight"> - <summary> - TextLeftToRight - </summary> - </member> - <member name="F:FineUI.Icon.TextLetterspacing"> - <summary> - TextLetterspacing - </summary> - </member> - <member name="F:FineUI.Icon.TextLetterOmega"> - <summary> - TextLetterOmega - </summary> - </member> - <member name="F:FineUI.Icon.TextLinespacing"> - <summary> - TextLinespacing - </summary> - </member> - <member name="F:FineUI.Icon.TextListBullets"> - <summary> - TextListBullets - </summary> - </member> - <member name="F:FineUI.Icon.TextListNumbers"> - <summary> - TextListNumbers - </summary> - </member> - <member name="F:FineUI.Icon.TextLowercase"> - <summary> - TextLowercase - </summary> - </member> - <member name="F:FineUI.Icon.TextLowercaseA"> - <summary> - TextLowercaseA - </summary> - </member> - <member name="F:FineUI.Icon.TextMirror"> - <summary> - TextMirror - </summary> - </member> - <member name="F:FineUI.Icon.TextPaddingBottom"> - <summary> - TextPaddingBottom - </summary> - </member> - <member name="F:FineUI.Icon.TextPaddingLeft"> - <summary> - TextPaddingLeft - </summary> - </member> - <member name="F:FineUI.Icon.TextPaddingRight"> - <summary> - TextPaddingRight - </summary> - </member> - <member name="F:FineUI.Icon.TextPaddingTop"> - <summary> - TextPaddingTop - </summary> - </member> - <member name="F:FineUI.Icon.TextReplace"> - <summary> - TextReplace - </summary> - </member> - <member name="F:FineUI.Icon.TextRightToLeft"> - <summary> - TextRightToLeft - </summary> - </member> - <member name="F:FineUI.Icon.TextRotate0"> - <summary> - TextRotate0 - </summary> - </member> - <member name="F:FineUI.Icon.TextRotate180"> - <summary> - TextRotate180 - </summary> - </member> - <member name="F:FineUI.Icon.TextRotate270"> - <summary> - TextRotate270 - </summary> - </member> - <member name="F:FineUI.Icon.TextRotate90"> - <summary> - TextRotate90 - </summary> - </member> - <member name="F:FineUI.Icon.TextRuler"> - <summary> - TextRuler - </summary> - </member> - <member name="F:FineUI.Icon.TextShading"> - <summary> - TextShading - </summary> - </member> - <member name="F:FineUI.Icon.TextSignature"> - <summary> - TextSignature - </summary> - </member> - <member name="F:FineUI.Icon.TextSmallcaps"> - <summary> - TextSmallcaps - </summary> - </member> - <member name="F:FineUI.Icon.TextSpelling"> - <summary> - TextSpelling - </summary> - </member> - <member name="F:FineUI.Icon.TextStrikethrough"> - <summary> - TextStrikethrough - </summary> - </member> - <member name="F:FineUI.Icon.TextSubscript"> - <summary> - TextSubscript - </summary> - </member> - <member name="F:FineUI.Icon.TextSuperscript"> - <summary> - TextSuperscript - </summary> - </member> - <member name="F:FineUI.Icon.TextTab"> - <summary> - TextTab - </summary> - </member> - <member name="F:FineUI.Icon.TextUnderline"> - <summary> - TextUnderline - </summary> - </member> - <member name="F:FineUI.Icon.TextUppercase"> - <summary> - TextUppercase - </summary> - </member> - <member name="F:FineUI.Icon.Theme"> - <summary> - Theme - </summary> - </member> - <member name="F:FineUI.Icon.ThumbDown"> - <summary> - ThumbDown - </summary> - </member> - <member name="F:FineUI.Icon.ThumbUp"> - <summary> - ThumbUp - </summary> - </member> - <member name="F:FineUI.Icon.Tick"> - <summary> - Tick - </summary> - </member> - <member name="F:FineUI.Icon.Time"> - <summary> - Time - </summary> - </member> - <member name="F:FineUI.Icon.TimelineMarker"> - <summary> - TimelineMarker - </summary> - </member> - <member name="F:FineUI.Icon.TimeAdd"> - <summary> - TimeAdd - </summary> - </member> - <member name="F:FineUI.Icon.TimeDelete"> - <summary> - TimeDelete - </summary> - </member> - <member name="F:FineUI.Icon.TimeGo"> - <summary> - TimeGo - </summary> - </member> - <member name="F:FineUI.Icon.TimeGreen"> - <summary> - TimeGreen - </summary> - </member> - <member name="F:FineUI.Icon.TimeRed"> - <summary> - TimeRed - </summary> - </member> - <member name="F:FineUI.Icon.Transmit"> - <summary> - Transmit - </summary> - </member> - <member name="F:FineUI.Icon.TransmitAdd"> - <summary> - TransmitAdd - </summary> - </member> - <member name="F:FineUI.Icon.TransmitBlue"> - <summary> - TransmitBlue - </summary> - </member> - <member name="F:FineUI.Icon.TransmitDelete"> - <summary> - TransmitDelete - </summary> - </member> - <member name="F:FineUI.Icon.TransmitEdit"> - <summary> - TransmitEdit - </summary> - </member> - <member name="F:FineUI.Icon.TransmitError"> - <summary> - TransmitError - </summary> - </member> - <member name="F:FineUI.Icon.TransmitGo"> - <summary> - TransmitGo - </summary> - </member> - <member name="F:FineUI.Icon.TransmitRed"> - <summary> - TransmitRed - </summary> - </member> - <member name="F:FineUI.Icon.Tux"> - <summary> - Tux - </summary> - </member> - <member name="F:FineUI.Icon.User"> - <summary> - User - </summary> - </member> - <member name="F:FineUI.Icon.UserAdd"> - <summary> - UserAdd - </summary> - </member> - <member name="F:FineUI.Icon.UserAlert"> - <summary> - UserAlert - </summary> - </member> - <member name="F:FineUI.Icon.UserB"> - <summary> - UserB - </summary> - </member> - <member name="F:FineUI.Icon.UserBrown"> - <summary> - UserBrown - </summary> - </member> - <member name="F:FineUI.Icon.UserComment"> - <summary> - UserComment - </summary> - </member> - <member name="F:FineUI.Icon.UserCross"> - <summary> - UserCross - </summary> - </member> - <member name="F:FineUI.Icon.UserDelete"> - <summary> - UserDelete - </summary> - </member> - <member name="F:FineUI.Icon.UserEarth"> - <summary> - UserEarth - </summary> - </member> - <member name="F:FineUI.Icon.UserEdit"> - <summary> - UserEdit - </summary> - </member> - <member name="F:FineUI.Icon.UserFemale"> - <summary> - UserFemale - </summary> - </member> - <member name="F:FineUI.Icon.UserGo"> - <summary> - UserGo - </summary> - </member> - <member name="F:FineUI.Icon.UserGray"> - <summary> - UserGray - </summary> - </member> - <member name="F:FineUI.Icon.UserGrayCool"> - <summary> - UserGrayCool - </summary> - </member> - <member name="F:FineUI.Icon.UserGreen"> - <summary> - UserGreen - </summary> - </member> - <member name="F:FineUI.Icon.UserHome"> - <summary> - UserHome - </summary> - </member> - <member name="F:FineUI.Icon.UserKey"> - <summary> - UserKey - </summary> - </member> - <member name="F:FineUI.Icon.UserMagnify"> - <summary> - UserMagnify - </summary> - </member> - <member name="F:FineUI.Icon.UserMature"> - <summary> - UserMature - </summary> - </member> - <member name="F:FineUI.Icon.UserOrange"> - <summary> - UserOrange - </summary> - </member> - <member name="F:FineUI.Icon.UserRed"> - <summary> - UserRed - </summary> - </member> - <member name="F:FineUI.Icon.UserStar"> - <summary> - UserStar - </summary> - </member> - <member name="F:FineUI.Icon.UserSuit"> - <summary> - UserSuit - </summary> - </member> - <member name="F:FineUI.Icon.UserSuitBlack"> - <summary> - UserSuitBlack - </summary> - </member> - <member name="F:FineUI.Icon.UserTick"> - <summary> - UserTick - </summary> - </member> - <member name="F:FineUI.Icon.Vcard"> - <summary> - Vcard - </summary> - </member> - <member name="F:FineUI.Icon.VcardAdd"> - <summary> - VcardAdd - </summary> - </member> - <member name="F:FineUI.Icon.VcardDelete"> - <summary> - VcardDelete - </summary> - </member> - <member name="F:FineUI.Icon.VcardEdit"> - <summary> - VcardEdit - </summary> - </member> - <member name="F:FineUI.Icon.VcardKey"> - <summary> - VcardKey - </summary> - </member> - <member name="F:FineUI.Icon.Vector"> - <summary> - Vector - </summary> - </member> - <member name="F:FineUI.Icon.VectorAdd"> - <summary> - VectorAdd - </summary> - </member> - <member name="F:FineUI.Icon.VectorDelete"> - <summary> - VectorDelete - </summary> - </member> - <member name="F:FineUI.Icon.VectorKey"> - <summary> - VectorKey - </summary> - </member> - <member name="F:FineUI.Icon.Wand"> - <summary> - Wand - </summary> - </member> - <member name="F:FineUI.Icon.WeatherCloud"> - <summary> - WeatherCloud - </summary> - </member> - <member name="F:FineUI.Icon.WeatherClouds"> - <summary> - WeatherClouds - </summary> - </member> - <member name="F:FineUI.Icon.WeatherCloudy"> - <summary> - WeatherCloudy - </summary> - </member> - <member name="F:FineUI.Icon.WeatherCloudyRain"> - <summary> - WeatherCloudyRain - </summary> - </member> - <member name="F:FineUI.Icon.WeatherLightning"> - <summary> - WeatherLightning - </summary> - </member> - <member name="F:FineUI.Icon.WeatherRain"> - <summary> - WeatherRain - </summary> - </member> - <member name="F:FineUI.Icon.WeatherSnow"> - <summary> - WeatherSnow - </summary> - </member> - <member name="F:FineUI.Icon.WeatherSun"> - <summary> - WeatherSun - </summary> - </member> - <member name="F:FineUI.Icon.Webcam"> - <summary> - Webcam - </summary> - </member> - <member name="F:FineUI.Icon.WebcamAdd"> - <summary> - WebcamAdd - </summary> - </member> - <member name="F:FineUI.Icon.WebcamConnect"> - <summary> - WebcamConnect - </summary> - </member> - <member name="F:FineUI.Icon.WebcamDelete"> - <summary> - WebcamDelete - </summary> - </member> - <member name="F:FineUI.Icon.WebcamError"> - <summary> - WebcamError - </summary> - </member> - <member name="F:FineUI.Icon.WebcamStart"> - <summary> - WebcamStart - </summary> - </member> - <member name="F:FineUI.Icon.WebcamStop"> - <summary> - WebcamStop - </summary> - </member> - <member name="F:FineUI.Icon.World"> - <summary> - World - </summary> - </member> - <member name="F:FineUI.Icon.WorldAdd"> - <summary> - WorldAdd - </summary> - </member> - <member name="F:FineUI.Icon.WorldConnect"> - <summary> - WorldConnect - </summary> - </member> - <member name="F:FineUI.Icon.WorldDawn"> - <summary> - WorldDawn - </summary> - </member> - <member name="F:FineUI.Icon.WorldDelete"> - <summary> - WorldDelete - </summary> - </member> - <member name="F:FineUI.Icon.WorldEdit"> - <summary> - WorldEdit - </summary> - </member> - <member name="F:FineUI.Icon.WorldGo"> - <summary> - WorldGo - </summary> - </member> - <member name="F:FineUI.Icon.WorldKey"> - <summary> - WorldKey - </summary> - </member> - <member name="F:FineUI.Icon.WorldLink"> - <summary> - WorldLink - </summary> - </member> - <member name="F:FineUI.Icon.WorldNight"> - <summary> - WorldNight - </summary> - </member> - <member name="F:FineUI.Icon.WorldOrbit"> - <summary> - WorldOrbit - </summary> - </member> - <member name="F:FineUI.Icon.Wrench"> - <summary> - Wrench - </summary> - </member> - <member name="F:FineUI.Icon.WrenchOrange"> - <summary> - WrenchOrange - </summary> - </member> - <member name="F:FineUI.Icon.Xhtml"> - <summary> - Xhtml - </summary> - </member> - <member name="F:FineUI.Icon.XhtmlAdd"> - <summary> - XhtmlAdd - </summary> - </member> - <member name="F:FineUI.Icon.XhtmlDelete"> - <summary> - XhtmlDelete - </summary> - </member> - <member name="F:FineUI.Icon.XhtmlError"> - <summary> - XhtmlError - </summary> - </member> - <member name="F:FineUI.Icon.XhtmlGo"> - <summary> - XhtmlGo - </summary> - </member> - <member name="F:FineUI.Icon.XhtmlValid"> - <summary> - XhtmlValid - </summary> - </member> - <member name="F:FineUI.Icon.Zoom"> - <summary> - Zoom - </summary> - </member> - <member name="F:FineUI.Icon.ZoomIn"> - <summary> - ZoomIn - </summary> - </member> - <member name="F:FineUI.Icon.ZoomOut"> - <summary> - ZoomOut - </summary> - </member> - <member name="F:FineUI.Icon.SystemClose"> - <summary> - SystemClose - </summary> - </member> - <member name="F:FineUI.Icon.SystemNew"> - <summary> - SystemNew - </summary> - </member> - <member name="F:FineUI.Icon.SystemSave"> - <summary> - SystemSave - </summary> - </member> - <member name="F:FineUI.Icon.SystemSaveClose"> - <summary> - SystemSaveClose - </summary> - </member> - <member name="F:FineUI.Icon.SystemSaveNew"> - <summary> - SystemSaveNew - </summary> - </member> - <member name="F:FineUI.Icon.SystemSearch"> - <summary> - SystemSearch - </summary> - </member> - <member name="T:FineUI.IconHelper"> - <summary> - 预定义图标名称 - </summary> - </member> - <member name="M:FineUI.IconHelper.GetName(FineUI.Icon)"> - <summary> - 获取图标名称 - </summary> - <param name="type"></param> - <returns></returns> - </member> - <member name="M:FineUI.IconHelper.GetIconUrl(FineUI.Icon)"> - <summary> - 获得图标的服务器地址 - </summary> - <param name="icon">图标</param> - <returns>图标的服务器地址</returns> - </member> - <member name="M:FineUI.IconHelper.GetResolvedIconUrl(FineUI.Icon)"> - <summary> - 获取客户端可用的图标URL地址 - </summary> - <param name="icon">图标</param> - <returns>URL地址</returns> - </member> - <member name="M:FineUI.IconHelper.GetResolvedIconUrl(FineUI.Icon,System.String)"> - <summary> - 获取客户端可用的图标URL地址 - </summary> - <param name="icon">图标</param> - <param name="iconUrl">图标地址</param> - <returns>URL地址</returns> - </member> - <member name="M:FineUI.IconHelper.String2Icon(System.String,System.Boolean)"> - <summary> - 将图标字符串转换为图标 - </summary> - <param name="text">图标字符串</param> - <param name="ignoreCase">是否忽略大小写</param> - <returns>图标</returns> - </member> - <member name="M:FineUI.IconHelper.Icon2String(FineUI.Icon)"> - <summary> - 将图标转换为图标字符串 - </summary> - <param name="type">图标</param> - <returns>图标字符串</returns> - </member> - <member name="T:FineUI.Theme"> - <summary> - 样式 - </summary> - </member> - <member name="F:FineUI.Theme.Blue"> - <summary> - 蓝色 - </summary> - </member> - <member name="F:FineUI.Theme.Gray"> - <summary> - 银灰色 - </summary> - </member> - <member name="F:FineUI.Theme.Access"> - <summary> - 高对比度 - </summary> - </member> - <member name="F:FineUI.Theme.Neptune"> - <summary> - 海王星(默认值) - </summary> - </member> - <member name="T:FineUI.ThemeHelper"> - <summary> - 样式的类型名称 - </summary> - </member> - <member name="T:FineUI.Language"> - <summary> - 语言 - </summary> - </member> - <member name="F:FineUI.Language.EN"> - <summary> - 英文 - </summary> - </member> - <member name="F:FineUI.Language.ZH_CN"> - <summary> - 中文(默认值) - </summary> - </member> - <member name="F:FineUI.Language.ZH_TW"> - <summary> - 中文(台湾) - </summary> - </member> - <member name="F:FineUI.Language.PT_BR"> - <summary> - 葡萄牙文(巴西) - </summary> - </member> - <member name="F:FineUI.Language.TR"> - <summary> - 土耳其文 - </summary> - </member> - <member name="F:FineUI.Language.RU"> - <summary> - 俄文 - </summary> - </member> - <member name="T:FineUI.LanguageHelper"> - <summary> - 语言的类型名称 - </summary> - </member> - <member name="T:FineUI.Operator"> - <summary> - 操作符(用于表单控件的客户端验证) - </summary> - </member> - <member name="F:FineUI.Operator.Equal"> - <summary> - 等于(默认值) - </summary> - </member> - <member name="F:FineUI.Operator.GreaterThan"> - <summary> - 大于 - </summary> - </member> - <member name="F:FineUI.Operator.GreaterThanEqual"> - <summary> - 大于等于 - </summary> - </member> - <member name="F:FineUI.Operator.LessThan"> - <summary> - 小于 - </summary> - </member> - <member name="F:FineUI.Operator.LessThanEqual"> - <summary> - 小于等于 - </summary> - </member> - <member name="F:FineUI.Operator.NotEqual"> - <summary> - 不等于 - </summary> - </member> - <member name="T:FineUI.OperatorHelper"> - <summary> - 操作符名称 - </summary> - </member> - <member name="T:FineUI.TriggerIcon"> - <summary> - 触发器输入框右侧图标的类型 - </summary> - </member> - <member name="F:FineUI.TriggerIcon.None"> - <summary> - 无(默认值) - </summary> - </member> - <member name="F:FineUI.TriggerIcon.Search"> - <summary> - 搜索图标 - </summary> - </member> - <member name="F:FineUI.TriggerIcon.Clear"> - <summary> - 清空图标 - </summary> - </member> - <member name="F:FineUI.TriggerIcon.Date"> - <summary> - 日期图标 - </summary> - </member> - <member name="T:FineUI.TriggerIconHelper"> - <summary> - 系统图标名称 - </summary> - </member> - <member name="T:FineUI.WindowPosition"> - <summary> - 窗体的初始显示位置 - </summary> - </member> - <member name="F:FineUI.WindowPosition.Center"> - <summary> - 页面的中部 - </summary> - </member> - <member name="F:FineUI.WindowPosition.GoldenSection"> - <summary> - 页面的黄金分割点处(默认值) - </summary> - </member> - <member name="T:FineUI.ToolbarPosition"> - <summary> - 工具条的位置 - </summary> - </member> - <member name="F:FineUI.ToolbarPosition.Top"> - <summary> - 顶部(默认值) - </summary> - </member> - <member name="F:FineUI.ToolbarPosition.Bottom"> - <summary> - 底部 - </summary> - </member> - <member name="F:FineUI.ToolbarPosition.Footer"> - <summary> - 页脚 - </summary> - </member> - <member name="F:FineUI.ToolbarPosition.Left"> - <summary> - 左侧 - </summary> - </member> - <member name="F:FineUI.ToolbarPosition.Right"> - <summary> - 右侧 - </summary> - </member> - <member name="F:FineUI.ToolbarPosition.Buttons"> - <summary> - 底部按钮 - </summary> - </member> - <member name="T:FineUI.ToolbarPositionHelper"> - <summary> - 工具条的位置名称 - </summary> - </member> - <member name="T:FineUI.ButtonType"> - <summary> - 按钮类型 - </summary> - </member> - <member name="F:FineUI.ButtonType.Button"> - <summary> - 普通按钮(默认值) - </summary> - </member> - <member name="F:FineUI.ButtonType.Submit"> - <summary> - 提交按钮(会为生成的input标签添加type="submit") - </summary> - </member> - <member name="F:FineUI.ButtonType.Reset"> - <summary> - 重置按钮(会为生成的input标签添加type="reset") - </summary> - </member> - <member name="T:FineUI.ButtonTypeName"> - <summary> - 按钮类型名称 - </summary> - </member> - <member name="T:FineUI.Target"> - <summary> - 窗体以及对话框的显示位置 - </summary> - </member> - <member name="F:FineUI.Target.Self"> - <summary> - 当前页面(默认值) - </summary> - </member> - <member name="F:FineUI.Target.Parent"> - <summary> - 父页面 - </summary> - </member> - <member name="F:FineUI.Target.Top"> - <summary> - 最外层页面 - </summary> - </member> - <member name="T:FineUI.TargetHelper"> - <summary> - Alert,Confirm,Window显示的位置 - </summary> - </member> - <member name="M:FineUI.TargetHelper.GetScriptName(FineUI.Target)"> - <summary> - Get target name used inside JavaScript code. - </summary> - <param name="type"></param> - <returns></returns> - </member> - <member name="T:FineUI.RegexPattern"> - <summary> - 正则表达式常用类型(用于表单控件的客户端验证) - </summary> - </member> - <member name="F:FineUI.RegexPattern.None"> - <summary> - 无(默认值) - </summary> - </member> - <member name="F:FineUI.RegexPattern.NUMBER"> - <summary> - 数字 - </summary> - </member> - <member name="F:FineUI.RegexPattern.ALPHA"> - <summary> - 字母 - </summary> - </member> - <member name="F:FineUI.RegexPattern.ALPHA_NUMERIC"> - <summary> - 字母数字 - </summary> - </member> - <member name="F:FineUI.RegexPattern.ALPHA_UNDERLINE"> - <summary> - 字母下划线 - </summary> - </member> - <member name="F:FineUI.RegexPattern.ALPHA_NUMERIC_UNDERLINE"> - <summary> - 字母数字下划线 - </summary> - </member> - <member name="F:FineUI.RegexPattern.ALPHA_LOWER_CASE"> - <summary> - 小写字母 - </summary> - </member> - <member name="F:FineUI.RegexPattern.ALPHA_UPPER_CASE"> - <summary> - 大写字母 - </summary> - </member> - <member name="F:FineUI.RegexPattern.EMAIL"> - <summary> - 电子邮箱 - </summary> - </member> - <member name="F:FineUI.RegexPattern.URL"> - <summary> - 网址 - </summary> - </member> - <member name="F:FineUI.RegexPattern.POSTAL_CODE"> - <summary> - 邮政编码(中华人民共和国) - </summary> - </member> - <member name="F:FineUI.RegexPattern.IP_ADDRESS"> - <summary> - IP地址 - </summary> - </member> - <member name="F:FineUI.RegexPattern.IDENTITY_CARD"> - <summary> - 身份证(中华人民共和国) - </summary> - </member> - <member name="T:FineUI.RegexPatternHelper"> - <summary> - 正则表达式常用类型 内容 - </summary> - </member> - <member name="T:FineUI.CloseAction"> - <summary> - 关闭窗体的动作 - </summary> - </member> - <member name="F:FineUI.CloseAction.Hide"> - <summary> - 关闭窗体(默认值) - </summary> - </member> - <member name="F:FineUI.CloseAction.HideRefresh"> - <summary> - 关闭窗体后刷新父页面 - </summary> - </member> - <member name="F:FineUI.CloseAction.HidePostBack"> - <summary> - 关闭窗体后会发父页面(需要注册OnClose事件处理函数) - </summary> - </member> - <member name="T:FineUI.CloseActionName"> - <summary> - 关闭窗体的动作 - </summary> - </member> - <member name="T:FineUI.Position"> - <summary> - Region控件所在RegionPanel中的位置 - </summary> - </member> - <member name="F:FineUI.Position.Top"> - <summary> - 上方 - </summary> - </member> - <member name="F:FineUI.Position.Bottom"> - <summary> - 底部 - </summary> - </member> - <member name="F:FineUI.Position.Left"> - <summary> - 左侧 - </summary> - </member> - <member name="F:FineUI.Position.Right"> - <summary> - 右侧 - </summary> - </member> - <member name="F:FineUI.Position.Center"> - <summary> - 中部(默认值) - </summary> - </member> - <member name="T:FineUI.PositionHelper"> - <summary> - 布局类型名称 - </summary> - </member> - <member name="T:FineUI.TabPosition"> - <summary> - Tab标签的显示位置 - </summary> - </member> - <member name="F:FineUI.TabPosition.Top"> - <summary> - 顶部(默认值) - </summary> - </member> - <member name="F:FineUI.TabPosition.Bottom"> - <summary> - 底部 - </summary> - </member> - <member name="F:FineUI.TabPosition.Left"> - <summary> - 左侧 - </summary> - </member> - <member name="F:FineUI.TabPosition.Right"> - <summary> - 右侧 - </summary> - </member> - <member name="T:FineUI.TabPositionHelper"> - <summary> - Tab显示的位置名称 - </summary> - </member> - <member name="T:FineUI.IconAlign"> - <summary> - 按钮上图标的摆放位置 - </summary> - </member> - <member name="F:FineUI.IconAlign.Top"> - <summary> - 靠上 - </summary> - </member> - <member name="F:FineUI.IconAlign.Right"> - <summary> - 靠右 - </summary> - </member> - <member name="F:FineUI.IconAlign.Bottom"> - <summary> - 靠下 - </summary> - </member> - <member name="F:FineUI.IconAlign.Left"> - <summary> - 靠左(默认值) - </summary> - </member> - <member name="T:FineUI.IconAlignHelper"> - <summary> - 图标摆放位置的名称 - </summary> - </member> - <member name="T:FineUI.ButtonSize"> - <summary> - 按钮的大小 - </summary> - </member> - <member name="F:FineUI.ButtonSize.Small"> - <summary> - 小尺寸(默认值) - </summary> - </member> - <member name="F:FineUI.ButtonSize.Medium"> - <summary> - 中等尺寸 - </summary> - </member> - <member name="F:FineUI.ButtonSize.Large"> - <summary> - 大尺寸 - </summary> - </member> - <member name="T:FineUI.ButtonSizeName"> - <summary> - 按钮的大小名称 - </summary> - </member> - <member name="T:FineUI.BoxLayoutAlign"> - <summary> - 在HBox布局或者VBox布局中,用来控制容器子控件的位置 - </summary> - </member> - <member name="F:FineUI.BoxLayoutAlign.Top"> - <summary> - 所有子控件位于父容器的开始位置(废弃,请使用Start代替) - </summary> - </member> - <member name="F:FineUI.BoxLayoutAlign.Middle"> - <summary> - 所有子控件位于父容器的中间位置(废弃,请使用Center代替) - </summary> - </member> - <member name="F:FineUI.BoxLayoutAlign.Start"> - <summary> - 所有子控件位于父容器的开始位置(默认值) - </summary> - </member> - <member name="F:FineUI.BoxLayoutAlign.Center"> - <summary> - 所有子控件位于父容器的中间位置 - </summary> - </member> - <member name="F:FineUI.BoxLayoutAlign.Stretch"> - <summary> - 所有子控件被拉伸至父容器的大小 - </summary> - </member> - <member name="F:FineUI.BoxLayoutAlign.StretchMax"> - <summary> - 所有子控件被拉伸至最大子控件的大小 - </summary> - </member> - <member name="T:FineUI.BoxLayoutAlignHelper"> - <summary> - HBox或者VBox的位置的名称 - </summary> - </member> - <member name="T:FineUI.BoxLayoutPosition"> - <summary> - 在HBox布局或者VBox布局中,用来控制容器子控件的位置 - </summary> - </member> - <member name="F:FineUI.BoxLayoutPosition.Left"> - <summary> - 子控件靠父容器的开始位置排列(废弃,请使用Start代替) - </summary> - </member> - <member name="F:FineUI.BoxLayoutPosition.Center"> - <summary> - 子控件靠父容器的中间位置排列 - </summary> - </member> - <member name="F:FineUI.BoxLayoutPosition.Right"> - <summary> - 子控件靠父容器的结束位置排列(废弃,请使用End代替) - </summary> - </member> - <member name="F:FineUI.BoxLayoutPosition.Start"> - <summary> - 子控件靠父容器的开始位置排列(默认值) - </summary> - </member> - <member name="F:FineUI.BoxLayoutPosition.End"> - <summary> - 子控件靠父容器的结束位置排列 - </summary> - </member> - <member name="T:FineUI.BoxLayoutPositionHelper"> - <summary> - HBox或者VBox的位置的名称 - </summary> - </member> - <member name="T:FineUI.FooterBarAlign"> - <summary> - 页脚工具栏的排列位置 - </summary> - </member> - <member name="F:FineUI.FooterBarAlign.Right"> - <summary> - 靠右(默认值) - </summary> - </member> - <member name="F:FineUI.FooterBarAlign.Left"> - <summary> - 靠左 - </summary> - </member> - <member name="F:FineUI.FooterBarAlign.Center"> - <summary> - 居中 - </summary> - </member> - <member name="T:FineUI.FooterBarAlignHelper"> - <summary> - 页脚工具栏的排列位置名称 - </summary> - </member> - <member name="T:FineUI.AjaxLoadingType"> - <summary> - Ajax提示信息的类型 - </summary> - </member> - <member name="F:FineUI.AjaxLoadingType.Default"> - <summary> - 在页面顶部显示黄色提示框(默认值) - </summary> - </member> - <member name="F:FineUI.AjaxLoadingType.Mask"> - <summary> - Extjs的页面遮罩提示框 - </summary> - </member> - <member name="T:FineUI.AjaxLoadingTypeName"> - <summary> - Ajax提示信息的类型名称 - </summary> - </member> - <member name="T:FineUI.TextAlign"> - <summary> - 文本排列位置 - </summary> - </member> - <member name="F:FineUI.TextAlign.Left"> - <summary> - 靠左排列(默认值) - </summary> - </member> - <member name="F:FineUI.TextAlign.Center"> - <summary> - 居中排列 - </summary> - </member> - <member name="F:FineUI.TextAlign.Right"> - <summary> - 靠右排列 - </summary> - </member> - <member name="T:FineUI.TextAlignName"> - <summary> - 文本排列位置名称 - </summary> - </member> - <member name="T:FineUI.LabelAlign"> - <summary> - 表单中标签的排列位置 - </summary> - </member> - <member name="F:FineUI.LabelAlign.Left"> - <summary> - 靠左(默认值) - </summary> - </member> - <member name="F:FineUI.LabelAlign.Right"> - <summary> - 靠右 - </summary> - </member> - <member name="F:FineUI.LabelAlign.Top"> - <summary> - 靠上 - </summary> - </member> - <member name="T:FineUI.LabelAlignHelper"> - <summary> - 表单中标签的排列位置名称 - </summary> - </member> - <member name="T:FineUI.VerticalAlign"> - <summary> - 垂直排列位置 - </summary> - </member> - <member name="F:FineUI.VerticalAlign.Middle"> - <summary> - 居中排列(默认值) - </summary> - </member> - <member name="F:FineUI.VerticalAlign.Top"> - <summary> - 靠上排列 - </summary> - </member> - <member name="F:FineUI.VerticalAlign.Bottom"> - <summary> - 靠下排列 - </summary> - </member> - <member name="T:FineUI.VerticalAlignName"> - <summary> - 垂直排列位置名称 - </summary> - </member> - <member name="T:FineUI.JsArrayBuilder"> - <summary> - 创建Javascript数组参数的帮助类 - </summary> - </member> - <member name="M:FineUI.JsArrayBuilder.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.JsArrayBuilder.#ctor(System.Object)"> - <summary> - 构造函数 - </summary> - <param name="propertyValue">初始属性值</param> - </member> - <member name="M:FineUI.JsArrayBuilder.#ctor(System.Object,System.Boolean)"> - <summary> - 构造函数 - </summary> - <param name="propertyValue">初始属性值</param> - <param name="persistOriginal">是否保持原样</param> - </member> - <member name="M:FineUI.JsArrayBuilder.RemoveProperty(System.String)"> - <summary> - 删除属性 - </summary> - <param name="propertyValue">属性值</param> - </member> - <member name="M:FineUI.JsArrayBuilder.AddProperty(System.Object)"> - <summary> - 添加属性 - </summary> - <param name="propertyValue">属性值</param> - </member> - <member name="M:FineUI.JsArrayBuilder.AddProperty(System.Object,System.Boolean)"> - <summary> - 添加属性 - </summary> - <param name="propertyValue">属性值</param> - <param name="persistOriginal">是否保持原样</param> - </member> - <member name="M:FineUI.JsArrayBuilder.ToString"> - <summary> - 返回对象的JSON字符串形式 - </summary> - <returns>对象的JSON形式</returns> - </member> - <member name="P:FineUI.JsArrayBuilder.Count"> - <summary> - 已经添加属性的个数 - </summary> - </member> - <member name="M:FineUI.OptionBuilder.RemoveProperty(System.String)"> - <summary> - 删除属性 - </summary> - <param name="propertyName"></param> - </member> - <member name="M:FineUI.OptionBuilder.AddProperty(System.String,System.Object)"> - <summary> - 添加属性 - </summary> - <param name="propertyName"></param> - <param name="propertyValue"></param> - </member> - <member name="M:FineUI.OptionBuilder.AddProperty(System.String,System.Object,System.Boolean)"> - <summary> - 添加属性 - </summary> - <param name="propertyName"></param> - <param name="propertyValue"></param> - <param name="persistOriginal">是否保持原样</param> - </member> - <member name="M:FineUI.OptionBuilder.GetProperty(System.String)"> - <summary> - 使用这个方法需要特别注意,因为这里返回的不是设置的属性了 - 比如:"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"" - </summary> - <param name="propertyName"></param> - <returns></returns> - </member> - <member name="M:FineUI.OptionBuilder.ToString"> - <summary> - 返回对象的Json字符串表示 - </summary> - <returns></returns> - </member> - <member name="T:FineUI.ClientJavascriptIDManager"> - <summary> - 存在 Page.Items 上下文中,用于生成JavascriptID - </summary> - </member> - <member name="M:FineUI.CommonResourceHelper.AddJavascriptIncludeToPageBottom(System.Web.UI.Page,System.String,System.String)"> - <summary> - 添加JS文件到页面的底部 - </summary> - <param name="page"></param> - <param name="controlId"></param> - <param name="resourceName"></param> - </member> - <member name="M:FineUI.CommonResourceHelper.AddCssResourceToHead(System.Web.UI.Page,System.String,System.String)"> - <summary> - 添加样式表到页头 - </summary> - <param name="page"></param> - <param name="controlId"></param> - <param name="resourceName"></param> - </member> - <member name="M:FineUI.CommonResourceHelper.AddContentToHead(System.Web.UI.Page,System.String,System.String)"> - <summary> - 向页面头部添加内容 - </summary> - <param name="page"></param> - <param name="controlId"></param> - <param name="msg"></param> - </member> - <member name="M:FineUI.CommonResourceHelper.IsHeaderContains(System.Web.UI.Page,System.String)"> - <summary> - 页头是否包含控件 - </summary> - <param name="page"></param> - <param name="controlId"></param> - <returns></returns> - </member> - <member name="M:FineUI.CommonResourceHelper.GetNextControlIndex(System.Web.UI.Page)"> - <summary> - 取得下一个控件的位置 - </summary> - <returns></returns> - </member> - <member name="T:FineUI.ResourceHandler"> - <summary> - 资源处理程序 - </summary> - </member> - <member name="M:FineUI.ResourceHandler.ProcessRequest(System.Web.HttpContext)"> - <summary> - 处理资源的请求 - </summary> - <param name="context">Http请求上下文</param> - </member> - <member name="P:FineUI.ResourceHandler.IsReusable"> - <summary> - 只要请求的 URL 相同,则请求可以重用 - </summary> - </member> - <member name="T:FineUI.ResponseFilter"> - <summary> - AJAX输出过滤器 - </summary> - </member> - <member name="M:FineUI.ResponseFilter.GetEnableTargetControlScript"> - <summary> - 设置引起本次回发的按钮(或其他控件)可用 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.ResponseFilter.UpdateEventValidation(System.Text.StringBuilder,HtmlAgilityPack.HtmlDocument)"> - <summary> - 更新 EventValidation 节点的值 - </summary> - <param name="sb"></param> - <param name="doc"></param> - </member> - <member name="M:FineUI.ResponseFilter.UpdateViewState(System.Text.StringBuilder,HtmlAgilityPack.HtmlDocument,System.Boolean)"> - <summary> - 更新 ViewState 节点的值 - </summary> - <param name="sb"></param> - <param name="doc"></param> - <param name="gzipped"></param> - </member> - <member name="M:FineUI.ResponseFilter.UpdateASPNETControls(System.Text.StringBuilder,HtmlAgilityPack.HtmlDocument)"> - <summary> - 更新ASP.NET控件 - </summary> - <param name="sb"></param> - <param name="doc"></param> - </member> - <member name="M:FineUI.ResponseFilter.GetHtmlNodeValue(System.String,HtmlAgilityPack.HtmlDocument)"> - <summary> - 取得 HTML 中一个节点的值 - </summary> - <param name="nodeId"></param> - <param name="doc"></param> - <returns></returns> - </member> - <member name="M:FineUI.ResponseFilter.GetHtmlNodeOuterHTML(System.String,HtmlAgilityPack.HtmlDocument)"> - <summary> - 取得 HTML 中一个节点的OuterHtml - </summary> - <param name="nodeId"></param> - <param name="doc"></param> - <returns></returns> - </member> - <member name="M:FineUI.ResponseFilter.GetCompleteHtml"> - <summary> - 获取当前输出流的HTML内容 - </summary> - <returns></returns> - </member> - <member name="T:FineUI.ScriptModule"> - <summary> - 请求处理模块(主要用来处理Response.Redirect的情况) - </summary> - </member> - <member name="M:FineUI.ScriptModule.Dispose"> - <summary> - 清除资源 - </summary> - </member> - <member name="M:FineUI.ScriptModule.Init(System.Web.HttpApplication)"> - <summary> - 初始化模块 - </summary> - <param name="context">Http应用程序</param> - </member> - <member name="T:FineUI.TreeNodeIDManager"> - <summary> - 存在 Page.Items 上下文中,用于生成JavascriptID - </summary> - </member> - <member name="T:FineUI.SimulateTreeHeper"> - <summary> - 模拟树帮助类(用于表格和树控件) - </summary> - </member> - <member name="T:FineUI.SimulateTreeNode"> - <summary> - 模拟树结构的节点类 - </summary> - </member> - <member name="P:FineUI.SimulateTreeNode.SimulateTreeText"> - <summary> - 模拟树的节点内容 - </summary> - </member> - <member name="P:FineUI.SimulateTreeNode.Text"> - <summary> - 节点内容 - </summary> - </member> - <member name="P:FineUI.SimulateTreeNode.Value"> - <summary> - 节点内容 - </summary> - </member> - <member name="P:FineUI.SimulateTreeNode.Level"> - <summary> - 节点所在层次(从0开始,0表示根节点) - </summary> - </member> - <member name="P:FineUI.SimulateTreeNode.ParentNode"> - <summary> - 父节点 - </summary> - </member> - <member name="P:FineUI.SimulateTreeNode.HasLittleBrother"> - <summary> - 是否有弟节点 - </summary> - </member> - <member name="T:FineUI.XState"> - <summary> - FineUI控件的状态保持机制 - </summary> - </member> - <member name="M:FineUI.XState.#ctor(FineUI.ControlBase)"> - <summary> - 构造函数 - </summary> - <param name="control">控件</param> - </member> - <member name="M:FineUI.XState.AddModifiedProperty(System.String)"> - <summary> - 增加在当前请求中改变的属性列表(控件可以自己手工设置,以便保存在 X_STATE 中) - </summary> - <param name="property"></param> - </member> - <member name="M:FineUI.XState.BackupInitializedProperties"> - <summary> - 备份初始化属性值 - 在输出 AJAX 回发之前,会拿这个初始属性值和当时属性值做对比,以确定这些属性是否被用户改变 - </summary> - </member> - <member name="M:FineUI.XState.BackupPostDataProperty(System.String)"> - <summary> - 备份 PostData 的属性值(也就是在客户端改变的属性值) - </summary> - <param name="prop"></param> - </member> - <member name="M:FineUI.XState.CalculateModifiedProperties"> - <summary> - 计算被修改的属性列表(更新 ModifiedProperties 和 ClientPropertiesModifiedInServer 两个值) - 这个需要在 OnPreRender 中调用,在页面第一次加载,正常的回发以及AJAX回发时都要调用 - </summary> - </member> - <member name="M:FineUI.XState.GetTotalModifiedProperties"> - <summary> - 页面第一次加载至今改变过的属性列表总和(其中可能经历多次正常的页面回发和局部 AJAX 回发) - </summary> - <returns></returns> - </member> - <member name="P:FineUI.XState.Item(System.String)"> - <summary> - 获取设置 XState 属性值 - </summary> - <param name="key"></param> - <returns></returns> - </member> - <member name="P:FineUI.XState.ModifiedProperties"> - <summary> - 当前请求中改变的属性列表,既包含服务器端改变的属性,也包含客户端改变的属性 - </summary> - </member> - <member name="P:FineUI.XState.ClientPropertiesModifiedInServer"> - <summary> - 客户端可以改变的属性在服务器端被改变了 - </summary> - </member> - <member name="T:FineUI.ControlUtil"> - <summary> - 控件相关帮助函数 - </summary> - </member> - <member name="M:FineUI.ControlUtil.FindParentControl(System.Web.UI.Control,System.Type)"> - <summary> - 查找父控件 - </summary> - <param name="control">当前控件</param> - <param name="controlType">查找控件的类型</param> - <returns>找到的第一个父控件</returns> - </member> - <member name="M:FineUI.ControlUtil.FindControl(System.String)"> - <summary> - 根据控件ID查找控件 - </summary> - <param name="findControlID">要查找的控件ID</param> - <returns>找到的控件</returns> - </member> - <member name="M:FineUI.ControlUtil.FindControl(System.Type)"> - <summary> - 根据控件类型查找控件 - </summary> - <param name="controlType">要查找的控件类型</param> - <returns>找到的控件</returns> - </member> - <member name="M:FineUI.ControlUtil.FindControl(System.Web.UI.Control,System.String)"> - <summary> - 在父控件的所有子控件中查找控件 - </summary> - <param name="control">父控件</param> - <param name="findControlId">要查找的控件ID</param> - <returns>找到的控件</returns> - </member> - <member name="M:FineUI.ControlUtil.FindControl(System.Web.UI.Control,System.Type)"> - <summary> - 在父控件的所有子控件中查找控件 - </summary> - <param name="control">父控件</param> - <param name="controlType">要查找的控件类型</param> - <returns>找到的控件</returns> - </member> - <member name="T:FineUI.StringUtil"> - <summary> - 字符串帮助类 - </summary> - </member> - <member name="F:FineUI.StringUtil.VIEWSTATE_ID"> - <summary> - GZIP压缩的ViewState隐藏字段的ID - </summary> - </member> - <member name="F:FineUI.StringUtil.GZIPPED_VIEWSTATE_ID"> - <summary> - GZIP压缩的ViewState隐藏字段的ID - </summary> - </member> - <member name="M:FineUI.StringUtil.EnumFromName(System.Type,System.String)"> - <summary> - 获取枚举实例 - </summary> - <param name="enumType">枚举类型</param> - <param name="enumName">枚举实例名称</param> - <returns>枚举实例</returns> - </member> - <member name="M:FineUI.StringUtil.EnumToName(System.Enum)"> - <summary> - 获取枚举实例名称 - </summary> - <param name="param">枚举实例</param> - <returns>枚举实例名称</returns> - </member> - <member name="M:FineUI.StringUtil.StripHtml(System.String)"> - <summary> - 去除字符串中的Html - </summary> - <param name="source">字符串</param> - <returns>字符串</returns> - </member> - <member name="M:FineUI.StringUtil.GetIntListFromString(System.String)"> - <summary> - 将字符串"1,2,3"转化为整形列表[1,2,3] - </summary> - <param name="postValue">字符串</param> - <returns>整形列表</returns> - </member> - <member name="M:FineUI.StringUtil.GetIntListFromString(System.String,System.Boolean)"> - <summary> - 将字符串"1,2,3"转化为整形列表[1,2,3] - </summary> - <param name="postValue">字符串</param> - <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> - <returns>整形列表</returns> - </member> - <member name="M:FineUI.StringUtil.GetStringListFromString(System.String)"> - <summary> - 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] - </summary> - <param name="postValue">字符串</param> - <returns>字符串列表</returns> - </member> - <member name="M:FineUI.StringUtil.GetStringListFromString(System.String,System.Boolean)"> - <summary> - 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] - </summary> - <param name="postValue"></param> - <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> - <returns>字符串列表</returns> - </member> - <member name="M:FineUI.StringUtil.GetStringFromStringArray(System.String[])"> - <summary> - 将字符串数组["ssdd","2","ok"]转化为字符串"ssdd,2,ok" - </summary> - <param name="strArray">字符串数组</param> - <returns>字符串</returns> - </member> - <member name="M:FineUI.StringUtil.GetStringFromIntArray(System.Int32[])"> - <summary> - 将整型数组[2,3,4]转化为字符串"2,3,4" - </summary> - <param name="intArray">整形数组</param> - <returns>字符串</returns> - </member> - <member name="M:FineUI.StringUtil.CompareIntArray(System.Int32[],System.Int32[])"> - <summary> - 比较两个整形数组是否相等 - </summary> - <param name="array1">整形数组1</param> - <param name="array2">整形数组2</param> - <returns>是否相等</returns> - </member> - <member name="M:FineUI.StringUtil.CompareStringArray(System.String[],System.String[])"> - <summary> - 比较两个字符串数组是否相等 - </summary> - <param name="array1">字符串数组1</param> - <param name="array2">字符串数组2</param> - <returns>是否相等</returns> - </member> - <member name="M:FineUI.StringUtil.ConvertPercentageToDecimalString(System.String)"> - <summary> - 将 10% 转换为 0.1 的字符串的形式 - </summary> - <param name="percentageStr">百分比字符串</param> - <returns>小数</returns> - </member> - <member name="M:FineUI.StringUtil.DecodeFrom64(System.Byte[])"> - <summary> - Base64解码 - </summary> - <param name="encodedDataAsBytes">需要解码的字节数组</param> - <returns>解码后的字符串</returns> - </member> - <member name="M:FineUI.StringUtil.DecodeFrom64(System.String)"> - <summary> - Base64解码 - </summary> - <param name="encodedData">需要解码的字符串</param> - <returns>解码后的字符串</returns> - </member> - <member name="M:FineUI.StringUtil.EncodeTo64(System.Byte[])"> - <summary> - Base64编码 - </summary> - <param name="toEncodeAsBytes">需要编码的字节数组</param> - <returns>编码后的字符串</returns> - </member> - <member name="M:FineUI.StringUtil.EncodeTo64(System.String)"> - <summary> - Base64编码 - </summary> - <param name="toEncode">需要编码的字符串</param> - <returns>编码后的字符串</returns> - </member> - <member name="M:FineUI.StringUtil.Gzip(System.String)"> - <summary> - Gzip编码字符串 - </summary> - <param name="source">源字符串</param> - <returns>Gzip后的字符串</returns> - </member> - <member name="M:FineUI.StringUtil.Ungzip(System.String)"> - <summary> - 解码Gzip字符串 - </summary> - <param name="source">Gzip后的字符串</param> - <returns>源字符串</returns> - </member> - <member name="M:FineUI.StringUtil.LoadGzippedViewState(System.String)"> - <summary> - 加载Gzipped的ViewState - </summary> - <param name="gzippedState"></param> - <returns></returns> - </member> - <member name="M:FineUI.StringUtil.GenerateGzippedViewState(System.Object)"> - <summary> - 生成Gzipped的ViewState - </summary> - <param name="viewState"></param> - <returns></returns> - </member> - <member name="T:FineUI.ObjectUtil"> - <summary> - 对象帮助类 - </summary> - </member> - <member name="M:FineUI.ObjectUtil.GetPropertyValue(System.Object,System.String)"> - <summary> - 获取对象的属性值 - </summary> - <param name="obj">可能是DataRowView或一个对象</param> - <param name="propertyName">属性名</param> - <returns>属性值</returns> - </member> - <member name="M:FineUI.ObjectUtil.GetPropertyValueFormObject(System.Object,System.String)"> - <summary> - 获取对象的属性值 - </summary> - <param name="obj">对象</param> - <param name="propertyName">属性名("Color"、"BodyStyle"或者"Info.UserName")</param> - <returns>属性值</returns> - </member> - <member name="T:FineUI.HtmlNodeBuilder"> - <summary> - 创建HTML节点的帮助类 - </summary> - </member> - <member name="M:FineUI.HtmlNodeBuilder.#ctor(System.String)"> - <summary> - 构造函数 - </summary> - <param name="nodeName">节点名称</param> - </member> - <member name="M:FineUI.HtmlNodeBuilder.SetProperty(System.String,System.String)"> - <summary> - 设置属性 - </summary> - <param name="name">属性名</param> - <param name="value">属性值</param> - </member> - <member name="M:FineUI.HtmlNodeBuilder.GetProperty(System.String)"> - <summary> - 取得属性的值 - </summary> - <param name="name">属性名</param> - <returns>属性值</returns> - </member> - <member name="M:FineUI.HtmlNodeBuilder.ToString"> - <summary> - 转化为客户端可用的HTML标签字符串 - </summary> - <returns>客户端可用的HTML标签字符串</returns> - </member> - <member name="P:FineUI.HtmlNodeBuilder.InnerProperty"> - <summary> - 节点内部值 - </summary> - </member> - <member name="T:FineUI.StyleUtil"> - <summary> - 样式帮助类 - </summary> - </member> - <member name="M:FineUI.StyleUtil.GetSingleStyleFormCSS(System.String,System.String)"> - <summary> - 提取样式字符串 - </summary> - <param name="css">CSS字符串</param> - <param name="styleName">样式名称</param> - <returns>样式字符串</returns> - </member> - <member name="M:FineUI.StyleUtil.GetBackgroundStyle(System.String,System.String)"> - <summary> - 获取背景图片样式 - </summary> - <param name="selector">选择符</param> - <param name="imageUrl">图片地址</param> - <returns>CSS样式</returns> - </member> - <member name="M:FineUI.StyleUtil.GetNoRepeatBackgroundStyle(System.String,System.String)"> - <summary> - 获取背景图片样式(no-repeat) - </summary> - <param name="selector">选择符</param> - <param name="imageUrl">图片地址</param> - <returns>CSS样式</returns> - </member> - <member name="T:FineUI.JSONUtil"> - <summary> - JSON帮助类 - </summary> - </member> - <member name="M:FineUI.JSONUtil.IntArrayFromJArray(Newtonsoft.Json.Linq.JArray)"> - <summary> - 将JArray转换为整型数组 - </summary> - <param name="ja">JArray对象</param> - <returns>整型数组</returns> - </member> - <member name="M:FineUI.JSONUtil.StringArrayFromJArray(Newtonsoft.Json.Linq.JArray)"> - <summary> - 将JArray转换为字符串数组 - </summary> - <param name="ja">JArray对象</param> - <returns>字符串数组</returns> - </member> - <member name="M:FineUI.JSONUtil.ObjectArrayFromJArray(Newtonsoft.Json.Linq.JArray)"> - <summary> - 将JArray转换为对象数组 - </summary> - <param name="ja">JArray对象</param> - <returns>对象数组</returns> - </member> - <member name="T:HtmlAgilityPack.Crc32"> - <summary> - A utility class to compute CRC32. - </summary> - </member> - <member name="M:HtmlAgilityPack.Crc32.CRC32String(System.String)"> - <summary> - Compute a checksum for a given string. - </summary> - <param name="text">The string to compute the checksum for.</param> - <returns>The computed checksum.</returns> - </member> - <member name="M:HtmlAgilityPack.Crc32.CRC32Bytes(System.Byte[])"> - <summary> - Compute a checksum for a given array of bytes. - </summary> - <param name="bytes">The array of bytes to compute the checksum for.</param> - <returns>The computed checksum.</returns> - </member> - <member name="T:HtmlAgilityPack.HtmlAttribute"> - <summary> - Represents an HTML attribute. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlAttribute.Clone"> - <summary> - Creates a duplicate of this attribute. - </summary> - <returns>The cloned attribute.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlAttribute.CompareTo(System.Object)"> - <summary> - Compares the current instance with another attribute. Comparison is based on attributes' name. - </summary> - <param name="obj">An attribute to compare with this instance.</param> - <returns>A 32-bit signed integer that indicates the relative order of the names comparison.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlAttribute.Name"> - <summary> - Gets the qualified name of the attribute. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttribute.Value"> - <summary> - Gets or sets the value of the attribute. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttribute.Line"> - <summary> - Gets the line number of this attribute in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttribute.LinePosition"> - <summary> - Gets the column number of this attribute in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttribute.StreamPosition"> - <summary> - Gets the stream position of this attribute in the document, relative to the start of the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttribute.OwnerNode"> - <summary> - Gets the HTML node to which this attribute belongs. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttribute.OwnerDocument"> - <summary> - Gets the HTML document to which this attribute belongs. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlAttributeCollection"> - <summary> - Represents a combined list and collection of HTML nodes. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Append(HtmlAgilityPack.HtmlAttribute)"> - <summary> - Inserts the specified attribute as the last attribute in the collection. - </summary> - <param name="newAttribute">The attribute to insert. May not be null.</param> - <returns>The appended attribute.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Append(System.String)"> - <summary> - Creates and inserts a new attribute as the last attribute in the collection. - </summary> - <param name="name">The name of the attribute to insert.</param> - <returns>The appended attribute.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Append(System.String,System.String)"> - <summary> - Creates and inserts a new attribute as the last attribute in the collection. - </summary> - <param name="name">The name of the attribute to insert.</param> - <param name="value">The value of the attribute to insert.</param> - <returns>The appended attribute.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Prepend(HtmlAgilityPack.HtmlAttribute)"> - <summary> - Inserts the specified attribute as the first node in the collection. - </summary> - <param name="newAttribute">The attribute to insert. May not be null.</param> - <returns>The prepended attribute.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.RemoveAt(System.Int32)"> - <summary> - Removes the attribute at the specified index. - </summary> - <param name="index">The index of the attribute to remove.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Remove(HtmlAgilityPack.HtmlAttribute)"> - <summary> - Removes a given attribute from the list. - </summary> - <param name="attribute">The attribute to remove. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Remove(System.String)"> - <summary> - Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. - </summary> - <param name="name">The attribute's name. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.RemoveAll"> - <summary> - Remove all attributes in the list. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.GetEnumerator"> - <summary> - Returns an enumerator that can iterate through the list. - </summary> - <returns>An IEnumerator for the entire list.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlAttributeCollection.Count"> - <summary> - Gets the number of elements actually contained in the list. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttributeCollection.Item(System.String)"> - <summary> - Gets a given attribute from the list using its name. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttributeCollection.Item(System.Int32)"> - <summary> - Gets the attribute at the specified index. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator"> - <summary> - Represents an enumerator that can iterate through the list. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.Reset"> - <summary> - Sets the enumerator to its initial position, which is before the first element in the collection. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.MoveNext"> - <summary> - Advances the enumerator to the next element of the collection. - </summary> - <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.Current"> - <summary> - Gets the current element in the collection. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.System#Collections#IEnumerator#Current"> - <summary> - Gets the current element in the collection. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlCommentNode"> - <summary> - Represents an HTML comment. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlNode"> - <summary> - Represents an HTML node. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNode.HtmlNodeTypeNameComment"> - <summary> - Gets the name of a comment node. It is actually defined as '#comment'. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNode.HtmlNodeTypeNameDocument"> - <summary> - Gets the name of the document node. It is actually defined as '#document'. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNode.HtmlNodeTypeNameText"> - <summary> - Gets the name of a text node. It is actually defined as '#text'. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNode.ElementsFlags"> - <summary> - Gets a collection of flags that define specific behaviors for specific element nodes. - The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.IsClosedElement(System.String)"> - <summary> - Determines if an element node is closed. - </summary> - <param name="name">The name of the element node to check. May not be null.</param> - <returns>true if the name is the name of a closed element node, false otherwise.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CanOverlapElement(System.String)"> - <summary> - Determines if an element node can be kept overlapped. - </summary> - <param name="name">The name of the element node to check. May not be null.</param> - <returns>true if the name is the name of an element node that can be kept overlapped, false otherwise.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.IsOverlappedClosingElement(System.String)"> - <summary> - Determines if a text corresponds to the closing tag of an node that can be kept overlapped. - </summary> - <param name="text">The text to check. May not be null.</param> - <returns>true or false.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.IsCDataElement(System.String)"> - <summary> - Determines if an element node is a CDATA element node. - </summary> - <param name="name">The name of the element node to check. May not be null.</param> - <returns>true if the name is the name of a CDATA element node, false otherwise.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.IsEmptyElement(System.String)"> - <summary> - Determines if an element node is defined as empty. - </summary> - <param name="name">The name of the element node to check. May not be null.</param> - <returns>true if the name is the name of an empty element node, false otherwise.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CreateNode(System.String)"> - <summary> - Creates an HTML node from a string representing literal HTML. - </summary> - <param name="html">The HTML text.</param> - <returns>The newly created node instance.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CopyFrom(HtmlAgilityPack.HtmlNode)"> - <summary> - Creates a duplicate of the node and the subtree under it. - </summary> - <param name="node">The node to duplicate. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CopyFrom(HtmlAgilityPack.HtmlNode,System.Boolean)"> - <summary> - Creates a duplicate of the node. - </summary> - <param name="node">The node to duplicate. May not be null.</param> - <param name="deep">true to recursively clone the subtree under the specified node, false to clone only the node itself.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CreateNavigator"> - <summary> - Creates a new XPathNavigator object for navigating this HTML node. - </summary> - <returns>An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.SelectSingleNode(System.String)"> - <summary> - Selects the first XmlNode that matches the XPath expression. - </summary> - <param name="xpath">The XPath expression. May not be null.</param> - <returns>The first HtmlNode that matches the XPath query or a null reference if no matching node was found.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.SelectNodes(System.String)"> - <summary> - Selects a list of nodes matching the XPath expression. - </summary> - <param name="xpath">The XPath expression.</param> - <returns>An HtmlNodeCollection containing a collection of nodes matching the XPath query, or null if no node matched the XPath expression.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.Clone"> - <summary> - Creates a duplicate of the node - </summary> - <returns></returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CloneNode(System.String)"> - <summary> - Creates a duplicate of the node and changes its name at the same time. - </summary> - <param name="newName">The new name of the cloned node. May not be null.</param> - <returns>The cloned node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CloneNode(System.String,System.Boolean)"> - <summary> - Creates a duplicate of the node and changes its name at the same time. - </summary> - <param name="newName">The new name of the cloned node. May not be null.</param> - <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> - <returns>The cloned node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.CloneNode(System.Boolean)"> - <summary> - Creates a duplicate of the node. - </summary> - <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> - <returns>The cloned node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.RemoveAll"> - <summary> - Removes all the children and/or attributes of the current node. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.RemoveAllChildren"> - <summary> - Removes all the children of the current node. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.RemoveChild(HtmlAgilityPack.HtmlNode)"> - <summary> - Removes the specified child node. - </summary> - <param name="oldChild">The node being removed. May not be null.</param> - <returns>The node removed.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.RemoveChild(HtmlAgilityPack.HtmlNode,System.Boolean)"> - <summary> - Removes the specified child node. - </summary> - <param name="oldChild">The node being removed. May not be null.</param> - <param name="keepGrandChildren">true to keep grand children of the node, false otherwise.</param> - <returns>The node removed.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.ReplaceChild(HtmlAgilityPack.HtmlNode,HtmlAgilityPack.HtmlNode)"> - <summary> - Replaces the child node oldChild with newChild node. - </summary> - <param name="newChild">The new node to put in the child list.</param> - <param name="oldChild">The node being replaced in the list.</param> - <returns>The node replaced.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.InsertBefore(HtmlAgilityPack.HtmlNode,HtmlAgilityPack.HtmlNode)"> - <summary> - Inserts the specified node immediately before the specified reference node. - </summary> - <param name="newChild">The node to insert. May not be null.</param> - <param name="refChild">The node that is the reference node. The newChild is placed before this node.</param> - <returns>The node being inserted.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.InsertAfter(HtmlAgilityPack.HtmlNode,HtmlAgilityPack.HtmlNode)"> - <summary> - Inserts the specified node immediately after the specified reference node. - </summary> - <param name="newChild">The node to insert. May not be null.</param> - <param name="refChild">The node that is the reference node. The newNode is placed after the refNode.</param> - <returns>The node being inserted.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.PrependChild(HtmlAgilityPack.HtmlNode)"> - <summary> - Adds the specified node to the beginning of the list of children of this node. - </summary> - <param name="newChild">The node to add. May not be null.</param> - <returns>The node added.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.PrependChildren(HtmlAgilityPack.HtmlNodeCollection)"> - <summary> - Adds the specified node list to the beginning of the list of children of this node. - </summary> - <param name="newChildren">The node list to add. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.AppendChild(HtmlAgilityPack.HtmlNode)"> - <summary> - Adds the specified node to the end of the list of children of this node. - </summary> - <param name="newChild">The node to add. May not be null.</param> - <returns>The node added.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.AppendChildren(HtmlAgilityPack.HtmlNodeCollection)"> - <summary> - Adds the specified node to the end of the list of children of this node. - </summary> - <param name="newChildren">The node list to add. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.GetAttributeValue(System.String,System.String)"> - <summary> - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - </summary> - <param name="name">The name of the attribute to get. May not be null.</param> - <param name="def">The default value to return if not found.</param> - <returns>The value of the attribute if found, the default value if not found.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.GetAttributeValue(System.String,System.Int32)"> - <summary> - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - </summary> - <param name="name">The name of the attribute to get. May not be null.</param> - <param name="def">The default value to return if not found.</param> - <returns>The value of the attribute if found, the default value if not found.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.GetAttributeValue(System.String,System.Boolean)"> - <summary> - Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - </summary> - <param name="name">The name of the attribute to get. May not be null.</param> - <param name="def">The default value to return if not found.</param> - <returns>The value of the attribute if found, the default value if not found.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.SetAttributeValue(System.String,System.String)"> - <summary> - Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. - </summary> - <param name="name">The name of the attribute to set. May not be null.</param> - <param name="value">The value for the attribute.</param> - <returns>The corresponding attribute instance.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.WriteTo(System.IO.TextWriter)"> - <summary> - Saves the current node to the specified TextWriter. - </summary> - <param name="outText">The TextWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.WriteTo(System.Xml.XmlWriter)"> - <summary> - Saves the current node to the specified XmlWriter. - </summary> - <param name="writer">The XmlWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.WriteContentTo(System.IO.TextWriter)"> - <summary> - Saves all the children of the node to the specified TextWriter. - </summary> - <param name="outText">The TextWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.WriteTo"> - <summary> - Saves the current node to a string. - </summary> - <returns>The saved string.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNode.WriteContentTo"> - <summary> - Saves all the children of the node to a string. - </summary> - <returns>The saved string.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.Id"> - <summary> - Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.Line"> - <summary> - Gets the line number of this node in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.LinePosition"> - <summary> - Gets the column number of this node in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.StreamPosition"> - <summary> - Gets the stream position of this node in the document, relative to the start of the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.Closed"> - <summary> - Gets a value indicating if this node has been closed or not. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.Name"> - <summary> - Gets or sets this node's name. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.InnerText"> - <summary> - Gets or Sets the text between the start and end tags of the object. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.InnerHtml"> - <summary> - Gets or Sets the HTML between the start and end tags of the object. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.OuterHtml"> - <summary> - Gets or Sets the object and its content in HTML. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.NextSibling"> - <summary> - Gets the HTML node immediately following this element. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.PreviousSibling"> - <summary> - Gets the node immediately preceding this node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.FirstChild"> - <summary> - Gets the first child of the node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.LastChild"> - <summary> - Gets the last child of the node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.NodeType"> - <summary> - Gets the type of this node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.ParentNode"> - <summary> - Gets the parent of this node (for nodes that can have parents). - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.OwnerDocument"> - <summary> - Gets the HtmlDocument to which this node belongs. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.ChildNodes"> - <summary> - Gets all the children of the node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.HasAttributes"> - <summary> - Gets a value indicating whether the current node has any attributes. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.HasClosingAttributes"> - <summary> - Gets a value indicating whether the current node has any attributes on the closing tag. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.HasChildNodes"> - <summary> - Gets a value indicating whether this node has any child nodes. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.Attributes"> - <summary> - Gets the collection of HTML attributes for this node. May not be null. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNode.ClosingAttributes"> - <summary> - Gets the collection of HTML attributes for the closing tag. May not be null. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlCommentNode.InnerHtml"> - <summary> - Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlCommentNode.OuterHtml"> - <summary> - Gets or Sets the object and its content in HTML. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlCommentNode.Comment"> - <summary> - Gets or Sets the comment text of the node. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlDocument"> - <summary> - Represents a complete HTML document. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionComputeChecksum"> - <summary> - Defines if a checksum must be computed for the document while parsing. Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionReadEncoding"> - <summary> - Defines if declared encoding must be read from the document. - Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - Default is true. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionCheckSyntax"> - <summary> - Defines if non closed nodes will be checked at the end of parsing. Default is true. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionUseIdAttribute"> - <summary> - Defines if the 'id' attribute must be specifically used. Default is true. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionWriteEmptyNodes"> - <summary> - Defines if empty nodes must be written as closed during output. Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionOutputAsXml"> - <summary> - Defines if output must conform to XML, instead of HTML. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionOutputUpperCase"> - <summary> - Defines if name must be output in uppercase. Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionOutputOptimizeAttributeValues"> - <summary> - Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionAddDebuggingAttributes"> - <summary> - Adds Debugging attributes to node. Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionExtractErrorSourceText"> - <summary> - Defines if source text must be extracted while parsing errors. - If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. - Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionAutoCloseOnEnd"> - <summary> - Defines if closing for non closed nodes must be done at the end or directly in the document. - Setting this to true can actually change how browsers render the page. Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionFixNestedTags"> - <summary> - Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionExtractErrorSourceTextMaxLength"> - <summary> - Defines the maximum length of source text or parse errors. Default is 100. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionDefaultStreamEncoding"> - <summary> - Defines the default stream encoding to use. Default is System.Text.Encoding.Default. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlDocument.OptionStopperNodeName"> - <summary> - Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.#ctor"> - <summary> - Creates an instance of an HTML document. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.HtmlEncode(System.String)"> - <summary> - Applies HTML encoding to a specified string. - </summary> - <param name="html">The input string to encode. May not be null.</param> - <returns>The encoded string.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncoding(System.IO.Stream)"> - <summary> - Detects the encoding of an HTML stream. - </summary> - <param name="stream">The input stream. May not be null.</param> - <returns>The detected encoding.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncoding(System.String)"> - <summary> - Detects the encoding of an HTML file. - </summary> - <param name="path">Path for the file containing the HTML document to detect. May not be null.</param> - <returns>The detected encoding.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncodingHtml(System.String)"> - <summary> - Detects the encoding of an HTML text. - </summary> - <param name="html">The input html text. May not be null.</param> - <returns>The detected encoding.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncoding(System.IO.TextReader)"> - <summary> - Detects the encoding of an HTML text provided on a TextReader. - </summary> - <param name="reader">The TextReader used to feed the HTML. May not be null.</param> - <returns>The detected encoding.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream)"> - <summary> - Loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Boolean)"> - <summary> - Loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Text.Encoding)"> - <summary> - Loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean)"> - <summary> - Loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32)"> - <summary> - Loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - <param name="buffersize">The minimum buffer size.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String)"> - <summary> - Loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Boolean)"> - <summary> - Loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read. May not be null.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Text.Encoding)"> - <summary> - Loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read. May not be null.</param> - <param name="encoding">The character encoding to use. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Text.Encoding,System.Boolean)"> - <summary> - Loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read. May not be null.</param> - <param name="encoding">The character encoding to use. May not be null.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Text.Encoding,System.Boolean,System.Int32)"> - <summary> - Loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read. May not be null.</param> - <param name="encoding">The character encoding to use. May not be null.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - <param name="buffersize">The minimum buffer size.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.LoadHtml(System.String)"> - <summary> - Loads the HTML document from the specified string. - </summary> - <param name="html">String containing the HTML document to load. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncodingAndLoad(System.String)"> - <summary> - Detects the encoding of an HTML document from a file first, and then loads the file. - </summary> - <param name="path">The complete file path to be read.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncodingAndLoad(System.String,System.Boolean)"> - <summary> - Detects the encoding of an HTML document from a file first, and then loads the file. - </summary> - <param name="path">The complete file path to be read. May not be null.</param> - <param name="detectEncoding">true to detect encoding, false otherwise.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.TextReader)"> - <summary> - Loads the HTML document from the specified TextReader. - </summary> - <param name="reader">The TextReader used to feed the HTML data into the document. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.Stream)"> - <summary> - Saves the HTML document to the specified stream. - </summary> - <param name="outStream">The stream to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.Stream,System.Text.Encoding)"> - <summary> - Saves the HTML document to the specified stream. - </summary> - <param name="outStream">The stream to which you want to save. May not be null.</param> - <param name="encoding">The character encoding to use. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.String)"> - <summary> - Saves the mixed document to the specified file. - </summary> - <param name="filename">The location of the file where you want to save the document.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.String,System.Text.Encoding)"> - <summary> - Saves the mixed document to the specified file. - </summary> - <param name="filename">The location of the file where you want to save the document. May not be null.</param> - <param name="encoding">The character encoding to use. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.StreamWriter)"> - <summary> - Saves the HTML document to the specified StreamWriter. - </summary> - <param name="writer">The StreamWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.TextWriter)"> - <summary> - Saves the HTML document to the specified TextWriter. - </summary> - <param name="writer">The TextWriter to which you want to save. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.Xml.XmlWriter)"> - <summary> - Saves the HTML document to the specified XmlWriter. - </summary> - <param name="writer">The XmlWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateNavigator"> - <summary> - Creates a new XPathNavigator object for navigating this HTML document. - </summary> - <returns>An XPathNavigator object. The XPathNavigator is positioned on the root of the document.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.GetXmlName(System.String)"> - <summary> - Gets a valid XML name. - </summary> - <param name="name">Any text.</param> - <returns>A string that is a valid XML name.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.GetElementbyId(System.String)"> - <summary> - Gets the HTML node with the specified 'id' attribute value. - </summary> - <param name="id">The attribute id to match. May not be null.</param> - <returns>The HTML node with the matching id or null if not found.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateElement(System.String)"> - <summary> - Creates an HTML element node with the specified name. - </summary> - <param name="name">The qualified name of the element. May not be null.</param> - <returns>The new HTML node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateComment"> - <summary> - Creates an HTML comment node. - </summary> - <returns>The new HTML comment node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateComment(System.String)"> - <summary> - Creates an HTML comment node with the specified comment text. - </summary> - <param name="comment">The comment text. May not be null.</param> - <returns>The new HTML comment node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateTextNode"> - <summary> - Creates an HTML text node. - </summary> - <returns>The new HTML text node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateTextNode(System.String)"> - <summary> - Creates an HTML text node with the specified text. - </summary> - <param name="text">The text of the node. May not be null.</param> - <returns>The new HTML text node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateAttribute(System.String)"> - <summary> - Creates an HTML attribute with the specified name. - </summary> - <param name="name">The name of the attribute. May not be null.</param> - <returns>The new HTML attribute.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.CreateAttribute(System.String,System.String)"> - <summary> - Creates an HTML attribute with the specified name. - </summary> - <param name="name">The name of the attribute. May not be null.</param> - <param name="value">The value of the attribute.</param> - <returns>The new HTML attribute.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlDocument.IsWhiteSpace(System.Int32)"> - <summary> - Determines if the specified character is considered as a whitespace character. - </summary> - <param name="c">The character to check.</param> - <returns>true if if the specified character is considered as a whitespace character.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.Remainder"> - <summary> - Gets the remaining text. - Will always be null if OptionStopperNodeName is null. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.RemainderOffset"> - <summary> - Gets the offset of Remainder in the original Html text. - If OptionStopperNodeName is null, this will return the length of the original Html text. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.ParseErrors"> - <summary> - Gets a list of parse errors found in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.StreamEncoding"> - <summary> - Gets the document's stream encoding. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.DeclaredEncoding"> - <summary> - Gets the document's declared encoding. - Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.Encoding"> - <summary> - Gets the document's output encoding. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.DocumentNode"> - <summary> - Gets the root node of the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlDocument.CheckSum"> - <summary> - Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlElementFlag"> - <summary> - Flags that describe the behavior of an Element node. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlElementFlag.CData"> - <summary> - The node is a CDATA node. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlElementFlag.Empty"> - <summary> - The node is empty. META or IMG are example of such nodes. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlElementFlag.Closed"> - <summary> - The node will automatically be closed during parsing. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlElementFlag.CanOverlap"> - <summary> - The node can overlap. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlEntity"> - <summary> - A utility class to replace special characters by entities and vice-versa. - Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(HtmlAgilityPack.HtmlNode)"> - <summary> - Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. - </summary> - <param name="node">The node to entitize.</param> - <returns>An entitized cloned node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(System.String)"> - <summary> - Replace characters above 127 by entities. - </summary> - <param name="text">The source text.</param> - <returns>The result text.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(System.String,System.Boolean)"> - <summary> - Replace characters above 127 by entities. - </summary> - <param name="text">The source text.</param> - <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> - <returns>The result text.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(System.String,System.Boolean,System.Boolean)"> - <summary> - Replace characters above 127 by entities. - </summary> - <param name="text">The source text.</param> - <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> - <param name="entitizeQuotAmpAndLtGt">If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized.</param> - <returns>The result text</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlEntity.DeEntitize(System.String)"> - <summary> - Replace known entities by characters. - </summary> - <param name="text">The source text.</param> - <returns>The result text.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlEntity.EntityName"> - <summary> - A collection of entities indexed by name. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlEntity.EntityValue"> - <summary> - A collection of entities indexed by value. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlNodeCollection"> - <summary> - Represents a combined list and collection of HTML nodes. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeCollection.GetEnumerator"> - <summary> - Returns an enumerator that can iterate through the list. - </summary> - <returns>An IEnumerator for the entire list.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeCollection.Count"> - <summary> - Gets the number of elements actually contained in the list. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeCollection.Item(System.Int32)"> - <summary> - Gets the node at the specified index. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeCollection.Item(HtmlAgilityPack.HtmlNode)"> - <summary> - Gets a given node from the list. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator"> - <summary> - Represents an enumerator that can iterate through the list. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.Reset"> - <summary> - Sets the enumerator to its initial position, which is before the first element in the collection. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.MoveNext"> - <summary> - Advances the enumerator to the next element of the collection. - </summary> - <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.Current"> - <summary> - Gets the current element in the collection. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.System#Collections#IEnumerator#Current"> - <summary> - Gets the current element in the collection. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlNodeNavigator"> - <summary> - Represents an HTML navigator on an HTML document seen as a data store. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Boolean)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Text.Encoding)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Text.Encoding,System.Boolean)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - <param name="buffersize">The minimum buffer size.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.TextReader)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. - </summary> - <param name="reader">The TextReader used to feed the HTML data into the document.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Boolean)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Text.Encoding)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="encoding">The character encoding to use.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Text.Encoding,System.Boolean)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Text.Encoding,System.Boolean,System.Int32)"> - <summary> - Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - <param name="buffersize">The minimum buffer size.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNext"> - <summary> - Moves to the next sibling of the current node. - </summary> - <returns>true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToPrevious"> - <summary> - Moves to the previous sibling of the current node. - </summary> - <returns>true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirst"> - <summary> - Moves to the first sibling of the current node. - </summary> - <returns>true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirstChild"> - <summary> - Moves to the first child of the current node. - </summary> - <returns>true if there is a first child node, otherwise false.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToParent"> - <summary> - Moves to the parent of the current node. - </summary> - <returns>true if there is a parent node, otherwise false.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToRoot"> - <summary> - Moves to the root node to which the current node belongs. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveTo(System.Xml.XPath.XPathNavigator)"> - <summary> - Moves to the same position as the specified HtmlNavigator. - </summary> - <param name="other">The HtmlNavigator positioned on the node that you want to move to.</param> - <returns>true if successful, otherwise false. If false, the position of the navigator is unchanged.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToId(System.String)"> - <summary> - Moves to the node that has an attribute of type ID whose value matches the specified string. - </summary> - <param name="id">A string representing the ID value of the node to which you want to move. This argument does not need to be atomized.</param> - <returns>true if the move was successful, otherwise false. If false, the position of the navigator is unchanged.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.IsSamePosition(System.Xml.XPath.XPathNavigator)"> - <summary> - Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. - </summary> - <param name="other">The HtmlNavigator that you want to compare against.</param> - <returns>true if the two navigators have the same position, otherwise, false.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.Clone"> - <summary> - Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. - </summary> - <returns>A new HtmlNavigator object positioned at the same node as the original HtmlNavigator.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.GetAttribute(System.String,System.String)"> - <summary> - Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. - </summary> - <param name="localName">The local name of the HTML attribute.</param> - <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> - <returns>The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToAttribute(System.String,System.String)"> - <summary> - Moves to the HTML attribute with matching LocalName and NamespaceURI. - </summary> - <param name="localName">The local name of the HTML attribute.</param> - <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> - <returns>true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirstAttribute"> - <summary> - Moves to the first HTML attribute. - </summary> - <returns>true if the navigator is successful moving to the first HTML attribute, otherwise, false.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNextAttribute"> - <summary> - Moves to the next HTML attribute. - </summary> - <returns></returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.GetNamespace(System.String)"> - <summary> - Returns the value of the namespace node corresponding to the specified local name. - Always returns string.Empty for the HtmlNavigator implementation. - </summary> - <param name="name">The local name of the namespace node.</param> - <returns>Always returns string.Empty for the HtmlNavigator implementation.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNamespace(System.String)"> - <summary> - Moves the XPathNavigator to the namespace node with the specified local name. - Always returns false for the HtmlNavigator implementation. - </summary> - <param name="name">The local name of the namespace node.</param> - <returns>Always returns false for the HtmlNavigator implementation.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirstNamespace(System.Xml.XPath.XPathNamespaceScope)"> - <summary> - Moves the XPathNavigator to the first namespace node of the current element. - Always returns false for the HtmlNavigator implementation. - </summary> - <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> - <returns>Always returns false for the HtmlNavigator implementation.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNextNamespace(System.Xml.XPath.XPathNamespaceScope)"> - <summary> - Moves the XPathNavigator to the next namespace node. - Always returns falsefor the HtmlNavigator implementation. - </summary> - <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> - <returns>Always returns false for the HtmlNavigator implementation.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.LocalName"> - <summary> - Gets the name of the current HTML node without the namespace prefix. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.NamespaceURI"> - <summary> - Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.Name"> - <summary> - Gets the qualified name of the current node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.Prefix"> - <summary> - Gets the prefix associated with the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.NodeType"> - <summary> - Gets the type of the current node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.Value"> - <summary> - Gets the text value of the current node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.BaseURI"> - <summary> - Gets the base URI for the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.XmlLang"> - <summary> - Gets the xml:lang scope for the current node. - Always returns string.Empty in the case of HtmlNavigator implementation. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.IsEmptyElement"> - <summary> - Gets a value indicating whether the current node is an empty element. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.NameTable"> - <summary> - Gets the XmlNameTable associated with this implementation. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.HasAttributes"> - <summary> - Gets a value indicating whether the current node has child nodes. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.HasChildren"> - <summary> - Gets a value indicating whether the current node has child nodes. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.CurrentNode"> - <summary> - Gets the current HTML node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlNodeNavigator.CurrentDocument"> - <summary> - Gets the current HTML document. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlNodeType"> - <summary> - Represents the type of a node. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNodeType.Document"> - <summary> - The root of a document. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNodeType.Element"> - <summary> - An HTML element. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNodeType.Comment"> - <summary> - An HTML comment. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlNodeType.Text"> - <summary> - A text node is always the child of an element or a document node. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlParseError"> - <summary> - Represents a parsing error found during document parsing. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlParseError.Code"> - <summary> - Gets the type of error. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlParseError.Line"> - <summary> - Gets the line number of this error in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlParseError.LinePosition"> - <summary> - Gets the column number of this error in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlParseError.StreamPosition"> - <summary> - Gets the absolute stream position of this error in the document, relative to the start of the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlParseError.SourceText"> - <summary> - Gets the the full text of the line containing the error. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlParseError.Reason"> - <summary> - Gets a description for the error. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlParseErrorCode"> - <summary> - Represents the type of parsing error. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlParseErrorCode.TagNotClosed"> - <summary> - A tag was not closed. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlParseErrorCode.TagNotOpened"> - <summary> - A tag was not opened. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlParseErrorCode.CharsetMismatch"> - <summary> - There is a charset mismatch between stream and declared (META) encoding. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlParseErrorCode.EndTagNotRequired"> - <summary> - An end tag was not required. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlParseErrorCode.EndTagInvalidHere"> - <summary> - An end tag is invalid at this position. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlTextNode"> - <summary> - Represents an HTML text node. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlTextNode.InnerHtml"> - <summary> - Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlTextNode.OuterHtml"> - <summary> - Gets or Sets the object and its content in HTML. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlTextNode.Text"> - <summary> - Gets or Sets the text of the node. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlWeb"> - <summary> - A utility class to get HTML document from HTTP. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlWeb.PreRequest"> - <summary> - Occurs before an HTTP request is executed. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlWeb.PostResponse"> - <summary> - Occurs after an HTTP request has been executed. - </summary> - </member> - <member name="F:HtmlAgilityPack.HtmlWeb.PreHandleDocument"> - <summary> - Occurs before an HTML document is handled. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.#ctor"> - <summary> - Creates an instance of an HtmlWeb class. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.Get(System.String,System.String)"> - <summary> - Gets an HTML document from an Internet resource and saves it to the specified file. - </summary> - <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="path">The location of the file where you want to save the document.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.Get(System.String,System.String,System.String)"> - <summary> - Gets an HTML document from an Internet resource and saves it to the specified file. - </summary> - <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="path">The location of the file where you want to save the document.</param> - <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.Load(System.String)"> - <summary> - Gets an HTML document from an Internet resource. - </summary> - <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <returns>A new HTML document.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.Load(System.String,System.String)"> - <summary> - Loads an HTML document from an Internet resource. - </summary> - <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> - <returns>A new HTML document.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.GetCachePath(System.Uri)"> - <summary> - Gets the cache file path for a specified url. - </summary> - <param name="uri">The url fo which to retrieve the cache path. May not be null.</param> - <returns>The cache file path.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.GetExtensionForContentType(System.String,System.String)"> - <summary> - Gets the path extension for a given MIME content type. - </summary> - <param name="contentType">The input MIME content type.</param> - <param name="def">The default path extension to return if any error occurs.</param> - <returns>The MIME content type's path extension.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.GetContentTypeForExtension(System.String,System.String)"> - <summary> - Gets the MIME content type for a given path extension. - </summary> - <param name="extension">The input path extension.</param> - <param name="def">The default content type to return if any error occurs.</param> - <returns>The path extention's MIME content type.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.LoadHtmlAsXml(System.String,System.Xml.XmlTextWriter)"> - <summary> - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. - </summary> - <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="writer">The XmlTextWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.LoadHtmlAsXml(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlTextWriter)"> - <summary> - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - </summary> - <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - <param name="writer">The XmlTextWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.LoadHtmlAsXml(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlTextWriter,System.String)"> - <summary> - Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - </summary> - <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null.</param> - <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - <param name="writer">The XmlTextWriter to which you want to save.</param> - <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.CreateInstance(System.String,System.Type)"> - <summary> - Creates an instance of the given type from the specified Internet resource. - </summary> - <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="type">The requested type.</param> - <returns>An newly created instance.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.CreateInstance(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Type)"> - <summary> - Creates an instance of the given type from the specified Internet resource. - </summary> - <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - <param name="type">The requested type.</param> - <returns>An newly created instance.</returns> - </member> - <member name="M:HtmlAgilityPack.HtmlWeb.CreateInstance(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Type,System.String)"> - <summary> - Creates an instance of the given type from the specified Internet resource. - </summary> - <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - <param name="type">The requested type.</param> - <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> - <returns>An newly created instance.</returns> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.FromCache"> - <summary> - Gets a value indicating if the last document was retrieved from the cache. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.ResponseUri"> - <summary> - Gets the URI of the Internet resource that actually responded to the request. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.CacheOnly"> - <summary> - Gets or Sets a value indicating whether to get document only from the cache. - If this is set to true and document is not found in the cache, nothing will be loaded. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.UseCookies"> - <summary> - Gets or Sets a value indicating if cookies will be stored. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.RequestDuration"> - <summary> - Gets the last request duration in milliseconds. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.AutoDetectEncoding"> - <summary> - Gets or Sets a value indicating if document encoding must be automatically detected. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.StatusCode"> - <summary> - Gets the last request status. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.StreamBufferSize"> - <summary> - Gets or Sets the size of the buffer used for memory operations. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.CachePath"> - <summary> - Gets or Sets the cache path. If null, no caching mechanism will be used. - </summary> - </member> - <member name="P:HtmlAgilityPack.HtmlWeb.UsingCache"> - <summary> - Gets or Sets a value indicating whether the caching mechanisms should be used or not. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlWeb.PreRequestHandler"> - <summary> - Represents the method that will handle the PreRequest event. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlWeb.PostResponseHandler"> - <summary> - Represents the method that will handle the PostResponse event. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlWeb.PreHandleDocumentHandler"> - <summary> - Represents the method that will handle the PreHandleDocument event. - </summary> - </member> - <member name="T:HtmlAgilityPack.HtmlWebException"> - <summary> - Represents an exception thrown by the HtmlWeb utility class. - </summary> - </member> - <member name="M:HtmlAgilityPack.HtmlWebException.#ctor(System.String)"> - <summary> - Creates an instance of the HtmlWebException. - </summary> - <param name="message">The exception's message.</param> - </member> - <member name="T:HtmlAgilityPack.MixedCodeDocument"> - <summary> - Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. - </summary> - </member> - <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenCodeStart"> - <summary> - Gets or sets the token representing code start. - </summary> - </member> - <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenCodeEnd"> - <summary> - Gets or sets the token representing code end. - </summary> - </member> - <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenDirective"> - <summary> - Gets or sets the token representing code directive. - </summary> - </member> - <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenResponseWrite"> - <summary> - Gets or sets the token representing response write directive. - </summary> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.#ctor"> - <summary> - Creates a mixed code document instance. - </summary> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream)"> - <summary> - Loads a mixed code document from a stream. - </summary> - <param name="stream">The input stream.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Boolean)"> - <summary> - Loads a mixed code document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Text.Encoding)"> - <summary> - Loads a mixed code document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean)"> - <summary> - Loads a mixed code document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32)"> - <summary> - Loads a mixed code document from a stream. - </summary> - <param name="stream">The input stream.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - <param name="buffersize">The minimum buffer size.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String)"> - <summary> - Loads a mixed code document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Boolean)"> - <summary> - Loads a mixed code document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Text.Encoding)"> - <summary> - Loads a mixed code document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="encoding">The character encoding to use.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Text.Encoding,System.Boolean)"> - <summary> - Loads a mixed code document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Text.Encoding,System.Boolean,System.Int32)"> - <summary> - Loads a mixed code document from a file. - </summary> - <param name="path">The complete file path to be read.</param> - <param name="encoding">The character encoding to use.</param> - <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - <param name="buffersize">The minimum buffer size.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.LoadHtml(System.String)"> - <summary> - Loads a mixed document from a text - </summary> - <param name="html">The text to load.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.TextReader)"> - <summary> - Loads the mixed code document from the specified TextReader. - </summary> - <param name="reader">The TextReader used to feed the HTML data into the document.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.Stream)"> - <summary> - Saves the mixed document to the specified stream. - </summary> - <param name="outStream">The stream to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.Stream,System.Text.Encoding)"> - <summary> - Saves the mixed document to the specified stream. - </summary> - <param name="outStream">The stream to which you want to save.</param> - <param name="encoding">The character encoding to use.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.String)"> - <summary> - Saves the mixed document to the specified file. - </summary> - <param name="filename">The location of the file where you want to save the document.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.String,System.Text.Encoding)"> - <summary> - Saves the mixed document to the specified file. - </summary> - <param name="filename">The location of the file where you want to save the document.</param> - <param name="encoding">The character encoding to use.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.StreamWriter)"> - <summary> - Saves the mixed document to the specified StreamWriter. - </summary> - <param name="writer">The StreamWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.TextWriter)"> - <summary> - Saves the mixed document to the specified TextWriter. - </summary> - <param name="writer">The TextWriter to which you want to save.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.CreateTextFragment"> - <summary> - Create a text fragment instances. - </summary> - <returns>The newly created text fragment instance.</returns> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocument.CreateCodeFragment"> - <summary> - Create a code fragment instances. - </summary> - <returns>The newly created code fragment instance.</returns> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocument.StreamEncoding"> - <summary> - Gets the encoding of the stream used to read the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocument.CodeFragments"> - <summary> - Gets the list of code fragments in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocument.TextFragments"> - <summary> - Gets the list of text fragments in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocument.Fragments"> - <summary> - Gets the list of all fragments in the document. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocument.Code"> - <summary> - Gets the code represented by the mixed code document seen as a template. - </summary> - </member> - <member name="T:HtmlAgilityPack.MixedCodeDocumentCodeFragment"> - <summary> - Represents a fragment of code in a mixed code document. - </summary> - </member> - <member name="T:HtmlAgilityPack.MixedCodeDocumentFragment"> - <summary> - Represents a base class for fragments in a mixed code document. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.FragmentType"> - <summary> - Gets the type of fragment. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.StreamPosition"> - <summary> - Gets the fragment position in the document's stream. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.Line"> - <summary> - Gets the line number of the fragment. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.LinePosition"> - <summary> - Gets the line position (column) of the fragment. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.FragmentText"> - <summary> - Gets the fragement text. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentCodeFragment.Code"> - <summary> - Gets the fragment code text. - </summary> - </member> - <member name="T:HtmlAgilityPack.MixedCodeDocumentFragmentList"> - <summary> - Represents a list of mixed code fragments. - </summary> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.Append(HtmlAgilityPack.MixedCodeDocumentFragment)"> - <summary> - Appends a fragment to the list of fragments. - </summary> - <param name="newFragment">The fragment to append. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.Prepend(HtmlAgilityPack.MixedCodeDocumentFragment)"> - <summary> - Prepends a fragment to the list of fragments. - </summary> - <param name="newFragment">The fragment to append. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.Remove(HtmlAgilityPack.MixedCodeDocumentFragment)"> - <summary> - Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. - </summary> - <param name="fragment">The fragment to remove. May not be null.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.RemoveAt(System.Int32)"> - <summary> - Remove a fragment from the list of fragments, using its index in the list. - </summary> - <param name="index">The index of the fragment to remove.</param> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.RemoveAll"> - <summary> - Remove all fragments from the list. - </summary> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.GetEnumerator"> - <summary> - Gets an enumerator that can iterate through the fragment list. - </summary> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.System#Collections#IEnumerable#GetEnumerator"> - <summary> - Gets an enumerator that can iterate through the fragment list. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.Count"> - <summary> - Gets the number of fragments contained in the list. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.Item(System.Int32)"> - <summary> - Gets a fragment from the list using its index. - </summary> - </member> - <member name="T:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator"> - <summary> - Represents a fragment enumerator. - </summary> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.Reset"> - <summary> - Sets the enumerator to its initial position, which is before the first element in the collection. - </summary> - </member> - <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.MoveNext"> - <summary> - Advances the enumerator to the next element of the collection. - </summary> - <returns>true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.</returns> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.Current"> - <summary> - Gets the current element in the collection. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.System#Collections#IEnumerator#Current"> - <summary> - Gets the current element in the collection. - </summary> - </member> - <member name="T:HtmlAgilityPack.MixedCodeDocumentFragmentType"> - <summary> - Represents the type of fragement in a mixed code document. - </summary> - </member> - <member name="F:HtmlAgilityPack.MixedCodeDocumentFragmentType.Code"> - <summary> - The fragment contains code. - </summary> - </member> - <member name="F:HtmlAgilityPack.MixedCodeDocumentFragmentType.Text"> - <summary> - The fragment contains text. - </summary> - </member> - <member name="T:HtmlAgilityPack.MixedCodeDocumentTextFragment"> - <summary> - Represents a fragment of text in a mixed code document. - </summary> - </member> - <member name="P:HtmlAgilityPack.MixedCodeDocumentTextFragment.Text"> - <summary> - Gets the fragment text. - </summary> - </member> - <member name="T:JSBeautifyLib.JSBeautifyOptions"> - <summary> - JSBeautifyOptions - </summary> - </member> - <member name="P:JSBeautifyLib.JSBeautifyOptions.indent_size"> - <summary> - indent_size - </summary> - </member> - <member name="P:JSBeautifyLib.JSBeautifyOptions.indent_char"> - <summary> - indent_char - </summary> - </member> - <member name="P:JSBeautifyLib.JSBeautifyOptions.indent_level"> - <summary> - indent_level - </summary> - </member> - <member name="P:JSBeautifyLib.JSBeautifyOptions.preserve_newlines"> - <summary> - preserve_newlines - </summary> - </member> - <member name="T:JSBeautifyLib.JSBeautify"> - <summary> - JSBeautify - </summary> - </member> - <member name="M:JSBeautifyLib.JSBeautify.GetResult"> - <summary> - GetResult - </summary> - <returns></returns> - </member> - <member name="M:JSBeautifyLib.JSBeautify.#ctor(System.String,JSBeautifyLib.JSBeautifyOptions)"> - <summary> - JSBeautify - </summary> - <param name="js_source_text"></param> - <param name="options"></param> - </member> - <member name="T:FineUI.ToolbarCollection"> - <summary> - 工具条控件集合 - </summary> - </member> - <member name="M:FineUI.ToolbarCollection.#ctor(FineUI.PanelBase)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.MenuCheckBox"> - <summary> - 菜单项复选框控件(单选框) - </summary> - </member> - <member name="T:FineUI.MenuItem"> - <summary> - 菜单项控件基类(抽象类) - </summary> - </member> - <member name="T:FineUI.BaseMenuItem"> - <summary> - 菜单项控件基类(抽象类) - </summary> - </member> - <member name="M:FineUI.BaseMenuItem.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.BaseMenuItem.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.MenuItem.CreateChildControls"> - <summary> - 添加子控件 - </summary> - </member> - <member name="M:FineUI.MenuItem.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.MenuItem.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.MenuItem.HideOnClick"> - <summary> - 点击时隐藏菜单,可以配合使用CssStyle=cursor:default; - </summary> - </member> - <member name="P:FineUI.MenuItem.IconUrl"> - <summary> - 图标地址 - </summary> - </member> - <member name="P:FineUI.MenuItem.Icon"> - <summary> - 预定义图标 - </summary> - </member> - <member name="P:FineUI.MenuItem.Text"> - <summary> - 文本 - </summary> - </member> - <member name="P:FineUI.MenuItem.Menu"> - <summary> - 上下文菜单 - </summary> - </member> - <member name="M:FineUI.MenuCheckBox.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.MenuCheckBox.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.MenuCheckBox.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.MenuCheckBox.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.MenuCheckBox.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.MenuCheckBox.OnCheckedChanged(FineUI.CheckedEventArgs)"> - <summary> - 触发复选框状态改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.MenuCheckBox.GroupName"> - <summary> - 分组名(如果指定分组名,则此控件被渲染为单选框) - </summary> - </member> - <member name="P:FineUI.MenuCheckBox.Checked"> - <summary> - [AJAX属性]是否选中 - </summary> - </member> - <member name="P:FineUI.MenuCheckBox.AutoPostBack"> - <summary> - 是否自动回发 - </summary> - </member> - <member name="E:FineUI.MenuCheckBox.CheckedChanged"> - <summary> - 复选框状态改变事件(需要启用AutoPostBack) - </summary> - </member> - <member name="T:FineUI.Timer"> - <summary> - 定时器控件 - </summary> - </member> - <member name="M:FineUI.Timer.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Timer.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Timer.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Timer.GetEnabledPropertyChangedScript"> - <summary> - 获取 Hidden 属性改变的 JavaScript 脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Timer.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.Timer.OnTick(System.EventArgs)"> - <summary> - 触发定时事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.Timer.Interval"> - <summary> - 定时间隔(单位:秒) - </summary> - </member> - <member name="E:FineUI.Timer.Tick"> - <summary> - 定时事件 - </summary> - </member> - <member name="T:FineUI.TooltipField"> - <summary> - 支持提示的表单字段基类(抽象类) - </summary> - </member> - <member name="M:FineUI.TooltipField.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.TooltipField.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TooltipField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.TooltipField.ResolveTooltip(FineUI.HtmlNodeBuilder)"> - <summary> - 添加提示信息 - </summary> - <param name="htmlBuilder">HtmlNodeBuilder实例</param> - </member> - <member name="P:FineUI.TooltipField.ToolTip"> - <summary> - [AJAX属性]提示文本 - </summary> - </member> - <member name="P:FineUI.TooltipField.ToolTipTitle"> - <summary> - [AJAX属性]提示文本的标题 - </summary> - </member> - <member name="P:FineUI.TooltipField.ToolTipAutoHide"> - <summary> - [AJAX属性]是否自动隐藏提示信息 - </summary> - </member> - <member name="T:FineUI.UserControlConnector"> - <summary> - 用户控件的容器 - </summary> - </member> - <member name="M:FineUI.UserControlConnector.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.UserControlConnector.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.UserControlConnector.GetFirstChildUserControl(System.Web.UI.ControlCollection)"> - <summary> - 取得第一个子控件 - </summary> - <param name="controls"></param> - <returns></returns> - </member> - <member name="T:FineUI.RadioItem"> - <summary> - 单项按钮项 - </summary> - </member> - <member name="M:FineUI.RadioItem.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.RadioItem.#ctor(System.String,System.String)"> - <summary> - 构造函数 - </summary> - <param name="text">文本</param> - <param name="value">值</param> - </member> - <member name="P:FineUI.RadioItem.Selected"> - <summary> - 是否选中 - </summary> - </member> - <member name="P:FineUI.RadioItem.Text"> - <summary> - 显示的文本 - </summary> - </member> - <member name="P:FineUI.RadioItem.Value"> - <summary> - 值 - </summary> - </member> - <member name="T:FineUI.RadioItemCollection"> - <summary> - 单选项集合 - </summary> - </member> - <member name="M:FineUI.RadioItemCollection.FindByText(System.String)"> - <summary> - 通过文本查找单选项 - </summary> - <param name="text">文本</param> - <returns>单选项</returns> - </member> - <member name="M:FineUI.RadioItemCollection.FindByText(System.String,System.Boolean)"> - <summary> - 通过文本查找单选项 - </summary> - <param name="text">文本</param> - <param name="stripHtml">是否去除HTML标签</param> - <returns>单选项</returns> - </member> - <member name="M:FineUI.RadioItemCollection.FindByValue(System.String)"> - <summary> - 通过值查找单选项 - </summary> - <param name="value">值</param> - <returns>单选项</returns> - </member> - <member name="M:FineUI.RadioItemCollection.Add(System.String,System.String)"> - <summary> - 添加单选项 - </summary> - <param name="text">文本</param> - <param name="value">值</param> - <returns>新元素的插入位置</returns> - </member> - <member name="T:FineUI.Confirm"> - <summary> - 确认对话框帮助类(静态类) - </summary> - </member> - <member name="F:FineUI.Confirm.DefaultIcon"> - <summary> - 确认对话框默认图标 - </summary> - </member> - <member name="M:FineUI.Confirm.Show(System.String)"> - <summary> - 显示消息框 - </summary> - <param name="message"></param> - </member> - <member name="M:FineUI.Confirm.Show(System.String,System.String)"> - <summary> - 显示消息框 - </summary> - <param name="message"></param> - <param name="title"></param> - </member> - <member name="M:FineUI.Confirm.Show(System.String,FineUI.MessageBoxIcon)"> - <summary> - 显示消息框 - </summary> - <param name="message"></param> - <param name="icon"></param> - </member> - <member name="M:FineUI.Confirm.Show(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 显示消息框 - </summary> - <param name="message"></param> - <param name="title"></param> - <param name="icon"></param> - </member> - <member name="M:FineUI.Confirm.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取显示确认对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Confirm.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,System.String)"> - <summary> - 获取显示确认对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">对话框图标</param> - <param name="okScriptstring">点击确定按钮执行的客户端脚本</param> - <param name="cancelScript">点击取消按钮执行的客户端脚本</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Confirm.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,System.String,FineUI.Target)"> - <summary> - 获取显示确认对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <param name="cancelScript">点击取消按钮执行的客户端脚本</param> - <param name="target">弹出对话框的目标页面</param> - <returns>客户端脚本</returns> - </member> - <member name="T:FineUI.ActiveWindow"> - <summary> - 当前活动窗体帮助类(静态类) - </summary> - </member> - <member name="M:FineUI.ActiveWindow.GetWriteBackValueReference(System.String[])"> - <summary> - 获取将values值写回控件的客户端脚本 - </summary> - <param name="values">需要写回的字符串列表</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetHideReference"> - <summary> - 获取关闭当前激活窗体的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetHideRefreshReference"> - <summary> - 获取关闭当前激活窗体并刷新父页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetHidePostBackReference"> - <summary> - 获取关闭当前激活窗体并回发父页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetHidePostBackReference(System.String)"> - <summary> - 获取关闭当前激活窗体并回发父页面的客户端脚本 - </summary> - <param name="argument">回发参数</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetConfirmHideReference"> - <summary> - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetConfirmHideRefreshReference"> - <summary> - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再刷新父页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetConfirmHidePostBackReference"> - <summary> - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.ActiveWindow.GetConfirmHidePostBackReference(System.String)"> - <summary> - 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 - </summary> - <param name="argument">回发参数</param> - <returns>客户端脚本</returns> - </member> - <member name="T:FineUI.MenuButton"> - <summary> - 菜单项按钮控件 - </summary> - </member> - <member name="M:FineUI.MenuButton.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.MenuButton.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.MenuButton.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.MenuButton.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.MenuButton.OnClick(System.EventArgs)"> - <summary> - 触发按钮点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.MenuButton.EnablePostBack"> - <summary> - 是否可以回发 - </summary> - </member> - <member name="P:FineUI.MenuButton.OnClientClick"> - <summary> - 点击按钮时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.MenuButton.ValidateForms"> - <summary> - 提交之前需要验证的表单名称列表 - </summary> - </member> - <member name="P:FineUI.MenuButton.ValidateTarget"> - <summary> - 验证失败时提示对话框弹出位置 - </summary> - </member> - <member name="P:FineUI.MenuButton.ValidateMessageBox"> - <summary> - 验证失败时是否出现提示对话框 - </summary> - </member> - <member name="P:FineUI.MenuButton.ConfirmTitle"> - <summary> - 确认对话框标题 - </summary> - </member> - <member name="P:FineUI.MenuButton.ConfirmText"> - <summary> - 确认对话框内容 - </summary> - </member> - <member name="P:FineUI.MenuButton.ConfirmIcon"> - <summary> - 确认对话框提示图标 - </summary> - </member> - <member name="P:FineUI.MenuButton.ConfirmTarget"> - <summary> - 确认对话框弹出位置 - </summary> - </member> - <member name="E:FineUI.MenuButton.Click"> - <summary> - 按钮点击事件 - </summary> - </member> - <member name="T:FineUI.MenuText"> - <summary> - 菜单项文本控件 - </summary> - </member> - <member name="M:FineUI.MenuText.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.MenuText.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.MenuText.Text"> - <summary> - 文本 - </summary> - </member> - <member name="T:FineUI.MenuSeparator"> - <summary> - 菜单项分隔符控件 - </summary> - </member> - <member name="M:FineUI.MenuSeparator.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.MenuSeparator.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.MenuHyperLink"> - <summary> - 菜单项超链接控件 - </summary> - </member> - <member name="M:FineUI.MenuHyperLink.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.MenuHyperLink.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.MenuHyperLink.NavigateUrl"> - <summary> - 链接地址 - </summary> - </member> - <member name="P:FineUI.MenuHyperLink.Target"> - <summary> - 链接目标 - </summary> - </member> - <member name="T:FineUI.MenuItemCollection"> - <summary> - 菜单项控件集合 - </summary> - </member> - <member name="M:FineUI.MenuItemCollection.#ctor(FineUI.Menu)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.SplitButton"> - <summary> - 带下拉列表的按钮 - </summary> - </member> - <member name="T:FineUI.Button"> - <summary> - 按钮控件 - </summary> - </member> - <member name="M:FineUI.Button.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Button.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Button.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Button.ResolveClientScript(System.String[],FineUI.Target,System.Boolean,System.Boolean,System.String,System.String,System.String,FineUI.MessageBoxIcon,FineUI.Target,System.String,System.String)"> - <summary> - 获取按钮客户端点击事件的脚本 - </summary> - <param name="validateForms">验证表单列表</param> - <param name="validateTarget">表单验证提示消息目标页面</param> - <param name="validateMessageBox">是否显示表单验证提示对话框</param> - <param name="enablePostBack">启用回发</param> - <param name="postBackEventReference">回发脚本</param> - <param name="confirmText">确认对话框消息</param> - <param name="confirmTitle">确认对话框标题</param> - <param name="confirmIcon">确认对话框图标</param> - <param name="confirmTarget">确认对话框目标页面</param> - <param name="onClientClick">自定义客户端点击脚本</param> - <param name="disableControlJavascriptID">需要禁用的控件客户端ID</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Button.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.Button.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.Button.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.Button.OnClick(System.EventArgs)"> - <summary> - 触发按钮点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.Button.DisableControlBeforePostBack"> - <summary> - 回发之前禁用按钮(防止重复提交) - </summary> - </member> - <member name="P:FineUI.Button.EnablePostBack"> - <summary> - 是否可以回发 - </summary> - </member> - <member name="P:FineUI.Button.Pressed"> - <summary> - [AJAX属性]是否被按下 - </summary> - </member> - <member name="P:FineUI.Button.EnablePress"> - <summary> - 是否可以按下 - </summary> - </member> - <member name="P:FineUI.Button.OnClientClick"> - <summary> - [AJAX属性]点击按钮时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.Button.Icon"> - <summary> - [AJAX属性]预定义图标 - </summary> - </member> - <member name="P:FineUI.Button.Size"> - <summary> - 按钮的大小 - </summary> - </member> - <member name="P:FineUI.Button.IconUrl"> - <summary> - 图标地址 - </summary> - </member> - <member name="P:FineUI.Button.IconAlign"> - <summary> - 图标摆放位置 - </summary> - </member> - <member name="P:FineUI.Button.Text"> - <summary> - [AJAX属性]按钮文本 - </summary> - </member> - <member name="P:FineUI.Button.ToolTip"> - <summary> - [AJAX属性]提示文本 - </summary> - </member> - <member name="P:FineUI.Button.ToolTipType"> - <summary> - 提示文本类型 - </summary> - </member> - <member name="P:FineUI.Button.TabIndex"> - <summary> - Tab键索引 - </summary> - </member> - <member name="P:FineUI.Button.Type"> - <summary> - 按钮类型 - </summary> - </member> - <member name="P:FineUI.Button.ValidateForms"> - <summary> - 需要验证的表单名称列表(逗号分隔) - </summary> - </member> - <member name="P:FineUI.Button.ValidateTarget"> - <summary> - 验证失败时提示对话框弹出位置 - </summary> - </member> - <member name="P:FineUI.Button.ValidateMessageBox"> - <summary> - 验证失败时是否出现提示对话框 - </summary> - </member> - <member name="P:FineUI.Button.ConfirmTitle"> - <summary> - [AJAX属性]确认对话框标题 - </summary> - </member> - <member name="P:FineUI.Button.ConfirmText"> - <summary> - [AJAX属性]确认对话框内容 - </summary> - </member> - <member name="P:FineUI.Button.ConfirmIcon"> - <summary> - [AJAX属性]确认对话框提示图标 - </summary> - </member> - <member name="P:FineUI.Button.ConfirmTarget"> - <summary> - [AJAX属性]确认对话框弹出位置 - </summary> - </member> - <member name="P:FineUI.Button.Menu"> - <summary> - 按钮的上下文菜单 - </summary> - </member> - <member name="E:FineUI.Button.Click"> - <summary> - 按钮点击事件 - </summary> - </member> - <member name="M:FineUI.SplitButton.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.SplitButton.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.Menu"> - <summary> - 菜单控件 - </summary> - </member> - <member name="M:FineUI.Menu.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Menu.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.Menu.Items"> - <summary> - 菜单项集合 - </summary> - </member> - <member name="T:FineUI.PageManager"> - <summary> - 页面配置管理器(每个页面必须包含一个 PageManager 控件) - </summary> - </member> - <member name="M:FineUI.PageManager.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的开始标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.PageManager.RenderEndTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的结束标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.PageManager.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.PageManager.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.PageManager.RegisterOnAjaxPostBack(System.String,System.String)"> - <summary> - Used by FCKeditor, Add script before ajax postback. - </summary> - <param name="key"></param> - <param name="script"></param> - </member> - <member name="P:FineUI.PageManager.Enabled"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.PageManager.Hidden"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.PageManager.Visible"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.PageManager.HideMode"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.PageManager.AutoSizePanelID"> - <summary> - 自动调整此容器的宽度和高度,以填充整个页面 - </summary> - </member> - <member name="P:FineUI.PageManager.HideScrollbar"> - <summary> - 是否隐藏滚动条 - </summary> - </member> - <member name="P:FineUI.PageManager.HideScrollbars"> - <summary> - 是否隐藏滚动条 - </summary> - </member> - <member name="P:FineUI.PageManager.ExecuteOnReadyWhenPostBack"> - <summary> - 每次页面回发后总是执行onReady脚本(包括Ajax局部回发) - </summary> - </member> - <member name="P:FineUI.PageManager.EnablePageLoading"> - <summary> - 是否启用页面加载标示 - </summary> - </member> - <member name="P:FineUI.PageManager.AjaxAspnetControls"> - <summary> - 需要在AJAX回发时更新的Asp.net控件列表(逗号分隔) - </summary> - </member> - <member name="P:FineUI.PageManager.AjaxGridClientIDs"> - <summary> - 本次AJAX请求过程中需要更新TemplateField的表格 - </summary> - </member> - <member name="P:FineUI.PageManager.AjaxGridReloadedClientIDs"> - <summary> - 本次AJAX请求过程中重新加载的表格 - </summary> - </member> - <member name="P:FineUI.PageManager.Theme"> - <summary> - 样式 - </summary> - </member> - <member name="P:FineUI.PageManager.CustomThemeBasePath"> - <summary> - 自定义样式的根路径 - </summary> - </member> - <member name="P:FineUI.PageManager.CustomTheme"> - <summary> - 自定义样式的名称 - </summary> - </member> - <member name="P:FineUI.PageManager.Language"> - <summary> - 语言 - </summary> - </member> - <member name="P:FineUI.PageManager.EnableAjax"> - <summary> - 是否启用Ajax - </summary> - </member> - <member name="P:FineUI.PageManager.EnableAjaxLoading"> - <summary> - 是否启用Ajax正在加载提示 - </summary> - </member> - <member name="P:FineUI.PageManager.AjaxLoadingType"> - <summary> - Ajax正在加载提示的类型 - </summary> - </member> - <member name="P:FineUI.PageManager.AjaxTimeout"> - <summary> - Ajax超时时间(单位:秒,默认:60秒) - </summary> - </member> - <member name="P:FineUI.PageManager.EnableXStateCompress"> - <summary> - 是否启用XState压缩(默认为true) - </summary> - </member> - <member name="P:FineUI.PageManager.FormMessageTarget"> - <summary> - 表单中消息的位置 - </summary> - </member> - <member name="P:FineUI.PageManager.FormLabelAlign"> - <summary> - 表单中标签的位置 - </summary> - </member> - <member name="P:FineUI.PageManager.FormOffsetRight"> - <summary> - 表单中右侧的空白宽度 - </summary> - </member> - <member name="P:FineUI.PageManager.FormLabelWidth"> - <summary> - 表单中字段标签的宽度 - </summary> - </member> - <member name="P:FineUI.PageManager.FormLabelSeparator"> - <summary> - 表单中字段与标签的分隔符 - </summary> - </member> - <member name="P:FineUI.PageManager.PageLoadingControlExist"> - <summary> - PageLoading控件是否存在页面 - </summary> - </member> - <member name="P:FineUI.PageManager.Instance"> - <summary> - PageManager在当前页面的实例 - </summary> - </member> - <member name="T:FineUI.Image"> - <summary> - 图片控件 - </summary> - </member> - <member name="M:FineUI.Image.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Image.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Image.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.Image.Enabled"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Image.TabIndex"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Image.ImageUrl"> - <summary> - [AJAX属性]链接地址 - </summary> - </member> - <member name="P:FineUI.Image.Icon"> - <summary> - [AJAX属性]预定义图标 - </summary> - </member> - <member name="P:FineUI.Image.ImageWidth"> - <summary> - [AJAX属性]图片的宽度 - </summary> - </member> - <member name="P:FineUI.Image.ImageHeight"> - <summary> - [AJAX属性]图片的高度 - </summary> - </member> - <member name="P:FineUI.Image.ImageCssClass"> - <summary> - [AJAX属性]图片的样式类 - </summary> - </member> - <member name="P:FineUI.Image.ImageCssStyle"> - <summary> - [AJAX属性]图片的样式 - </summary> - </member> - <member name="P:FineUI.Image.ImageAlt"> - <summary> - [AJAX属性]图片的Alt - </summary> - </member> - <member name="T:FineUI.FileUpload"> - <summary> - 文件上传控件 - </summary> - </member> - <member name="M:FineUI.FileUpload.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.FileUpload.SaveAs(System.String)"> - <summary> - 将上载文件的内容保存到 Web 服务器上的指定路径 - </summary> - <param name="filename">保存的文件的名称</param> - </member> - <member name="M:FineUI.FileUpload.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.FileUpload.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.FileUpload.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.FileUpload.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.FileUpload.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.FileUpload.OnFileSelected(System.EventArgs)"> - <summary> - 触发文件选定事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.FileUpload.Text"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.FileUpload.ButtonText"> - <summary> - 按钮文本 - </summary> - </member> - <member name="P:FineUI.FileUpload.ButtonOnly"> - <summary> - 是否只显示按钮,不显示只读输入框 - </summary> - </member> - <member name="P:FineUI.FileUpload.ButtonIcon"> - <summary> - 按钮图标 - </summary> - </member> - <member name="P:FineUI.FileUpload.ButtonIconUrl"> - <summary> - 按钮图标地址 - </summary> - </member> - <member name="P:FineUI.FileUpload.PostedFile"> - <summary> - 上传的文件 - </summary> - </member> - <member name="P:FineUI.FileUpload.HasFile"> - <summary> - 是否包含文件 - </summary> - </member> - <member name="P:FineUI.FileUpload.FileName"> - <summary> - 客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名) - </summary> - </member> - <member name="P:FineUI.FileUpload.ShortFileName"> - <summary> - 客户端文件名称,不包含目录路径 - </summary> - </member> - <member name="E:FineUI.FileUpload.FileSelected"> - <summary> - 文件选定事件(需要启用AutoPostBack) - </summary> - </member> - <member name="T:FineUI.HiddenField"> - <summary> - 隐藏表单控件 - </summary> - </member> - <member name="M:FineUI.HiddenField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.TwinTriggerBox"> - <summary> - 扩展文本框控件 - </summary> - </member> - <member name="M:FineUI.TwinTriggerBox.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.TwinTriggerBox.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TwinTriggerBox.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.TwinTriggerBox.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.TwinTriggerBox.OnTrigger1Click(System.EventArgs)"> - <summary> - 触发第一个触发按钮点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.TwinTriggerBox.OnTrigger2Click(System.EventArgs)"> - <summary> - 触发第二个触发按钮点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.TwinTriggerBox.EnableEdit"> - <summary> - 是否允许编辑 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.ShowTrigger"> - <summary> - 是否显示触发器 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.ShowTrigger1"> - <summary> - [AJAX属性]是否显示第一个触发器 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.ShowTrigger2"> - <summary> - [AJAX属性]是否显示第一个触发器 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.EnableTrigger1PostBack"> - <summary> - 是否可以回发第一个触发器 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.EnableTrigger2PostBack"> - <summary> - 是否可以回发第一个触发器 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.Trigger1IconUrl"> - <summary> - 第一个触发器图片 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.Trigger2IconUrl"> - <summary> - 第二个触发器图片 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.Trigger1Icon"> - <summary> - 第一个触发器图片 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.Trigger2Icon"> - <summary> - 第二个触发器图片 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.OnClientTrigger1Click"> - <summary> - 点击第一个触发器时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.TwinTriggerBox.OnClientTrigger2Click"> - <summary> - 点击第二个触发器时需要执行的客户端脚本 - </summary> - </member> - <member name="E:FineUI.TwinTriggerBox.Trigger1Click"> - <summary> - 第一个触发按钮点击事件 - </summary> - </member> - <member name="E:FineUI.TwinTriggerBox.Trigger2Click"> - <summary> - 第二个触发按钮点击事件 - </summary> - </member> - <member name="T:FineUI.LinkButton"> - <summary> - 链接按钮控件 - </summary> - </member> - <member name="M:FineUI.LinkButton.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.LinkButton.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.LinkButton.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.LinkButton.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.LinkButton.OnClick(System.EventArgs)"> - <summary> - 触发按钮点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.LinkButton.Text"> - <summary> - [AJAX属性]文本 - </summary> - </member> - <member name="P:FineUI.LinkButton.OnClientClick"> - <summary> - [AJAX属性]点击按钮时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.LinkButton.ValidateForms"> - <summary> - 提交之前需要验证的表单名称列表 - </summary> - </member> - <member name="P:FineUI.LinkButton.ValidateTarget"> - <summary> - 验证失败时提示对话框弹出位置 - </summary> - </member> - <member name="P:FineUI.LinkButton.ValidateMessageBox"> - <summary> - 验证失败时是否出现提示对话框 - </summary> - </member> - <member name="P:FineUI.LinkButton.EnablePostBack"> - <summary> - 是否可以回发 - </summary> - </member> - <member name="P:FineUI.LinkButton.EncodeText"> - <summary> - 是否对文本编码 - </summary> - </member> - <member name="P:FineUI.LinkButton.ConfirmTitle"> - <summary> - [AJAX属性]确认对话框标题 - </summary> - </member> - <member name="P:FineUI.LinkButton.ConfirmText"> - <summary> - [AJAX属性]确认对话框内容 - </summary> - </member> - <member name="P:FineUI.LinkButton.ConfirmIcon"> - <summary> - [AJAX属性]确认对话框提示图标 - </summary> - </member> - <member name="P:FineUI.LinkButton.ConfirmTarget"> - <summary> - [AJAX属性]确认对话框弹出位置 - </summary> - </member> - <member name="E:FineUI.LinkButton.Click"> - <summary> - 按钮点击事件 - </summary> - </member> - <member name="T:FineUI.RadioButtonList"> - <summary> - 单选框列表控件 - </summary> - </member> - <member name="M:FineUI.RadioButtonList.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.RadioButtonList.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.RadioButtonList.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.RadioButtonList.DataBind"> - <summary> - 绑定到数据源 - </summary> - </member> - <member name="M:FineUI.RadioButtonList.DataBindToDataTable(System.Data.DataTable)"> - <summary> - 绑定到数据表 - </summary> - <param name="dataTable"></param> - </member> - <member name="M:FineUI.RadioButtonList.DataBindToEnumerable(System.Collections.IEnumerable)"> - <summary> - 绑定到可枚举列表 - </summary> - <param name="enumerable"></param> - </member> - <member name="M:FineUI.RadioButtonList.GetPropertyValue(System.Object,System.String)"> - <summary> - 取得属性值 - </summary> - <param name="obj"></param> - <param name="propertyName"></param> - </member> - <member name="M:FineUI.RadioButtonList.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.RadioButtonList.OnSelectedIndexChanged(System.EventArgs)"> - <summary> - 触发选中项改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.RadioButtonList.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.Required"> - <summary> - 是否必填项 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.RequiredMessage"> - <summary> - 为空时提示信息 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.AutoPostBack"> - <summary> - 是否自动回发 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.ColumnNumber"> - <summary> - 渲染成几列 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.ColumnVertical"> - <summary> - 是否按照纵向顺序渲染 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.DataTextField"> - <summary> - 显示文本的数据字段 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.DataTextFormatString"> - <summary> - 显示文本的格式化字符串 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.DataValueField"> - <summary> - 显示值的数据字段 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.DataSource"> - <summary> - 数据源 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.SelectedValue"> - <summary> - [AJAX属性]选中项的值 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.SelectedIndex"> - <summary> - [AJAX属性]选中项的索引 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.SelectedItem"> - <summary> - 选中项 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.Items"> - <summary> - 单选项集合 - </summary> - </member> - <member name="P:FineUI.RadioButtonList.X_Items"> - <summary> - 保存的单选项数据(内部使用) - </summary> - </member> - <member name="E:FineUI.RadioButtonList.SelectedIndexChanged"> - <summary> - 选中项改变事件(需要启用AutoPostBack) - </summary> - </member> - <member name="T:FineUI.RadioButton"> - <summary> - 单选框控件 - </summary> - </member> - <member name="M:FineUI.RadioButton.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.RadioButton.ProcessOthersInGroup"> - <summary> - 设置本组内其他RadioButton的Checked属性为false - 简单处理,只查找和此RadioButton在同一个层级的RadioButton - </summary> - </member> - <member name="M:FineUI.RadioButton.OnInitControl"> - <summary> - 初始化控件 - </summary> - </member> - <member name="M:FineUI.RadioButton.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.RadioButton.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.RadioButton.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.RadioButton.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.RadioButton.OnCheckedChanged(FineUI.CheckedEventArgs)"> - <summary> - 触发单选框状态改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.RadioButton.Text"> - <summary> - 文本 - </summary> - </member> - <member name="P:FineUI.RadioButton.Checked"> - <summary> - [AJAX属性]是否选中 - </summary> - </member> - <member name="P:FineUI.RadioButton.GroupName"> - <summary> - 分组的名称 - </summary> - </member> - <member name="P:FineUI.RadioButton.AutoPostBack"> - <summary> - 是否自动回发 - </summary> - </member> - <member name="E:FineUI.RadioButton.CheckedChanged"> - <summary> - 单选框状态改变事件(需要启用AutoPostBack) - </summary> - </member> - <member name="T:FineUI.TriggerBox"> - <summary> - 扩展文本框控件 - </summary> - </member> - <member name="M:FineUI.TriggerBox.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TriggerBox.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.TriggerBox.OnTriggerClick(System.EventArgs)"> - <summary> - 触发按钮点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.TriggerBox.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="P:FineUI.TriggerBox.EnableEdit"> - <summary> - 是否允许编辑 - </summary> - </member> - <member name="P:FineUI.TriggerBox.ShowTrigger"> - <summary> - 是否显示触发器 - </summary> - </member> - <member name="P:FineUI.TriggerBox.EnablePostBack"> - <summary> - 是否可以回发 - </summary> - </member> - <member name="P:FineUI.TriggerBox.TriggerIconUrl"> - <summary> - 右侧按钮的图片 - </summary> - </member> - <member name="P:FineUI.TriggerBox.TriggerIcon"> - <summary> - 右侧的图标 - </summary> - </member> - <member name="P:FineUI.TriggerBox.OnClientTriggerClick"> - <summary> - 点击按钮时需要执行的客户端脚本 - </summary> - </member> - <member name="E:FineUI.TriggerBox.TriggerClick"> - <summary> - 触发按钮点击事件 - </summary> - </member> - <member name="T:FineUI.GridColumnsEditor"> - <summary> - 为设计时提供的表格列集合编辑器 - </summary> - </member> - <member name="M:FineUI.GridColumnsEditor.#ctor(System.Type)"> - <summary> - 构造函数 - </summary> - <param name="type">控件类型</param> - </member> - <member name="M:FineUI.GridColumnsEditor.CreateNewItemTypes"> - <summary> - 获取此集合编辑器可包含的数据类型 - </summary> - <returns>类型集合</returns> - </member> - <member name="T:FineUI.GridRowSelectEventArgs"> - <summary> - 表格行选中事件参数 - </summary> - </member> - <member name="M:FineUI.GridRowSelectEventArgs.#ctor(System.Int32)"> - <summary> - 构造函数 - </summary> - <param name="rowIndex">行索引</param> - </member> - <member name="P:FineUI.GridRowSelectEventArgs.RowIndex"> - <summary> - 行索引 - </summary> - </member> - <member name="T:FineUI.GridAfterEditEventArgs"> - <summary> - 表格行点击事件参数 - </summary> - </member> - <member name="M:FineUI.GridAfterEditEventArgs.#ctor(System.Int32,System.String)"> - <summary> - 构造函数 - </summary> - <param name="rowIndex">行索引</param> - /// <param name="columnID">列ID</param> - </member> - <member name="P:FineUI.GridAfterEditEventArgs.RowIndex"> - <summary> - 行索引 - </summary> - </member> - <member name="P:FineUI.GridAfterEditEventArgs.ColumnID"> - <summary> - 列ID - </summary> - </member> - <member name="T:FineUI.BaseField"> - <summary> - 表格列基类(抽象类) - </summary> - </member> - <member name="T:FineUI.GridColumn"> - <summary> - 表格列基类(抽象类) - </summary> - </member> - <member name="M:FineUI.GridColumn.GetHeaderValue"> - <summary> - 取得列头渲染后的HTML - </summary> - <returns>渲染后的HTML</returns> - </member> - <member name="M:FineUI.GridColumn.GetColumnValue(FineUI.GridRow)"> - <summary> - 取得列渲染后的HTML - </summary> - <param name="row">表格行实例</param> - <returns>渲染后的HTML</returns> - </member> - <member name="M:FineUI.GridColumn.GetColumnState(FineUI.GridRow)"> - <summary> - 获取列的状态 - </summary> - <param name="row"></param> - <returns></returns> - </member> - <member name="M:FineUI.GridColumn.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.GridColumn.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.GridColumn.Grid"> - <summary> - 表格对象 - </summary> - </member> - <member name="P:FineUI.GridColumn.ColumnIndex"> - <summary> - 列索引 - </summary> - </member> - <member name="P:FineUI.GridColumn.SortField"> - <summary> - 排序字段 - </summary> - </member> - <member name="P:FineUI.GridColumn.Hidden"> - <summary> - 是否隐藏列 - </summary> - </member> - <member name="P:FineUI.GridColumn.ColumnID"> - <summary> - 列ID(如果没有设置,则为ClientID) - </summary> - </member> - <member name="P:FineUI.GridColumn.HeaderText"> - <summary> - 标题栏显示的文字 - </summary> - </member> - <member name="P:FineUI.GridColumn.HeaderToolTip"> - <summary> - 标题栏文字的提示文本 - </summary> - </member> - <member name="P:FineUI.GridColumn.HeaderToolTipType"> - <summary> - 标题栏文字的提示文本类型 - </summary> - </member> - <member name="P:FineUI.GridColumn.Width"> - <summary> - 列宽度 - </summary> - </member> - <member name="P:FineUI.GridColumn.BoxFlex"> - <summary> - 控制子控件的尺寸(表格列使用HBox布局) - </summary> - </member> - <member name="P:FineUI.GridColumn.ExpandUnusedSpace"> - <summary> - 此列会扩展所有未使用的宽度 - </summary> - </member> - <member name="P:FineUI.GridColumn.TextAlign"> - <summary> - 文本的排列位置 - </summary> - </member> - <member name="P:FineUI.GridColumn.EnableHeaderMenu"> - <summary> - 启用表头菜单 - </summary> - </member> - <member name="P:FineUI.GridColumn.EnableColumnHide"> - <summary> - 启用隐藏列功能 - </summary> - </member> - <member name="P:FineUI.GridColumn.InnerCls"> - <summary> - 表格单元格容器样式类 - </summary> - </member> - <member name="P:FineUI.GridColumn.PersistState"> - <summary> - 本列是否需要保存状态(目前只有CheckBoxField实现了这个定义) - </summary> - </member> - <member name="M:FineUI.BaseField.GetTooltipString(FineUI.GridRow)"> - <summary> - 取得提示字符串 - </summary> - <param name="row"></param> - <returns></returns> - </member> - <member name="P:FineUI.BaseField.DataSimulateTreeLevelField"> - <summary> - 此列模拟树显示时的层次字段 - </summary> - </member> - <member name="P:FineUI.BaseField.ToolTip"> - <summary> - 提示文本 - </summary> - </member> - <member name="P:FineUI.BaseField.DataToolTipField"> - <summary> - 提示字段名称 - </summary> - </member> - <member name="P:FineUI.BaseField.DataToolTipFormatString"> - <summary> - 提示字段格式化字符串 - </summary> - </member> - <member name="T:FineUI.RenderField"> - <summary> - 表格可编辑列 - </summary> - </member> - <member name="T:FineUI.RenderBaseField"> - <summary> - 表格可编辑列的基类 - </summary> - </member> - <member name="P:FineUI.RenderBaseField.DataField"> - <summary> - 字段名称 - </summary> - </member> - <member name="M:FineUI.RenderField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.RenderField.Editor"> - <summary> - 单元格编辑控件 - </summary> - </member> - <member name="P:FineUI.RenderField.FieldType"> - <summary> - 字段类型 - </summary> - </member> - <member name="P:FineUI.RenderField.Renderer"> - <summary> - 渲染器 - </summary> - </member> - <member name="P:FineUI.RenderField.RendererArgument"> - <summary> - 渲染器的参数 - </summary> - </member> - <member name="P:FineUI.RenderField.RendererFunction"> - <summary> - 自定义渲染器函数(JavaScript函数) - </summary> - </member> - <member name="P:FineUI.RenderField.NullDisplayText"> - <summary> - 处理数据库中null值,默认为空字符串 - </summary> - </member> - <member name="P:FineUI.RenderField.HtmlEncode"> - <summary> - 显示之前进行HTML编码(默认为true) - </summary> - </member> - <member name="T:FineUI.RenderCheckField"> - <summary> - 表格可编辑复选框列 - </summary> - </member> - <member name="M:FineUI.RenderCheckField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.RowNumberField"> - <summary> - 表格数据绑定列 - </summary> - </member> - <member name="M:FineUI.RowNumberField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.RowNumberField.EnableHeaderMenu"> - <summary> - 启用表头菜单 - </summary> - </member> - <member name="P:FineUI.RowNumberField.EnableColumnHide"> - <summary> - 是否允许隐藏列 - </summary> - </member> - <member name="P:FineUI.RowNumberField.EnablePagingNumber"> - <summary> - 是否启用分页行号 - </summary> - </member> - <member name="T:FineUI.GroupField"> - <summary> - 表格分组列 - </summary> - </member> - <member name="M:FineUI.GroupField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.GroupField.Columns"> - <summary> - 列数据 - </summary> - </member> - <member name="T:FineUI.RegionPanel"> - <summary> - 区域面板控件 - </summary> - </member> - <member name="M:FineUI.RegionPanel.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.RegionPanel.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.RegionPanel.Items"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.RegionPanel.EnableIFrame"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.RegionPanel.IFrameUrl"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.RegionPanel.IFrameName"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.RegionPanel.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="P:FineUI.RegionPanel.Regions"> - <summary> - 区域集合 - </summary> - </member> - <member name="T:FineUI.Accordion"> - <summary> - 手风琴控件 - </summary> - </member> - <member name="M:FineUI.Accordion.#ctor"> - <summary> - - </summary> - </member> - <member name="M:FineUI.Accordion.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Accordion.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.Accordion.Items"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Accordion.EnableIFrame"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Accordion.IFrameUrl"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Accordion.IFrameName"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Accordion.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="P:FineUI.Accordion.ShowCollapseTool"> - <summary> - 是否启用折叠按钮 - </summary> - </member> - <member name="P:FineUI.Accordion.EnableActiveOnTop"> - <summary> - 是否启用激活在最上面 - </summary> - </member> - <member name="P:FineUI.Accordion.EnableFill"> - <summary> - 是否启用填充整个区域 - </summary> - </member> - <member name="P:FineUI.Accordion.ActiveIndex"> - <summary> - 激活面板的索引 - </summary> - </member> - <member name="P:FineUI.Accordion.Panes"> - <summary> - 手风琴面板集合 - </summary> - </member> - <member name="T:FineUI.AccordionPane"> - <summary> - 手风琴面板控件 - </summary> - </member> - <member name="M:FineUI.AccordionPane.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.AccordionPane.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.AccordionPane.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.AccordionPane.EnableCollapse"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.AccordionPane.ShowHeader"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.AccordionPane.EnableHightlight"> - <summary> - 鼠标移到标题栏是否高亮显示 - </summary> - </member> - <member name="T:FineUI.AccordionPaneCollection"> - <summary> - 手风琴面板控件集合 - </summary> - </member> - <member name="M:FineUI.AccordionPaneCollection.#ctor(FineUI.Accordion)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.TreeExpandEventArgs"> - <summary> - 树节点展开事件参数 - </summary> - </member> - <member name="M:FineUI.TreeExpandEventArgs.#ctor(FineUI.TreeNode)"> - <summary> - 构造函数 - </summary> - <param name="node">树节点</param> - </member> - <member name="P:FineUI.TreeExpandEventArgs.Node"> - <summary> - 树实例 - </summary> - </member> - <member name="P:FineUI.TreeExpandEventArgs.NodeID"> - <summary> - 树节点ID - </summary> - </member> - <member name="T:FineUI.TreeCommandEventArgs"> - <summary> - 树节点命令事件参数 - </summary> - </member> - <member name="M:FineUI.TreeCommandEventArgs.#ctor(FineUI.TreeNode,System.String,System.String)"> - <summary> - 构造函数 - </summary> - <param name="node">树节点</param> - <param name="commandName">命令名称</param> - <param name="commandArgument">命令参数</param> - </member> - <member name="P:FineUI.TreeCommandEventArgs.Node"> - <summary> - 树实例 - </summary> - </member> - <member name="P:FineUI.TreeCommandEventArgs.NodeID"> - <summary> - 树节点ID - </summary> - </member> - <member name="P:FineUI.TreeCommandEventArgs.CommandName"> - <summary> - 命令名称 - </summary> - </member> - <member name="P:FineUI.TreeCommandEventArgs.CommandArgument"> - <summary> - 命令参数 - </summary> - </member> - <member name="T:FineUI.TreeCheckEventArgs"> - <summary> - 树节点选中事件参数 - </summary> - </member> - <member name="M:FineUI.TreeCheckEventArgs.#ctor(FineUI.TreeNode,System.Boolean)"> - <summary> - 构造函数 - </summary> - <param name="node">树节点</param> - <param name="isChecked">是否选中</param> - </member> - <member name="P:FineUI.TreeCheckEventArgs.Node"> - <summary> - 树节点 - </summary> - </member> - <member name="P:FineUI.TreeCheckEventArgs.NodeID"> - <summary> - 节点ID - </summary> - </member> - <member name="P:FineUI.TreeCheckEventArgs.Checked"> - <summary> - 是否选中 - </summary> - </member> - <member name="T:FineUI.TreeNode"> - <summary> - 树节点 - </summary> - </member> - <member name="M:FineUI.TreeNode.SetPropertyValue(System.String,System.String)"> - <summary> - 设置属性的值 - </summary> - <param name="name"></param> - <param name="value"></param> - </member> - <member name="P:FineUI.TreeNode.TreeInstance"> - <summary> - 树实例 - </summary> - </member> - <member name="P:FineUI.TreeNode.ParentNode"> - <summary> - 父节点 - </summary> - </member> - <member name="P:FineUI.TreeNode.Nodes"> - <summary> - 树节点集合 - </summary> - </member> - <member name="P:FineUI.TreeNode.EnablePostBack"> - <summary> - 单击树节点是否回发 - </summary> - </member> - <member name="P:FineUI.TreeNode.OnClientClick"> - <summary> - 点击按钮时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.TreeNode.CommandName"> - <summary> - 命令名称 - </summary> - </member> - <member name="P:FineUI.TreeNode.CommandArgument"> - <summary> - 命令参数 - </summary> - </member> - <member name="P:FineUI.TreeNode.Checked"> - <summary> - 是否选中 - </summary> - </member> - <member name="P:FineUI.TreeNode.EnableCheckBox"> - <summary> - 是否启用复选框 - </summary> - </member> - <member name="P:FineUI.TreeNode.AutoPostBack"> - <summary> - 改变复选框状态是否自动回发 - </summary> - </member> - <member name="P:FineUI.TreeNode.Text"> - <summary> - 文本 - </summary> - </member> - <member name="P:FineUI.TreeNode.NodeID"> - <summary> - 树节点ID - </summary> - </member> - <member name="P:FineUI.TreeNode.Leaf"> - <summary> - 是否叶子节点 - </summary> - </member> - <member name="P:FineUI.TreeNode.Enabled"> - <summary> - 是否可用 - </summary> - </member> - <member name="P:FineUI.TreeNode.Expanded"> - <summary> - 是否展开 - </summary> - </member> - <member name="P:FineUI.TreeNode.Target"> - <summary> - 链接目标 - </summary> - </member> - <member name="P:FineUI.TreeNode.NavigateUrl"> - <summary> - 链接地址 - </summary> - </member> - <member name="P:FineUI.TreeNode.IconUrl"> - <summary> - 图标地址 - </summary> - </member> - <member name="P:FineUI.TreeNode.Icon"> - <summary> - 预定义图标 - </summary> - </member> - <member name="P:FineUI.TreeNode.ToolTip"> - <summary> - 提示文本 - </summary> - </member> - <member name="T:FineUI.TreeNodeCollection"> - <summary> - 树节点控件集合 - </summary> - </member> - <member name="M:FineUI.TreeNodeCollection.#ctor(FineUI.Tree,FineUI.TreeNode)"> - <summary> - 构造函数 - </summary> - <param name="tree">树实例</param> - <param name="parentNode">父节点</param> - </member> - <member name="M:FineUI.TreeNodeCollection.InsertItem(System.Int32,FineUI.TreeNode)"> - <summary> - 插入树节点 - </summary> - <param name="index">插入索引位置</param> - <param name="item">树节点实例</param> - </member> - <member name="M:FineUI.TreeNodeCollection.ResolveTreeNode(FineUI.TreeNode)"> - <summary> - 设置每个节点的Tree实例 - </summary> - <param name="node"></param> - </member> - <member name="T:FineUI.XmlAttributeMapping"> - <summary> - 树节点的属性映射 - </summary> - </member> - <member name="P:FineUI.XmlAttributeMapping.From"> - <summary> - 映射源 - </summary> - </member> - <member name="P:FineUI.XmlAttributeMapping.To"> - <summary> - 映射目标 - </summary> - </member> - <member name="T:FineUI.XmlAttributeMappingCollection"> - <summary> - 树节点的属性映射集合 - </summary> - </member> - <member name="T:FineUI.WindowCloseEventArgs"> - <summary> - 窗体关闭事件参数 - </summary> - </member> - <member name="M:FineUI.WindowCloseEventArgs.#ctor(System.String)"> - <summary> - 构造函数 - </summary> - <param name="closeArgument">关闭参数</param> - </member> - <member name="P:FineUI.WindowCloseEventArgs.CloseArgument"> - <summary> - 关闭参数 - </summary> - </member> - <member name="T:FineUI.GridPreRowEventArgs"> - <summary> - 表格行预绑定事件参数 - </summary> - </member> - <member name="M:FineUI.GridPreRowEventArgs.#ctor(System.Object,System.Int32)"> - <summary> - 构造函数 - </summary> - <param name="dataItem">行数据源</param> - <param name="rowIndex">行索引</param> - </member> - <member name="P:FineUI.GridPreRowEventArgs.DataItem"> - <summary> - 行数据源(如果数据源为DataTable,则DataItem为DataRowView) - </summary> - </member> - <member name="P:FineUI.GridPreRowEventArgs.RowIndex"> - <summary> - 行索引 - </summary> - </member> - <member name="T:FineUI.GridPageEventArgs"> - <summary> - 表格分页事件参数 - </summary> - </member> - <member name="M:FineUI.GridPageEventArgs.#ctor(System.Int32)"> - <summary> - 构造函数 - </summary> - <param name="newPageIndex">新页面的索引</param> - </member> - <member name="P:FineUI.GridPageEventArgs.NewPageIndex"> - <summary> - 新页面的索引 - </summary> - </member> - <member name="T:FineUI.GridCommandEventArgs"> - <summary> - 表格行命令事件参数 - </summary> - </member> - <member name="M:FineUI.GridCommandEventArgs.#ctor(System.Int32,System.Int32,System.String,System.String)"> - <summary> - 构造函数 - </summary> - <param name="rowIndex">行索引</param> - <param name="columnIndex">列索引</param> - <param name="commandName">命令名称</param> - <param name="commandArgument">命令参数</param> - </member> - <member name="P:FineUI.GridCommandEventArgs.RowIndex"> - <summary> - 行索引 - </summary> - </member> - <member name="P:FineUI.GridCommandEventArgs.ColumnIndex"> - <summary> - 列索引 - </summary> - </member> - <member name="P:FineUI.GridCommandEventArgs.CommandName"> - <summary> - 命令名称 - </summary> - </member> - <member name="P:FineUI.GridCommandEventArgs.CommandArgument"> - <summary> - 命令参数 - </summary> - </member> - <member name="T:FineUI.GridRowEventArgs"> - <summary> - 表格行绑定事件参数 - </summary> - </member> - <member name="M:FineUI.GridRowEventArgs.#ctor(System.Object,System.Int32,System.Object[])"> - <summary> - 构造函数 - </summary> - <param name="dataItem">行数据源</param> - <param name="rowIndex">行索引</param> - <param name="values">本行各列的值</param> - </member> - <member name="P:FineUI.GridRowEventArgs.Values"> - <summary> - 本行各列的值(渲染后的HTML片段) - </summary> - </member> - <member name="P:FineUI.GridRowEventArgs.DataItem"> - <summary> - 行数据源 - </summary> - </member> - <member name="P:FineUI.GridRowEventArgs.RowIndex"> - <summary> - 行索引 - </summary> - </member> - <member name="T:FineUI.GridRowClickEventArgs"> - <summary> - 表格行点击事件参数 - </summary> - </member> - <member name="M:FineUI.GridRowClickEventArgs.#ctor(System.Int32)"> - <summary> - 构造函数 - </summary> - <param name="rowIndex">行索引</param> - </member> - <member name="P:FineUI.GridRowClickEventArgs.RowIndex"> - <summary> - 行索引 - </summary> - </member> - <member name="T:FineUI.LinkButtonField"> - <summary> - 表格链接按钮列 - </summary> - </member> - <member name="M:FineUI.LinkButtonField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.LinkButtonField.EnableHeaderMenu"> - <summary> - 启用表头菜单 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.EnableColumnHide"> - <summary> - 是否允许隐藏列 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.DataTextField"> - <summary> - 字段名称 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.DataTextFormatString"> - <summary> - 字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.Text"> - <summary> - 按钮文本 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.HtmlEncode"> - <summary> - 显示之前进行HTML编码(默认为true) - </summary> - </member> - <member name="P:FineUI.LinkButtonField.HtmlEncodeFormatString"> - <summary> - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - </summary> - </member> - <member name="P:FineUI.LinkButtonField.EnablePostBack"> - <summary> - 是否可以回发 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.Enabled"> - <summary> - 是否可用 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.OnClientClick"> - <summary> - 点击按钮时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.ValidateForms"> - <summary> - 提交之前需要验证的表单名称列表 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.ValidateTarget"> - <summary> - 验证失败时提示对话框弹出位置 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.ValidateMessageBox"> - <summary> - 验证失败时是否出现提示对话框 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.Icon"> - <summary> - 图标 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.IconUrl"> - <summary> - 图标地址 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.ConfirmTitle"> - <summary> - 确认对话框标题 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.ConfirmText"> - <summary> - 确认对话框内容 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.ConfirmIcon"> - <summary> - 确认对话框提示图标 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.ConfirmTarget"> - <summary> - 确认对话框弹出位置 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.CommandName"> - <summary> - 命令名称 - </summary> - </member> - <member name="P:FineUI.LinkButtonField.CommandArgument"> - <summary> - 命令参数 - </summary> - </member> - <member name="T:FineUI.Region"> - <summary> - 区域控件 - </summary> - </member> - <member name="M:FineUI.Region.OnInit(System.EventArgs)"> - <summary> - Tab 控件必须包含在 TabStrip 中 - </summary> - <param name="e"></param> - </member> - <member name="M:FineUI.Region.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Region.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.Region.Split"> - <summary> - 是否可以拖动分隔条 - </summary> - </member> - <member name="P:FineUI.Region.Margins"> - <summary> - 边距 - </summary> - </member> - <member name="P:FineUI.Region.Position"> - <summary> - 位置 - </summary> - </member> - <member name="T:FineUI.RegionCollection"> - <summary> - Region控件集合 - </summary> - </member> - <member name="M:FineUI.RegionCollection.#ctor(FineUI.PanelBase)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.Calendar"> - <summary> - 日期控件 - </summary> - </member> - <member name="M:FineUI.Calendar.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Calendar.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Calendar.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Calendar.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.Calendar.OnDateSelect(System.EventArgs)"> - <summary> - 触发日期选定事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Calendar.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.Calendar.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="P:FineUI.Calendar.SelectedDate"> - <summary> - [AJAX属性]选择的日期 - </summary> - </member> - <member name="P:FineUI.Calendar.DateFormatString"> - <summary> - 日期格式 - </summary> - </member> - <member name="P:FineUI.Calendar.MaxDate"> - <summary> - 最大日期 - </summary> - </member> - <member name="P:FineUI.Calendar.MinDate"> - <summary> - 最小日期 - </summary> - </member> - <member name="P:FineUI.Calendar.EnableDateSelect"> - <summary> - 选择日期是否自动回发 - </summary> - </member> - <member name="P:FineUI.Calendar.EnableDateSelectEvent"> - <summary> - 选择日期是否自动回发 - </summary> - </member> - <member name="E:FineUI.Calendar.DateSelect"> - <summary> - 日期选定事件(需要启用EnableDateSelect) - </summary> - </member> - <member name="T:FineUI.Toolbar"> - <summary> - 工具条控件 - </summary> - </member> - <member name="M:FineUI.Toolbar.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Toolbar.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.Toolbar.Position"> - <summary> - 工具条的位置 - </summary> - </member> - <member name="P:FineUI.Toolbar.Items"> - <summary> - 工具条项集合 - </summary> - </member> - <member name="T:FineUI.ToolbarText"> - <summary> - 工具栏文本控件 - </summary> - </member> - <member name="M:FineUI.ToolbarText.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.ToolbarText.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.ToolbarText.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.ToolbarText.Text"> - <summary> - [AJAX属性]文本 - </summary> - </member> - <member name="T:FineUI.ToolbarSeparator"> - <summary> - 工具栏分隔符控件 - </summary> - </member> - <member name="M:FineUI.ToolbarSeparator.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.ToolbarSeparator.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.ToolbarFill"> - <summary> - 工具栏左右分隔符控件 - </summary> - </member> - <member name="M:FineUI.ToolbarFill.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.ToolbarFill.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.HyperLink"> - <summary> - 链接控件 - </summary> - </member> - <member name="M:FineUI.HyperLink.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.HyperLink.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.HyperLink.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.HyperLink.TabIndex"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.HyperLink.Text"> - <summary> - [AJAX属性]文本 - </summary> - </member> - <member name="P:FineUI.HyperLink.OnClientClick"> - <summary> - [AJAX属性]点击链接时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.HyperLink.NavigateUrl"> - <summary> - [AJAX属性]链接地址 - </summary> - </member> - <member name="P:FineUI.HyperLink.Target"> - <summary> - [AJAX属性]链接目标 - </summary> - </member> - <member name="P:FineUI.HyperLink.EncodeText"> - <summary> - 是否对文本编码 - </summary> - </member> - <member name="T:FineUI.PageContext"> - <summary> - 页面上下文帮助类(静态类),包括向页面注册脚本、刷新当前页面、页面重定向等实用函数 - </summary> - </member> - <member name="M:FineUI.PageContext.Redirect(System.String)"> - <summary> - 跳转到指定的Url - </summary> - <param name="url"></param> - </member> - <member name="M:FineUI.PageContext.Redirect(System.String,System.String)"> - <summary> - 跳转到指定的Url,Target指定在哪个窗口中跳转(_self,_parent,_top) - </summary> - <param name="url"></param> - <param name="target">_self,_parent,_top</param> - </member> - <member name="M:FineUI.PageContext.Refresh"> - <summary> - 刷新当前页面 - </summary> - </member> - <member name="M:FineUI.PageContext.Refresh(System.String)"> - <summary> - 刷新指定页面 - </summary> - <param name="target">目标页面</param> - </member> - <member name="M:FineUI.PageContext.RegisterStartupScript(System.String)"> - <summary> - 注册页面脚本 - </summary> - <param name="scriptContent">客户端脚本</param> - </member> - <member name="T:FineUI.Tree"> - <summary> - 树控件 - </summary> - </member> - <member name="M:FineUI.Tree.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Tree.OnInitControl"> - <summary> - 初始化控件 - </summary> - </member> - <member name="M:FineUI.Tree.OnBothPreRender"> - <summary> - 渲染 HTML 之前调用 - </summary> - </member> - <member name="M:FineUI.Tree.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Tree.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Tree.DataBind"> - <summary> - 绑定数据源 - </summary> - <seealso cref="P:FineUI.Tree.DataSource"/> - </member> - <member name="M:FineUI.Tree.FixTreeNodes"> - <summary> - 如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 - 同时处理 AutoLeafIdentification 属性 - </summary> - </member> - <member name="M:FineUI.Tree.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.Tree.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.Tree.OnNodeCheck(FineUI.TreeCheckEventArgs)"> - <summary> - 触发节点选中事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Tree.OnNodeCommand(FineUI.TreeCommandEventArgs)"> - <summary> - 触发节点点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Tree.OnNodeExpand(FineUI.TreeExpandEventArgs)"> - <summary> - 触发节点展开事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Tree.GetExpandedNodeIDs"> - <summary> - 获取所有展开节点的ID数组 - </summary> - <returns>节点的ID数组</returns> - </member> - <member name="M:FineUI.Tree.GetExpandedNodeIDs(FineUI.TreeNodeCollection)"> - <summary> - 获取指定节点集合中所有展开节点的ID数组 - </summary> - <param name="nodes">指定的节点集合</param> - <returns>节点的ID数组</returns> - </member> - <member name="M:FineUI.Tree.GetExpandedNodes"> - <summary> - 获取所有展开节点的数组 - </summary> - <returns>节点的数组</returns> - </member> - <member name="M:FineUI.Tree.GetExpandedNodes(FineUI.TreeNodeCollection)"> - <summary> - 获取指定节点集合中所有展开节点的数组 - </summary> - <param name="nodes">指定的节点集合</param> - <returns>节点的数组</returns> - </member> - <member name="M:FineUI.Tree.CollapseAllNodes"> - <summary> - 折叠所有节点 - </summary> - </member> - <member name="M:FineUI.Tree.CollapseAllNodes(FineUI.TreeNodeCollection)"> - <summary> - 折叠指定节点集合中的所有节点 - </summary> - <param name="nodes">指定的节点集合</param> - </member> - <member name="M:FineUI.Tree.ExpandAllNodes"> - <summary> - 展开所有节点 - </summary> - </member> - <member name="M:FineUI.Tree.ExpandAllNodes(FineUI.TreeNodeCollection)"> - <summary> - 展开指定节点集合中的所有节点 - </summary> - <param name="nodes">指定的节点集合</param> - </member> - <member name="M:FineUI.Tree.GetCheckedNodeIDs"> - <summary> - 获取选中节点的ID数组 - </summary> - <returns>节点的ID数组</returns> - </member> - <member name="M:FineUI.Tree.GetCheckedNodeIDs(FineUI.TreeNodeCollection)"> - <summary> - 获取指定节点集合中选中节点的ID数组 - </summary> - <param name="nodes">指定的节点集合</param> - <returns>节点的ID数组</returns> - </member> - <member name="M:FineUI.Tree.GetCheckedNodes"> - <summary> - 获取选中节点的数组 - </summary> - <returns>节点的数组</returns> - </member> - <member name="M:FineUI.Tree.GetCheckedNodes(FineUI.TreeNodeCollection)"> - <summary> - 获取指定节点集合中选中节点的数组 - </summary> - <param name="nodes">指定的节点集合</param> - <returns>节点的数组</returns> - </member> - <member name="M:FineUI.Tree.CheckAllNodes"> - <summary> - 选中所有节点的复选框 - </summary> - </member> - <member name="M:FineUI.Tree.CheckAllNodes(FineUI.TreeNodeCollection)"> - <summary> - 选中指定节点的复选框 - </summary> - <param name="nodes">指定的节点集合</param> - </member> - <member name="M:FineUI.Tree.UncheckAllNodes"> - <summary> - 反选所有节点的复选框 - </summary> - </member> - <member name="M:FineUI.Tree.UncheckAllNodes(FineUI.TreeNodeCollection)"> - <summary> - 反选指定节点的复选框 - </summary> - <param name="nodes">指定的节点集合</param> - </member> - <member name="M:FineUI.Tree.FindNode(System.String)"> - <summary> - 查找树节点 - </summary> - <param name="nodeId">节点ID</param> - <returns>树节点</returns> - </member> - <member name="M:FineUI.Tree.FindNode(System.String,FineUI.TreeNodeCollection)"> - <summary> - 在指定的节点集合中查找树节点 - </summary> - <param name="nodeId">节点ID</param> - <param name="nodes">指定的节点集合</param> - <returns>树节点</returns> - </member> - <member name="M:FineUI.Tree.GetExpandAllNodesReference"> - <summary> - 获取展开全部节点的的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Tree.GetCollapseAllNodesReference"> - <summary> - 获取折叠全部节点的的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="P:FineUI.Tree.Items"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Tree.EnableIFrame"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Tree.IFrameUrl"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Tree.IFrameName"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Tree.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="P:FineUI.Tree.EnableArrows"> - <summary> - 启用箭头 - </summary> - </member> - <member name="P:FineUI.Tree.EnableAnimate"> - <summary> - 启用动画 - </summary> - </member> - <member name="P:FineUI.Tree.EnableSingleExpand"> - <summary> - 每次只能展开一个 - </summary> - </member> - <member name="P:FineUI.Tree.EnableLines"> - <summary> - 启用节点之间连线 - </summary> - </member> - <member name="P:FineUI.Tree.EnableIcons"> - <summary> - 启用图标 - </summary> - </member> - <member name="P:FineUI.Tree.AutoLeafIdentification"> - <summary> - 自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性(默认:true) - </summary> - </member> - <member name="P:FineUI.Tree.EnableMultiSelect"> - <summary> - 启用多行选择 - </summary> - </member> - <member name="P:FineUI.Tree.DataSource"> - <summary> - 数据源 - </summary> - </member> - <member name="P:FineUI.Tree.Nodes"> - <summary> - 树节点集合 - </summary> - </member> - <member name="P:FineUI.Tree.SelectedNode"> - <summary> - 选中的树节点 - </summary> - </member> - <member name="P:FineUI.Tree.SelectedNodeID"> - <summary> - [AJAX属性]选中的树节点ID - </summary> - </member> - <member name="P:FineUI.Tree.SelectedNodeIDArray"> - <summary> - [AJAX属性]选中的树节点ID列表 - </summary> - </member> - <member name="P:FineUI.Tree.Mappings"> - <summary> - 树控件属性与数据源节点的映射关系 - </summary> - </member> - <member name="P:FineUI.Tree.SelectedNodeIDArrayHiddenFieldID"> - <summary> - 选中行 - </summary> - </member> - <member name="P:FineUI.Tree.ExpandedNodesHiddenFieldID"> - <summary> - 展开的节点列表 - </summary> - </member> - <member name="P:FineUI.Tree.CheckedNodesHiddenFieldID"> - <summary> - 选中的节点列表 - </summary> - </member> - <member name="P:FineUI.Tree.X_Nodes"> - <summary> - 树节点集合的 JSON 表示(内部使用) - </summary> - </member> - <member name="E:FineUI.Tree.NodeCheck"> - <summary> - 节点选中事件 - </summary> - </member> - <member name="E:FineUI.Tree.NodeCommand"> - <summary> - 节点点击事件 - </summary> - </member> - <member name="E:FineUI.Tree.NodeExpand"> - <summary> - 节点展开事件 - </summary> - </member> - <member name="T:FineUI.AbsoluteScriptBlock"> - <summary> - 脚本(不和控件关联的脚本) - </summary> - </member> - <member name="P:FineUI.AbsoluteScriptBlock.Script"> - <summary> - 脚本 - </summary> - </member> - <member name="P:FineUI.AbsoluteScriptBlock.Level"> - <summary> - 层次(层次越高,注册越靠后)(缺省100) - 负值表示在所有注册脚本之前执行 - </summary> - </member> - <member name="T:FineUI.ContentPanel"> - <summary> - 容器面板控件 - </summary> - </member> - <member name="M:FineUI.ContentPanel.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.ContentPanel.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.ContentPanel.EnableIFrame"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.ContentPanel.IFrameUrl"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.ContentPanel.IFrameName"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.ContentPanel.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="T:FineUI.PageLoading"> - <summary> - 页面加载提示控件 - </summary> - </member> - <member name="M:FineUI.PageLoading.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的开始标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.PageLoading.RenderEndTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染控件的结束标签(不生成结束标签) - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.PageLoading.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.PageLoading.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.PageLoading.ImageUrl"> - <summary> - 自定义的加载图片 - </summary> - </member> - <member name="P:FineUI.PageLoading.ShowOnPostBack"> - <summary> - 回发时是否显示 - </summary> - </member> - <member name="P:FineUI.PageLoading.EnableFadeOut"> - <summary> - 是否启用淡出效果 - </summary> - </member> - <member name="T:FineUI.Form"> - <summary> - 表单面板控件 - </summary> - </member> - <member name="M:FineUI.Form.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Form.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Form.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Form.ResolveRows(System.String@,System.String@)"> - <summary> - 处理列 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Form.AddColumnScript(FineUI.JsArrayBuilder,System.Int32,System.Int32,System.Int32)"> - <summary> - 添加列 - </summary> - <param name="rowIdsBuilder">行ID集合</param> - <param name="startLineIndex">开始行的索引(包含)</param> - <param name="endLineIndex">结束行的索引(包含)</param> - <param name="columnCount">行的列数</param> - </member> - <member name="M:FineUI.Form.AddItemScript(FineUI.JsArrayBuilder,System.String)"> - <summary> - 添加Items变量 - </summary> - <param name="ab"></param> - <param name="id"></param> - <returns></returns> - </member> - <member name="M:FineUI.Form.GetRowColumnCount(FineUI.FormRow)"> - <summary> - 取得当前行的列数 - </summary> - <param name="row"></param> - <returns></returns> - </member> - <member name="M:FineUI.Form.GetRowColumnControl(FineUI.FormRow,System.Int32)"> - <summary> - 取得当前行 columnIndex 列的控件 - </summary> - <param name="row"></param> - <param name="columnIndex"></param> - <returns></returns> - </member> - <member name="P:FineUI.Form.Items"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Form.Rows"> - <summary> - 表单行控件集合 - </summary> - </member> - <member name="T:FineUI.FormRow"> - <summary> - 表单行控件 - </summary> - </member> - <member name="M:FineUI.FormRow.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.FormRow.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.FormRow.ResolveColumnWidths(System.String)"> - <summary> - 格式化widths - </summary> - <param name="widths"></param> - <returns></returns> - </member> - <member name="P:FineUI.FormRow.ColumnWidths"> - <summary> - 各列的宽度,空格分割 - </summary> - </member> - <member name="P:FineUI.FormRow.Items"> - <summary> - 子控件集合 - </summary> - </member> - <member name="T:FineUI.FormRowCollection"> - <summary> - 表单行控件集合 - </summary> - </member> - <member name="M:FineUI.FormRowCollection.#ctor(FineUI.Form)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.GroupPanel"> - <summary> - 分组面板控件 - </summary> - </member> - <member name="M:FineUI.GroupPanel.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.GroupPanel.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.GroupPanel.ShowHeader"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.GroupPanel.ShowBorder"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="T:FineUI.CheckBox"> - <summary> - 复选框控件 - </summary> - </member> - <member name="M:FineUI.CheckBox.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.CheckBox.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.CheckBox.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.CheckBox.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.CheckBox.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.CheckBox.OnCheckedChanged(FineUI.CheckedEventArgs)"> - <summary> - 触发复选框状态改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.CheckBox.Text"> - <summary> - 文本 - </summary> - </member> - <member name="P:FineUI.CheckBox.Checked"> - <summary> - [AJAX属性]是否选中 - </summary> - </member> - <member name="P:FineUI.CheckBox.AutoPostBack"> - <summary> - 是否自动回发 - </summary> - </member> - <member name="E:FineUI.CheckBox.CheckedChanged"> - <summary> - 复选框状态改变事件(需要启用AutoPostBack) - </summary> - </member> - <member name="T:FineUI.SimpleForm"> - <summary> - 简单的表单容器控件 - </summary> - </member> - <member name="M:FineUI.SimpleForm.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.SimpleForm.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.SimpleForm.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.Window"> - <summary> - 窗体控件 - </summary> - </member> - <member name="M:FineUI.Window.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Window.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.Window.RenderEndTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.Window.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Window.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Window.GetHiddenPropertyChangedScript"> - <summary> - Override the same method exist in ControlBase, because we have separate logic to hide this control. - </summary> - </member> - <member name="M:FineUI.Window.GetSaveStateReference(System.String[])"> - <summary> - 保存服务器控件的ClientID - 可以调用ActiveWindow.GetWriteBackValueReference在子页面向这些服务器控件写入值 - </summary> - </member> - <member name="M:FineUI.Window.GetShowReference"> - <summary> - 获取显示窗体的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetShowReference(System.String)"> - <summary> - 获取显示窗体的客户端脚本 - </summary> - <param name="iframeUrl">IFrame地址</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetShowReference(System.String,System.String)"> - <summary> - 获取显示窗体的客户端脚本 - </summary> - <param name="iframeUrl">IFrame地址</param> - <param name="windowTitle">窗体标题</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetMaximizeReference"> - <summary> - 获取最大化窗体尺寸的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetRestoreReference"> - <summary> - 获取恢复窗体尺寸的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetMinimizeReference"> - <summary> - 获取最小化窗体尺寸的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetHideReference"> - <summary> - 获取关闭当前激活Window的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetHideRefreshReference"> - <summary> - 获取关闭当前激活Window然后刷新页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetHidePostBackReference"> - <summary> - 获取关闭当前激活Window然后回发页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetHidePostBackReference(System.String)"> - <summary> - 获取关闭当前激活Window然后回发页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetConfirmHideReference"> - <summary> - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetConfirmHideRefreshReference"> - <summary> - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后刷新父页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetConfirmHidePostBackReference"> - <summary> - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.GetConfirmHidePostBackReference(System.String)"> - <summary> - 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Window.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.Window.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.Window.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.Window.OnClose(FineUI.WindowCloseEventArgs)"> - <summary> - 触发窗体关闭事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.Window.ShowHeader"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Window.ShowBorder"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Window.GUID"> - <summary> - 为了放置不同页面的Window的ClientID发生冲突,加上GUID - </summary> - </member> - <member name="P:FineUI.Window.IFrameName"> - <summary> - [只读]Window的IFrameName必须是唯一的,在所有页面中是唯一的 - 所以不要手工定义Window的IFrameName - </summary> - </member> - <member name="P:FineUI.Window.WindowPosition"> - <summary> - 窗口的位置 - </summary> - </member> - <member name="P:FineUI.Window.Popup"> - <summary> - 是否弹出窗体 - </summary> - </member> - <member name="P:FineUI.Window.Top"> - <summary> - 左上角位置 - </summary> - </member> - <member name="P:FineUI.Window.Left"> - <summary> - 左上角位置 - </summary> - </member> - <member name="P:FineUI.Window.EnableClose"> - <summary> - 是否可以关闭 - </summary> - </member> - <member name="P:FineUI.Window.EnableDrag"> - <summary> - 是否可以移动 - </summary> - </member> - <member name="P:FineUI.Window.EnableMaximize"> - <summary> - 是否可以最大化 - </summary> - </member> - <member name="P:FineUI.Window.EnableMinimize"> - <summary> - 是否可以最小化 - </summary> - </member> - <member name="P:FineUI.Window.MinHeight"> - <summary> - 最小高度 - </summary> - </member> - <member name="P:FineUI.Window.MinWidth"> - <summary> - 最小宽度 - </summary> - </member> - <member name="P:FineUI.Window.IsModal"> - <summary> - 是否模式窗口 - </summary> - </member> - <member name="P:FineUI.Window.EnableResize"> - <summary> - 是否可以改变窗口大小 - </summary> - </member> - <member name="P:FineUI.Window.OnClientCloseButtonClick"> - <summary> - 点击关闭按钮时需要执行的客户端脚本 - </summary> - </member> - <member name="P:FineUI.Window.EnableConfirmOnClose"> - <summary> - 关闭Window之前弹出确认当前表单改变的对话框 - </summary> - </member> - <member name="P:FineUI.Window.CloseAction"> - <summary> - 关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作) - </summary> - </member> - <member name="P:FineUI.Window.Target"> - <summary> - 弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效) - </summary> - </member> - <member name="P:FineUI.Window.Plain"> - <summary> - 内容区域颜色是否和边框颜色相同,默认为true - </summary> - </member> - <member name="E:FineUI.Window.Close"> - <summary> - 窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack) - </summary> - </member> - <member name="T:FineUI.GridSortEventArgs"> - <summary> - 表格排序事件参数 - </summary> - </member> - <member name="M:FineUI.GridSortEventArgs.#ctor(System.String,System.String,System.Int32)"> - <summary> - 构造函数 - </summary> - <param name="sortField">排序字段</param> - <param name="sortDirection">排序方向</param> - <param name="columnIndex">列索引</param> - </member> - <member name="P:FineUI.GridSortEventArgs.SortField"> - <summary> - 排序字段 - </summary> - </member> - <member name="P:FineUI.GridSortEventArgs.SortDirection"> - <summary> - 排序方向 - </summary> - </member> - <member name="P:FineUI.GridSortEventArgs.ColumnIndex"> - <summary> - 列索引 - </summary> - </member> - <member name="T:FineUI.Grid"> - <summary> - 表格控件 - </summary> - </member> - <member name="F:FineUI.Grid.TEMPLATE_PLACEHOLDER_PREFIX"> - <summary> - 模板列占位符前缀 - </summary> - </member> - <member name="M:FineUI.Grid.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Grid.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Grid.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Grid.ResolveStartEndRowIndex(System.Int32@,System.Int32@)"> - <summary> - 当前分页的开始行和结束行 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Grid.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染开始标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.Grid.RenderEndTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染结束标签 - </summary> - <param name="writer">输出流</param> - </member> - <member name="M:FineUI.Grid.UpdateTemplateFields"> - <summary> - 当在客户端修改了模板列中的值,调用此函数来告诉表格控件需要更新这些值; - 如果对表格重新进行了数据绑定,则不需要调用此函数,因为重新绑定后会更新表格的全部内容 - </summary> - </member> - <member name="M:FineUI.Grid.DataBind"> - <summary> - 绑定到数据源 - </summary> - </member> - <member name="M:FineUI.Grid.ClearRows"> - <summary> - 清空Rows,同时清除所有子控件中的GridRow控件 - </summary> - </member> - <member name="M:FineUI.Grid.GetModifiedData"> - <summary> - 获取用户修改的数据 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Grid.GetDeletedList"> - <summary> - 获取删除的行索引列表 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Grid.GetNewAddedList"> - <summary> - 获取新增的行数据 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Grid.GetModifiedDict"> - <summary> - 获取用户修改的行数据 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Grid.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.Grid.CommitChanges"> - <summary> - 接受用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) - </summary> - </member> - <member name="M:FineUI.Grid.GetCommitChangesReference"> - <summary> - 获取接受用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.RejectChanges"> - <summary> - 拒绝用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) - </summary> - </member> - <member name="M:FineUI.Grid.GetRejectChangesReference"> - <summary> - 获取拒绝用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) - </summary> - </member> - <member name="M:FineUI.Grid.ClearSelections"> - <summary> - 清空表格选中项 - </summary> - </member> - <member name="M:FineUI.Grid.GetClearSelectionsReference"> - <summary> - 获取清空表格选中项的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.AddNewRecord(Newtonsoft.Json.Linq.JObject)"> - <summary> - 添加一条新纪录 - </summary> - <param name="defaultObject">缺省值</param> - </member> - <member name="M:FineUI.Grid.AddNewRecord(Newtonsoft.Json.Linq.JObject,System.Boolean)"> - <summary> - 添加一条新纪录 - </summary> - <param name="defaultObject">缺省值</param> - <param name="appendToEnd">是否添加到末尾</param> - </member> - <member name="M:FineUI.Grid.GetAddNewRecordReference(Newtonsoft.Json.Linq.JObject)"> - <summary> - 获取添加一条新纪录的客户端脚本 - </summary> - <param name="defaultObject">缺省值</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetAddNewRecordReference(Newtonsoft.Json.Linq.JObject,System.Boolean)"> - <summary> - 获取添加一条新纪录的客户端脚本 - </summary> - <param name="defaultObject">缺省值</param> - <param name="appendToEnd">是否添加到末尾</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.DeleteSelected"> - <summary> - 删除选中行(或者单元格) - </summary> - </member> - <member name="M:FineUI.Grid.GetDeleteSelectedReference"> - <summary> - 获取删除选中行(或者单元格)的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetHasSelectionReference"> - <summary> - 获取表格是否有选中项的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetSelectCountReference"> - <summary> - 获取表格选中项数的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetSelectedCountReference"> - <summary> - 获取表格选中项数的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetSelectedCellReference"> - <summary> - 获取表格选中单元格的客户端脚本(仅用于AllowCellEditing模式) - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertReference(System.String)"> - <summary> - 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertReference(System.String,System.String)"> - <summary> - 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertReference(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertInParentReference(System.String)"> - <summary> - 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertInParentReference(System.String,System.String)"> - <summary> - 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertInParentReference(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertInTopReference(System.String)"> - <summary> - 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertInTopReference(System.String,System.String)"> - <summary> - 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.GetNoSelectionAlertInTopReference(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Grid.FindColumn(System.String)"> - <summary> - 通过列ID获取列实例 - </summary> - <param name="columnID">列ID</param> - <returns>列实例</returns> - </member> - <member name="M:FineUI.Grid.FindColumn(System.Int32)"> - <summary> - 通过列索引获取列实例 - </summary> - <param name="columnIndex">列索引</param> - <returns>列实例</returns> - </member> - <member name="M:FineUI.Grid.SelectAllRows"> - <summary> - 选中所有行(设置SelectedRowIndexArray属性) - </summary> - </member> - <member name="M:FineUI.Grid.ExpandRowExpanders"> - <summary> - 展开全部的行扩展列 - </summary> - </member> - <member name="M:FineUI.Grid.CollapseRowExpanders"> - <summary> - 折叠全部的行扩展列 - </summary> - </member> - <member name="M:FineUI.Grid.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.Grid.GetPrefixColumnNumber"> - <summary> - 获取Columns前面的列(比如索引列,选择框列) - </summary> - <returns></returns> - </member> - <member name="M:FineUI.Grid.OnSort(FineUI.GridSortEventArgs)"> - <summary> - 触发排序事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnPreDataBound(System.EventArgs)"> - <summary> - 触发绑定前事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnPreRowDataBound(FineUI.GridPreRowEventArgs)"> - <summary> - 触发行绑定前事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnRowDataBound(FineUI.GridRowEventArgs)"> - <summary> - 触发行绑定后事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnRowCommand(FineUI.GridCommandEventArgs)"> - <summary> - 触发行内事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnPageIndexChange(FineUI.GridPageEventArgs)"> - <summary> - 触发页索引改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnRowClick(FineUI.GridRowClickEventArgs)"> - <summary> - 触发行点击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnRowDoubleClick(FineUI.GridRowClickEventArgs)"> - <summary> - 触发行双击事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnRowSelect(FineUI.GridRowSelectEventArgs)"> - <summary> - 触发行选中事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.Grid.OnAfterEdit(FineUI.GridAfterEditEventArgs)"> - <summary> - 触发结束编辑事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.Grid.Items"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Grid.EnableIFrame"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Grid.IFrameUrl"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Grid.IFrameName"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Grid.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="P:FineUI.Grid.AllowCellEditing"> - <summary> - 允许单元格编辑 - </summary> - </member> - <member name="P:FineUI.Grid.ClicksToEdit"> - <summary> - 编辑单元格时点击单元格的次数(默认为2次) - </summary> - </member> - <member name="P:FineUI.Grid.AllowPaging"> - <summary> - 允许服务器端分页 - </summary> - </member> - <member name="P:FineUI.Grid.IsDatabasePaging"> - <summary> - 是否数据库分页 - </summary> - </member> - <member name="P:FineUI.Grid.ClearSelectedRowsAfterPaging"> - <summary> - 服务器端分页后清空选中的行 - </summary> - </member> - <member name="P:FineUI.Grid.PageSize"> - <summary> - 每页显示项数 - </summary> - </member> - <member name="P:FineUI.Grid.PageIndex"> - <summary> - [AJAX属性]当前显示页索引 - </summary> - </member> - <member name="P:FineUI.Grid.PageCount"> - <summary> - [AJAX属性]总页数 - </summary> - </member> - <member name="P:FineUI.Grid.RecordCount"> - <summary> - [AJAX属性]记录的总个数 - </summary> - </member> - <member name="P:FineUI.Grid.AllowSorting"> - <summary> - 允许服务器端排序 - </summary> - </member> - <member name="P:FineUI.Grid.SortDirection"> - <summary> - 排序方向("ASC", "DESC") - </summary> - </member> - <member name="P:FineUI.Grid.SortField"> - <summary> - 当前排序字段(只读) - </summary> - </member> - <member name="P:FineUI.Grid.EmptyText"> - <summary> - 数据为空时显示在内容区域的文本,可以是HTML标签 - </summary> - </member> - <member name="P:FineUI.Grid.RowVerticalAlign"> - <summary> - 行中文字的垂直排列位置(默认为Middle) - </summary> - </member> - <member name="P:FineUI.Grid.EnableDelayRender"> - <summary> - 是否延迟渲染 - </summary> - </member> - <member name="P:FineUI.Grid.ExpandAllRowExpanders"> - <summary> - 展开所有的行扩展列 - </summary> - </member> - <member name="P:FineUI.Grid.EnableTextSelection"> - <summary> - 启用表格中的文字选择 - </summary> - </member> - <member name="P:FineUI.Grid.ShowGridHeader"> - <summary> - 显示表格表头 - </summary> - </member> - <member name="P:FineUI.Grid.EnableHeaderMenu"> - <summary> - 启用表头菜单 - </summary> - </member> - <member name="P:FineUI.Grid.EnableColumnLines"> - <summary> - 启用表格列分隔线(默认为false) - </summary> - </member> - <member name="P:FineUI.Grid.EnableAlternateRowColor"> - <summary> - 启用交替行显示不同的颜色 - </summary> - </member> - <member name="P:FineUI.Grid.EnableMouseOverColor"> - <summary> - 启用鼠标移动到行的颜色 - </summary> - </member> - <member name="P:FineUI.Grid.AutoPostBack"> - <summary> - 点击行是否自动回发 - </summary> - </member> - <member name="P:FineUI.Grid.EnableRowSelect"> - <summary> - 选中行是否自动回发 - </summary> - </member> - <member name="P:FineUI.Grid.EnableRowDoubleClick"> - <summary> - 双击行是否自动回发 - </summary> - </member> - <member name="P:FineUI.Grid.EnableRowClick"> - <summary> - 点击行是否自动回发 - </summary> - </member> - <member name="P:FineUI.Grid.EnableRowSelectEvent"> - <summary> - 选中行是否自动回发 - </summary> - </member> - <member name="P:FineUI.Grid.EnableRowClickEvent"> - <summary> - 点击行是否自动回发 - </summary> - </member> - <member name="P:FineUI.Grid.EnableRowDoubleClickEvent"> - <summary> - 双击行是否自动回发 - </summary> - </member> - <member name="P:FineUI.Grid.EnableAfterEditEvent"> - <summary> - 结束编辑是否自动回发(需要启用AllowCellEditing) - </summary> - </member> - <member name="P:FineUI.Grid.AutoExpandColumn"> - <summary> - 自动扩展宽度以填充剩余空间的列(ColumnID) - </summary> - </member> - <member name="P:FineUI.Grid.ForceFitAllTime"> - <summary> - 成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效) - </summary> - </member> - <member name="P:FineUI.Grid.EnableCheckBoxSelect"> - <summary> - 启用多选框 - </summary> - </member> - <member name="P:FineUI.Grid.CheckBoxSelectOnly"> - <summary> - 只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效) - </summary> - </member> - <member name="P:FineUI.Grid.EnableMultiSelect"> - <summary> - 启用多行选择 - </summary> - </member> - <member name="P:FineUI.Grid.SelectedRowIndex"> - <summary> - [AJAX属性]选中行的索引(列表中的第一项) - </summary> - </member> - <member name="P:FineUI.Grid.SelectedCell"> - <summary> - [AJAX属性]选中的单元格([行索引,列索引]) - </summary> - </member> - <member name="P:FineUI.Grid.SelectedRowIndexArray"> - <summary> - [AJAX属性]选中行的索引列表 - </summary> - </member> - <member name="P:FineUI.Grid.HiddenColumns"> - <summary> - [AJAX属性]隐藏的列名称列表(逗号分隔) - </summary> - </member> - <member name="P:FineUI.Grid.DataSource"> - <summary> - 数据源 - </summary> - </member> - <member name="P:FineUI.Grid.DataKeyNames"> - <summary> - 行关键字段 - </summary> - </member> - <member name="P:FineUI.Grid.DataKeys"> - <summary> - 行关键字段的值 - </summary> - </member> - <member name="P:FineUI.Grid.PageItems"> - <summary> - 分页工具条项集合 - </summary> - </member> - <member name="P:FineUI.Grid.AllColumns"> - <summary> - 全部的列 - </summary> - </member> - <member name="P:FineUI.Grid.Columns"> - <summary> - 列数据 - </summary> - </member> - <member name="P:FineUI.Grid.Rows"> - <summary> - 行数据 - </summary> - </member> - <member name="P:FineUI.Grid.X_Rows"> - <summary> - 保存的行数据(内部使用) - </summary> - </member> - <member name="E:FineUI.Grid.Sort"> - <summary> - 排序事件 - </summary> - </member> - <member name="E:FineUI.Grid.PreDataBound"> - <summary> - 绑定前事件 - </summary> - </member> - <member name="E:FineUI.Grid.PreRowDataBound"> - <summary> - 行绑定前事件 - </summary> - </member> - <member name="E:FineUI.Grid.RowDataBound"> - <summary> - 行绑定后事件 - </summary> - </member> - <member name="E:FineUI.Grid.RowCommand"> - <summary> - 行内事件 - </summary> - </member> - <member name="E:FineUI.Grid.PageIndexChange"> - <summary> - 页索引改变事件 - </summary> - </member> - <member name="E:FineUI.Grid.RowClick"> - <summary> - 行点击事件(需要启用EnableRowClick) - </summary> - </member> - <member name="E:FineUI.Grid.RowDoubleClick"> - <summary> - 行双击事件(需要启用EnableRowDoubleClick) - </summary> - </member> - <member name="E:FineUI.Grid.RowSelect"> - <summary> - 行选中事件(需要启用EnableRowSelect) - </summary> - </member> - <member name="E:FineUI.Grid.AfterEdit"> - <summary> - 结束编辑事件(需要启用EnableAfterEditEvent) - </summary> - </member> - <member name="T:FineUI.BoundField"> - <summary> - 表格数据绑定列 - </summary> - </member> - <member name="M:FineUI.BoundField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.BoundField.Enabled"> - <summary> - 是否可用 - </summary> - </member> - <member name="P:FineUI.BoundField.DataField"> - <summary> - 字段名称 - </summary> - </member> - <member name="P:FineUI.BoundField.DataFormatString"> - <summary> - 字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.BoundField.NullDisplayText"> - <summary> - 处理数据库中null值,默认为空字符串 - </summary> - </member> - <member name="P:FineUI.BoundField.HtmlEncode"> - <summary> - 显示之前进行HTML编码(默认为true) - </summary> - </member> - <member name="P:FineUI.BoundField.HtmlEncodeFormatString"> - <summary> - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - </summary> - </member> - <member name="T:FineUI.CheckBoxField"> - <summary> - 表格复选框列 - </summary> - </member> - <member name="M:FineUI.CheckBoxField.GetColumnValue(FineUI.GridRow,System.Boolean)"> - <summary> - 取得单元格的数据 - </summary> - <param name="row"></param> - <param name="checkState"></param> - <returns></returns> - </member> - <member name="M:FineUI.CheckBoxField.GetCheckedState(System.Int32)"> - <summary> - 本行的复选框是否处于选中状态 - </summary> - <param name="rowIndex">行索引</param> - <returns>选中状态</returns> - </member> - <member name="M:FineUI.CheckBoxField.SetCheckedState(System.Int32,System.Boolean)"> - <summary> - 设置本列复选框的选中状态 - </summary> - <param name="rowIndex">行索引</param> - <param name="isChecked">是否选中</param> - </member> - <member name="M:FineUI.CheckBoxField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.CheckBoxField.Enabled"> - <summary> - 是否可用(只在RenderAsStaticField=false时有效) - </summary> - </member> - <member name="P:FineUI.CheckBoxField.AutoPostBack"> - <summary> - 是否自动回发(只在RenderAsStaticField=false时有效) - </summary> - </member> - <member name="P:FineUI.CheckBoxField.DataField"> - <summary> - 字段名称 - </summary> - </member> - <member name="P:FineUI.CheckBoxField.RenderAsStaticField"> - <summary> - 渲染为静态图片,否则渲染为可编辑的复选框 - </summary> - </member> - <member name="P:FineUI.CheckBoxField.ShowHeaderCheckBox"> - <summary> - 显示列头复选框(只在RenderAsStaticField=false时有效) - </summary> - </member> - <member name="P:FineUI.CheckBoxField.CommandName"> - <summary> - 命令名称 - </summary> - </member> - <member name="P:FineUI.CheckBoxField.CommandArgument"> - <summary> - 命令参数 - </summary> - </member> - <member name="T:FineUI.WindowField"> - <summary> - 表格窗体列 - </summary> - </member> - <member name="M:FineUI.WindowField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.WindowField.EnableHeaderMenu"> - <summary> - 启用表头菜单 - </summary> - </member> - <member name="P:FineUI.WindowField.EnableColumnHide"> - <summary> - 是否允许隐藏列 - </summary> - </member> - <member name="P:FineUI.WindowField.Enabled"> - <summary> - 是否可用 - </summary> - </member> - <member name="P:FineUI.WindowField.WindowID"> - <summary> - 对应的窗体控件ID - </summary> - </member> - <member name="P:FineUI.WindowField.DataWindowTitleField"> - <summary> - 窗体标题对应的字段名称 - </summary> - </member> - <member name="P:FineUI.WindowField.DataWindowTitleFormatString"> - <summary> - 窗体标题对应的字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.WindowField.DataTextField"> - <summary> - 字段名称 - </summary> - </member> - <member name="P:FineUI.WindowField.DataTextFormatString"> - <summary> - 字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.WindowField.HtmlEncode"> - <summary> - 显示之前进行HTML编码(默认为true) - </summary> - </member> - <member name="P:FineUI.WindowField.HtmlEncodeFormatString"> - <summary> - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - </summary> - </member> - <member name="P:FineUI.WindowField.DataIFrameUrlFields"> - <summary> - 绑定到IFrame地址的字段名称列表 - </summary> - </member> - <member name="P:FineUI.WindowField.DataIFrameUrlFormatString"> - <summary> - 绑定到IFrame地址的字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.WindowField.UrlEncode"> - <summary> - 对每个绑定到IFrame地址的字段进行URL编码(默认为true) - </summary> - </member> - <member name="P:FineUI.WindowField.IFrameUrl"> - <summary> - IFrame地址 - </summary> - </member> - <member name="P:FineUI.WindowField.Text"> - <summary> - 显示文本 - </summary> - </member> - <member name="P:FineUI.WindowField.Title"> - <summary> - 标题 - </summary> - </member> - <member name="P:FineUI.WindowField.Icon"> - <summary> - 图标 - </summary> - </member> - <member name="P:FineUI.WindowField.IconUrl"> - <summary> - 图标地址 - </summary> - </member> - <member name="T:FineUI.ImageField"> - <summary> - 表格图片列 - </summary> - </member> - <member name="M:FineUI.ImageField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.ImageField.DataImageUrlField"> - <summary> - 图片地址字段 - </summary> - </member> - <member name="P:FineUI.ImageField.DataImageUrlFormatString"> - <summary> - 图片地址字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.ImageField.ImageWidth"> - <summary> - 图片的宽度 - </summary> - </member> - <member name="P:FineUI.ImageField.ImageHeight"> - <summary> - 图片的高度 - </summary> - </member> - <member name="T:FineUI.TemplateField"> - <summary> - 表格模板列 - </summary> - </member> - <member name="M:FineUI.TemplateField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.TemplateField.ItemTemplate"> - <summary> - 模板容器 - </summary> - </member> - <member name="P:FineUI.TemplateField.RenderAsRowExpander"> - <summary> - 是否渲染为行扩展列 - </summary> - </member> - <member name="T:FineUI.HyperLinkField"> - <summary> - 表格超链接列 - </summary> - </member> - <member name="M:FineUI.HyperLinkField.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.HyperLinkField.Enabled"> - <summary> - 是否可用 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.DataTextField"> - <summary> - 字段名称 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.DataTextFormatString"> - <summary> - 字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.DataNavigateUrlFields"> - <summary> - 绑定到超链接地址的字段名称列表 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.DataNavigateUrlFieldsEncode"> - <summary> - 对每个绑定到超链接地址的字段进行URL编码(此属性废弃,请使用UrlEncode属性) - </summary> - </member> - <member name="P:FineUI.HyperLinkField.UrlEncode"> - <summary> - 对每个绑定到超链接地址的字段进行URL编码(默认为true) - </summary> - </member> - <member name="P:FineUI.HyperLinkField.DataNavigateUrlFormatString"> - <summary> - 绑定到超链接地址的字段格式化字符串 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.Target"> - <summary> - 打开超链接的目标框架 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.NavigateUrl"> - <summary> - 超链接地址 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.Text"> - <summary> - 超链接文本 - </summary> - </member> - <member name="P:FineUI.HyperLinkField.HtmlEncode"> - <summary> - 显示之前进行HTML编码(默认为true) - </summary> - </member> - <member name="P:FineUI.HyperLinkField.HtmlEncodeFormatString"> - <summary> - 是否在应用DataFormatString属性之后进行HTML编码(默认为true) - </summary> - </member> - <member name="T:FineUI.GridColumnCollection"> - <summary> - 表格列集合 - </summary> - </member> - <member name="M:FineUI.GridColumnCollection.#ctor(FineUI.ControlBase)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.GridRowControl"> - <summary> - 用来作为模板列的数据绑定容器,实现了IDataItemContainer接口 - </summary> - </member> - <member name="M:FineUI.GridRowControl.#ctor(System.Object,System.Int32)"> - <summary> - 构造函数 - </summary> - <param name="dataItem">数据源</param> - <param name="rowIndex">行索引</param> - </member> - <member name="M:FineUI.GridRowControl.OnInit(System.EventArgs)"> - <summary> - 控件初始化事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.GridRowControl.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染开始标签 - </summary> - <param name="writer">ASP.NET服务器控件输出流</param> - </member> - <member name="M:FineUI.GridRowControl.RenderEndTag(System.Web.UI.HtmlTextWriter)"> - <summary> - 渲染结束标签 - </summary> - <param name="writer">ASP.NET服务器控件输出流</param> - </member> - <member name="P:FineUI.GridRowControl.DataItem"> - <summary> - 数据源(IDataItemContainer成员) - </summary> - </member> - <member name="P:FineUI.GridRowControl.DataItemIndex"> - <summary> - 数据项索引(IDataItemContainer成员) - </summary> - </member> - <member name="P:FineUI.GridRowControl.DisplayIndex"> - <summary> - 数据项在控件中显示位置的索引(IDataItemContainer成员) - </summary> - </member> - <member name="T:FineUI.GridRow"> - <summary> - 表格行 - </summary> - </member> - <member name="M:FineUI.GridRow.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.GridRow.#ctor(FineUI.Grid,System.Object,System.Int32)"> - <summary> - 构造函数 - </summary> - <param name="grid">表格实例</param> - <param name="dataItem">行对应的数据源(在回发时为null)</param> - <param name="rowIndex">行序号</param> - </member> - <member name="M:FineUI.GridRow.ToShortStates"> - <summary> - 当前行列状态列表 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.GridRow.FromShortStates(System.Object[])"> - <summary> - 恢复当前行列状态列表(同时更新相应的Values值) - </summary> - <param name="shortStates"></param> - </member> - <member name="M:FineUI.GridRow.UpdateValuesAt(System.Int32)"> - <summary> - 更新当前行某列的渲染后的HTML - </summary> - <param name="columnIndex"></param> - </member> - <member name="M:FineUI.GridRow.InitTemplateContainers"> - <summary> - 表格行中模板列控件列表(数据绑定时自动生成每个模板列控件ID,回发时从XState中回发模板列控件ID) - </summary> - </member> - <member name="M:FineUI.GridRow.DataBindRow"> - <summary> - 绑定行的值 - </summary> - </member> - <member name="M:FineUI.GridRow.FindControl(System.String)"> - <summary> - 查找表格行内的控件 - </summary> - <param name="id"></param> - <returns></returns> - </member> - <member name="P:FineUI.GridRow.Grid"> - <summary> - 表格实例 - </summary> - </member> - <member name="P:FineUI.GridRow.DataItem"> - <summary> - 本行对应的数据源(不维护状态) - </summary> - </member> - <member name="P:FineUI.GridRow.RowIndex"> - <summary> - 第几行 - </summary> - </member> - <member name="P:FineUI.GridRow.Values"> - <summary> - 此行的状态信息 - </summary> - </member> - <member name="P:FineUI.GridRow.DataKeys"> - <summary> - 此行DataKeyNames字段的值 - </summary> - </member> - <member name="P:FineUI.GridRow.States"> - <summary> - 非公开属性,对于CheckBoxField可以通过GetCheckedState访问 - </summary> - </member> - <member name="P:FineUI.GridRow.TemplateContainers"> - <summary> - 表格行中模板列控件列表,一个典型的例子为:[GridRowControl, null, null, GridRowControl, null, null, null, null, null] - </summary> - </member> - <member name="T:FineUI.GridRowCollection"> - <summary> - 表格行控件集合 - </summary> - </member> - <member name="T:FineUI.ListItem"> - <summary> - 列表项 - </summary> - </member> - <member name="M:FineUI.ListItem.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.ListItem.#ctor(System.String,System.String)"> - <summary> - 构造函数 - </summary> - <param name="text">列表项文本</param> - <param name="value">列表项值</param> - </member> - <member name="P:FineUI.ListItem.Selected"> - <summary> - 是否选中 - </summary> - </member> - <member name="P:FineUI.ListItem.Text"> - <summary> - 显示的文本 - </summary> - </member> - <member name="P:FineUI.ListItem.Value"> - <summary> - 值 - </summary> - </member> - <member name="P:FineUI.ListItem.EnableSelect"> - <summary> - 是否可选择 - </summary> - </member> - <member name="P:FineUI.ListItem.SimulateTreeLevel"> - <summary> - 模拟树的层次(从0开始为根节点) - </summary> - </member> - <member name="T:FineUI.ListItemCollection"> - <summary> - 列表项集合 - </summary> - </member> - <member name="M:FineUI.ListItemCollection.FindByText(System.String)"> - <summary> - 通过文本查找列表项 - </summary> - <param name="text">文本</param> - <returns>列表项</returns> - </member> - <member name="M:FineUI.ListItemCollection.FindByText(System.String,System.Boolean)"> - <summary> - 通过文本查找列表项 - </summary> - <param name="text">文本</param> - <param name="stripHtml">是否去除HTML标签</param> - <returns>列表项</returns> - </member> - <member name="M:FineUI.ListItemCollection.FindByValue(System.String)"> - <summary> - 通过值查找列表项 - </summary> - <param name="value">值</param> - <returns>列表项</returns> - </member> - <member name="M:FineUI.ListItemCollection.Add(System.String,System.String)"> - <summary> - 添加列表项 - </summary> - <param name="text">文本</param> - <param name="value">值</param> - <returns>新元素的插入位置</returns> - </member> - <member name="T:FineUI.DropDownList"> - <summary> - 下拉列表控件 - </summary> - </member> - <member name="M:FineUI.DropDownList.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.DropDownList.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.DropDownList.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.DropDownList.DataBind"> - <summary> - 绑定到数据源 - </summary> - </member> - <member name="M:FineUI.DropDownList.DataBindToDataTable(System.Data.DataTable)"> - <summary> - 绑定到数据表格 - </summary> - <param name="dataTable">数据表格</param> - </member> - <member name="M:FineUI.DropDownList.DataBindToEnumerable(System.Collections.IEnumerable)"> - <summary> - 绑定到可枚举类型 - </summary> - <param name="enumerable">可枚举类型</param> - </member> - <member name="M:FineUI.DropDownList.GetPropertyValue(System.Object,System.String)"> - <summary> - 取得属性值 - </summary> - <param name="obj"></param> - <param name="propertyName"></param> - </member> - <member name="M:FineUI.DropDownList.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.DropDownList.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.DropDownList.OnSelectedIndexChanged(System.EventArgs)"> - <summary> - 触发选中项改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.DropDownList.Text"> - <summary> - [AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效) - </summary> - </member> - <member name="P:FineUI.DropDownList.SelectedValue"> - <summary> - [AJAX属性]选中项的值 - </summary> - </member> - <member name="P:FineUI.DropDownList.SelectedIndex"> - <summary> - [AJAX属性]选中项的索引 - </summary> - </member> - <member name="P:FineUI.DropDownList.SelectedText"> - <summary> - 选中项的文本 - </summary> - </member> - <member name="P:FineUI.DropDownList.SelectedItem"> - <summary> - 选中项 - </summary> - </member> - <member name="P:FineUI.DropDownList.ForceSelection"> - <summary> - 是否强制选中下拉列表中的项(启用编辑的情况下) - </summary> - </member> - <member name="P:FineUI.DropDownList.EnableEdit"> - <summary> - 是否可编辑,以便在录入时自动过滤下拉框中的值 - </summary> - </member> - <member name="P:FineUI.DropDownList.EnableSimulateTree"> - <summary> - 是否启用模拟树显示 - </summary> - </member> - <member name="P:FineUI.DropDownList.DataSimulateTreeLevelField"> - <summary> - 模拟树显示时指示所在层次的数据字段 - </summary> - </member> - <member name="P:FineUI.DropDownList.DataEnableSelectField"> - <summary> - 是否可选择的字段 - </summary> - </member> - <member name="P:FineUI.DropDownList.AutoPostBack"> - <summary> - 是否自动回发 - </summary> - </member> - <member name="P:FineUI.DropDownList.DataTextField"> - <summary> - 显示文本字段 - </summary> - </member> - <member name="P:FineUI.DropDownList.DataTextFormatString"> - <summary> - 显示文本的格式化字符串 - </summary> - </member> - <member name="P:FineUI.DropDownList.DataValueField"> - <summary> - 显示值字段 - </summary> - </member> - <member name="P:FineUI.DropDownList.DataSource"> - <summary> - 数据源 - </summary> - </member> - <member name="P:FineUI.DropDownList.X_Items"> - <summary> - 保存的列表项数据(内部使用) - </summary> - </member> - <member name="P:FineUI.DropDownList.Items"> - <summary> - 列表项集合 - </summary> - </member> - <member name="E:FineUI.DropDownList.SelectedIndexChanged"> - <summary> - 选中项改变事件(需要启用AutoPostBack) - </summary> - </member> - <member name="T:FineUI.Label"> - <summary> - 文本控件 - </summary> - </member> - <member name="M:FineUI.Label.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Label.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Label.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.Label.TabIndex"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Label.FocusOnPageLoad"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Label.EncodeText"> - <summary> - 是否对文本编码 - </summary> - </member> - <member name="P:FineUI.Label.Text"> - <summary> - [AJAX属性]文本 - </summary> - </member> - <member name="T:FineUI.TextArea"> - <summary> - 多行文本框控件 - </summary> - </member> - <member name="M:FineUI.TextArea.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.TextArea.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TextArea.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.TextArea.AutoGrowHeight"> - <summary> - 是否自动增长高度 - </summary> - </member> - <member name="P:FineUI.TextArea.AutoGrowHeightMax"> - <summary> - 自动增长的最大高度 - </summary> - </member> - <member name="P:FineUI.TextArea.AutoGrowHeightMin"> - <summary> - 自动增长的最小高度 - </summary> - </member> - <member name="P:FineUI.TextArea.HideScrollbars"> - <summary> - 是否总是隐藏滚动条 - </summary> - </member> - <member name="T:FineUI.Tab"> - <summary> - 选项卡控件 - </summary> - </member> - <member name="M:FineUI.Tab.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.Tab.OnInit(System.EventArgs)"> - <summary> - Tab 控件必须包含在 TabStrip 中 - </summary> - <param name="e"></param> - </member> - <member name="M:FineUI.Tab.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Tab.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.Tab.GetHiddenPropertyChangedScript"> - <summary> - Override the same method exist in ControlBase, because we have separate logic to hide this control. - </summary> - </member> - <member name="M:FineUI.Tab.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.Tab.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.Tab.GetShowReference"> - <summary> - 获取显示选项卡的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Tab.GetHideReference"> - <summary> - 获取隐藏选项卡的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="P:FineUI.Tab.ShowBorder"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Tab.EnableCollapse"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.Tab.EnableClose"> - <summary> - 是否可以关闭 - </summary> - </member> - <member name="T:FineUI.TabStrip"> - <summary> - 选项卡面板控件 - </summary> - </member> - <member name="M:FineUI.TabStrip.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.TabStrip.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TabStrip.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.TabStrip.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.TabStrip.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="M:FineUI.TabStrip.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.TabStrip.OnTabIndexChanged(System.EventArgs)"> - <summary> - 触发选项卡改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.TabStrip.GetAddTabReference(System.String,System.String,System.String,System.Boolean)"> - <summary> - 获取添加选项卡的脚本 - </summary> - <param name="tabID">选项卡ID</param> - <param name="iframeUrl">IFrame地址</param> - <param name="tabTitle">选项卡标题</param> - <param name="enableClose">是否可以关闭</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.TabStrip.GetAddTabReference(System.String,System.String,System.String,System.String,System.Boolean)"> - <summary> - 获取添加选项卡的脚本 - </summary> - <param name="tabID">选项卡ID</param> - <param name="iframeUrl">IFrame地址</param> - <param name="tabTitle">选项卡标题</param> - <param name="iconUrl">选项卡图标</param> - <param name="enableClose">是否可以关闭</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.TabStrip.GetRemoveTabReference(System.String)"> - <summary> - 获取移除选项卡的脚本 - </summary> - <param name="tabID">选项卡ID</param> - <returns>客户端脚本</returns> - </member> - <member name="P:FineUI.TabStrip.Items"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.TabStrip.EnableIFrame"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.TabStrip.IFrameUrl"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.TabStrip.IFrameName"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.TabStrip.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="P:FineUI.TabStrip.AutoPostBack"> - <summary> - 切换选项卡时是否自动回发 - </summary> - </member> - <member name="P:FineUI.TabStrip.EnableTitleBackgroundColor"> - <summary> - 显示标题的背景颜色 - </summary> - </member> - <member name="P:FineUI.TabStrip.EnableTabCloseMenu"> - <summary> - 是否启用右键菜单(可用来关闭当前Tab和所有其他Tab) - </summary> - </member> - <member name="P:FineUI.TabStrip.TabPosition"> - <summary> - 选项卡显示的位置 - </summary> - </member> - <member name="P:FineUI.TabStrip.EnableDeferredRender"> - <summary> - 是否启用延迟加载选项卡 - </summary> - </member> - <member name="P:FineUI.TabStrip.ActiveTabIndex"> - <summary> - [AJAX属性]当前激活选项卡的索引 - </summary> - </member> - <member name="P:FineUI.TabStrip.ActiveTab"> - <summary> - 当前激活的选项卡 - </summary> - </member> - <member name="P:FineUI.TabStrip.Tabs"> - <summary> - 选项卡集合 - </summary> - </member> - <member name="E:FineUI.TabStrip.TabIndexChanged"> - <summary> - 选项卡改变事件 - </summary> - </member> - <member name="T:FineUI.Panel"> - <summary> - 面板控件 - </summary> - </member> - <member name="M:FineUI.Panel.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.Panel.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="T:FineUI.HtmlEditor"> - <summary> - HTML编辑框控件 - </summary> - </member> - <member name="M:FineUI.HtmlEditor.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.HtmlEditor.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.HtmlEditor.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.HtmlEditor.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - 回发到服务器,判断控件的属性是否变化, - 如果变化返回true,则RaisePostDataChangedEvent - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.HtmlEditor.OnTextChanged(System.EventArgs)"> - <summary> - 触发文本改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.HtmlEditor.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.Enabled"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.Readonly"> - <summary> - 不支持此属性 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.Text"> - <summary> - [AJAX属性]文本 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableAlignments"> - <summary> - 启用左右定位 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableColors"> - <summary> - 启用颜色 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableFont"> - <summary> - 启用字体 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableFontSize"> - <summary> - 启用调整字体大小 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableFormat"> - <summary> - 启用格式化 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableLinks"> - <summary> - 启用创建链接 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableLists"> - <summary> - 启用创建列表 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableSourceEdit"> - <summary> - 启用源码视图 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.FontFamilies"> - <summary> - 字体列表 - </summary> - </member> - <member name="P:FineUI.HtmlEditor.EnableChineseFont"> - <summary> - 启用中文字体 - </summary> - </member> - <member name="E:FineUI.HtmlEditor.TextChanged"> - <summary> - 文本改变事件 - </summary> - </member> - <member name="T:FineUI.DatePicker"> - <summary> - 日期选择框控件 - </summary> - </member> - <member name="M:FineUI.DatePicker.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.DatePicker.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.DatePicker.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.DatePicker.OnDateSelect(System.EventArgs)"> - <summary> - 触发日期选定事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.DatePicker.EnableEdit"> - <summary> - 是否允许编辑 - </summary> - </member> - <member name="P:FineUI.DatePicker.SelectedDate"> - <summary> - 选择的日期 - </summary> - </member> - <member name="P:FineUI.DatePicker.EnableChineseAltFormats"> - <summary> - 启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd - </summary> - </member> - <member name="P:FineUI.DatePicker.AltFormats"> - <summary> - 尝试解析日期的格式列表 - </summary> - </member> - <member name="P:FineUI.DatePicker.DateFormatString"> - <summary> - 日期格式 - </summary> - </member> - <member name="P:FineUI.DatePicker.MaxDate"> - <summary> - 最大日期 - </summary> - </member> - <member name="P:FineUI.DatePicker.MinDate"> - <summary> - 最小日期 - </summary> - </member> - <member name="P:FineUI.DatePicker.EnableDateSelect"> - <summary> - 选择日期是否自动回发 - </summary> - </member> - <member name="P:FineUI.DatePicker.EnableDateSelectEvent"> - <summary> - 选择日期是否自动回发 - </summary> - </member> - <member name="E:FineUI.DatePicker.DateSelect"> - <summary> - 日期选定事件(需要启用EnableDateSelect) - </summary> - </member> - <member name="T:FineUI.TabCollection"> - <summary> - 选项卡集合 - </summary> - </member> - <member name="M:FineUI.TabCollection.#ctor(FineUI.TabStrip)"> - <summary> - 构造函数 - </summary> - <param name="parent">父控件实例</param> - </member> - <member name="T:FineUI.ScriptBlock"> - <summary> - 控件-控件相关脚本 - </summary> - </member> - <member name="P:FineUI.ScriptBlock.Control"> - <summary> - 要注册脚本的控件 - </summary> - </member> - <member name="P:FineUI.ScriptBlock.Script"> - <summary> - 脚本 - </summary> - </member> - <member name="P:FineUI.ScriptBlock.ExtraScript"> - <summary> - 额外的脚本 - </summary> - </member> - <member name="T:FineUI.Layout"> - <summary> - 布局类型 - </summary> - </member> - <member name="F:FineUI.Layout.Container"> - <summary> - 容器布局(默认值) - </summary> - </member> - <member name="F:FineUI.Layout.Anchor"> - <summary> - 锚点布局 - </summary> - </member> - <member name="F:FineUI.Layout.Border"> - <summary> - 边框布局(只用于RegionPanel控件) - </summary> - </member> - <member name="F:FineUI.Layout.Fit"> - <summary> - 自适应布局(用于只有一个子控件的情况) - </summary> - </member> - <member name="F:FineUI.Layout.Accordion"> - <summary> - 手风琴布局(只用于Accordion控件) - </summary> - </member> - <member name="F:FineUI.Layout.Form"> - <summary> - 表单布局(用于SimpleForm和Form控件) - </summary> - </member> - <member name="F:FineUI.Layout.Card"> - <summary> - 卡片布局(只用于TabStrip控件) - </summary> - </member> - <member name="F:FineUI.Layout.Column"> - <summary> - 列布局 - </summary> - </member> - <member name="F:FineUI.Layout.Absolute"> - <summary> - 绝对定位布局 - </summary> - </member> - <member name="F:FineUI.Layout.Row"> - <summary> - 行布局 - </summary> - </member> - <member name="F:FineUI.Layout.Table"> - <summary> - 表格布局 - </summary> - </member> - <member name="F:FineUI.Layout.VBox"> - <summary> - 垂直盒子布局 - </summary> - </member> - <member name="F:FineUI.Layout.HBox"> - <summary> - 水平盒子布局 - </summary> - </member> - <member name="T:FineUI.LayoutHelper"> - <summary> - 布局类型名称 - </summary> - </member> - <member name="T:FineUI.ExtDateTimeConvertor"> - <summary> - Extjs和.Net之间的日期格式转换 - </summary> - </member> - <member name="M:FineUI.ExtDateTimeConvertor.GetExtDateObject(System.DateTime)"> - <summary> - 创建Javascript的Date对象字符串 - </summary> - <param name="date">日期对象</param> - <returns>日期的客户端脚本形式</returns> - </member> - <member name="M:FineUI.ExtDateTimeConvertor.ConvertToExtDateFormat(System.String)"> - <summary> - 将.Net日期格式字符串转换为ExtJS的日期格式字符串 - </summary> - <param name="dotnetFormat">.Net日期格式字符串</param> - <returns>ExtJS的日期格式字符串</returns> - </member> - <member name="T:FineUI.NumberBox"> - <summary> - 数字输入框控件 - </summary> - </member> - <member name="M:FineUI.NumberBox.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.NumberBox.NoDecimal"> - <summary> - 不允许小数 - </summary> - </member> - <member name="P:FineUI.NumberBox.NoNegative"> - <summary> - 不允许负数 - </summary> - </member> - <member name="P:FineUI.NumberBox.MaxValue"> - <summary> - 最大值 - </summary> - </member> - <member name="P:FineUI.NumberBox.MinValue"> - <summary> - 最小值 - </summary> - </member> - <member name="P:FineUI.NumberBox.DecimalPrecision"> - <summary> - 小数点后的位数(默认为2) - </summary> - </member> - <member name="T:FineUI.TextMode"> - <summary> - 文本框类型 - </summary> - </member> - <member name="F:FineUI.TextMode.Text"> - <summary> - 普通文本框(默认值) - </summary> - </member> - <member name="F:FineUI.TextMode.Password"> - <summary> - 密码输入框 - </summary> - </member> - <member name="T:FineUI.TextModeHelper"> - <summary> - 文本框类型名称 - </summary> - </member> - <member name="T:FineUI.ToolTipType"> - <summary> - 提示框的类型 - </summary> - </member> - <member name="F:FineUI.ToolTipType.Qtip"> - <summary> - Extjs的浮动提示框(默认值) - </summary> - </member> - <member name="F:FineUI.ToolTipType.Title"> - <summary> - HTML标签的title属性 - </summary> - </member> - <member name="T:FineUI.ToolTipTypeName"> - <summary> - 提示框的类型名称 - </summary> - </member> - <member name="T:FineUI.JsHelper"> - <summary> - JavaScript帮助类 - </summary> - </member> - <member name="M:FineUI.JsHelper.GetJsStringWithScriptTag(System.String)"> - <summary> - 将包含JavaScript代码块的字符串转换为可以使用的客户端脚本 - </summary> - <param name="text">包含JavaScript代码块的字符串</param> - <returns>转换后的客户端脚本</returns> - </member> - <member name="M:FineUI.JsHelper.GetJsString(System.String)"> - <summary> - 获取单引号括起来的JavaScript字符串,一般用在GetReference函数中 - 你好 -> '你好' - 你'好 -> '你\'好' - 你\好 -> '你\\好' - </summary> - <param name="text">源字符串</param> - <returns>单引号括起来的字符串</returns> - </member> - <member name="M:FineUI.JsHelper.GetJsStringArray(System.String[])"> - <summary> - 获取字符串数组的脚本字符串形式 - </summary> - <param name="values">字符串数组</param> - <returns>字符串数组的脚本字符串</returns> - </member> - <member name="M:FineUI.JsHelper.GetJsIntArray(System.Int32[])"> - <summary> - 获取整形数组的脚本字符串形式 - </summary> - <param name="values">整数数组</param> - <returns>整形数组的脚本字符串</returns> - </member> - <member name="M:FineUI.JsHelper.GetFunction(System.String,System.String[])"> - <summary> - 获取一段完成的JavaScript函数 - </summary> - <param name="jsContent">函数主体</param> - <param name="funParameters">函数参数</param> - <returns>字符串表示的JavaScript函数</returns> - </member> - <member name="M:FineUI.JsHelper.GetDeferScript(System.String,System.Int32)"> - <summary> - 获取延迟执行JavaScript脚本的字符串 - </summary> - <param name="jsContent">需要执行的脚本内容</param> - <param name="milliseconds">延迟毫秒数</param> - <returns>延迟执行的客户端脚本</returns> - </member> - <member name="M:FineUI.JsHelper.GetDeferScript(System.String,System.Int32,System.String)"> - <summary> - 获取延迟执行JavaScript脚本的字符串 - </summary> - <param name="jsContent">需要执行的脚本内容</param> - <param name="milliseconds">延迟毫秒数</param> - <param name="scope">执行脚本时的函数上下文</param> - <returns>延迟执行的客户端脚本</returns> - </member> - <member name="M:FineUI.JsHelper.Enquote(System.String)"> - <summary> - 返回的是双引号括起来的字符串,用来作为JSON属性比较合适 - </summary> - <param name="s">源字符串</param> - <returns>双引号括起来的字符串</returns> - </member> - <member name="M:FineUI.JsHelper.NumberToString(System.Object)"> - <summary> - 将数字对象转化为字符串 - </summary> - <param name="number">数字对象</param> - <returns>字符串</returns> - </member> - <member name="T:FineUI.Alert"> - <summary> - 对话框帮助类 - </summary> - </member> - <member name="F:FineUI.Alert.DefaultMessageBoxIcon"> - <summary> - 默认提示对话图标 - </summary> - </member> - <member name="M:FineUI.Alert.Show"> - <summary> - 显示对话框 - </summary> - </member> - <member name="M:FineUI.Alert.GetShowReference"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.Show(System.String)"> - <summary> - 显示对话框 - </summary> - <param name="message">消息正文</param> - </member> - <member name="M:FineUI.Alert.Show(System.String,System.String)"> - <summary> - 显示对话框 - </summary> - <param name="message">消息正文</param> - <param name="title">标题</param> - </member> - <member name="M:FineUI.Alert.Show(System.String,FineUI.MessageBoxIcon)"> - <summary> - 显示对话框 - </summary> - <param name="message">消息正文</param> - <param name="icon">图标</param> - </member> - <member name="M:FineUI.Alert.Show(System.String,System.String,System.String)"> - <summary> - 显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - </member> - <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - </member> - <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> - <summary> - 显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - </member> - <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target)"> - <summary> - 显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <param name="target">显示对话框的目标页面</param> - </member> - <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target,FineUI.Icon,System.String)"> - <summary> - 显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="messageBoxIcon"></param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <param name="target">显示对话框的目标页面</param> - <param name="icon">自定义对话框图标</param> - <param name="iconUrl">自定义对话框图标地址</param> - </member> - <member name="M:FineUI.Alert.ShowInParent(System.String)"> - <summary> - 在父页面中显示对话框 - </summary> - <param name="message">消息正文</param> - </member> - <member name="M:FineUI.Alert.ShowInParent(System.String,System.String)"> - <summary> - 在父页面中显示对话框 - </summary> - <param name="message">消息正文</param> - <param name="title">标题</param> - </member> - <member name="M:FineUI.Alert.ShowInParent(System.String,FineUI.MessageBoxIcon)"> - <summary> - 在父页面中显示对话框 - </summary> - <param name="message">消息正文</param> - <param name="icon">图标</param> - </member> - <member name="M:FineUI.Alert.ShowInParent(System.String,System.String,System.String)"> - <summary> - 在父页面中显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - </member> - <member name="M:FineUI.Alert.ShowInParent(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 在父页面中显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - </member> - <member name="M:FineUI.Alert.ShowInParent(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> - <summary> - 在父页面中显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - </member> - <member name="M:FineUI.Alert.ShowInTop(System.String)"> - <summary> - 在顶层窗口中显示对话框 - </summary> - <param name="message">消息正文</param> - </member> - <member name="M:FineUI.Alert.ShowInTop(System.String,System.String)"> - <summary> - 在顶层窗口中显示对话框 - </summary> - <param name="message">消息正文</param> - <param name="title">对话框标题</param> - </member> - <member name="M:FineUI.Alert.ShowInTop(System.String,FineUI.MessageBoxIcon)"> - <summary> - 在顶层窗口中显示对话框 - </summary> - <param name="message">消息正文</param> - <param name="icon">自定义对话框图标</param> - </member> - <member name="M:FineUI.Alert.ShowInTop(System.String,System.String,System.String)"> - <summary> - - </summary> - <param name="message">消息正文</param> - <param name="title">对话框标题</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - </member> - <member name="M:FineUI.Alert.ShowInTop(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - - </summary> - <param name="message">消息正文</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - </member> - <member name="M:FineUI.Alert.ShowInTop(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> - <summary> - 在顶层窗口中显示对话框 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String,System.String)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="icon">自定义对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,System.String)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <param name="target">显示对话框的目标页面</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target,FineUI.Icon,System.String)"> - <summary> - 获取显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="messageBoxIcon"></param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <param name="target">显示对话框的目标页面</param> - <param name="icon"></param> - <param name="iconUrl">自定义对话框图标地址</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInParentReference(System.String)"> - <summary> - 获取在父页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String)"> - <summary> - 获取在父页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInParentReference(System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取在父页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="icon">自定义对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取在父页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String,System.String)"> - <summary> - 获取在父页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> - <summary> - 获取在父页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInTopReference(System.String)"> - <summary> - 获取在最上层页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String)"> - <summary> - 获取在最上层页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInTopReference(System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取在最上层页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="icon">自定义对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String,FineUI.MessageBoxIcon)"> - <summary> - 获取在最上层页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String,System.String)"> - <summary> - 获取在最上层页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <returns>客户端脚本</returns> - </member> - <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> - <summary> - 获取在最上层页面中显示对话框的客户端脚本 - </summary> - <param name="message">对话框消息</param> - <param name="title">对话框标题</param> - <param name="icon">自定义对话框图标</param> - <param name="okScript">点击确定按钮执行的客户端脚本</param> - <returns>客户端脚本</returns> - </member> - <member name="P:FineUI.Alert.Message"> - <summary> - 对话框消息正文 - </summary> - </member> - <member name="P:FineUI.Alert.Title"> - <summary> - 对话框标题 - </summary> - </member> - <member name="P:FineUI.Alert.MessageBoxIcon"> - <summary> - 对话框图标 - </summary> - </member> - <member name="P:FineUI.Alert.OkScript"> - <summary> - 点击确认按钮执行的JavaScript脚本 - </summary> - </member> - <member name="P:FineUI.Alert.Target"> - <summary> - 对话框的目标位置 - </summary> - </member> - <member name="P:FineUI.Alert.IconUrl"> - <summary> - 自定义对话框图标地址 - </summary> - </member> - <member name="P:FineUI.Alert.Icon"> - <summary> - 自定义对话框图标 - </summary> - </member> - <member name="T:FineUI.MessageBoxIcon"> - <summary> - 消息框图标类型 - </summary> - </member> - <member name="F:FineUI.MessageBoxIcon.Information"> - <summary> - 信息(默认值) - </summary> - </member> - <member name="F:FineUI.MessageBoxIcon.Warning"> - <summary> - 警告 - </summary> - </member> - <member name="F:FineUI.MessageBoxIcon.Question"> - <summary> - 问题 - </summary> - </member> - <member name="F:FineUI.MessageBoxIcon.Error"> - <summary> - 错误 - </summary> - </member> - <member name="T:FineUI.MessageBoxIconHelper"> - <summary> - 消息框图标类型名称 - </summary> - </member> - <member name="T:FineUI.JsObjectBuilder"> - <summary> - 创建Javascript对象参数的帮助类 - </summary> - </member> - <member name="M:FineUI.JsObjectBuilder.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.JsObjectBuilder.#ctor(System.String,System.Object)"> - <summary> - 构造函数 - </summary> - <param name="propertyName">属性名</param> - <param name="propertyValue">属性值</param> - </member> - <member name="M:FineUI.JsObjectBuilder.#ctor(System.String,System.Object,System.Boolean)"> - <summary> - 构造函数 - </summary> - <param name="propertyName">属性名</param> - <param name="propertyValue">属性值</param> - <param name="persistOriginal">是否保持原样</param> - </member> - <member name="M:FineUI.JsObjectBuilder.RemoveProperty(System.String)"> - <summary> - 删除属性 - </summary> - <param name="propertyName">属性名</param> - </member> - <member name="M:FineUI.JsObjectBuilder.ContainsProperty(System.String)"> - <summary> - 是否包含属性 - </summary> - <param name="propertyName">属性名</param> - <returns></returns> - </member> - <member name="M:FineUI.JsObjectBuilder.AddProperty(System.String,System.Object)"> - <summary> - 添加属性 - </summary> - <param name="propertyName">属性名</param> - <param name="propertyValue">属性值</param> - </member> - <member name="M:FineUI.JsObjectBuilder.AddProperty(System.String,System.Object,System.Boolean)"> - <summary> - 添加属性 - </summary> - <param name="propertyName">属性名</param> - <param name="propertyValue">属性值</param> - <param name="persistOriginal">是否保持原样</param> - </member> - <member name="M:FineUI.JsObjectBuilder.GetProperty(System.String)"> - <summary> - 获取属性 - </summary> - <param name="propertyName">属性名</param> - <returns>属性值</returns> - </member> - <member name="M:FineUI.JsObjectBuilder.ToString"> - <summary> - 返回对象的JSON字符串形式 - </summary> - <returns>对象的JSON形式</returns> - </member> - <member name="P:FineUI.JsObjectBuilder.Count"> - <summary> - 已经添加属性的个数 - </summary> - </member> - <member name="T:FineUI.ResourceHelper"> - <summary> - 资源帮助类 - </summary> - </member> - <member name="M:FineUI.ResourceHelper.GetWebResourceUrlResAxd(System.String)"> - <summary> - 获取嵌入资源的 res.axd 地址 - </summary> - <param name="resName">资源名称</param> - <returns>资源地址</returns> - </member> - <member name="M:FineUI.ResourceHelper.GetWebResourceUrlResAxd(System.Web.UI.Page,System.String)"> - <summary> - 获取嵌入资源的 res.axd 地址 - </summary> - <param name="page">页面对象</param> - <param name="resName">资源名称</param> - <returns>资源地址</returns> - </member> - <member name="M:FineUI.ResourceHelper.GetWebResourceUrl(System.String)"> - <summary> - 获取嵌入资源的地址 - </summary> - <param name="resourceName">资源名称</param> - <returns>资源地址</returns> - </member> - <member name="M:FineUI.ResourceHelper.GetWebResourceUrl(System.Web.UI.Page,System.String)"> - <summary> - 获取嵌入资源的地址 - </summary> - <param name="page">页面实例</param> - <param name="resourceName">资源名称</param> - <returns>资源地址</returns> - </member> - <member name="M:FineUI.ResourceHelper.GetResourceContent(System.String)"> - <summary> - 取得资源的内容 - </summary> - <param name="resourceName">资源名称</param> - <returns>资源内容</returns> - </member> - <member name="M:FineUI.ResourceHelper.GetResourceContentAsBinary(System.String)"> - <summary> - 取得资源的二进制内容 - </summary> - <param name="resourceName">资源名称</param> - <returns>资源的二进制内容</returns> - </member> - <member name="M:FineUI.ResourceHelper.GetEmptyImageUrl"> - <summary> - 获取空白图片的地址 - </summary> - <returns>空白图片的地址</returns> - </member> - <member name="T:FineUI.ConfigSectionName"> - <summary> - 配置字段名称 - </summary> - </member> - <member name="T:FineUI.ConfigPropertyName"> - <summary> - 字段属性名称 - </summary> - </member> - <member name="T:FineUI.ConfigPropertyValue"> - <summary> - 字段属性值 - </summary> - </member> - <member name="T:FineUI.CategoryName"> - <summary> - 属性分类的名称 - </summary> - </member> - <member name="F:FineUI.CategoryName.BASEOPTIONS"> - <summary> - 基本属性 - </summary> - </member> - <member name="F:FineUI.CategoryName.OPTIONS"> - <summary> - 属性 - </summary> - </member> - <member name="F:FineUI.CategoryName.VALIDATION"> - <summary> - 表单验证 - </summary> - </member> - <member name="F:FineUI.CategoryName.LAYOUT"> - <summary> - 布局 - </summary> - </member> - <member name="F:FineUI.CategoryName.ACTION"> - <summary> - 事件 - </summary> - </member> - <member name="T:FineUI.TextBox"> - <summary> - 文本框控件 - </summary> - </member> - <member name="M:FineUI.TextBox.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.TextBox.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TextBox.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="P:FineUI.TextBox.TextMode"> - <summary> - 文本框类型 - </summary> - </member> - <member name="T:FineUI.ConfigSection"> - <summary> - FineUI在Web.config中的配置节 - </summary> - </member> - <member name="P:FineUI.ConfigSection.Theme"> - <summary> - 主题 - </summary> - </member> - <member name="P:FineUI.ConfigSection.Language"> - <summary> - 语言 - </summary> - </member> - <member name="P:FineUI.ConfigSection.FormMessageTarget"> - <summary> - 表单验证消息的提示位置 - </summary> - </member> - <member name="P:FineUI.ConfigSection.FormLabelAlign"> - <summary> - 表单中标签的位置 - </summary> - </member> - <member name="P:FineUI.ConfigSection.FormOffsetRight"> - <summary> - 表单控件右侧距离边界的距离 - </summary> - </member> - <member name="P:FineUI.ConfigSection.FormLabelWidth"> - <summary> - 表单控件标签的宽度 - </summary> - </member> - <member name="P:FineUI.ConfigSection.FormLabelSeparator"> - <summary> - 表单控件标签的分隔符 - </summary> - </member> - <member name="P:FineUI.ConfigSection.EnableAjax"> - <summary> - 启用AJAX - </summary> - </member> - <member name="P:FineUI.ConfigSection.EnableAjaxLoading"> - <summary> - 启用AJAX加载提示信息 - </summary> - </member> - <member name="P:FineUI.ConfigSection.AjaxLoadingType"> - <summary> - AJAX提示信息的类型 - </summary> - </member> - <member name="P:FineUI.ConfigSection.AjaxTimeout"> - <summary> - 客户端AJAX超时时间 - </summary> - </member> - <member name="P:FineUI.ConfigSection.EnableBigFont"> - <summary> - 是否启用大字体(将ExtJS所有11px字体改为12px) - </summary> - </member> - <member name="P:FineUI.ConfigSection.DebugMode"> - <summary> - 是否启用调试模式 - </summary> - </member> - <member name="P:FineUI.ConfigSection.ExtjsBasePath"> - <summary> - ExtJS文件夹所在的根目录 - </summary> - </member> - <member name="P:FineUI.ConfigSection.IconBasePath"> - <summary> - 图标所在的根目录 - </summary> - </member> - <member name="P:FineUI.ConfigSection.CustomThemeBasePath"> - <summary> - 自定义主题所在的根目录 - </summary> - </member> - <member name="P:FineUI.ConfigSection.CustomTheme"> - <summary> - 自定义主题名称 - </summary> - </member> - <member name="P:FineUI.ConfigSection.EnableXStateCompress"> - <summary> - 是否启用XState压缩(默认为true) - </summary> - </member> - <member name="T:FineUI.ResourceManager"> - <summary> - 存在 Page.Items 上下文中,向页面注册资源 - </summary> - </member> - <member name="F:FineUI.ResourceManager._startupCssDic"> - <summary> - 需要向页面注册的样式列表 - </summary> - </member> - <member name="M:FineUI.ResourceManager.Page_PreRenderComplete(System.Object,System.EventArgs)"> - <summary> - 准备呈现页面内容,在保存页面状态之前 - </summary> - <param name="sender"></param> - <param name="e"></param> - </member> - <member name="M:FineUI.ResourceManager.SetupFirstLoadResource"> - <summary> - 注册页面第一次加载时的样式和脚本 - </summary> - </member> - <member name="M:FineUI.ResourceManager.RegisterStartupScript"> - <summary> - 注册页面脚本 - </summary> - </member> - <member name="M:FineUI.ResourceManager.IsStartupScriptRegistered(System.String)"> - <summary> - 是否注册startup脚本 - </summary> - <param name="scriptKey"></param> - <returns></returns> - </member> - <member name="M:FineUI.ResourceManager.GetStartupScript(System.String)"> - <summary> - 取得页面初始化时脚本 - </summary> - <param name="script"></param> - <returns></returns> - </member> - <member name="M:FineUI.ResourceManager.GetSortedControlScriptList"> - <summary> - 返回经过排序的 _startupControlScriptList 列表,子控件排在父控件的前面 - </summary> - <returns></returns> - </member> - <member name="M:FineUI.ResourceManager.GetInsertIndex(System.Web.UI.Control,System.Collections.Generic.List{FineUI.ScriptBlock})"> - <summary> - 取得应该将Script插入的位置 - modified by 30372245@qq.com, 要能够向上回溯,因为控件A的父的父控件可能不存在列表中 - </summary> - <param name="testControl"></param> - <param name="testList"></param> - <returns></returns> - </member> - <member name="M:FineUI.ResourceManager.AddStartupCSS(System.String,System.String)"> - <summary> - 添加样式 - </summary> - <param name="key"></param> - <param name="cssConent"></param> - <returns></returns> - </member> - <member name="M:FineUI.ResourceManager.RemoveStartupCSS(System.String)"> - <summary> - 删除已经添加的CSS样式 - </summary> - <param name="key"></param> - </member> - <member name="M:FineUI.ResourceManager.AddStartupScript(System.Web.UI.Control,System.String,System.String)"> - <summary> - 添加脚本 - 相同控件的脚本合并在一起(30372245@qq.com 2008-7-4) - </summary> - <param name="control"></param> - <param name="script"></param> - <param name="extraScript"></param> - </member> - <member name="M:FineUI.ResourceManager.IsStartupScriptExist(System.Web.UI.Control)"> - <summary> - 控件control的注册脚本是否存在 - </summary> - <param name="control"></param> - <returns></returns> - </member> - <member name="P:FineUI.ResourceManager.AjaxScriptList"> - <summary> - AJAX时每个控件需要注册的脚本 - </summary> - </member> - <member name="P:FineUI.ResourceManager.AjaxAbsoluteScriptList"> - <summary> - AJAX时不依赖控件的脚本 - </summary> - </member> - <member name="P:FineUI.ResourceManager.AjaxShortNameList"> - <summary> - AJAX时使用到的所有短名称列表 - 比如:X('SimpleForm1_tbxUserName') -> cmp0 - X('SimpleForm1_tbxPassword') -> cmp1 - </summary> - </member> - <member name="P:FineUI.ResourceManager.Instance"> - <summary> - 取得 ResourceManager 的实例,单件模式 - </summary> - </member> - <member name="T:FineUI.CheckBoxList"> - <summary> - 复选框列表控件 - </summary> - </member> - <member name="M:FineUI.CheckBoxList.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.CheckBoxList.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.CheckBoxList.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.CheckBoxList.DataBind"> - <summary> - 绑定到数据源 - </summary> - </member> - <member name="M:FineUI.CheckBoxList.DataBindToDataTable(System.Data.DataTable)"> - <summary> - 绑定到数据表 - </summary> - <param name="dataTable"></param> - </member> - <member name="M:FineUI.CheckBoxList.DataBindToEnumerable(System.Collections.IEnumerable)"> - <summary> - 绑定到可枚举列表 - </summary> - <param name="enumerable"></param> - </member> - <member name="M:FineUI.CheckBoxList.GetPropertyValue(System.Object,System.String)"> - <summary> - 取得属性值 - </summary> - <param name="obj"></param> - <param name="propertyName"></param> - </member> - <member name="M:FineUI.CheckBoxList.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> - <summary> - 处理回发数据 - </summary> - <param name="postDataKey">回发数据键</param> - <param name="postCollection">回发数据集</param> - <returns>回发数据是否改变</returns> - </member> - <member name="M:FineUI.CheckBoxList.OnSelectedIndexChanged(System.EventArgs)"> - <summary> - 触发选中项改变事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="M:FineUI.CheckBoxList.RaisePostDataChangedEvent"> - <summary> - 触发回发数据改变事件 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.Required"> - <summary> - 是否必填项 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.RequiredMessage"> - <summary> - 为空时提示信息 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.AutoPostBack"> - <summary> - 是否自动回发 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.ColumnNumber"> - <summary> - 渲染成几列 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.ColumnVertical"> - <summary> - 是否按照纵向顺序渲染 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.DataTextField"> - <summary> - 显示文本的数据字段 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.DataTextFormatString"> - <summary> - 显示文本的格式化字符串 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.DataValueField"> - <summary> - 显示值的数据字段 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.DataSource"> - <summary> - 数据源 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.SelectedValueArray"> - <summary> - [AJAX属性]选中项的值 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.SelectedIndexArray"> - <summary> - [AJAX属性]选中项的索引 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.SelectedItemArray"> - <summary> - 选中项 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.Items"> - <summary> - 复选框集合 - </summary> - </member> - <member name="P:FineUI.CheckBoxList.X_Items"> - <summary> - 保存的复选框数据(内部使用) - </summary> - </member> - <member name="E:FineUI.CheckBoxList.SelectedIndexChanged"> - <summary> - 选中项改变事件(需要启用AutoPostBack) - </summary> - </member> - <member name="T:FineUI.CheckItem"> - <summary> - 复选框列表项 - </summary> - </member> - <member name="M:FineUI.CheckItem.#ctor"> - <summary> - 构造函数 - </summary> - </member> - <member name="M:FineUI.CheckItem.#ctor(System.String,System.String)"> - <summary> - 构造函数 - </summary> - <param name="text"></param> - <param name="value"></param> - </member> - <member name="P:FineUI.CheckItem.Selected"> - <summary> - 是否选中 - </summary> - </member> - <member name="P:FineUI.CheckItem.Text"> - <summary> - 显示的文本 - </summary> - </member> - <member name="P:FineUI.CheckItem.Value"> - <summary> - 值 - </summary> - </member> - <member name="T:FineUI.CheckItemCollection"> - <summary> - 复选项集合 - </summary> - </member> - <member name="M:FineUI.CheckItemCollection.FindByText(System.String)"> - <summary> - 通过文本查找复选项 - </summary> - <param name="text">文本</param> - <returns>复选项</returns> - </member> - <member name="M:FineUI.CheckItemCollection.FindByText(System.String,System.Boolean)"> - <summary> - 通过文本查找复选项 - </summary> - <param name="text">文本</param> - <param name="stripHtml">是否去除HTML标签</param> - <returns>复选项</returns> - </member> - <member name="M:FineUI.CheckItemCollection.FindByValue(System.String)"> - <summary> - 通过值查找复选项 - </summary> - <param name="value">值</param> - <returns>复选项</returns> - </member> - <member name="M:FineUI.CheckItemCollection.Add(System.String,System.String)"> - <summary> - 添加复选项 - </summary> - <param name="text">文本</param> - <param name="value">值</param> - <returns>新元素的插入位置</returns> - </member> - <member name="T:FineUI.TimePicker"> - <summary> - 时间选择框控件 - </summary> - </member> - <member name="M:FineUI.TimePicker.OnAjaxPreRender"> - <summary> - 渲染 HTML 之前调用(AJAX回发) - </summary> - </member> - <member name="M:FineUI.TimePicker.OnFirstPreRender"> - <summary> - 渲染 HTML 之前调用(页面第一次加载或者普通回发) - </summary> - </member> - <member name="M:FineUI.TimePicker.RaisePostBackEvent(System.String)"> - <summary> - 处理回发事件 - </summary> - <param name="eventArgument">事件参数</param> - </member> - <member name="M:FineUI.TimePicker.OnDateSelect(System.EventArgs)"> - <summary> - 触发日期选择事件 - </summary> - <param name="e">事件参数</param> - </member> - <member name="P:FineUI.TimePicker.EnableEdit"> - <summary> - 是否允许编辑 - </summary> - </member> - <member name="P:FineUI.TimePicker.SelectedDate"> - <summary> - 选择的时间 - </summary> - </member> - <member name="P:FineUI.TimePicker.AltFormats"> - <summary> - 尝试解析时间的格式列表 - </summary> - </member> - <member name="P:FineUI.TimePicker.TimeFormatString"> - <summary> - 时间格式(默认为HH:mm,24小时制,比如“20:30”) - </summary> - </member> - <member name="P:FineUI.TimePicker.MaxTime"> - <summary> - 最大时间 - </summary> - </member> - <member name="P:FineUI.TimePicker.MaxTimeText"> - <summary> - 最大时间的字符串形式 - </summary> - </member> - <member name="P:FineUI.TimePicker.MinTime"> - <summary> - 最小时间 - </summary> - </member> - <member name="P:FineUI.TimePicker.MinTimeText"> - <summary> - 最小时间的字符串形式 - </summary> - </member> - <member name="P:FineUI.TimePicker.Increment"> - <summary> - 列表中每个时间值相差的分钟数(默认为15分钟) - </summary> - </member> - <member name="P:FineUI.TimePicker.EnableTimeSelectEvent"> - <summary> - 选择时间是否自动回发 - </summary> - </member> - <member name="P:FineUI.TimePicker.EnableTimeSelect"> - <summary> - 选择时间是否自动回发 - </summary> - </member> - <member name="E:FineUI.TimePicker.DateSelect"> - <summary> - 日期选择事件(需要启用EnableDateSelect) - </summary> - </member> - </members> -</doc> +<?xml version="1.0"?> +<doc> + <assembly> + <name>FineUI</name> + </assembly> + <members> + <member name="T:FineUI.FormBase"> + <summary> + 表单容器控件基类 + </summary> + </member> + <member name="T:FineUI.CollapsablePanel"> + <summary> + 可折叠面板控件基类(抽象类) + </summary> + </member> + <member name="T:FineUI.PanelBase"> + <summary> + 面板控件基类(抽象类) + </summary> + </member> + <member name="T:FineUI.Container"> + <summary> + 容器控件基类(抽象类) + </summary> + </member> + <member name="T:FineUI.BoxComponent"> + <summary> + 控件基类(抽象类) + </summary> + </member> + <member name="T:FineUI.Component"> + <summary> + 控件基类(抽象类) + </summary> + </member> + <member name="T:FineUI.ControlBase"> + <summary> + 控件基类(抽象类) + </summary> + </member> + <member name="M:FineUI.ControlBase.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.ControlBase.AddServerAjaxProperties(System.String[])"> + <summary> + 添加服务器AJAX属性 + </summary> + <param name="props">属性列表</param> + </member> + <member name="M:FineUI.ControlBase.AddClientAjaxProperties(System.String[])"> + <summary> + 添加客户端AJAX属性 + </summary> + <param name="props">属性列表</param> + </member> + <member name="M:FineUI.ControlBase.AddGzippedAjaxProperties(System.String[])"> + <summary> + 添加Gzip压缩属性 + </summary> + <param name="props">属性列表</param> + </member> + <member name="F:FineUI.ControlBase.InitialComplete"> + <summary> + 标示是否初始化完成 + </summary> + </member> + <member name="M:FineUI.ControlBase.OnInit(System.EventArgs)"> + <summary> + 页面初始化事件 + </summary> + <param name="e"></param> + </member> + <member name="M:FineUI.ControlBase.OnInitControl"> + <summary> + 在备份初始化属性之前修改属性值 + + 此时对控件的属性做修改是安全的: + 1. 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 + 2. 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 F_STATE 已经恢复完毕 + </summary> + </member> + <member name="M:FineUI.ControlBase.RenderControl(System.Web.UI.HtmlTextWriter)"> + <summary> + 重载 RenderControl,为了向子控件公开 RenderBeginTag 和 RenderEndTag 两个方法 + </summary> + <param name="writer">服务器控件输出流</param> + </member> + <member name="M:FineUI.ControlBase.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染控件的开始标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.ControlBase.RenderEndTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染控件的结束标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.ControlBase.OnPreRender(System.EventArgs)"> + <summary> + 渲染 HTML 之前调用 + </summary> + <param name="e"></param> + </member> + <member name="M:FineUI.ControlBase.OnBothPreRender"> + <summary> + 渲染 HTML 之前调用(计算被修改属性列表之前调用,可以在此修改属性) + </summary> + </member> + <member name="M:FineUI.ControlBase.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.ControlBase.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.ControlBase.GetFStateScriptID"> + <summary> + 获取FState的JS变量 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.ControlBase.PropertyModified(System.String)"> + <summary> + 回发过程中此属性是否被改变 + 如果是客户端可以改变的属性,仅在服务器端改变时才返回 true, + (如果仅是客户端改变,则返回 false,因为客户端改变的属性不需要再输出相应的 JavaScript 脚本) + </summary> + <param name="propertyName"></param> + <returns></returns> + </member> + <member name="M:FineUI.ControlBase.PropertyModified(System.String[])"> + <summary> + 回发过程中这些属性是否被改变 + 只要任何属性被改变,就返回 true + </summary> + <param name="propertyNames"></param> + <returns></returns> + </member> + <member name="M:FineUI.ControlBase.RecoverPropertiesFromJObject(Newtonsoft.Json.Linq.JObject)"> + <summary> + 从JObject恢复控件的属性 + </summary> + <param name="state">对象属性的JObject形式</param> + </member> + <member name="M:FineUI.ControlBase.ConvertPropertiesToJObject(System.Collections.Generic.List{System.String})"> + <summary> + 将控件的属性列表转化为JObject对象 + </summary> + <param name="propertyList">属性列表</param> + <returns>属性列表的JObject形式</returns> + </member> + <member name="M:FineUI.ControlBase.AddAjaxScript(System.String)"> + <summary> + AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + </summary> + <param name="script"></param> + </member> + <member name="M:FineUI.ControlBase.AddAjaxScript(System.Text.StringBuilder)"> + <summary> + AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + </summary> + <param name="sb"></param> + </member> + <member name="M:FineUI.ControlBase.AddStartupCSS(System.String,System.String)"> + <summary> + 添加CSS样式 + </summary> + <param name="key">键</param> + <param name="cssContent">CSS内容</param> + </member> + <member name="M:FineUI.ControlBase.RemoveStartupCSS(System.String)"> + <summary> + 删除CSS样式 + </summary> + <param name="key">键</param> + </member> + <member name="M:FineUI.ControlBase.AddStartupAbsoluteScript(System.String)"> + <summary> + 向页面添加控件无关脚本 + </summary> + <param name="script">客户端脚本</param> + </member> + <member name="M:FineUI.ControlBase.AddStartupAbsoluteScript(System.String,System.Int32)"> + <summary> + 向页面添加控件无关脚本 + </summary> + <param name="script">客户端脚本</param> + <param name="level">脚本层级</param> + </member> + <member name="M:FineUI.ControlBase.AddStartupScript(System.String)"> + <summary> + 添加控件相关脚本 + </summary> + <param name="scriptContent">客户端脚本</param> + </member> + <member name="M:FineUI.ControlBase.GetHiddenPropertyChangedScript"> + <summary> + 获取 Hidden 属性改变的 JavaScript 脚本 + 有些控件可能需要特别的逻辑,因此这里为虚函数(比如 Window 控件、Tab 控件) + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ControlBase.GetEnabledPropertyChangedScript"> + <summary> + 获取 Enabled 属性改变的 JavaScript 脚本 + 有些控件可能需要特别的逻辑,因此这里为虚函数 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ControlBase.GetPostBackEventReference"> + <summary> + 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','');) + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ControlBase.GetPostBackEventReference(System.String)"> + <summary> + 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + </summary> + <param name="eventArgument">事件参数</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ControlBase.GetPostBackEventReference(System.String,System.Boolean)"> + <summary> + 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + </summary> + <param name="eventArgument">事件参数</param> + <param name="enableAjax">是否启用AJAX</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ControlBase.GetSetHiddenFieldValueScript(System.String,System.String)"> + <summary> + 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + </summary> + <param name="id">隐藏字段ID</param> + <param name="value">隐藏字段值</param> + <returns></returns> + </member> + <member name="M:FineUI.ControlBase.GetSetHiddenFieldValueScript(System.String,System.String,System.String)"> + <summary> + 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + </summary> + <param name="id">隐藏字段ID</param> + <param name="value">隐藏字段值</param> + <param name="windowObj">隐藏字段所在的页面对象(JavaScript实例window)</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ControlBase.ResolveAttribuites(FineUI.HtmlNodeBuilder)"> + <summary> + 添加Attributes中的属性值 + </summary> + <param name="htmlBuilder">HtmlNodeBuilder对象</param> + </member> + <member name="M:FineUI.ControlBase.GetListenerFunction(System.String,System.String,System.String[])"> + <summary> + 获取客户端事件处理函数 + </summary> + <param name="eventName"></param> + <param name="jsContent"></param> + <param name="funParameters"></param> + <returns></returns> + </member> + <member name="M:FineUI.ControlBase.AddListener(System.String,System.String,System.String[])"> + <summary> + 向 OB 中添加客户端事件处理函数 + </summary> + <param name="eventName"></param> + <param name="jsContent"></param> + <param name="funParameters"></param> + </member> + <member name="P:FineUI.ControlBase.FState"> + <summary> + FState用来在服务器和客户端之间持久化控件状态。 + </summary> + </member> + <member name="P:FineUI.ControlBase.GzippedAjaxProperties"> + <summary> + 目前Gzippped的属性支持JObject/JArray/String类型 + </summary> + </member> + <member name="P:FineUI.ControlBase.XID"> + <summary> + JavaScript中使用ID(比如:x0, x1) + </summary> + </member> + <member name="P:FineUI.ControlBase.ScriptID"> + <summary> + 获取控件实例的JavaScript代码(比如:F('RegionPanel1_Button1')) + </summary> + </member> + <member name="P:FineUI.ControlBase.RenderWrapperNode"> + <summary> + 是否向页面输出控件的外部容器(默认:true) + 否:只创建Javascript对象而不添加到页面中 + 是:创建Javascript对象,并添加到页面中,页面上添加占位符 + </summary> + </member> + <member name="P:FineUI.ControlBase.OB"> + <summary> + 参数对象创建器 + </summary> + </member> + <member name="P:FineUI.ControlBase.PostBackState"> + <summary> + 从 HTTP 请求中恢复当前控件的状态 + 比如当前请求 Request.Form["F_STATE"] = {"btnClientClick":{"OnClientClick":"F.util.alert(\"This is an alert dialog\",\"\",Ext.MessageBox.INFO,'');"},"btnPressed":{"Pressed":false}} + 并且当前控件的 ClientID 是 "btnPressed",则返回值为 JObject 对象 {"Pressed":false} + </summary> + </member> + <member name="P:FineUI.ControlBase.CollectionGroupName"> + <summary> + 此控件所在的集合分组,只在BaseCollection中使用 + </summary> + </member> + <member name="P:FineUI.ControlBase.EnableViewState"> + <summary> + 不支持此属性(禁用控件默认的ViewState) + </summary> + </member> + <member name="P:FineUI.ControlBase.ClientID"> + <summary> + 控件的客户端ID(比如:RegionPanel1_Button1) + </summary> + </member> + <member name="P:FineUI.ControlBase.WrapperID"> + <summary> + 控件外部容器的客户端ID(比如:Button1_wrapper) + </summary> + </member> + <member name="P:FineUI.ControlBase.ProductName"> + <summary> + 产品名称 + </summary> + </member> + <member name="P:FineUI.ControlBase.ProductVersion"> + <summary> + 产品版本 + </summary> + </member> + <member name="P:FineUI.ControlBase.Attributes"> + <summary> + HTML标签属性 + </summary> + </member> + <member name="P:FineUI.ControlBase.ID"> + <summary> + 控件ID + </summary> + </member> + <member name="P:FineUI.ControlBase.Enabled"> + <summary> + [AJAX属性]是否可用 + </summary> + </member> + <member name="P:FineUI.ControlBase.RenderToClient"> + <summary> + 指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + </summary> + </member> + <member name="P:FineUI.ControlBase.Visible"> + <summary> + 只读属性,指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + </summary> + </member> + <member name="P:FineUI.ControlBase.Hidden"> + <summary> + [AJAX属性]是否隐藏控件 + </summary> + </member> + <member name="P:FineUI.ControlBase.HideMode"> + <summary> + 隐藏模式 + </summary> + </member> + <member name="P:FineUI.ControlBase.EnableAjax"> + <summary> + 是否启用AJAX + </summary> + </member> + <member name="P:FineUI.ControlBase.EnableFStateCompress"> + <summary> + 是否启用FState压缩(默认为false) + </summary> + </member> + <member name="P:FineUI.ControlBase.EnableAjaxLoading"> + <summary> + 是否启用Ajax正在加载提示 + </summary> + </member> + <member name="P:FineUI.ControlBase.AjaxLoadingType"> + <summary> + Ajax正在加载提示的类型 + </summary> + </member> + <member name="P:FineUI.ControlBase.IsFineUIAjaxPostBack"> + <summary> + 是否处于FineUI的AJAX回发过程 + </summary> + </member> + <member name="P:FineUI.ControlBase.Listeners"> + <summary> + 客户端事件列表 + </summary> + </member> + <member name="M:FineUI.Component.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Component.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Component.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Component.Focus"> + <summary> + 使控件获得焦点 + </summary> + </member> + <member name="M:FineUI.Component.Focus(System.Boolean)"> + <summary> + 使控件获得焦点,并选中控件中的文本内容 + </summary> + <param name="selectText">是否选中控件中的文本内容</param> + </member> + <member name="M:FineUI.Component.Focus(System.Boolean,System.Int32)"> + <summary> + 使控件获得焦点,并选中控件中的文本内容 + </summary> + <param name="selectText">是否选中控件中的文本内容</param> + <param name="delayMilliseconds">使控件获得焦点前延迟的毫秒数</param> + </member> + <member name="M:FineUI.Component.GetFocusReference"> + <summary> + 获得使控件获得焦点的脚本 + </summary> + <returns>JS脚本</returns> + </member> + <member name="M:FineUI.Component.GetFocusReference(System.Boolean)"> + <summary> + 获得使控件获得焦点,并选中控件中的文本内容的脚本 + </summary> + <param name="selectText">是否选中控件中的文本内容</param> + <returns>JS脚本</returns> + </member> + <member name="M:FineUI.Component.GetFocusReference(System.Boolean,System.Int32)"> + <summary> + 获得使控件获得焦点,并选中控件中的文本内容的脚本 + </summary> + <param name="selectText">是否选中控件中的文本内容</param> + <param name="delayMilliseconds">使控件获得焦点前延迟的毫秒数</param> + <returns>JS脚本</returns> + </member> + <member name="M:FineUI.Component.AddExtraStyle(System.String,System.String)"> + <summary> + 为已经添加到OB中的Style增加新的样式 + 注意:这个key-value不会保存到属性CssStyle中 + </summary> + <param name="key"></param> + <param name="value"></param> + </member> + <member name="P:FineUI.Component.FocusOnPageLoad"> + <summary> + 页面加载后立即获得焦点 + </summary> + </member> + <member name="P:FineUI.Component.CssClass"> + <summary> + [AJAX属性]控件样式类名 + </summary> + </member> + <member name="P:FineUI.Component.CssStyle"> + <summary> + [AJAX属性]控件样式 + </summary> + </member> + <member name="P:FineUI.Component.Margin"> + <summary> + 外边距 + </summary> + </member> + <member name="M:FineUI.BoxComponent.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.BoxComponent.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.BoxComponent.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.BoxComponent.GetParentControl"> + <summary> + 获取当前控件的父容器 + </summary> + <returns></returns> + </member> + <member name="P:FineUI.BoxComponent.Width"> + <summary> + 宽度 + </summary> + </member> + <member name="P:FineUI.BoxComponent.Height"> + <summary> + 高度 + </summary> + </member> + <member name="P:FineUI.BoxComponent.AnchorValue"> + <summary> + 锚点值(当父容器的Layout=Anchor时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.ColumnWidth"> + <summary> + 列的宽度(当父容器的Layout=Column时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.RowHeight"> + <summary> + 行的宽度(当父容器的Layout=Row时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.AbsoluteX"> + <summary> + 绝对定位的X坐标(当父容器的Layout=Absolute时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.AbsoluteY"> + <summary> + 绝对定位的Y坐标(当父容器的Layout=Absolute时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.TableConfigColumns"> + <summary> + 表格列数(当父容器的Layout=Table时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.TableRowspan"> + <summary> + 表格合并行(当父容器的Layout=Table时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.TableColspan"> + <summary> + 表格合并列(当父容器的Layout=Table时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.BoxConfigAlign"> + <summary> + 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.BoxConfigPosition"> + <summary> + 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.BoxConfigPadding"> + <summary> + 内边距(当本容器的Layout=VBox或者HBox时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.BoxConfigChildMargin"> + <summary> + 子控件的外边距(当本容器的Layout=VBox或者HBox时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.BoxFlex"> + <summary> + 控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效) + </summary> + </member> + <member name="P:FineUI.BoxComponent.RegionSplit"> + <summary> + 是否显示分隔条 + </summary> + </member> + <member name="P:FineUI.BoxComponent.RegionPosition"> + <summary> + 区域所在的位置 + </summary> + </member> + <member name="M:FineUI.Container.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Container.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Container.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.Container.FocusOnPageLoad"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Container.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="M:FineUI.PanelBase.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.PanelBase.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染控件的开始标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.PanelBase.RenderEndTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染控件的结束标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.PanelBase.CreateChildControls"> + <summary> + 创建子控件 + </summary> + </member> + <member name="M:FineUI.PanelBase.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.PanelBase.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.PanelBase.RefreshIFrame"> + <summary> + 刷新面板中的IFrame页面 + </summary> + </member> + <member name="M:FineUI.PanelBase.GetRefreshIFrameReference"> + <summary> + 获取刷新面板中IFrame页面的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.PanelBase.Reset"> + <summary> + 重置面板中所有字段 + </summary> + </member> + <member name="M:FineUI.PanelBase.GetResetReference"> + <summary> + 获取重置面板中所有字段的客户端脚本 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.PanelBase.GetClearDirtyReference"> + <summary> + 清空面板内表单字段的改变状态 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="P:FineUI.PanelBase.AutoScroll"> + <summary> + 是否自动滚动 + </summary> + </member> + <member name="P:FineUI.PanelBase.EnableFrame"> + <summary> + 启用自定义的圆角边框 + </summary> + </member> + <member name="P:FineUI.PanelBase.BodyStyle"> + <summary> + 内容区域的样式 + </summary> + </member> + <member name="P:FineUI.PanelBase.BodyPadding"> + <summary> + 内容区域的内边距,字符串类型,可以设置上下左右的内边距,比如'0px 5px'或'5px 10px 2px 2px' + </summary> + </member> + <member name="P:FineUI.PanelBase.ShowBorder"> + <summary> + 是否显示边框 + </summary> + </member> + <member name="P:FineUI.PanelBase.Toolbars"> + <summary> + 工具栏控件 + </summary> + </member> + <member name="P:FineUI.PanelBase.Items"> + <summary> + 子控件 + </summary> + </member> + <member name="P:FineUI.PanelBase.Content"> + <summary> + 子控件 + </summary> + </member> + <member name="P:FineUI.PanelBase.IFrameUrl"> + <summary> + [AJAX属性]IFrame的地址 + </summary> + </member> + <member name="P:FineUI.PanelBase.IFrameName"> + <summary> + IFrame的名称 + </summary> + </member> + <member name="P:FineUI.PanelBase.EnableIFrame"> + <summary> + 是否启用IFrame + </summary> + </member> + <member name="M:FineUI.CollapsablePanel.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.CollapsablePanel.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.CollapsablePanel.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.CollapsablePanel.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.CollapsablePanel.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.CollapsablePanel.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.CollapsablePanel.OnCollapse(System.EventArgs)"> + <summary> + 触发折叠事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.CollapsablePanel.OnExpand(System.EventArgs)"> + <summary> + 触发展开事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.CollapsablePanel.EnableCollapseEvent"> + <summary> + 是否启用折叠事件 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.EnableExpandEvent"> + <summary> + 是否启用展开事件 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.Expanded"> + <summary> + 是否展开 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.Collapsed"> + <summary> + [AJAX属性]是否折叠 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.EnableCollapse"> + <summary> + 是否允许折叠 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.Title"> + <summary> + [AJAX属性]标题 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.ShowHeader"> + <summary> + 是否显示标题栏 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.IconUrl"> + <summary> + 图标地址 + </summary> + </member> + <member name="P:FineUI.CollapsablePanel.Icon"> + <summary> + 图标 + </summary> + </member> + <member name="E:FineUI.CollapsablePanel.Collapse"> + <summary> + 折叠事件 + </summary> + </member> + <member name="E:FineUI.CollapsablePanel.Expand"> + <summary> + 展开事件 + </summary> + </member> + <member name="M:FineUI.FormBase.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.FormBase.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.FormBase.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.FormBase.EnableIFrame"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.FormBase.IFrameUrl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.FormBase.IFrameName"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.FormBase.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="P:FineUI.FormBase.LabelWidth"> + <summary> + 标签的宽度 + </summary> + </member> + <member name="P:FineUI.FormBase.LabelSeparator"> + <summary> + 标签与字段的分隔符 + </summary> + </member> + <member name="P:FineUI.FormBase.OffsetRight"> + <summary> + 距离右侧边界的宽度 + </summary> + </member> + <member name="P:FineUI.FormBase.LabelAlign"> + <summary> + 标签的位置 + </summary> + </member> + <member name="P:FineUI.FormBase.MessageTarget"> + <summary> + 表单中消息的位置 + </summary> + </member> + <member name="T:FineUI.RealTextField"> + <summary> + 表单文本输入框字段基类(抽象类) + </summary> + </member> + <member name="T:FineUI.TextField"> + <summary> + 表单文本输入框字段基类(抽象类) + </summary> + </member> + <member name="T:FineUI.Field"> + <summary> + 表单字段基类(抽象类) + </summary> + </member> + <member name="M:FineUI.Field.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Field.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Field.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Field.Reset"> + <summary> + 重置此字段的值(比如用来清空FileUpload的内容) + </summary> + </member> + <member name="M:FineUI.Field.GetResetReference"> + <summary> + 获取重置此字段的客户端脚本 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Field.GetValueReference"> + <summary> + 获取此字段值的客户端脚本(注意返回的脚本不带结束分号) + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Field.MarkInvalid(System.String)"> + <summary> + 设置字段验证失败的提示信息 + </summary> + <param name="message">提示信息</param> + </member> + <member name="M:FineUI.Field.ClearInvalid"> + <summary> + 清除验证失败的提示信息 + </summary> + </member> + <member name="M:FineUI.Field.GetMarkInvalidReference(System.String)"> + <summary> + 获取字段验证失败提示信息的客户端脚本 + </summary> + <param name="message">提示信息</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Field.GetClearInvalidReference"> + <summary> + 获取清除验证失败提示信息的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="P:FineUI.Field.ShowLabel"> + <summary> + 是否显示标签 + </summary> + </member> + <member name="P:FineUI.Field.ShowEmptyLabel"> + <summary> + 是否显示空白的标签 + </summary> + </member> + <member name="P:FineUI.Field.Label"> + <summary> + [AJAX属性]标签文本 + </summary> + </member> + <member name="P:FineUI.Field.ShowRedStar"> + <summary> + 在标签后面显示红色的星号(用来标识必填项) + </summary> + </member> + <member name="P:FineUI.Field.Readonly"> + <summary> + [AJAX属性]表单控件的只读状态 + </summary> + </member> + <member name="P:FineUI.Field.TabIndex"> + <summary> + Tab按键的跳转顺序 + </summary> + </member> + <member name="P:FineUI.Field.LabelSeparator"> + <summary> + 表单中字段与标签的分隔符 + </summary> + </member> + <member name="P:FineUI.Field.OffsetRight"> + <summary> + 距离右侧边界的宽度 + </summary> + </member> + <member name="P:FineUI.Field.LabelWidth"> + <summary> + 标签的宽度 + </summary> + </member> + <member name="M:FineUI.TextField.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.TextField.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TextField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.TextField.Required"> + <summary> + 是否必填项 + </summary> + </member> + <member name="P:FineUI.TextField.RequiredMessage"> + <summary> + 为空时提示信息 + </summary> + </member> + <member name="P:FineUI.TextField.MaxLength"> + <summary> + 最大长度 + </summary> + </member> + <member name="P:FineUI.TextField.MaxLengthMessage"> + <summary> + 超过最大长度时提示信息 + </summary> + </member> + <member name="P:FineUI.TextField.MinLength"> + <summary> + 最小长度 + </summary> + </member> + <member name="P:FineUI.TextField.MinLengthMessage"> + <summary> + 少于最小长度时提示信息 + </summary> + </member> + <member name="P:FineUI.TextField.RegexPattern"> + <summary> + RegexPattern + </summary> + </member> + <member name="P:FineUI.TextField.Regex"> + <summary> + 正则表达式 + </summary> + </member> + <member name="P:FineUI.TextField.RegexMessage"> + <summary> + 不满足正则表达式时提示信息 + </summary> + </member> + <member name="P:FineUI.TextField.RegexIgnoreCase"> + <summary> + 正则表达式是否忽略大小写 + </summary> + </member> + <member name="P:FineUI.TextField.CompareControl"> + <summary> + 需要比较的控件ID + </summary> + </member> + <member name="P:FineUI.TextField.CompareValue"> + <summary> + 需要比较的值 + </summary> + </member> + <member name="P:FineUI.TextField.CompareOperator"> + <summary> + 比较操作符 + </summary> + </member> + <member name="P:FineUI.TextField.CompareType"> + <summary> + 比较的类型 + </summary> + </member> + <member name="P:FineUI.TextField.CompareMessage"> + <summary> + 不满足比较条件时提示信息 + </summary> + </member> + <member name="P:FineUI.TextField.NextFocusControl"> + <summary> + 下一步获得焦点的控件(响应回车事件) + </summary> + </member> + <member name="M:FineUI.RealTextField.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.RealTextField.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.RealTextField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.RealTextField.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.RealTextField.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.RealTextField.OnTextChanged(System.EventArgs)"> + <summary> + 触发文本改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.RealTextField.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.RealTextField.OnBlur(System.EventArgs)"> + <summary> + 触发失去焦点事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.RealTextField.EmptyText"> + <summary> + 文本框为空时显示的文本 + </summary> + </member> + <member name="P:FineUI.RealTextField.Text"> + <summary> + [AJAX属性]文本 + </summary> + </member> + <member name="P:FineUI.RealTextField.AutoPostBack"> + <summary> + 是否自动回发(文本值改变) + </summary> + </member> + <member name="P:FineUI.RealTextField.EnableBlurEvent"> + <summary> + 启用失去焦点事件 + </summary> + </member> + <member name="E:FineUI.RealTextField.TextChanged"> + <summary> + 文本改变事件(需要启用AutoPostBack) + </summary> + </member> + <member name="E:FineUI.RealTextField.Blur"> + <summary> + 失去焦点事件(需要启用EnableBlurEvent) + </summary> + </member> + <member name="T:FineUI.Listener"> + <summary> + 客户端事件 + </summary> + </member> + <member name="M:FineUI.Listener.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Listener.#ctor(System.String,System.String)"> + <summary> + 构造函数 + </summary> + <param name="__event">客户端事件名称</param> + <param name="handler">客户端事件处理函数名称</param> + </member> + <member name="P:FineUI.Listener.Event"> + <summary> + 客户端事件名称 + </summary> + </member> + <member name="P:FineUI.Listener.Handler"> + <summary> + 客户端事件处理函数名称 + </summary> + </member> + <member name="T:FineUI.ListenerCollection"> + <summary> + 客户端事件集合 + </summary> + </member> + <member name="M:FineUI.ListenerCollection.GetEventHandler(System.String)"> + <summary> + 获取客户端处理函数名称 + </summary> + <param name="eventName">事件名称</param> + <returns>客户端处理函数名称</returns> + </member> + <member name="T:FineUI.ButtonType"> + <summary> + 按钮类型 + </summary> + </member> + <member name="F:FineUI.ButtonType.Button"> + <summary> + 普通按钮(默认值) + </summary> + </member> + <member name="F:FineUI.ButtonType.Submit"> + <summary> + 提交按钮(会为生成的input标签添加type="submit") + </summary> + </member> + <member name="F:FineUI.ButtonType.Reset"> + <summary> + 重置按钮(会为生成的input标签添加type="reset") + </summary> + </member> + <member name="T:FineUI.ButtonTypeName"> + <summary> + 按钮类型名称 + </summary> + </member> + <member name="T:FineUI.FieldType"> + <summary> + 表格可编辑字段的类型 + </summary> + </member> + <member name="F:FineUI.FieldType.Auto"> + <summary> + 自动(默认值) + </summary> + </member> + <member name="F:FineUI.FieldType.String"> + <summary> + 字符串 + </summary> + </member> + <member name="F:FineUI.FieldType.Int"> + <summary> + 整型 + </summary> + </member> + <member name="F:FineUI.FieldType.Float"> + <summary> + 浮点数 + </summary> + </member> + <member name="F:FineUI.FieldType.Boolean"> + <summary> + 布尔型 + </summary> + </member> + <member name="F:FineUI.FieldType.Date"> + <summary> + 日期 + </summary> + </member> + <member name="T:FineUI.FieldTypeName"> + <summary> + 表格可编辑字段的类型名称 + </summary> + </member> + <member name="T:FineUI.Renderer"> + <summary> + 表格可编辑字段渲染器 + </summary> + </member> + <member name="F:FineUI.Renderer.None"> + <summary> + 无(默认值) + </summary> + </member> + <member name="F:FineUI.Renderer.Capitalize"> + <summary> + 首字母大写 + </summary> + </member> + <member name="F:FineUI.Renderer.Date"> + <summary> + 日期(RendererArgument来指定日期格式化字符串) + RendererArgument: + 1. d 月中的某一天。一位数的日期没有前导零。 + 2. dd 月中的某一天。一位数的日期有一个前导零。 + 3. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 + 4. dddd 周中某天的完整名称,在 DayNames 中定义。 + 5. M 月份数字。一位数的月份没有前导零。 + 6. MM 月份数字。一位数的月份有一个前导零。 + 7. MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 + 8. MMMM 月份的完整名称,在 MonthNames 中定义。 + 9. y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 + 10. yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 + 11. yyyy 包括纪元的四位数的年份。 + </summary> + </member> + <member name="F:FineUI.Renderer.Ellipsis"> + <summary> + 截断字符串并添加省略号(RendererArgument来指定最大长度) + </summary> + </member> + <member name="F:FineUI.Renderer.FileSize"> + <summary> + 文件大小 + </summary> + </member> + <member name="F:FineUI.Renderer.HtmlEncode"> + <summary> + HTML编码 + </summary> + </member> + <member name="F:FineUI.Renderer.HtmlDecode"> + <summary> + HTML解码 + </summary> + </member> + <member name="F:FineUI.Renderer.Lowercase"> + <summary> + 转化为小写字符 + </summary> + </member> + <member name="F:FineUI.Renderer.Uppercase"> + <summary> + 转化为大写字符 + </summary> + </member> + <member name="F:FineUI.Renderer.NL2BR"> + <summary> + 换行符转换为HTML标签<br/> + </summary> + </member> + <member name="F:FineUI.Renderer.StripScripts"> + <summary> + 删除所有的脚本标签 + </summary> + </member> + <member name="F:FineUI.Renderer.StripTags"> + <summary> + 删除所有的标签 + </summary> + </member> + <member name="F:FineUI.Renderer.Trim"> + <summary> + 清除字符串两端的空白字符 + </summary> + </member> + <member name="T:FineUI.RendererName"> + <summary> + 表格可编辑字段渲染器名称 + </summary> + </member> + <member name="T:FineUI.MessageTarget"> + <summary> + 表单客户端验证提示消息的类型 + </summary> + </member> + <member name="F:FineUI.MessageTarget.Qtip"> + <summary> + 浮动提示(默认值) + </summary> + </member> + <member name="F:FineUI.MessageTarget.Title"> + <summary> + 使用HTML标签的title属性 + </summary> + </member> + <member name="F:FineUI.MessageTarget.Under"> + <summary> + 在字段下面通过一个div层来显示消息 + </summary> + </member> + <member name="F:FineUI.MessageTarget.Side"> + <summary> + 在字段右侧显示一个错误图标 + </summary> + </member> + <member name="F:FineUI.MessageTarget.None"> + <summary> + 不显示错误信息 + </summary> + </member> + <member name="T:FineUI.MessageTargetHelper"> + <summary> + 提示消息的类型名称 + </summary> + </member> + <member name="T:FineUI.SummaryPosition"> + <summary> + 表格合计行的位置 + </summary> + </member> + <member name="F:FineUI.SummaryPosition.Flow"> + <summary> + 紧跟数据行(默认值) + </summary> + </member> + <member name="F:FineUI.SummaryPosition.Top"> + <summary> + 表格顶部 + </summary> + </member> + <member name="F:FineUI.SummaryPosition.Bottom"> + <summary> + 表格底部 + </summary> + </member> + <member name="T:FineUI.SummaryPositionHelper"> + <summary> + 表格合计行的位置名称 + </summary> + </member> + <member name="T:FineUI.ToolbarAlign"> + <summary> + 工具栏的排列位置 + </summary> + </member> + <member name="F:FineUI.ToolbarAlign.Right"> + <summary> + 靠右 + </summary> + </member> + <member name="F:FineUI.ToolbarAlign.Left"> + <summary> + 靠左(默认值) + </summary> + </member> + <member name="F:FineUI.ToolbarAlign.Center"> + <summary> + 居中 + </summary> + </member> + <member name="T:FineUI.ToolbarAlignHelper"> + <summary> + 工具栏的排列位置名称 + </summary> + </member> + <member name="T:FineUI.FState"> + <summary> + FineUI控件的状态保持机制 + </summary> + </member> + <member name="M:FineUI.FState.#ctor(FineUI.ControlBase)"> + <summary> + 构造函数 + </summary> + <param name="control">控件</param> + </member> + <member name="M:FineUI.FState.AddModifiedProperty(System.String)"> + <summary> + 增加在当前请求中改变的属性列表(控件可以自己手工设置,以便保存在 F_STATE 中) + </summary> + <param name="property"></param> + </member> + <member name="M:FineUI.FState.BackupInitializedProperties"> + <summary> + 备份初始化属性值 + 在输出 AJAX 回发之前,会拿这个初始属性值和当时属性值做对比,以确定这些属性是否被用户改变 + </summary> + </member> + <member name="M:FineUI.FState.BackupPostDataProperty(System.String)"> + <summary> + 备份 PostData 的属性值(也就是在客户端改变的属性值) + </summary> + <param name="prop"></param> + </member> + <member name="M:FineUI.FState.CalculateModifiedProperties"> + <summary> + 计算被修改的属性列表(更新 ModifiedProperties 和 ClientPropertiesModifiedInServer 两个值) + 这个需要在 OnPreRender 中调用,在页面第一次加载,正常的回发以及AJAX回发时都要调用 + </summary> + </member> + <member name="M:FineUI.FState.GetTotalModifiedProperties"> + <summary> + 页面第一次加载至今改变过的属性列表总和(其中可能经历多次正常的页面回发和局部 AJAX 回发) + </summary> + <returns></returns> + </member> + <member name="P:FineUI.FState.Item(System.String)"> + <summary> + 获取设置 FState 属性值 + </summary> + <param name="key"></param> + <returns></returns> + </member> + <member name="P:FineUI.FState.ModifiedProperties"> + <summary> + 当前请求中改变的属性列表,既包含服务器端改变的属性,也包含客户端改变的属性 + </summary> + </member> + <member name="P:FineUI.FState.ClientPropertiesModifiedInServer"> + <summary> + 客户端可以改变的属性在服务器端被改变了 + </summary> + </member> + <member name="T:FineUI.DateUtil"> + <summary> + Extjs和.Net之间的日期格式转换 + </summary> + </member> + <member name="M:FineUI.DateUtil.GetClientDateObject(System.DateTime)"> + <summary> + 创建Javascript的Date对象字符串 + </summary> + <param name="date">日期对象</param> + <returns>日期的客户端脚本形式</returns> + </member> + <member name="M:FineUI.DateUtil.ConvertToClientDateFormat(System.String)"> + <summary> + 将.Net日期格式字符串转换为ExtJS的日期格式字符串 + </summary> + <param name="dotnetFormat">.Net日期格式字符串</param> + <returns>ExtJS的日期格式字符串</returns> + </member> + <member name="T:FineUI.CPHConnector"> + <summary> + 母版页ContentPlaceHolder控件的容器 + </summary> + </member> + <member name="M:FineUI.CPHConnector.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.CPHConnector.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.CPHConnector.GetFirstChildUserControl(System.Web.UI.ControlCollection)"> + <summary> + 取得第一个子控件 + </summary> + <param name="controls"></param> + <returns></returns> + </member> + <member name="P:FineUI.CPHConnector.RenderWrapperNode"> + <summary> + 不向页面输出控件的外部容器 + </summary> + </member> + <member name="T:FineUI.CustomEventArgs"> + <summary> + 自定义事件参数 + </summary> + </member> + <member name="M:FineUI.CustomEventArgs.#ctor(System.String)"> + <summary> + 构造函数 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="P:FineUI.CustomEventArgs.EventArgument"> + <summary> + 事件参数 + </summary> + </member> + <member name="T:FineUI.CheckedEventArgs"> + <summary> + 复选框/单选框/复选框菜单按钮的事件参数 + </summary> + </member> + <member name="M:FineUI.CheckedEventArgs.#ctor(System.Boolean)"> + <summary> + 构造函数 + </summary> + <param name="isChecked">是否选中</param> + </member> + <member name="P:FineUI.CheckedEventArgs.Checked"> + <summary> + 是否选中 + </summary> + </member> + <member name="T:FineUI.TreeNodeEventArgs"> + <summary> + 树节点展开事件参数 + </summary> + </member> + <member name="M:FineUI.TreeNodeEventArgs.#ctor(FineUI.TreeNode)"> + <summary> + 构造函数 + </summary> + <param name="node">树节点</param> + </member> + <member name="M:FineUI.TreeNodeEventArgs.#ctor(FineUI.TreeNode,System.Xml.XmlNode)"> + <summary> + 构造函数 + </summary> + <param name="node">树节点</param> + <param name="xmlNode">树节点的数据源</param> + </member> + <member name="P:FineUI.TreeNodeEventArgs.Node"> + <summary> + 树实例 + </summary> + </member> + <member name="P:FineUI.TreeNodeEventArgs.NodeID"> + <summary> + 树节点ID + </summary> + </member> + <member name="P:FineUI.TreeNodeEventArgs.XmlNode"> + <summary> + 树节点的数据源 + </summary> + </member> + <member name="T:FineUI.TreePreNodeEventArgs"> + <summary> + 树节点预绑定事件参数 + </summary> + </member> + <member name="M:FineUI.TreePreNodeEventArgs.#ctor(System.Xml.XmlNode)"> + <summary> + 构造函数 + </summary> + <param name="xmlNode">树节点的数据源</param> + </member> + <member name="P:FineUI.TreePreNodeEventArgs.Cancelled"> + <summary> + 是否取消添加本节点 + </summary> + </member> + <member name="P:FineUI.TreePreNodeEventArgs.XmlNode"> + <summary> + 树节点的数据源 + </summary> + </member> + <member name="T:FineUI.GridColumnEditorCollection"> + <summary> + 控件集合 + </summary> + </member> + <member name="T:FineUI.BaseCollection`1"> + <summary> + 控件集合 + </summary> + </member> + <member name="M:FineUI.BaseCollection`1.#ctor(FineUI.ControlBase)"> + <summary> + 构造函数 + </summary> + <param name="parentControl">父控件实例</param> + </member> + <member name="M:FineUI.BaseCollection`1.InsertItem(System.Int32,`0)"> + <summary> + 向集合中插入一个元素 + </summary> + <param name="index"></param> + <param name="item"></param> + </member> + <member name="M:FineUI.BaseCollection`1.RemoveItem(System.Int32)"> + <summary> + 删除集合中的一个元素 + </summary> + <param name="index"></param> + </member> + <member name="M:FineUI.BaseCollection`1.ClearItems"> + <summary> + 清空集合 + </summary> + </member> + <member name="M:FineUI.BaseCollection`1.GetStartIndex"> + <summary> + 获取类型 T 在父控件子集中的开始位置 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.GridColumnEditorCollection.#ctor(FineUI.GridColumn)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.ControlBaseCollection"> + <summary> + 控件集合 + </summary> + </member> + <member name="M:FineUI.ControlBaseCollection.#ctor(FineUI.ControlBase)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.NotAllowWhitespaceLiteralsBuilder"> + <summary> + 控件内部不允许存在非标签形式的字符串 + </summary> + </member> + <member name="M:FineUI.NotAllowWhitespaceLiteralsBuilder.AllowWhitespaceLiterals"> + <summary> + 不允许空白字符 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.NotAllowWhitespaceLiteralsBuilder.AppendLiteralString(System.String)"> + <summary> + 忽略游离于标签外的字符串 + </summary> + <param name="s"></param> + </member> + <member name="T:FineUI.ContentPanelBuilder"> + <summary> + 支持页分析器生成控件及其包含的子控件 + </summary> + </member> + <member name="M:FineUI.ContentPanelBuilder.AllowWhitespaceLiterals"> + <summary> + 允许空白字符 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.ContentPanelBuilder.AppendLiteralString(System.String)"> + <summary> + 不忽略游离于标签外的字符串 + </summary> + <param name="s"></param> + </member> + <member name="T:FineUI.GlobalConfig"> + <summary> + 全局配置参数 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.#cctor"> + <summary> + 初始化section对象,如果在Web.config中没有定义,则初始化为空对象 + </summary> + </member> + <member name="F:FineUI.GlobalConfig.section"> + <summary> + Runtime Section + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetDesignTimeSection(System.ComponentModel.ISite)"> + <summary> + Refer:http://flimflan.com/blog/AccessingWebconfigAtDesignTimeInNET20.aspx + </summary> + <param name="site"></param> + <returns></returns> + </member> + <member name="M:FineUI.GlobalConfig.GetTheme"> + <summary> + 主题 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetLanguage"> + <summary> + 语言 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetFormMessageTarget"> + <summary> + 表单中消息的位置 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetFormLabelAlign"> + <summary> + 表单中标签的位置 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetFormOffsetRight"> + <summary> + 表单中字段距离右侧的宽度 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetFormLabelWidth"> + <summary> + 表单中字段标签的宽度 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetFormLabelSeparator"> + <summary> + 表单中字段与标签的分隔符 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetAjaxTimeout"> + <summary> + AJAX超时时间(单位:秒,默认:60s) + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetEnableAjax"> + <summary> + 是否启用Ajax + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetEnableAjaxLoading"> + <summary> + 是否启用AJAX提示 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetAjaxLoadingType"> + <summary> + AJAX提示的类型 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetDebugMode"> + <summary> + DEBUG 模式 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetIconBasePath"> + <summary> + 图标的根路径 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetJSBasePath"> + <summary> + JS库的根路径 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetCustomThemeBasePath"> + <summary> + 自定义样式的根路径 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetCustomTheme"> + <summary> + 自定义样式的名称 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetEnableFStateCompress"> + <summary> + 是否启用FState压缩 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetIEEdge"> + <summary> + 是否向页面输出IE=edge标识 + </summary> + </member> + <member name="M:FineUI.GlobalConfig.GetEnableFormChangeConfirm"> + <summary> + 是否启用表单改变确认对话框 + </summary> + </member> + <member name="P:FineUI.GlobalConfig.ProductName"> + <summary> + 产品名称 + </summary> + </member> + <member name="P:FineUI.GlobalConfig.ProductVersion"> + <summary> + 当前版本 + </summary> + </member> + <member name="T:FineUI.ControlBaseItemsEditor"> + <summary> + 为设计时提供集合编辑器 + </summary> + </member> + <member name="M:FineUI.ControlBaseItemsEditor.#ctor(System.Type)"> + <summary> + 构造函数 + </summary> + <param name="type">控件类型</param> + </member> + <member name="M:FineUI.ControlBaseItemsEditor.CreateNewItemTypes"> + <summary> + 获取此集合编辑器可包含的数据类型 + </summary> + <returns>类型集合</returns> + </member> + <member name="T:FineUI.MenuItemsEditor"> + <summary> + 为设计时提供的菜单项集合编辑器 + </summary> + </member> + <member name="M:FineUI.MenuItemsEditor.#ctor(System.Type)"> + <summary> + 构造函数 + </summary> + <param name="type">控件类型</param> + </member> + <member name="M:FineUI.MenuItemsEditor.CreateNewItemTypes"> + <summary> + 获取此集合编辑器可包含的数据类型 + </summary> + <returns>类型集合</returns> + </member> + <member name="T:FineUI.ToolbarItemsEditor"> + <summary> + 为设计时提供的工具栏项集合编辑器 + </summary> + </member> + <member name="M:FineUI.ToolbarItemsEditor.#ctor(System.Type)"> + <summary> + 构造函数 + </summary> + <param name="type">控件类型</param> + </member> + <member name="M:FineUI.ToolbarItemsEditor.CreateNewItemTypes"> + <summary> + 获取此集合编辑器可包含的数据类型 + </summary> + <returns>类型集合</returns> + </member> + <member name="T:FineUI.GridColumnEditorEditor"> + <summary> + 为设计时提供的表格列编辑器集合编辑器 + </summary> + </member> + <member name="M:FineUI.GridColumnEditorEditor.#ctor(System.Type)"> + <summary> + 构造函数 + </summary> + <param name="type">控件类型</param> + </member> + <member name="M:FineUI.GridColumnEditorEditor.CreateNewItemTypes"> + <summary> + 获取此集合编辑器可包含的数据类型 + </summary> + <returns>类型集合</returns> + </member> + <member name="T:FineUI.CompareType"> + <summary> + 相比较的数据类型(用于表单控件的客户端验证) + </summary> + </member> + <member name="F:FineUI.CompareType.Float"> + <summary> + 浮点数 + </summary> + </member> + <member name="F:FineUI.CompareType.Int"> + <summary> + 整形 + </summary> + </member> + <member name="F:FineUI.CompareType.String"> + <summary> + 字符串(默认值) + </summary> + </member> + <member name="T:FineUI.HideMode"> + <summary> + 隐藏的模式 + </summary> + </member> + <member name="F:FineUI.HideMode.Visibility"> + <summary> + 通过设置CSS属性visibility来控制显示隐藏 + </summary> + </member> + <member name="F:FineUI.HideMode.Offsets"> + <summary> + 通过设置CSS属性top/left来控制显示隐藏 + </summary> + </member> + <member name="F:FineUI.HideMode.Display"> + <summary> + 通过设置CSS属性display来控制显示隐藏(默认值) + </summary> + </member> + <member name="T:FineUI.HideModeName"> + <summary> + 隐藏的模式名称 + </summary> + </member> + <member name="T:FineUI.Icon"> + <summary> + 预定义图标 + </summary> + </member> + <member name="F:FineUI.Icon.None"> + <summary> + None + </summary> + </member> + <member name="F:FineUI.Icon.Accept"> + <summary> + Accept + </summary> + </member> + <member name="F:FineUI.Icon.Add"> + <summary> + Add + </summary> + </member> + <member name="F:FineUI.Icon.Anchor"> + <summary> + Anchor + </summary> + </member> + <member name="F:FineUI.Icon.Application"> + <summary> + Application + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationAdd"> + <summary> + ApplicationAdd + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationCascade"> + <summary> + ApplicationCascade + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationDelete"> + <summary> + ApplicationDelete + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationDouble"> + <summary> + ApplicationDouble + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationEdit"> + <summary> + ApplicationEdit + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationError"> + <summary> + ApplicationError + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationForm"> + <summary> + ApplicationForm + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationFormAdd"> + <summary> + ApplicationFormAdd + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationFormDelete"> + <summary> + ApplicationFormDelete + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationFormEdit"> + <summary> + ApplicationFormEdit + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationFormMagnify"> + <summary> + ApplicationFormMagnify + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationGet"> + <summary> + ApplicationGet + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationGo"> + <summary> + ApplicationGo + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationHome"> + <summary> + ApplicationHome + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationKey"> + <summary> + ApplicationKey + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationLightning"> + <summary> + ApplicationLightning + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationLink"> + <summary> + ApplicationLink + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsx"> + <summary> + ApplicationOsx + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxAdd"> + <summary> + ApplicationOsxAdd + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxCascade"> + <summary> + ApplicationOsxCascade + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxDelete"> + <summary> + ApplicationOsxDelete + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxDouble"> + <summary> + ApplicationOsxDouble + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxError"> + <summary> + ApplicationOsxError + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxGet"> + <summary> + ApplicationOsxGet + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxGo"> + <summary> + ApplicationOsxGo + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxHome"> + <summary> + ApplicationOsxHome + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxKey"> + <summary> + ApplicationOsxKey + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxLightning"> + <summary> + ApplicationOsxLightning + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxLink"> + <summary> + ApplicationOsxLink + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxSplit"> + <summary> + ApplicationOsxSplit + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxStart"> + <summary> + ApplicationOsxStart + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxStop"> + <summary> + ApplicationOsxStop + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationOsxTerminal"> + <summary> + ApplicationOsxTerminal + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationPut"> + <summary> + ApplicationPut + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationSideBoxes"> + <summary> + ApplicationSideBoxes + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationSideContract"> + <summary> + ApplicationSideContract + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationSideExpand"> + <summary> + ApplicationSideExpand + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationSideList"> + <summary> + ApplicationSideList + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationSideTree"> + <summary> + ApplicationSideTree + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationSplit"> + <summary> + ApplicationSplit + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationStart"> + <summary> + ApplicationStart + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationStop"> + <summary> + ApplicationStop + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationTileHorizontal"> + <summary> + ApplicationTileHorizontal + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationTileVertical"> + <summary> + ApplicationTileVertical + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationViewColumns"> + <summary> + ApplicationViewColumns + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationViewDetail"> + <summary> + ApplicationViewDetail + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationViewGallery"> + <summary> + ApplicationViewGallery + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationViewIcons"> + <summary> + ApplicationViewIcons + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationViewList"> + <summary> + ApplicationViewList + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationViewTile"> + <summary> + ApplicationViewTile + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationXp"> + <summary> + ApplicationXp + </summary> + </member> + <member name="F:FineUI.Icon.ApplicationXpTerminal"> + <summary> + ApplicationXpTerminal + </summary> + </member> + <member name="F:FineUI.Icon.ArrowBranch"> + <summary> + ArrowBranch + </summary> + </member> + <member name="F:FineUI.Icon.ArrowDivide"> + <summary> + ArrowDivide + </summary> + </member> + <member name="F:FineUI.Icon.ArrowDown"> + <summary> + ArrowDown + </summary> + </member> + <member name="F:FineUI.Icon.ArrowEw"> + <summary> + ArrowEw + </summary> + </member> + <member name="F:FineUI.Icon.ArrowIn"> + <summary> + ArrowIn + </summary> + </member> + <member name="F:FineUI.Icon.ArrowInout"> + <summary> + ArrowInout + </summary> + </member> + <member name="F:FineUI.Icon.ArrowInLonger"> + <summary> + ArrowInLonger + </summary> + </member> + <member name="F:FineUI.Icon.ArrowJoin"> + <summary> + ArrowJoin + </summary> + </member> + <member name="F:FineUI.Icon.ArrowLeft"> + <summary> + ArrowLeft + </summary> + </member> + <member name="F:FineUI.Icon.ArrowMerge"> + <summary> + ArrowMerge + </summary> + </member> + <member name="F:FineUI.Icon.ArrowNe"> + <summary> + ArrowNe + </summary> + </member> + <member name="F:FineUI.Icon.ArrowNs"> + <summary> + ArrowNs + </summary> + </member> + <member name="F:FineUI.Icon.ArrowNsew"> + <summary> + ArrowNsew + </summary> + </member> + <member name="F:FineUI.Icon.ArrowNw"> + <summary> + ArrowNw + </summary> + </member> + <member name="F:FineUI.Icon.ArrowNwNeSwSe"> + <summary> + ArrowNwNeSwSe + </summary> + </member> + <member name="F:FineUI.Icon.ArrowNwSe"> + <summary> + ArrowNwSe + </summary> + </member> + <member name="F:FineUI.Icon.ArrowOut"> + <summary> + ArrowOut + </summary> + </member> + <member name="F:FineUI.Icon.ArrowOutLonger"> + <summary> + ArrowOutLonger + </summary> + </member> + <member name="F:FineUI.Icon.ArrowRedo"> + <summary> + ArrowRedo + </summary> + </member> + <member name="F:FineUI.Icon.ArrowRefresh"> + <summary> + ArrowRefresh + </summary> + </member> + <member name="F:FineUI.Icon.ArrowRefreshSmall"> + <summary> + ArrowRefreshSmall + </summary> + </member> + <member name="F:FineUI.Icon.ArrowRight"> + <summary> + ArrowRight + </summary> + </member> + <member name="F:FineUI.Icon.ArrowRotateAnticlockwise"> + <summary> + ArrowRotateAnticlockwise + </summary> + </member> + <member name="F:FineUI.Icon.ArrowRotateClockwise"> + <summary> + ArrowRotateClockwise + </summary> + </member> + <member name="F:FineUI.Icon.ArrowSe"> + <summary> + ArrowSe + </summary> + </member> + <member name="F:FineUI.Icon.ArrowSw"> + <summary> + ArrowSw + </summary> + </member> + <member name="F:FineUI.Icon.ArrowSwitch"> + <summary> + ArrowSwitch + </summary> + </member> + <member name="F:FineUI.Icon.ArrowSwitchBluegreen"> + <summary> + ArrowSwitchBluegreen + </summary> + </member> + <member name="F:FineUI.Icon.ArrowSwNe"> + <summary> + ArrowSwNe + </summary> + </member> + <member name="F:FineUI.Icon.ArrowTurnLeft"> + <summary> + ArrowTurnLeft + </summary> + </member> + <member name="F:FineUI.Icon.ArrowTurnRight"> + <summary> + ArrowTurnRight + </summary> + </member> + <member name="F:FineUI.Icon.ArrowUndo"> + <summary> + ArrowUndo + </summary> + </member> + <member name="F:FineUI.Icon.ArrowUp"> + <summary> + ArrowUp + </summary> + </member> + <member name="F:FineUI.Icon.AsteriskOrange"> + <summary> + AsteriskOrange + </summary> + </member> + <member name="F:FineUI.Icon.AsteriskRed"> + <summary> + AsteriskRed + </summary> + </member> + <member name="F:FineUI.Icon.AsteriskYellow"> + <summary> + AsteriskYellow + </summary> + </member> + <member name="F:FineUI.Icon.Attach"> + <summary> + Attach + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarAdd"> + <summary> + AwardStarAdd + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarBronze1"> + <summary> + AwardStarBronze1 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarBronze2"> + <summary> + AwardStarBronze2 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarBronze3"> + <summary> + AwardStarBronze3 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarDelete"> + <summary> + AwardStarDelete + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarGold1"> + <summary> + AwardStarGold1 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarGold2"> + <summary> + AwardStarGold2 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarGold3"> + <summary> + AwardStarGold3 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarSilver1"> + <summary> + AwardStarSilver1 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarSilver2"> + <summary> + AwardStarSilver2 + </summary> + </member> + <member name="F:FineUI.Icon.AwardStarSilver3"> + <summary> + AwardStarSilver3 + </summary> + </member> + <member name="F:FineUI.Icon.Basket"> + <summary> + Basket + </summary> + </member> + <member name="F:FineUI.Icon.BasketAdd"> + <summary> + BasketAdd + </summary> + </member> + <member name="F:FineUI.Icon.BasketDelete"> + <summary> + BasketDelete + </summary> + </member> + <member name="F:FineUI.Icon.BasketEdit"> + <summary> + BasketEdit + </summary> + </member> + <member name="F:FineUI.Icon.BasketError"> + <summary> + BasketError + </summary> + </member> + <member name="F:FineUI.Icon.BasketGo"> + <summary> + BasketGo + </summary> + </member> + <member name="F:FineUI.Icon.BasketPut"> + <summary> + BasketPut + </summary> + </member> + <member name="F:FineUI.Icon.BasketRemove"> + <summary> + BasketRemove + </summary> + </member> + <member name="F:FineUI.Icon.Bell"> + <summary> + Bell + </summary> + </member> + <member name="F:FineUI.Icon.BellAdd"> + <summary> + BellAdd + </summary> + </member> + <member name="F:FineUI.Icon.BellDelete"> + <summary> + BellDelete + </summary> + </member> + <member name="F:FineUI.Icon.BellError"> + <summary> + BellError + </summary> + </member> + <member name="F:FineUI.Icon.BellGo"> + <summary> + BellGo + </summary> + </member> + <member name="F:FineUI.Icon.BellLink"> + <summary> + BellLink + </summary> + </member> + <member name="F:FineUI.Icon.BellSilver"> + <summary> + BellSilver + </summary> + </member> + <member name="F:FineUI.Icon.BellSilverStart"> + <summary> + BellSilverStart + </summary> + </member> + <member name="F:FineUI.Icon.BellSilverStop"> + <summary> + BellSilverStop + </summary> + </member> + <member name="F:FineUI.Icon.BellStart"> + <summary> + BellStart + </summary> + </member> + <member name="F:FineUI.Icon.BellStop"> + <summary> + BellStop + </summary> + </member> + <member name="F:FineUI.Icon.Bin"> + <summary> + Bin + </summary> + </member> + <member name="F:FineUI.Icon.BinClosed"> + <summary> + BinClosed + </summary> + </member> + <member name="F:FineUI.Icon.BinEmpty"> + <summary> + BinEmpty + </summary> + </member> + <member name="F:FineUI.Icon.Blank"> + <summary> + Blank + </summary> + </member> + <member name="F:FineUI.Icon.Bomb"> + <summary> + Bomb + </summary> + </member> + <member name="F:FineUI.Icon.Book"> + <summary> + Book + </summary> + </member> + <member name="F:FineUI.Icon.Bookmark"> + <summary> + Bookmark + </summary> + </member> + <member name="F:FineUI.Icon.BookmarkAdd"> + <summary> + BookmarkAdd + </summary> + </member> + <member name="F:FineUI.Icon.BookmarkDelete"> + <summary> + BookmarkDelete + </summary> + </member> + <member name="F:FineUI.Icon.BookmarkEdit"> + <summary> + BookmarkEdit + </summary> + </member> + <member name="F:FineUI.Icon.BookmarkError"> + <summary> + BookmarkError + </summary> + </member> + <member name="F:FineUI.Icon.BookmarkGo"> + <summary> + BookmarkGo + </summary> + </member> + <member name="F:FineUI.Icon.BookAdd"> + <summary> + BookAdd + </summary> + </member> + <member name="F:FineUI.Icon.BookAddresses"> + <summary> + BookAddresses + </summary> + </member> + <member name="F:FineUI.Icon.BookAddressesAdd"> + <summary> + BookAddressesAdd + </summary> + </member> + <member name="F:FineUI.Icon.BookAddressesDelete"> + <summary> + BookAddressesDelete + </summary> + </member> + <member name="F:FineUI.Icon.BookAddressesEdit"> + <summary> + BookAddressesEdit + </summary> + </member> + <member name="F:FineUI.Icon.BookAddressesError"> + <summary> + BookAddressesError + </summary> + </member> + <member name="F:FineUI.Icon.BookAddressesKey"> + <summary> + BookAddressesKey + </summary> + </member> + <member name="F:FineUI.Icon.BookDelete"> + <summary> + BookDelete + </summary> + </member> + <member name="F:FineUI.Icon.BookEdit"> + <summary> + BookEdit + </summary> + </member> + <member name="F:FineUI.Icon.BookError"> + <summary> + BookError + </summary> + </member> + <member name="F:FineUI.Icon.BookGo"> + <summary> + BookGo + </summary> + </member> + <member name="F:FineUI.Icon.BookKey"> + <summary> + BookKey + </summary> + </member> + <member name="F:FineUI.Icon.BookLink"> + <summary> + BookLink + </summary> + </member> + <member name="F:FineUI.Icon.BookMagnify"> + <summary> + BookMagnify + </summary> + </member> + <member name="F:FineUI.Icon.BookNext"> + <summary> + BookNext + </summary> + </member> + <member name="F:FineUI.Icon.BookOpen"> + <summary> + BookOpen + </summary> + </member> + <member name="F:FineUI.Icon.BookOpenMark"> + <summary> + BookOpenMark + </summary> + </member> + <member name="F:FineUI.Icon.BookPrevious"> + <summary> + BookPrevious + </summary> + </member> + <member name="F:FineUI.Icon.BookRed"> + <summary> + BookRed + </summary> + </member> + <member name="F:FineUI.Icon.BookTabs"> + <summary> + BookTabs + </summary> + </member> + <member name="F:FineUI.Icon.BorderAll"> + <summary> + BorderAll + </summary> + </member> + <member name="F:FineUI.Icon.BorderBottom"> + <summary> + BorderBottom + </summary> + </member> + <member name="F:FineUI.Icon.BorderDraw"> + <summary> + BorderDraw + </summary> + </member> + <member name="F:FineUI.Icon.BorderInner"> + <summary> + BorderInner + </summary> + </member> + <member name="F:FineUI.Icon.BorderInnerHorizontal"> + <summary> + BorderInnerHorizontal + </summary> + </member> + <member name="F:FineUI.Icon.BorderInnerVertical"> + <summary> + BorderInnerVertical + </summary> + </member> + <member name="F:FineUI.Icon.BorderLeft"> + <summary> + BorderLeft + </summary> + </member> + <member name="F:FineUI.Icon.BorderNone"> + <summary> + BorderNone + </summary> + </member> + <member name="F:FineUI.Icon.BorderOuter"> + <summary> + BorderOuter + </summary> + </member> + <member name="F:FineUI.Icon.BorderRight"> + <summary> + BorderRight + </summary> + </member> + <member name="F:FineUI.Icon.BorderTop"> + <summary> + BorderTop + </summary> + </member> + <member name="F:FineUI.Icon.Box"> + <summary> + Box + </summary> + </member> + <member name="F:FineUI.Icon.BoxError"> + <summary> + BoxError + </summary> + </member> + <member name="F:FineUI.Icon.BoxPicture"> + <summary> + BoxPicture + </summary> + </member> + <member name="F:FineUI.Icon.BoxWorld"> + <summary> + BoxWorld + </summary> + </member> + <member name="F:FineUI.Icon.Brick"> + <summary> + Brick + </summary> + </member> + <member name="F:FineUI.Icon.Bricks"> + <summary> + Bricks + </summary> + </member> + <member name="F:FineUI.Icon.BrickAdd"> + <summary> + BrickAdd + </summary> + </member> + <member name="F:FineUI.Icon.BrickDelete"> + <summary> + BrickDelete + </summary> + </member> + <member name="F:FineUI.Icon.BrickEdit"> + <summary> + BrickEdit + </summary> + </member> + <member name="F:FineUI.Icon.BrickError"> + <summary> + BrickError + </summary> + </member> + <member name="F:FineUI.Icon.BrickGo"> + <summary> + BrickGo + </summary> + </member> + <member name="F:FineUI.Icon.BrickLink"> + <summary> + BrickLink + </summary> + </member> + <member name="F:FineUI.Icon.BrickMagnify"> + <summary> + BrickMagnify + </summary> + </member> + <member name="F:FineUI.Icon.Briefcase"> + <summary> + Briefcase + </summary> + </member> + <member name="F:FineUI.Icon.Bug"> + <summary> + Bug + </summary> + </member> + <member name="F:FineUI.Icon.BugAdd"> + <summary> + BugAdd + </summary> + </member> + <member name="F:FineUI.Icon.BugDelete"> + <summary> + BugDelete + </summary> + </member> + <member name="F:FineUI.Icon.BugEdit"> + <summary> + BugEdit + </summary> + </member> + <member name="F:FineUI.Icon.BugError"> + <summary> + BugError + </summary> + </member> + <member name="F:FineUI.Icon.BugFix"> + <summary> + BugFix + </summary> + </member> + <member name="F:FineUI.Icon.BugGo"> + <summary> + BugGo + </summary> + </member> + <member name="F:FineUI.Icon.BugLink"> + <summary> + BugLink + </summary> + </member> + <member name="F:FineUI.Icon.BugMagnify"> + <summary> + BugMagnify + </summary> + </member> + <member name="F:FineUI.Icon.Build"> + <summary> + Build + </summary> + </member> + <member name="F:FineUI.Icon.Building"> + <summary> + Building + </summary> + </member> + <member name="F:FineUI.Icon.BuildingAdd"> + <summary> + BuildingAdd + </summary> + </member> + <member name="F:FineUI.Icon.BuildingDelete"> + <summary> + BuildingDelete + </summary> + </member> + <member name="F:FineUI.Icon.BuildingEdit"> + <summary> + BuildingEdit + </summary> + </member> + <member name="F:FineUI.Icon.BuildingError"> + <summary> + BuildingError + </summary> + </member> + <member name="F:FineUI.Icon.BuildingGo"> + <summary> + BuildingGo + </summary> + </member> + <member name="F:FineUI.Icon.BuildingKey"> + <summary> + BuildingKey + </summary> + </member> + <member name="F:FineUI.Icon.BuildingLink"> + <summary> + BuildingLink + </summary> + </member> + <member name="F:FineUI.Icon.BuildCancel"> + <summary> + BuildCancel + </summary> + </member> + <member name="F:FineUI.Icon.BulletAdd"> + <summary> + BulletAdd + </summary> + </member> + <member name="F:FineUI.Icon.BulletArrowBottom"> + <summary> + BulletArrowBottom + </summary> + </member> + <member name="F:FineUI.Icon.BulletArrowDown"> + <summary> + BulletArrowDown + </summary> + </member> + <member name="F:FineUI.Icon.BulletArrowTop"> + <summary> + BulletArrowTop + </summary> + </member> + <member name="F:FineUI.Icon.BulletArrowUp"> + <summary> + BulletArrowUp + </summary> + </member> + <member name="F:FineUI.Icon.BulletBlack"> + <summary> + BulletBlack + </summary> + </member> + <member name="F:FineUI.Icon.BulletBlue"> + <summary> + BulletBlue + </summary> + </member> + <member name="F:FineUI.Icon.BulletConnect"> + <summary> + BulletConnect + </summary> + </member> + <member name="F:FineUI.Icon.BulletCross"> + <summary> + BulletCross + </summary> + </member> + <member name="F:FineUI.Icon.BulletDatabase"> + <summary> + BulletDatabase + </summary> + </member> + <member name="F:FineUI.Icon.BulletDatabaseYellow"> + <summary> + BulletDatabaseYellow + </summary> + </member> + <member name="F:FineUI.Icon.BulletDelete"> + <summary> + BulletDelete + </summary> + </member> + <member name="F:FineUI.Icon.BulletDisk"> + <summary> + BulletDisk + </summary> + </member> + <member name="F:FineUI.Icon.BulletEarth"> + <summary> + BulletEarth + </summary> + </member> + <member name="F:FineUI.Icon.BulletEdit"> + <summary> + BulletEdit + </summary> + </member> + <member name="F:FineUI.Icon.BulletEject"> + <summary> + BulletEject + </summary> + </member> + <member name="F:FineUI.Icon.BulletError"> + <summary> + BulletError + </summary> + </member> + <member name="F:FineUI.Icon.BulletFeed"> + <summary> + BulletFeed + </summary> + </member> + <member name="F:FineUI.Icon.BulletGet"> + <summary> + BulletGet + </summary> + </member> + <member name="F:FineUI.Icon.BulletGo"> + <summary> + BulletGo + </summary> + </member> + <member name="F:FineUI.Icon.BulletGreen"> + <summary> + BulletGreen + </summary> + </member> + <member name="F:FineUI.Icon.BulletHome"> + <summary> + BulletHome + </summary> + </member> + <member name="F:FineUI.Icon.BulletKey"> + <summary> + BulletKey + </summary> + </member> + <member name="F:FineUI.Icon.BulletLeft"> + <summary> + BulletLeft + </summary> + </member> + <member name="F:FineUI.Icon.BulletLightning"> + <summary> + BulletLightning + </summary> + </member> + <member name="F:FineUI.Icon.BulletMagnify"> + <summary> + BulletMagnify + </summary> + </member> + <member name="F:FineUI.Icon.BulletMinus"> + <summary> + BulletMinus + </summary> + </member> + <member name="F:FineUI.Icon.BulletOrange"> + <summary> + BulletOrange + </summary> + </member> + <member name="F:FineUI.Icon.BulletPageWhite"> + <summary> + BulletPageWhite + </summary> + </member> + <member name="F:FineUI.Icon.BulletPicture"> + <summary> + BulletPicture + </summary> + </member> + <member name="F:FineUI.Icon.BulletPink"> + <summary> + BulletPink + </summary> + </member> + <member name="F:FineUI.Icon.BulletPlus"> + <summary> + BulletPlus + </summary> + </member> + <member name="F:FineUI.Icon.BulletPurple"> + <summary> + BulletPurple + </summary> + </member> + <member name="F:FineUI.Icon.BulletRed"> + <summary> + BulletRed + </summary> + </member> + <member name="F:FineUI.Icon.BulletRight"> + <summary> + BulletRight + </summary> + </member> + <member name="F:FineUI.Icon.BulletShape"> + <summary> + BulletShape + </summary> + </member> + <member name="F:FineUI.Icon.BulletSparkle"> + <summary> + BulletSparkle + </summary> + </member> + <member name="F:FineUI.Icon.BulletStar"> + <summary> + BulletStar + </summary> + </member> + <member name="F:FineUI.Icon.BulletStart"> + <summary> + BulletStart + </summary> + </member> + <member name="F:FineUI.Icon.BulletStop"> + <summary> + BulletStop + </summary> + </member> + <member name="F:FineUI.Icon.BulletStopAlt"> + <summary> + BulletStopAlt + </summary> + </member> + <member name="F:FineUI.Icon.BulletTick"> + <summary> + BulletTick + </summary> + </member> + <member name="F:FineUI.Icon.BulletToggleMinus"> + <summary> + BulletToggleMinus + </summary> + </member> + <member name="F:FineUI.Icon.BulletTogglePlus"> + <summary> + BulletTogglePlus + </summary> + </member> + <member name="F:FineUI.Icon.BulletWhite"> + <summary> + BulletWhite + </summary> + </member> + <member name="F:FineUI.Icon.BulletWrench"> + <summary> + BulletWrench + </summary> + </member> + <member name="F:FineUI.Icon.BulletWrenchRed"> + <summary> + BulletWrenchRed + </summary> + </member> + <member name="F:FineUI.Icon.BulletYellow"> + <summary> + BulletYellow + </summary> + </member> + <member name="F:FineUI.Icon.Button"> + <summary> + Button + </summary> + </member> + <member name="F:FineUI.Icon.Cake"> + <summary> + Cake + </summary> + </member> + <member name="F:FineUI.Icon.CakeOut"> + <summary> + CakeOut + </summary> + </member> + <member name="F:FineUI.Icon.CakeSliced"> + <summary> + CakeSliced + </summary> + </member> + <member name="F:FineUI.Icon.Calculator"> + <summary> + Calculator + </summary> + </member> + <member name="F:FineUI.Icon.CalculatorAdd"> + <summary> + CalculatorAdd + </summary> + </member> + <member name="F:FineUI.Icon.CalculatorDelete"> + <summary> + CalculatorDelete + </summary> + </member> + <member name="F:FineUI.Icon.CalculatorEdit"> + <summary> + CalculatorEdit + </summary> + </member> + <member name="F:FineUI.Icon.CalculatorError"> + <summary> + CalculatorError + </summary> + </member> + <member name="F:FineUI.Icon.CalculatorLink"> + <summary> + CalculatorLink + </summary> + </member> + <member name="F:FineUI.Icon.Calendar"> + <summary> + Calendar + </summary> + </member> + <member name="F:FineUI.Icon.CalendarAdd"> + <summary> + CalendarAdd + </summary> + </member> + <member name="F:FineUI.Icon.CalendarDelete"> + <summary> + CalendarDelete + </summary> + </member> + <member name="F:FineUI.Icon.CalendarEdit"> + <summary> + CalendarEdit + </summary> + </member> + <member name="F:FineUI.Icon.CalendarLink"> + <summary> + CalendarLink + </summary> + </member> + <member name="F:FineUI.Icon.CalendarSelectDay"> + <summary> + CalendarSelectDay + </summary> + </member> + <member name="F:FineUI.Icon.CalendarSelectNone"> + <summary> + CalendarSelectNone + </summary> + </member> + <member name="F:FineUI.Icon.CalendarSelectWeek"> + <summary> + CalendarSelectWeek + </summary> + </member> + <member name="F:FineUI.Icon.CalendarStar"> + <summary> + CalendarStar + </summary> + </member> + <member name="F:FineUI.Icon.CalendarViewDay"> + <summary> + CalendarViewDay + </summary> + </member> + <member name="F:FineUI.Icon.CalendarViewMonth"> + <summary> + CalendarViewMonth + </summary> + </member> + <member name="F:FineUI.Icon.CalendarViewWeek"> + <summary> + CalendarViewWeek + </summary> + </member> + <member name="F:FineUI.Icon.Camera"> + <summary> + Camera + </summary> + </member> + <member name="F:FineUI.Icon.CameraAdd"> + <summary> + CameraAdd + </summary> + </member> + <member name="F:FineUI.Icon.CameraConnect"> + <summary> + CameraConnect + </summary> + </member> + <member name="F:FineUI.Icon.CameraDelete"> + <summary> + CameraDelete + </summary> + </member> + <member name="F:FineUI.Icon.CameraEdit"> + <summary> + CameraEdit + </summary> + </member> + <member name="F:FineUI.Icon.CameraError"> + <summary> + CameraError + </summary> + </member> + <member name="F:FineUI.Icon.CameraGo"> + <summary> + CameraGo + </summary> + </member> + <member name="F:FineUI.Icon.CameraLink"> + <summary> + CameraLink + </summary> + </member> + <member name="F:FineUI.Icon.CameraMagnify"> + <summary> + CameraMagnify + </summary> + </member> + <member name="F:FineUI.Icon.CameraPicture"> + <summary> + CameraPicture + </summary> + </member> + <member name="F:FineUI.Icon.CameraSmall"> + <summary> + CameraSmall + </summary> + </member> + <member name="F:FineUI.Icon.CameraStart"> + <summary> + CameraStart + </summary> + </member> + <member name="F:FineUI.Icon.CameraStop"> + <summary> + CameraStop + </summary> + </member> + <member name="F:FineUI.Icon.Cancel"> + <summary> + Cancel + </summary> + </member> + <member name="F:FineUI.Icon.Car"> + <summary> + Car + </summary> + </member> + <member name="F:FineUI.Icon.Cart"> + <summary> + Cart + </summary> + </member> + <member name="F:FineUI.Icon.CartAdd"> + <summary> + CartAdd + </summary> + </member> + <member name="F:FineUI.Icon.CartDelete"> + <summary> + CartDelete + </summary> + </member> + <member name="F:FineUI.Icon.CartEdit"> + <summary> + CartEdit + </summary> + </member> + <member name="F:FineUI.Icon.CartError"> + <summary> + CartError + </summary> + </member> + <member name="F:FineUI.Icon.CartFull"> + <summary> + CartFull + </summary> + </member> + <member name="F:FineUI.Icon.CartGo"> + <summary> + CartGo + </summary> + </member> + <member name="F:FineUI.Icon.CartMagnify"> + <summary> + CartMagnify + </summary> + </member> + <member name="F:FineUI.Icon.CartPut"> + <summary> + CartPut + </summary> + </member> + <member name="F:FineUI.Icon.CartRemove"> + <summary> + CartRemove + </summary> + </member> + <member name="F:FineUI.Icon.CarAdd"> + <summary> + CarAdd + </summary> + </member> + <member name="F:FineUI.Icon.CarDelete"> + <summary> + CarDelete + </summary> + </member> + <member name="F:FineUI.Icon.CarError"> + <summary> + CarError + </summary> + </member> + <member name="F:FineUI.Icon.CarRed"> + <summary> + CarRed + </summary> + </member> + <member name="F:FineUI.Icon.CarStart"> + <summary> + CarStart + </summary> + </member> + <member name="F:FineUI.Icon.CarStop"> + <summary> + CarStop + </summary> + </member> + <member name="F:FineUI.Icon.Cd"> + <summary> + Cd + </summary> + </member> + <member name="F:FineUI.Icon.Cdr"> + <summary> + Cdr + </summary> + </member> + <member name="F:FineUI.Icon.CdrAdd"> + <summary> + CdrAdd + </summary> + </member> + <member name="F:FineUI.Icon.CdrBurn"> + <summary> + CdrBurn + </summary> + </member> + <member name="F:FineUI.Icon.CdrCross"> + <summary> + CdrCross + </summary> + </member> + <member name="F:FineUI.Icon.CdrDelete"> + <summary> + CdrDelete + </summary> + </member> + <member name="F:FineUI.Icon.CdrEdit"> + <summary> + CdrEdit + </summary> + </member> + <member name="F:FineUI.Icon.CdrEject"> + <summary> + CdrEject + </summary> + </member> + <member name="F:FineUI.Icon.CdrError"> + <summary> + CdrError + </summary> + </member> + <member name="F:FineUI.Icon.CdrGo"> + <summary> + CdrGo + </summary> + </member> + <member name="F:FineUI.Icon.CdrMagnify"> + <summary> + CdrMagnify + </summary> + </member> + <member name="F:FineUI.Icon.CdrPlay"> + <summary> + CdrPlay + </summary> + </member> + <member name="F:FineUI.Icon.CdrStart"> + <summary> + CdrStart + </summary> + </member> + <member name="F:FineUI.Icon.CdrStop"> + <summary> + CdrStop + </summary> + </member> + <member name="F:FineUI.Icon.CdrStopAlt"> + <summary> + CdrStopAlt + </summary> + </member> + <member name="F:FineUI.Icon.CdrTick"> + <summary> + CdrTick + </summary> + </member> + <member name="F:FineUI.Icon.CdAdd"> + <summary> + CdAdd + </summary> + </member> + <member name="F:FineUI.Icon.CdBurn"> + <summary> + CdBurn + </summary> + </member> + <member name="F:FineUI.Icon.CdDelete"> + <summary> + CdDelete + </summary> + </member> + <member name="F:FineUI.Icon.CdEdit"> + <summary> + CdEdit + </summary> + </member> + <member name="F:FineUI.Icon.CdEject"> + <summary> + CdEject + </summary> + </member> + <member name="F:FineUI.Icon.CdGo"> + <summary> + CdGo + </summary> + </member> + <member name="F:FineUI.Icon.CdMagnify"> + <summary> + CdMagnify + </summary> + </member> + <member name="F:FineUI.Icon.CdPlay"> + <summary> + CdPlay + </summary> + </member> + <member name="F:FineUI.Icon.CdStop"> + <summary> + CdStop + </summary> + </member> + <member name="F:FineUI.Icon.CdStopAlt"> + <summary> + CdStopAlt + </summary> + </member> + <member name="F:FineUI.Icon.CdTick"> + <summary> + CdTick + </summary> + </member> + <member name="F:FineUI.Icon.ChartBar"> + <summary> + ChartBar + </summary> + </member> + <member name="F:FineUI.Icon.ChartBarAdd"> + <summary> + ChartBarAdd + </summary> + </member> + <member name="F:FineUI.Icon.ChartBarDelete"> + <summary> + ChartBarDelete + </summary> + </member> + <member name="F:FineUI.Icon.ChartBarEdit"> + <summary> + ChartBarEdit + </summary> + </member> + <member name="F:FineUI.Icon.ChartBarError"> + <summary> + ChartBarError + </summary> + </member> + <member name="F:FineUI.Icon.ChartBarLink"> + <summary> + ChartBarLink + </summary> + </member> + <member name="F:FineUI.Icon.ChartCurve"> + <summary> + ChartCurve + </summary> + </member> + <member name="F:FineUI.Icon.ChartCurveAdd"> + <summary> + ChartCurveAdd + </summary> + </member> + <member name="F:FineUI.Icon.ChartCurveDelete"> + <summary> + ChartCurveDelete + </summary> + </member> + <member name="F:FineUI.Icon.ChartCurveEdit"> + <summary> + ChartCurveEdit + </summary> + </member> + <member name="F:FineUI.Icon.ChartCurveError"> + <summary> + ChartCurveError + </summary> + </member> + <member name="F:FineUI.Icon.ChartCurveGo"> + <summary> + ChartCurveGo + </summary> + </member> + <member name="F:FineUI.Icon.ChartCurveLink"> + <summary> + ChartCurveLink + </summary> + </member> + <member name="F:FineUI.Icon.ChartLine"> + <summary> + ChartLine + </summary> + </member> + <member name="F:FineUI.Icon.ChartLineAdd"> + <summary> + ChartLineAdd + </summary> + </member> + <member name="F:FineUI.Icon.ChartLineDelete"> + <summary> + ChartLineDelete + </summary> + </member> + <member name="F:FineUI.Icon.ChartLineEdit"> + <summary> + ChartLineEdit + </summary> + </member> + <member name="F:FineUI.Icon.ChartLineError"> + <summary> + ChartLineError + </summary> + </member> + <member name="F:FineUI.Icon.ChartLineLink"> + <summary> + ChartLineLink + </summary> + </member> + <member name="F:FineUI.Icon.ChartOrganisation"> + <summary> + ChartOrganisation + </summary> + </member> + <member name="F:FineUI.Icon.ChartOrganisationAdd"> + <summary> + ChartOrganisationAdd + </summary> + </member> + <member name="F:FineUI.Icon.ChartOrganisationDelete"> + <summary> + ChartOrganisationDelete + </summary> + </member> + <member name="F:FineUI.Icon.ChartOrgInverted"> + <summary> + ChartOrgInverted + </summary> + </member> + <member name="F:FineUI.Icon.ChartPie"> + <summary> + ChartPie + </summary> + </member> + <member name="F:FineUI.Icon.ChartPieAdd"> + <summary> + ChartPieAdd + </summary> + </member> + <member name="F:FineUI.Icon.ChartPieDelete"> + <summary> + ChartPieDelete + </summary> + </member> + <member name="F:FineUI.Icon.ChartPieEdit"> + <summary> + ChartPieEdit + </summary> + </member> + <member name="F:FineUI.Icon.ChartPieError"> + <summary> + ChartPieError + </summary> + </member> + <member name="F:FineUI.Icon.ChartPieLightning"> + <summary> + ChartPieLightning + </summary> + </member> + <member name="F:FineUI.Icon.ChartPieLink"> + <summary> + ChartPieLink + </summary> + </member> + <member name="F:FineUI.Icon.CheckError"> + <summary> + CheckError + </summary> + </member> + <member name="F:FineUI.Icon.Clipboard"> + <summary> + Clipboard + </summary> + </member> + <member name="F:FineUI.Icon.Clock"> + <summary> + Clock + </summary> + </member> + <member name="F:FineUI.Icon.ClockAdd"> + <summary> + ClockAdd + </summary> + </member> + <member name="F:FineUI.Icon.ClockDelete"> + <summary> + ClockDelete + </summary> + </member> + <member name="F:FineUI.Icon.ClockEdit"> + <summary> + ClockEdit + </summary> + </member> + <member name="F:FineUI.Icon.ClockError"> + <summary> + ClockError + </summary> + </member> + <member name="F:FineUI.Icon.ClockGo"> + <summary> + ClockGo + </summary> + </member> + <member name="F:FineUI.Icon.ClockLink"> + <summary> + ClockLink + </summary> + </member> + <member name="F:FineUI.Icon.ClockPause"> + <summary> + ClockPause + </summary> + </member> + <member name="F:FineUI.Icon.ClockPlay"> + <summary> + ClockPlay + </summary> + </member> + <member name="F:FineUI.Icon.ClockRed"> + <summary> + ClockRed + </summary> + </member> + <member name="F:FineUI.Icon.ClockStart"> + <summary> + ClockStart + </summary> + </member> + <member name="F:FineUI.Icon.ClockStop"> + <summary> + ClockStop + </summary> + </member> + <member name="F:FineUI.Icon.ClockStop2"> + <summary> + ClockStop2 + </summary> + </member> + <member name="F:FineUI.Icon.Cmy"> + <summary> + Cmy + </summary> + </member> + <member name="F:FineUI.Icon.Cog"> + <summary> + Cog + </summary> + </member> + <member name="F:FineUI.Icon.CogAdd"> + <summary> + CogAdd + </summary> + </member> + <member name="F:FineUI.Icon.CogDelete"> + <summary> + CogDelete + </summary> + </member> + <member name="F:FineUI.Icon.CogEdit"> + <summary> + CogEdit + </summary> + </member> + <member name="F:FineUI.Icon.CogError"> + <summary> + CogError + </summary> + </member> + <member name="F:FineUI.Icon.CogGo"> + <summary> + CogGo + </summary> + </member> + <member name="F:FineUI.Icon.CogStart"> + <summary> + CogStart + </summary> + </member> + <member name="F:FineUI.Icon.CogStop"> + <summary> + CogStop + </summary> + </member> + <member name="F:FineUI.Icon.Coins"> + <summary> + Coins + </summary> + </member> + <member name="F:FineUI.Icon.CoinsAdd"> + <summary> + CoinsAdd + </summary> + </member> + <member name="F:FineUI.Icon.CoinsDelete"> + <summary> + CoinsDelete + </summary> + </member> + <member name="F:FineUI.Icon.Color"> + <summary> + Color + </summary> + </member> + <member name="F:FineUI.Icon.ColorSwatch"> + <summary> + ColorSwatch + </summary> + </member> + <member name="F:FineUI.Icon.ColorWheel"> + <summary> + ColorWheel + </summary> + </member> + <member name="F:FineUI.Icon.Comment"> + <summary> + Comment + </summary> + </member> + <member name="F:FineUI.Icon.Comments"> + <summary> + Comments + </summary> + </member> + <member name="F:FineUI.Icon.CommentsAdd"> + <summary> + CommentsAdd + </summary> + </member> + <member name="F:FineUI.Icon.CommentsDelete"> + <summary> + CommentsDelete + </summary> + </member> + <member name="F:FineUI.Icon.CommentAdd"> + <summary> + CommentAdd + </summary> + </member> + <member name="F:FineUI.Icon.CommentDelete"> + <summary> + CommentDelete + </summary> + </member> + <member name="F:FineUI.Icon.CommentDull"> + <summary> + CommentDull + </summary> + </member> + <member name="F:FineUI.Icon.CommentEdit"> + <summary> + CommentEdit + </summary> + </member> + <member name="F:FineUI.Icon.CommentPlay"> + <summary> + CommentPlay + </summary> + </member> + <member name="F:FineUI.Icon.CommentRecord"> + <summary> + CommentRecord + </summary> + </member> + <member name="F:FineUI.Icon.Compass"> + <summary> + Compass + </summary> + </member> + <member name="F:FineUI.Icon.Compress"> + <summary> + Compress + </summary> + </member> + <member name="F:FineUI.Icon.Computer"> + <summary> + Computer + </summary> + </member> + <member name="F:FineUI.Icon.ComputerAdd"> + <summary> + ComputerAdd + </summary> + </member> + <member name="F:FineUI.Icon.ComputerConnect"> + <summary> + ComputerConnect + </summary> + </member> + <member name="F:FineUI.Icon.ComputerDelete"> + <summary> + ComputerDelete + </summary> + </member> + <member name="F:FineUI.Icon.ComputerEdit"> + <summary> + ComputerEdit + </summary> + </member> + <member name="F:FineUI.Icon.ComputerError"> + <summary> + ComputerError + </summary> + </member> + <member name="F:FineUI.Icon.ComputerGo"> + <summary> + ComputerGo + </summary> + </member> + <member name="F:FineUI.Icon.ComputerKey"> + <summary> + ComputerKey + </summary> + </member> + <member name="F:FineUI.Icon.ComputerLink"> + <summary> + ComputerLink + </summary> + </member> + <member name="F:FineUI.Icon.ComputerMagnify"> + <summary> + ComputerMagnify + </summary> + </member> + <member name="F:FineUI.Icon.ComputerOff"> + <summary> + ComputerOff + </summary> + </member> + <member name="F:FineUI.Icon.ComputerStart"> + <summary> + ComputerStart + </summary> + </member> + <member name="F:FineUI.Icon.ComputerStop"> + <summary> + ComputerStop + </summary> + </member> + <member name="F:FineUI.Icon.ComputerWrench"> + <summary> + ComputerWrench + </summary> + </member> + <member name="F:FineUI.Icon.Connect"> + <summary> + Connect + </summary> + </member> + <member name="F:FineUI.Icon.Contrast"> + <summary> + Contrast + </summary> + </member> + <member name="F:FineUI.Icon.ContrastDecrease"> + <summary> + ContrastDecrease + </summary> + </member> + <member name="F:FineUI.Icon.ContrastHigh"> + <summary> + ContrastHigh + </summary> + </member> + <member name="F:FineUI.Icon.ContrastIncrease"> + <summary> + ContrastIncrease + </summary> + </member> + <member name="F:FineUI.Icon.ContrastLow"> + <summary> + ContrastLow + </summary> + </member> + <member name="F:FineUI.Icon.Controller"> + <summary> + Controller + </summary> + </member> + <member name="F:FineUI.Icon.ControllerAdd"> + <summary> + ControllerAdd + </summary> + </member> + <member name="F:FineUI.Icon.ControllerDelete"> + <summary> + ControllerDelete + </summary> + </member> + <member name="F:FineUI.Icon.ControllerError"> + <summary> + ControllerError + </summary> + </member> + <member name="F:FineUI.Icon.ControlAdd"> + <summary> + ControlAdd + </summary> + </member> + <member name="F:FineUI.Icon.ControlAddBlue"> + <summary> + ControlAddBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlBlank"> + <summary> + ControlBlank + </summary> + </member> + <member name="F:FineUI.Icon.ControlBlankBlue"> + <summary> + ControlBlankBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlEject"> + <summary> + ControlEject + </summary> + </member> + <member name="F:FineUI.Icon.ControlEjectBlue"> + <summary> + ControlEjectBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlEnd"> + <summary> + ControlEnd + </summary> + </member> + <member name="F:FineUI.Icon.ControlEndBlue"> + <summary> + ControlEndBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlEqualizer"> + <summary> + ControlEqualizer + </summary> + </member> + <member name="F:FineUI.Icon.ControlEqualizerBlue"> + <summary> + ControlEqualizerBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlFastforward"> + <summary> + ControlFastforward + </summary> + </member> + <member name="F:FineUI.Icon.ControlFastforwardBlue"> + <summary> + ControlFastforwardBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlPause"> + <summary> + ControlPause + </summary> + </member> + <member name="F:FineUI.Icon.ControlPauseBlue"> + <summary> + ControlPauseBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlPlay"> + <summary> + ControlPlay + </summary> + </member> + <member name="F:FineUI.Icon.ControlPlayBlue"> + <summary> + ControlPlayBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlPower"> + <summary> + ControlPower + </summary> + </member> + <member name="F:FineUI.Icon.ControlPowerBlue"> + <summary> + ControlPowerBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlRecord"> + <summary> + ControlRecord + </summary> + </member> + <member name="F:FineUI.Icon.ControlRecordBlue"> + <summary> + ControlRecordBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlRemove"> + <summary> + ControlRemove + </summary> + </member> + <member name="F:FineUI.Icon.ControlRemoveBlue"> + <summary> + ControlRemoveBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlRepeat"> + <summary> + ControlRepeat + </summary> + </member> + <member name="F:FineUI.Icon.ControlRepeatBlue"> + <summary> + ControlRepeatBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlRewind"> + <summary> + ControlRewind + </summary> + </member> + <member name="F:FineUI.Icon.ControlRewindBlue"> + <summary> + ControlRewindBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlStart"> + <summary> + ControlStart + </summary> + </member> + <member name="F:FineUI.Icon.ControlStartBlue"> + <summary> + ControlStartBlue + </summary> + </member> + <member name="F:FineUI.Icon.ControlStop"> + <summary> + ControlStop + </summary> + </member> + <member name="F:FineUI.Icon.ControlStopBlue"> + <summary> + ControlStopBlue + </summary> + </member> + <member name="F:FineUI.Icon.Creditcards"> + <summary> + Creditcards + </summary> + </member> + <member name="F:FineUI.Icon.Cross"> + <summary> + Cross + </summary> + </member> + <member name="F:FineUI.Icon.Css"> + <summary> + Css + </summary> + </member> + <member name="F:FineUI.Icon.CssAdd"> + <summary> + CssAdd + </summary> + </member> + <member name="F:FineUI.Icon.CssDelete"> + <summary> + CssDelete + </summary> + </member> + <member name="F:FineUI.Icon.CssError"> + <summary> + CssError + </summary> + </member> + <member name="F:FineUI.Icon.CssGo"> + <summary> + CssGo + </summary> + </member> + <member name="F:FineUI.Icon.CssValid"> + <summary> + CssValid + </summary> + </member> + <member name="F:FineUI.Icon.Cup"> + <summary> + Cup + </summary> + </member> + <member name="F:FineUI.Icon.CupAdd"> + <summary> + CupAdd + </summary> + </member> + <member name="F:FineUI.Icon.CupBlack"> + <summary> + CupBlack + </summary> + </member> + <member name="F:FineUI.Icon.CupDelete"> + <summary> + CupDelete + </summary> + </member> + <member name="F:FineUI.Icon.CupEdit"> + <summary> + CupEdit + </summary> + </member> + <member name="F:FineUI.Icon.CupError"> + <summary> + CupError + </summary> + </member> + <member name="F:FineUI.Icon.CupGo"> + <summary> + CupGo + </summary> + </member> + <member name="F:FineUI.Icon.CupGreen"> + <summary> + CupGreen + </summary> + </member> + <member name="F:FineUI.Icon.CupKey"> + <summary> + CupKey + </summary> + </member> + <member name="F:FineUI.Icon.CupLink"> + <summary> + CupLink + </summary> + </member> + <member name="F:FineUI.Icon.CupTea"> + <summary> + CupTea + </summary> + </member> + <member name="F:FineUI.Icon.Cursor"> + <summary> + Cursor + </summary> + </member> + <member name="F:FineUI.Icon.CursorSmall"> + <summary> + CursorSmall + </summary> + </member> + <member name="F:FineUI.Icon.Cut"> + <summary> + Cut + </summary> + </member> + <member name="F:FineUI.Icon.CutRed"> + <summary> + CutRed + </summary> + </member> + <member name="F:FineUI.Icon.Database"> + <summary> + Database + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseAdd"> + <summary> + DatabaseAdd + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseConnect"> + <summary> + DatabaseConnect + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseCopy"> + <summary> + DatabaseCopy + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseDelete"> + <summary> + DatabaseDelete + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseEdit"> + <summary> + DatabaseEdit + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseError"> + <summary> + DatabaseError + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseGear"> + <summary> + DatabaseGear + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseGo"> + <summary> + DatabaseGo + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseKey"> + <summary> + DatabaseKey + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseLightning"> + <summary> + DatabaseLightning + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseLink"> + <summary> + DatabaseLink + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseRefresh"> + <summary> + DatabaseRefresh + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseSave"> + <summary> + DatabaseSave + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseStart"> + <summary> + DatabaseStart + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseStop"> + <summary> + DatabaseStop + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseTable"> + <summary> + DatabaseTable + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseWrench"> + <summary> + DatabaseWrench + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseYellow"> + <summary> + DatabaseYellow + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseYellowStart"> + <summary> + DatabaseYellowStart + </summary> + </member> + <member name="F:FineUI.Icon.DatabaseYellowStop"> + <summary> + DatabaseYellowStop + </summary> + </member> + <member name="F:FineUI.Icon.Date"> + <summary> + Date + </summary> + </member> + <member name="F:FineUI.Icon.DateAdd"> + <summary> + DateAdd + </summary> + </member> + <member name="F:FineUI.Icon.DateDelete"> + <summary> + DateDelete + </summary> + </member> + <member name="F:FineUI.Icon.DateEdit"> + <summary> + DateEdit + </summary> + </member> + <member name="F:FineUI.Icon.DateError"> + <summary> + DateError + </summary> + </member> + <member name="F:FineUI.Icon.DateGo"> + <summary> + DateGo + </summary> + </member> + <member name="F:FineUI.Icon.DateLink"> + <summary> + DateLink + </summary> + </member> + <member name="F:FineUI.Icon.DateMagnify"> + <summary> + DateMagnify + </summary> + </member> + <member name="F:FineUI.Icon.DateNext"> + <summary> + DateNext + </summary> + </member> + <member name="F:FineUI.Icon.DatePrevious"> + <summary> + DatePrevious + </summary> + </member> + <member name="F:FineUI.Icon.Decline"> + <summary> + Decline + </summary> + </member> + <member name="F:FineUI.Icon.Delete"> + <summary> + Delete + </summary> + </member> + <member name="F:FineUI.Icon.DeviceStylus"> + <summary> + DeviceStylus + </summary> + </member> + <member name="F:FineUI.Icon.Disconnect"> + <summary> + Disconnect + </summary> + </member> + <member name="F:FineUI.Icon.Disk"> + <summary> + Disk + </summary> + </member> + <member name="F:FineUI.Icon.DiskBlack"> + <summary> + DiskBlack + </summary> + </member> + <member name="F:FineUI.Icon.DiskBlackError"> + <summary> + DiskBlackError + </summary> + </member> + <member name="F:FineUI.Icon.DiskBlackMagnify"> + <summary> + DiskBlackMagnify + </summary> + </member> + <member name="F:FineUI.Icon.DiskDownload"> + <summary> + DiskDownload + </summary> + </member> + <member name="F:FineUI.Icon.DiskEdit"> + <summary> + DiskEdit + </summary> + </member> + <member name="F:FineUI.Icon.DiskError"> + <summary> + DiskError + </summary> + </member> + <member name="F:FineUI.Icon.DiskMagnify"> + <summary> + DiskMagnify + </summary> + </member> + <member name="F:FineUI.Icon.DiskMultiple"> + <summary> + DiskMultiple + </summary> + </member> + <member name="F:FineUI.Icon.DiskUpload"> + <summary> + DiskUpload + </summary> + </member> + <member name="F:FineUI.Icon.Door"> + <summary> + Door + </summary> + </member> + <member name="F:FineUI.Icon.DoorError"> + <summary> + DoorError + </summary> + </member> + <member name="F:FineUI.Icon.DoorIn"> + <summary> + DoorIn + </summary> + </member> + <member name="F:FineUI.Icon.DoorOpen"> + <summary> + DoorOpen + </summary> + </member> + <member name="F:FineUI.Icon.DoorOut"> + <summary> + DoorOut + </summary> + </member> + <member name="F:FineUI.Icon.Drink"> + <summary> + Drink + </summary> + </member> + <member name="F:FineUI.Icon.DrinkEmpty"> + <summary> + DrinkEmpty + </summary> + </member> + <member name="F:FineUI.Icon.DrinkRed"> + <summary> + DrinkRed + </summary> + </member> + <member name="F:FineUI.Icon.Drive"> + <summary> + Drive + </summary> + </member> + <member name="F:FineUI.Icon.DriveAdd"> + <summary> + DriveAdd + </summary> + </member> + <member name="F:FineUI.Icon.DriveBurn"> + <summary> + DriveBurn + </summary> + </member> + <member name="F:FineUI.Icon.DriveCd"> + <summary> + DriveCd + </summary> + </member> + <member name="F:FineUI.Icon.DriveCdr"> + <summary> + DriveCdr + </summary> + </member> + <member name="F:FineUI.Icon.DriveCdEmpty"> + <summary> + DriveCdEmpty + </summary> + </member> + <member name="F:FineUI.Icon.DriveDelete"> + <summary> + DriveDelete + </summary> + </member> + <member name="F:FineUI.Icon.DriveDisk"> + <summary> + DriveDisk + </summary> + </member> + <member name="F:FineUI.Icon.DriveEdit"> + <summary> + DriveEdit + </summary> + </member> + <member name="F:FineUI.Icon.DriveError"> + <summary> + DriveError + </summary> + </member> + <member name="F:FineUI.Icon.DriveGo"> + <summary> + DriveGo + </summary> + </member> + <member name="F:FineUI.Icon.DriveKey"> + <summary> + DriveKey + </summary> + </member> + <member name="F:FineUI.Icon.DriveLink"> + <summary> + DriveLink + </summary> + </member> + <member name="F:FineUI.Icon.DriveMagnify"> + <summary> + DriveMagnify + </summary> + </member> + <member name="F:FineUI.Icon.DriveNetwork"> + <summary> + DriveNetwork + </summary> + </member> + <member name="F:FineUI.Icon.DriveNetworkError"> + <summary> + DriveNetworkError + </summary> + </member> + <member name="F:FineUI.Icon.DriveNetworkStop"> + <summary> + DriveNetworkStop + </summary> + </member> + <member name="F:FineUI.Icon.DriveRename"> + <summary> + DriveRename + </summary> + </member> + <member name="F:FineUI.Icon.DriveUser"> + <summary> + DriveUser + </summary> + </member> + <member name="F:FineUI.Icon.DriveWeb"> + <summary> + DriveWeb + </summary> + </member> + <member name="F:FineUI.Icon.Dvd"> + <summary> + Dvd + </summary> + </member> + <member name="F:FineUI.Icon.DvdAdd"> + <summary> + DvdAdd + </summary> + </member> + <member name="F:FineUI.Icon.DvdDelete"> + <summary> + DvdDelete + </summary> + </member> + <member name="F:FineUI.Icon.DvdEdit"> + <summary> + DvdEdit + </summary> + </member> + <member name="F:FineUI.Icon.DvdError"> + <summary> + DvdError + </summary> + </member> + <member name="F:FineUI.Icon.DvdGo"> + <summary> + DvdGo + </summary> + </member> + <member name="F:FineUI.Icon.DvdKey"> + <summary> + DvdKey + </summary> + </member> + <member name="F:FineUI.Icon.DvdLink"> + <summary> + DvdLink + </summary> + </member> + <member name="F:FineUI.Icon.DvdStart"> + <summary> + DvdStart + </summary> + </member> + <member name="F:FineUI.Icon.DvdStop"> + <summary> + DvdStop + </summary> + </member> + <member name="F:FineUI.Icon.EjectBlue"> + <summary> + EjectBlue + </summary> + </member> + <member name="F:FineUI.Icon.EjectGreen"> + <summary> + EjectGreen + </summary> + </member> + <member name="F:FineUI.Icon.Email"> + <summary> + Email + </summary> + </member> + <member name="F:FineUI.Icon.EmailAdd"> + <summary> + EmailAdd + </summary> + </member> + <member name="F:FineUI.Icon.EmailAttach"> + <summary> + EmailAttach + </summary> + </member> + <member name="F:FineUI.Icon.EmailDelete"> + <summary> + EmailDelete + </summary> + </member> + <member name="F:FineUI.Icon.EmailEdit"> + <summary> + EmailEdit + </summary> + </member> + <member name="F:FineUI.Icon.EmailError"> + <summary> + EmailError + </summary> + </member> + <member name="F:FineUI.Icon.EmailGo"> + <summary> + EmailGo + </summary> + </member> + <member name="F:FineUI.Icon.EmailLink"> + <summary> + EmailLink + </summary> + </member> + <member name="F:FineUI.Icon.EmailMagnify"> + <summary> + EmailMagnify + </summary> + </member> + <member name="F:FineUI.Icon.EmailOpen"> + <summary> + EmailOpen + </summary> + </member> + <member name="F:FineUI.Icon.EmailOpenImage"> + <summary> + EmailOpenImage + </summary> + </member> + <member name="F:FineUI.Icon.EmailStar"> + <summary> + EmailStar + </summary> + </member> + <member name="F:FineUI.Icon.EmailStart"> + <summary> + EmailStart + </summary> + </member> + <member name="F:FineUI.Icon.EmailStop"> + <summary> + EmailStop + </summary> + </member> + <member name="F:FineUI.Icon.EmailTransfer"> + <summary> + EmailTransfer + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonEvilgrin"> + <summary> + EmoticonEvilgrin + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonGrin"> + <summary> + EmoticonGrin + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonHappy"> + <summary> + EmoticonHappy + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonSmile"> + <summary> + EmoticonSmile + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonSurprised"> + <summary> + EmoticonSurprised + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonTongue"> + <summary> + EmoticonTongue + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonUnhappy"> + <summary> + EmoticonUnhappy + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonWaii"> + <summary> + EmoticonWaii + </summary> + </member> + <member name="F:FineUI.Icon.EmoticonWink"> + <summary> + EmoticonWink + </summary> + </member> + <member name="F:FineUI.Icon.Erase"> + <summary> + Erase + </summary> + </member> + <member name="F:FineUI.Icon.Error"> + <summary> + Error + </summary> + </member> + <member name="F:FineUI.Icon.ErrorAdd"> + <summary> + ErrorAdd + </summary> + </member> + <member name="F:FineUI.Icon.ErrorDelete"> + <summary> + ErrorDelete + </summary> + </member> + <member name="F:FineUI.Icon.ErrorGo"> + <summary> + ErrorGo + </summary> + </member> + <member name="F:FineUI.Icon.Exclamation"> + <summary> + Exclamation + </summary> + </member> + <member name="F:FineUI.Icon.Eye"> + <summary> + Eye + </summary> + </member> + <member name="F:FineUI.Icon.Eyes"> + <summary> + Eyes + </summary> + </member> + <member name="F:FineUI.Icon.Feed"> + <summary> + Feed + </summary> + </member> + <member name="F:FineUI.Icon.FeedAdd"> + <summary> + FeedAdd + </summary> + </member> + <member name="F:FineUI.Icon.FeedDelete"> + <summary> + FeedDelete + </summary> + </member> + <member name="F:FineUI.Icon.FeedDisk"> + <summary> + FeedDisk + </summary> + </member> + <member name="F:FineUI.Icon.FeedEdit"> + <summary> + FeedEdit + </summary> + </member> + <member name="F:FineUI.Icon.FeedError"> + <summary> + FeedError + </summary> + </member> + <member name="F:FineUI.Icon.FeedGo"> + <summary> + FeedGo + </summary> + </member> + <member name="F:FineUI.Icon.FeedKey"> + <summary> + FeedKey + </summary> + </member> + <member name="F:FineUI.Icon.FeedLink"> + <summary> + FeedLink + </summary> + </member> + <member name="F:FineUI.Icon.FeedMagnify"> + <summary> + FeedMagnify + </summary> + </member> + <member name="F:FineUI.Icon.FeedStar"> + <summary> + FeedStar + </summary> + </member> + <member name="F:FineUI.Icon.Female"> + <summary> + Female + </summary> + </member> + <member name="F:FineUI.Icon.Film"> + <summary> + Film + </summary> + </member> + <member name="F:FineUI.Icon.FilmAdd"> + <summary> + FilmAdd + </summary> + </member> + <member name="F:FineUI.Icon.FilmDelete"> + <summary> + FilmDelete + </summary> + </member> + <member name="F:FineUI.Icon.FilmEdit"> + <summary> + FilmEdit + </summary> + </member> + <member name="F:FineUI.Icon.FilmEject"> + <summary> + FilmEject + </summary> + </member> + <member name="F:FineUI.Icon.FilmError"> + <summary> + FilmError + </summary> + </member> + <member name="F:FineUI.Icon.FilmGo"> + <summary> + FilmGo + </summary> + </member> + <member name="F:FineUI.Icon.FilmKey"> + <summary> + FilmKey + </summary> + </member> + <member name="F:FineUI.Icon.FilmLink"> + <summary> + FilmLink + </summary> + </member> + <member name="F:FineUI.Icon.FilmMagnify"> + <summary> + FilmMagnify + </summary> + </member> + <member name="F:FineUI.Icon.FilmSave"> + <summary> + FilmSave + </summary> + </member> + <member name="F:FineUI.Icon.FilmStar"> + <summary> + FilmStar + </summary> + </member> + <member name="F:FineUI.Icon.FilmStart"> + <summary> + FilmStart + </summary> + </member> + <member name="F:FineUI.Icon.FilmStop"> + <summary> + FilmStop + </summary> + </member> + <member name="F:FineUI.Icon.Find"> + <summary> + Find + </summary> + </member> + <member name="F:FineUI.Icon.FingerPoint"> + <summary> + FingerPoint + </summary> + </member> + <member name="F:FineUI.Icon.FlagAd"> + <summary> + FlagAd + </summary> + </member> + <member name="F:FineUI.Icon.FlagAe"> + <summary> + FlagAe + </summary> + </member> + <member name="F:FineUI.Icon.FlagAf"> + <summary> + FlagAf + </summary> + </member> + <member name="F:FineUI.Icon.FlagAg"> + <summary> + FlagAg + </summary> + </member> + <member name="F:FineUI.Icon.FlagAi"> + <summary> + FlagAi + </summary> + </member> + <member name="F:FineUI.Icon.FlagAl"> + <summary> + FlagAl + </summary> + </member> + <member name="F:FineUI.Icon.FlagAm"> + <summary> + FlagAm + </summary> + </member> + <member name="F:FineUI.Icon.FlagAn"> + <summary> + FlagAn + </summary> + </member> + <member name="F:FineUI.Icon.FlagAo"> + <summary> + FlagAo + </summary> + </member> + <member name="F:FineUI.Icon.FlagAr"> + <summary> + FlagAr + </summary> + </member> + <member name="F:FineUI.Icon.FlagAs"> + <summary> + FlagAs + </summary> + </member> + <member name="F:FineUI.Icon.FlagAt"> + <summary> + FlagAt + </summary> + </member> + <member name="F:FineUI.Icon.FlagAu"> + <summary> + FlagAu + </summary> + </member> + <member name="F:FineUI.Icon.FlagAw"> + <summary> + FlagAw + </summary> + </member> + <member name="F:FineUI.Icon.FlagAx"> + <summary> + FlagAx + </summary> + </member> + <member name="F:FineUI.Icon.FlagAz"> + <summary> + FlagAz + </summary> + </member> + <member name="F:FineUI.Icon.FlagBa"> + <summary> + FlagBa + </summary> + </member> + <member name="F:FineUI.Icon.FlagBb"> + <summary> + FlagBb + </summary> + </member> + <member name="F:FineUI.Icon.FlagBd"> + <summary> + FlagBd + </summary> + </member> + <member name="F:FineUI.Icon.FlagBe"> + <summary> + FlagBe + </summary> + </member> + <member name="F:FineUI.Icon.FlagBf"> + <summary> + FlagBf + </summary> + </member> + <member name="F:FineUI.Icon.FlagBg"> + <summary> + FlagBg + </summary> + </member> + <member name="F:FineUI.Icon.FlagBh"> + <summary> + FlagBh + </summary> + </member> + <member name="F:FineUI.Icon.FlagBi"> + <summary> + FlagBi + </summary> + </member> + <member name="F:FineUI.Icon.FlagBj"> + <summary> + FlagBj + </summary> + </member> + <member name="F:FineUI.Icon.FlagBlack"> + <summary> + FlagBlack + </summary> + </member> + <member name="F:FineUI.Icon.FlagBlue"> + <summary> + FlagBlue + </summary> + </member> + <member name="F:FineUI.Icon.FlagBm"> + <summary> + FlagBm + </summary> + </member> + <member name="F:FineUI.Icon.FlagBn"> + <summary> + FlagBn + </summary> + </member> + <member name="F:FineUI.Icon.FlagBo"> + <summary> + FlagBo + </summary> + </member> + <member name="F:FineUI.Icon.FlagBr"> + <summary> + FlagBr + </summary> + </member> + <member name="F:FineUI.Icon.FlagBs"> + <summary> + FlagBs + </summary> + </member> + <member name="F:FineUI.Icon.FlagBt"> + <summary> + FlagBt + </summary> + </member> + <member name="F:FineUI.Icon.FlagBv"> + <summary> + FlagBv + </summary> + </member> + <member name="F:FineUI.Icon.FlagBw"> + <summary> + FlagBw + </summary> + </member> + <member name="F:FineUI.Icon.FlagBy"> + <summary> + FlagBy + </summary> + </member> + <member name="F:FineUI.Icon.FlagBz"> + <summary> + FlagBz + </summary> + </member> + <member name="F:FineUI.Icon.FlagCa"> + <summary> + FlagCa + </summary> + </member> + <member name="F:FineUI.Icon.FlagCatalonia"> + <summary> + FlagCatalonia + </summary> + </member> + <member name="F:FineUI.Icon.FlagCc"> + <summary> + FlagCc + </summary> + </member> + <member name="F:FineUI.Icon.FlagCd"> + <summary> + FlagCd + </summary> + </member> + <member name="F:FineUI.Icon.FlagCf"> + <summary> + FlagCf + </summary> + </member> + <member name="F:FineUI.Icon.FlagCg"> + <summary> + FlagCg + </summary> + </member> + <member name="F:FineUI.Icon.FlagCh"> + <summary> + FlagCh + </summary> + </member> + <member name="F:FineUI.Icon.FlagChecked"> + <summary> + FlagChecked + </summary> + </member> + <member name="F:FineUI.Icon.FlagCi"> + <summary> + FlagCi + </summary> + </member> + <member name="F:FineUI.Icon.FlagCk"> + <summary> + FlagCk + </summary> + </member> + <member name="F:FineUI.Icon.FlagCl"> + <summary> + FlagCl + </summary> + </member> + <member name="F:FineUI.Icon.FlagCm"> + <summary> + FlagCm + </summary> + </member> + <member name="F:FineUI.Icon.FlagCn"> + <summary> + FlagCn + </summary> + </member> + <member name="F:FineUI.Icon.FlagCo"> + <summary> + FlagCo + </summary> + </member> + <member name="F:FineUI.Icon.FlagCr"> + <summary> + FlagCr + </summary> + </member> + <member name="F:FineUI.Icon.FlagCs"> + <summary> + FlagCs + </summary> + </member> + <member name="F:FineUI.Icon.FlagCu"> + <summary> + FlagCu + </summary> + </member> + <member name="F:FineUI.Icon.FlagCv"> + <summary> + FlagCv + </summary> + </member> + <member name="F:FineUI.Icon.FlagCx"> + <summary> + FlagCx + </summary> + </member> + <member name="F:FineUI.Icon.FlagCy"> + <summary> + FlagCy + </summary> + </member> + <member name="F:FineUI.Icon.FlagCz"> + <summary> + FlagCz + </summary> + </member> + <member name="F:FineUI.Icon.FlagDe"> + <summary> + FlagDe + </summary> + </member> + <member name="F:FineUI.Icon.FlagDj"> + <summary> + FlagDj + </summary> + </member> + <member name="F:FineUI.Icon.FlagDk"> + <summary> + FlagDk + </summary> + </member> + <member name="F:FineUI.Icon.FlagDm"> + <summary> + FlagDm + </summary> + </member> + <member name="F:FineUI.Icon.FlagDo"> + <summary> + FlagDo + </summary> + </member> + <member name="F:FineUI.Icon.FlagDz"> + <summary> + FlagDz + </summary> + </member> + <member name="F:FineUI.Icon.FlagEc"> + <summary> + FlagEc + </summary> + </member> + <member name="F:FineUI.Icon.FlagEe"> + <summary> + FlagEe + </summary> + </member> + <member name="F:FineUI.Icon.FlagEg"> + <summary> + FlagEg + </summary> + </member> + <member name="F:FineUI.Icon.FlagEh"> + <summary> + FlagEh + </summary> + </member> + <member name="F:FineUI.Icon.FlagEngland"> + <summary> + FlagEngland + </summary> + </member> + <member name="F:FineUI.Icon.FlagEr"> + <summary> + FlagEr + </summary> + </member> + <member name="F:FineUI.Icon.FlagEs"> + <summary> + FlagEs + </summary> + </member> + <member name="F:FineUI.Icon.FlagEt"> + <summary> + FlagEt + </summary> + </member> + <member name="F:FineUI.Icon.FlagEuropeanunion"> + <summary> + FlagEuropeanunion + </summary> + </member> + <member name="F:FineUI.Icon.FlagFam"> + <summary> + FlagFam + </summary> + </member> + <member name="F:FineUI.Icon.FlagFi"> + <summary> + FlagFi + </summary> + </member> + <member name="F:FineUI.Icon.FlagFj"> + <summary> + FlagFj + </summary> + </member> + <member name="F:FineUI.Icon.FlagFk"> + <summary> + FlagFk + </summary> + </member> + <member name="F:FineUI.Icon.FlagFm"> + <summary> + FlagFm + </summary> + </member> + <member name="F:FineUI.Icon.FlagFo"> + <summary> + FlagFo + </summary> + </member> + <member name="F:FineUI.Icon.FlagFr"> + <summary> + FlagFr + </summary> + </member> + <member name="F:FineUI.Icon.FlagFrance"> + <summary> + FlagFrance + </summary> + </member> + <member name="F:FineUI.Icon.FlagGa"> + <summary> + FlagGa + </summary> + </member> + <member name="F:FineUI.Icon.FlagGb"> + <summary> + FlagGb + </summary> + </member> + <member name="F:FineUI.Icon.FlagGd"> + <summary> + FlagGd + </summary> + </member> + <member name="F:FineUI.Icon.FlagGe"> + <summary> + FlagGe + </summary> + </member> + <member name="F:FineUI.Icon.FlagGf"> + <summary> + FlagGf + </summary> + </member> + <member name="F:FineUI.Icon.FlagGg"> + <summary> + FlagGg + </summary> + </member> + <member name="F:FineUI.Icon.FlagGh"> + <summary> + FlagGh + </summary> + </member> + <member name="F:FineUI.Icon.FlagGi"> + <summary> + FlagGi + </summary> + </member> + <member name="F:FineUI.Icon.FlagGl"> + <summary> + FlagGl + </summary> + </member> + <member name="F:FineUI.Icon.FlagGm"> + <summary> + FlagGm + </summary> + </member> + <member name="F:FineUI.Icon.FlagGn"> + <summary> + FlagGn + </summary> + </member> + <member name="F:FineUI.Icon.FlagGp"> + <summary> + FlagGp + </summary> + </member> + <member name="F:FineUI.Icon.FlagGq"> + <summary> + FlagGq + </summary> + </member> + <member name="F:FineUI.Icon.FlagGr"> + <summary> + FlagGr + </summary> + </member> + <member name="F:FineUI.Icon.FlagGreen"> + <summary> + FlagGreen + </summary> + </member> + <member name="F:FineUI.Icon.FlagGrey"> + <summary> + FlagGrey + </summary> + </member> + <member name="F:FineUI.Icon.FlagGs"> + <summary> + FlagGs + </summary> + </member> + <member name="F:FineUI.Icon.FlagGt"> + <summary> + FlagGt + </summary> + </member> + <member name="F:FineUI.Icon.FlagGu"> + <summary> + FlagGu + </summary> + </member> + <member name="F:FineUI.Icon.FlagGw"> + <summary> + FlagGw + </summary> + </member> + <member name="F:FineUI.Icon.FlagGy"> + <summary> + FlagGy + </summary> + </member> + <member name="F:FineUI.Icon.FlagHk"> + <summary> + FlagHk + </summary> + </member> + <member name="F:FineUI.Icon.FlagHm"> + <summary> + FlagHm + </summary> + </member> + <member name="F:FineUI.Icon.FlagHn"> + <summary> + FlagHn + </summary> + </member> + <member name="F:FineUI.Icon.FlagHr"> + <summary> + FlagHr + </summary> + </member> + <member name="F:FineUI.Icon.FlagHt"> + <summary> + FlagHt + </summary> + </member> + <member name="F:FineUI.Icon.FlagHu"> + <summary> + FlagHu + </summary> + </member> + <member name="F:FineUI.Icon.FlagId"> + <summary> + FlagId + </summary> + </member> + <member name="F:FineUI.Icon.FlagIe"> + <summary> + FlagIe + </summary> + </member> + <member name="F:FineUI.Icon.FlagIl"> + <summary> + FlagIl + </summary> + </member> + <member name="F:FineUI.Icon.FlagIn"> + <summary> + FlagIn + </summary> + </member> + <member name="F:FineUI.Icon.FlagIo"> + <summary> + FlagIo + </summary> + </member> + <member name="F:FineUI.Icon.FlagIq"> + <summary> + FlagIq + </summary> + </member> + <member name="F:FineUI.Icon.FlagIr"> + <summary> + FlagIr + </summary> + </member> + <member name="F:FineUI.Icon.FlagIs"> + <summary> + FlagIs + </summary> + </member> + <member name="F:FineUI.Icon.FlagIt"> + <summary> + FlagIt + </summary> + </member> + <member name="F:FineUI.Icon.FlagJm"> + <summary> + FlagJm + </summary> + </member> + <member name="F:FineUI.Icon.FlagJo"> + <summary> + FlagJo + </summary> + </member> + <member name="F:FineUI.Icon.FlagJp"> + <summary> + FlagJp + </summary> + </member> + <member name="F:FineUI.Icon.FlagKe"> + <summary> + FlagKe + </summary> + </member> + <member name="F:FineUI.Icon.FlagKg"> + <summary> + FlagKg + </summary> + </member> + <member name="F:FineUI.Icon.FlagKh"> + <summary> + FlagKh + </summary> + </member> + <member name="F:FineUI.Icon.FlagKi"> + <summary> + FlagKi + </summary> + </member> + <member name="F:FineUI.Icon.FlagKm"> + <summary> + FlagKm + </summary> + </member> + <member name="F:FineUI.Icon.FlagKn"> + <summary> + FlagKn + </summary> + </member> + <member name="F:FineUI.Icon.FlagKp"> + <summary> + FlagKp + </summary> + </member> + <member name="F:FineUI.Icon.FlagKr"> + <summary> + FlagKr + </summary> + </member> + <member name="F:FineUI.Icon.FlagKw"> + <summary> + FlagKw + </summary> + </member> + <member name="F:FineUI.Icon.FlagKy"> + <summary> + FlagKy + </summary> + </member> + <member name="F:FineUI.Icon.FlagKz"> + <summary> + FlagKz + </summary> + </member> + <member name="F:FineUI.Icon.FlagLa"> + <summary> + FlagLa + </summary> + </member> + <member name="F:FineUI.Icon.FlagLb"> + <summary> + FlagLb + </summary> + </member> + <member name="F:FineUI.Icon.FlagLc"> + <summary> + FlagLc + </summary> + </member> + <member name="F:FineUI.Icon.FlagLi"> + <summary> + FlagLi + </summary> + </member> + <member name="F:FineUI.Icon.FlagLk"> + <summary> + FlagLk + </summary> + </member> + <member name="F:FineUI.Icon.FlagLr"> + <summary> + FlagLr + </summary> + </member> + <member name="F:FineUI.Icon.FlagLs"> + <summary> + FlagLs + </summary> + </member> + <member name="F:FineUI.Icon.FlagLt"> + <summary> + FlagLt + </summary> + </member> + <member name="F:FineUI.Icon.FlagLu"> + <summary> + FlagLu + </summary> + </member> + <member name="F:FineUI.Icon.FlagLv"> + <summary> + FlagLv + </summary> + </member> + <member name="F:FineUI.Icon.FlagLy"> + <summary> + FlagLy + </summary> + </member> + <member name="F:FineUI.Icon.FlagMa"> + <summary> + FlagMa + </summary> + </member> + <member name="F:FineUI.Icon.FlagMc"> + <summary> + FlagMc + </summary> + </member> + <member name="F:FineUI.Icon.FlagMd"> + <summary> + FlagMd + </summary> + </member> + <member name="F:FineUI.Icon.FlagMe"> + <summary> + FlagMe + </summary> + </member> + <member name="F:FineUI.Icon.FlagMg"> + <summary> + FlagMg + </summary> + </member> + <member name="F:FineUI.Icon.FlagMh"> + <summary> + FlagMh + </summary> + </member> + <member name="F:FineUI.Icon.FlagMk"> + <summary> + FlagMk + </summary> + </member> + <member name="F:FineUI.Icon.FlagMl"> + <summary> + FlagMl + </summary> + </member> + <member name="F:FineUI.Icon.FlagMm"> + <summary> + FlagMm + </summary> + </member> + <member name="F:FineUI.Icon.FlagMn"> + <summary> + FlagMn + </summary> + </member> + <member name="F:FineUI.Icon.FlagMo"> + <summary> + FlagMo + </summary> + </member> + <member name="F:FineUI.Icon.FlagMp"> + <summary> + FlagMp + </summary> + </member> + <member name="F:FineUI.Icon.FlagMq"> + <summary> + FlagMq + </summary> + </member> + <member name="F:FineUI.Icon.FlagMr"> + <summary> + FlagMr + </summary> + </member> + <member name="F:FineUI.Icon.FlagMs"> + <summary> + FlagMs + </summary> + </member> + <member name="F:FineUI.Icon.FlagMt"> + <summary> + FlagMt + </summary> + </member> + <member name="F:FineUI.Icon.FlagMu"> + <summary> + FlagMu + </summary> + </member> + <member name="F:FineUI.Icon.FlagMv"> + <summary> + FlagMv + </summary> + </member> + <member name="F:FineUI.Icon.FlagMw"> + <summary> + FlagMw + </summary> + </member> + <member name="F:FineUI.Icon.FlagMx"> + <summary> + FlagMx + </summary> + </member> + <member name="F:FineUI.Icon.FlagMy"> + <summary> + FlagMy + </summary> + </member> + <member name="F:FineUI.Icon.FlagMz"> + <summary> + FlagMz + </summary> + </member> + <member name="F:FineUI.Icon.FlagNa"> + <summary> + FlagNa + </summary> + </member> + <member name="F:FineUI.Icon.FlagNc"> + <summary> + FlagNc + </summary> + </member> + <member name="F:FineUI.Icon.FlagNe"> + <summary> + FlagNe + </summary> + </member> + <member name="F:FineUI.Icon.FlagNf"> + <summary> + FlagNf + </summary> + </member> + <member name="F:FineUI.Icon.FlagNg"> + <summary> + FlagNg + </summary> + </member> + <member name="F:FineUI.Icon.FlagNi"> + <summary> + FlagNi + </summary> + </member> + <member name="F:FineUI.Icon.FlagNl"> + <summary> + FlagNl + </summary> + </member> + <member name="F:FineUI.Icon.FlagNo"> + <summary> + FlagNo + </summary> + </member> + <member name="F:FineUI.Icon.FlagNp"> + <summary> + FlagNp + </summary> + </member> + <member name="F:FineUI.Icon.FlagNr"> + <summary> + FlagNr + </summary> + </member> + <member name="F:FineUI.Icon.FlagNu"> + <summary> + FlagNu + </summary> + </member> + <member name="F:FineUI.Icon.FlagNz"> + <summary> + FlagNz + </summary> + </member> + <member name="F:FineUI.Icon.FlagOm"> + <summary> + FlagOm + </summary> + </member> + <member name="F:FineUI.Icon.FlagOrange"> + <summary> + FlagOrange + </summary> + </member> + <member name="F:FineUI.Icon.FlagPa"> + <summary> + FlagPa + </summary> + </member> + <member name="F:FineUI.Icon.FlagPe"> + <summary> + FlagPe + </summary> + </member> + <member name="F:FineUI.Icon.FlagPf"> + <summary> + FlagPf + </summary> + </member> + <member name="F:FineUI.Icon.FlagPg"> + <summary> + FlagPg + </summary> + </member> + <member name="F:FineUI.Icon.FlagPh"> + <summary> + FlagPh + </summary> + </member> + <member name="F:FineUI.Icon.FlagPink"> + <summary> + FlagPink + </summary> + </member> + <member name="F:FineUI.Icon.FlagPk"> + <summary> + FlagPk + </summary> + </member> + <member name="F:FineUI.Icon.FlagPl"> + <summary> + FlagPl + </summary> + </member> + <member name="F:FineUI.Icon.FlagPm"> + <summary> + FlagPm + </summary> + </member> + <member name="F:FineUI.Icon.FlagPn"> + <summary> + FlagPn + </summary> + </member> + <member name="F:FineUI.Icon.FlagPr"> + <summary> + FlagPr + </summary> + </member> + <member name="F:FineUI.Icon.FlagPs"> + <summary> + FlagPs + </summary> + </member> + <member name="F:FineUI.Icon.FlagPt"> + <summary> + FlagPt + </summary> + </member> + <member name="F:FineUI.Icon.FlagPurple"> + <summary> + FlagPurple + </summary> + </member> + <member name="F:FineUI.Icon.FlagPw"> + <summary> + FlagPw + </summary> + </member> + <member name="F:FineUI.Icon.FlagPy"> + <summary> + FlagPy + </summary> + </member> + <member name="F:FineUI.Icon.FlagQa"> + <summary> + FlagQa + </summary> + </member> + <member name="F:FineUI.Icon.FlagRe"> + <summary> + FlagRe + </summary> + </member> + <member name="F:FineUI.Icon.FlagRed"> + <summary> + FlagRed + </summary> + </member> + <member name="F:FineUI.Icon.FlagRo"> + <summary> + FlagRo + </summary> + </member> + <member name="F:FineUI.Icon.FlagRs"> + <summary> + FlagRs + </summary> + </member> + <member name="F:FineUI.Icon.FlagRu"> + <summary> + FlagRu + </summary> + </member> + <member name="F:FineUI.Icon.FlagRw"> + <summary> + FlagRw + </summary> + </member> + <member name="F:FineUI.Icon.FlagSa"> + <summary> + FlagSa + </summary> + </member> + <member name="F:FineUI.Icon.FlagSb"> + <summary> + FlagSb + </summary> + </member> + <member name="F:FineUI.Icon.FlagSc"> + <summary> + FlagSc + </summary> + </member> + <member name="F:FineUI.Icon.FlagScotland"> + <summary> + FlagScotland + </summary> + </member> + <member name="F:FineUI.Icon.FlagSd"> + <summary> + FlagSd + </summary> + </member> + <member name="F:FineUI.Icon.FlagSe"> + <summary> + FlagSe + </summary> + </member> + <member name="F:FineUI.Icon.FlagSg"> + <summary> + FlagSg + </summary> + </member> + <member name="F:FineUI.Icon.FlagSh"> + <summary> + FlagSh + </summary> + </member> + <member name="F:FineUI.Icon.FlagSi"> + <summary> + FlagSi + </summary> + </member> + <member name="F:FineUI.Icon.FlagSj"> + <summary> + FlagSj + </summary> + </member> + <member name="F:FineUI.Icon.FlagSk"> + <summary> + FlagSk + </summary> + </member> + <member name="F:FineUI.Icon.FlagSl"> + <summary> + FlagSl + </summary> + </member> + <member name="F:FineUI.Icon.FlagSm"> + <summary> + FlagSm + </summary> + </member> + <member name="F:FineUI.Icon.FlagSn"> + <summary> + FlagSn + </summary> + </member> + <member name="F:FineUI.Icon.FlagSo"> + <summary> + FlagSo + </summary> + </member> + <member name="F:FineUI.Icon.FlagSr"> + <summary> + FlagSr + </summary> + </member> + <member name="F:FineUI.Icon.FlagSt"> + <summary> + FlagSt + </summary> + </member> + <member name="F:FineUI.Icon.FlagSv"> + <summary> + FlagSv + </summary> + </member> + <member name="F:FineUI.Icon.FlagSy"> + <summary> + FlagSy + </summary> + </member> + <member name="F:FineUI.Icon.FlagSz"> + <summary> + FlagSz + </summary> + </member> + <member name="F:FineUI.Icon.FlagTc"> + <summary> + FlagTc + </summary> + </member> + <member name="F:FineUI.Icon.FlagTd"> + <summary> + FlagTd + </summary> + </member> + <member name="F:FineUI.Icon.FlagTf"> + <summary> + FlagTf + </summary> + </member> + <member name="F:FineUI.Icon.FlagTg"> + <summary> + FlagTg + </summary> + </member> + <member name="F:FineUI.Icon.FlagTh"> + <summary> + FlagTh + </summary> + </member> + <member name="F:FineUI.Icon.FlagTj"> + <summary> + FlagTj + </summary> + </member> + <member name="F:FineUI.Icon.FlagTk"> + <summary> + FlagTk + </summary> + </member> + <member name="F:FineUI.Icon.FlagTl"> + <summary> + FlagTl + </summary> + </member> + <member name="F:FineUI.Icon.FlagTm"> + <summary> + FlagTm + </summary> + </member> + <member name="F:FineUI.Icon.FlagTn"> + <summary> + FlagTn + </summary> + </member> + <member name="F:FineUI.Icon.FlagTo"> + <summary> + FlagTo + </summary> + </member> + <member name="F:FineUI.Icon.FlagTr"> + <summary> + FlagTr + </summary> + </member> + <member name="F:FineUI.Icon.FlagTt"> + <summary> + FlagTt + </summary> + </member> + <member name="F:FineUI.Icon.FlagTv"> + <summary> + FlagTv + </summary> + </member> + <member name="F:FineUI.Icon.FlagTw"> + <summary> + FlagTw + </summary> + </member> + <member name="F:FineUI.Icon.FlagTz"> + <summary> + FlagTz + </summary> + </member> + <member name="F:FineUI.Icon.FlagUa"> + <summary> + FlagUa + </summary> + </member> + <member name="F:FineUI.Icon.FlagUg"> + <summary> + FlagUg + </summary> + </member> + <member name="F:FineUI.Icon.FlagUm"> + <summary> + FlagUm + </summary> + </member> + <member name="F:FineUI.Icon.FlagUs"> + <summary> + FlagUs + </summary> + </member> + <member name="F:FineUI.Icon.FlagUy"> + <summary> + FlagUy + </summary> + </member> + <member name="F:FineUI.Icon.FlagUz"> + <summary> + FlagUz + </summary> + </member> + <member name="F:FineUI.Icon.FlagVa"> + <summary> + FlagVa + </summary> + </member> + <member name="F:FineUI.Icon.FlagVc"> + <summary> + FlagVc + </summary> + </member> + <member name="F:FineUI.Icon.FlagVe"> + <summary> + FlagVe + </summary> + </member> + <member name="F:FineUI.Icon.FlagVg"> + <summary> + FlagVg + </summary> + </member> + <member name="F:FineUI.Icon.FlagVi"> + <summary> + FlagVi + </summary> + </member> + <member name="F:FineUI.Icon.FlagVn"> + <summary> + FlagVn + </summary> + </member> + <member name="F:FineUI.Icon.FlagVu"> + <summary> + FlagVu + </summary> + </member> + <member name="F:FineUI.Icon.FlagWales"> + <summary> + FlagWales + </summary> + </member> + <member name="F:FineUI.Icon.FlagWf"> + <summary> + FlagWf + </summary> + </member> + <member name="F:FineUI.Icon.FlagWhite"> + <summary> + FlagWhite + </summary> + </member> + <member name="F:FineUI.Icon.FlagWs"> + <summary> + FlagWs + </summary> + </member> + <member name="F:FineUI.Icon.FlagYe"> + <summary> + FlagYe + </summary> + </member> + <member name="F:FineUI.Icon.FlagYellow"> + <summary> + FlagYellow + </summary> + </member> + <member name="F:FineUI.Icon.FlagYt"> + <summary> + FlagYt + </summary> + </member> + <member name="F:FineUI.Icon.FlagZa"> + <summary> + FlagZa + </summary> + </member> + <member name="F:FineUI.Icon.FlagZm"> + <summary> + FlagZm + </summary> + </member> + <member name="F:FineUI.Icon.FlagZw"> + <summary> + FlagZw + </summary> + </member> + <member name="F:FineUI.Icon.FlowerDaisy"> + <summary> + FlowerDaisy + </summary> + </member> + <member name="F:FineUI.Icon.Folder"> + <summary> + Folder + </summary> + </member> + <member name="F:FineUI.Icon.FolderAdd"> + <summary> + FolderAdd + </summary> + </member> + <member name="F:FineUI.Icon.FolderBell"> + <summary> + FolderBell + </summary> + </member> + <member name="F:FineUI.Icon.FolderBookmark"> + <summary> + FolderBookmark + </summary> + </member> + <member name="F:FineUI.Icon.FolderBrick"> + <summary> + FolderBrick + </summary> + </member> + <member name="F:FineUI.Icon.FolderBug"> + <summary> + FolderBug + </summary> + </member> + <member name="F:FineUI.Icon.FolderCamera"> + <summary> + FolderCamera + </summary> + </member> + <member name="F:FineUI.Icon.FolderConnect"> + <summary> + FolderConnect + </summary> + </member> + <member name="F:FineUI.Icon.FolderDatabase"> + <summary> + FolderDatabase + </summary> + </member> + <member name="F:FineUI.Icon.FolderDelete"> + <summary> + FolderDelete + </summary> + </member> + <member name="F:FineUI.Icon.FolderEdit"> + <summary> + FolderEdit + </summary> + </member> + <member name="F:FineUI.Icon.FolderError"> + <summary> + FolderError + </summary> + </member> + <member name="F:FineUI.Icon.FolderExplore"> + <summary> + FolderExplore + </summary> + </member> + <member name="F:FineUI.Icon.FolderFeed"> + <summary> + FolderFeed + </summary> + </member> + <member name="F:FineUI.Icon.FolderFilm"> + <summary> + FolderFilm + </summary> + </member> + <member name="F:FineUI.Icon.FolderFind"> + <summary> + FolderFind + </summary> + </member> + <member name="F:FineUI.Icon.FolderFont"> + <summary> + FolderFont + </summary> + </member> + <member name="F:FineUI.Icon.FolderGo"> + <summary> + FolderGo + </summary> + </member> + <member name="F:FineUI.Icon.FolderHeart"> + <summary> + FolderHeart + </summary> + </member> + <member name="F:FineUI.Icon.FolderHome"> + <summary> + FolderHome + </summary> + </member> + <member name="F:FineUI.Icon.FolderImage"> + <summary> + FolderImage + </summary> + </member> + <member name="F:FineUI.Icon.FolderKey"> + <summary> + FolderKey + </summary> + </member> + <member name="F:FineUI.Icon.FolderLightbulb"> + <summary> + FolderLightbulb + </summary> + </member> + <member name="F:FineUI.Icon.FolderLink"> + <summary> + FolderLink + </summary> + </member> + <member name="F:FineUI.Icon.FolderMagnify"> + <summary> + FolderMagnify + </summary> + </member> + <member name="F:FineUI.Icon.FolderPage"> + <summary> + FolderPage + </summary> + </member> + <member name="F:FineUI.Icon.FolderPageWhite"> + <summary> + FolderPageWhite + </summary> + </member> + <member name="F:FineUI.Icon.FolderPalette"> + <summary> + FolderPalette + </summary> + </member> + <member name="F:FineUI.Icon.FolderPicture"> + <summary> + FolderPicture + </summary> + </member> + <member name="F:FineUI.Icon.FolderStar"> + <summary> + FolderStar + </summary> + </member> + <member name="F:FineUI.Icon.FolderTable"> + <summary> + FolderTable + </summary> + </member> + <member name="F:FineUI.Icon.FolderUp"> + <summary> + FolderUp + </summary> + </member> + <member name="F:FineUI.Icon.FolderUser"> + <summary> + FolderUser + </summary> + </member> + <member name="F:FineUI.Icon.FolderWrench"> + <summary> + FolderWrench + </summary> + </member> + <member name="F:FineUI.Icon.Font"> + <summary> + Font + </summary> + </member> + <member name="F:FineUI.Icon.FontAdd"> + <summary> + FontAdd + </summary> + </member> + <member name="F:FineUI.Icon.FontColor"> + <summary> + FontColor + </summary> + </member> + <member name="F:FineUI.Icon.FontDelete"> + <summary> + FontDelete + </summary> + </member> + <member name="F:FineUI.Icon.FontGo"> + <summary> + FontGo + </summary> + </member> + <member name="F:FineUI.Icon.FontLarger"> + <summary> + FontLarger + </summary> + </member> + <member name="F:FineUI.Icon.FontSmaller"> + <summary> + FontSmaller + </summary> + </member> + <member name="F:FineUI.Icon.ForwardBlue"> + <summary> + ForwardBlue + </summary> + </member> + <member name="F:FineUI.Icon.ForwardGreen"> + <summary> + ForwardGreen + </summary> + </member> + <member name="F:FineUI.Icon.Group"> + <summary> + Group + </summary> + </member> + <member name="F:FineUI.Icon.GroupAdd"> + <summary> + GroupAdd + </summary> + </member> + <member name="F:FineUI.Icon.GroupDelete"> + <summary> + GroupDelete + </summary> + </member> + <member name="F:FineUI.Icon.GroupEdit"> + <summary> + GroupEdit + </summary> + </member> + <member name="F:FineUI.Icon.GroupError"> + <summary> + GroupError + </summary> + </member> + <member name="F:FineUI.Icon.GroupGear"> + <summary> + GroupGear + </summary> + </member> + <member name="F:FineUI.Icon.GroupGo"> + <summary> + GroupGo + </summary> + </member> + <member name="F:FineUI.Icon.GroupKey"> + <summary> + GroupKey + </summary> + </member> + <member name="F:FineUI.Icon.GroupLink"> + <summary> + GroupLink + </summary> + </member> + <member name="F:FineUI.Icon.Heart"> + <summary> + Heart + </summary> + </member> + <member name="F:FineUI.Icon.HeartAdd"> + <summary> + HeartAdd + </summary> + </member> + <member name="F:FineUI.Icon.HeartBroken"> + <summary> + HeartBroken + </summary> + </member> + <member name="F:FineUI.Icon.HeartConnect"> + <summary> + HeartConnect + </summary> + </member> + <member name="F:FineUI.Icon.HeartDelete"> + <summary> + HeartDelete + </summary> + </member> + <member name="F:FineUI.Icon.Help"> + <summary> + Help + </summary> + </member> + <member name="F:FineUI.Icon.Hourglass"> + <summary> + Hourglass + </summary> + </member> + <member name="F:FineUI.Icon.HourglassAdd"> + <summary> + HourglassAdd + </summary> + </member> + <member name="F:FineUI.Icon.HourglassDelete"> + <summary> + HourglassDelete + </summary> + </member> + <member name="F:FineUI.Icon.HourglassGo"> + <summary> + HourglassGo + </summary> + </member> + <member name="F:FineUI.Icon.HourglassLink"> + <summary> + HourglassLink + </summary> + </member> + <member name="F:FineUI.Icon.House"> + <summary> + House + </summary> + </member> + <member name="F:FineUI.Icon.HouseConnect"> + <summary> + HouseConnect + </summary> + </member> + <member name="F:FineUI.Icon.HouseGo"> + <summary> + HouseGo + </summary> + </member> + <member name="F:FineUI.Icon.HouseKey"> + <summary> + HouseKey + </summary> + </member> + <member name="F:FineUI.Icon.HouseLink"> + <summary> + HouseLink + </summary> + </member> + <member name="F:FineUI.Icon.HouseStar"> + <summary> + HouseStar + </summary> + </member> + <member name="F:FineUI.Icon.Html"> + <summary> + Html + </summary> + </member> + <member name="F:FineUI.Icon.HtmlAdd"> + <summary> + HtmlAdd + </summary> + </member> + <member name="F:FineUI.Icon.HtmlDelete"> + <summary> + HtmlDelete + </summary> + </member> + <member name="F:FineUI.Icon.HtmlError"> + <summary> + HtmlError + </summary> + </member> + <member name="F:FineUI.Icon.HtmlGo"> + <summary> + HtmlGo + </summary> + </member> + <member name="F:FineUI.Icon.HtmlValid"> + <summary> + HtmlValid + </summary> + </member> + <member name="F:FineUI.Icon.Image"> + <summary> + Image + </summary> + </member> + <member name="F:FineUI.Icon.Images"> + <summary> + Images + </summary> + </member> + <member name="F:FineUI.Icon.ImageAdd"> + <summary> + ImageAdd + </summary> + </member> + <member name="F:FineUI.Icon.ImageDelete"> + <summary> + ImageDelete + </summary> + </member> + <member name="F:FineUI.Icon.ImageEdit"> + <summary> + ImageEdit + </summary> + </member> + <member name="F:FineUI.Icon.ImageLink"> + <summary> + ImageLink + </summary> + </member> + <member name="F:FineUI.Icon.ImageMagnify"> + <summary> + ImageMagnify + </summary> + </member> + <member name="F:FineUI.Icon.ImageStar"> + <summary> + ImageStar + </summary> + </member> + <member name="F:FineUI.Icon.Information"> + <summary> + Information + </summary> + </member> + <member name="F:FineUI.Icon.Ipod"> + <summary> + Ipod + </summary> + </member> + <member name="F:FineUI.Icon.IpodCast"> + <summary> + IpodCast + </summary> + </member> + <member name="F:FineUI.Icon.IpodCastAdd"> + <summary> + IpodCastAdd + </summary> + </member> + <member name="F:FineUI.Icon.IpodCastDelete"> + <summary> + IpodCastDelete + </summary> + </member> + <member name="F:FineUI.Icon.IpodConnect"> + <summary> + IpodConnect + </summary> + </member> + <member name="F:FineUI.Icon.IpodNano"> + <summary> + IpodNano + </summary> + </member> + <member name="F:FineUI.Icon.IpodNanoConnect"> + <summary> + IpodNanoConnect + </summary> + </member> + <member name="F:FineUI.Icon.IpodSound"> + <summary> + IpodSound + </summary> + </member> + <member name="F:FineUI.Icon.Joystick"> + <summary> + Joystick + </summary> + </member> + <member name="F:FineUI.Icon.JoystickAdd"> + <summary> + JoystickAdd + </summary> + </member> + <member name="F:FineUI.Icon.JoystickConnect"> + <summary> + JoystickConnect + </summary> + </member> + <member name="F:FineUI.Icon.JoystickDelete"> + <summary> + JoystickDelete + </summary> + </member> + <member name="F:FineUI.Icon.JoystickError"> + <summary> + JoystickError + </summary> + </member> + <member name="F:FineUI.Icon.Key"> + <summary> + Key + </summary> + </member> + <member name="F:FineUI.Icon.Keyboard"> + <summary> + Keyboard + </summary> + </member> + <member name="F:FineUI.Icon.KeyboardAdd"> + <summary> + KeyboardAdd + </summary> + </member> + <member name="F:FineUI.Icon.KeyboardConnect"> + <summary> + KeyboardConnect + </summary> + </member> + <member name="F:FineUI.Icon.KeyboardDelete"> + <summary> + KeyboardDelete + </summary> + </member> + <member name="F:FineUI.Icon.KeyboardMagnify"> + <summary> + KeyboardMagnify + </summary> + </member> + <member name="F:FineUI.Icon.KeyAdd"> + <summary> + KeyAdd + </summary> + </member> + <member name="F:FineUI.Icon.KeyDelete"> + <summary> + KeyDelete + </summary> + </member> + <member name="F:FineUI.Icon.KeyGo"> + <summary> + KeyGo + </summary> + </member> + <member name="F:FineUI.Icon.KeyStart"> + <summary> + KeyStart + </summary> + </member> + <member name="F:FineUI.Icon.KeyStop"> + <summary> + KeyStop + </summary> + </member> + <member name="F:FineUI.Icon.Laptop"> + <summary> + Laptop + </summary> + </member> + <member name="F:FineUI.Icon.LaptopAdd"> + <summary> + LaptopAdd + </summary> + </member> + <member name="F:FineUI.Icon.LaptopConnect"> + <summary> + LaptopConnect + </summary> + </member> + <member name="F:FineUI.Icon.LaptopDelete"> + <summary> + LaptopDelete + </summary> + </member> + <member name="F:FineUI.Icon.LaptopDisk"> + <summary> + LaptopDisk + </summary> + </member> + <member name="F:FineUI.Icon.LaptopEdit"> + <summary> + LaptopEdit + </summary> + </member> + <member name="F:FineUI.Icon.LaptopError"> + <summary> + LaptopError + </summary> + </member> + <member name="F:FineUI.Icon.LaptopGo"> + <summary> + LaptopGo + </summary> + </member> + <member name="F:FineUI.Icon.LaptopKey"> + <summary> + LaptopKey + </summary> + </member> + <member name="F:FineUI.Icon.LaptopLink"> + <summary> + LaptopLink + </summary> + </member> + <member name="F:FineUI.Icon.LaptopMagnify"> + <summary> + LaptopMagnify + </summary> + </member> + <member name="F:FineUI.Icon.LaptopStart"> + <summary> + LaptopStart + </summary> + </member> + <member name="F:FineUI.Icon.LaptopStop"> + <summary> + LaptopStop + </summary> + </member> + <member name="F:FineUI.Icon.LaptopWrench"> + <summary> + LaptopWrench + </summary> + </member> + <member name="F:FineUI.Icon.Layers"> + <summary> + Layers + </summary> + </member> + <member name="F:FineUI.Icon.Layout"> + <summary> + Layout + </summary> + </member> + <member name="F:FineUI.Icon.LayoutAdd"> + <summary> + LayoutAdd + </summary> + </member> + <member name="F:FineUI.Icon.LayoutContent"> + <summary> + LayoutContent + </summary> + </member> + <member name="F:FineUI.Icon.LayoutDelete"> + <summary> + LayoutDelete + </summary> + </member> + <member name="F:FineUI.Icon.LayoutEdit"> + <summary> + LayoutEdit + </summary> + </member> + <member name="F:FineUI.Icon.LayoutError"> + <summary> + LayoutError + </summary> + </member> + <member name="F:FineUI.Icon.LayoutHeader"> + <summary> + LayoutHeader + </summary> + </member> + <member name="F:FineUI.Icon.LayoutKey"> + <summary> + LayoutKey + </summary> + </member> + <member name="F:FineUI.Icon.LayoutLightning"> + <summary> + LayoutLightning + </summary> + </member> + <member name="F:FineUI.Icon.LayoutLink"> + <summary> + LayoutLink + </summary> + </member> + <member name="F:FineUI.Icon.LayoutSidebar"> + <summary> + LayoutSidebar + </summary> + </member> + <member name="F:FineUI.Icon.Lightbulb"> + <summary> + Lightbulb + </summary> + </member> + <member name="F:FineUI.Icon.LightbulbAdd"> + <summary> + LightbulbAdd + </summary> + </member> + <member name="F:FineUI.Icon.LightbulbDelete"> + <summary> + LightbulbDelete + </summary> + </member> + <member name="F:FineUI.Icon.LightbulbOff"> + <summary> + LightbulbOff + </summary> + </member> + <member name="F:FineUI.Icon.Lightning"> + <summary> + Lightning + </summary> + </member> + <member name="F:FineUI.Icon.LightningAdd"> + <summary> + LightningAdd + </summary> + </member> + <member name="F:FineUI.Icon.LightningDelete"> + <summary> + LightningDelete + </summary> + </member> + <member name="F:FineUI.Icon.LightningGo"> + <summary> + LightningGo + </summary> + </member> + <member name="F:FineUI.Icon.Link"> + <summary> + Link + </summary> + </member> + <member name="F:FineUI.Icon.LinkAdd"> + <summary> + LinkAdd + </summary> + </member> + <member name="F:FineUI.Icon.LinkBreak"> + <summary> + LinkBreak + </summary> + </member> + <member name="F:FineUI.Icon.LinkDelete"> + <summary> + LinkDelete + </summary> + </member> + <member name="F:FineUI.Icon.LinkEdit"> + <summary> + LinkEdit + </summary> + </member> + <member name="F:FineUI.Icon.LinkError"> + <summary> + LinkError + </summary> + </member> + <member name="F:FineUI.Icon.LinkGo"> + <summary> + LinkGo + </summary> + </member> + <member name="F:FineUI.Icon.Lock"> + <summary> + Lock + </summary> + </member> + <member name="F:FineUI.Icon.LockAdd"> + <summary> + LockAdd + </summary> + </member> + <member name="F:FineUI.Icon.LockBreak"> + <summary> + LockBreak + </summary> + </member> + <member name="F:FineUI.Icon.LockDelete"> + <summary> + LockDelete + </summary> + </member> + <member name="F:FineUI.Icon.LockEdit"> + <summary> + LockEdit + </summary> + </member> + <member name="F:FineUI.Icon.LockGo"> + <summary> + LockGo + </summary> + </member> + <member name="F:FineUI.Icon.LockKey"> + <summary> + LockKey + </summary> + </member> + <member name="F:FineUI.Icon.LockOpen"> + <summary> + LockOpen + </summary> + </member> + <member name="F:FineUI.Icon.LockStart"> + <summary> + LockStart + </summary> + </member> + <member name="F:FineUI.Icon.LockStop"> + <summary> + LockStop + </summary> + </member> + <member name="F:FineUI.Icon.Lorry"> + <summary> + Lorry + </summary> + </member> + <member name="F:FineUI.Icon.LorryAdd"> + <summary> + LorryAdd + </summary> + </member> + <member name="F:FineUI.Icon.LorryDelete"> + <summary> + LorryDelete + </summary> + </member> + <member name="F:FineUI.Icon.LorryError"> + <summary> + LorryError + </summary> + </member> + <member name="F:FineUI.Icon.LorryFlatbed"> + <summary> + LorryFlatbed + </summary> + </member> + <member name="F:FineUI.Icon.LorryGo"> + <summary> + LorryGo + </summary> + </member> + <member name="F:FineUI.Icon.LorryLink"> + <summary> + LorryLink + </summary> + </member> + <member name="F:FineUI.Icon.LorryStart"> + <summary> + LorryStart + </summary> + </member> + <member name="F:FineUI.Icon.LorryStop"> + <summary> + LorryStop + </summary> + </member> + <member name="F:FineUI.Icon.MagifierZoomOut"> + <summary> + MagifierZoomOut + </summary> + </member> + <member name="F:FineUI.Icon.Magnifier"> + <summary> + Magnifier + </summary> + </member> + <member name="F:FineUI.Icon.MagnifierZoomIn"> + <summary> + MagnifierZoomIn + </summary> + </member> + <member name="F:FineUI.Icon.Mail"> + <summary> + Mail + </summary> + </member> + <member name="F:FineUI.Icon.Male"> + <summary> + Male + </summary> + </member> + <member name="F:FineUI.Icon.Map"> + <summary> + Map + </summary> + </member> + <member name="F:FineUI.Icon.MapAdd"> + <summary> + MapAdd + </summary> + </member> + <member name="F:FineUI.Icon.MapClipboard"> + <summary> + MapClipboard + </summary> + </member> + <member name="F:FineUI.Icon.MapCursor"> + <summary> + MapCursor + </summary> + </member> + <member name="F:FineUI.Icon.MapDelete"> + <summary> + MapDelete + </summary> + </member> + <member name="F:FineUI.Icon.MapEdit"> + <summary> + MapEdit + </summary> + </member> + <member name="F:FineUI.Icon.MapError"> + <summary> + MapError + </summary> + </member> + <member name="F:FineUI.Icon.MapGo"> + <summary> + MapGo + </summary> + </member> + <member name="F:FineUI.Icon.MapLink"> + <summary> + MapLink + </summary> + </member> + <member name="F:FineUI.Icon.MapMagnify"> + <summary> + MapMagnify + </summary> + </member> + <member name="F:FineUI.Icon.MapStart"> + <summary> + MapStart + </summary> + </member> + <member name="F:FineUI.Icon.MapStop"> + <summary> + MapStop + </summary> + </member> + <member name="F:FineUI.Icon.MedalBronze1"> + <summary> + MedalBronze1 + </summary> + </member> + <member name="F:FineUI.Icon.MedalBronze2"> + <summary> + MedalBronze2 + </summary> + </member> + <member name="F:FineUI.Icon.MedalBronze3"> + <summary> + MedalBronze3 + </summary> + </member> + <member name="F:FineUI.Icon.MedalBronzeAdd"> + <summary> + MedalBronzeAdd + </summary> + </member> + <member name="F:FineUI.Icon.MedalBronzeDelete"> + <summary> + MedalBronzeDelete + </summary> + </member> + <member name="F:FineUI.Icon.MedalGold1"> + <summary> + MedalGold1 + </summary> + </member> + <member name="F:FineUI.Icon.MedalGold2"> + <summary> + MedalGold2 + </summary> + </member> + <member name="F:FineUI.Icon.MedalGold3"> + <summary> + MedalGold3 + </summary> + </member> + <member name="F:FineUI.Icon.MedalGoldAdd"> + <summary> + MedalGoldAdd + </summary> + </member> + <member name="F:FineUI.Icon.MedalGoldDelete"> + <summary> + MedalGoldDelete + </summary> + </member> + <member name="F:FineUI.Icon.MedalSilver1"> + <summary> + MedalSilver1 + </summary> + </member> + <member name="F:FineUI.Icon.MedalSilver2"> + <summary> + MedalSilver2 + </summary> + </member> + <member name="F:FineUI.Icon.MedalSilver3"> + <summary> + MedalSilver3 + </summary> + </member> + <member name="F:FineUI.Icon.MedalSilverAdd"> + <summary> + MedalSilverAdd + </summary> + </member> + <member name="F:FineUI.Icon.MedalSilverDelete"> + <summary> + MedalSilverDelete + </summary> + </member> + <member name="F:FineUI.Icon.Money"> + <summary> + Money + </summary> + </member> + <member name="F:FineUI.Icon.MoneyAdd"> + <summary> + MoneyAdd + </summary> + </member> + <member name="F:FineUI.Icon.MoneyDelete"> + <summary> + MoneyDelete + </summary> + </member> + <member name="F:FineUI.Icon.MoneyDollar"> + <summary> + MoneyDollar + </summary> + </member> + <member name="F:FineUI.Icon.MoneyEuro"> + <summary> + MoneyEuro + </summary> + </member> + <member name="F:FineUI.Icon.MoneyPound"> + <summary> + MoneyPound + </summary> + </member> + <member name="F:FineUI.Icon.MoneyYen"> + <summary> + MoneyYen + </summary> + </member> + <member name="F:FineUI.Icon.Monitor"> + <summary> + Monitor + </summary> + </member> + <member name="F:FineUI.Icon.MonitorAdd"> + <summary> + MonitorAdd + </summary> + </member> + <member name="F:FineUI.Icon.MonitorDelete"> + <summary> + MonitorDelete + </summary> + </member> + <member name="F:FineUI.Icon.MonitorEdit"> + <summary> + MonitorEdit + </summary> + </member> + <member name="F:FineUI.Icon.MonitorError"> + <summary> + MonitorError + </summary> + </member> + <member name="F:FineUI.Icon.MonitorGo"> + <summary> + MonitorGo + </summary> + </member> + <member name="F:FineUI.Icon.MonitorKey"> + <summary> + MonitorKey + </summary> + </member> + <member name="F:FineUI.Icon.MonitorLightning"> + <summary> + MonitorLightning + </summary> + </member> + <member name="F:FineUI.Icon.MonitorLink"> + <summary> + MonitorLink + </summary> + </member> + <member name="F:FineUI.Icon.MoonFull"> + <summary> + MoonFull + </summary> + </member> + <member name="F:FineUI.Icon.Mouse"> + <summary> + Mouse + </summary> + </member> + <member name="F:FineUI.Icon.MouseAdd"> + <summary> + MouseAdd + </summary> + </member> + <member name="F:FineUI.Icon.MouseDelete"> + <summary> + MouseDelete + </summary> + </member> + <member name="F:FineUI.Icon.MouseError"> + <summary> + MouseError + </summary> + </member> + <member name="F:FineUI.Icon.Music"> + <summary> + Music + </summary> + </member> + <member name="F:FineUI.Icon.MusicNote"> + <summary> + MusicNote + </summary> + </member> + <member name="F:FineUI.Icon.Neighbourhood"> + <summary> + Neighbourhood + </summary> + </member> + <member name="F:FineUI.Icon.New"> + <summary> + New + </summary> + </member> + <member name="F:FineUI.Icon.Newspaper"> + <summary> + Newspaper + </summary> + </member> + <member name="F:FineUI.Icon.NewspaperAdd"> + <summary> + NewspaperAdd + </summary> + </member> + <member name="F:FineUI.Icon.NewspaperDelete"> + <summary> + NewspaperDelete + </summary> + </member> + <member name="F:FineUI.Icon.NewspaperGo"> + <summary> + NewspaperGo + </summary> + </member> + <member name="F:FineUI.Icon.NewspaperLink"> + <summary> + NewspaperLink + </summary> + </member> + <member name="F:FineUI.Icon.NewBlue"> + <summary> + NewBlue + </summary> + </member> + <member name="F:FineUI.Icon.NewRed"> + <summary> + NewRed + </summary> + </member> + <member name="F:FineUI.Icon.NextBlue"> + <summary> + NextBlue + </summary> + </member> + <member name="F:FineUI.Icon.NextGreen"> + <summary> + NextGreen + </summary> + </member> + <member name="F:FineUI.Icon.Note"> + <summary> + Note + </summary> + </member> + <member name="F:FineUI.Icon.NoteAdd"> + <summary> + NoteAdd + </summary> + </member> + <member name="F:FineUI.Icon.NoteDelete"> + <summary> + NoteDelete + </summary> + </member> + <member name="F:FineUI.Icon.NoteEdit"> + <summary> + NoteEdit + </summary> + </member> + <member name="F:FineUI.Icon.NoteError"> + <summary> + NoteError + </summary> + </member> + <member name="F:FineUI.Icon.NoteGo"> + <summary> + NoteGo + </summary> + </member> + <member name="F:FineUI.Icon.Outline"> + <summary> + Outline + </summary> + </member> + <member name="F:FineUI.Icon.Overlays"> + <summary> + Overlays + </summary> + </member> + <member name="F:FineUI.Icon.Package"> + <summary> + Package + </summary> + </member> + <member name="F:FineUI.Icon.PackageAdd"> + <summary> + PackageAdd + </summary> + </member> + <member name="F:FineUI.Icon.PackageDelete"> + <summary> + PackageDelete + </summary> + </member> + <member name="F:FineUI.Icon.PackageDown"> + <summary> + PackageDown + </summary> + </member> + <member name="F:FineUI.Icon.PackageGo"> + <summary> + PackageGo + </summary> + </member> + <member name="F:FineUI.Icon.PackageGreen"> + <summary> + PackageGreen + </summary> + </member> + <member name="F:FineUI.Icon.PackageIn"> + <summary> + PackageIn + </summary> + </member> + <member name="F:FineUI.Icon.PackageLink"> + <summary> + PackageLink + </summary> + </member> + <member name="F:FineUI.Icon.PackageSe"> + <summary> + PackageSe + </summary> + </member> + <member name="F:FineUI.Icon.PackageStart"> + <summary> + PackageStart + </summary> + </member> + <member name="F:FineUI.Icon.PackageStop"> + <summary> + PackageStop + </summary> + </member> + <member name="F:FineUI.Icon.PackageWhite"> + <summary> + PackageWhite + </summary> + </member> + <member name="F:FineUI.Icon.Page"> + <summary> + Page + </summary> + </member> + <member name="F:FineUI.Icon.PageAdd"> + <summary> + PageAdd + </summary> + </member> + <member name="F:FineUI.Icon.PageAttach"> + <summary> + PageAttach + </summary> + </member> + <member name="F:FineUI.Icon.PageBack"> + <summary> + PageBack + </summary> + </member> + <member name="F:FineUI.Icon.PageBreak"> + <summary> + PageBreak + </summary> + </member> + <member name="F:FineUI.Icon.PageBreakInsert"> + <summary> + PageBreakInsert + </summary> + </member> + <member name="F:FineUI.Icon.PageCancel"> + <summary> + PageCancel + </summary> + </member> + <member name="F:FineUI.Icon.PageCode"> + <summary> + PageCode + </summary> + </member> + <member name="F:FineUI.Icon.PageCopy"> + <summary> + PageCopy + </summary> + </member> + <member name="F:FineUI.Icon.PageDelete"> + <summary> + PageDelete + </summary> + </member> + <member name="F:FineUI.Icon.PageEdit"> + <summary> + PageEdit + </summary> + </member> + <member name="F:FineUI.Icon.PageError"> + <summary> + PageError + </summary> + </member> + <member name="F:FineUI.Icon.PageExcel"> + <summary> + PageExcel + </summary> + </member> + <member name="F:FineUI.Icon.PageFind"> + <summary> + PageFind + </summary> + </member> + <member name="F:FineUI.Icon.PageForward"> + <summary> + PageForward + </summary> + </member> + <member name="F:FineUI.Icon.PageGear"> + <summary> + PageGear + </summary> + </member> + <member name="F:FineUI.Icon.PageGo"> + <summary> + PageGo + </summary> + </member> + <member name="F:FineUI.Icon.PageGreen"> + <summary> + PageGreen + </summary> + </member> + <member name="F:FineUI.Icon.PageHeaderFooter"> + <summary> + PageHeaderFooter + </summary> + </member> + <member name="F:FineUI.Icon.PageKey"> + <summary> + PageKey + </summary> + </member> + <member name="F:FineUI.Icon.PageLandscape"> + <summary> + PageLandscape + </summary> + </member> + <member name="F:FineUI.Icon.PageLandscapeShot"> + <summary> + PageLandscapeShot + </summary> + </member> + <member name="F:FineUI.Icon.PageLightning"> + <summary> + PageLightning + </summary> + </member> + <member name="F:FineUI.Icon.PageLink"> + <summary> + PageLink + </summary> + </member> + <member name="F:FineUI.Icon.PageMagnify"> + <summary> + PageMagnify + </summary> + </member> + <member name="F:FineUI.Icon.PagePaintbrush"> + <summary> + PagePaintbrush + </summary> + </member> + <member name="F:FineUI.Icon.PagePaste"> + <summary> + PagePaste + </summary> + </member> + <member name="F:FineUI.Icon.PagePortrait"> + <summary> + PagePortrait + </summary> + </member> + <member name="F:FineUI.Icon.PagePortraitShot"> + <summary> + PagePortraitShot + </summary> + </member> + <member name="F:FineUI.Icon.PageRed"> + <summary> + PageRed + </summary> + </member> + <member name="F:FineUI.Icon.PageRefresh"> + <summary> + PageRefresh + </summary> + </member> + <member name="F:FineUI.Icon.PageSave"> + <summary> + PageSave + </summary> + </member> + <member name="F:FineUI.Icon.PageWhite"> + <summary> + PageWhite + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteAcrobat"> + <summary> + PageWhiteAcrobat + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteActionscript"> + <summary> + PageWhiteActionscript + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteAdd"> + <summary> + PageWhiteAdd + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteBreak"> + <summary> + PageWhiteBreak + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteC"> + <summary> + PageWhiteC + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCamera"> + <summary> + PageWhiteCamera + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCd"> + <summary> + PageWhiteCd + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCdr"> + <summary> + PageWhiteCdr + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCode"> + <summary> + PageWhiteCode + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCodeRed"> + <summary> + PageWhiteCodeRed + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteColdfusion"> + <summary> + PageWhiteColdfusion + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCompressed"> + <summary> + PageWhiteCompressed + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteConnect"> + <summary> + PageWhiteConnect + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCopy"> + <summary> + PageWhiteCopy + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCplusplus"> + <summary> + PageWhiteCplusplus + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCsharp"> + <summary> + PageWhiteCsharp + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteCup"> + <summary> + PageWhiteCup + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteDatabase"> + <summary> + PageWhiteDatabase + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteDatabaseYellow"> + <summary> + PageWhiteDatabaseYellow + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteDelete"> + <summary> + PageWhiteDelete + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteDvd"> + <summary> + PageWhiteDvd + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteEdit"> + <summary> + PageWhiteEdit + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteError"> + <summary> + PageWhiteError + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteExcel"> + <summary> + PageWhiteExcel + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteFind"> + <summary> + PageWhiteFind + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteFlash"> + <summary> + PageWhiteFlash + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteFont"> + <summary> + PageWhiteFont + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteFreehand"> + <summary> + PageWhiteFreehand + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteGear"> + <summary> + PageWhiteGear + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteGet"> + <summary> + PageWhiteGet + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteGo"> + <summary> + PageWhiteGo + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteH"> + <summary> + PageWhiteH + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteHorizontal"> + <summary> + PageWhiteHorizontal + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteKey"> + <summary> + PageWhiteKey + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteLightning"> + <summary> + PageWhiteLightning + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteLink"> + <summary> + PageWhiteLink + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteMagnify"> + <summary> + PageWhiteMagnify + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteMedal"> + <summary> + PageWhiteMedal + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteOffice"> + <summary> + PageWhiteOffice + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePaint"> + <summary> + PageWhitePaint + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePaintbrush"> + <summary> + PageWhitePaintbrush + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePaint2"> + <summary> + PageWhitePaint2 + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePaste"> + <summary> + PageWhitePaste + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePasteTable"> + <summary> + PageWhitePasteTable + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePhp"> + <summary> + PageWhitePhp + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePicture"> + <summary> + PageWhitePicture + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePowerpoint"> + <summary> + PageWhitePowerpoint + </summary> + </member> + <member name="F:FineUI.Icon.PageWhitePut"> + <summary> + PageWhitePut + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteRefresh"> + <summary> + PageWhiteRefresh + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteRuby"> + <summary> + PageWhiteRuby + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteSideBySide"> + <summary> + PageWhiteSideBySide + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteStack"> + <summary> + PageWhiteStack + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteStar"> + <summary> + PageWhiteStar + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteSwoosh"> + <summary> + PageWhiteSwoosh + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteText"> + <summary> + PageWhiteText + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteTextWidth"> + <summary> + PageWhiteTextWidth + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteTux"> + <summary> + PageWhiteTux + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteVector"> + <summary> + PageWhiteVector + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteVisualstudio"> + <summary> + PageWhiteVisualstudio + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteWidth"> + <summary> + PageWhiteWidth + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteWord"> + <summary> + PageWhiteWord + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteWorld"> + <summary> + PageWhiteWorld + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteWrench"> + <summary> + PageWhiteWrench + </summary> + </member> + <member name="F:FineUI.Icon.PageWhiteZip"> + <summary> + PageWhiteZip + </summary> + </member> + <member name="F:FineUI.Icon.PageWord"> + <summary> + PageWord + </summary> + </member> + <member name="F:FineUI.Icon.PageWorld"> + <summary> + PageWorld + </summary> + </member> + <member name="F:FineUI.Icon.Paint"> + <summary> + Paint + </summary> + </member> + <member name="F:FineUI.Icon.Paintbrush"> + <summary> + Paintbrush + </summary> + </member> + <member name="F:FineUI.Icon.PaintbrushColor"> + <summary> + PaintbrushColor + </summary> + </member> + <member name="F:FineUI.Icon.Paintcan"> + <summary> + Paintcan + </summary> + </member> + <member name="F:FineUI.Icon.PaintcanRed"> + <summary> + PaintcanRed + </summary> + </member> + <member name="F:FineUI.Icon.PaintCanBrush"> + <summary> + PaintCanBrush + </summary> + </member> + <member name="F:FineUI.Icon.Palette"> + <summary> + Palette + </summary> + </member> + <member name="F:FineUI.Icon.PastePlain"> + <summary> + PastePlain + </summary> + </member> + <member name="F:FineUI.Icon.PasteWord"> + <summary> + PasteWord + </summary> + </member> + <member name="F:FineUI.Icon.PauseBlue"> + <summary> + PauseBlue + </summary> + </member> + <member name="F:FineUI.Icon.PauseGreen"> + <summary> + PauseGreen + </summary> + </member> + <member name="F:FineUI.Icon.PauseRecord"> + <summary> + PauseRecord + </summary> + </member> + <member name="F:FineUI.Icon.Pencil"> + <summary> + Pencil + </summary> + </member> + <member name="F:FineUI.Icon.PencilAdd"> + <summary> + PencilAdd + </summary> + </member> + <member name="F:FineUI.Icon.PencilDelete"> + <summary> + PencilDelete + </summary> + </member> + <member name="F:FineUI.Icon.PencilGo"> + <summary> + PencilGo + </summary> + </member> + <member name="F:FineUI.Icon.Phone"> + <summary> + Phone + </summary> + </member> + <member name="F:FineUI.Icon.PhoneAdd"> + <summary> + PhoneAdd + </summary> + </member> + <member name="F:FineUI.Icon.PhoneDelete"> + <summary> + PhoneDelete + </summary> + </member> + <member name="F:FineUI.Icon.PhoneEdit"> + <summary> + PhoneEdit + </summary> + </member> + <member name="F:FineUI.Icon.PhoneError"> + <summary> + PhoneError + </summary> + </member> + <member name="F:FineUI.Icon.PhoneGo"> + <summary> + PhoneGo + </summary> + </member> + <member name="F:FineUI.Icon.PhoneKey"> + <summary> + PhoneKey + </summary> + </member> + <member name="F:FineUI.Icon.PhoneLink"> + <summary> + PhoneLink + </summary> + </member> + <member name="F:FineUI.Icon.PhoneSound"> + <summary> + PhoneSound + </summary> + </member> + <member name="F:FineUI.Icon.PhoneStart"> + <summary> + PhoneStart + </summary> + </member> + <member name="F:FineUI.Icon.PhoneStop"> + <summary> + PhoneStop + </summary> + </member> + <member name="F:FineUI.Icon.Photo"> + <summary> + Photo + </summary> + </member> + <member name="F:FineUI.Icon.Photos"> + <summary> + Photos + </summary> + </member> + <member name="F:FineUI.Icon.PhotoAdd"> + <summary> + PhotoAdd + </summary> + </member> + <member name="F:FineUI.Icon.PhotoDelete"> + <summary> + PhotoDelete + </summary> + </member> + <member name="F:FineUI.Icon.PhotoEdit"> + <summary> + PhotoEdit + </summary> + </member> + <member name="F:FineUI.Icon.PhotoLink"> + <summary> + PhotoLink + </summary> + </member> + <member name="F:FineUI.Icon.PhotoPaint"> + <summary> + PhotoPaint + </summary> + </member> + <member name="F:FineUI.Icon.Picture"> + <summary> + Picture + </summary> + </member> + <member name="F:FineUI.Icon.Pictures"> + <summary> + Pictures + </summary> + </member> + <member name="F:FineUI.Icon.PicturesThumbs"> + <summary> + PicturesThumbs + </summary> + </member> + <member name="F:FineUI.Icon.PictureAdd"> + <summary> + PictureAdd + </summary> + </member> + <member name="F:FineUI.Icon.PictureClipboard"> + <summary> + PictureClipboard + </summary> + </member> + <member name="F:FineUI.Icon.PictureDelete"> + <summary> + PictureDelete + </summary> + </member> + <member name="F:FineUI.Icon.PictureEdit"> + <summary> + PictureEdit + </summary> + </member> + <member name="F:FineUI.Icon.PictureEmpty"> + <summary> + PictureEmpty + </summary> + </member> + <member name="F:FineUI.Icon.PictureError"> + <summary> + PictureError + </summary> + </member> + <member name="F:FineUI.Icon.PictureGo"> + <summary> + PictureGo + </summary> + </member> + <member name="F:FineUI.Icon.PictureKey"> + <summary> + PictureKey + </summary> + </member> + <member name="F:FineUI.Icon.PictureLink"> + <summary> + PictureLink + </summary> + </member> + <member name="F:FineUI.Icon.PictureSave"> + <summary> + PictureSave + </summary> + </member> + <member name="F:FineUI.Icon.Pilcrow"> + <summary> + Pilcrow + </summary> + </member> + <member name="F:FineUI.Icon.Pill"> + <summary> + Pill + </summary> + </member> + <member name="F:FineUI.Icon.PillAdd"> + <summary> + PillAdd + </summary> + </member> + <member name="F:FineUI.Icon.PillDelete"> + <summary> + PillDelete + </summary> + </member> + <member name="F:FineUI.Icon.PillError"> + <summary> + PillError + </summary> + </member> + <member name="F:FineUI.Icon.PillGo"> + <summary> + PillGo + </summary> + </member> + <member name="F:FineUI.Icon.PlayBlue"> + <summary> + PlayBlue + </summary> + </member> + <member name="F:FineUI.Icon.PlayGreen"> + <summary> + PlayGreen + </summary> + </member> + <member name="F:FineUI.Icon.Plugin"> + <summary> + Plugin + </summary> + </member> + <member name="F:FineUI.Icon.PluginAdd"> + <summary> + PluginAdd + </summary> + </member> + <member name="F:FineUI.Icon.PluginDelete"> + <summary> + PluginDelete + </summary> + </member> + <member name="F:FineUI.Icon.PluginDisabled"> + <summary> + PluginDisabled + </summary> + </member> + <member name="F:FineUI.Icon.PluginEdit"> + <summary> + PluginEdit + </summary> + </member> + <member name="F:FineUI.Icon.PluginError"> + <summary> + PluginError + </summary> + </member> + <member name="F:FineUI.Icon.PluginGo"> + <summary> + PluginGo + </summary> + </member> + <member name="F:FineUI.Icon.PluginKey"> + <summary> + PluginKey + </summary> + </member> + <member name="F:FineUI.Icon.PluginLink"> + <summary> + PluginLink + </summary> + </member> + <member name="F:FineUI.Icon.PreviousGreen"> + <summary> + PreviousGreen + </summary> + </member> + <member name="F:FineUI.Icon.Printer"> + <summary> + Printer + </summary> + </member> + <member name="F:FineUI.Icon.PrinterAdd"> + <summary> + PrinterAdd + </summary> + </member> + <member name="F:FineUI.Icon.PrinterCancel"> + <summary> + PrinterCancel + </summary> + </member> + <member name="F:FineUI.Icon.PrinterColor"> + <summary> + PrinterColor + </summary> + </member> + <member name="F:FineUI.Icon.PrinterConnect"> + <summary> + PrinterConnect + </summary> + </member> + <member name="F:FineUI.Icon.PrinterDelete"> + <summary> + PrinterDelete + </summary> + </member> + <member name="F:FineUI.Icon.PrinterEmpty"> + <summary> + PrinterEmpty + </summary> + </member> + <member name="F:FineUI.Icon.PrinterError"> + <summary> + PrinterError + </summary> + </member> + <member name="F:FineUI.Icon.PrinterGo"> + <summary> + PrinterGo + </summary> + </member> + <member name="F:FineUI.Icon.PrinterKey"> + <summary> + PrinterKey + </summary> + </member> + <member name="F:FineUI.Icon.PrinterMono"> + <summary> + PrinterMono + </summary> + </member> + <member name="F:FineUI.Icon.PrinterStart"> + <summary> + PrinterStart + </summary> + </member> + <member name="F:FineUI.Icon.PrinterStop"> + <summary> + PrinterStop + </summary> + </member> + <member name="F:FineUI.Icon.Rainbow"> + <summary> + Rainbow + </summary> + </member> + <member name="F:FineUI.Icon.RainbowStar"> + <summary> + RainbowStar + </summary> + </member> + <member name="F:FineUI.Icon.RecordBlue"> + <summary> + RecordBlue + </summary> + </member> + <member name="F:FineUI.Icon.RecordGreen"> + <summary> + RecordGreen + </summary> + </member> + <member name="F:FineUI.Icon.RecordRed"> + <summary> + RecordRed + </summary> + </member> + <member name="F:FineUI.Icon.Reload"> + <summary> + Reload + </summary> + </member> + <member name="F:FineUI.Icon.Report"> + <summary> + Report + </summary> + </member> + <member name="F:FineUI.Icon.ReportAdd"> + <summary> + ReportAdd + </summary> + </member> + <member name="F:FineUI.Icon.ReportDelete"> + <summary> + ReportDelete + </summary> + </member> + <member name="F:FineUI.Icon.ReportDisk"> + <summary> + ReportDisk + </summary> + </member> + <member name="F:FineUI.Icon.ReportEdit"> + <summary> + ReportEdit + </summary> + </member> + <member name="F:FineUI.Icon.ReportGo"> + <summary> + ReportGo + </summary> + </member> + <member name="F:FineUI.Icon.ReportKey"> + <summary> + ReportKey + </summary> + </member> + <member name="F:FineUI.Icon.ReportLink"> + <summary> + ReportLink + </summary> + </member> + <member name="F:FineUI.Icon.ReportMagnify"> + <summary> + ReportMagnify + </summary> + </member> + <member name="F:FineUI.Icon.ReportPicture"> + <summary> + ReportPicture + </summary> + </member> + <member name="F:FineUI.Icon.ReportStart"> + <summary> + ReportStart + </summary> + </member> + <member name="F:FineUI.Icon.ReportStop"> + <summary> + ReportStop + </summary> + </member> + <member name="F:FineUI.Icon.ReportUser"> + <summary> + ReportUser + </summary> + </member> + <member name="F:FineUI.Icon.ReportWord"> + <summary> + ReportWord + </summary> + </member> + <member name="F:FineUI.Icon.ResultsetFirst"> + <summary> + ResultsetFirst + </summary> + </member> + <member name="F:FineUI.Icon.ResultsetLast"> + <summary> + ResultsetLast + </summary> + </member> + <member name="F:FineUI.Icon.ResultsetNext"> + <summary> + ResultsetNext + </summary> + </member> + <member name="F:FineUI.Icon.ResultsetPrevious"> + <summary> + ResultsetPrevious + </summary> + </member> + <member name="F:FineUI.Icon.ReverseBlue"> + <summary> + ReverseBlue + </summary> + </member> + <member name="F:FineUI.Icon.ReverseGreen"> + <summary> + ReverseGreen + </summary> + </member> + <member name="F:FineUI.Icon.RewindBlue"> + <summary> + RewindBlue + </summary> + </member> + <member name="F:FineUI.Icon.RewindGreen"> + <summary> + RewindGreen + </summary> + </member> + <member name="F:FineUI.Icon.Rgb"> + <summary> + Rgb + </summary> + </member> + <member name="F:FineUI.Icon.Rosette"> + <summary> + Rosette + </summary> + </member> + <member name="F:FineUI.Icon.RosetteBlue"> + <summary> + RosetteBlue + </summary> + </member> + <member name="F:FineUI.Icon.Rss"> + <summary> + Rss + </summary> + </member> + <member name="F:FineUI.Icon.RssAdd"> + <summary> + RssAdd + </summary> + </member> + <member name="F:FineUI.Icon.RssDelete"> + <summary> + RssDelete + </summary> + </member> + <member name="F:FineUI.Icon.RssError"> + <summary> + RssError + </summary> + </member> + <member name="F:FineUI.Icon.RssGo"> + <summary> + RssGo + </summary> + </member> + <member name="F:FineUI.Icon.RssValid"> + <summary> + RssValid + </summary> + </member> + <member name="F:FineUI.Icon.Ruby"> + <summary> + Ruby + </summary> + </member> + <member name="F:FineUI.Icon.RubyAdd"> + <summary> + RubyAdd + </summary> + </member> + <member name="F:FineUI.Icon.RubyDelete"> + <summary> + RubyDelete + </summary> + </member> + <member name="F:FineUI.Icon.RubyGear"> + <summary> + RubyGear + </summary> + </member> + <member name="F:FineUI.Icon.RubyGet"> + <summary> + RubyGet + </summary> + </member> + <member name="F:FineUI.Icon.RubyGo"> + <summary> + RubyGo + </summary> + </member> + <member name="F:FineUI.Icon.RubyKey"> + <summary> + RubyKey + </summary> + </member> + <member name="F:FineUI.Icon.RubyLink"> + <summary> + RubyLink + </summary> + </member> + <member name="F:FineUI.Icon.RubyPut"> + <summary> + RubyPut + </summary> + </member> + <member name="F:FineUI.Icon.Script"> + <summary> + Script + </summary> + </member> + <member name="F:FineUI.Icon.ScriptAdd"> + <summary> + ScriptAdd + </summary> + </member> + <member name="F:FineUI.Icon.ScriptCode"> + <summary> + ScriptCode + </summary> + </member> + <member name="F:FineUI.Icon.ScriptCodeOriginal"> + <summary> + ScriptCodeOriginal + </summary> + </member> + <member name="F:FineUI.Icon.ScriptCodeRed"> + <summary> + ScriptCodeRed + </summary> + </member> + <member name="F:FineUI.Icon.ScriptDelete"> + <summary> + ScriptDelete + </summary> + </member> + <member name="F:FineUI.Icon.ScriptEdit"> + <summary> + ScriptEdit + </summary> + </member> + <member name="F:FineUI.Icon.ScriptError"> + <summary> + ScriptError + </summary> + </member> + <member name="F:FineUI.Icon.ScriptGear"> + <summary> + ScriptGear + </summary> + </member> + <member name="F:FineUI.Icon.ScriptGo"> + <summary> + ScriptGo + </summary> + </member> + <member name="F:FineUI.Icon.ScriptKey"> + <summary> + ScriptKey + </summary> + </member> + <member name="F:FineUI.Icon.ScriptLightning"> + <summary> + ScriptLightning + </summary> + </member> + <member name="F:FineUI.Icon.ScriptLink"> + <summary> + ScriptLink + </summary> + </member> + <member name="F:FineUI.Icon.ScriptPalette"> + <summary> + ScriptPalette + </summary> + </member> + <member name="F:FineUI.Icon.ScriptSave"> + <summary> + ScriptSave + </summary> + </member> + <member name="F:FineUI.Icon.ScriptStart"> + <summary> + ScriptStart + </summary> + </member> + <member name="F:FineUI.Icon.ScriptStop"> + <summary> + ScriptStop + </summary> + </member> + <member name="F:FineUI.Icon.Seasons"> + <summary> + Seasons + </summary> + </member> + <member name="F:FineUI.Icon.SectionCollapsed"> + <summary> + SectionCollapsed + </summary> + </member> + <member name="F:FineUI.Icon.SectionExpanded"> + <summary> + SectionExpanded + </summary> + </member> + <member name="F:FineUI.Icon.Server"> + <summary> + Server + </summary> + </member> + <member name="F:FineUI.Icon.ServerAdd"> + <summary> + ServerAdd + </summary> + </member> + <member name="F:FineUI.Icon.ServerChart"> + <summary> + ServerChart + </summary> + </member> + <member name="F:FineUI.Icon.ServerCompressed"> + <summary> + ServerCompressed + </summary> + </member> + <member name="F:FineUI.Icon.ServerConnect"> + <summary> + ServerConnect + </summary> + </member> + <member name="F:FineUI.Icon.ServerDatabase"> + <summary> + ServerDatabase + </summary> + </member> + <member name="F:FineUI.Icon.ServerDelete"> + <summary> + ServerDelete + </summary> + </member> + <member name="F:FineUI.Icon.ServerEdit"> + <summary> + ServerEdit + </summary> + </member> + <member name="F:FineUI.Icon.ServerError"> + <summary> + ServerError + </summary> + </member> + <member name="F:FineUI.Icon.ServerGo"> + <summary> + ServerGo + </summary> + </member> + <member name="F:FineUI.Icon.ServerKey"> + <summary> + ServerKey + </summary> + </member> + <member name="F:FineUI.Icon.ServerLightning"> + <summary> + ServerLightning + </summary> + </member> + <member name="F:FineUI.Icon.ServerLink"> + <summary> + ServerLink + </summary> + </member> + <member name="F:FineUI.Icon.ServerStart"> + <summary> + ServerStart + </summary> + </member> + <member name="F:FineUI.Icon.ServerStop"> + <summary> + ServerStop + </summary> + </member> + <member name="F:FineUI.Icon.ServerUncompressed"> + <summary> + ServerUncompressed + </summary> + </member> + <member name="F:FineUI.Icon.ServerWrench"> + <summary> + ServerWrench + </summary> + </member> + <member name="F:FineUI.Icon.Shading"> + <summary> + Shading + </summary> + </member> + <member name="F:FineUI.Icon.ShapesMany"> + <summary> + ShapesMany + </summary> + </member> + <member name="F:FineUI.Icon.ShapesManySelect"> + <summary> + ShapesManySelect + </summary> + </member> + <member name="F:FineUI.Icon.Shape3d"> + <summary> + Shape3d + </summary> + </member> + <member name="F:FineUI.Icon.ShapeAlignBottom"> + <summary> + ShapeAlignBottom + </summary> + </member> + <member name="F:FineUI.Icon.ShapeAlignCenter"> + <summary> + ShapeAlignCenter + </summary> + </member> + <member name="F:FineUI.Icon.ShapeAlignLeft"> + <summary> + ShapeAlignLeft + </summary> + </member> + <member name="F:FineUI.Icon.ShapeAlignMiddle"> + <summary> + ShapeAlignMiddle + </summary> + </member> + <member name="F:FineUI.Icon.ShapeAlignRight"> + <summary> + ShapeAlignRight + </summary> + </member> + <member name="F:FineUI.Icon.ShapeAlignTop"> + <summary> + ShapeAlignTop + </summary> + </member> + <member name="F:FineUI.Icon.ShapeFlipHorizontal"> + <summary> + ShapeFlipHorizontal + </summary> + </member> + <member name="F:FineUI.Icon.ShapeFlipVertical"> + <summary> + ShapeFlipVertical + </summary> + </member> + <member name="F:FineUI.Icon.ShapeGroup"> + <summary> + ShapeGroup + </summary> + </member> + <member name="F:FineUI.Icon.ShapeHandles"> + <summary> + ShapeHandles + </summary> + </member> + <member name="F:FineUI.Icon.ShapeMoveBack"> + <summary> + ShapeMoveBack + </summary> + </member> + <member name="F:FineUI.Icon.ShapeMoveBackwards"> + <summary> + ShapeMoveBackwards + </summary> + </member> + <member name="F:FineUI.Icon.ShapeMoveForwards"> + <summary> + ShapeMoveForwards + </summary> + </member> + <member name="F:FineUI.Icon.ShapeMoveFront"> + <summary> + ShapeMoveFront + </summary> + </member> + <member name="F:FineUI.Icon.ShapeRotateAnticlockwise"> + <summary> + ShapeRotateAnticlockwise + </summary> + </member> + <member name="F:FineUI.Icon.ShapeRotateClockwise"> + <summary> + ShapeRotateClockwise + </summary> + </member> + <member name="F:FineUI.Icon.ShapeShadeA"> + <summary> + ShapeShadeA + </summary> + </member> + <member name="F:FineUI.Icon.ShapeShadeB"> + <summary> + ShapeShadeB + </summary> + </member> + <member name="F:FineUI.Icon.ShapeShadeC"> + <summary> + ShapeShadeC + </summary> + </member> + <member name="F:FineUI.Icon.ShapeShadow"> + <summary> + ShapeShadow + </summary> + </member> + <member name="F:FineUI.Icon.ShapeShadowToggle"> + <summary> + ShapeShadowToggle + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquare"> + <summary> + ShapeSquare + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareAdd"> + <summary> + ShapeSquareAdd + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareDelete"> + <summary> + ShapeSquareDelete + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareEdit"> + <summary> + ShapeSquareEdit + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareError"> + <summary> + ShapeSquareError + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareGo"> + <summary> + ShapeSquareGo + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareKey"> + <summary> + ShapeSquareKey + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareLink"> + <summary> + ShapeSquareLink + </summary> + </member> + <member name="F:FineUI.Icon.ShapeSquareSelect"> + <summary> + ShapeSquareSelect + </summary> + </member> + <member name="F:FineUI.Icon.ShapeUngroup"> + <summary> + ShapeUngroup + </summary> + </member> + <member name="F:FineUI.Icon.Share"> + <summary> + Share + </summary> + </member> + <member name="F:FineUI.Icon.Shield"> + <summary> + Shield + </summary> + </member> + <member name="F:FineUI.Icon.ShieldAdd"> + <summary> + ShieldAdd + </summary> + </member> + <member name="F:FineUI.Icon.ShieldDelete"> + <summary> + ShieldDelete + </summary> + </member> + <member name="F:FineUI.Icon.ShieldError"> + <summary> + ShieldError + </summary> + </member> + <member name="F:FineUI.Icon.ShieldGo"> + <summary> + ShieldGo + </summary> + </member> + <member name="F:FineUI.Icon.ShieldRainbow"> + <summary> + ShieldRainbow + </summary> + </member> + <member name="F:FineUI.Icon.ShieldSilver"> + <summary> + ShieldSilver + </summary> + </member> + <member name="F:FineUI.Icon.ShieldStart"> + <summary> + ShieldStart + </summary> + </member> + <member name="F:FineUI.Icon.ShieldStop"> + <summary> + ShieldStop + </summary> + </member> + <member name="F:FineUI.Icon.Sitemap"> + <summary> + Sitemap + </summary> + </member> + <member name="F:FineUI.Icon.SitemapColor"> + <summary> + SitemapColor + </summary> + </member> + <member name="F:FineUI.Icon.Smartphone"> + <summary> + Smartphone + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneAdd"> + <summary> + SmartphoneAdd + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneConnect"> + <summary> + SmartphoneConnect + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneDelete"> + <summary> + SmartphoneDelete + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneDisk"> + <summary> + SmartphoneDisk + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneEdit"> + <summary> + SmartphoneEdit + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneError"> + <summary> + SmartphoneError + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneGo"> + <summary> + SmartphoneGo + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneKey"> + <summary> + SmartphoneKey + </summary> + </member> + <member name="F:FineUI.Icon.SmartphoneWrench"> + <summary> + SmartphoneWrench + </summary> + </member> + <member name="F:FineUI.Icon.SortAscending"> + <summary> + SortAscending + </summary> + </member> + <member name="F:FineUI.Icon.SortDescending"> + <summary> + SortDescending + </summary> + </member> + <member name="F:FineUI.Icon.Sound"> + <summary> + Sound + </summary> + </member> + <member name="F:FineUI.Icon.SoundAdd"> + <summary> + SoundAdd + </summary> + </member> + <member name="F:FineUI.Icon.SoundDelete"> + <summary> + SoundDelete + </summary> + </member> + <member name="F:FineUI.Icon.SoundHigh"> + <summary> + SoundHigh + </summary> + </member> + <member name="F:FineUI.Icon.SoundIn"> + <summary> + SoundIn + </summary> + </member> + <member name="F:FineUI.Icon.SoundLow"> + <summary> + SoundLow + </summary> + </member> + <member name="F:FineUI.Icon.SoundMute"> + <summary> + SoundMute + </summary> + </member> + <member name="F:FineUI.Icon.SoundNone"> + <summary> + SoundNone + </summary> + </member> + <member name="F:FineUI.Icon.SoundOut"> + <summary> + SoundOut + </summary> + </member> + <member name="F:FineUI.Icon.Spellcheck"> + <summary> + Spellcheck + </summary> + </member> + <member name="F:FineUI.Icon.Sport8ball"> + <summary> + Sport8ball + </summary> + </member> + <member name="F:FineUI.Icon.SportBasketball"> + <summary> + SportBasketball + </summary> + </member> + <member name="F:FineUI.Icon.SportFootball"> + <summary> + SportFootball + </summary> + </member> + <member name="F:FineUI.Icon.SportGolf"> + <summary> + SportGolf + </summary> + </member> + <member name="F:FineUI.Icon.SportGolfPractice"> + <summary> + SportGolfPractice + </summary> + </member> + <member name="F:FineUI.Icon.SportRaquet"> + <summary> + SportRaquet + </summary> + </member> + <member name="F:FineUI.Icon.SportShuttlecock"> + <summary> + SportShuttlecock + </summary> + </member> + <member name="F:FineUI.Icon.SportSoccer"> + <summary> + SportSoccer + </summary> + </member> + <member name="F:FineUI.Icon.SportTennis"> + <summary> + SportTennis + </summary> + </member> + <member name="F:FineUI.Icon.Star"> + <summary> + Star + </summary> + </member> + <member name="F:FineUI.Icon.StarBronze"> + <summary> + StarBronze + </summary> + </member> + <member name="F:FineUI.Icon.StarBronzeHalfGrey"> + <summary> + StarBronzeHalfGrey + </summary> + </member> + <member name="F:FineUI.Icon.StarGold"> + <summary> + StarGold + </summary> + </member> + <member name="F:FineUI.Icon.StarGoldHalfGrey"> + <summary> + StarGoldHalfGrey + </summary> + </member> + <member name="F:FineUI.Icon.StarGoldHalfSilver"> + <summary> + StarGoldHalfSilver + </summary> + </member> + <member name="F:FineUI.Icon.StarGrey"> + <summary> + StarGrey + </summary> + </member> + <member name="F:FineUI.Icon.StarHalfGrey"> + <summary> + StarHalfGrey + </summary> + </member> + <member name="F:FineUI.Icon.StarSilver"> + <summary> + StarSilver + </summary> + </member> + <member name="F:FineUI.Icon.StatusAway"> + <summary> + StatusAway + </summary> + </member> + <member name="F:FineUI.Icon.StatusBeRightBack"> + <summary> + StatusBeRightBack + </summary> + </member> + <member name="F:FineUI.Icon.StatusBusy"> + <summary> + StatusBusy + </summary> + </member> + <member name="F:FineUI.Icon.StatusInvisible"> + <summary> + StatusInvisible + </summary> + </member> + <member name="F:FineUI.Icon.StatusOffline"> + <summary> + StatusOffline + </summary> + </member> + <member name="F:FineUI.Icon.StatusOnline"> + <summary> + StatusOnline + </summary> + </member> + <member name="F:FineUI.Icon.Stop"> + <summary> + Stop + </summary> + </member> + <member name="F:FineUI.Icon.StopBlue"> + <summary> + StopBlue + </summary> + </member> + <member name="F:FineUI.Icon.StopGreen"> + <summary> + StopGreen + </summary> + </member> + <member name="F:FineUI.Icon.StopRed"> + <summary> + StopRed + </summary> + </member> + <member name="F:FineUI.Icon.Style"> + <summary> + Style + </summary> + </member> + <member name="F:FineUI.Icon.StyleAdd"> + <summary> + StyleAdd + </summary> + </member> + <member name="F:FineUI.Icon.StyleDelete"> + <summary> + StyleDelete + </summary> + </member> + <member name="F:FineUI.Icon.StyleEdit"> + <summary> + StyleEdit + </summary> + </member> + <member name="F:FineUI.Icon.StyleGo"> + <summary> + StyleGo + </summary> + </member> + <member name="F:FineUI.Icon.Sum"> + <summary> + Sum + </summary> + </member> + <member name="F:FineUI.Icon.Tab"> + <summary> + Tab + </summary> + </member> + <member name="F:FineUI.Icon.Table"> + <summary> + Table + </summary> + </member> + <member name="F:FineUI.Icon.TableAdd"> + <summary> + TableAdd + </summary> + </member> + <member name="F:FineUI.Icon.TableCell"> + <summary> + TableCell + </summary> + </member> + <member name="F:FineUI.Icon.TableColumn"> + <summary> + TableColumn + </summary> + </member> + <member name="F:FineUI.Icon.TableColumnAdd"> + <summary> + TableColumnAdd + </summary> + </member> + <member name="F:FineUI.Icon.TableColumnDelete"> + <summary> + TableColumnDelete + </summary> + </member> + <member name="F:FineUI.Icon.TableConnect"> + <summary> + TableConnect + </summary> + </member> + <member name="F:FineUI.Icon.TableDelete"> + <summary> + TableDelete + </summary> + </member> + <member name="F:FineUI.Icon.TableEdit"> + <summary> + TableEdit + </summary> + </member> + <member name="F:FineUI.Icon.TableError"> + <summary> + TableError + </summary> + </member> + <member name="F:FineUI.Icon.TableGear"> + <summary> + TableGear + </summary> + </member> + <member name="F:FineUI.Icon.TableGo"> + <summary> + TableGo + </summary> + </member> + <member name="F:FineUI.Icon.TableKey"> + <summary> + TableKey + </summary> + </member> + <member name="F:FineUI.Icon.TableLightning"> + <summary> + TableLightning + </summary> + </member> + <member name="F:FineUI.Icon.TableLink"> + <summary> + TableLink + </summary> + </member> + <member name="F:FineUI.Icon.TableMultiple"> + <summary> + TableMultiple + </summary> + </member> + <member name="F:FineUI.Icon.TableRefresh"> + <summary> + TableRefresh + </summary> + </member> + <member name="F:FineUI.Icon.TableRelationship"> + <summary> + TableRelationship + </summary> + </member> + <member name="F:FineUI.Icon.TableRow"> + <summary> + TableRow + </summary> + </member> + <member name="F:FineUI.Icon.TableRowDelete"> + <summary> + TableRowDelete + </summary> + </member> + <member name="F:FineUI.Icon.TableRowInsert"> + <summary> + TableRowInsert + </summary> + </member> + <member name="F:FineUI.Icon.TableSave"> + <summary> + TableSave + </summary> + </member> + <member name="F:FineUI.Icon.TableSort"> + <summary> + TableSort + </summary> + </member> + <member name="F:FineUI.Icon.TabAdd"> + <summary> + TabAdd + </summary> + </member> + <member name="F:FineUI.Icon.TabBlue"> + <summary> + TabBlue + </summary> + </member> + <member name="F:FineUI.Icon.TabDelete"> + <summary> + TabDelete + </summary> + </member> + <member name="F:FineUI.Icon.TabEdit"> + <summary> + TabEdit + </summary> + </member> + <member name="F:FineUI.Icon.TabGo"> + <summary> + TabGo + </summary> + </member> + <member name="F:FineUI.Icon.TabGreen"> + <summary> + TabGreen + </summary> + </member> + <member name="F:FineUI.Icon.TabRed"> + <summary> + TabRed + </summary> + </member> + <member name="F:FineUI.Icon.Tag"> + <summary> + Tag + </summary> + </member> + <member name="F:FineUI.Icon.TagsGrey"> + <summary> + TagsGrey + </summary> + </member> + <member name="F:FineUI.Icon.TagsRed"> + <summary> + TagsRed + </summary> + </member> + <member name="F:FineUI.Icon.TagBlue"> + <summary> + TagBlue + </summary> + </member> + <member name="F:FineUI.Icon.TagBlueAdd"> + <summary> + TagBlueAdd + </summary> + </member> + <member name="F:FineUI.Icon.TagBlueDelete"> + <summary> + TagBlueDelete + </summary> + </member> + <member name="F:FineUI.Icon.TagBlueEdit"> + <summary> + TagBlueEdit + </summary> + </member> + <member name="F:FineUI.Icon.TagGreen"> + <summary> + TagGreen + </summary> + </member> + <member name="F:FineUI.Icon.TagOrange"> + <summary> + TagOrange + </summary> + </member> + <member name="F:FineUI.Icon.TagPink"> + <summary> + TagPink + </summary> + </member> + <member name="F:FineUI.Icon.TagPurple"> + <summary> + TagPurple + </summary> + </member> + <member name="F:FineUI.Icon.TagRed"> + <summary> + TagRed + </summary> + </member> + <member name="F:FineUI.Icon.TagYellow"> + <summary> + TagYellow + </summary> + </member> + <member name="F:FineUI.Icon.Telephone"> + <summary> + Telephone + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneAdd"> + <summary> + TelephoneAdd + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneDelete"> + <summary> + TelephoneDelete + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneEdit"> + <summary> + TelephoneEdit + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneError"> + <summary> + TelephoneError + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneGo"> + <summary> + TelephoneGo + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneKey"> + <summary> + TelephoneKey + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneLink"> + <summary> + TelephoneLink + </summary> + </member> + <member name="F:FineUI.Icon.TelephoneRed"> + <summary> + TelephoneRed + </summary> + </member> + <member name="F:FineUI.Icon.Television"> + <summary> + Television + </summary> + </member> + <member name="F:FineUI.Icon.TelevisionAdd"> + <summary> + TelevisionAdd + </summary> + </member> + <member name="F:FineUI.Icon.TelevisionDelete"> + <summary> + TelevisionDelete + </summary> + </member> + <member name="F:FineUI.Icon.TelevisionIn"> + <summary> + TelevisionIn + </summary> + </member> + <member name="F:FineUI.Icon.TelevisionOff"> + <summary> + TelevisionOff + </summary> + </member> + <member name="F:FineUI.Icon.TelevisionOut"> + <summary> + TelevisionOut + </summary> + </member> + <member name="F:FineUI.Icon.TelevisionStar"> + <summary> + TelevisionStar + </summary> + </member> + <member name="F:FineUI.Icon.Textfield"> + <summary> + Textfield + </summary> + </member> + <member name="F:FineUI.Icon.TextfieldAdd"> + <summary> + TextfieldAdd + </summary> + </member> + <member name="F:FineUI.Icon.TextfieldDelete"> + <summary> + TextfieldDelete + </summary> + </member> + <member name="F:FineUI.Icon.TextfieldKey"> + <summary> + TextfieldKey + </summary> + </member> + <member name="F:FineUI.Icon.TextfieldRename"> + <summary> + TextfieldRename + </summary> + </member> + <member name="F:FineUI.Icon.TextAb"> + <summary> + TextAb + </summary> + </member> + <member name="F:FineUI.Icon.TextAlignCenter"> + <summary> + TextAlignCenter + </summary> + </member> + <member name="F:FineUI.Icon.TextAlignJustify"> + <summary> + TextAlignJustify + </summary> + </member> + <member name="F:FineUI.Icon.TextAlignLeft"> + <summary> + TextAlignLeft + </summary> + </member> + <member name="F:FineUI.Icon.TextAlignRight"> + <summary> + TextAlignRight + </summary> + </member> + <member name="F:FineUI.Icon.TextAllcaps"> + <summary> + TextAllcaps + </summary> + </member> + <member name="F:FineUI.Icon.TextBold"> + <summary> + TextBold + </summary> + </member> + <member name="F:FineUI.Icon.TextColumns"> + <summary> + TextColumns + </summary> + </member> + <member name="F:FineUI.Icon.TextComplete"> + <summary> + TextComplete + </summary> + </member> + <member name="F:FineUI.Icon.TextDirection"> + <summary> + TextDirection + </summary> + </member> + <member name="F:FineUI.Icon.TextDoubleUnderline"> + <summary> + TextDoubleUnderline + </summary> + </member> + <member name="F:FineUI.Icon.TextDropcaps"> + <summary> + TextDropcaps + </summary> + </member> + <member name="F:FineUI.Icon.TextFit"> + <summary> + TextFit + </summary> + </member> + <member name="F:FineUI.Icon.TextFlip"> + <summary> + TextFlip + </summary> + </member> + <member name="F:FineUI.Icon.TextFontDefault"> + <summary> + TextFontDefault + </summary> + </member> + <member name="F:FineUI.Icon.TextHeading1"> + <summary> + TextHeading1 + </summary> + </member> + <member name="F:FineUI.Icon.TextHeading2"> + <summary> + TextHeading2 + </summary> + </member> + <member name="F:FineUI.Icon.TextHeading3"> + <summary> + TextHeading3 + </summary> + </member> + <member name="F:FineUI.Icon.TextHeading4"> + <summary> + TextHeading4 + </summary> + </member> + <member name="F:FineUI.Icon.TextHeading5"> + <summary> + TextHeading5 + </summary> + </member> + <member name="F:FineUI.Icon.TextHeading6"> + <summary> + TextHeading6 + </summary> + </member> + <member name="F:FineUI.Icon.TextHorizontalrule"> + <summary> + TextHorizontalrule + </summary> + </member> + <member name="F:FineUI.Icon.TextIndent"> + <summary> + TextIndent + </summary> + </member> + <member name="F:FineUI.Icon.TextIndentRemove"> + <summary> + TextIndentRemove + </summary> + </member> + <member name="F:FineUI.Icon.TextInverse"> + <summary> + TextInverse + </summary> + </member> + <member name="F:FineUI.Icon.TextItalic"> + <summary> + TextItalic + </summary> + </member> + <member name="F:FineUI.Icon.TextKerning"> + <summary> + TextKerning + </summary> + </member> + <member name="F:FineUI.Icon.TextLeftToRight"> + <summary> + TextLeftToRight + </summary> + </member> + <member name="F:FineUI.Icon.TextLetterspacing"> + <summary> + TextLetterspacing + </summary> + </member> + <member name="F:FineUI.Icon.TextLetterOmega"> + <summary> + TextLetterOmega + </summary> + </member> + <member name="F:FineUI.Icon.TextLinespacing"> + <summary> + TextLinespacing + </summary> + </member> + <member name="F:FineUI.Icon.TextListBullets"> + <summary> + TextListBullets + </summary> + </member> + <member name="F:FineUI.Icon.TextListNumbers"> + <summary> + TextListNumbers + </summary> + </member> + <member name="F:FineUI.Icon.TextLowercase"> + <summary> + TextLowercase + </summary> + </member> + <member name="F:FineUI.Icon.TextLowercaseA"> + <summary> + TextLowercaseA + </summary> + </member> + <member name="F:FineUI.Icon.TextMirror"> + <summary> + TextMirror + </summary> + </member> + <member name="F:FineUI.Icon.TextPaddingBottom"> + <summary> + TextPaddingBottom + </summary> + </member> + <member name="F:FineUI.Icon.TextPaddingLeft"> + <summary> + TextPaddingLeft + </summary> + </member> + <member name="F:FineUI.Icon.TextPaddingRight"> + <summary> + TextPaddingRight + </summary> + </member> + <member name="F:FineUI.Icon.TextPaddingTop"> + <summary> + TextPaddingTop + </summary> + </member> + <member name="F:FineUI.Icon.TextReplace"> + <summary> + TextReplace + </summary> + </member> + <member name="F:FineUI.Icon.TextRightToLeft"> + <summary> + TextRightToLeft + </summary> + </member> + <member name="F:FineUI.Icon.TextRotate0"> + <summary> + TextRotate0 + </summary> + </member> + <member name="F:FineUI.Icon.TextRotate180"> + <summary> + TextRotate180 + </summary> + </member> + <member name="F:FineUI.Icon.TextRotate270"> + <summary> + TextRotate270 + </summary> + </member> + <member name="F:FineUI.Icon.TextRotate90"> + <summary> + TextRotate90 + </summary> + </member> + <member name="F:FineUI.Icon.TextRuler"> + <summary> + TextRuler + </summary> + </member> + <member name="F:FineUI.Icon.TextShading"> + <summary> + TextShading + </summary> + </member> + <member name="F:FineUI.Icon.TextSignature"> + <summary> + TextSignature + </summary> + </member> + <member name="F:FineUI.Icon.TextSmallcaps"> + <summary> + TextSmallcaps + </summary> + </member> + <member name="F:FineUI.Icon.TextSpelling"> + <summary> + TextSpelling + </summary> + </member> + <member name="F:FineUI.Icon.TextStrikethrough"> + <summary> + TextStrikethrough + </summary> + </member> + <member name="F:FineUI.Icon.TextSubscript"> + <summary> + TextSubscript + </summary> + </member> + <member name="F:FineUI.Icon.TextSuperscript"> + <summary> + TextSuperscript + </summary> + </member> + <member name="F:FineUI.Icon.TextTab"> + <summary> + TextTab + </summary> + </member> + <member name="F:FineUI.Icon.TextUnderline"> + <summary> + TextUnderline + </summary> + </member> + <member name="F:FineUI.Icon.TextUppercase"> + <summary> + TextUppercase + </summary> + </member> + <member name="F:FineUI.Icon.Theme"> + <summary> + Theme + </summary> + </member> + <member name="F:FineUI.Icon.ThumbDown"> + <summary> + ThumbDown + </summary> + </member> + <member name="F:FineUI.Icon.ThumbUp"> + <summary> + ThumbUp + </summary> + </member> + <member name="F:FineUI.Icon.Tick"> + <summary> + Tick + </summary> + </member> + <member name="F:FineUI.Icon.Time"> + <summary> + Time + </summary> + </member> + <member name="F:FineUI.Icon.TimelineMarker"> + <summary> + TimelineMarker + </summary> + </member> + <member name="F:FineUI.Icon.TimeAdd"> + <summary> + TimeAdd + </summary> + </member> + <member name="F:FineUI.Icon.TimeDelete"> + <summary> + TimeDelete + </summary> + </member> + <member name="F:FineUI.Icon.TimeGo"> + <summary> + TimeGo + </summary> + </member> + <member name="F:FineUI.Icon.TimeGreen"> + <summary> + TimeGreen + </summary> + </member> + <member name="F:FineUI.Icon.TimeRed"> + <summary> + TimeRed + </summary> + </member> + <member name="F:FineUI.Icon.Transmit"> + <summary> + Transmit + </summary> + </member> + <member name="F:FineUI.Icon.TransmitAdd"> + <summary> + TransmitAdd + </summary> + </member> + <member name="F:FineUI.Icon.TransmitBlue"> + <summary> + TransmitBlue + </summary> + </member> + <member name="F:FineUI.Icon.TransmitDelete"> + <summary> + TransmitDelete + </summary> + </member> + <member name="F:FineUI.Icon.TransmitEdit"> + <summary> + TransmitEdit + </summary> + </member> + <member name="F:FineUI.Icon.TransmitError"> + <summary> + TransmitError + </summary> + </member> + <member name="F:FineUI.Icon.TransmitGo"> + <summary> + TransmitGo + </summary> + </member> + <member name="F:FineUI.Icon.TransmitRed"> + <summary> + TransmitRed + </summary> + </member> + <member name="F:FineUI.Icon.Tux"> + <summary> + Tux + </summary> + </member> + <member name="F:FineUI.Icon.User"> + <summary> + User + </summary> + </member> + <member name="F:FineUI.Icon.UserAdd"> + <summary> + UserAdd + </summary> + </member> + <member name="F:FineUI.Icon.UserAlert"> + <summary> + UserAlert + </summary> + </member> + <member name="F:FineUI.Icon.UserB"> + <summary> + UserB + </summary> + </member> + <member name="F:FineUI.Icon.UserBrown"> + <summary> + UserBrown + </summary> + </member> + <member name="F:FineUI.Icon.UserComment"> + <summary> + UserComment + </summary> + </member> + <member name="F:FineUI.Icon.UserCross"> + <summary> + UserCross + </summary> + </member> + <member name="F:FineUI.Icon.UserDelete"> + <summary> + UserDelete + </summary> + </member> + <member name="F:FineUI.Icon.UserEarth"> + <summary> + UserEarth + </summary> + </member> + <member name="F:FineUI.Icon.UserEdit"> + <summary> + UserEdit + </summary> + </member> + <member name="F:FineUI.Icon.UserFemale"> + <summary> + UserFemale + </summary> + </member> + <member name="F:FineUI.Icon.UserGo"> + <summary> + UserGo + </summary> + </member> + <member name="F:FineUI.Icon.UserGray"> + <summary> + UserGray + </summary> + </member> + <member name="F:FineUI.Icon.UserGrayCool"> + <summary> + UserGrayCool + </summary> + </member> + <member name="F:FineUI.Icon.UserGreen"> + <summary> + UserGreen + </summary> + </member> + <member name="F:FineUI.Icon.UserHome"> + <summary> + UserHome + </summary> + </member> + <member name="F:FineUI.Icon.UserKey"> + <summary> + UserKey + </summary> + </member> + <member name="F:FineUI.Icon.UserMagnify"> + <summary> + UserMagnify + </summary> + </member> + <member name="F:FineUI.Icon.UserMature"> + <summary> + UserMature + </summary> + </member> + <member name="F:FineUI.Icon.UserOrange"> + <summary> + UserOrange + </summary> + </member> + <member name="F:FineUI.Icon.UserRed"> + <summary> + UserRed + </summary> + </member> + <member name="F:FineUI.Icon.UserStar"> + <summary> + UserStar + </summary> + </member> + <member name="F:FineUI.Icon.UserSuit"> + <summary> + UserSuit + </summary> + </member> + <member name="F:FineUI.Icon.UserSuitBlack"> + <summary> + UserSuitBlack + </summary> + </member> + <member name="F:FineUI.Icon.UserTick"> + <summary> + UserTick + </summary> + </member> + <member name="F:FineUI.Icon.Vcard"> + <summary> + Vcard + </summary> + </member> + <member name="F:FineUI.Icon.VcardAdd"> + <summary> + VcardAdd + </summary> + </member> + <member name="F:FineUI.Icon.VcardDelete"> + <summary> + VcardDelete + </summary> + </member> + <member name="F:FineUI.Icon.VcardEdit"> + <summary> + VcardEdit + </summary> + </member> + <member name="F:FineUI.Icon.VcardKey"> + <summary> + VcardKey + </summary> + </member> + <member name="F:FineUI.Icon.Vector"> + <summary> + Vector + </summary> + </member> + <member name="F:FineUI.Icon.VectorAdd"> + <summary> + VectorAdd + </summary> + </member> + <member name="F:FineUI.Icon.VectorDelete"> + <summary> + VectorDelete + </summary> + </member> + <member name="F:FineUI.Icon.VectorKey"> + <summary> + VectorKey + </summary> + </member> + <member name="F:FineUI.Icon.Wand"> + <summary> + Wand + </summary> + </member> + <member name="F:FineUI.Icon.WeatherCloud"> + <summary> + WeatherCloud + </summary> + </member> + <member name="F:FineUI.Icon.WeatherClouds"> + <summary> + WeatherClouds + </summary> + </member> + <member name="F:FineUI.Icon.WeatherCloudy"> + <summary> + WeatherCloudy + </summary> + </member> + <member name="F:FineUI.Icon.WeatherCloudyRain"> + <summary> + WeatherCloudyRain + </summary> + </member> + <member name="F:FineUI.Icon.WeatherLightning"> + <summary> + WeatherLightning + </summary> + </member> + <member name="F:FineUI.Icon.WeatherRain"> + <summary> + WeatherRain + </summary> + </member> + <member name="F:FineUI.Icon.WeatherSnow"> + <summary> + WeatherSnow + </summary> + </member> + <member name="F:FineUI.Icon.WeatherSun"> + <summary> + WeatherSun + </summary> + </member> + <member name="F:FineUI.Icon.Webcam"> + <summary> + Webcam + </summary> + </member> + <member name="F:FineUI.Icon.WebcamAdd"> + <summary> + WebcamAdd + </summary> + </member> + <member name="F:FineUI.Icon.WebcamConnect"> + <summary> + WebcamConnect + </summary> + </member> + <member name="F:FineUI.Icon.WebcamDelete"> + <summary> + WebcamDelete + </summary> + </member> + <member name="F:FineUI.Icon.WebcamError"> + <summary> + WebcamError + </summary> + </member> + <member name="F:FineUI.Icon.WebcamStart"> + <summary> + WebcamStart + </summary> + </member> + <member name="F:FineUI.Icon.WebcamStop"> + <summary> + WebcamStop + </summary> + </member> + <member name="F:FineUI.Icon.World"> + <summary> + World + </summary> + </member> + <member name="F:FineUI.Icon.WorldAdd"> + <summary> + WorldAdd + </summary> + </member> + <member name="F:FineUI.Icon.WorldConnect"> + <summary> + WorldConnect + </summary> + </member> + <member name="F:FineUI.Icon.WorldDawn"> + <summary> + WorldDawn + </summary> + </member> + <member name="F:FineUI.Icon.WorldDelete"> + <summary> + WorldDelete + </summary> + </member> + <member name="F:FineUI.Icon.WorldEdit"> + <summary> + WorldEdit + </summary> + </member> + <member name="F:FineUI.Icon.WorldGo"> + <summary> + WorldGo + </summary> + </member> + <member name="F:FineUI.Icon.WorldKey"> + <summary> + WorldKey + </summary> + </member> + <member name="F:FineUI.Icon.WorldLink"> + <summary> + WorldLink + </summary> + </member> + <member name="F:FineUI.Icon.WorldNight"> + <summary> + WorldNight + </summary> + </member> + <member name="F:FineUI.Icon.WorldOrbit"> + <summary> + WorldOrbit + </summary> + </member> + <member name="F:FineUI.Icon.Wrench"> + <summary> + Wrench + </summary> + </member> + <member name="F:FineUI.Icon.WrenchOrange"> + <summary> + WrenchOrange + </summary> + </member> + <member name="F:FineUI.Icon.Xhtml"> + <summary> + Xhtml + </summary> + </member> + <member name="F:FineUI.Icon.XhtmlAdd"> + <summary> + XhtmlAdd + </summary> + </member> + <member name="F:FineUI.Icon.XhtmlDelete"> + <summary> + XhtmlDelete + </summary> + </member> + <member name="F:FineUI.Icon.XhtmlError"> + <summary> + XhtmlError + </summary> + </member> + <member name="F:FineUI.Icon.XhtmlGo"> + <summary> + XhtmlGo + </summary> + </member> + <member name="F:FineUI.Icon.XhtmlValid"> + <summary> + XhtmlValid + </summary> + </member> + <member name="F:FineUI.Icon.Zoom"> + <summary> + Zoom + </summary> + </member> + <member name="F:FineUI.Icon.ZoomIn"> + <summary> + ZoomIn + </summary> + </member> + <member name="F:FineUI.Icon.ZoomOut"> + <summary> + ZoomOut + </summary> + </member> + <member name="F:FineUI.Icon.SystemClose"> + <summary> + SystemClose + </summary> + </member> + <member name="F:FineUI.Icon.SystemNew"> + <summary> + SystemNew + </summary> + </member> + <member name="F:FineUI.Icon.SystemSave"> + <summary> + SystemSave + </summary> + </member> + <member name="F:FineUI.Icon.SystemSaveClose"> + <summary> + SystemSaveClose + </summary> + </member> + <member name="F:FineUI.Icon.SystemSaveNew"> + <summary> + SystemSaveNew + </summary> + </member> + <member name="F:FineUI.Icon.SystemSearch"> + <summary> + SystemSearch + </summary> + </member> + <member name="T:FineUI.IconHelper"> + <summary> + 预定义图标名称 + </summary> + </member> + <member name="M:FineUI.IconHelper.GetName(FineUI.Icon)"> + <summary> + 获取图标名称 + </summary> + <param name="type"></param> + <returns></returns> + </member> + <member name="M:FineUI.IconHelper.GetIconUrl(FineUI.Icon)"> + <summary> + 获得图标的服务器地址 + </summary> + <param name="icon">图标</param> + <returns>图标的服务器地址</returns> + </member> + <member name="M:FineUI.IconHelper.GetResolvedIconUrl(FineUI.Icon)"> + <summary> + 获取客户端可用的图标URL地址 + </summary> + <param name="icon">图标</param> + <returns>URL地址</returns> + </member> + <member name="M:FineUI.IconHelper.GetResolvedIconUrl(FineUI.Icon,System.String)"> + <summary> + 获取客户端可用的图标URL地址 + </summary> + <param name="icon">图标</param> + <param name="iconUrl">图标地址</param> + <returns>URL地址</returns> + </member> + <member name="M:FineUI.IconHelper.String2Icon(System.String,System.Boolean)"> + <summary> + 将图标字符串转换为图标 + </summary> + <param name="text">图标字符串</param> + <param name="ignoreCase">是否忽略大小写</param> + <returns>图标</returns> + </member> + <member name="M:FineUI.IconHelper.Icon2String(FineUI.Icon)"> + <summary> + 将图标转换为图标字符串 + </summary> + <param name="type">图标</param> + <returns>图标字符串</returns> + </member> + <member name="T:FineUI.Theme"> + <summary> + 样式 + </summary> + </member> + <member name="F:FineUI.Theme.Blue"> + <summary> + 蓝色 + </summary> + </member> + <member name="F:FineUI.Theme.Gray"> + <summary> + 银灰色 + </summary> + </member> + <member name="F:FineUI.Theme.Access"> + <summary> + 高对比度 + </summary> + </member> + <member name="F:FineUI.Theme.Neptune"> + <summary> + 海王星(默认值) + </summary> + </member> + <member name="T:FineUI.ThemeHelper"> + <summary> + 样式的类型名称 + </summary> + </member> + <member name="T:FineUI.Language"> + <summary> + 语言 + </summary> + </member> + <member name="F:FineUI.Language.EN"> + <summary> + 英文 + </summary> + </member> + <member name="F:FineUI.Language.ZH_CN"> + <summary> + 中文(默认值) + </summary> + </member> + <member name="F:FineUI.Language.ZH_TW"> + <summary> + 中文(台湾) + </summary> + </member> + <member name="F:FineUI.Language.PT_BR"> + <summary> + 葡萄牙文(巴西) + </summary> + </member> + <member name="F:FineUI.Language.TR"> + <summary> + 土耳其文 + </summary> + </member> + <member name="F:FineUI.Language.RU"> + <summary> + 俄文 + </summary> + </member> + <member name="T:FineUI.LanguageHelper"> + <summary> + 语言的类型名称 + </summary> + </member> + <member name="T:FineUI.Operator"> + <summary> + 操作符(用于表单控件的客户端验证) + </summary> + </member> + <member name="F:FineUI.Operator.Equal"> + <summary> + 等于(默认值) + </summary> + </member> + <member name="F:FineUI.Operator.GreaterThan"> + <summary> + 大于 + </summary> + </member> + <member name="F:FineUI.Operator.GreaterThanEqual"> + <summary> + 大于等于 + </summary> + </member> + <member name="F:FineUI.Operator.LessThan"> + <summary> + 小于 + </summary> + </member> + <member name="F:FineUI.Operator.LessThanEqual"> + <summary> + 小于等于 + </summary> + </member> + <member name="F:FineUI.Operator.NotEqual"> + <summary> + 不等于 + </summary> + </member> + <member name="T:FineUI.OperatorHelper"> + <summary> + 操作符名称 + </summary> + </member> + <member name="T:FineUI.TriggerIcon"> + <summary> + 触发器输入框右侧图标的类型 + </summary> + </member> + <member name="F:FineUI.TriggerIcon.None"> + <summary> + 无(默认值) + </summary> + </member> + <member name="F:FineUI.TriggerIcon.Search"> + <summary> + 搜索图标 + </summary> + </member> + <member name="F:FineUI.TriggerIcon.Clear"> + <summary> + 清空图标 + </summary> + </member> + <member name="F:FineUI.TriggerIcon.Date"> + <summary> + 日期图标 + </summary> + </member> + <member name="T:FineUI.TriggerIconHelper"> + <summary> + 系统图标名称 + </summary> + </member> + <member name="T:FineUI.WindowPosition"> + <summary> + 窗体的初始显示位置 + </summary> + </member> + <member name="F:FineUI.WindowPosition.Center"> + <summary> + 页面的中部 + </summary> + </member> + <member name="F:FineUI.WindowPosition.GoldenSection"> + <summary> + 页面的黄金分割点处(默认值) + </summary> + </member> + <member name="T:FineUI.ToolbarPosition"> + <summary> + 工具条的位置 + </summary> + </member> + <member name="F:FineUI.ToolbarPosition.Top"> + <summary> + 顶部(默认值) + </summary> + </member> + <member name="F:FineUI.ToolbarPosition.Bottom"> + <summary> + 底部 + </summary> + </member> + <member name="F:FineUI.ToolbarPosition.Left"> + <summary> + 左侧 + </summary> + </member> + <member name="F:FineUI.ToolbarPosition.Right"> + <summary> + 右侧 + </summary> + </member> + <member name="T:FineUI.ToolbarPositionHelper"> + <summary> + 工具条的位置名称 + </summary> + </member> + <member name="T:FineUI.Target"> + <summary> + 窗体以及对话框的显示位置 + </summary> + </member> + <member name="F:FineUI.Target.Self"> + <summary> + 当前页面(默认值) + </summary> + </member> + <member name="F:FineUI.Target.Parent"> + <summary> + 父页面 + </summary> + </member> + <member name="F:FineUI.Target.Top"> + <summary> + 最外层页面 + </summary> + </member> + <member name="T:FineUI.TargetHelper"> + <summary> + Alert,Confirm,Window显示的位置 + </summary> + </member> + <member name="M:FineUI.TargetHelper.GetScriptName(FineUI.Target)"> + <summary> + Get target name used inside JavaScript code. + </summary> + <param name="type"></param> + <returns></returns> + </member> + <member name="T:FineUI.RegexPattern"> + <summary> + 正则表达式常用类型(用于表单控件的客户端验证) + </summary> + </member> + <member name="F:FineUI.RegexPattern.None"> + <summary> + 无(默认值) + </summary> + </member> + <member name="F:FineUI.RegexPattern.NUMBER"> + <summary> + 数字 + </summary> + </member> + <member name="F:FineUI.RegexPattern.ALPHA"> + <summary> + 字母 + </summary> + </member> + <member name="F:FineUI.RegexPattern.ALPHA_NUMERIC"> + <summary> + 字母数字 + </summary> + </member> + <member name="F:FineUI.RegexPattern.ALPHA_UNDERLINE"> + <summary> + 字母下划线 + </summary> + </member> + <member name="F:FineUI.RegexPattern.ALPHA_NUMERIC_UNDERLINE"> + <summary> + 字母数字下划线 + </summary> + </member> + <member name="F:FineUI.RegexPattern.ALPHA_LOWER_CASE"> + <summary> + 小写字母 + </summary> + </member> + <member name="F:FineUI.RegexPattern.ALPHA_UPPER_CASE"> + <summary> + 大写字母 + </summary> + </member> + <member name="F:FineUI.RegexPattern.EMAIL"> + <summary> + 电子邮箱 + </summary> + </member> + <member name="F:FineUI.RegexPattern.URL"> + <summary> + 网址 + </summary> + </member> + <member name="F:FineUI.RegexPattern.POSTAL_CODE"> + <summary> + 邮政编码(中华人民共和国) + </summary> + </member> + <member name="F:FineUI.RegexPattern.IP_ADDRESS"> + <summary> + IP地址 + </summary> + </member> + <member name="F:FineUI.RegexPattern.IDENTITY_CARD"> + <summary> + 身份证(中华人民共和国) + </summary> + </member> + <member name="T:FineUI.RegexPatternHelper"> + <summary> + 正则表达式常用类型 内容 + </summary> + </member> + <member name="T:FineUI.CloseAction"> + <summary> + 关闭窗体的动作 + </summary> + </member> + <member name="F:FineUI.CloseAction.Hide"> + <summary> + 关闭窗体(默认值) + </summary> + </member> + <member name="F:FineUI.CloseAction.HideRefresh"> + <summary> + 关闭窗体后刷新父页面 + </summary> + </member> + <member name="F:FineUI.CloseAction.HidePostBack"> + <summary> + 关闭窗体后会发父页面(需要注册OnClose事件处理函数) + </summary> + </member> + <member name="T:FineUI.CloseActionName"> + <summary> + 关闭窗体的动作 + </summary> + </member> + <member name="T:FineUI.Position"> + <summary> + Region控件所在RegionPanel中的位置 + </summary> + </member> + <member name="F:FineUI.Position.Top"> + <summary> + 上方 + </summary> + </member> + <member name="F:FineUI.Position.Bottom"> + <summary> + 底部 + </summary> + </member> + <member name="F:FineUI.Position.Left"> + <summary> + 左侧 + </summary> + </member> + <member name="F:FineUI.Position.Right"> + <summary> + 右侧 + </summary> + </member> + <member name="F:FineUI.Position.Center"> + <summary> + 中部(默认值) + </summary> + </member> + <member name="T:FineUI.PositionHelper"> + <summary> + 布局类型名称 + </summary> + </member> + <member name="T:FineUI.TabPosition"> + <summary> + Tab标签的显示位置 + </summary> + </member> + <member name="F:FineUI.TabPosition.Top"> + <summary> + 顶部(默认值) + </summary> + </member> + <member name="F:FineUI.TabPosition.Bottom"> + <summary> + 底部 + </summary> + </member> + <member name="F:FineUI.TabPosition.Left"> + <summary> + 左侧 + </summary> + </member> + <member name="F:FineUI.TabPosition.Right"> + <summary> + 右侧 + </summary> + </member> + <member name="T:FineUI.TabPositionHelper"> + <summary> + Tab显示的位置名称 + </summary> + </member> + <member name="T:FineUI.IconAlign"> + <summary> + 按钮上图标的摆放位置 + </summary> + </member> + <member name="F:FineUI.IconAlign.Top"> + <summary> + 靠上 + </summary> + </member> + <member name="F:FineUI.IconAlign.Right"> + <summary> + 靠右 + </summary> + </member> + <member name="F:FineUI.IconAlign.Bottom"> + <summary> + 靠下 + </summary> + </member> + <member name="F:FineUI.IconAlign.Left"> + <summary> + 靠左(默认值) + </summary> + </member> + <member name="T:FineUI.IconAlignHelper"> + <summary> + 图标摆放位置的名称 + </summary> + </member> + <member name="T:FineUI.ButtonSize"> + <summary> + 按钮的大小 + </summary> + </member> + <member name="F:FineUI.ButtonSize.Small"> + <summary> + 小尺寸(默认值) + </summary> + </member> + <member name="F:FineUI.ButtonSize.Medium"> + <summary> + 中等尺寸 + </summary> + </member> + <member name="F:FineUI.ButtonSize.Large"> + <summary> + 大尺寸 + </summary> + </member> + <member name="T:FineUI.ButtonSizeName"> + <summary> + 按钮的大小名称 + </summary> + </member> + <member name="T:FineUI.BoxLayoutAlign"> + <summary> + 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + </summary> + </member> + <member name="F:FineUI.BoxLayoutAlign.Top"> + <summary> + 所有子控件位于父容器的开始位置(废弃,请使用Start代替) + </summary> + </member> + <member name="F:FineUI.BoxLayoutAlign.Middle"> + <summary> + 所有子控件位于父容器的中间位置(废弃,请使用Center代替) + </summary> + </member> + <member name="F:FineUI.BoxLayoutAlign.Start"> + <summary> + 所有子控件位于父容器的开始位置 + </summary> + </member> + <member name="F:FineUI.BoxLayoutAlign.Center"> + <summary> + 所有子控件位于父容器的中间位置 + </summary> + </member> + <member name="F:FineUI.BoxLayoutAlign.Stretch"> + <summary> + 所有子控件被拉伸至父容器的大小(默认值) + </summary> + </member> + <member name="F:FineUI.BoxLayoutAlign.StretchMax"> + <summary> + 所有子控件被拉伸至最大子控件的大小 + </summary> + </member> + <member name="T:FineUI.BoxLayoutAlignHelper"> + <summary> + HBox或者VBox的位置的名称 + </summary> + </member> + <member name="T:FineUI.BoxLayoutPosition"> + <summary> + 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + </summary> + </member> + <member name="F:FineUI.BoxLayoutPosition.Left"> + <summary> + 子控件靠父容器的开始位置排列(废弃,请使用Start代替) + </summary> + </member> + <member name="F:FineUI.BoxLayoutPosition.Right"> + <summary> + 子控件靠父容器的结束位置排列(废弃,请使用End代替) + </summary> + </member> + <member name="F:FineUI.BoxLayoutPosition.Center"> + <summary> + 子控件靠父容器的中间位置排列 + </summary> + </member> + <member name="F:FineUI.BoxLayoutPosition.Start"> + <summary> + 子控件靠父容器的开始位置排列(默认值) + </summary> + </member> + <member name="F:FineUI.BoxLayoutPosition.End"> + <summary> + 子控件靠父容器的结束位置排列 + </summary> + </member> + <member name="T:FineUI.BoxLayoutPositionHelper"> + <summary> + HBox或者VBox的位置的名称 + </summary> + </member> + <member name="T:FineUI.AjaxLoadingType"> + <summary> + Ajax提示信息的类型 + </summary> + </member> + <member name="F:FineUI.AjaxLoadingType.Default"> + <summary> + 在页面顶部显示黄色提示框(默认值) + </summary> + </member> + <member name="F:FineUI.AjaxLoadingType.Mask"> + <summary> + Extjs的页面遮罩提示框 + </summary> + </member> + <member name="T:FineUI.AjaxLoadingTypeName"> + <summary> + Ajax提示信息的类型名称 + </summary> + </member> + <member name="T:FineUI.TextAlign"> + <summary> + 文本排列位置 + </summary> + </member> + <member name="F:FineUI.TextAlign.Left"> + <summary> + 靠左排列(默认值) + </summary> + </member> + <member name="F:FineUI.TextAlign.Center"> + <summary> + 居中排列 + </summary> + </member> + <member name="F:FineUI.TextAlign.Right"> + <summary> + 靠右排列 + </summary> + </member> + <member name="T:FineUI.TextAlignName"> + <summary> + 文本排列位置名称 + </summary> + </member> + <member name="T:FineUI.LabelAlign"> + <summary> + 表单中标签的排列位置 + </summary> + </member> + <member name="F:FineUI.LabelAlign.Left"> + <summary> + 靠左(默认值) + </summary> + </member> + <member name="F:FineUI.LabelAlign.Right"> + <summary> + 靠右 + </summary> + </member> + <member name="F:FineUI.LabelAlign.Top"> + <summary> + 靠上 + </summary> + </member> + <member name="T:FineUI.LabelAlignHelper"> + <summary> + 表单中标签的排列位置名称 + </summary> + </member> + <member name="T:FineUI.VerticalAlign"> + <summary> + 垂直排列位置 + </summary> + </member> + <member name="F:FineUI.VerticalAlign.Middle"> + <summary> + 居中排列(默认值) + </summary> + </member> + <member name="F:FineUI.VerticalAlign.Top"> + <summary> + 靠上排列 + </summary> + </member> + <member name="F:FineUI.VerticalAlign.Bottom"> + <summary> + 靠下排列 + </summary> + </member> + <member name="T:FineUI.VerticalAlignName"> + <summary> + 垂直排列位置名称 + </summary> + </member> + <member name="T:FineUI.JsArrayBuilder"> + <summary> + 创建Javascript数组参数的帮助类 + </summary> + </member> + <member name="M:FineUI.JsArrayBuilder.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.JsArrayBuilder.#ctor(System.Object)"> + <summary> + 构造函数 + </summary> + <param name="propertyValue">初始属性值</param> + </member> + <member name="M:FineUI.JsArrayBuilder.#ctor(System.Object,System.Boolean)"> + <summary> + 构造函数 + </summary> + <param name="propertyValue">初始属性值</param> + <param name="persistOriginal">是否保持原样</param> + </member> + <member name="M:FineUI.JsArrayBuilder.RemoveProperty(System.String)"> + <summary> + 删除属性 + </summary> + <param name="propertyValue">属性值</param> + </member> + <member name="M:FineUI.JsArrayBuilder.AddProperty(System.Object)"> + <summary> + 添加属性 + </summary> + <param name="propertyValue">属性值</param> + </member> + <member name="M:FineUI.JsArrayBuilder.AddProperty(System.Object,System.Boolean)"> + <summary> + 添加属性 + </summary> + <param name="propertyValue">属性值</param> + <param name="persistOriginal">是否保持原样</param> + </member> + <member name="M:FineUI.JsArrayBuilder.Reverse"> + <summary> + 将整个数组中元素顺序反转 + </summary> + </member> + <member name="M:FineUI.JsArrayBuilder.ToString"> + <summary> + 返回对象的JSON字符串形式 + </summary> + <returns>对象的JSON形式</returns> + </member> + <member name="P:FineUI.JsArrayBuilder.Properties"> + <summary> + 内部保存的数据 + </summary> + </member> + <member name="P:FineUI.JsArrayBuilder.Count"> + <summary> + 已经添加属性的个数 + </summary> + </member> + <member name="M:FineUI.OptionBuilder.RemoveProperty(System.String)"> + <summary> + 删除属性 + </summary> + <param name="propertyName"></param> + </member> + <member name="M:FineUI.OptionBuilder.AddProperty(System.String,System.Object)"> + <summary> + 添加属性 + </summary> + <param name="propertyName"></param> + <param name="propertyValue"></param> + </member> + <member name="M:FineUI.OptionBuilder.AddProperty(System.String,System.Object,System.Boolean)"> + <summary> + 添加属性 + </summary> + <param name="propertyName"></param> + <param name="propertyValue"></param> + <param name="persistOriginal">是否保持原样</param> + </member> + <member name="M:FineUI.OptionBuilder.GetProperty(System.String)"> + <summary> + 使用这个方法需要特别注意,因为这里返回的不是设置的属性了 + 比如:"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"" + </summary> + <param name="propertyName"></param> + <returns></returns> + </member> + <member name="M:FineUI.OptionBuilder.ToString"> + <summary> + 返回对象的Json字符串表示 + </summary> + <returns></returns> + </member> + <member name="T:FineUI.ClientJavascriptIDManager"> + <summary> + 存在 Page.Items 上下文中,用于生成JavascriptID + </summary> + </member> + <member name="M:FineUI.CommonResourceHelper.AddJavascriptIncludeToPageBottom(System.Web.UI.Page,System.String,System.String)"> + <summary> + 添加JS文件到页面的底部 + </summary> + <param name="page"></param> + <param name="controlId"></param> + <param name="resourceName"></param> + </member> + <member name="M:FineUI.CommonResourceHelper.AddCssResourceToHead(System.Web.UI.Page,System.String,System.String)"> + <summary> + 添加样式表到页头 + </summary> + <param name="page"></param> + <param name="controlId"></param> + <param name="resourceName"></param> + </member> + <member name="M:FineUI.CommonResourceHelper.AddContentToHead(System.Web.UI.Page,System.String,System.String)"> + <summary> + 向页面头部添加内容 + </summary> + <param name="page"></param> + <param name="controlId"></param> + <param name="msg"></param> + </member> + <member name="M:FineUI.CommonResourceHelper.IsHeaderContains(System.Web.UI.Page,System.String)"> + <summary> + 页头是否包含控件 + </summary> + <param name="page"></param> + <param name="controlId"></param> + <returns></returns> + </member> + <member name="M:FineUI.CommonResourceHelper.GetNextControlIndex(System.Web.UI.Page)"> + <summary> + 取得下一个控件的位置 + </summary> + <returns></returns> + </member> + <member name="T:FineUI.ResourceHandler"> + <summary> + 资源处理程序 + </summary> + </member> + <member name="M:FineUI.ResourceHandler.ProcessRequest(System.Web.HttpContext)"> + <summary> + 处理资源的请求 + </summary> + <param name="context">Http请求上下文</param> + </member> + <member name="P:FineUI.ResourceHandler.IsReusable"> + <summary> + 只要请求的 URL 相同,则请求可以重用 + </summary> + </member> + <member name="T:FineUI.ResponseFilter"> + <summary> + AJAX输出过滤器 + </summary> + </member> + <member name="M:FineUI.ResponseFilter.GetEnableTargetControlScript"> + <summary> + 设置引起本次回发的按钮(或其他控件)可用 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.ResponseFilter.UpdateEventValidation(System.Text.StringBuilder,HtmlAgilityPack.HtmlDocument)"> + <summary> + 更新 EventValidation 节点的值 + </summary> + <param name="sb"></param> + <param name="doc"></param> + </member> + <member name="M:FineUI.ResponseFilter.UpdateViewState(System.Text.StringBuilder,HtmlAgilityPack.HtmlDocument)"> + <summary> + 更新 ViewState 节点的值 + </summary> + <param name="sb"></param> + <param name="doc"></param> + </member> + <member name="M:FineUI.ResponseFilter.UpdateASPNETControls(System.Text.StringBuilder,HtmlAgilityPack.HtmlDocument)"> + <summary> + 更新ASP.NET控件 + </summary> + <param name="sb"></param> + <param name="doc"></param> + </member> + <member name="M:FineUI.ResponseFilter.GetHtmlNodeValue(System.String,HtmlAgilityPack.HtmlDocument)"> + <summary> + 取得 HTML 中一个节点的值 + </summary> + <param name="nodeId"></param> + <param name="doc"></param> + <returns></returns> + </member> + <member name="M:FineUI.ResponseFilter.GetHtmlNodeOuterHTML(System.String,HtmlAgilityPack.HtmlDocument)"> + <summary> + 取得 HTML 中一个节点的OuterHtml + </summary> + <param name="nodeId"></param> + <param name="doc"></param> + <returns></returns> + </member> + <member name="M:FineUI.ResponseFilter.GetCompleteHtml"> + <summary> + 获取当前输出流的HTML内容 + </summary> + <returns></returns> + </member> + <member name="T:FineUI.ScriptModule"> + <summary> + 请求处理模块(主要用来处理Response.Redirect的情况) + </summary> + </member> + <member name="M:FineUI.ScriptModule.Dispose"> + <summary> + 清除资源 + </summary> + </member> + <member name="M:FineUI.ScriptModule.Init(System.Web.HttpApplication)"> + <summary> + 初始化模块 + </summary> + <param name="context">Http应用程序</param> + </member> + <member name="T:FineUI.TreeNodeIDManager"> + <summary> + 存在 Page.Items 上下文中,用于生成JavascriptID + </summary> + </member> + <member name="T:FineUI.SimulateTreeHeper"> + <summary> + 模拟树帮助类(用于表格和树控件) + </summary> + </member> + <member name="T:FineUI.SimulateTreeNode"> + <summary> + 模拟树结构的节点类 + </summary> + </member> + <member name="P:FineUI.SimulateTreeNode.SimulateTreeText"> + <summary> + 模拟树的节点内容 + </summary> + </member> + <member name="P:FineUI.SimulateTreeNode.Text"> + <summary> + 节点内容 + </summary> + </member> + <member name="P:FineUI.SimulateTreeNode.Value"> + <summary> + 节点内容 + </summary> + </member> + <member name="P:FineUI.SimulateTreeNode.Level"> + <summary> + 节点所在层次(从0开始,0表示根节点) + </summary> + </member> + <member name="P:FineUI.SimulateTreeNode.ParentNode"> + <summary> + 父节点 + </summary> + </member> + <member name="P:FineUI.SimulateTreeNode.HasLittleBrother"> + <summary> + 是否有弟节点 + </summary> + </member> + <member name="T:FineUI.ControlUtil"> + <summary> + 控件相关帮助函数 + </summary> + </member> + <member name="M:FineUI.ControlUtil.FindParentControl(System.Web.UI.Control,System.Type,System.Boolean)"> + <summary> + 查找父控件 + </summary> + <param name="control">当前控件</param> + <param name="controlType">查找控件的类型</param> + <param name="checkSubclassOf">如果找到的控件实例继承自controlType,同样也认为是找到了</param> + <returns>找到的第一个父控件</returns> + </member> + <member name="M:FineUI.ControlUtil.FindParentControl(System.Web.UI.Control,System.Type)"> + <summary> + 查找父控件 + </summary> + <param name="control">当前控件</param> + <param name="controlType">查找控件的类型</param> + <returns>找到的第一个父控件</returns> + </member> + <member name="M:FineUI.ControlUtil.GetControlClientIDs(System.String[])"> + <summary> + 获得服务器控件ID的客户端ID数组 + </summary> + <param name="serverIDs"></param> + <returns></returns> + </member> + <member name="M:FineUI.ControlUtil.FindParentUserControl(System.Web.UI.Control)"> + <summary> + 查找父层次结构中是否存在用户控件 + </summary> + <param name="ctrl">当前控件</param> + <returns>父层次中的用户控件</returns> + </member> + <member name="M:FineUI.ControlUtil.FindControl(System.String)"> + <summary> + 根据控件ID查找控件 + </summary> + <param name="findControlID">要查找的控件ID</param> + <returns>找到的控件</returns> + </member> + <member name="M:FineUI.ControlUtil.FindControl(System.Type)"> + <summary> + 根据控件类型查找控件 + </summary> + <param name="controlType">要查找的控件类型</param> + <returns>找到的控件</returns> + </member> + <member name="M:FineUI.ControlUtil.FindControl(System.Web.UI.Control,System.String)"> + <summary> + 在父控件的所有子控件中查找控件 + </summary> + <param name="control">父控件</param> + <param name="findControlId">要查找的控件ID</param> + <returns>找到的控件</returns> + </member> + <member name="M:FineUI.ControlUtil.FindControl(System.Web.UI.Control,System.Type)"> + <summary> + 在父控件的所有子控件中查找控件 + </summary> + <param name="control">父控件</param> + <param name="controlType">要查找的控件类型</param> + <returns>找到的控件</returns> + </member> + <member name="T:FineUI.StringUtil"> + <summary> + 字符串帮助类 + </summary> + </member> + <member name="F:FineUI.StringUtil.VIEWSTATE_ID"> + <summary> + GZIP压缩的ViewState隐藏字段的ID + </summary> + </member> + <member name="F:FineUI.StringUtil.GZIPPED_VIEWSTATE_ID"> + <summary> + GZIP压缩的ViewState隐藏字段的ID + </summary> + </member> + <member name="M:FineUI.StringUtil.EnumFromName(System.Type,System.String)"> + <summary> + 获取枚举实例 + </summary> + <param name="enumType">枚举类型</param> + <param name="enumName">枚举实例名称</param> + <returns>枚举实例</returns> + </member> + <member name="M:FineUI.StringUtil.EnumToName(System.Enum)"> + <summary> + 获取枚举实例名称 + </summary> + <param name="param">枚举实例</param> + <returns>枚举实例名称</returns> + </member> + <member name="M:FineUI.StringUtil.StripHtml(System.String)"> + <summary> + 去除字符串中的Html + </summary> + <param name="source">字符串</param> + <returns>字符串</returns> + </member> + <member name="M:FineUI.StringUtil.GetIntListFromString(System.String)"> + <summary> + 将字符串"1,2,3"转化为整形列表[1,2,3] + </summary> + <param name="postValue">字符串</param> + <returns>整形列表</returns> + </member> + <member name="M:FineUI.StringUtil.GetIntListFromString(System.String,System.Boolean)"> + <summary> + 将字符串"1,2,3"转化为整形列表[1,2,3] + </summary> + <param name="postValue">字符串</param> + <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> + <returns>整形列表</returns> + </member> + <member name="M:FineUI.StringUtil.GetStringListFromString(System.String)"> + <summary> + 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + </summary> + <param name="postValue">字符串</param> + <returns>字符串列表</returns> + </member> + <member name="M:FineUI.StringUtil.GetStringListFromString(System.String,System.Boolean)"> + <summary> + 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + </summary> + <param name="postValue"></param> + <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> + <returns>字符串列表</returns> + </member> + <member name="M:FineUI.StringUtil.GetStringFromStringArray(System.String[])"> + <summary> + 将字符串数组["ssdd","2","ok"]转化为字符串"ssdd,2,ok" + </summary> + <param name="strArray">字符串数组</param> + <returns>字符串</returns> + </member> + <member name="M:FineUI.StringUtil.GetStringFromIntArray(System.Int32[])"> + <summary> + 将整型数组[2,3,4]转化为字符串"2,3,4" + </summary> + <param name="intArray">整形数组</param> + <returns>字符串</returns> + </member> + <member name="M:FineUI.StringUtil.CompareIntArray(System.Int32[],System.Int32[])"> + <summary> + 比较两个整形数组是否相等 + </summary> + <param name="array1">整形数组1</param> + <param name="array2">整形数组2</param> + <returns>是否相等</returns> + </member> + <member name="M:FineUI.StringUtil.CompareStringArray(System.String[],System.String[])"> + <summary> + 比较两个字符串数组是否相等 + </summary> + <param name="array1">字符串数组1</param> + <param name="array2">字符串数组2</param> + <returns>是否相等</returns> + </member> + <member name="M:FineUI.StringUtil.ConvertPercentageToDecimalString(System.String)"> + <summary> + 将 10% 转换为 0.1 的字符串的形式 + </summary> + <param name="percentageStr">百分比字符串</param> + <returns>小数</returns> + </member> + <member name="M:FineUI.StringUtil.DecodeFrom64(System.Byte[])"> + <summary> + Base64解码 + </summary> + <param name="encodedDataAsBytes">需要解码的字节数组</param> + <returns>解码后的字符串</returns> + </member> + <member name="M:FineUI.StringUtil.DecodeFrom64(System.String)"> + <summary> + Base64解码 + </summary> + <param name="encodedData">需要解码的字符串</param> + <returns>解码后的字符串</returns> + </member> + <member name="M:FineUI.StringUtil.EncodeTo64(System.Byte[])"> + <summary> + Base64编码 + </summary> + <param name="toEncodeAsBytes">需要编码的字节数组</param> + <returns>编码后的字符串</returns> + </member> + <member name="M:FineUI.StringUtil.EncodeTo64(System.String)"> + <summary> + Base64编码 + </summary> + <param name="toEncode">需要编码的字符串</param> + <returns>编码后的字符串</returns> + </member> + <member name="M:FineUI.StringUtil.Gzip(System.String)"> + <summary> + Gzip编码字符串 + </summary> + <param name="source">源字符串</param> + <returns>Gzip后的字符串</returns> + </member> + <member name="M:FineUI.StringUtil.Ungzip(System.String)"> + <summary> + 解码Gzip字符串 + </summary> + <param name="source">Gzip后的字符串</param> + <returns>源字符串</returns> + </member> + <member name="M:FineUI.StringUtil.LoadGzippedViewState(System.String)"> + <summary> + 加载Gzipped的ViewState + </summary> + <param name="gzippedState"></param> + <returns></returns> + </member> + <member name="M:FineUI.StringUtil.GenerateGzippedViewState(System.Object)"> + <summary> + 生成Gzipped的ViewState + </summary> + <param name="viewState"></param> + <returns></returns> + </member> + <member name="T:FineUI.ObjectUtil"> + <summary> + 对象帮助类 + </summary> + </member> + <member name="M:FineUI.ObjectUtil.GetPropertyValue(System.Object,System.String)"> + <summary> + 获取对象的属性值 + </summary> + <param name="obj">可能是DataRowView或一个对象</param> + <param name="propertyName">属性名</param> + <returns>属性值</returns> + </member> + <member name="M:FineUI.ObjectUtil.GetPropertyValueFormObject(System.Object,System.String)"> + <summary> + 获取对象的属性值 + </summary> + <param name="obj">对象</param> + <param name="propertyName">属性名("Color"、"BodyStyle"或者"Info.UserName")</param> + <returns>属性值</returns> + </member> + <member name="T:FineUI.HtmlNodeBuilder"> + <summary> + 创建HTML节点的帮助类 + </summary> + </member> + <member name="M:FineUI.HtmlNodeBuilder.#ctor(System.String)"> + <summary> + 构造函数 + </summary> + <param name="nodeName">节点名称</param> + </member> + <member name="M:FineUI.HtmlNodeBuilder.SetProperty(System.String,System.String)"> + <summary> + 设置属性 + </summary> + <param name="name">属性名</param> + <param name="value">属性值</param> + </member> + <member name="M:FineUI.HtmlNodeBuilder.GetProperty(System.String)"> + <summary> + 取得属性的值 + </summary> + <param name="name">属性名</param> + <returns>属性值</returns> + </member> + <member name="M:FineUI.HtmlNodeBuilder.ToString"> + <summary> + 转化为客户端可用的HTML标签字符串 + </summary> + <returns>客户端可用的HTML标签字符串</returns> + </member> + <member name="P:FineUI.HtmlNodeBuilder.InnerProperty"> + <summary> + 节点内部值 + </summary> + </member> + <member name="T:FineUI.StyleUtil"> + <summary> + 样式帮助类 + </summary> + </member> + <member name="M:FineUI.StyleUtil.GetSingleStyleFormCSS(System.String,System.String)"> + <summary> + 提取样式字符串 + </summary> + <param name="css">CSS字符串</param> + <param name="styleName">样式名称</param> + <returns>样式字符串</returns> + </member> + <member name="M:FineUI.StyleUtil.GetBackgroundStyle(System.String,System.String)"> + <summary> + 获取背景图片样式 + </summary> + <param name="selector">选择符</param> + <param name="imageUrl">图片地址</param> + <returns>CSS样式</returns> + </member> + <member name="M:FineUI.StyleUtil.GetNoRepeatBackgroundStyle(System.String,System.String)"> + <summary> + 获取背景图片样式(no-repeat) + </summary> + <param name="selector">选择符</param> + <param name="imageUrl">图片地址</param> + <returns>CSS样式</returns> + </member> + <member name="M:FineUI.StyleUtil.GetMarginPaddingStyle(System.String)"> + <summary> + 获取适合CSS的Margin或者Padding定义 + </summary> + <param name="source">源字符串</param> + <returns>CSS样式</returns> + </member> + <member name="T:FineUI.JSONUtil"> + <summary> + JSON帮助类 + </summary> + </member> + <member name="M:FineUI.JSONUtil.IntArrayFromJArray(Newtonsoft.Json.Linq.JArray)"> + <summary> + 将JArray转换为整型数组 + </summary> + <param name="ja">JArray对象</param> + <returns>整型数组</returns> + </member> + <member name="M:FineUI.JSONUtil.StringArrayFromJArray(Newtonsoft.Json.Linq.JArray)"> + <summary> + 将JArray转换为字符串数组 + </summary> + <param name="ja">JArray对象</param> + <returns>字符串数组</returns> + </member> + <member name="M:FineUI.JSONUtil.ObjectArrayFromJArray(Newtonsoft.Json.Linq.JArray)"> + <summary> + 将JArray转换为对象数组 + </summary> + <param name="ja">JArray对象</param> + <returns>对象数组</returns> + </member> + <member name="T:HtmlAgilityPack.Crc32"> + <summary> + A utility class to compute CRC32. + </summary> + </member> + <member name="M:HtmlAgilityPack.Crc32.CRC32String(System.String)"> + <summary> + Compute a checksum for a given string. + </summary> + <param name="text">The string to compute the checksum for.</param> + <returns>The computed checksum.</returns> + </member> + <member name="M:HtmlAgilityPack.Crc32.CRC32Bytes(System.Byte[])"> + <summary> + Compute a checksum for a given array of bytes. + </summary> + <param name="bytes">The array of bytes to compute the checksum for.</param> + <returns>The computed checksum.</returns> + </member> + <member name="T:HtmlAgilityPack.HtmlAttribute"> + <summary> + Represents an HTML attribute. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlAttribute.Clone"> + <summary> + Creates a duplicate of this attribute. + </summary> + <returns>The cloned attribute.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlAttribute.CompareTo(System.Object)"> + <summary> + Compares the current instance with another attribute. Comparison is based on attributes' name. + </summary> + <param name="obj">An attribute to compare with this instance.</param> + <returns>A 32-bit signed integer that indicates the relative order of the names comparison.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlAttribute.Name"> + <summary> + Gets the qualified name of the attribute. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttribute.Value"> + <summary> + Gets or sets the value of the attribute. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttribute.Line"> + <summary> + Gets the line number of this attribute in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttribute.LinePosition"> + <summary> + Gets the column number of this attribute in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttribute.StreamPosition"> + <summary> + Gets the stream position of this attribute in the document, relative to the start of the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttribute.OwnerNode"> + <summary> + Gets the HTML node to which this attribute belongs. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttribute.OwnerDocument"> + <summary> + Gets the HTML document to which this attribute belongs. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlAttributeCollection"> + <summary> + Represents a combined list and collection of HTML nodes. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Append(HtmlAgilityPack.HtmlAttribute)"> + <summary> + Inserts the specified attribute as the last attribute in the collection. + </summary> + <param name="newAttribute">The attribute to insert. May not be null.</param> + <returns>The appended attribute.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Append(System.String)"> + <summary> + Creates and inserts a new attribute as the last attribute in the collection. + </summary> + <param name="name">The name of the attribute to insert.</param> + <returns>The appended attribute.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Append(System.String,System.String)"> + <summary> + Creates and inserts a new attribute as the last attribute in the collection. + </summary> + <param name="name">The name of the attribute to insert.</param> + <param name="value">The value of the attribute to insert.</param> + <returns>The appended attribute.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Prepend(HtmlAgilityPack.HtmlAttribute)"> + <summary> + Inserts the specified attribute as the first node in the collection. + </summary> + <param name="newAttribute">The attribute to insert. May not be null.</param> + <returns>The prepended attribute.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.RemoveAt(System.Int32)"> + <summary> + Removes the attribute at the specified index. + </summary> + <param name="index">The index of the attribute to remove.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Remove(HtmlAgilityPack.HtmlAttribute)"> + <summary> + Removes a given attribute from the list. + </summary> + <param name="attribute">The attribute to remove. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.Remove(System.String)"> + <summary> + Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. + </summary> + <param name="name">The attribute's name. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.RemoveAll"> + <summary> + Remove all attributes in the list. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.GetEnumerator"> + <summary> + Returns an enumerator that can iterate through the list. + </summary> + <returns>An IEnumerator for the entire list.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlAttributeCollection.Count"> + <summary> + Gets the number of elements actually contained in the list. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttributeCollection.Item(System.String)"> + <summary> + Gets a given attribute from the list using its name. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttributeCollection.Item(System.Int32)"> + <summary> + Gets the attribute at the specified index. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator"> + <summary> + Represents an enumerator that can iterate through the list. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.Reset"> + <summary> + Sets the enumerator to its initial position, which is before the first element in the collection. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.MoveNext"> + <summary> + Advances the enumerator to the next element of the collection. + </summary> + <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.Current"> + <summary> + Gets the current element in the collection. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlAttributeCollection.HtmlAttributeEnumerator.System#Collections#IEnumerator#Current"> + <summary> + Gets the current element in the collection. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlCommentNode"> + <summary> + Represents an HTML comment. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlNode"> + <summary> + Represents an HTML node. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNode.HtmlNodeTypeNameComment"> + <summary> + Gets the name of a comment node. It is actually defined as '#comment'. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNode.HtmlNodeTypeNameDocument"> + <summary> + Gets the name of the document node. It is actually defined as '#document'. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNode.HtmlNodeTypeNameText"> + <summary> + Gets the name of a text node. It is actually defined as '#text'. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNode.ElementsFlags"> + <summary> + Gets a collection of flags that define specific behaviors for specific element nodes. + The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.IsClosedElement(System.String)"> + <summary> + Determines if an element node is closed. + </summary> + <param name="name">The name of the element node to check. May not be null.</param> + <returns>true if the name is the name of a closed element node, false otherwise.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CanOverlapElement(System.String)"> + <summary> + Determines if an element node can be kept overlapped. + </summary> + <param name="name">The name of the element node to check. May not be null.</param> + <returns>true if the name is the name of an element node that can be kept overlapped, false otherwise.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.IsOverlappedClosingElement(System.String)"> + <summary> + Determines if a text corresponds to the closing tag of an node that can be kept overlapped. + </summary> + <param name="text">The text to check. May not be null.</param> + <returns>true or false.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.IsCDataElement(System.String)"> + <summary> + Determines if an element node is a CDATA element node. + </summary> + <param name="name">The name of the element node to check. May not be null.</param> + <returns>true if the name is the name of a CDATA element node, false otherwise.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.IsEmptyElement(System.String)"> + <summary> + Determines if an element node is defined as empty. + </summary> + <param name="name">The name of the element node to check. May not be null.</param> + <returns>true if the name is the name of an empty element node, false otherwise.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CreateNode(System.String)"> + <summary> + Creates an HTML node from a string representing literal HTML. + </summary> + <param name="html">The HTML text.</param> + <returns>The newly created node instance.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CopyFrom(HtmlAgilityPack.HtmlNode)"> + <summary> + Creates a duplicate of the node and the subtree under it. + </summary> + <param name="node">The node to duplicate. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CopyFrom(HtmlAgilityPack.HtmlNode,System.Boolean)"> + <summary> + Creates a duplicate of the node. + </summary> + <param name="node">The node to duplicate. May not be null.</param> + <param name="deep">true to recursively clone the subtree under the specified node, false to clone only the node itself.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CreateNavigator"> + <summary> + Creates a new XPathNavigator object for navigating this HTML node. + </summary> + <returns>An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.SelectSingleNode(System.String)"> + <summary> + Selects the first XmlNode that matches the XPath expression. + </summary> + <param name="xpath">The XPath expression. May not be null.</param> + <returns>The first HtmlNode that matches the XPath query or a null reference if no matching node was found.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.SelectNodes(System.String)"> + <summary> + Selects a list of nodes matching the XPath expression. + </summary> + <param name="xpath">The XPath expression.</param> + <returns>An HtmlNodeCollection containing a collection of nodes matching the XPath query, or null if no node matched the XPath expression.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.Clone"> + <summary> + Creates a duplicate of the node + </summary> + <returns></returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CloneNode(System.String)"> + <summary> + Creates a duplicate of the node and changes its name at the same time. + </summary> + <param name="newName">The new name of the cloned node. May not be null.</param> + <returns>The cloned node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CloneNode(System.String,System.Boolean)"> + <summary> + Creates a duplicate of the node and changes its name at the same time. + </summary> + <param name="newName">The new name of the cloned node. May not be null.</param> + <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> + <returns>The cloned node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.CloneNode(System.Boolean)"> + <summary> + Creates a duplicate of the node. + </summary> + <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> + <returns>The cloned node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.RemoveAll"> + <summary> + Removes all the children and/or attributes of the current node. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.RemoveAllChildren"> + <summary> + Removes all the children of the current node. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.RemoveChild(HtmlAgilityPack.HtmlNode)"> + <summary> + Removes the specified child node. + </summary> + <param name="oldChild">The node being removed. May not be null.</param> + <returns>The node removed.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.RemoveChild(HtmlAgilityPack.HtmlNode,System.Boolean)"> + <summary> + Removes the specified child node. + </summary> + <param name="oldChild">The node being removed. May not be null.</param> + <param name="keepGrandChildren">true to keep grand children of the node, false otherwise.</param> + <returns>The node removed.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.ReplaceChild(HtmlAgilityPack.HtmlNode,HtmlAgilityPack.HtmlNode)"> + <summary> + Replaces the child node oldChild with newChild node. + </summary> + <param name="newChild">The new node to put in the child list.</param> + <param name="oldChild">The node being replaced in the list.</param> + <returns>The node replaced.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.InsertBefore(HtmlAgilityPack.HtmlNode,HtmlAgilityPack.HtmlNode)"> + <summary> + Inserts the specified node immediately before the specified reference node. + </summary> + <param name="newChild">The node to insert. May not be null.</param> + <param name="refChild">The node that is the reference node. The newChild is placed before this node.</param> + <returns>The node being inserted.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.InsertAfter(HtmlAgilityPack.HtmlNode,HtmlAgilityPack.HtmlNode)"> + <summary> + Inserts the specified node immediately after the specified reference node. + </summary> + <param name="newChild">The node to insert. May not be null.</param> + <param name="refChild">The node that is the reference node. The newNode is placed after the refNode.</param> + <returns>The node being inserted.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.PrependChild(HtmlAgilityPack.HtmlNode)"> + <summary> + Adds the specified node to the beginning of the list of children of this node. + </summary> + <param name="newChild">The node to add. May not be null.</param> + <returns>The node added.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.PrependChildren(HtmlAgilityPack.HtmlNodeCollection)"> + <summary> + Adds the specified node list to the beginning of the list of children of this node. + </summary> + <param name="newChildren">The node list to add. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.AppendChild(HtmlAgilityPack.HtmlNode)"> + <summary> + Adds the specified node to the end of the list of children of this node. + </summary> + <param name="newChild">The node to add. May not be null.</param> + <returns>The node added.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.AppendChildren(HtmlAgilityPack.HtmlNodeCollection)"> + <summary> + Adds the specified node to the end of the list of children of this node. + </summary> + <param name="newChildren">The node list to add. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.GetAttributeValue(System.String,System.String)"> + <summary> + Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + </summary> + <param name="name">The name of the attribute to get. May not be null.</param> + <param name="def">The default value to return if not found.</param> + <returns>The value of the attribute if found, the default value if not found.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.GetAttributeValue(System.String,System.Int32)"> + <summary> + Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + </summary> + <param name="name">The name of the attribute to get. May not be null.</param> + <param name="def">The default value to return if not found.</param> + <returns>The value of the attribute if found, the default value if not found.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.GetAttributeValue(System.String,System.Boolean)"> + <summary> + Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + </summary> + <param name="name">The name of the attribute to get. May not be null.</param> + <param name="def">The default value to return if not found.</param> + <returns>The value of the attribute if found, the default value if not found.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.SetAttributeValue(System.String,System.String)"> + <summary> + Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. + </summary> + <param name="name">The name of the attribute to set. May not be null.</param> + <param name="value">The value for the attribute.</param> + <returns>The corresponding attribute instance.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.WriteTo(System.IO.TextWriter)"> + <summary> + Saves the current node to the specified TextWriter. + </summary> + <param name="outText">The TextWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.WriteTo(System.Xml.XmlWriter)"> + <summary> + Saves the current node to the specified XmlWriter. + </summary> + <param name="writer">The XmlWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.WriteContentTo(System.IO.TextWriter)"> + <summary> + Saves all the children of the node to the specified TextWriter. + </summary> + <param name="outText">The TextWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.WriteTo"> + <summary> + Saves the current node to a string. + </summary> + <returns>The saved string.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNode.WriteContentTo"> + <summary> + Saves all the children of the node to a string. + </summary> + <returns>The saved string.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.Id"> + <summary> + Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.Line"> + <summary> + Gets the line number of this node in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.LinePosition"> + <summary> + Gets the column number of this node in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.StreamPosition"> + <summary> + Gets the stream position of this node in the document, relative to the start of the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.Closed"> + <summary> + Gets a value indicating if this node has been closed or not. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.Name"> + <summary> + Gets or sets this node's name. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.InnerText"> + <summary> + Gets or Sets the text between the start and end tags of the object. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.InnerHtml"> + <summary> + Gets or Sets the HTML between the start and end tags of the object. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.OuterHtml"> + <summary> + Gets or Sets the object and its content in HTML. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.NextSibling"> + <summary> + Gets the HTML node immediately following this element. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.PreviousSibling"> + <summary> + Gets the node immediately preceding this node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.FirstChild"> + <summary> + Gets the first child of the node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.LastChild"> + <summary> + Gets the last child of the node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.NodeType"> + <summary> + Gets the type of this node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.ParentNode"> + <summary> + Gets the parent of this node (for nodes that can have parents). + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.OwnerDocument"> + <summary> + Gets the HtmlDocument to which this node belongs. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.ChildNodes"> + <summary> + Gets all the children of the node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.HasAttributes"> + <summary> + Gets a value indicating whether the current node has any attributes. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.HasClosingAttributes"> + <summary> + Gets a value indicating whether the current node has any attributes on the closing tag. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.HasChildNodes"> + <summary> + Gets a value indicating whether this node has any child nodes. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.Attributes"> + <summary> + Gets the collection of HTML attributes for this node. May not be null. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNode.ClosingAttributes"> + <summary> + Gets the collection of HTML attributes for the closing tag. May not be null. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlCommentNode.InnerHtml"> + <summary> + Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlCommentNode.OuterHtml"> + <summary> + Gets or Sets the object and its content in HTML. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlCommentNode.Comment"> + <summary> + Gets or Sets the comment text of the node. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlDocument"> + <summary> + Represents a complete HTML document. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionComputeChecksum"> + <summary> + Defines if a checksum must be computed for the document while parsing. Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionReadEncoding"> + <summary> + Defines if declared encoding must be read from the document. + Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + Default is true. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionCheckSyntax"> + <summary> + Defines if non closed nodes will be checked at the end of parsing. Default is true. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionUseIdAttribute"> + <summary> + Defines if the 'id' attribute must be specifically used. Default is true. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionWriteEmptyNodes"> + <summary> + Defines if empty nodes must be written as closed during output. Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionOutputAsXml"> + <summary> + Defines if output must conform to XML, instead of HTML. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionOutputUpperCase"> + <summary> + Defines if name must be output in uppercase. Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionOutputOptimizeAttributeValues"> + <summary> + Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionAddDebuggingAttributes"> + <summary> + Adds Debugging attributes to node. Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionExtractErrorSourceText"> + <summary> + Defines if source text must be extracted while parsing errors. + If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. + Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionAutoCloseOnEnd"> + <summary> + Defines if closing for non closed nodes must be done at the end or directly in the document. + Setting this to true can actually change how browsers render the page. Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionFixNestedTags"> + <summary> + Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionExtractErrorSourceTextMaxLength"> + <summary> + Defines the maximum length of source text or parse errors. Default is 100. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionDefaultStreamEncoding"> + <summary> + Defines the default stream encoding to use. Default is System.Text.Encoding.Default. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlDocument.OptionStopperNodeName"> + <summary> + Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.#ctor"> + <summary> + Creates an instance of an HTML document. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.HtmlEncode(System.String)"> + <summary> + Applies HTML encoding to a specified string. + </summary> + <param name="html">The input string to encode. May not be null.</param> + <returns>The encoded string.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncoding(System.IO.Stream)"> + <summary> + Detects the encoding of an HTML stream. + </summary> + <param name="stream">The input stream. May not be null.</param> + <returns>The detected encoding.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncoding(System.String)"> + <summary> + Detects the encoding of an HTML file. + </summary> + <param name="path">Path for the file containing the HTML document to detect. May not be null.</param> + <returns>The detected encoding.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncodingHtml(System.String)"> + <summary> + Detects the encoding of an HTML text. + </summary> + <param name="html">The input html text. May not be null.</param> + <returns>The detected encoding.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncoding(System.IO.TextReader)"> + <summary> + Detects the encoding of an HTML text provided on a TextReader. + </summary> + <param name="reader">The TextReader used to feed the HTML. May not be null.</param> + <returns>The detected encoding.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream)"> + <summary> + Loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Boolean)"> + <summary> + Loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Text.Encoding)"> + <summary> + Loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean)"> + <summary> + Loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32)"> + <summary> + Loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + <param name="buffersize">The minimum buffer size.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String)"> + <summary> + Loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Boolean)"> + <summary> + Loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read. May not be null.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Text.Encoding)"> + <summary> + Loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read. May not be null.</param> + <param name="encoding">The character encoding to use. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Text.Encoding,System.Boolean)"> + <summary> + Loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read. May not be null.</param> + <param name="encoding">The character encoding to use. May not be null.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.String,System.Text.Encoding,System.Boolean,System.Int32)"> + <summary> + Loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read. May not be null.</param> + <param name="encoding">The character encoding to use. May not be null.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + <param name="buffersize">The minimum buffer size.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.LoadHtml(System.String)"> + <summary> + Loads the HTML document from the specified string. + </summary> + <param name="html">String containing the HTML document to load. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncodingAndLoad(System.String)"> + <summary> + Detects the encoding of an HTML document from a file first, and then loads the file. + </summary> + <param name="path">The complete file path to be read.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.DetectEncodingAndLoad(System.String,System.Boolean)"> + <summary> + Detects the encoding of an HTML document from a file first, and then loads the file. + </summary> + <param name="path">The complete file path to be read. May not be null.</param> + <param name="detectEncoding">true to detect encoding, false otherwise.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Load(System.IO.TextReader)"> + <summary> + Loads the HTML document from the specified TextReader. + </summary> + <param name="reader">The TextReader used to feed the HTML data into the document. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.Stream)"> + <summary> + Saves the HTML document to the specified stream. + </summary> + <param name="outStream">The stream to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.Stream,System.Text.Encoding)"> + <summary> + Saves the HTML document to the specified stream. + </summary> + <param name="outStream">The stream to which you want to save. May not be null.</param> + <param name="encoding">The character encoding to use. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.String)"> + <summary> + Saves the mixed document to the specified file. + </summary> + <param name="filename">The location of the file where you want to save the document.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.String,System.Text.Encoding)"> + <summary> + Saves the mixed document to the specified file. + </summary> + <param name="filename">The location of the file where you want to save the document. May not be null.</param> + <param name="encoding">The character encoding to use. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.StreamWriter)"> + <summary> + Saves the HTML document to the specified StreamWriter. + </summary> + <param name="writer">The StreamWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.IO.TextWriter)"> + <summary> + Saves the HTML document to the specified TextWriter. + </summary> + <param name="writer">The TextWriter to which you want to save. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.Save(System.Xml.XmlWriter)"> + <summary> + Saves the HTML document to the specified XmlWriter. + </summary> + <param name="writer">The XmlWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateNavigator"> + <summary> + Creates a new XPathNavigator object for navigating this HTML document. + </summary> + <returns>An XPathNavigator object. The XPathNavigator is positioned on the root of the document.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.GetXmlName(System.String)"> + <summary> + Gets a valid XML name. + </summary> + <param name="name">Any text.</param> + <returns>A string that is a valid XML name.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.GetElementbyId(System.String)"> + <summary> + Gets the HTML node with the specified 'id' attribute value. + </summary> + <param name="id">The attribute id to match. May not be null.</param> + <returns>The HTML node with the matching id or null if not found.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateElement(System.String)"> + <summary> + Creates an HTML element node with the specified name. + </summary> + <param name="name">The qualified name of the element. May not be null.</param> + <returns>The new HTML node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateComment"> + <summary> + Creates an HTML comment node. + </summary> + <returns>The new HTML comment node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateComment(System.String)"> + <summary> + Creates an HTML comment node with the specified comment text. + </summary> + <param name="comment">The comment text. May not be null.</param> + <returns>The new HTML comment node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateTextNode"> + <summary> + Creates an HTML text node. + </summary> + <returns>The new HTML text node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateTextNode(System.String)"> + <summary> + Creates an HTML text node with the specified text. + </summary> + <param name="text">The text of the node. May not be null.</param> + <returns>The new HTML text node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateAttribute(System.String)"> + <summary> + Creates an HTML attribute with the specified name. + </summary> + <param name="name">The name of the attribute. May not be null.</param> + <returns>The new HTML attribute.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.CreateAttribute(System.String,System.String)"> + <summary> + Creates an HTML attribute with the specified name. + </summary> + <param name="name">The name of the attribute. May not be null.</param> + <param name="value">The value of the attribute.</param> + <returns>The new HTML attribute.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlDocument.IsWhiteSpace(System.Int32)"> + <summary> + Determines if the specified character is considered as a whitespace character. + </summary> + <param name="c">The character to check.</param> + <returns>true if if the specified character is considered as a whitespace character.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.Remainder"> + <summary> + Gets the remaining text. + Will always be null if OptionStopperNodeName is null. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.RemainderOffset"> + <summary> + Gets the offset of Remainder in the original Html text. + If OptionStopperNodeName is null, this will return the length of the original Html text. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.ParseErrors"> + <summary> + Gets a list of parse errors found in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.StreamEncoding"> + <summary> + Gets the document's stream encoding. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.DeclaredEncoding"> + <summary> + Gets the document's declared encoding. + Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.Encoding"> + <summary> + Gets the document's output encoding. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.DocumentNode"> + <summary> + Gets the root node of the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlDocument.CheckSum"> + <summary> + Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlElementFlag"> + <summary> + Flags that describe the behavior of an Element node. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlElementFlag.CData"> + <summary> + The node is a CDATA node. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlElementFlag.Empty"> + <summary> + The node is empty. META or IMG are example of such nodes. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlElementFlag.Closed"> + <summary> + The node will automatically be closed during parsing. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlElementFlag.CanOverlap"> + <summary> + The node can overlap. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlEntity"> + <summary> + A utility class to replace special characters by entities and vice-versa. + Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(HtmlAgilityPack.HtmlNode)"> + <summary> + Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. + </summary> + <param name="node">The node to entitize.</param> + <returns>An entitized cloned node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(System.String)"> + <summary> + Replace characters above 127 by entities. + </summary> + <param name="text">The source text.</param> + <returns>The result text.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(System.String,System.Boolean)"> + <summary> + Replace characters above 127 by entities. + </summary> + <param name="text">The source text.</param> + <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> + <returns>The result text.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlEntity.Entitize(System.String,System.Boolean,System.Boolean)"> + <summary> + Replace characters above 127 by entities. + </summary> + <param name="text">The source text.</param> + <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> + <param name="entitizeQuotAmpAndLtGt">If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized.</param> + <returns>The result text</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlEntity.DeEntitize(System.String)"> + <summary> + Replace known entities by characters. + </summary> + <param name="text">The source text.</param> + <returns>The result text.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlEntity.EntityName"> + <summary> + A collection of entities indexed by name. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlEntity.EntityValue"> + <summary> + A collection of entities indexed by value. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlNodeCollection"> + <summary> + Represents a combined list and collection of HTML nodes. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeCollection.GetEnumerator"> + <summary> + Returns an enumerator that can iterate through the list. + </summary> + <returns>An IEnumerator for the entire list.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeCollection.Count"> + <summary> + Gets the number of elements actually contained in the list. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeCollection.Item(System.Int32)"> + <summary> + Gets the node at the specified index. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeCollection.Item(HtmlAgilityPack.HtmlNode)"> + <summary> + Gets a given node from the list. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator"> + <summary> + Represents an enumerator that can iterate through the list. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.Reset"> + <summary> + Sets the enumerator to its initial position, which is before the first element in the collection. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.MoveNext"> + <summary> + Advances the enumerator to the next element of the collection. + </summary> + <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.Current"> + <summary> + Gets the current element in the collection. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeCollection.HtmlNodeEnumerator.System#Collections#IEnumerator#Current"> + <summary> + Gets the current element in the collection. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlNodeNavigator"> + <summary> + Represents an HTML navigator on an HTML document seen as a data store. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Boolean)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Text.Encoding)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Text.Encoding,System.Boolean)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + <param name="buffersize">The minimum buffer size.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. + </summary> + <param name="reader">The TextReader used to feed the HTML data into the document.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Boolean)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Text.Encoding)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="encoding">The character encoding to use.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Text.Encoding,System.Boolean)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.#ctor(System.String,System.Text.Encoding,System.Boolean,System.Int32)"> + <summary> + Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + <param name="buffersize">The minimum buffer size.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNext"> + <summary> + Moves to the next sibling of the current node. + </summary> + <returns>true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToPrevious"> + <summary> + Moves to the previous sibling of the current node. + </summary> + <returns>true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirst"> + <summary> + Moves to the first sibling of the current node. + </summary> + <returns>true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirstChild"> + <summary> + Moves to the first child of the current node. + </summary> + <returns>true if there is a first child node, otherwise false.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToParent"> + <summary> + Moves to the parent of the current node. + </summary> + <returns>true if there is a parent node, otherwise false.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToRoot"> + <summary> + Moves to the root node to which the current node belongs. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveTo(System.Xml.XPath.XPathNavigator)"> + <summary> + Moves to the same position as the specified HtmlNavigator. + </summary> + <param name="other">The HtmlNavigator positioned on the node that you want to move to.</param> + <returns>true if successful, otherwise false. If false, the position of the navigator is unchanged.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToId(System.String)"> + <summary> + Moves to the node that has an attribute of type ID whose value matches the specified string. + </summary> + <param name="id">A string representing the ID value of the node to which you want to move. This argument does not need to be atomized.</param> + <returns>true if the move was successful, otherwise false. If false, the position of the navigator is unchanged.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.IsSamePosition(System.Xml.XPath.XPathNavigator)"> + <summary> + Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. + </summary> + <param name="other">The HtmlNavigator that you want to compare against.</param> + <returns>true if the two navigators have the same position, otherwise, false.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.Clone"> + <summary> + Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. + </summary> + <returns>A new HtmlNavigator object positioned at the same node as the original HtmlNavigator.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.GetAttribute(System.String,System.String)"> + <summary> + Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. + </summary> + <param name="localName">The local name of the HTML attribute.</param> + <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> + <returns>The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToAttribute(System.String,System.String)"> + <summary> + Moves to the HTML attribute with matching LocalName and NamespaceURI. + </summary> + <param name="localName">The local name of the HTML attribute.</param> + <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> + <returns>true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirstAttribute"> + <summary> + Moves to the first HTML attribute. + </summary> + <returns>true if the navigator is successful moving to the first HTML attribute, otherwise, false.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNextAttribute"> + <summary> + Moves to the next HTML attribute. + </summary> + <returns></returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.GetNamespace(System.String)"> + <summary> + Returns the value of the namespace node corresponding to the specified local name. + Always returns string.Empty for the HtmlNavigator implementation. + </summary> + <param name="name">The local name of the namespace node.</param> + <returns>Always returns string.Empty for the HtmlNavigator implementation.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNamespace(System.String)"> + <summary> + Moves the XPathNavigator to the namespace node with the specified local name. + Always returns false for the HtmlNavigator implementation. + </summary> + <param name="name">The local name of the namespace node.</param> + <returns>Always returns false for the HtmlNavigator implementation.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToFirstNamespace(System.Xml.XPath.XPathNamespaceScope)"> + <summary> + Moves the XPathNavigator to the first namespace node of the current element. + Always returns false for the HtmlNavigator implementation. + </summary> + <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> + <returns>Always returns false for the HtmlNavigator implementation.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlNodeNavigator.MoveToNextNamespace(System.Xml.XPath.XPathNamespaceScope)"> + <summary> + Moves the XPathNavigator to the next namespace node. + Always returns falsefor the HtmlNavigator implementation. + </summary> + <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> + <returns>Always returns false for the HtmlNavigator implementation.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.LocalName"> + <summary> + Gets the name of the current HTML node without the namespace prefix. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.NamespaceURI"> + <summary> + Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.Name"> + <summary> + Gets the qualified name of the current node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.Prefix"> + <summary> + Gets the prefix associated with the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.NodeType"> + <summary> + Gets the type of the current node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.Value"> + <summary> + Gets the text value of the current node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.BaseURI"> + <summary> + Gets the base URI for the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.XmlLang"> + <summary> + Gets the xml:lang scope for the current node. + Always returns string.Empty in the case of HtmlNavigator implementation. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.IsEmptyElement"> + <summary> + Gets a value indicating whether the current node is an empty element. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.NameTable"> + <summary> + Gets the XmlNameTable associated with this implementation. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.HasAttributes"> + <summary> + Gets a value indicating whether the current node has child nodes. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.HasChildren"> + <summary> + Gets a value indicating whether the current node has child nodes. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.CurrentNode"> + <summary> + Gets the current HTML node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlNodeNavigator.CurrentDocument"> + <summary> + Gets the current HTML document. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlNodeType"> + <summary> + Represents the type of a node. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNodeType.Document"> + <summary> + The root of a document. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNodeType.Element"> + <summary> + An HTML element. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNodeType.Comment"> + <summary> + An HTML comment. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlNodeType.Text"> + <summary> + A text node is always the child of an element or a document node. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlParseError"> + <summary> + Represents a parsing error found during document parsing. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlParseError.Code"> + <summary> + Gets the type of error. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlParseError.Line"> + <summary> + Gets the line number of this error in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlParseError.LinePosition"> + <summary> + Gets the column number of this error in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlParseError.StreamPosition"> + <summary> + Gets the absolute stream position of this error in the document, relative to the start of the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlParseError.SourceText"> + <summary> + Gets the the full text of the line containing the error. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlParseError.Reason"> + <summary> + Gets a description for the error. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlParseErrorCode"> + <summary> + Represents the type of parsing error. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlParseErrorCode.TagNotClosed"> + <summary> + A tag was not closed. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlParseErrorCode.TagNotOpened"> + <summary> + A tag was not opened. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlParseErrorCode.CharsetMismatch"> + <summary> + There is a charset mismatch between stream and declared (META) encoding. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlParseErrorCode.EndTagNotRequired"> + <summary> + An end tag was not required. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlParseErrorCode.EndTagInvalidHere"> + <summary> + An end tag is invalid at this position. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlTextNode"> + <summary> + Represents an HTML text node. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlTextNode.InnerHtml"> + <summary> + Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlTextNode.OuterHtml"> + <summary> + Gets or Sets the object and its content in HTML. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlTextNode.Text"> + <summary> + Gets or Sets the text of the node. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlWeb"> + <summary> + A utility class to get HTML document from HTTP. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlWeb.PreRequest"> + <summary> + Occurs before an HTTP request is executed. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlWeb.PostResponse"> + <summary> + Occurs after an HTTP request has been executed. + </summary> + </member> + <member name="F:HtmlAgilityPack.HtmlWeb.PreHandleDocument"> + <summary> + Occurs before an HTML document is handled. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.#ctor"> + <summary> + Creates an instance of an HtmlWeb class. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.Get(System.String,System.String)"> + <summary> + Gets an HTML document from an Internet resource and saves it to the specified file. + </summary> + <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="path">The location of the file where you want to save the document.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.Get(System.String,System.String,System.String)"> + <summary> + Gets an HTML document from an Internet resource and saves it to the specified file. + </summary> + <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="path">The location of the file where you want to save the document.</param> + <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.Load(System.String)"> + <summary> + Gets an HTML document from an Internet resource. + </summary> + <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <returns>A new HTML document.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.Load(System.String,System.String)"> + <summary> + Loads an HTML document from an Internet resource. + </summary> + <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> + <returns>A new HTML document.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.GetCachePath(System.Uri)"> + <summary> + Gets the cache file path for a specified url. + </summary> + <param name="uri">The url fo which to retrieve the cache path. May not be null.</param> + <returns>The cache file path.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.GetExtensionForContentType(System.String,System.String)"> + <summary> + Gets the path extension for a given MIME content type. + </summary> + <param name="contentType">The input MIME content type.</param> + <param name="def">The default path extension to return if any error occurs.</param> + <returns>The MIME content type's path extension.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.GetContentTypeForExtension(System.String,System.String)"> + <summary> + Gets the MIME content type for a given path extension. + </summary> + <param name="extension">The input path extension.</param> + <param name="def">The default content type to return if any error occurs.</param> + <returns>The path extention's MIME content type.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.LoadHtmlAsXml(System.String,System.Xml.XmlTextWriter)"> + <summary> + Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. + </summary> + <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="writer">The XmlTextWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.LoadHtmlAsXml(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlTextWriter)"> + <summary> + Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + </summary> + <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + <param name="writer">The XmlTextWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.LoadHtmlAsXml(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlTextWriter,System.String)"> + <summary> + Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + </summary> + <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null.</param> + <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + <param name="writer">The XmlTextWriter to which you want to save.</param> + <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.CreateInstance(System.String,System.Type)"> + <summary> + Creates an instance of the given type from the specified Internet resource. + </summary> + <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="type">The requested type.</param> + <returns>An newly created instance.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.CreateInstance(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Type)"> + <summary> + Creates an instance of the given type from the specified Internet resource. + </summary> + <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + <param name="type">The requested type.</param> + <returns>An newly created instance.</returns> + </member> + <member name="M:HtmlAgilityPack.HtmlWeb.CreateInstance(System.String,System.String,System.Xml.Xsl.XsltArgumentList,System.Type,System.String)"> + <summary> + Creates an instance of the given type from the specified Internet resource. + </summary> + <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + <param name="type">The requested type.</param> + <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> + <returns>An newly created instance.</returns> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.FromCache"> + <summary> + Gets a value indicating if the last document was retrieved from the cache. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.ResponseUri"> + <summary> + Gets the URI of the Internet resource that actually responded to the request. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.CacheOnly"> + <summary> + Gets or Sets a value indicating whether to get document only from the cache. + If this is set to true and document is not found in the cache, nothing will be loaded. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.UseCookies"> + <summary> + Gets or Sets a value indicating if cookies will be stored. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.RequestDuration"> + <summary> + Gets the last request duration in milliseconds. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.AutoDetectEncoding"> + <summary> + Gets or Sets a value indicating if document encoding must be automatically detected. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.StatusCode"> + <summary> + Gets the last request status. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.StreamBufferSize"> + <summary> + Gets or Sets the size of the buffer used for memory operations. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.CachePath"> + <summary> + Gets or Sets the cache path. If null, no caching mechanism will be used. + </summary> + </member> + <member name="P:HtmlAgilityPack.HtmlWeb.UsingCache"> + <summary> + Gets or Sets a value indicating whether the caching mechanisms should be used or not. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlWeb.PreRequestHandler"> + <summary> + Represents the method that will handle the PreRequest event. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlWeb.PostResponseHandler"> + <summary> + Represents the method that will handle the PostResponse event. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlWeb.PreHandleDocumentHandler"> + <summary> + Represents the method that will handle the PreHandleDocument event. + </summary> + </member> + <member name="T:HtmlAgilityPack.HtmlWebException"> + <summary> + Represents an exception thrown by the HtmlWeb utility class. + </summary> + </member> + <member name="M:HtmlAgilityPack.HtmlWebException.#ctor(System.String)"> + <summary> + Creates an instance of the HtmlWebException. + </summary> + <param name="message">The exception's message.</param> + </member> + <member name="T:HtmlAgilityPack.MixedCodeDocument"> + <summary> + Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. + </summary> + </member> + <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenCodeStart"> + <summary> + Gets or sets the token representing code start. + </summary> + </member> + <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenCodeEnd"> + <summary> + Gets or sets the token representing code end. + </summary> + </member> + <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenDirective"> + <summary> + Gets or sets the token representing code directive. + </summary> + </member> + <member name="F:HtmlAgilityPack.MixedCodeDocument.TokenResponseWrite"> + <summary> + Gets or sets the token representing response write directive. + </summary> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.#ctor"> + <summary> + Creates a mixed code document instance. + </summary> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream)"> + <summary> + Loads a mixed code document from a stream. + </summary> + <param name="stream">The input stream.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Boolean)"> + <summary> + Loads a mixed code document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Text.Encoding)"> + <summary> + Loads a mixed code document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean)"> + <summary> + Loads a mixed code document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32)"> + <summary> + Loads a mixed code document from a stream. + </summary> + <param name="stream">The input stream.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + <param name="buffersize">The minimum buffer size.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String)"> + <summary> + Loads a mixed code document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Boolean)"> + <summary> + Loads a mixed code document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Text.Encoding)"> + <summary> + Loads a mixed code document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="encoding">The character encoding to use.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Text.Encoding,System.Boolean)"> + <summary> + Loads a mixed code document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.String,System.Text.Encoding,System.Boolean,System.Int32)"> + <summary> + Loads a mixed code document from a file. + </summary> + <param name="path">The complete file path to be read.</param> + <param name="encoding">The character encoding to use.</param> + <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + <param name="buffersize">The minimum buffer size.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.LoadHtml(System.String)"> + <summary> + Loads a mixed document from a text + </summary> + <param name="html">The text to load.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Load(System.IO.TextReader)"> + <summary> + Loads the mixed code document from the specified TextReader. + </summary> + <param name="reader">The TextReader used to feed the HTML data into the document.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.Stream)"> + <summary> + Saves the mixed document to the specified stream. + </summary> + <param name="outStream">The stream to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.Stream,System.Text.Encoding)"> + <summary> + Saves the mixed document to the specified stream. + </summary> + <param name="outStream">The stream to which you want to save.</param> + <param name="encoding">The character encoding to use.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.String)"> + <summary> + Saves the mixed document to the specified file. + </summary> + <param name="filename">The location of the file where you want to save the document.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.String,System.Text.Encoding)"> + <summary> + Saves the mixed document to the specified file. + </summary> + <param name="filename">The location of the file where you want to save the document.</param> + <param name="encoding">The character encoding to use.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.StreamWriter)"> + <summary> + Saves the mixed document to the specified StreamWriter. + </summary> + <param name="writer">The StreamWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.Save(System.IO.TextWriter)"> + <summary> + Saves the mixed document to the specified TextWriter. + </summary> + <param name="writer">The TextWriter to which you want to save.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.CreateTextFragment"> + <summary> + Create a text fragment instances. + </summary> + <returns>The newly created text fragment instance.</returns> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocument.CreateCodeFragment"> + <summary> + Create a code fragment instances. + </summary> + <returns>The newly created code fragment instance.</returns> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocument.StreamEncoding"> + <summary> + Gets the encoding of the stream used to read the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocument.CodeFragments"> + <summary> + Gets the list of code fragments in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocument.TextFragments"> + <summary> + Gets the list of text fragments in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocument.Fragments"> + <summary> + Gets the list of all fragments in the document. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocument.Code"> + <summary> + Gets the code represented by the mixed code document seen as a template. + </summary> + </member> + <member name="T:HtmlAgilityPack.MixedCodeDocumentCodeFragment"> + <summary> + Represents a fragment of code in a mixed code document. + </summary> + </member> + <member name="T:HtmlAgilityPack.MixedCodeDocumentFragment"> + <summary> + Represents a base class for fragments in a mixed code document. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.FragmentType"> + <summary> + Gets the type of fragment. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.StreamPosition"> + <summary> + Gets the fragment position in the document's stream. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.Line"> + <summary> + Gets the line number of the fragment. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.LinePosition"> + <summary> + Gets the line position (column) of the fragment. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragment.FragmentText"> + <summary> + Gets the fragement text. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentCodeFragment.Code"> + <summary> + Gets the fragment code text. + </summary> + </member> + <member name="T:HtmlAgilityPack.MixedCodeDocumentFragmentList"> + <summary> + Represents a list of mixed code fragments. + </summary> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.Append(HtmlAgilityPack.MixedCodeDocumentFragment)"> + <summary> + Appends a fragment to the list of fragments. + </summary> + <param name="newFragment">The fragment to append. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.Prepend(HtmlAgilityPack.MixedCodeDocumentFragment)"> + <summary> + Prepends a fragment to the list of fragments. + </summary> + <param name="newFragment">The fragment to append. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.Remove(HtmlAgilityPack.MixedCodeDocumentFragment)"> + <summary> + Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. + </summary> + <param name="fragment">The fragment to remove. May not be null.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.RemoveAt(System.Int32)"> + <summary> + Remove a fragment from the list of fragments, using its index in the list. + </summary> + <param name="index">The index of the fragment to remove.</param> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.RemoveAll"> + <summary> + Remove all fragments from the list. + </summary> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.GetEnumerator"> + <summary> + Gets an enumerator that can iterate through the fragment list. + </summary> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Gets an enumerator that can iterate through the fragment list. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.Count"> + <summary> + Gets the number of fragments contained in the list. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.Item(System.Int32)"> + <summary> + Gets a fragment from the list using its index. + </summary> + </member> + <member name="T:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator"> + <summary> + Represents a fragment enumerator. + </summary> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.Reset"> + <summary> + Sets the enumerator to its initial position, which is before the first element in the collection. + </summary> + </member> + <member name="M:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.MoveNext"> + <summary> + Advances the enumerator to the next element of the collection. + </summary> + <returns>true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.</returns> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.Current"> + <summary> + Gets the current element in the collection. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentFragmentList.MixedCodeDocumentFragmentEnumerator.System#Collections#IEnumerator#Current"> + <summary> + Gets the current element in the collection. + </summary> + </member> + <member name="T:HtmlAgilityPack.MixedCodeDocumentFragmentType"> + <summary> + Represents the type of fragement in a mixed code document. + </summary> + </member> + <member name="F:HtmlAgilityPack.MixedCodeDocumentFragmentType.Code"> + <summary> + The fragment contains code. + </summary> + </member> + <member name="F:HtmlAgilityPack.MixedCodeDocumentFragmentType.Text"> + <summary> + The fragment contains text. + </summary> + </member> + <member name="T:HtmlAgilityPack.MixedCodeDocumentTextFragment"> + <summary> + Represents a fragment of text in a mixed code document. + </summary> + </member> + <member name="P:HtmlAgilityPack.MixedCodeDocumentTextFragment.Text"> + <summary> + Gets the fragment text. + </summary> + </member> + <member name="T:JSBeautifyLib.JSBeautifyOptions"> + <summary> + JSBeautifyOptions + </summary> + </member> + <member name="P:JSBeautifyLib.JSBeautifyOptions.indent_size"> + <summary> + indent_size + </summary> + </member> + <member name="P:JSBeautifyLib.JSBeautifyOptions.indent_char"> + <summary> + indent_char + </summary> + </member> + <member name="P:JSBeautifyLib.JSBeautifyOptions.indent_level"> + <summary> + indent_level + </summary> + </member> + <member name="P:JSBeautifyLib.JSBeautifyOptions.preserve_newlines"> + <summary> + preserve_newlines + </summary> + </member> + <member name="T:JSBeautifyLib.JSBeautify"> + <summary> + JSBeautify + </summary> + </member> + <member name="M:JSBeautifyLib.JSBeautify.GetResult"> + <summary> + GetResult + </summary> + <returns></returns> + </member> + <member name="M:JSBeautifyLib.JSBeautify.#ctor(System.String,JSBeautifyLib.JSBeautifyOptions)"> + <summary> + JSBeautify + </summary> + <param name="js_source_text"></param> + <param name="options"></param> + </member> + <member name="T:FineUI.ToolbarCollection"> + <summary> + 工具条控件集合 + </summary> + </member> + <member name="M:FineUI.ToolbarCollection.#ctor(FineUI.PanelBase)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.MenuCheckBox"> + <summary> + 菜单项复选框控件(单选框) + </summary> + </member> + <member name="T:FineUI.MenuItem"> + <summary> + 菜单项控件基类(抽象类) + </summary> + </member> + <member name="T:FineUI.BaseMenuItem"> + <summary> + 菜单项控件基类(抽象类) + </summary> + </member> + <member name="M:FineUI.BaseMenuItem.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.BaseMenuItem.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.MenuItem.CreateChildControls"> + <summary> + 添加子控件 + </summary> + </member> + <member name="M:FineUI.MenuItem.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.MenuItem.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.MenuItem.HideOnClick"> + <summary> + 点击时隐藏菜单,可以配合使用CssStyle=cursor:default; + </summary> + </member> + <member name="P:FineUI.MenuItem.IconUrl"> + <summary> + 图标地址 + </summary> + </member> + <member name="P:FineUI.MenuItem.Icon"> + <summary> + 预定义图标 + </summary> + </member> + <member name="P:FineUI.MenuItem.Text"> + <summary> + 文本 + </summary> + </member> + <member name="P:FineUI.MenuItem.Menu"> + <summary> + 上下文菜单 + </summary> + </member> + <member name="M:FineUI.MenuCheckBox.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.MenuCheckBox.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.MenuCheckBox.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.MenuCheckBox.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.MenuCheckBox.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.MenuCheckBox.OnCheckedChanged(FineUI.CheckedEventArgs)"> + <summary> + 触发复选框状态改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.MenuCheckBox.GroupName"> + <summary> + 分组名(如果指定分组名,则此控件被渲染为单选框) + </summary> + </member> + <member name="P:FineUI.MenuCheckBox.Checked"> + <summary> + [AJAX属性]是否选中 + </summary> + </member> + <member name="P:FineUI.MenuCheckBox.AutoPostBack"> + <summary> + 是否自动回发 + </summary> + </member> + <member name="E:FineUI.MenuCheckBox.CheckedChanged"> + <summary> + 复选框状态改变事件(需要启用AutoPostBack) + </summary> + </member> + <member name="T:FineUI.Timer"> + <summary> + 定时器控件 + </summary> + </member> + <member name="M:FineUI.Timer.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Timer.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Timer.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Timer.GetEnabledPropertyChangedScript"> + <summary> + 获取 Hidden 属性改变的 JavaScript 脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Timer.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.Timer.OnTick(System.EventArgs)"> + <summary> + 触发定时事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.Timer.RenderWrapperNode"> + <summary> + 不向页面输出控件的外部容器 + </summary> + </member> + <member name="P:FineUI.Timer.Interval"> + <summary> + 定时间隔(单位:秒) + </summary> + </member> + <member name="E:FineUI.Timer.Tick"> + <summary> + 定时事件 + </summary> + </member> + <member name="T:FineUI.TooltipField"> + <summary> + 支持提示的表单字段基类(抽象类) + </summary> + </member> + <member name="M:FineUI.TooltipField.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.TooltipField.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TooltipField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.TooltipField.ResolveTooltip(FineUI.HtmlNodeBuilder)"> + <summary> + 添加提示信息 + </summary> + <param name="htmlBuilder">HtmlNodeBuilder实例</param> + </member> + <member name="P:FineUI.TooltipField.ToolTip"> + <summary> + [AJAX属性]提示文本 + </summary> + </member> + <member name="P:FineUI.TooltipField.ToolTipTitle"> + <summary> + [AJAX属性]提示文本的标题 + </summary> + </member> + <member name="P:FineUI.TooltipField.ToolTipAutoHide"> + <summary> + [AJAX属性]是否自动隐藏提示信息 + </summary> + </member> + <member name="T:FineUI.UserControlConnector"> + <summary> + 用户控件的容器 + </summary> + </member> + <member name="M:FineUI.UserControlConnector.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.UserControlConnector.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.UserControlConnector.GetFirstChildUserControl(System.Web.UI.ControlCollection)"> + <summary> + 取得第一个子控件 + </summary> + <param name="controls"></param> + <returns></returns> + </member> + <member name="P:FineUI.UserControlConnector.RenderWrapperNode"> + <summary> + 不向页面输出控件的外部容器 + </summary> + </member> + <member name="T:FineUI.RadioItem"> + <summary> + 单项按钮项 + </summary> + </member> + <member name="M:FineUI.RadioItem.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.RadioItem.#ctor(System.String,System.String)"> + <summary> + 构造函数 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + </member> + <member name="M:FineUI.RadioItem.#ctor(System.String,System.String,System.Boolean)"> + <summary> + 构造函数 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + <param name="selected">是否选中</param> + </member> + <member name="P:FineUI.RadioItem.Selected"> + <summary> + 是否选中 + </summary> + </member> + <member name="P:FineUI.RadioItem.Text"> + <summary> + 显示的文本 + </summary> + </member> + <member name="P:FineUI.RadioItem.Value"> + <summary> + 值 + </summary> + </member> + <member name="T:FineUI.RadioItemCollection"> + <summary> + 单选项集合 + </summary> + </member> + <member name="M:FineUI.RadioItemCollection.FindByText(System.String)"> + <summary> + 通过文本查找单选项 + </summary> + <param name="text">文本</param> + <returns>单选项</returns> + </member> + <member name="M:FineUI.RadioItemCollection.FindByText(System.String,System.Boolean)"> + <summary> + 通过文本查找单选项 + </summary> + <param name="text">文本</param> + <param name="stripHtml">是否去除HTML标签</param> + <returns>单选项</returns> + </member> + <member name="M:FineUI.RadioItemCollection.FindByValue(System.String)"> + <summary> + 通过值查找单选项 + </summary> + <param name="value">值</param> + <returns>单选项</returns> + </member> + <member name="M:FineUI.RadioItemCollection.Add(System.String,System.String)"> + <summary> + 添加单选项 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + <returns>新元素的插入位置</returns> + </member> + <member name="T:FineUI.Confirm"> + <summary> + 确认对话框帮助类(静态类) + </summary> + </member> + <member name="F:FineUI.Confirm.DefaultIcon"> + <summary> + 确认对话框默认图标 + </summary> + </member> + <member name="M:FineUI.Confirm.Show(System.String)"> + <summary> + 显示消息框 + </summary> + <param name="message"></param> + </member> + <member name="M:FineUI.Confirm.Show(System.String,System.String)"> + <summary> + 显示消息框 + </summary> + <param name="message"></param> + <param name="title"></param> + </member> + <member name="M:FineUI.Confirm.Show(System.String,FineUI.MessageBoxIcon)"> + <summary> + 显示消息框 + </summary> + <param name="message"></param> + <param name="icon"></param> + </member> + <member name="M:FineUI.Confirm.Show(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 显示消息框 + </summary> + <param name="message"></param> + <param name="title"></param> + <param name="icon"></param> + </member> + <member name="M:FineUI.Confirm.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取显示确认对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Confirm.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,System.String)"> + <summary> + 获取显示确认对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">对话框图标</param> + <param name="okScriptstring">点击确定按钮执行的客户端脚本</param> + <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Confirm.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,System.String,FineUI.Target)"> + <summary> + 获取显示确认对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + <param name="target">弹出对话框的目标页面</param> + <returns>客户端脚本</returns> + </member> + <member name="T:FineUI.ActiveWindow"> + <summary> + 当前活动窗体帮助类(静态类) + </summary> + </member> + <member name="M:FineUI.ActiveWindow.GetWriteBackValueReference(System.String[])"> + <summary> + 获取将values值写回控件的客户端脚本 + </summary> + <param name="values">需要写回的字符串列表</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ActiveWindow.GetHideReference"> + <summary> + 获取关闭当前激活窗体的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ActiveWindow.GetHideRefreshReference"> + <summary> + 获取关闭当前激活窗体并刷新父页面的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ActiveWindow.GetHidePostBackReference"> + <summary> + 获取关闭当前激活窗体并回发父页面的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ActiveWindow.GetHidePostBackReference(System.String)"> + <summary> + 获取关闭当前激活窗体并回发父页面的客户端脚本 + </summary> + <param name="argument">回发参数</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.ActiveWindow.GetHideExecuteScriptReference(System.String)"> + <summary> + 获取关闭当前激活窗体并执行脚本的客户端脚本 + </summary> + <param name="argument">回发参数</param> + <returns>客户端脚本</returns> + </member> + <member name="T:FineUI.MenuButton"> + <summary> + 菜单项按钮控件 + </summary> + </member> + <member name="M:FineUI.MenuButton.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.MenuButton.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.MenuButton.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.MenuButton.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.MenuButton.OnClick(System.EventArgs)"> + <summary> + 触发按钮点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.MenuButton.EnablePostBack"> + <summary> + 是否可以回发 + </summary> + </member> + <member name="P:FineUI.MenuButton.OnClientClick"> + <summary> + 点击按钮时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.MenuButton.ValidateForms"> + <summary> + 提交之前需要验证的表单名称列表 + </summary> + </member> + <member name="P:FineUI.MenuButton.ValidateTarget"> + <summary> + 验证失败时提示对话框弹出位置 + </summary> + </member> + <member name="P:FineUI.MenuButton.ValidateMessageBox"> + <summary> + 验证失败时是否出现提示对话框 + </summary> + </member> + <member name="P:FineUI.MenuButton.ConfirmTitle"> + <summary> + 确认对话框标题 + </summary> + </member> + <member name="P:FineUI.MenuButton.ConfirmText"> + <summary> + 确认对话框内容 + </summary> + </member> + <member name="P:FineUI.MenuButton.ConfirmIcon"> + <summary> + 确认对话框提示图标 + </summary> + </member> + <member name="P:FineUI.MenuButton.ConfirmTarget"> + <summary> + 确认对话框弹出位置 + </summary> + </member> + <member name="E:FineUI.MenuButton.Click"> + <summary> + 按钮点击事件 + </summary> + </member> + <member name="T:FineUI.MenuText"> + <summary> + 菜单项文本控件 + </summary> + </member> + <member name="M:FineUI.MenuText.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.MenuText.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.MenuSeparator"> + <summary> + 菜单项分隔符控件 + </summary> + </member> + <member name="M:FineUI.MenuSeparator.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.MenuSeparator.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.MenuHyperLink"> + <summary> + 菜单项超链接控件 + </summary> + </member> + <member name="M:FineUI.MenuHyperLink.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.MenuHyperLink.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.MenuHyperLink.NavigateUrl"> + <summary> + 链接地址 + </summary> + </member> + <member name="P:FineUI.MenuHyperLink.Target"> + <summary> + 链接目标 + </summary> + </member> + <member name="T:FineUI.MenuItemCollection"> + <summary> + 菜单项控件集合 + </summary> + </member> + <member name="M:FineUI.MenuItemCollection.#ctor(FineUI.Menu)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.SplitButton"> + <summary> + 带下拉列表的按钮 + </summary> + </member> + <member name="T:FineUI.Button"> + <summary> + 按钮控件 + </summary> + </member> + <member name="M:FineUI.Button.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Button.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Button.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Button.ResolveClientScript(System.String[],FineUI.Target,System.Boolean,System.Boolean,System.String,System.String,System.String,FineUI.MessageBoxIcon,FineUI.Target,System.String,System.String)"> + <summary> + 获取按钮客户端点击事件的脚本 + </summary> + <param name="validateForms">验证表单列表</param> + <param name="validateTarget">表单验证提示消息目标页面</param> + <param name="validateMessageBox">是否显示表单验证提示对话框</param> + <param name="enablePostBack">启用回发</param> + <param name="postBackEventReference">回发脚本</param> + <param name="confirmText">确认对话框消息</param> + <param name="confirmTitle">确认对话框标题</param> + <param name="confirmIcon">确认对话框图标</param> + <param name="confirmTarget">确认对话框目标页面</param> + <param name="onClientClick">自定义客户端点击脚本</param> + <param name="disableControlJavascriptID">需要禁用的控件客户端ID</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Button.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.Button.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.Button.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.Button.OnClick(System.EventArgs)"> + <summary> + 触发按钮点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.Button.DisableControlBeforePostBack"> + <summary> + 回发之前禁用按钮(防止重复提交) + </summary> + </member> + <member name="P:FineUI.Button.EnablePostBack"> + <summary> + 是否可以回发 + </summary> + </member> + <member name="P:FineUI.Button.Pressed"> + <summary> + [AJAX属性]是否被按下 + </summary> + </member> + <member name="P:FineUI.Button.EnablePress"> + <summary> + 是否可以按下 + </summary> + </member> + <member name="P:FineUI.Button.OnClientClick"> + <summary> + [AJAX属性]点击按钮时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.Button.Icon"> + <summary> + [AJAX属性]预定义图标 + </summary> + </member> + <member name="P:FineUI.Button.Size"> + <summary> + 按钮的大小 + </summary> + </member> + <member name="P:FineUI.Button.IconUrl"> + <summary> + 图标地址 + </summary> + </member> + <member name="P:FineUI.Button.IconAlign"> + <summary> + 图标摆放位置 + </summary> + </member> + <member name="P:FineUI.Button.Text"> + <summary> + [AJAX属性]按钮文本 + </summary> + </member> + <member name="P:FineUI.Button.ToolTip"> + <summary> + [AJAX属性]提示文本 + </summary> + </member> + <member name="P:FineUI.Button.ToolTipType"> + <summary> + 提示文本类型 + </summary> + </member> + <member name="P:FineUI.Button.TabIndex"> + <summary> + Tab键索引 + </summary> + </member> + <member name="P:FineUI.Button.Type"> + <summary> + 按钮类型 + </summary> + </member> + <member name="P:FineUI.Button.ValidateForms"> + <summary> + 需要验证的表单名称列表(逗号分隔) + </summary> + </member> + <member name="P:FineUI.Button.ValidateTarget"> + <summary> + 验证失败时提示对话框弹出位置 + </summary> + </member> + <member name="P:FineUI.Button.ValidateMessageBox"> + <summary> + 验证失败时是否出现提示对话框 + </summary> + </member> + <member name="P:FineUI.Button.ConfirmTitle"> + <summary> + [AJAX属性]确认对话框标题 + </summary> + </member> + <member name="P:FineUI.Button.ConfirmText"> + <summary> + [AJAX属性]确认对话框内容 + </summary> + </member> + <member name="P:FineUI.Button.ConfirmIcon"> + <summary> + [AJAX属性]确认对话框提示图标 + </summary> + </member> + <member name="P:FineUI.Button.ConfirmTarget"> + <summary> + [AJAX属性]确认对话框弹出位置 + </summary> + </member> + <member name="P:FineUI.Button.MenuID"> + <summary> + 按钮的上下文菜单 + </summary> + </member> + <member name="P:FineUI.Button.Menu"> + <summary> + 按钮的上下文菜单 + </summary> + </member> + <member name="E:FineUI.Button.Click"> + <summary> + 按钮点击事件 + </summary> + </member> + <member name="M:FineUI.SplitButton.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.SplitButton.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.Menu"> + <summary> + 菜单控件 + </summary> + </member> + <member name="M:FineUI.Menu.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Menu.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.Menu.RenderWrapperNode"> + <summary> + 不向页面输出控件的外部容器 + </summary> + </member> + <member name="P:FineUI.Menu.Items"> + <summary> + 菜单项集合 + </summary> + </member> + <member name="T:FineUI.PageManager"> + <summary> + 页面配置管理器(每个页面必须包含一个 PageManager 控件) + </summary> + </member> + <member name="M:FineUI.PageManager.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染控件的开始标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.PageManager.RenderEndTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染控件的结束标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.PageManager.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.PageManager.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.PageManager.GetCustomEventReference(System.String)"> + <summary> + 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + </summary> + <param name="eventArgument">事件参数</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.PageManager.GetCustomEventReference(System.String,System.Boolean)"> + <summary> + 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + </summary> + <param name="eventArgument">事件参数</param> + <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.PageManager.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.PageManager.OnCustomEvent(FineUI.CustomEventArgs)"> + <summary> + 触发自定义事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.PageManager.Enabled"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.PageManager.Hidden"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.PageManager.Visible"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.PageManager.HideMode"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.PageManager.PageLoadingImageUrl"> + <summary> + 自定义页面加载图片 + </summary> + </member> + <member name="P:FineUI.PageManager.AutoSizePanelID"> + <summary> + 自动调整此容器的宽度和高度,以填充整个页面 + </summary> + </member> + <member name="P:FineUI.PageManager.HideScrollbars"> + <summary> + 是否隐藏滚动条 + </summary> + </member> + <member name="P:FineUI.PageManager.ExecuteOnReadyWhenPostBack"> + <summary> + 每次页面回发后总是执行onReady脚本(包括Ajax局部回发) + </summary> + </member> + <member name="P:FineUI.PageManager.EnablePageLoading"> + <summary> + 是否启用页面加载标示 + </summary> + </member> + <member name="P:FineUI.PageManager.AjaxAspnetControls"> + <summary> + 需要在AJAX回发时更新的Asp.net控件列表(逗号分隔) + </summary> + </member> + <member name="P:FineUI.PageManager.AjaxGridClientIDs"> + <summary> + 本次AJAX请求过程中需要更新TemplateField的表格 + </summary> + </member> + <member name="P:FineUI.PageManager.AjaxGridReloadedClientIDs"> + <summary> + 本次AJAX请求过程中重新加载的表格 + </summary> + </member> + <member name="P:FineUI.PageManager.EnableFormChangeConfirm"> + <summary> + 是否启用表单改变确认对话框 + </summary> + </member> + <member name="P:FineUI.PageManager.Theme"> + <summary> + 样式 + </summary> + </member> + <member name="P:FineUI.PageManager.CustomThemeBasePath"> + <summary> + 自定义样式的根路径 + </summary> + </member> + <member name="P:FineUI.PageManager.CustomTheme"> + <summary> + 自定义样式的名称 + </summary> + </member> + <member name="P:FineUI.PageManager.Language"> + <summary> + 语言 + </summary> + </member> + <member name="P:FineUI.PageManager.EnableAjax"> + <summary> + 是否启用Ajax + </summary> + </member> + <member name="P:FineUI.PageManager.EnableAjaxLoading"> + <summary> + 是否启用Ajax正在加载提示 + </summary> + </member> + <member name="P:FineUI.PageManager.AjaxLoadingType"> + <summary> + Ajax正在加载提示的类型 + </summary> + </member> + <member name="P:FineUI.PageManager.AjaxTimeout"> + <summary> + Ajax超时时间(单位:秒,默认:60秒) + </summary> + </member> + <member name="P:FineUI.PageManager.EnableFStateCompress"> + <summary> + 是否启用FState压缩(默认为false) + </summary> + </member> + <member name="P:FineUI.PageManager.IEEdge"> + <summary> + 是否向页面输出IE=edge标识 + </summary> + </member> + <member name="P:FineUI.PageManager.ValidateForms"> + <summary> + 需要验证的表单名称列表(逗号分隔),需配合CustomEvent使用 + </summary> + </member> + <member name="P:FineUI.PageManager.ValidateTarget"> + <summary> + 验证失败时提示对话框弹出位置,需配合CustomEvent使用 + </summary> + </member> + <member name="P:FineUI.PageManager.ValidateMessageBox"> + <summary> + 验证失败时是否出现提示对话框,需配合CustomEvent使用 + </summary> + </member> + <member name="P:FineUI.PageManager.FormMessageTarget"> + <summary> + 表单中消息的位置 + </summary> + </member> + <member name="P:FineUI.PageManager.FormLabelAlign"> + <summary> + 表单中标签的位置 + </summary> + </member> + <member name="P:FineUI.PageManager.FormOffsetRight"> + <summary> + 表单中右侧的空白宽度 + </summary> + </member> + <member name="P:FineUI.PageManager.FormLabelWidth"> + <summary> + 表单中字段标签的宽度 + </summary> + </member> + <member name="P:FineUI.PageManager.FormLabelSeparator"> + <summary> + 表单中字段与标签的分隔符 + </summary> + </member> + <member name="P:FineUI.PageManager.Instance"> + <summary> + PageManager在当前页面的实例 + </summary> + </member> + <member name="E:FineUI.PageManager.CustomEvent"> + <summary> + 自定义事件 + </summary> + </member> + <member name="T:FineUI.Image"> + <summary> + 图片控件 + </summary> + </member> + <member name="M:FineUI.Image.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Image.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Image.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.Image.Enabled"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Image.TabIndex"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Image.ImageUrl"> + <summary> + [AJAX属性]链接地址 + </summary> + </member> + <member name="P:FineUI.Image.Icon"> + <summary> + [AJAX属性]预定义图标 + </summary> + </member> + <member name="P:FineUI.Image.ImageWidth"> + <summary> + [AJAX属性]图片的宽度 + </summary> + </member> + <member name="P:FineUI.Image.ImageHeight"> + <summary> + [AJAX属性]图片的高度 + </summary> + </member> + <member name="P:FineUI.Image.ImageCssClass"> + <summary> + [AJAX属性]图片的样式类 + </summary> + </member> + <member name="P:FineUI.Image.ImageCssStyle"> + <summary> + [AJAX属性]图片的样式 + </summary> + </member> + <member name="P:FineUI.Image.ImageAlt"> + <summary> + [AJAX属性]图片的Alt + </summary> + </member> + <member name="T:FineUI.FileUpload"> + <summary> + 文件上传控件 + </summary> + </member> + <member name="M:FineUI.FileUpload.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.FileUpload.SaveAs(System.String)"> + <summary> + 将上载文件的内容保存到 Web 服务器上的指定路径 + </summary> + <param name="filename">保存的文件的名称</param> + </member> + <member name="M:FineUI.FileUpload.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.FileUpload.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.FileUpload.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.FileUpload.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.FileUpload.OnFileSelected(System.EventArgs)"> + <summary> + 触发文件选定事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.FileUpload.Text"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.FileUpload.AcceptFileTypes"> + <summary> + 允许上传的文件类型(仅部分浏览器支持) + </summary> + </member> + <member name="P:FineUI.FileUpload.ButtonText"> + <summary> + 按钮文本 + </summary> + </member> + <member name="P:FineUI.FileUpload.ButtonOnly"> + <summary> + 是否只显示按钮,不显示只读输入框 + </summary> + </member> + <member name="P:FineUI.FileUpload.ButtonIcon"> + <summary> + 按钮图标 + </summary> + </member> + <member name="P:FineUI.FileUpload.ButtonIconUrl"> + <summary> + 按钮图标地址 + </summary> + </member> + <member name="P:FineUI.FileUpload.PostedFile"> + <summary> + 上传的文件 + </summary> + </member> + <member name="P:FineUI.FileUpload.HasFile"> + <summary> + 是否包含文件 + </summary> + </member> + <member name="P:FineUI.FileUpload.FileName"> + <summary> + 客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名) + </summary> + </member> + <member name="P:FineUI.FileUpload.ShortFileName"> + <summary> + 客户端文件名称,不包含目录路径 + </summary> + </member> + <member name="E:FineUI.FileUpload.FileSelected"> + <summary> + 文件选定事件(需要启用AutoPostBack) + </summary> + </member> + <member name="T:FineUI.HiddenField"> + <summary> + 隐藏表单控件 + </summary> + </member> + <member name="M:FineUI.HiddenField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.TwinTriggerBox"> + <summary> + 扩展文本框控件 + </summary> + </member> + <member name="M:FineUI.TwinTriggerBox.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.TwinTriggerBox.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TwinTriggerBox.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.TwinTriggerBox.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.TwinTriggerBox.OnTrigger1Click(System.EventArgs)"> + <summary> + 触发第一个触发按钮点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.TwinTriggerBox.OnTrigger2Click(System.EventArgs)"> + <summary> + 触发第二个触发按钮点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.TwinTriggerBox.EnableEdit"> + <summary> + 是否允许编辑 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.ShowTrigger"> + <summary> + 是否显示触发器 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.ShowTrigger1"> + <summary> + [AJAX属性]是否显示第一个触发器 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.ShowTrigger2"> + <summary> + [AJAX属性]是否显示第一个触发器 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.EnableTrigger1PostBack"> + <summary> + 是否可以回发第一个触发器 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.EnableTrigger2PostBack"> + <summary> + 是否可以回发第一个触发器 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.Trigger1IconUrl"> + <summary> + 第一个触发器图片 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.Trigger2IconUrl"> + <summary> + 第二个触发器图片 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.Trigger1Icon"> + <summary> + 第一个触发器图片 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.Trigger2Icon"> + <summary> + 第二个触发器图片 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.OnClientTrigger1Click"> + <summary> + 点击第一个触发器时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.TwinTriggerBox.OnClientTrigger2Click"> + <summary> + 点击第二个触发器时需要执行的客户端脚本 + </summary> + </member> + <member name="E:FineUI.TwinTriggerBox.Trigger1Click"> + <summary> + 第一个触发按钮点击事件 + </summary> + </member> + <member name="E:FineUI.TwinTriggerBox.Trigger2Click"> + <summary> + 第二个触发按钮点击事件 + </summary> + </member> + <member name="T:FineUI.LinkButton"> + <summary> + 链接按钮控件 + </summary> + </member> + <member name="M:FineUI.LinkButton.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.LinkButton.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.LinkButton.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.LinkButton.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.LinkButton.OnClick(System.EventArgs)"> + <summary> + 触发按钮点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.LinkButton.Text"> + <summary> + [AJAX属性]文本 + </summary> + </member> + <member name="P:FineUI.LinkButton.OnClientClick"> + <summary> + [AJAX属性]点击按钮时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.LinkButton.ValidateForms"> + <summary> + 提交之前需要验证的表单名称列表 + </summary> + </member> + <member name="P:FineUI.LinkButton.ValidateTarget"> + <summary> + 验证失败时提示对话框弹出位置 + </summary> + </member> + <member name="P:FineUI.LinkButton.ValidateMessageBox"> + <summary> + 验证失败时是否出现提示对话框 + </summary> + </member> + <member name="P:FineUI.LinkButton.EnablePostBack"> + <summary> + 是否可以回发 + </summary> + </member> + <member name="P:FineUI.LinkButton.EncodeText"> + <summary> + 是否对文本编码 + </summary> + </member> + <member name="P:FineUI.LinkButton.ConfirmTitle"> + <summary> + [AJAX属性]确认对话框标题 + </summary> + </member> + <member name="P:FineUI.LinkButton.ConfirmText"> + <summary> + [AJAX属性]确认对话框内容 + </summary> + </member> + <member name="P:FineUI.LinkButton.ConfirmIcon"> + <summary> + [AJAX属性]确认对话框提示图标 + </summary> + </member> + <member name="P:FineUI.LinkButton.ConfirmTarget"> + <summary> + [AJAX属性]确认对话框弹出位置 + </summary> + </member> + <member name="E:FineUI.LinkButton.Click"> + <summary> + 按钮点击事件 + </summary> + </member> + <member name="T:FineUI.RadioButtonList"> + <summary> + 单选框列表控件 + </summary> + </member> + <member name="M:FineUI.RadioButtonList.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.RadioButtonList.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.RadioButtonList.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.RadioButtonList.DataBind"> + <summary> + 绑定到数据源 + </summary> + </member> + <member name="M:FineUI.RadioButtonList.DataBindToDataTable(System.Data.DataTable)"> + <summary> + 绑定到数据表 + </summary> + <param name="dataTable"></param> + </member> + <member name="M:FineUI.RadioButtonList.DataBindToEnumerable(System.Collections.IEnumerable)"> + <summary> + 绑定到可枚举列表 + </summary> + <param name="enumerable"></param> + </member> + <member name="M:FineUI.RadioButtonList.GetPropertyValue(System.Object,System.String)"> + <summary> + 取得属性值 + </summary> + <param name="obj"></param> + <param name="propertyName"></param> + </member> + <member name="M:FineUI.RadioButtonList.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.RadioButtonList.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.RadioButtonList.OnSelectedIndexChanged(System.EventArgs)"> + <summary> + 触发选中项改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.RadioButtonList.Required"> + <summary> + 是否必填项 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.RequiredMessage"> + <summary> + 为空时提示信息 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.AutoPostBack"> + <summary> + 是否自动回发 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.ColumnNumber"> + <summary> + 渲染成几列 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.ColumnVertical"> + <summary> + 是否按照纵向顺序渲染 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.DataTextField"> + <summary> + 显示文本的数据字段 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.DataTextFormatString"> + <summary> + 显示文本的格式化字符串 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.DataValueField"> + <summary> + 显示值的数据字段 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.DataSource"> + <summary> + 数据源 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.SelectedValue"> + <summary> + [AJAX属性]选中项的值 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.SelectedIndex"> + <summary> + [AJAX属性]选中项的索引 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.SelectedItem"> + <summary> + 选中项 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.Items"> + <summary> + 单选项集合 + </summary> + </member> + <member name="P:FineUI.RadioButtonList.F_Items"> + <summary> + 保存的单选项数据(内部使用) + </summary> + </member> + <member name="E:FineUI.RadioButtonList.SelectedIndexChanged"> + <summary> + 选中项改变事件(需要启用AutoPostBack) + </summary> + </member> + <member name="T:FineUI.RadioButton"> + <summary> + 单选框控件 + </summary> + </member> + <member name="M:FineUI.RadioButton.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.RadioButton.ProcessOthersInGroup"> + <summary> + 设置本组内其他RadioButton的Checked属性为false + 简单处理,只查找和此RadioButton在同一个层级的RadioButton + </summary> + </member> + <member name="M:FineUI.RadioButton.OnInitControl"> + <summary> + 初始化控件 + </summary> + </member> + <member name="M:FineUI.RadioButton.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.RadioButton.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.RadioButton.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.RadioButton.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.RadioButton.OnCheckedChanged(FineUI.CheckedEventArgs)"> + <summary> + 触发单选框状态改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.RadioButton.Text"> + <summary> + 文本 + </summary> + </member> + <member name="P:FineUI.RadioButton.Checked"> + <summary> + [AJAX属性]是否选中 + </summary> + </member> + <member name="P:FineUI.RadioButton.GroupName"> + <summary> + 分组的名称 + </summary> + </member> + <member name="P:FineUI.RadioButton.AutoPostBack"> + <summary> + 是否自动回发 + </summary> + </member> + <member name="E:FineUI.RadioButton.CheckedChanged"> + <summary> + 单选框状态改变事件(需要启用AutoPostBack) + </summary> + </member> + <member name="T:FineUI.TriggerBox"> + <summary> + 扩展文本框控件 + </summary> + </member> + <member name="M:FineUI.TriggerBox.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TriggerBox.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.TriggerBox.OnTriggerClick(System.EventArgs)"> + <summary> + 触发按钮点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.TriggerBox.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="P:FineUI.TriggerBox.EnableEdit"> + <summary> + 是否允许编辑 + </summary> + </member> + <member name="P:FineUI.TriggerBox.ShowTrigger"> + <summary> + 是否显示触发器 + </summary> + </member> + <member name="P:FineUI.TriggerBox.EnablePostBack"> + <summary> + 是否可以回发 + </summary> + </member> + <member name="P:FineUI.TriggerBox.TriggerIconUrl"> + <summary> + 右侧按钮的图片 + </summary> + </member> + <member name="P:FineUI.TriggerBox.TriggerIcon"> + <summary> + 右侧的图标 + </summary> + </member> + <member name="P:FineUI.TriggerBox.OnClientTriggerClick"> + <summary> + 点击按钮时需要执行的客户端脚本 + </summary> + </member> + <member name="E:FineUI.TriggerBox.TriggerClick"> + <summary> + 触发按钮点击事件 + </summary> + </member> + <member name="T:FineUI.GridColumnsEditor"> + <summary> + 为设计时提供的表格列集合编辑器 + </summary> + </member> + <member name="M:FineUI.GridColumnsEditor.#ctor(System.Type)"> + <summary> + 构造函数 + </summary> + <param name="type">控件类型</param> + </member> + <member name="M:FineUI.GridColumnsEditor.CreateNewItemTypes"> + <summary> + 获取此集合编辑器可包含的数据类型 + </summary> + <returns>类型集合</returns> + </member> + <member name="T:FineUI.GridRowSelectEventArgs"> + <summary> + 表格行选中事件参数 + </summary> + </member> + <member name="M:FineUI.GridRowSelectEventArgs.#ctor(System.Int32)"> + <summary> + 构造函数 + </summary> + <param name="rowIndex">行索引</param> + </member> + <member name="P:FineUI.GridRowSelectEventArgs.RowIndex"> + <summary> + 行索引 + </summary> + </member> + <member name="T:FineUI.GridAfterEditEventArgs"> + <summary> + 表格行点击事件参数 + </summary> + </member> + <member name="M:FineUI.GridAfterEditEventArgs.#ctor(System.Int32,System.String)"> + <summary> + 构造函数 + </summary> + <param name="rowIndex">行索引</param> + /// <param name="columnID">列ID</param> + </member> + <member name="P:FineUI.GridAfterEditEventArgs.RowIndex"> + <summary> + 行索引 + </summary> + </member> + <member name="P:FineUI.GridAfterEditEventArgs.ColumnID"> + <summary> + 列ID + </summary> + </member> + <member name="T:FineUI.BaseField"> + <summary> + 表格列基类(抽象类) + </summary> + </member> + <member name="T:FineUI.GridColumn"> + <summary> + 表格列基类(抽象类) + </summary> + </member> + <member name="M:FineUI.GridColumn.GetHeaderValue"> + <summary> + 取得列头渲染后的HTML + </summary> + <returns>渲染后的HTML</returns> + </member> + <member name="M:FineUI.GridColumn.GetColumnValue(FineUI.GridRow)"> + <summary> + 取得列渲染后的HTML + </summary> + <param name="row">表格行实例</param> + <returns>渲染后的HTML</returns> + </member> + <member name="M:FineUI.GridColumn.GetColumnState(FineUI.GridRow)"> + <summary> + 获取列的状态 + </summary> + <param name="row"></param> + <returns></returns> + </member> + <member name="M:FineUI.GridColumn.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.GridColumn.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.GridColumn.AddGridColumnScript(System.String)"> + <summary> + 添加表格列的渲染脚本 + </summary> + <param name="jsContent"></param> + </member> + <member name="P:FineUI.GridColumn.Grid"> + <summary> + 表格对象 + </summary> + </member> + <member name="P:FineUI.GridColumn.ColumnIndex"> + <summary> + 列索引 + </summary> + </member> + <member name="P:FineUI.GridColumn.SortField"> + <summary> + 排序字段 + </summary> + </member> + <member name="P:FineUI.GridColumn.EnableLock"> + <summary> + 允许锁定 + </summary> + </member> + <member name="P:FineUI.GridColumn.Locked"> + <summary> + 是否处于锁定状态 + </summary> + </member> + <member name="P:FineUI.GridColumn.Hidden"> + <summary> + 是否隐藏列 + </summary> + </member> + <member name="P:FineUI.GridColumn.ColumnID"> + <summary> + 列ID(如果没有设置,则为ClientID) + </summary> + </member> + <member name="P:FineUI.GridColumn.HeaderText"> + <summary> + 标题栏显示的文字 + </summary> + </member> + <member name="P:FineUI.GridColumn.HeaderToolTip"> + <summary> + 标题栏文字的提示文本 + </summary> + </member> + <member name="P:FineUI.GridColumn.HeaderToolTipType"> + <summary> + 标题栏文字的提示文本类型 + </summary> + </member> + <member name="P:FineUI.GridColumn.Width"> + <summary> + 列宽度 + </summary> + </member> + <member name="P:FineUI.GridColumn.BoxFlex"> + <summary> + 控制子控件的尺寸(表格列使用HBox布局) + </summary> + </member> + <member name="P:FineUI.GridColumn.ExpandUnusedSpace"> + <summary> + 此列会扩展所有未使用的宽度 + </summary> + </member> + <member name="P:FineUI.GridColumn.TextAlign"> + <summary> + 文本的排列位置 + </summary> + </member> + <member name="P:FineUI.GridColumn.EnableHeaderMenu"> + <summary> + 启用表头菜单 + </summary> + </member> + <member name="P:FineUI.GridColumn.EnableColumnHide"> + <summary> + 启用隐藏列功能 + </summary> + </member> + <member name="P:FineUI.GridColumn.InnerCls"> + <summary> + 表格单元格容器样式类 + </summary> + </member> + <member name="P:FineUI.GridColumn.PersistState"> + <summary> + 本列是否需要保存状态(目前只有CheckBoxField实现了这个定义) + </summary> + </member> + <member name="M:FineUI.BaseField.GetTooltipString(FineUI.GridRow)"> + <summary> + 取得提示字符串 + </summary> + <param name="row"></param> + <returns></returns> + </member> + <member name="P:FineUI.BaseField.DataSimulateTreeLevelField"> + <summary> + 此列模拟树显示时的层次字段 + </summary> + </member> + <member name="P:FineUI.BaseField.ToolTip"> + <summary> + 提示文本 + </summary> + </member> + <member name="P:FineUI.BaseField.DataToolTipField"> + <summary> + 提示字段名称 + </summary> + </member> + <member name="P:FineUI.BaseField.DataToolTipFormatString"> + <summary> + 提示字段格式化字符串 + </summary> + </member> + <member name="T:FineUI.RenderField"> + <summary> + 表格可编辑列 + </summary> + </member> + <member name="T:FineUI.RenderBaseField"> + <summary> + 表格可编辑列的基类 + </summary> + </member> + <member name="P:FineUI.RenderBaseField.DataField"> + <summary> + 字段名称 + </summary> + </member> + <member name="M:FineUI.RenderField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.RenderField.Editor"> + <summary> + 单元格编辑控件 + </summary> + </member> + <member name="P:FineUI.RenderField.FieldType"> + <summary> + 字段类型 + </summary> + </member> + <member name="P:FineUI.RenderField.Renderer"> + <summary> + 渲染器 + </summary> + </member> + <member name="P:FineUI.RenderField.RendererArgument"> + <summary> + 渲染器的参数 + </summary> + </member> + <member name="P:FineUI.RenderField.RendererFunction"> + <summary> + 自定义渲染器函数(JavaScript函数) + </summary> + </member> + <member name="P:FineUI.RenderField.NullDisplayText"> + <summary> + 处理数据库中null值,默认为空字符串 + </summary> + </member> + <member name="P:FineUI.RenderField.HtmlEncode"> + <summary> + 显示之前进行HTML编码(默认为true) + </summary> + </member> + <member name="T:FineUI.RenderCheckField"> + <summary> + 表格可编辑复选框列 + </summary> + </member> + <member name="M:FineUI.RenderCheckField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.RowNumberField"> + <summary> + 表格数据绑定列 + </summary> + </member> + <member name="M:FineUI.RowNumberField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.RowNumberField.EnableHeaderMenu"> + <summary> + 启用表头菜单 + </summary> + </member> + <member name="P:FineUI.RowNumberField.EnableColumnHide"> + <summary> + 是否允许隐藏列 + </summary> + </member> + <member name="P:FineUI.RowNumberField.EnablePagingNumber"> + <summary> + 是否启用分页行号 + </summary> + </member> + <member name="T:FineUI.GroupField"> + <summary> + 表格分组列 + </summary> + </member> + <member name="M:FineUI.GroupField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.GroupField.Columns"> + <summary> + 列数据 + </summary> + </member> + <member name="T:FineUI.RegionPanel"> + <summary> + 区域面板控件 + </summary> + </member> + <member name="M:FineUI.RegionPanel.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.RegionPanel.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.RegionPanel.Content"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.RegionPanel.Items"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.RegionPanel.EnableIFrame"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.RegionPanel.IFrameUrl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.RegionPanel.IFrameName"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.RegionPanel.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="P:FineUI.RegionPanel.Regions"> + <summary> + 区域集合 + </summary> + </member> + <member name="T:FineUI.Accordion"> + <summary> + 手风琴控件 + </summary> + </member> + <member name="M:FineUI.Accordion.#ctor"> + <summary> + + </summary> + </member> + <member name="M:FineUI.Accordion.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Accordion.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Accordion.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.Accordion.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.Accordion.OnPaneIndexChanged(System.EventArgs)"> + <summary> + 触发面板改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.Accordion.Content"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Accordion.Items"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Accordion.EnableIFrame"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Accordion.IFrameUrl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Accordion.IFrameName"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Accordion.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="P:FineUI.Accordion.ShowCollapseTool"> + <summary> + 是否启用折叠按钮 + </summary> + </member> + <member name="P:FineUI.Accordion.EnableActiveOnTop"> + <summary> + 是否启用激活在最上面 + </summary> + </member> + <member name="P:FineUI.Accordion.EnableFill"> + <summary> + 是否启用填充整个区域 + </summary> + </member> + <member name="P:FineUI.Accordion.AutoPostBack"> + <summary> + 切换面板时是否自动回发 + </summary> + </member> + <member name="P:FineUI.Accordion.ActivePaneIndex"> + <summary> + [AJAX属性]激活面板的索引 + </summary> + </member> + <member name="P:FineUI.Accordion.ActivePane"> + <summary> + 当前激活的面板 + </summary> + </member> + <member name="P:FineUI.Accordion.Panes"> + <summary> + 手风琴面板集合 + </summary> + </member> + <member name="E:FineUI.Accordion.PaneIndexChanged"> + <summary> + 面板改变事件 + </summary> + </member> + <member name="T:FineUI.AccordionPane"> + <summary> + 手风琴面板控件 + </summary> + </member> + <member name="M:FineUI.AccordionPane.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.AccordionPane.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.AccordionPane.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.AccordionPane.EnableCollapse"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.AccordionPane.ShowHeader"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.AccordionPane.EnableHightlight"> + <summary> + 鼠标移到标题栏是否高亮显示 + </summary> + </member> + <member name="T:FineUI.AccordionPaneCollection"> + <summary> + 手风琴面板控件集合 + </summary> + </member> + <member name="M:FineUI.AccordionPaneCollection.#ctor(FineUI.Accordion)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.TreeCommandEventArgs"> + <summary> + 树节点命令事件参数 + </summary> + </member> + <member name="M:FineUI.TreeCommandEventArgs.#ctor(FineUI.TreeNode,System.String,System.String)"> + <summary> + 构造函数 + </summary> + <param name="node">树节点</param> + <param name="commandName">命令名称</param> + <param name="commandArgument">命令参数</param> + </member> + <member name="P:FineUI.TreeCommandEventArgs.Node"> + <summary> + 树实例 + </summary> + </member> + <member name="P:FineUI.TreeCommandEventArgs.NodeID"> + <summary> + 树节点ID + </summary> + </member> + <member name="P:FineUI.TreeCommandEventArgs.CommandName"> + <summary> + 命令名称 + </summary> + </member> + <member name="P:FineUI.TreeCommandEventArgs.CommandArgument"> + <summary> + 命令参数 + </summary> + </member> + <member name="T:FineUI.TreeCheckEventArgs"> + <summary> + 树节点选中事件参数 + </summary> + </member> + <member name="M:FineUI.TreeCheckEventArgs.#ctor(FineUI.TreeNode,System.Boolean)"> + <summary> + 构造函数 + </summary> + <param name="node">树节点</param> + <param name="isChecked">是否选中</param> + </member> + <member name="P:FineUI.TreeCheckEventArgs.Node"> + <summary> + 树节点 + </summary> + </member> + <member name="P:FineUI.TreeCheckEventArgs.NodeID"> + <summary> + 节点ID + </summary> + </member> + <member name="P:FineUI.TreeCheckEventArgs.Checked"> + <summary> + 是否选中 + </summary> + </member> + <member name="T:FineUI.TreeNode"> + <summary> + 树节点 + </summary> + </member> + <member name="M:FineUI.TreeNode.SetPropertyValue(System.String,System.String)"> + <summary> + 设置属性的值 + </summary> + <param name="name"></param> + <param name="value"></param> + </member> + <member name="P:FineUI.TreeNode.TreeInstance"> + <summary> + 树实例 + </summary> + </member> + <member name="P:FineUI.TreeNode.ParentNode"> + <summary> + 父节点 + </summary> + </member> + <member name="P:FineUI.TreeNode.Nodes"> + <summary> + 树节点集合 + </summary> + </member> + <member name="P:FineUI.TreeNode.EnableExpandEvent"> + <summary> + 展开树节点是否回发 + </summary> + </member> + <member name="P:FineUI.TreeNode.EnableCollapseEvent"> + <summary> + 折叠树节点是否回发 + </summary> + </member> + <member name="P:FineUI.TreeNode.EnableClickEvent"> + <summary> + 单击树节点是否回发 + </summary> + </member> + <member name="P:FineUI.TreeNode.OnClientClick"> + <summary> + 点击按钮时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.TreeNode.CommandName"> + <summary> + 命令名称 + </summary> + </member> + <member name="P:FineUI.TreeNode.CommandArgument"> + <summary> + 命令参数 + </summary> + </member> + <member name="P:FineUI.TreeNode.Checked"> + <summary> + 是否选中 + </summary> + </member> + <member name="P:FineUI.TreeNode.EnableCheckBox"> + <summary> + 是否启用复选框 + </summary> + </member> + <member name="P:FineUI.TreeNode.EnableCheckEvent"> + <summary> + 改变复选框状态是否自动回发 + </summary> + </member> + <member name="P:FineUI.TreeNode.Text"> + <summary> + 文本 + </summary> + </member> + <member name="P:FineUI.TreeNode.NodeID"> + <summary> + 树节点ID + </summary> + </member> + <member name="P:FineUI.TreeNode.Leaf"> + <summary> + 是否叶子节点 + </summary> + </member> + <member name="P:FineUI.TreeNode.Enabled"> + <summary> + 是否可用 + </summary> + </member> + <member name="P:FineUI.TreeNode.Expanded"> + <summary> + 是否展开 + </summary> + </member> + <member name="P:FineUI.TreeNode.Target"> + <summary> + 链接目标 + </summary> + </member> + <member name="P:FineUI.TreeNode.NavigateUrl"> + <summary> + 链接地址 + </summary> + </member> + <member name="P:FineUI.TreeNode.IconUrl"> + <summary> + 图标地址 + </summary> + </member> + <member name="P:FineUI.TreeNode.Icon"> + <summary> + 预定义图标 + </summary> + </member> + <member name="P:FineUI.TreeNode.ToolTip"> + <summary> + 提示文本 + </summary> + </member> + <member name="T:FineUI.TreeNodeCollection"> + <summary> + 树节点控件集合 + </summary> + </member> + <member name="M:FineUI.TreeNodeCollection.#ctor(FineUI.Tree,FineUI.TreeNode)"> + <summary> + 构造函数 + </summary> + <param name="tree">树实例</param> + <param name="parentNode">父节点</param> + </member> + <member name="M:FineUI.TreeNodeCollection.InsertItem(System.Int32,FineUI.TreeNode)"> + <summary> + 插入树节点 + </summary> + <param name="index">插入索引位置</param> + <param name="item">树节点实例</param> + </member> + <member name="M:FineUI.TreeNodeCollection.ResolveTreeNode(FineUI.TreeNode)"> + <summary> + 设置每个节点的Tree实例 + </summary> + <param name="node"></param> + </member> + <member name="T:FineUI.XmlAttributeMapping"> + <summary> + 树节点的属性映射 + </summary> + </member> + <member name="P:FineUI.XmlAttributeMapping.From"> + <summary> + 映射源 + </summary> + </member> + <member name="P:FineUI.XmlAttributeMapping.To"> + <summary> + 映射目标 + </summary> + </member> + <member name="T:FineUI.XmlAttributeMappingCollection"> + <summary> + 树节点的属性映射集合 + </summary> + </member> + <member name="T:FineUI.WindowCloseEventArgs"> + <summary> + 窗体关闭事件参数 + </summary> + </member> + <member name="M:FineUI.WindowCloseEventArgs.#ctor(System.String)"> + <summary> + 构造函数 + </summary> + <param name="closeArgument">关闭参数</param> + </member> + <member name="P:FineUI.WindowCloseEventArgs.CloseArgument"> + <summary> + 关闭参数 + </summary> + </member> + <member name="T:FineUI.GridPreRowEventArgs"> + <summary> + 表格行预绑定事件参数 + </summary> + </member> + <member name="M:FineUI.GridPreRowEventArgs.#ctor(System.Object,System.Int32)"> + <summary> + 构造函数 + </summary> + <param name="dataItem">行数据源</param> + <param name="rowIndex">行索引</param> + </member> + <member name="P:FineUI.GridPreRowEventArgs.Cancelled"> + <summary> + 是否取消添加本节点 + </summary> + </member> + <member name="P:FineUI.GridPreRowEventArgs.DataItem"> + <summary> + 行数据源(如果数据源为DataTable,则DataItem为DataRowView) + </summary> + </member> + <member name="P:FineUI.GridPreRowEventArgs.RowIndex"> + <summary> + 行索引 + </summary> + </member> + <member name="T:FineUI.GridPageEventArgs"> + <summary> + 表格分页事件参数 + </summary> + </member> + <member name="M:FineUI.GridPageEventArgs.#ctor(System.Int32)"> + <summary> + 构造函数 + </summary> + <param name="newPageIndex">新页面的索引</param> + </member> + <member name="P:FineUI.GridPageEventArgs.NewPageIndex"> + <summary> + 新页面的索引 + </summary> + </member> + <member name="T:FineUI.GridCommandEventArgs"> + <summary> + 表格行命令事件参数 + </summary> + </member> + <member name="M:FineUI.GridCommandEventArgs.#ctor(System.Int32,System.Int32,System.String,System.String)"> + <summary> + 构造函数 + </summary> + <param name="rowIndex">行索引</param> + <param name="columnIndex">列索引</param> + <param name="commandName">命令名称</param> + <param name="commandArgument">命令参数</param> + </member> + <member name="P:FineUI.GridCommandEventArgs.RowIndex"> + <summary> + 行索引 + </summary> + </member> + <member name="P:FineUI.GridCommandEventArgs.ColumnIndex"> + <summary> + 列索引 + </summary> + </member> + <member name="P:FineUI.GridCommandEventArgs.CommandName"> + <summary> + 命令名称 + </summary> + </member> + <member name="P:FineUI.GridCommandEventArgs.CommandArgument"> + <summary> + 命令参数 + </summary> + </member> + <member name="T:FineUI.GridRowEventArgs"> + <summary> + 表格行绑定事件参数 + </summary> + </member> + <member name="M:FineUI.GridRowEventArgs.#ctor(System.Object,System.Int32,System.Object[])"> + <summary> + 构造函数 + </summary> + <param name="dataItem">行数据源</param> + <param name="rowIndex">行索引</param> + <param name="values">本行各列的值</param> + </member> + <member name="P:FineUI.GridRowEventArgs.Values"> + <summary> + 本行各列的值(渲染后的HTML片段) + </summary> + </member> + <member name="P:FineUI.GridRowEventArgs.DataItem"> + <summary> + 行数据源 + </summary> + </member> + <member name="P:FineUI.GridRowEventArgs.RowIndex"> + <summary> + 行索引 + </summary> + </member> + <member name="T:FineUI.GridRowClickEventArgs"> + <summary> + 表格行点击事件参数 + </summary> + </member> + <member name="M:FineUI.GridRowClickEventArgs.#ctor(System.Int32)"> + <summary> + 构造函数 + </summary> + <param name="rowIndex">行索引</param> + </member> + <member name="P:FineUI.GridRowClickEventArgs.RowIndex"> + <summary> + 行索引 + </summary> + </member> + <member name="T:FineUI.LinkButtonField"> + <summary> + 表格链接按钮列 + </summary> + </member> + <member name="M:FineUI.LinkButtonField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.LinkButtonField.EnableHeaderMenu"> + <summary> + 启用表头菜单 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.EnableColumnHide"> + <summary> + 是否允许隐藏列 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.DataTextField"> + <summary> + 字段名称 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.DataTextFormatString"> + <summary> + 字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.Text"> + <summary> + 按钮文本 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.HtmlEncode"> + <summary> + 显示之前进行HTML编码(默认为true) + </summary> + </member> + <member name="P:FineUI.LinkButtonField.HtmlEncodeFormatString"> + <summary> + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + </summary> + </member> + <member name="P:FineUI.LinkButtonField.EnablePostBack"> + <summary> + 是否可以回发 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.Enabled"> + <summary> + 是否可用 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.OnClientClick"> + <summary> + 点击按钮时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.ValidateForms"> + <summary> + 提交之前需要验证的表单名称列表 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.ValidateTarget"> + <summary> + 验证失败时提示对话框弹出位置 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.ValidateMessageBox"> + <summary> + 验证失败时是否出现提示对话框 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.Icon"> + <summary> + 图标 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.IconUrl"> + <summary> + 图标地址 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.ConfirmTitle"> + <summary> + 确认对话框标题 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.ConfirmText"> + <summary> + 确认对话框内容 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.ConfirmIcon"> + <summary> + 确认对话框提示图标 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.ConfirmTarget"> + <summary> + 确认对话框弹出位置 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.CommandName"> + <summary> + 命令名称 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.CommandArgument"> + <summary> + 命令参数 + </summary> + </member> + <member name="P:FineUI.LinkButtonField.EnableAjax"> + <summary> + 是否启用AJAX + </summary> + </member> + <member name="T:FineUI.Region"> + <summary> + 区域控件 + </summary> + </member> + <member name="M:FineUI.Region.OnInit(System.EventArgs)"> + <summary> + Tab 控件必须包含在 TabStrip 中 + </summary> + <param name="e"></param> + </member> + <member name="M:FineUI.Region.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Region.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.Region.Split"> + <summary> + 是否可以拖动分隔条 + </summary> + </member> + <member name="P:FineUI.Region.Position"> + <summary> + 位置 + </summary> + </member> + <member name="T:FineUI.RegionCollection"> + <summary> + Region控件集合 + </summary> + </member> + <member name="M:FineUI.RegionCollection.#ctor(FineUI.PanelBase)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.Calendar"> + <summary> + 日期控件 + </summary> + </member> + <member name="M:FineUI.Calendar.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Calendar.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Calendar.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Calendar.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.Calendar.OnDateSelect(System.EventArgs)"> + <summary> + 触发日期选定事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Calendar.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.Calendar.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="P:FineUI.Calendar.SelectedDate"> + <summary> + [AJAX属性]选择的日期 + </summary> + </member> + <member name="P:FineUI.Calendar.DateFormatString"> + <summary> + 日期格式 + </summary> + </member> + <member name="P:FineUI.Calendar.MaxDate"> + <summary> + 最大日期 + </summary> + </member> + <member name="P:FineUI.Calendar.MinDate"> + <summary> + 最小日期 + </summary> + </member> + <member name="P:FineUI.Calendar.EnableDateSelectEvent"> + <summary> + 选择日期是否自动回发 + </summary> + </member> + <member name="E:FineUI.Calendar.DateSelect"> + <summary> + 日期选定事件(需要启用EnableDateSelect) + </summary> + </member> + <member name="T:FineUI.Toolbar"> + <summary> + 工具条控件 + </summary> + </member> + <member name="M:FineUI.Toolbar.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Toolbar.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.Toolbar.ToolbarAlign"> + <summary> + 页脚工具栏的排列位置 + </summary> + </member> + <member name="P:FineUI.Toolbar.Position"> + <summary> + 工具条的位置 + </summary> + </member> + <member name="P:FineUI.Toolbar.Items"> + <summary> + 工具条项集合 + </summary> + </member> + <member name="T:FineUI.ToolbarText"> + <summary> + 工具栏文本控件 + </summary> + </member> + <member name="M:FineUI.ToolbarText.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.ToolbarText.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.ToolbarText.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.ToolbarText.Text"> + <summary> + [AJAX属性]文本 + </summary> + </member> + <member name="T:FineUI.ToolbarSeparator"> + <summary> + 工具栏分隔符控件 + </summary> + </member> + <member name="M:FineUI.ToolbarSeparator.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.ToolbarSeparator.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.ToolbarFill"> + <summary> + 工具栏左右分隔符控件 + </summary> + </member> + <member name="M:FineUI.ToolbarFill.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.ToolbarFill.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.HyperLink"> + <summary> + 链接控件 + </summary> + </member> + <member name="M:FineUI.HyperLink.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.HyperLink.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.HyperLink.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.HyperLink.TabIndex"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.HyperLink.Text"> + <summary> + [AJAX属性]文本 + </summary> + </member> + <member name="P:FineUI.HyperLink.OnClientClick"> + <summary> + [AJAX属性]点击链接时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.HyperLink.NavigateUrl"> + <summary> + [AJAX属性]链接地址 + </summary> + </member> + <member name="P:FineUI.HyperLink.Target"> + <summary> + [AJAX属性]链接目标 + </summary> + </member> + <member name="P:FineUI.HyperLink.EncodeText"> + <summary> + 是否对文本编码 + </summary> + </member> + <member name="T:FineUI.PageContext"> + <summary> + 页面上下文帮助类(静态类),包括向页面注册脚本、刷新当前页面、页面重定向等实用函数 + </summary> + </member> + <member name="M:FineUI.PageContext.Redirect(System.String)"> + <summary> + 跳转到指定的Url + </summary> + <param name="url"></param> + </member> + <member name="M:FineUI.PageContext.Redirect(System.String,System.String)"> + <summary> + 跳转到指定的Url,Target指定在哪个窗口中跳转(_self,_parent,_top) + </summary> + <param name="url"></param> + <param name="target">_self,_parent,_top</param> + </member> + <member name="M:FineUI.PageContext.Refresh"> + <summary> + 刷新当前页面 + </summary> + </member> + <member name="M:FineUI.PageContext.Refresh(System.String)"> + <summary> + 刷新指定页面 + </summary> + <param name="target">目标页面</param> + </member> + <member name="M:FineUI.PageContext.RegisterStartupScript(System.String)"> + <summary> + 注册页面脚本 + </summary> + <param name="scriptContent">客户端脚本</param> + </member> + <member name="T:FineUI.Tree"> + <summary> + 树控件 + </summary> + </member> + <member name="M:FineUI.Tree.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Tree.OnInitControl"> + <summary> + 初始化控件 + </summary> + </member> + <member name="M:FineUI.Tree.OnBothPreRender"> + <summary> + 渲染 HTML 之前调用 + </summary> + </member> + <member name="M:FineUI.Tree.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Tree.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Tree.DataBind"> + <summary> + 绑定数据源 + </summary> + <seealso cref="P:FineUI.Tree.DataSource"/> + </member> + <member name="M:FineUI.Tree.FixTreeNodes"> + <summary> + 如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 + 同时处理 AutoLeafIdentification 属性 + </summary> + </member> + <member name="M:FineUI.Tree.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.Tree.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.Tree.OnNodeDataBound(FineUI.TreeNodeEventArgs)"> + <summary> + 触发节点绑定后事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Tree.OnPreNodeDataBound(FineUI.TreePreNodeEventArgs)"> + <summary> + 触发节点预绑定事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Tree.OnNodeCheck(FineUI.TreeCheckEventArgs)"> + <summary> + 触发节点选中事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Tree.OnNodeCommand(FineUI.TreeCommandEventArgs)"> + <summary> + 触发节点点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Tree.OnNodeExpand(FineUI.TreeNodeEventArgs)"> + <summary> + 触发节点展开事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Tree.OnNodeCollapse(FineUI.TreeNodeEventArgs)"> + <summary> + 触发节点展开事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Tree.OnNodeLazyLoad(FineUI.TreeNodeEventArgs)"> + <summary> + 触发节点延迟加载事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Tree.GetExpandedNodeIDs"> + <summary> + 获取所有展开节点的ID数组 + </summary> + <returns>节点的ID数组</returns> + </member> + <member name="M:FineUI.Tree.GetExpandedNodeIDs(FineUI.TreeNodeCollection)"> + <summary> + 获取指定节点集合中所有展开节点的ID数组 + </summary> + <param name="nodes">指定的节点集合</param> + <returns>节点的ID数组</returns> + </member> + <member name="M:FineUI.Tree.GetExpandedNodes"> + <summary> + 获取所有展开节点的数组 + </summary> + <returns>节点的数组</returns> + </member> + <member name="M:FineUI.Tree.GetExpandedNodes(FineUI.TreeNodeCollection)"> + <summary> + 获取指定节点集合中所有展开节点的数组 + </summary> + <param name="nodes">指定的节点集合</param> + <returns>节点的数组</returns> + </member> + <member name="M:FineUI.Tree.CollapseAllNodes"> + <summary> + 折叠所有节点 + </summary> + </member> + <member name="M:FineUI.Tree.CollapseAllNodes(FineUI.TreeNodeCollection)"> + <summary> + 折叠指定节点集合中的所有节点 + </summary> + <param name="nodes">指定的节点集合</param> + </member> + <member name="M:FineUI.Tree.ExpandAllNodes"> + <summary> + 展开所有节点 + </summary> + </member> + <member name="M:FineUI.Tree.ExpandAllNodes(FineUI.TreeNodeCollection)"> + <summary> + 展开指定节点集合中的所有节点 + </summary> + <param name="nodes">指定的节点集合</param> + </member> + <member name="M:FineUI.Tree.GetCheckedNodeIDs"> + <summary> + 获取选中节点的ID数组 + </summary> + <returns>节点的ID数组</returns> + </member> + <member name="M:FineUI.Tree.GetCheckedNodeIDs(FineUI.TreeNodeCollection)"> + <summary> + 获取指定节点集合中选中节点的ID数组 + </summary> + <param name="nodes">指定的节点集合</param> + <returns>节点的ID数组</returns> + </member> + <member name="M:FineUI.Tree.GetCheckedNodes"> + <summary> + 获取选中节点的数组 + </summary> + <returns>节点的数组</returns> + </member> + <member name="M:FineUI.Tree.GetCheckedNodes(FineUI.TreeNodeCollection)"> + <summary> + 获取指定节点集合中选中节点的数组 + </summary> + <param name="nodes">指定的节点集合</param> + <returns>节点的数组</returns> + </member> + <member name="M:FineUI.Tree.CheckAllNodes"> + <summary> + 选中所有节点的复选框 + </summary> + </member> + <member name="M:FineUI.Tree.CheckAllNodes(FineUI.TreeNodeCollection)"> + <summary> + 选中指定节点的复选框 + </summary> + <param name="nodes">指定的节点集合</param> + </member> + <member name="M:FineUI.Tree.UncheckAllNodes"> + <summary> + 反选所有节点的复选框 + </summary> + </member> + <member name="M:FineUI.Tree.UncheckAllNodes(FineUI.TreeNodeCollection)"> + <summary> + 反选指定节点的复选框 + </summary> + <param name="nodes">指定的节点集合</param> + </member> + <member name="M:FineUI.Tree.FindNode(System.String)"> + <summary> + 查找树节点 + </summary> + <param name="nodeId">节点ID</param> + <returns>树节点</returns> + </member> + <member name="M:FineUI.Tree.FindNode(System.String,FineUI.TreeNodeCollection)"> + <summary> + 在指定的节点集合中查找树节点 + </summary> + <param name="nodeId">节点ID</param> + <param name="nodes">指定的节点集合</param> + <returns>树节点</returns> + </member> + <member name="M:FineUI.Tree.GetExpandAllNodesReference"> + <summary> + 获取展开全部节点的的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Tree.GetCollapseAllNodesReference"> + <summary> + 获取折叠全部节点的的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="P:FineUI.Tree.Content"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tree.Items"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tree.EnableIFrame"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tree.IFrameUrl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tree.IFrameName"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tree.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="P:FineUI.Tree.EnableSingleClickExpand"> + <summary> + 单击切换节点的折叠展开状态 + </summary> + </member> + <member name="P:FineUI.Tree.EnableArrows"> + <summary> + 启用箭头 + </summary> + </member> + <member name="P:FineUI.Tree.EnableLines"> + <summary> + 启用节点之间连线 + </summary> + </member> + <member name="P:FineUI.Tree.EnableAnimate"> + <summary> + 启用动画 + </summary> + </member> + <member name="P:FineUI.Tree.EnableSingleExpand"> + <summary> + 每次只能展开一个 + </summary> + </member> + <member name="P:FineUI.Tree.EnableIcons"> + <summary> + 启用图标 + </summary> + </member> + <member name="P:FineUI.Tree.AutoLeafIdentification"> + <summary> + 自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性(默认:true) + </summary> + </member> + <member name="P:FineUI.Tree.EnableMultiSelect"> + <summary> + 启用多行选择 + </summary> + </member> + <member name="P:FineUI.Tree.DataSource"> + <summary> + 数据源 + </summary> + </member> + <member name="P:FineUI.Tree.Nodes"> + <summary> + 树节点集合 + </summary> + </member> + <member name="P:FineUI.Tree.SelectedNode"> + <summary> + 选中的树节点 + </summary> + </member> + <member name="P:FineUI.Tree.SelectedNodeID"> + <summary> + [AJAX属性]选中的树节点ID + </summary> + </member> + <member name="P:FineUI.Tree.SelectedNodeIDArray"> + <summary> + [AJAX属性]选中的树节点ID列表 + </summary> + </member> + <member name="P:FineUI.Tree.Mappings"> + <summary> + 树控件属性与数据源节点的映射关系 + </summary> + </member> + <member name="P:FineUI.Tree.SelectedNodeIDArrayHiddenFieldID"> + <summary> + 选中行 + </summary> + </member> + <member name="P:FineUI.Tree.ExpandedNodesHiddenFieldID"> + <summary> + 展开的节点列表 + </summary> + </member> + <member name="P:FineUI.Tree.CheckedNodesHiddenFieldID"> + <summary> + 选中的节点列表 + </summary> + </member> + <member name="P:FineUI.Tree.F_Nodes"> + <summary> + 树节点集合的 JSON 表示(内部使用) + </summary> + </member> + <member name="E:FineUI.Tree.NodeDataBound"> + <summary> + 节点绑定后事件 + </summary> + </member> + <member name="E:FineUI.Tree.PreNodeDataBound"> + <summary> + 节点预绑定事件 + </summary> + </member> + <member name="E:FineUI.Tree.NodeCheck"> + <summary> + 节点选中事件 + </summary> + </member> + <member name="E:FineUI.Tree.NodeCommand"> + <summary> + 节点点击事件 + </summary> + </member> + <member name="E:FineUI.Tree.NodeExpand"> + <summary> + 节点展开事件 + </summary> + </member> + <member name="E:FineUI.Tree.NodeCollapse"> + <summary> + 节点展开事件 + </summary> + </member> + <member name="E:FineUI.Tree.NodeLazyLoad"> + <summary> + 节点延迟加载事件 + </summary> + </member> + <member name="T:FineUI.AbsoluteScriptBlock"> + <summary> + 脚本(不和控件关联的脚本) + </summary> + </member> + <member name="P:FineUI.AbsoluteScriptBlock.Script"> + <summary> + 脚本 + </summary> + </member> + <member name="P:FineUI.AbsoluteScriptBlock.Level"> + <summary> + 层次(层次越高,注册越靠后)(缺省100) + 负值表示在所有注册脚本之前执行 + </summary> + </member> + <member name="T:FineUI.ContentPanel"> + <summary> + 容器面板控件 + </summary> + </member> + <member name="M:FineUI.ContentPanel.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.ContentPanel.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.ContentPanel.EnableIFrame"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.ContentPanel.IFrameUrl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.ContentPanel.IFrameName"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.ContentPanel.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="T:FineUI.Form"> + <summary> + 表单面板控件 + </summary> + </member> + <member name="M:FineUI.Form.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Form.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Form.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Form.ResolveRows(System.String@,System.String@)"> + <summary> + 处理列 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Form.AddColumnScript(FineUI.JsArrayBuilder,System.Int32,System.Int32,System.Int32)"> + <summary> + 添加列 + </summary> + <param name="rowIdsBuilder">行ID集合</param> + <param name="startLineIndex">开始行的索引(包含)</param> + <param name="endLineIndex">结束行的索引(包含)</param> + <param name="columnCount">行的列数</param> + </member> + <member name="M:FineUI.Form.AddItemScript(FineUI.JsArrayBuilder,System.String)"> + <summary> + 添加Items变量 + </summary> + <param name="ab"></param> + <param name="id"></param> + <returns></returns> + </member> + <member name="M:FineUI.Form.GetRowColumnCount(FineUI.FormRow)"> + <summary> + 取得当前行的列数 + </summary> + <param name="row"></param> + <returns></returns> + </member> + <member name="M:FineUI.Form.GetRowColumnControl(FineUI.FormRow,System.Int32)"> + <summary> + 取得当前行 columnIndex 列的控件 + </summary> + <param name="row"></param> + <param name="columnIndex"></param> + <returns></returns> + </member> + <member name="P:FineUI.Form.Content"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Form.Rows"> + <summary> + 表单行控件集合 + </summary> + </member> + <member name="T:FineUI.FormRow"> + <summary> + 表单行控件 + </summary> + </member> + <member name="M:FineUI.FormRow.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.FormRow.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.FormRow.ResolveColumnWidths(System.String)"> + <summary> + 格式化widths + </summary> + <param name="widths"></param> + <returns></returns> + </member> + <member name="P:FineUI.FormRow.ColumnWidths"> + <summary> + 各列的宽度,空格分割 + </summary> + </member> + <member name="P:FineUI.FormRow.Items"> + <summary> + 子控件集合 + </summary> + </member> + <member name="T:FineUI.FormRowCollection"> + <summary> + 表单行控件集合 + </summary> + </member> + <member name="M:FineUI.FormRowCollection.#ctor(FineUI.Form)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.GroupPanel"> + <summary> + 分组面板控件 + </summary> + </member> + <member name="M:FineUI.GroupPanel.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.GroupPanel.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.GroupPanel.ShowHeader"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.GroupPanel.ShowBorder"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.GroupPanel.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="T:FineUI.CheckBox"> + <summary> + 复选框控件 + </summary> + </member> + <member name="M:FineUI.CheckBox.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.CheckBox.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.CheckBox.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.CheckBox.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.CheckBox.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.CheckBox.OnCheckedChanged(FineUI.CheckedEventArgs)"> + <summary> + 触发复选框状态改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.CheckBox.Text"> + <summary> + 文本 + </summary> + </member> + <member name="P:FineUI.CheckBox.Checked"> + <summary> + [AJAX属性]是否选中 + </summary> + </member> + <member name="P:FineUI.CheckBox.AutoPostBack"> + <summary> + 是否自动回发 + </summary> + </member> + <member name="E:FineUI.CheckBox.CheckedChanged"> + <summary> + 复选框状态改变事件(需要启用AutoPostBack) + </summary> + </member> + <member name="T:FineUI.SimpleForm"> + <summary> + 简单的表单容器控件 + </summary> + </member> + <member name="M:FineUI.SimpleForm.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.SimpleForm.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.SimpleForm.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.Window"> + <summary> + 窗体控件 + </summary> + </member> + <member name="M:FineUI.Window.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Window.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.Window.RenderEndTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.Window.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Window.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Window.GetHiddenPropertyChangedScript"> + <summary> + 获取 Hidden 属性改变的 JavaScript 脚本 + Window 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + </summary> + </member> + <member name="M:FineUI.Window.GetSaveStateReference(System.String[])"> + <summary> + 保存服务器控件的ClientID + 可以调用ActiveWindow.GetWriteBackValueReference在子页面向这些服务器控件写入值 + </summary> + </member> + <member name="M:FineUI.Window.GetIFramePostBackEventReference(System.String)"> + <summary> + 获取窗体内IFrame回发页面的客户端脚本(比如:__doPostBack('','eventArgument');) + </summary> + <param name="eventArgument">事件参数</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetIFrameCustomEventReference(System.String)"> + <summary> + 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + </summary> + <param name="eventArgument">事件参数</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetIFrameCustomEventReference(System.String,System.Boolean)"> + <summary> + 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + </summary> + <param name="eventArgument">事件参数</param> + <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetShowReference"> + <summary> + 获取显示窗体的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetShowReference(System.String)"> + <summary> + 获取显示窗体的客户端脚本 + </summary> + <param name="iframeUrl">IFrame地址</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetShowReference(System.String,System.String)"> + <summary> + 获取显示窗体的客户端脚本 + </summary> + <param name="iframeUrl">IFrame地址</param> + <param name="windowTitle">窗体标题</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetShowReference(System.Web.UI.WebControls.Unit,System.Web.UI.WebControls.Unit)"> + <summary> + 获取显示窗体的客户端脚本 + </summary> + <param name="width">窗体宽度</param> + <param name="height">窗体高度</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetShowReference(System.String,System.Web.UI.WebControls.Unit,System.Web.UI.WebControls.Unit)"> + <summary> + 获取显示窗体的客户端脚本 + </summary> + <param name="windowTitle">窗体标题</param> + <param name="width">窗体宽度</param> + <param name="height">窗体高度</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetShowReference(System.String,System.String,System.Web.UI.WebControls.Unit,System.Web.UI.WebControls.Unit)"> + <summary> + 获取显示窗体的客户端脚本 + </summary> + <param name="iframeUrl">IFrame地址</param> + <param name="windowTitle">窗体标题</param> + <param name="width">窗体宽度</param> + <param name="height">窗体高度</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetMaximizeReference"> + <summary> + 获取最大化窗体尺寸的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetRestoreReference"> + <summary> + 获取恢复窗体尺寸的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetMinimizeReference"> + <summary> + 获取最小化窗体尺寸的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetHideReference"> + <summary> + 获取关闭当前激活Window的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetHideRefreshReference"> + <summary> + 获取关闭当前激活Window然后刷新页面的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetHidePostBackReference"> + <summary> + 获取关闭当前激活Window然后回发页面的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetHidePostBackReference(System.String)"> + <summary> + 获取关闭当前激活Window然后回发页面的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.GetHideExecuteScriptReference(System.String)"> + <summary> + 获取关闭当前激活Window然后执行脚本的客户端脚本 + </summary> + <param name="argument">执行的脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Window.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.Window.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.Window.OnClose(FineUI.WindowCloseEventArgs)"> + <summary> + 触发窗体关闭事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.Window.ShowHeader"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Window.ShowBorder"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Window.GUID"> + <summary> + 为了放置不同页面的Window的ClientID发生冲突,加上GUID + </summary> + </member> + <member name="P:FineUI.Window.IFrameName"> + <summary> + [只读]Window的IFrameName必须是唯一的,在所有页面中是唯一的 + 所以不要手工定义Window的IFrameName + </summary> + </member> + <member name="P:FineUI.Window.WindowPosition"> + <summary> + 窗口的位置 + </summary> + </member> + <member name="P:FineUI.Window.Top"> + <summary> + 左上角位置 + </summary> + </member> + <member name="P:FineUI.Window.Left"> + <summary> + 左上角位置 + </summary> + </member> + <member name="P:FineUI.Window.EnableClose"> + <summary> + 是否可以关闭 + </summary> + </member> + <member name="P:FineUI.Window.EnableDrag"> + <summary> + 是否可以移动 + </summary> + </member> + <member name="P:FineUI.Window.EnableMaximize"> + <summary> + 是否可以最大化 + </summary> + </member> + <member name="P:FineUI.Window.EnableMinimize"> + <summary> + 是否可以最小化 + </summary> + </member> + <member name="P:FineUI.Window.MinHeight"> + <summary> + 最小高度 + </summary> + </member> + <member name="P:FineUI.Window.MinWidth"> + <summary> + 最小宽度 + </summary> + </member> + <member name="P:FineUI.Window.IsModal"> + <summary> + 是否模式窗口 + </summary> + </member> + <member name="P:FineUI.Window.EnableResize"> + <summary> + 是否可以改变窗口大小 + </summary> + </member> + <member name="P:FineUI.Window.OnClientCloseButtonClick"> + <summary> + 点击关闭按钮时需要执行的客户端脚本 + </summary> + </member> + <member name="P:FineUI.Window.CloseAction"> + <summary> + 关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作) + </summary> + </member> + <member name="P:FineUI.Window.Target"> + <summary> + 弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效) + </summary> + </member> + <member name="E:FineUI.Window.Close"> + <summary> + 窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack) + </summary> + </member> + <member name="T:FineUI.GridSortEventArgs"> + <summary> + 表格排序事件参数 + </summary> + </member> + <member name="M:FineUI.GridSortEventArgs.#ctor(System.String,System.String,System.Int32)"> + <summary> + 构造函数 + </summary> + <param name="sortField">排序字段</param> + <param name="sortDirection">排序方向</param> + <param name="columnIndex">列索引</param> + </member> + <member name="P:FineUI.GridSortEventArgs.SortField"> + <summary> + 排序字段 + </summary> + </member> + <member name="P:FineUI.GridSortEventArgs.SortDirection"> + <summary> + 排序方向 + </summary> + </member> + <member name="P:FineUI.GridSortEventArgs.ColumnIndex"> + <summary> + 列索引 + </summary> + </member> + <member name="T:FineUI.Grid"> + <summary> + 表格控件 + </summary> + </member> + <member name="F:FineUI.Grid.TEMPLATE_PLACEHOLDER_PREFIX"> + <summary> + 模板列占位符前缀 + </summary> + </member> + <member name="M:FineUI.Grid.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Grid.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Grid.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Grid.ResolveStartEndRowIndex(System.Int32@,System.Int32@)"> + <summary> + 当前分页的开始行和结束行 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Grid.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染开始标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.Grid.RenderEndTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染结束标签 + </summary> + <param name="writer">输出流</param> + </member> + <member name="M:FineUI.Grid.UpdateTemplateFields"> + <summary> + 当在客户端修改了模板列中的值,调用此函数来告诉表格控件需要更新这些值; + 如果对表格重新进行了数据绑定,则不需要调用此函数,因为重新绑定后会更新表格的全部内容 + </summary> + </member> + <member name="M:FineUI.Grid.DataBind"> + <summary> + 绑定到数据源 + </summary> + </member> + <member name="M:FineUI.Grid.ClearRows"> + <summary> + 清空Rows,同时清除所有子控件中的GridRow控件 + </summary> + </member> + <member name="M:FineUI.Grid.GetModifiedData"> + <summary> + 获取用户修改的数据 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Grid.GetDeletedList"> + <summary> + 获取删除的行索引列表 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Grid.GetNewAddedList"> + <summary> + 获取新增的行数据 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Grid.GetModifiedDict"> + <summary> + 获取用户修改的行数据 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Grid.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.Grid.CommitChanges"> + <summary> + 接受用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + </summary> + </member> + <member name="M:FineUI.Grid.GetCommitChangesReference"> + <summary> + 获取接受用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.RejectChanges"> + <summary> + 拒绝用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + </summary> + </member> + <member name="M:FineUI.Grid.GetRejectChangesReference"> + <summary> + 获取拒绝用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + </summary> + </member> + <member name="M:FineUI.Grid.ClearSelections"> + <summary> + 清空表格选中项 + </summary> + </member> + <member name="M:FineUI.Grid.GetClearSelectionsReference"> + <summary> + 获取清空表格选中项的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.AddNewRecord(Newtonsoft.Json.Linq.JObject)"> + <summary> + 添加一条新纪录 + </summary> + <param name="defaultObject">缺省值</param> + </member> + <member name="M:FineUI.Grid.AddNewRecord(Newtonsoft.Json.Linq.JObject,System.Boolean)"> + <summary> + 添加一条新纪录 + </summary> + <param name="defaultObject">缺省值</param> + <param name="appendToEnd">是否添加到末尾</param> + </member> + <member name="M:FineUI.Grid.GetAddNewRecordReference(Newtonsoft.Json.Linq.JObject)"> + <summary> + 获取添加一条新纪录的客户端脚本 + </summary> + <param name="defaultObject">缺省值</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetAddNewRecordReference(Newtonsoft.Json.Linq.JObject,System.Boolean)"> + <summary> + 获取添加一条新纪录的客户端脚本 + </summary> + <param name="defaultObject">缺省值</param> + <param name="appendToEnd">是否添加到末尾</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.DeleteSelected"> + <summary> + 删除选中行(或者单元格) + </summary> + </member> + <member name="M:FineUI.Grid.GetDeleteSelectedReference"> + <summary> + 获取删除选中行(或者单元格)的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetHasSelectionReference"> + <summary> + 获取表格是否有选中项的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetSelectedCountReference"> + <summary> + 获取表格选中项数的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetSelectedCellReference"> + <summary> + 获取表格选中单元格的客户端脚本(仅用于AllowCellEditing模式) + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertReference(System.String)"> + <summary> + 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertReference(System.String,System.String)"> + <summary> + 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertReference(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertInParentReference(System.String)"> + <summary> + 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertInParentReference(System.String,System.String)"> + <summary> + 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertInParentReference(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertInTopReference(System.String)"> + <summary> + 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertInTopReference(System.String,System.String)"> + <summary> + 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.GetNoSelectionAlertInTopReference(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Grid.FindColumn(System.String)"> + <summary> + 通过列ID获取列实例 + </summary> + <param name="columnID">列ID</param> + <returns>列实例</returns> + </member> + <member name="M:FineUI.Grid.FindColumn(System.Int32)"> + <summary> + 通过列索引获取列实例 + </summary> + <param name="columnIndex">列索引</param> + <returns>列实例</returns> + </member> + <member name="M:FineUI.Grid.SelectAllRows"> + <summary> + 选中所有行(设置SelectedRowIndexArray属性) + </summary> + </member> + <member name="M:FineUI.Grid.ExpandRowExpanders"> + <summary> + 展开全部的行扩展列 + </summary> + </member> + <member name="M:FineUI.Grid.CollapseRowExpanders"> + <summary> + 折叠全部的行扩展列 + </summary> + </member> + <member name="M:FineUI.Grid.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.Grid.GetPrefixColumnNumber"> + <summary> + 获取Columns前面的列(比如索引列,选择框列) + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Grid.OnSort(FineUI.GridSortEventArgs)"> + <summary> + 触发排序事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnPreDataBound(System.EventArgs)"> + <summary> + 触发绑定前事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnPreRowDataBound(FineUI.GridPreRowEventArgs)"> + <summary> + 触发行绑定前事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnRowDataBound(FineUI.GridRowEventArgs)"> + <summary> + 触发行绑定后事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnRowCommand(FineUI.GridCommandEventArgs)"> + <summary> + 触发行内事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnPageIndexChange(FineUI.GridPageEventArgs)"> + <summary> + 触发页索引改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnRowClick(FineUI.GridRowClickEventArgs)"> + <summary> + 触发行点击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnRowDoubleClick(FineUI.GridRowClickEventArgs)"> + <summary> + 触发行双击事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnRowSelect(FineUI.GridRowSelectEventArgs)"> + <summary> + 触发行选中事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.OnAfterEdit(FineUI.GridAfterEditEventArgs)"> + <summary> + 触发结束编辑事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.Grid.LoadControlState(System.Object)"> + <summary> + 装载控件状态 + </summary> + <param name="savedState"></param> + </member> + <member name="M:FineUI.Grid.SaveControlState"> + <summary> + 保存控件状态 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.Grid.OnInit(System.EventArgs)"> + <summary> + 初始化 + </summary> + <param name="e"></param> + </member> + <member name="P:FineUI.Grid.Content"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Grid.Items"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Grid.EnableIFrame"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Grid.IFrameUrl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Grid.IFrameName"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Grid.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="P:FineUI.Grid.AllowCellEditing"> + <summary> + 允许单元格编辑 + </summary> + </member> + <member name="P:FineUI.Grid.ClicksToEdit"> + <summary> + 编辑单元格时点击单元格的次数(默认为2次) + </summary> + </member> + <member name="P:FineUI.Grid.AllowColumnLocking"> + <summary> + 允许列锁定 + </summary> + </member> + <member name="P:FineUI.Grid.AllowPaging"> + <summary> + 允许服务器端分页 + </summary> + </member> + <member name="P:FineUI.Grid.IsDatabasePaging"> + <summary> + 是否数据库分页 + </summary> + </member> + <member name="P:FineUI.Grid.ClearSelectedRowsAfterPaging"> + <summary> + 服务器端分页后清空选中的行 + </summary> + </member> + <member name="P:FineUI.Grid.PageSize"> + <summary> + 每页显示项数 + </summary> + </member> + <member name="P:FineUI.Grid.PageIndex"> + <summary> + [AJAX属性]当前显示页索引 + </summary> + </member> + <member name="P:FineUI.Grid.PageCount"> + <summary> + [AJAX属性]总页数 + </summary> + </member> + <member name="P:FineUI.Grid.RecordCount"> + <summary> + [AJAX属性]记录的总个数 + </summary> + </member> + <member name="P:FineUI.Grid.AllowSorting"> + <summary> + 允许服务器端排序 + </summary> + </member> + <member name="P:FineUI.Grid.SortDirection"> + <summary> + 排序方向("ASC", "DESC") + </summary> + </member> + <member name="P:FineUI.Grid.SortField"> + <summary> + 当前排序字段(只读) + </summary> + </member> + <member name="P:FineUI.Grid.EnableSummary"> + <summary> + 启用合计行 + </summary> + </member> + <member name="P:FineUI.Grid.SummaryData"> + <summary> + [AJAX属性]合计行数据 + </summary> + </member> + <member name="P:FineUI.Grid.SummaryPosition"> + <summary> + 合计行的位置 + </summary> + </member> + <member name="P:FineUI.Grid.EmptyText"> + <summary> + 数据为空时显示在内容区域的文本,可以是HTML标签 + </summary> + </member> + <member name="P:FineUI.Grid.RowVerticalAlign"> + <summary> + 行中文字的垂直排列位置(默认为Middle) + </summary> + </member> + <member name="P:FineUI.Grid.EnableDelayRender"> + <summary> + 是否延迟渲染 + </summary> + </member> + <member name="P:FineUI.Grid.ExpandAllRowExpanders"> + <summary> + 展开所有的行扩展列 + </summary> + </member> + <member name="P:FineUI.Grid.EnableTextSelection"> + <summary> + 启用表格中的文字选择 + </summary> + </member> + <member name="P:FineUI.Grid.ShowGridHeader"> + <summary> + 显示表格表头 + </summary> + </member> + <member name="P:FineUI.Grid.ShowPagingMessage"> + <summary> + 显示分页工具条右侧的分页信息 + </summary> + </member> + <member name="P:FineUI.Grid.EnableHeaderMenu"> + <summary> + 启用表头菜单 + </summary> + </member> + <member name="P:FineUI.Grid.EnableColumnLines"> + <summary> + 启用表格列分隔线(默认为false) + </summary> + </member> + <member name="P:FineUI.Grid.EnableRowLines"> + <summary> + 启用表格行分隔线(默认为true) + </summary> + </member> + <member name="P:FineUI.Grid.EnableAlternateRowColor"> + <summary> + 启用交替行显示不同的颜色 + </summary> + </member> + <member name="P:FineUI.Grid.EnableMouseOverColor"> + <summary> + 启用鼠标移动到行的颜色 + </summary> + </member> + <member name="P:FineUI.Grid.EnableRowSelectEvent"> + <summary> + 选中行是否自动回发 + </summary> + </member> + <member name="P:FineUI.Grid.EnableRowClickEvent"> + <summary> + 点击行是否自动回发 + </summary> + </member> + <member name="P:FineUI.Grid.EnableRowDoubleClickEvent"> + <summary> + 双击行是否自动回发 + </summary> + </member> + <member name="P:FineUI.Grid.EnableAfterEditEvent"> + <summary> + 结束编辑是否自动回发(需要启用AllowCellEditing) + </summary> + </member> + <member name="P:FineUI.Grid.AutoExpandColumn"> + <summary> + 自动扩展宽度以填充剩余空间的列(ColumnID) + </summary> + </member> + <member name="P:FineUI.Grid.ForceFit"> + <summary> + 成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效) + </summary> + </member> + <member name="P:FineUI.Grid.EnableCheckBoxSelect"> + <summary> + 启用多选框 + </summary> + </member> + <member name="P:FineUI.Grid.CheckBoxSelectOnly"> + <summary> + 只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效) + </summary> + </member> + <member name="P:FineUI.Grid.EnableMultiSelect"> + <summary> + 启用多行选择 + </summary> + </member> + <member name="P:FineUI.Grid.SelectedRowIndex"> + <summary> + [AJAX属性]选中行的索引(列表中的第一项) + </summary> + </member> + <member name="P:FineUI.Grid.SelectedCell"> + <summary> + [AJAX属性]选中的单元格([行索引,列索引]) + </summary> + </member> + <member name="P:FineUI.Grid.SelectedRowIndexArray"> + <summary> + [AJAX属性]选中行的索引列表 + </summary> + </member> + <member name="P:FineUI.Grid.HiddenColumns"> + <summary> + [AJAX属性]隐藏的列名称列表(逗号分隔) + </summary> + </member> + <member name="P:FineUI.Grid.DataSource"> + <summary> + 数据源 + </summary> + </member> + <member name="P:FineUI.Grid.DataKeyNames"> + <summary> + 行关键字段 + </summary> + </member> + <member name="P:FineUI.Grid.DataKeys"> + <summary> + 行关键字段的值 + </summary> + </member> + <member name="P:FineUI.Grid.PageItems"> + <summary> + 分页工具条项集合 + </summary> + </member> + <member name="P:FineUI.Grid.AllColumns"> + <summary> + 全部的列 + </summary> + </member> + <member name="P:FineUI.Grid.Columns"> + <summary> + 列数据 + </summary> + </member> + <member name="P:FineUI.Grid.Rows"> + <summary> + 行数据 + </summary> + </member> + <member name="P:FineUI.Grid.F_Rows"> + <summary> + 保存的行数据(内部使用) + </summary> + </member> + <member name="E:FineUI.Grid.Sort"> + <summary> + 排序事件 + </summary> + </member> + <member name="E:FineUI.Grid.PreDataBound"> + <summary> + 绑定前事件 + </summary> + </member> + <member name="E:FineUI.Grid.PreRowDataBound"> + <summary> + 行绑定前事件 + </summary> + </member> + <member name="E:FineUI.Grid.RowDataBound"> + <summary> + 行绑定后事件 + </summary> + </member> + <member name="E:FineUI.Grid.RowCommand"> + <summary> + 行内事件 + </summary> + </member> + <member name="E:FineUI.Grid.PageIndexChange"> + <summary> + 页索引改变事件 + </summary> + </member> + <member name="E:FineUI.Grid.RowClick"> + <summary> + 行点击事件(需要启用EnableRowClick) + </summary> + </member> + <member name="E:FineUI.Grid.RowDoubleClick"> + <summary> + 行双击事件(需要启用EnableRowDoubleClick) + </summary> + </member> + <member name="E:FineUI.Grid.RowSelect"> + <summary> + 行选中事件(需要启用EnableRowSelect) + </summary> + </member> + <member name="E:FineUI.Grid.AfterEdit"> + <summary> + 结束编辑事件(需要启用EnableAfterEditEvent) + </summary> + </member> + <member name="T:FineUI.BoundField"> + <summary> + 表格数据绑定列 + </summary> + </member> + <member name="M:FineUI.BoundField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.BoundField.Enabled"> + <summary> + 是否可用 + </summary> + </member> + <member name="P:FineUI.BoundField.DataField"> + <summary> + 字段名称 + </summary> + </member> + <member name="P:FineUI.BoundField.DataFormatString"> + <summary> + 字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.BoundField.NullDisplayText"> + <summary> + 处理数据库中null值,默认为空字符串 + </summary> + </member> + <member name="P:FineUI.BoundField.HtmlEncode"> + <summary> + 显示之前进行HTML编码(默认为true) + </summary> + </member> + <member name="P:FineUI.BoundField.HtmlEncodeFormatString"> + <summary> + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + </summary> + </member> + <member name="T:FineUI.CheckBoxField"> + <summary> + 表格复选框列 + </summary> + </member> + <member name="M:FineUI.CheckBoxField.GetColumnValue(FineUI.GridRow,System.Boolean)"> + <summary> + 取得单元格的数据 + </summary> + <param name="row"></param> + <param name="checkState"></param> + <returns></returns> + </member> + <member name="M:FineUI.CheckBoxField.GetCheckedState(System.Int32)"> + <summary> + 本行的复选框是否处于选中状态 + </summary> + <param name="rowIndex">行索引</param> + <returns>选中状态</returns> + </member> + <member name="M:FineUI.CheckBoxField.SetCheckedState(System.Int32,System.Boolean)"> + <summary> + 设置本列复选框的选中状态 + </summary> + <param name="rowIndex">行索引</param> + <param name="isChecked">是否选中</param> + </member> + <member name="M:FineUI.CheckBoxField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.CheckBoxField.Enabled"> + <summary> + 是否可用(只在RenderAsStaticField=false时有效) + </summary> + </member> + <member name="P:FineUI.CheckBoxField.AutoPostBack"> + <summary> + 是否自动回发(只在RenderAsStaticField=false时有效) + </summary> + </member> + <member name="P:FineUI.CheckBoxField.DataField"> + <summary> + 字段名称 + </summary> + </member> + <member name="P:FineUI.CheckBoxField.RenderAsStaticField"> + <summary> + 渲染为静态图片,否则渲染为可编辑的复选框 + </summary> + </member> + <member name="P:FineUI.CheckBoxField.ShowHeaderCheckBox"> + <summary> + 显示列头复选框(只在RenderAsStaticField=false时有效) + </summary> + </member> + <member name="P:FineUI.CheckBoxField.EnableAjax"> + <summary> + 是否启用AJAX + </summary> + </member> + <member name="P:FineUI.CheckBoxField.CommandName"> + <summary> + 命令名称 + </summary> + </member> + <member name="P:FineUI.CheckBoxField.CommandArgument"> + <summary> + 命令参数 + </summary> + </member> + <member name="T:FineUI.WindowField"> + <summary> + 表格窗体列 + </summary> + </member> + <member name="M:FineUI.WindowField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.WindowField.EnableHeaderMenu"> + <summary> + 启用表头菜单 + </summary> + </member> + <member name="P:FineUI.WindowField.EnableColumnHide"> + <summary> + 是否允许隐藏列 + </summary> + </member> + <member name="P:FineUI.WindowField.Enabled"> + <summary> + 是否可用 + </summary> + </member> + <member name="P:FineUI.WindowField.WindowID"> + <summary> + 对应的窗体控件ID + </summary> + </member> + <member name="P:FineUI.WindowField.DataWindowTitleField"> + <summary> + 窗体标题对应的字段名称 + </summary> + </member> + <member name="P:FineUI.WindowField.DataWindowTitleFormatString"> + <summary> + 窗体标题对应的字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.WindowField.DataTextField"> + <summary> + 字段名称 + </summary> + </member> + <member name="P:FineUI.WindowField.DataTextFormatString"> + <summary> + 字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.WindowField.HtmlEncode"> + <summary> + 显示之前进行HTML编码(默认为true) + </summary> + </member> + <member name="P:FineUI.WindowField.HtmlEncodeFormatString"> + <summary> + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + </summary> + </member> + <member name="P:FineUI.WindowField.DataIFrameUrlFields"> + <summary> + 绑定到IFrame地址的字段名称列表 + </summary> + </member> + <member name="P:FineUI.WindowField.DataIFrameUrlFormatString"> + <summary> + 绑定到IFrame地址的字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.WindowField.UrlEncode"> + <summary> + 对每个绑定到IFrame地址的字段进行URL编码(默认为true) + </summary> + </member> + <member name="P:FineUI.WindowField.IFrameUrl"> + <summary> + IFrame地址 + </summary> + </member> + <member name="P:FineUI.WindowField.Text"> + <summary> + 显示文本 + </summary> + </member> + <member name="P:FineUI.WindowField.Title"> + <summary> + 标题 + </summary> + </member> + <member name="P:FineUI.WindowField.Icon"> + <summary> + 图标 + </summary> + </member> + <member name="P:FineUI.WindowField.IconUrl"> + <summary> + 图标地址 + </summary> + </member> + <member name="T:FineUI.ImageField"> + <summary> + 表格图片列 + </summary> + </member> + <member name="M:FineUI.ImageField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.ImageField.DataImageUrlField"> + <summary> + 图片地址字段 + </summary> + </member> + <member name="P:FineUI.ImageField.DataImageUrlFormatString"> + <summary> + 图片地址字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.ImageField.ImageWidth"> + <summary> + 图片的宽度 + </summary> + </member> + <member name="P:FineUI.ImageField.ImageHeight"> + <summary> + 图片的高度 + </summary> + </member> + <member name="T:FineUI.TemplateField"> + <summary> + 表格模板列 + </summary> + </member> + <member name="M:FineUI.TemplateField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.TemplateField.ItemTemplate"> + <summary> + 模板容器 + </summary> + </member> + <member name="P:FineUI.TemplateField.RenderAsRowExpander"> + <summary> + 是否渲染为行扩展列 + </summary> + </member> + <member name="P:FineUI.TemplateField.ExpandOnDoubleClick"> + <summary> + 双击展开折叠行扩展列 + </summary> + </member> + <member name="P:FineUI.TemplateField.ExpandOnEnter"> + <summary> + 回车按键展开折叠行扩展列 + </summary> + </member> + <member name="P:FineUI.TemplateField.ExpandToSelectRow"> + <summary> + 点击图标展开折叠行扩展列时选中行 + </summary> + </member> + <member name="T:FineUI.HyperLinkField"> + <summary> + 表格超链接列 + </summary> + </member> + <member name="M:FineUI.HyperLinkField.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.HyperLinkField.Enabled"> + <summary> + 是否可用 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.DataTextField"> + <summary> + 字段名称 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.DataTextFormatString"> + <summary> + 字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.DataNavigateUrlFields"> + <summary> + 绑定到超链接地址的字段名称列表 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.DataNavigateUrlFieldsEncode"> + <summary> + 对每个绑定到超链接地址的字段进行URL编码(此属性废弃,请使用UrlEncode属性) + </summary> + </member> + <member name="P:FineUI.HyperLinkField.UrlEncode"> + <summary> + 对每个绑定到超链接地址的字段进行URL编码(默认为true) + </summary> + </member> + <member name="P:FineUI.HyperLinkField.DataNavigateUrlFormatString"> + <summary> + 绑定到超链接地址的字段格式化字符串 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.Target"> + <summary> + 打开超链接的目标框架 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.NavigateUrl"> + <summary> + 超链接地址 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.Text"> + <summary> + 超链接文本 + </summary> + </member> + <member name="P:FineUI.HyperLinkField.HtmlEncode"> + <summary> + 显示之前进行HTML编码(默认为true) + </summary> + </member> + <member name="P:FineUI.HyperLinkField.HtmlEncodeFormatString"> + <summary> + 是否在应用DataFormatString属性之后进行HTML编码(默认为true) + </summary> + </member> + <member name="T:FineUI.GridColumnCollection"> + <summary> + 表格列集合 + </summary> + </member> + <member name="M:FineUI.GridColumnCollection.#ctor(FineUI.ControlBase)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.GridTemplateContainer"> + <summary> + 用来作为模板列的数据绑定容器,实现了IDataItemContainer接口 + </summary> + </member> + <member name="M:FineUI.GridTemplateContainer.#ctor(System.Object,System.Int32)"> + <summary> + 构造函数 + </summary> + <param name="dataItem">数据源</param> + <param name="rowIndex">行索引</param> + </member> + <member name="M:FineUI.GridTemplateContainer.OnInit(System.EventArgs)"> + <summary> + 控件初始化事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.GridTemplateContainer.RenderBeginTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染开始标签 + </summary> + <param name="writer">ASP.NET服务器控件输出流</param> + </member> + <member name="M:FineUI.GridTemplateContainer.RenderEndTag(System.Web.UI.HtmlTextWriter)"> + <summary> + 渲染结束标签 + </summary> + <param name="writer">ASP.NET服务器控件输出流</param> + </member> + <member name="P:FineUI.GridTemplateContainer.DataItem"> + <summary> + 数据源(IDataItemContainer成员) + </summary> + </member> + <member name="P:FineUI.GridTemplateContainer.DataItemIndex"> + <summary> + 数据项索引(IDataItemContainer成员) + </summary> + </member> + <member name="P:FineUI.GridTemplateContainer.DisplayIndex"> + <summary> + 数据项在控件中显示位置的索引(IDataItemContainer成员) + </summary> + </member> + <member name="T:FineUI.GridRow"> + <summary> + 表格行 + </summary> + </member> + <member name="M:FineUI.GridRow.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.GridRow.#ctor(FineUI.Grid,System.Object,System.Int32)"> + <summary> + 构造函数 + </summary> + <param name="grid">表格实例</param> + <param name="dataItem">行对应的数据源(在回发时为null)</param> + <param name="rowIndex">行序号</param> + </member> + <member name="M:FineUI.GridRow.ToShortStates"> + <summary> + 当前行列状态列表 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.GridRow.FromShortStates(System.Object[])"> + <summary> + 恢复当前行列状态列表(同时更新相应的Values值) + </summary> + <param name="shortStates"></param> + </member> + <member name="M:FineUI.GridRow.UpdateValuesAt(System.Int32)"> + <summary> + 更新当前行某列的渲染后的HTML + </summary> + <param name="columnIndex"></param> + </member> + <member name="M:FineUI.GridRow.InitTemplateContainers"> + <summary> + 表格行中模板列控件列表(数据绑定时自动生成每个模板列控件ID,回发时从FState中回发模板列控件ID) + </summary> + </member> + <member name="M:FineUI.GridRow.DataBindRow"> + <summary> + 绑定行的值 + </summary> + </member> + <member name="M:FineUI.GridRow.FindControl(System.String)"> + <summary> + 查找表格行内的控件 + </summary> + <param name="id"></param> + <returns></returns> + </member> + <member name="P:FineUI.GridRow.Grid"> + <summary> + 表格实例 + </summary> + </member> + <member name="P:FineUI.GridRow.DataItem"> + <summary> + 本行对应的数据源(不维护状态) + </summary> + </member> + <member name="P:FineUI.GridRow.RowIndex"> + <summary> + 第几行 + </summary> + </member> + <member name="P:FineUI.GridRow.Values"> + <summary> + 此行的状态信息 + </summary> + </member> + <member name="P:FineUI.GridRow.DataKeys"> + <summary> + 此行DataKeyNames字段的值 + </summary> + </member> + <member name="P:FineUI.GridRow.States"> + <summary> + 非公开属性,对于CheckBoxField可以通过GetCheckedState访问 + </summary> + </member> + <member name="P:FineUI.GridRow.TemplateContainers"> + <summary> + 表格行中模板列控件列表,一个典型的例子为:[GridRowControl, null, null, GridRowControl, null, null, null, null, null] + </summary> + </member> + <member name="T:FineUI.GridRowCollection"> + <summary> + 表格行控件集合 + </summary> + </member> + <member name="T:FineUI.ListItem"> + <summary> + 列表项 + </summary> + </member> + <member name="M:FineUI.ListItem.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.ListItem.#ctor(System.String,System.String)"> + <summary> + 构造函数 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + </member> + <member name="M:FineUI.ListItem.#ctor(System.String,System.String,System.Boolean)"> + <summary> + 构造函数 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + <param name="selected">是否选中</param> + </member> + <member name="P:FineUI.ListItem.Selected"> + <summary> + 是否选中 + </summary> + </member> + <member name="P:FineUI.ListItem.Text"> + <summary> + 显示的文本 + </summary> + </member> + <member name="P:FineUI.ListItem.Value"> + <summary> + 值 + </summary> + </member> + <member name="P:FineUI.ListItem.EnableSelect"> + <summary> + 是否可选择 + </summary> + </member> + <member name="P:FineUI.ListItem.SimulateTreeLevel"> + <summary> + 模拟树的层次(从0开始为根节点) + </summary> + </member> + <member name="T:FineUI.ListItemCollection"> + <summary> + 列表项集合 + </summary> + </member> + <member name="M:FineUI.ListItemCollection.FindByText(System.String)"> + <summary> + 通过文本查找列表项 + </summary> + <param name="text">文本</param> + <returns>列表项</returns> + </member> + <member name="M:FineUI.ListItemCollection.FindByText(System.String,System.Boolean)"> + <summary> + 通过文本查找列表项 + </summary> + <param name="text">文本</param> + <param name="stripHtml">是否去除HTML标签</param> + <returns>列表项</returns> + </member> + <member name="M:FineUI.ListItemCollection.FindByValue(System.String)"> + <summary> + 通过值查找列表项 + </summary> + <param name="value">值</param> + <returns>列表项</returns> + </member> + <member name="M:FineUI.ListItemCollection.Add(System.String,System.String)"> + <summary> + 添加列表项 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + <returns>新元素的插入位置</returns> + </member> + <member name="T:FineUI.DropDownList"> + <summary> + 下拉列表控件 + </summary> + </member> + <member name="M:FineUI.DropDownList.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.DropDownList.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.DropDownList.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.DropDownList.DataBind"> + <summary> + 绑定到数据源 + </summary> + </member> + <member name="M:FineUI.DropDownList.DataBindToDataTable(System.Data.DataTable)"> + <summary> + 绑定到数据表格 + </summary> + <param name="dataTable">数据表格</param> + </member> + <member name="M:FineUI.DropDownList.DataBindToEnumerable(System.Collections.IEnumerable)"> + <summary> + 绑定到可枚举类型 + </summary> + <param name="enumerable">可枚举类型</param> + </member> + <member name="M:FineUI.DropDownList.GetPropertyValue(System.Object,System.String)"> + <summary> + 取得属性值 + </summary> + <param name="obj"></param> + <param name="propertyName"></param> + </member> + <member name="M:FineUI.DropDownList.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.DropDownList.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.DropDownList.OnSelectedIndexChanged(System.EventArgs)"> + <summary> + 触发选中项改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.DropDownList.EmptyText"> + <summary> + 文本框为空时显示的文本 + </summary> + </member> + <member name="P:FineUI.DropDownList.Text"> + <summary> + [AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效) + </summary> + </member> + <member name="P:FineUI.DropDownList.SelectedValue"> + <summary> + [AJAX属性]选中项的值 + </summary> + </member> + <member name="P:FineUI.DropDownList.SelectedIndex"> + <summary> + [AJAX属性]选中项的索引 + </summary> + </member> + <member name="P:FineUI.DropDownList.SelectedText"> + <summary> + 选中项的文本 + </summary> + </member> + <member name="P:FineUI.DropDownList.SelectedItem"> + <summary> + 选中项 + </summary> + </member> + <member name="P:FineUI.DropDownList.SelectedValueArray"> + <summary> + [AJAX属性]选中项的值 + </summary> + </member> + <member name="P:FineUI.DropDownList.SelectedIndexArray"> + <summary> + [AJAX属性]选中项的索引 + </summary> + </member> + <member name="P:FineUI.DropDownList.SelectedItemArray"> + <summary> + 选中项 + </summary> + </member> + <member name="P:FineUI.DropDownList.MatchFieldWidth"> + <summary> + 下拉列表和字段的宽度相匹配 + </summary> + </member> + <member name="P:FineUI.DropDownList.AutoSelectFirstItem"> + <summary> + 如果未定义选中项,则自动选中第一个子项(默认为true) + </summary> + </member> + <member name="P:FineUI.DropDownList.EnableMultiSelect"> + <summary> + 是否可以选择多项 + </summary> + </member> + <member name="P:FineUI.DropDownList.MultiSelectSeparator"> + <summary> + 选择多项的分隔符 + </summary> + </member> + <member name="P:FineUI.DropDownList.ForceSelection"> + <summary> + 是否强制选中下拉列表中的项(启用编辑的情况下) + </summary> + </member> + <member name="P:FineUI.DropDownList.EnableEdit"> + <summary> + 是否可编辑,以便在录入时自动过滤下拉框中的值 + </summary> + </member> + <member name="P:FineUI.DropDownList.EnableSimulateTree"> + <summary> + 是否启用模拟树显示 + </summary> + </member> + <member name="P:FineUI.DropDownList.DataSimulateTreeLevelField"> + <summary> + 模拟树显示时指示所在层次的数据字段 + </summary> + </member> + <member name="P:FineUI.DropDownList.DataEnableSelectField"> + <summary> + 是否可选择的字段 + </summary> + </member> + <member name="P:FineUI.DropDownList.AutoPostBack"> + <summary> + 是否自动回发 + </summary> + </member> + <member name="P:FineUI.DropDownList.DataTextField"> + <summary> + 显示文本字段 + </summary> + </member> + <member name="P:FineUI.DropDownList.DataTextFormatString"> + <summary> + 显示文本的格式化字符串 + </summary> + </member> + <member name="P:FineUI.DropDownList.DataValueField"> + <summary> + 显示值字段 + </summary> + </member> + <member name="P:FineUI.DropDownList.DataSource"> + <summary> + 数据源 + </summary> + </member> + <member name="P:FineUI.DropDownList.F_Items"> + <summary> + 保存的列表项数据(内部使用) + </summary> + </member> + <member name="P:FineUI.DropDownList.Items"> + <summary> + 列表项集合 + </summary> + </member> + <member name="E:FineUI.DropDownList.SelectedIndexChanged"> + <summary> + 选中项改变事件(需要启用AutoPostBack) + </summary> + </member> + <member name="T:FineUI.Label"> + <summary> + 文本控件 + </summary> + </member> + <member name="M:FineUI.Label.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Label.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Label.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.Label.TabIndex"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Label.FocusOnPageLoad"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Label.EncodeText"> + <summary> + 是否对文本编码 + </summary> + </member> + <member name="P:FineUI.Label.Text"> + <summary> + [AJAX属性]文本 + </summary> + </member> + <member name="T:FineUI.TextArea"> + <summary> + 多行文本框控件 + </summary> + </member> + <member name="M:FineUI.TextArea.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.TextArea.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TextArea.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.TextArea.NextFocusControl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.TextArea.AutoGrowHeight"> + <summary> + 是否自动增长高度 + </summary> + </member> + <member name="P:FineUI.TextArea.AutoGrowHeightMax"> + <summary> + 自动增长的最大高度 + </summary> + </member> + <member name="P:FineUI.TextArea.AutoGrowHeightMin"> + <summary> + 自动增长的最小高度 + </summary> + </member> + <member name="P:FineUI.TextArea.HideScrollbars"> + <summary> + 是否总是隐藏滚动条 + </summary> + </member> + <member name="T:FineUI.Tab"> + <summary> + 选项卡控件 + </summary> + </member> + <member name="M:FineUI.Tab.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.Tab.OnInit(System.EventArgs)"> + <summary> + Tab 控件必须包含在 TabStrip 中 + </summary> + <param name="e"></param> + </member> + <member name="M:FineUI.Tab.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Tab.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.Tab.GetHiddenPropertyChangedScript"> + <summary> + 获取 Hidden 属性改变的 JavaScript 脚本 + Tab 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + </summary> + </member> + <member name="M:FineUI.Tab.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.Tab.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.Tab.GetShowReference"> + <summary> + 获取显示选项卡的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Tab.GetHideReference"> + <summary> + 获取隐藏选项卡的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="P:FineUI.Tab.ShowHeader"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tab.ShowBorder"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tab.EnableCollapse"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.Tab.EnableClose"> + <summary> + 是否可以关闭 + </summary> + </member> + <member name="T:FineUI.TabStrip"> + <summary> + 选项卡面板控件 + </summary> + </member> + <member name="M:FineUI.TabStrip.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.TabStrip.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TabStrip.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.TabStrip.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.TabStrip.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.TabStrip.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.TabStrip.OnTabIndexChanged(System.EventArgs)"> + <summary> + 触发选项卡改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="M:FineUI.TabStrip.GetAddTabReference(System.String,System.String,System.String,System.Boolean)"> + <summary> + 获取添加选项卡的脚本 + </summary> + <param name="tabID">选项卡ID</param> + <param name="iframeUrl">IFrame地址</param> + <param name="tabTitle">选项卡标题</param> + <param name="enableClose">是否可以关闭</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.TabStrip.GetAddTabReference(System.String,System.String,System.String,System.String,System.Boolean)"> + <summary> + 获取添加选项卡的脚本 + </summary> + <param name="tabID">选项卡ID</param> + <param name="iframeUrl">IFrame地址</param> + <param name="tabTitle">选项卡标题</param> + <param name="iconUrl">选项卡图标</param> + <param name="enableClose">是否可以关闭</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.TabStrip.GetRemoveTabReference(System.String)"> + <summary> + 获取移除选项卡的脚本 + </summary> + <param name="tabID">选项卡ID</param> + <returns>客户端脚本</returns> + </member> + <member name="P:FineUI.TabStrip.Content"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.TabStrip.Items"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.TabStrip.EnableIFrame"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.TabStrip.IFrameUrl"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.TabStrip.IFrameName"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.TabStrip.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="P:FineUI.TabStrip.AutoPostBack"> + <summary> + 切换选项卡时是否自动回发 + </summary> + </member> + <member name="P:FineUI.TabStrip.EnableTabCloseMenu"> + <summary> + 是否启用右键菜单(可用来关闭当前Tab和所有其他Tab) + </summary> + </member> + <member name="P:FineUI.TabStrip.TabPosition"> + <summary> + 选项卡显示的位置 + </summary> + </member> + <member name="P:FineUI.TabStrip.ActiveTabIndex"> + <summary> + [AJAX属性]激活选项卡的索引 + </summary> + </member> + <member name="P:FineUI.TabStrip.ActiveTab"> + <summary> + 当前激活的选项卡 + </summary> + </member> + <member name="P:FineUI.TabStrip.Tabs"> + <summary> + 选项卡集合 + </summary> + </member> + <member name="E:FineUI.TabStrip.TabIndexChanged"> + <summary> + 选项卡改变事件 + </summary> + </member> + <member name="T:FineUI.Panel"> + <summary> + 面板控件 + </summary> + </member> + <member name="M:FineUI.Panel.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.Panel.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="T:FineUI.HtmlEditor"> + <summary> + HTML编辑框控件 + </summary> + </member> + <member name="M:FineUI.HtmlEditor.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.HtmlEditor.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.HtmlEditor.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.HtmlEditor.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + 回发到服务器,判断控件的属性是否变化, + 如果变化返回true,则RaisePostDataChangedEvent + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.HtmlEditor.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.HtmlEditor.OnTextChanged(System.EventArgs)"> + <summary> + 触发文本改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.HtmlEditor.Enabled"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.Readonly"> + <summary> + 不支持此属性 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.Text"> + <summary> + [AJAX属性]文本 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableAlignments"> + <summary> + 启用左右定位 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableColors"> + <summary> + 启用颜色 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableFont"> + <summary> + 启用字体 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableFontSize"> + <summary> + 启用调整字体大小 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableFormat"> + <summary> + 启用格式化 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableLinks"> + <summary> + 启用创建链接 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableLists"> + <summary> + 启用创建列表 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableSourceEdit"> + <summary> + 启用源码视图 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.FontFamilies"> + <summary> + 字体列表 + </summary> + </member> + <member name="P:FineUI.HtmlEditor.EnableChineseFont"> + <summary> + 启用中文字体 + </summary> + </member> + <member name="E:FineUI.HtmlEditor.TextChanged"> + <summary> + 文本改变事件 + </summary> + </member> + <member name="T:FineUI.DatePicker"> + <summary> + 日期选择框控件 + </summary> + </member> + <member name="M:FineUI.DatePicker.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.DatePicker.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.DatePicker.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.DatePicker.OnDateSelect(System.EventArgs)"> + <summary> + 触发日期选定事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.DatePicker.EnableEdit"> + <summary> + 是否允许编辑 + </summary> + </member> + <member name="P:FineUI.DatePicker.SelectedDate"> + <summary> + 选择的日期 + </summary> + </member> + <member name="P:FineUI.DatePicker.EnableChineseAltFormats"> + <summary> + 启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd + </summary> + </member> + <member name="P:FineUI.DatePicker.AltFormats"> + <summary> + 尝试解析日期的格式列表 + </summary> + </member> + <member name="P:FineUI.DatePicker.DateFormatString"> + <summary> + 日期格式 + </summary> + </member> + <member name="P:FineUI.DatePicker.MaxDate"> + <summary> + 最大日期 + </summary> + </member> + <member name="P:FineUI.DatePicker.MinDate"> + <summary> + 最小日期 + </summary> + </member> + <member name="P:FineUI.DatePicker.EnableDateSelectEvent"> + <summary> + 选择日期是否自动回发 + </summary> + </member> + <member name="E:FineUI.DatePicker.DateSelect"> + <summary> + 日期选定事件(需要启用EnableDateSelect) + </summary> + </member> + <member name="T:FineUI.TabCollection"> + <summary> + 选项卡集合 + </summary> + </member> + <member name="M:FineUI.TabCollection.#ctor(FineUI.TabStrip)"> + <summary> + 构造函数 + </summary> + <param name="parent">父控件实例</param> + </member> + <member name="T:FineUI.ScriptBlock"> + <summary> + 控件相关脚本 + </summary> + </member> + <member name="P:FineUI.ScriptBlock.Control"> + <summary> + 要注册脚本的控件 + </summary> + </member> + <member name="P:FineUI.ScriptBlock.Script"> + <summary> + 脚本 + </summary> + </member> + <member name="T:FineUI.Layout"> + <summary> + 布局类型 + </summary> + </member> + <member name="F:FineUI.Layout.Container"> + <summary> + 容器布局(默认值) + </summary> + </member> + <member name="F:FineUI.Layout.Anchor"> + <summary> + 锚点布局 + </summary> + </member> + <member name="F:FineUI.Layout.Region"> + <summary> + 区域布局 + </summary> + </member> + <member name="F:FineUI.Layout.Fit"> + <summary> + 自适应布局(用于只有一个子控件的情况) + </summary> + </member> + <member name="F:FineUI.Layout.Accordion"> + <summary> + 手风琴布局(只用于Accordion控件) + </summary> + </member> + <member name="F:FineUI.Layout.Form"> + <summary> + 表单布局(用于SimpleForm和Form控件) + </summary> + </member> + <member name="F:FineUI.Layout.Card"> + <summary> + 卡片布局(只用于TabStrip控件) + </summary> + </member> + <member name="F:FineUI.Layout.Column"> + <summary> + 列布局 + </summary> + </member> + <member name="F:FineUI.Layout.Absolute"> + <summary> + 绝对定位布局 + </summary> + </member> + <member name="F:FineUI.Layout.Table"> + <summary> + 表格布局 + </summary> + </member> + <member name="F:FineUI.Layout.VBox"> + <summary> + 垂直盒子布局 + </summary> + </member> + <member name="F:FineUI.Layout.HBox"> + <summary> + 水平盒子布局 + </summary> + </member> + <member name="T:FineUI.LayoutHelper"> + <summary> + 布局类型名称 + </summary> + </member> + <member name="T:FineUI.NumberBox"> + <summary> + 数字输入框控件 + </summary> + </member> + <member name="M:FineUI.NumberBox.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.NumberBox.NoDecimal"> + <summary> + 不允许小数 + </summary> + </member> + <member name="P:FineUI.NumberBox.NoNegative"> + <summary> + 不允许负数 + </summary> + </member> + <member name="P:FineUI.NumberBox.MaxValue"> + <summary> + 最大值 + </summary> + </member> + <member name="P:FineUI.NumberBox.MinValue"> + <summary> + 最小值 + </summary> + </member> + <member name="P:FineUI.NumberBox.DecimalPrecision"> + <summary> + 小数点后的位数(默认为2) + </summary> + </member> + <member name="T:FineUI.TextMode"> + <summary> + 文本框类型 + </summary> + </member> + <member name="F:FineUI.TextMode.Text"> + <summary> + 普通文本框(默认值) + </summary> + </member> + <member name="F:FineUI.TextMode.Password"> + <summary> + 密码输入框 + </summary> + </member> + <member name="T:FineUI.TextModeHelper"> + <summary> + 文本框类型名称 + </summary> + </member> + <member name="T:FineUI.ToolTipType"> + <summary> + 提示框的类型 + </summary> + </member> + <member name="F:FineUI.ToolTipType.Qtip"> + <summary> + Extjs的浮动提示框(默认值) + </summary> + </member> + <member name="F:FineUI.ToolTipType.Title"> + <summary> + HTML标签的title属性 + </summary> + </member> + <member name="T:FineUI.ToolTipTypeName"> + <summary> + 提示框的类型名称 + </summary> + </member> + <member name="T:FineUI.JsHelper"> + <summary> + JavaScript帮助类 + </summary> + </member> + <member name="M:FineUI.JsHelper.GetFunction(System.String,System.String[])"> + <summary> + 获取一段完成的JavaScript函数 + </summary> + <param name="jsContent">函数主体</param> + <param name="funParameters">函数参数</param> + <returns>字符串表示的JavaScript函数</returns> + </member> + <member name="M:FineUI.JsHelper.GetDeferScript(System.String,System.Int32)"> + <summary> + 获取延迟执行JavaScript脚本的字符串 + </summary> + <param name="jsContent">需要执行的脚本内容</param> + <param name="milliseconds">延迟毫秒数</param> + <returns>延迟执行的客户端脚本</returns> + </member> + <member name="M:FineUI.JsHelper.GetDeferScript(System.String,System.Int32,System.String)"> + <summary> + 获取延迟执行JavaScript脚本的字符串 + </summary> + <param name="jsContent">需要执行的脚本内容</param> + <param name="milliseconds">延迟毫秒数</param> + <param name="scope">执行脚本时的函数上下文</param> + <returns>延迟执行的客户端脚本</returns> + </member> + <member name="M:FineUI.JsHelper.Enquote(System.String)"> + <summary> + 返回的是单引号括起来的字符串,用来作为JSON属性比较合适 + </summary> + <param name="s">源字符串</param> + <returns>单引号括起来的字符串</returns> + </member> + <member name="M:FineUI.JsHelper.EnquoteWithScriptTag(System.String)"> + <summary> + 将包含JavaScript代码块的字符串转换为可以使用的客户端脚本 + </summary> + <param name="text">包含JavaScript代码块的字符串</param> + <returns>转换后的客户端脚本</returns> + </member> + <member name="M:FineUI.JsHelper.EnquoteStringArray(System.String[])"> + <summary> + 获取字符串数组的脚本字符串形式 + </summary> + <param name="values">字符串数组</param> + <returns>字符串数组的脚本字符串</returns> + </member> + <member name="M:FineUI.JsHelper.EnquoteIntArray(System.Int32[])"> + <summary> + 获取整形数组的脚本字符串形式 + </summary> + <param name="values">整数数组</param> + <returns>整形数组的脚本字符串</returns> + </member> + <member name="M:FineUI.JsHelper.NumberToString(System.Object)"> + <summary> + 将数字对象转化为字符串 + </summary> + <param name="number">数字对象</param> + <returns>字符串</returns> + </member> + <member name="T:FineUI.Alert"> + <summary> + 对话框帮助类 + </summary> + </member> + <member name="F:FineUI.Alert.DefaultMessageBoxIcon"> + <summary> + 默认提示对话图标 + </summary> + </member> + <member name="M:FineUI.Alert.Show"> + <summary> + 显示对话框 + </summary> + </member> + <member name="M:FineUI.Alert.GetShowReference"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.Show(System.String)"> + <summary> + 显示对话框 + </summary> + <param name="message">消息正文</param> + </member> + <member name="M:FineUI.Alert.Show(System.String,System.String)"> + <summary> + 显示对话框 + </summary> + <param name="message">消息正文</param> + <param name="title">标题</param> + </member> + <member name="M:FineUI.Alert.Show(System.String,FineUI.MessageBoxIcon)"> + <summary> + 显示对话框 + </summary> + <param name="message">消息正文</param> + <param name="icon">图标</param> + </member> + <member name="M:FineUI.Alert.Show(System.String,System.String,System.String)"> + <summary> + 显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + </member> + <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + </member> + <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> + <summary> + 显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + </member> + <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target)"> + <summary> + 显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <param name="target">显示对话框的目标页面</param> + </member> + <member name="M:FineUI.Alert.Show(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target,FineUI.Icon,System.String)"> + <summary> + 显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="messageBoxIcon"></param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <param name="target">显示对话框的目标页面</param> + <param name="icon">自定义对话框图标</param> + <param name="iconUrl">自定义对话框图标地址</param> + </member> + <member name="M:FineUI.Alert.ShowInParent(System.String)"> + <summary> + 在父页面中显示对话框 + </summary> + <param name="message">消息正文</param> + </member> + <member name="M:FineUI.Alert.ShowInParent(System.String,System.String)"> + <summary> + 在父页面中显示对话框 + </summary> + <param name="message">消息正文</param> + <param name="title">标题</param> + </member> + <member name="M:FineUI.Alert.ShowInParent(System.String,FineUI.MessageBoxIcon)"> + <summary> + 在父页面中显示对话框 + </summary> + <param name="message">消息正文</param> + <param name="icon">图标</param> + </member> + <member name="M:FineUI.Alert.ShowInParent(System.String,System.String,System.String)"> + <summary> + 在父页面中显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + </member> + <member name="M:FineUI.Alert.ShowInParent(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 在父页面中显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + </member> + <member name="M:FineUI.Alert.ShowInParent(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> + <summary> + 在父页面中显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + </member> + <member name="M:FineUI.Alert.ShowInTop(System.String)"> + <summary> + 在顶层窗口中显示对话框 + </summary> + <param name="message">消息正文</param> + </member> + <member name="M:FineUI.Alert.ShowInTop(System.String,System.String)"> + <summary> + 在顶层窗口中显示对话框 + </summary> + <param name="message">消息正文</param> + <param name="title">对话框标题</param> + </member> + <member name="M:FineUI.Alert.ShowInTop(System.String,FineUI.MessageBoxIcon)"> + <summary> + 在顶层窗口中显示对话框 + </summary> + <param name="message">消息正文</param> + <param name="icon">自定义对话框图标</param> + </member> + <member name="M:FineUI.Alert.ShowInTop(System.String,System.String,System.String)"> + <summary> + + </summary> + <param name="message">消息正文</param> + <param name="title">对话框标题</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + </member> + <member name="M:FineUI.Alert.ShowInTop(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + + </summary> + <param name="message">消息正文</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + </member> + <member name="M:FineUI.Alert.ShowInTop(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> + <summary> + 在顶层窗口中显示对话框 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String,System.String)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="icon">自定义对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,System.String)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <param name="target">显示对话框的目标页面</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowReference(System.String,System.String,FineUI.MessageBoxIcon,System.String,FineUI.Target,FineUI.Icon,System.String)"> + <summary> + 获取显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="messageBoxIcon"></param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <param name="target">显示对话框的目标页面</param> + <param name="icon"></param> + <param name="iconUrl">自定义对话框图标地址</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInParentReference(System.String)"> + <summary> + 获取在父页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String)"> + <summary> + 获取在父页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInParentReference(System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取在父页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="icon">自定义对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取在父页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String,System.String)"> + <summary> + 获取在父页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInParentReference(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> + <summary> + 获取在父页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInTopReference(System.String)"> + <summary> + 获取在最上层页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String)"> + <summary> + 获取在最上层页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInTopReference(System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取在最上层页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="icon">自定义对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String,FineUI.MessageBoxIcon)"> + <summary> + 获取在最上层页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String,System.String)"> + <summary> + 获取在最上层页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="M:FineUI.Alert.GetShowInTopReference(System.String,System.String,FineUI.MessageBoxIcon,System.String)"> + <summary> + 获取在最上层页面中显示对话框的客户端脚本 + </summary> + <param name="message">对话框消息</param> + <param name="title">对话框标题</param> + <param name="icon">自定义对话框图标</param> + <param name="okScript">点击确定按钮执行的客户端脚本</param> + <returns>客户端脚本</returns> + </member> + <member name="P:FineUI.Alert.Message"> + <summary> + 对话框消息正文 + </summary> + </member> + <member name="P:FineUI.Alert.Title"> + <summary> + 对话框标题 + </summary> + </member> + <member name="P:FineUI.Alert.MessageBoxIcon"> + <summary> + 对话框图标 + </summary> + </member> + <member name="P:FineUI.Alert.OkScript"> + <summary> + 点击确认按钮执行的JavaScript脚本 + </summary> + </member> + <member name="P:FineUI.Alert.Target"> + <summary> + 对话框的目标位置 + </summary> + </member> + <member name="P:FineUI.Alert.IconUrl"> + <summary> + 自定义对话框图标地址 + </summary> + </member> + <member name="P:FineUI.Alert.Icon"> + <summary> + 自定义对话框图标 + </summary> + </member> + <member name="T:FineUI.MessageBoxIcon"> + <summary> + 消息框图标类型 + </summary> + </member> + <member name="F:FineUI.MessageBoxIcon.Information"> + <summary> + 信息(默认值) + </summary> + </member> + <member name="F:FineUI.MessageBoxIcon.Warning"> + <summary> + 警告 + </summary> + </member> + <member name="F:FineUI.MessageBoxIcon.Question"> + <summary> + 问题 + </summary> + </member> + <member name="F:FineUI.MessageBoxIcon.Error"> + <summary> + 错误 + </summary> + </member> + <member name="T:FineUI.MessageBoxIconHelper"> + <summary> + 消息框图标类型名称 + </summary> + </member> + <member name="T:FineUI.JsObjectBuilder"> + <summary> + 创建Javascript对象参数的帮助类 + </summary> + </member> + <member name="M:FineUI.JsObjectBuilder.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.JsObjectBuilder.#ctor(System.String,System.Object)"> + <summary> + 构造函数 + </summary> + <param name="propertyName">属性名</param> + <param name="propertyValue">属性值</param> + </member> + <member name="M:FineUI.JsObjectBuilder.#ctor(System.String,System.Object,System.Boolean)"> + <summary> + 构造函数 + </summary> + <param name="propertyName">属性名</param> + <param name="propertyValue">属性值</param> + <param name="persistOriginal">是否保持原样</param> + </member> + <member name="M:FineUI.JsObjectBuilder.RemoveProperty(System.String)"> + <summary> + 删除属性 + </summary> + <param name="propertyName">属性名</param> + </member> + <member name="M:FineUI.JsObjectBuilder.ContainsProperty(System.String)"> + <summary> + 是否包含属性 + </summary> + <param name="propertyName">属性名</param> + <returns></returns> + </member> + <member name="M:FineUI.JsObjectBuilder.AddProperty(System.String,System.Object)"> + <summary> + 添加属性 + </summary> + <param name="propertyName">属性名</param> + <param name="propertyValue">属性值</param> + </member> + <member name="M:FineUI.JsObjectBuilder.AddProperty(System.String,System.Object,System.Boolean)"> + <summary> + 添加属性 + </summary> + <param name="propertyName">属性名</param> + <param name="propertyValue">属性值</param> + <param name="persistOriginal">是否保持原样</param> + </member> + <member name="M:FineUI.JsObjectBuilder.GetProperty(System.String)"> + <summary> + 获取属性 + </summary> + <param name="propertyName">属性名</param> + <returns>属性值</returns> + </member> + <member name="M:FineUI.JsObjectBuilder.ToString"> + <summary> + 返回对象的JSON字符串形式 + </summary> + <returns>对象的JSON形式</returns> + </member> + <member name="P:FineUI.JsObjectBuilder.Count"> + <summary> + 已经添加属性的个数 + </summary> + </member> + <member name="T:FineUI.ResourceHelper"> + <summary> + 资源帮助类 + </summary> + </member> + <member name="M:FineUI.ResourceHelper.GetWebResourceUrlResAxd(System.String)"> + <summary> + 获取嵌入资源的 res.axd 地址 + </summary> + <param name="resName">资源名称</param> + <returns>资源地址</returns> + </member> + <member name="M:FineUI.ResourceHelper.GetWebResourceUrlResAxd(System.Web.UI.Page,System.String)"> + <summary> + 获取嵌入资源的 res.axd 地址 + </summary> + <param name="page">页面对象</param> + <param name="resName">资源名称</param> + <returns>资源地址</returns> + </member> + <member name="M:FineUI.ResourceHelper.GetWebResourceUrl(System.String)"> + <summary> + 获取嵌入资源的地址 + </summary> + <param name="resourceName">资源名称</param> + <returns>资源地址</returns> + </member> + <member name="M:FineUI.ResourceHelper.GetWebResourceUrl(System.Web.UI.Page,System.String)"> + <summary> + 获取嵌入资源的地址 + </summary> + <param name="page">页面实例</param> + <param name="resourceName">资源名称</param> + <returns>资源地址</returns> + </member> + <member name="M:FineUI.ResourceHelper.GetResourceContent(System.String)"> + <summary> + 取得资源的内容 + </summary> + <param name="resourceName">资源名称</param> + <returns>资源内容</returns> + </member> + <member name="M:FineUI.ResourceHelper.GetResourceContentAsBinary(System.String)"> + <summary> + 取得资源的二进制内容 + </summary> + <param name="resourceName">资源名称</param> + <returns>资源的二进制内容</returns> + </member> + <member name="M:FineUI.ResourceHelper.GetEmptyImageUrl"> + <summary> + 获取空白图片的地址 + </summary> + <returns>空白图片的地址</returns> + </member> + <member name="T:FineUI.Constants"> + <summary> + 常量 + </summary> + </member> + <member name="F:FineUI.Constants.ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL"> + <summary> + 绝对脚本的默认级别(仅内部使用) + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_CSV"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_EXCEL"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_WORD"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_TEXT"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_IMAGES"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_HTML"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_VIDEO"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_AUDIO"> + <summary> + 文件类型 + </summary> + </member> + <member name="F:FineUI.Constants.FILETYPE_PDF"> + <summary> + 文件类型 + </summary> + </member> + <member name="T:FineUI.ConfigSectionName"> + <summary> + 配置字段名称 + </summary> + </member> + <member name="T:FineUI.ConfigPropertyName"> + <summary> + 字段属性名称 + </summary> + </member> + <member name="T:FineUI.ConfigPropertyValue"> + <summary> + 字段属性值 + </summary> + </member> + <member name="T:FineUI.CategoryName"> + <summary> + 属性分类的名称 + </summary> + </member> + <member name="F:FineUI.CategoryName.BASEOPTIONS"> + <summary> + 基本属性 + </summary> + </member> + <member name="F:FineUI.CategoryName.OPTIONS"> + <summary> + 属性 + </summary> + </member> + <member name="F:FineUI.CategoryName.VALIDATION"> + <summary> + 表单验证 + </summary> + </member> + <member name="F:FineUI.CategoryName.LAYOUT"> + <summary> + 布局 + </summary> + </member> + <member name="F:FineUI.CategoryName.ACTION"> + <summary> + 事件 + </summary> + </member> + <member name="T:FineUI.TextBox"> + <summary> + 文本框控件 + </summary> + </member> + <member name="M:FineUI.TextBox.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.TextBox.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TextBox.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="P:FineUI.TextBox.TextMode"> + <summary> + 文本框类型 + </summary> + </member> + <member name="T:FineUI.ConfigSection"> + <summary> + FineUI在Web.config中的配置节 + </summary> + </member> + <member name="P:FineUI.ConfigSection.Theme"> + <summary> + 主题 + </summary> + </member> + <member name="P:FineUI.ConfigSection.Language"> + <summary> + 语言 + </summary> + </member> + <member name="P:FineUI.ConfigSection.FormMessageTarget"> + <summary> + 表单验证消息的提示位置 + </summary> + </member> + <member name="P:FineUI.ConfigSection.FormLabelAlign"> + <summary> + 表单中标签的位置 + </summary> + </member> + <member name="P:FineUI.ConfigSection.FormOffsetRight"> + <summary> + 表单控件右侧距离边界的距离 + </summary> + </member> + <member name="P:FineUI.ConfigSection.FormLabelWidth"> + <summary> + 表单控件标签的宽度 + </summary> + </member> + <member name="P:FineUI.ConfigSection.FormLabelSeparator"> + <summary> + 表单控件标签的分隔符 + </summary> + </member> + <member name="P:FineUI.ConfigSection.EnableAjax"> + <summary> + 启用AJAX + </summary> + </member> + <member name="P:FineUI.ConfigSection.EnableAjaxLoading"> + <summary> + 启用AJAX加载提示信息 + </summary> + </member> + <member name="P:FineUI.ConfigSection.AjaxLoadingType"> + <summary> + AJAX提示信息的类型 + </summary> + </member> + <member name="P:FineUI.ConfigSection.AjaxTimeout"> + <summary> + 客户端AJAX超时时间 + </summary> + </member> + <member name="P:FineUI.ConfigSection.EnableBigFont"> + <summary> + 是否启用大字体(将ExtJS所有11px字体改为12px) + </summary> + </member> + <member name="P:FineUI.ConfigSection.DebugMode"> + <summary> + 是否启用调试模式 + </summary> + </member> + <member name="P:FineUI.ConfigSection.JSBasePath"> + <summary> + JS文件夹所在的根目录 + </summary> + </member> + <member name="P:FineUI.ConfigSection.IconBasePath"> + <summary> + 图标所在的根目录 + </summary> + </member> + <member name="P:FineUI.ConfigSection.CustomThemeBasePath"> + <summary> + 自定义主题所在的根目录 + </summary> + </member> + <member name="P:FineUI.ConfigSection.CustomTheme"> + <summary> + 自定义主题名称 + </summary> + </member> + <member name="P:FineUI.ConfigSection.EnableFStateCompress"> + <summary> + 是否启用FState压缩(默认为false) + </summary> + </member> + <member name="P:FineUI.ConfigSection.IEEdge"> + <summary> + 是否向页面输出IE=edge标识 + </summary> + </member> + <member name="P:FineUI.ConfigSection.EnableFormChangeConfirm"> + <summary> + 是否启用表单改变确认对话框 + </summary> + </member> + <member name="T:FineUI.ResourceManager"> + <summary> + 存在 Page.Items 上下文中,向页面注册资源 + </summary> + </member> + <member name="F:FineUI.ResourceManager._startupCssDic"> + <summary> + 需要向页面注册的样式列表 + </summary> + </member> + <member name="M:FineUI.ResourceManager.EnsureResourceManagerInstance(System.Web.UI.Page)"> + <summary> + 确保ResourceManager实例的Page和当前页面一致 + </summary> + <param name="page"></param> + </member> + <member name="M:FineUI.ResourceManager.Page_PreRenderComplete(System.Object,System.EventArgs)"> + <summary> + 准备呈现页面内容,在保存页面状态之前 + </summary> + <param name="sender"></param> + <param name="e"></param> + </member> + <member name="M:FineUI.ResourceManager.SetupFirstLoadResource"> + <summary> + 注册页面第一次加载时的样式和脚本 + </summary> + </member> + <member name="M:FineUI.ResourceManager.RegisterStartupScript"> + <summary> + 注册页面脚本 + </summary> + </member> + <member name="M:FineUI.ResourceManager.IsStartupScriptRegistered(System.String)"> + <summary> + 是否注册startup脚本 + </summary> + <param name="scriptKey"></param> + <returns></returns> + </member> + <member name="M:FineUI.ResourceManager.GetStartupScript(System.String)"> + <summary> + 取得页面初始化时脚本 + </summary> + <param name="script"></param> + <returns></returns> + </member> + <member name="M:FineUI.ResourceManager.GetSortedControlScriptList"> + <summary> + 返回经过排序的 _startupControlScriptList 列表,子控件排在父控件的前面 + </summary> + <returns></returns> + </member> + <member name="M:FineUI.ResourceManager.GetInsertIndex(FineUI.ControlBase,System.Collections.Generic.List{FineUI.ScriptBlock})"> + <summary> + 取得应该将Script插入的位置 + 要能够向上回溯,因为控件的父控件可能不存在列表中,而父控件的父控件存在列表中 + </summary> + <param name="testControl"></param> + <param name="checkList"></param> + <returns></returns> + </member> + <member name="M:FineUI.ResourceManager.AddStartupCSS(System.String,System.String)"> + <summary> + 添加样式 + </summary> + <param name="key"></param> + <param name="cssConent"></param> + <returns></returns> + </member> + <member name="M:FineUI.ResourceManager.RemoveStartupCSS(System.String)"> + <summary> + 删除已经添加的CSS样式 + </summary> + <param name="key"></param> + </member> + <member name="M:FineUI.ResourceManager.AddStartupScript(FineUI.ControlBase,System.String,System.String)"> + <summary> + 添加脚本 + 相同控件的脚本合并在一起(30372245@qq.com 2008-7-4) + </summary> + <param name="control"></param> + <param name="script"></param> + <param name="extraScript"></param> + </member> + <member name="M:FineUI.ResourceManager.IsStartupScriptExist(FineUI.ControlBase)"> + <summary> + 控件control的注册脚本是否存在 + </summary> + <param name="control"></param> + <returns></returns> + </member> + <member name="P:FineUI.ResourceManager.AjaxScriptList"> + <summary> + AJAX时每个控件需要注册的脚本 + </summary> + </member> + <member name="P:FineUI.ResourceManager.AjaxAbsoluteScriptList"> + <summary> + AJAX时不依赖控件的脚本 + </summary> + </member> + <member name="P:FineUI.ResourceManager.AjaxShortNameList"> + <summary> + AJAX时使用到的所有短名称列表 + 比如:F('SimpleForm1_tbxUserName') -> cmp0 + F('SimpleForm1_tbxPassword') -> cmp1 + </summary> + </member> + <member name="P:FineUI.ResourceManager.Instance"> + <summary> + 取得 ResourceManager 的实例,单件模式 + </summary> + </member> + <member name="T:FineUI.CheckBoxList"> + <summary> + 复选框列表控件 + </summary> + </member> + <member name="M:FineUI.CheckBoxList.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.CheckBoxList.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.CheckBoxList.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.CheckBoxList.DataBind"> + <summary> + 绑定到数据源 + </summary> + </member> + <member name="M:FineUI.CheckBoxList.DataBindToDataTable(System.Data.DataTable)"> + <summary> + 绑定到数据表 + </summary> + <param name="dataTable"></param> + </member> + <member name="M:FineUI.CheckBoxList.DataBindToEnumerable(System.Collections.IEnumerable)"> + <summary> + 绑定到可枚举列表 + </summary> + <param name="enumerable"></param> + </member> + <member name="M:FineUI.CheckBoxList.GetPropertyValue(System.Object,System.String)"> + <summary> + 取得属性值 + </summary> + <param name="obj"></param> + <param name="propertyName"></param> + </member> + <member name="M:FineUI.CheckBoxList.LoadPostData(System.String,System.Collections.Specialized.NameValueCollection)"> + <summary> + 处理回发数据 + </summary> + <param name="postDataKey">回发数据键</param> + <param name="postCollection">回发数据集</param> + <returns>回发数据是否改变</returns> + </member> + <member name="M:FineUI.CheckBoxList.RaisePostDataChangedEvent"> + <summary> + 触发回发数据改变事件 + </summary> + </member> + <member name="M:FineUI.CheckBoxList.OnSelectedIndexChanged(System.EventArgs)"> + <summary> + 触发选中项改变事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.CheckBoxList.Required"> + <summary> + 是否必填项 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.RequiredMessage"> + <summary> + 为空时提示信息 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.AutoPostBack"> + <summary> + 是否自动回发 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.ColumnNumber"> + <summary> + 渲染成几列 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.ColumnVertical"> + <summary> + 是否按照纵向顺序渲染 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.DataTextField"> + <summary> + 显示文本的数据字段 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.DataTextFormatString"> + <summary> + 显示文本的格式化字符串 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.DataValueField"> + <summary> + 显示值的数据字段 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.DataSource"> + <summary> + 数据源 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.SelectedValueArray"> + <summary> + [AJAX属性]选中项的值 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.SelectedIndexArray"> + <summary> + [AJAX属性]选中项的索引 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.SelectedItemArray"> + <summary> + 选中项 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.Items"> + <summary> + 复选框集合 + </summary> + </member> + <member name="P:FineUI.CheckBoxList.F_Items"> + <summary> + 保存的复选框数据(内部使用) + </summary> + </member> + <member name="E:FineUI.CheckBoxList.SelectedIndexChanged"> + <summary> + 选中项改变事件(需要启用AutoPostBack) + </summary> + </member> + <member name="T:FineUI.CheckItem"> + <summary> + 复选框列表项 + </summary> + </member> + <member name="M:FineUI.CheckItem.#ctor"> + <summary> + 构造函数 + </summary> + </member> + <member name="M:FineUI.CheckItem.#ctor(System.String,System.String)"> + <summary> + 构造函数 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + </member> + <member name="M:FineUI.CheckItem.#ctor(System.String,System.String,System.Boolean)"> + <summary> + 构造函数 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + <param name="selected">是否选中</param> + </member> + <member name="P:FineUI.CheckItem.Selected"> + <summary> + 是否选中 + </summary> + </member> + <member name="P:FineUI.CheckItem.Text"> + <summary> + 显示的文本 + </summary> + </member> + <member name="P:FineUI.CheckItem.Value"> + <summary> + 值 + </summary> + </member> + <member name="T:FineUI.CheckItemCollection"> + <summary> + 复选项集合 + </summary> + </member> + <member name="M:FineUI.CheckItemCollection.FindByText(System.String)"> + <summary> + 通过文本查找复选项 + </summary> + <param name="text">文本</param> + <returns>复选项</returns> + </member> + <member name="M:FineUI.CheckItemCollection.FindByText(System.String,System.Boolean)"> + <summary> + 通过文本查找复选项 + </summary> + <param name="text">文本</param> + <param name="stripHtml">是否去除HTML标签</param> + <returns>复选项</returns> + </member> + <member name="M:FineUI.CheckItemCollection.FindByValue(System.String)"> + <summary> + 通过值查找复选项 + </summary> + <param name="value">值</param> + <returns>复选项</returns> + </member> + <member name="M:FineUI.CheckItemCollection.Add(System.String,System.String)"> + <summary> + 添加复选项 + </summary> + <param name="text">文本</param> + <param name="value">值</param> + <returns>新元素的插入位置</returns> + </member> + <member name="T:FineUI.TimePicker"> + <summary> + 时间选择框控件 + </summary> + </member> + <member name="M:FineUI.TimePicker.OnAjaxPreRender"> + <summary> + 渲染 HTML 之前调用(AJAX回发) + </summary> + </member> + <member name="M:FineUI.TimePicker.OnFirstPreRender"> + <summary> + 渲染 HTML 之前调用(页面第一次加载或者普通回发) + </summary> + </member> + <member name="M:FineUI.TimePicker.RaisePostBackEvent(System.String)"> + <summary> + 处理回发事件 + </summary> + <param name="eventArgument">事件参数</param> + </member> + <member name="M:FineUI.TimePicker.OnDateSelect(System.EventArgs)"> + <summary> + 触发日期选择事件 + </summary> + <param name="e">事件参数</param> + </member> + <member name="P:FineUI.TimePicker.EnableEdit"> + <summary> + 是否允许编辑 + </summary> + </member> + <member name="P:FineUI.TimePicker.SelectedDate"> + <summary> + 选择的时间 + </summary> + </member> + <member name="P:FineUI.TimePicker.AltFormats"> + <summary> + 尝试解析时间的格式列表 + </summary> + </member> + <member name="P:FineUI.TimePicker.TimeFormatString"> + <summary> + 时间格式(默认为HH:mm,24小时制,比如“20:30”) + </summary> + </member> + <member name="P:FineUI.TimePicker.MaxTime"> + <summary> + 最大时间 + </summary> + </member> + <member name="P:FineUI.TimePicker.MaxTimeText"> + <summary> + 最大时间的字符串形式 + </summary> + </member> + <member name="P:FineUI.TimePicker.MinTime"> + <summary> + 最小时间 + </summary> + </member> + <member name="P:FineUI.TimePicker.MinTimeText"> + <summary> + 最小时间的字符串形式 + </summary> + </member> + <member name="P:FineUI.TimePicker.Increment"> + <summary> + 列表中每个时间值相差的分钟数(默认为15分钟) + </summary> + </member> + <member name="P:FineUI.TimePicker.EnableTimeSelectEvent"> + <summary> + 选择时间是否自动回发 + </summary> + </member> + <member name="E:FineUI.TimePicker.DateSelect"> + <summary> + 日期选择事件(需要启用EnableDateSelect) + </summary> + </member> + </members> +</doc> diff --git a/FineUI/bin/Release/Newtonsoft.Json.dll b/FineUI/bin/Release/Newtonsoft.Json.dll index eeeebf5eff2df798087142a1804935577c6e435f..2024b03b53bf96f74c2bc94f27d0fbc776e51564 100644 GIT binary patch literal 440320 zcmb@v37i~N)%V|1)l<F9Op>0NbkCAx!je#Q&rCuB5(2U*2q>Tkn1CXnvV^6eJ8?<V zV?ag404|8iCPq<2K}5wJ_kBZDRKz^$>-M<oqdq=98vftkxmDfOlS#t+dH<7C-FweH z_uO;OJ?Gq|ZdIRn#%nWvCX>l>J@!~8^ASS*9clO7-?orFZ{lO~G9N5_W3P|&Jnb8M zoqEBAjir~>qx0+MT(b0e=UjSev~lUVFIZaNbm`IyFJ1cNlb^ZtlIZy_m>w7??i-VS z`Z1Zz(|Y{O^~;}oN>bZTGTvT&J$;$XJwYauchCpEL3}CkpAcp;3oPzAz6B8f_O~>b z$pF9gmjUfM@)bhW|4tYu9d_no=$@=Nbl0?r#F-Z4GW~=Hem%%6N`v<lU)pBfF!Q93 zOO=`4_<|R2B>nlj<94a7@SXl!n#r6!U2oK%2hey^+tvJgb?f{cNq0@xUvO~*qIk_@ zoD4Ge?}T@>Wv6bpORoHhH!sth`TD(H=7RBTreM&{?deN1nJt~<E@K-v9`NRq9((0e zuKf3BSB`D@z)bMBg^xY!XTJ|G-M;=^7vBB;OFs1OKNR|hPyWqy7e9RVHQP^n@XSw6 zO#b|?wck2z{Q(EPW6jBrJnI!-tRH;ddp~`}AJ04gh}?f4aP`gKcuMP<yT>ki>9gMO z-sz){D8Boy>+^#T<<405jsKXp?5NND`rua$eWd@yPk;5ye;$4NU4H)(uZak<)xABx zWs%dp@I{$S(W`_=Hvn2x_A0NbFnTdr?ZiuzINI|=3I@vw5o1uzWX4zaX5NmG^kgz6 zKe`y;&|qn>vi_Js#Lxn|jjNaV?Of}q=6H~AC430@U$~V14C#Fd)7NV9lwL=;W`c;n z5v})%j=3O;s4ChFS3!iX1Vcl$(@H~86F{Fs$wk)-MJz>E0QPdxwTid6ZG1Hx$LW`n z9vt4Wa6cMT8V<3k092K=HbRsV#i?!E`%6QUIg&6`eALxZj%G+y{f$V)>vynxhqdyC zfqaDIf}w@A6G{ssswxg;9a<@yVr|e5w~!ZJ$*mCjeQ;EcIVwAjN?GHkP}#6<07}Nv z-LSL}mKM&*(f}+C^~RO;TC-gxS5b*c4!#X3h>@IZ9Ma2#^m1+qQZ7cyr6}P+iqX{$ zX`ZUfd!@YPn}CT+xCH8~vGt8tf@;l4h!$d^1uJyNR(d6RRjSfrdBad&sc5;IrpTQ< zJWk!A)KI?{(i=f#b>CorNS_vm`fGy@HnO?^>>7iW`pe<ABHa+HMyW4p+I(?6P#SPd z?~e)$&5L=Ocin|1r8qgDB7yaHf)KqX#p?Xh{1lM|G0uVn2RG{tmAq0ZLI^1(OaP{Z zmAKC<ai5nW+SH9~07D*$kw=_F>j>hqI+k{sb)d7wtyrNKJ{f&#Alu^RYNiKA?PX>% z=l;aGLoc(a=UI)OeylU|+4+8WEohU2j(d{Vk#th<vta>dTu!X_lo?tXWHu0D!6kq4 zJg<q7W~UZ-OXU%+g<4NbkgTOwPR~Fi>z94m7pAPNa`al_%N^kul#N~otm?3%*As8s zy~%vgudJ(5w`YyOIh3+fex=qkUJU$o)$x_t3|SiY5}!1$G%xl^{|U3d<w8=K3%H&P zpGR`Zh7RXCI!;TT_szO~0lr|rB3yGfk=Q4V^~FwTer*ypkQ3^!3>3V)c^q?@>nv$r z1z88{26BaUeNJVHQ(wc7=VQq8ogwEc>-vIRbQyTL*tZO2$A)?_h5)x=4rM{@pwa^8 zP;#Z-%DSQ6Qm<DE%y)#i?;wWcT<v5BxDLuMkd_vwK1-DgsB(d;GA5BN^;)&mB9pC- zRhRJ3-{_1xZQDbIQodA}^2@b;>!ng5dINN$Efg!68;DK+N&q4K95}+x7gQ_NvJp1> zE5<gxaevt#_C8+fyY9kuu0YXoGSLqkW<>pE8LU_8H%p3}7eijH%1plC^kdeNA(+;f z$7LbTKBCMacP94n!_3j+&OTO^8#mC#Ez;pCgXw@m4W<_PtQ$=I`f0Mk3$Z!>x(g@z zrx(=Ek!1?ncq7F(GkDVMKom+brSXK4MaZC~j<iJpEKC3v0WgvPECOIO0aye;SpeC{ zO4Jo~FZsp6On4(Klvfsr$<%8-<;ey0n`blFva-;i<E^PMoUNYWH5E>I!&MiH-UJC} zhm+JHJM@}kphRybqv%CT)E|d)n;P)07$T$jej^Z60}Oa*rJuQ!a?G+y>Fi+UEu!nh zGd?}yA`^vaT(cxLx}&GOqX*WD!Q_6f!pgPN_@MrL`Fe$3Q*~XbXkG(Et%lzcUwygo z>K;UYwAUOaxoj#}9-^^D>qSAT*Z8RxtQc?!Kf1{=B(l{<;#pI<C1$*_2I4EWMBW>1 zse8OiOP%7CTj~mCR}|A+X$ZgcHrkt0d&9K=)2$xx{Km^*u4R?Did{pZTc{wN>s_J# zalZO=FWL)Am34SXLHmNi9_!=-3Ph4VUg<R}WKM<frifSnnzU4Hcg42uhwa%&5x%=O z6EIRZes3paN|f%`@&QLUzKRIin%(L1%6b!(wPCKzTdA-%loU6W*s;*MEY+l%YZ8OC z8q}X-M8A=8D6Q9SP!8#;A%huHDdwpi{i=>NZUcX_<b537kG+<>krrcN){8KPV5;Di z!!<-uWYf`NFh2crFMI-^$x$zwBJ6Xh%e{$GE<6N4t{O}fR!@7;1PPnp^yh6Do6P6K zx2j!1*#^7;iWIC!fg*jYF_&PXw7NeoDJNGAMvlB5$u<x#Gs0RuVFL#pjITciOUgWx z>tHUVpD6_s^QOmZD@rs#)mz7f=u$D-rkYpbu-`6Hz0_UmwaQDqRj*#_iF-NN`UuvL z>fl%sS9|rB3dcH~TEwka|H3YdNv0KK$`DiX#?mq^#WEfAcPzvkj2BX}eKc4+oeh?( zUhCN3M1IfIB5z5$HSd7vR%ICXF6R!V8+VXnlI$DII@+bIb;gAbEAEW&o#0Ilc@urs zw}ZVgZf`X|5qaT0$PJ5lmym|NCAm&rIah;MU+g6|;iRmIQ%5p=gF#F&Ktz`(xI0PK z?0g&<G3u4Dx0K$cWh8^!os5|ENJfj(GSbw2t1{9uQrf209T|ysETaqdBqPH`MvL1b zy3>hhajsKU&Q;*mzmYUMW@`=+89|9?FTX8L4Ft0_(B$-9w7Xw&8coY-PWzPkB}T+R z-($^{afMHW`sA^WqshZvxQU^vXL2lVy%NK&fzi8ZUSBPy6y2qiH&N&qd29o%g!`Qs zmkkWkzYO~&Z#>O+yMMhM3vnXj`Pc@=r?)!`pIETE<XEx=OyfP&9^>FCin1M*OZ0*k zZ;o4_7BhU!(sArT`1EzowQlJa1j^u!T#J)?2VRH^4Z@pQ{1m;31;JLZo$>^6-SzJ$ z?Q|7&xd?R|KA}&xWcA3WOl5c9tr;Kr;FjzUH|_Laq$)>V3o!OP{b|qR>bB0PzfAP+ z7XNgq-1TyoJ9%&#>w2)FdxW*L3(L`XPn(8UN&B<PY$Yt)xa?(c{ciqZ<H6YKoEMR! zs>Qg?VJ1i1xKwmmlZC*gSN*ZdhRCp)q|LW}2(5Y24ZlT@^|CEZoBU$H5`-y(Rz|k% zh9}RQz{T!F=6SohR*=VNl{qSfQ^jCx`cVn7H>_>kB}d}qM8Ty;lk`A%sNqe_OCs~* z$cV$V@iS|_wDke_t$JR_SQSiVC;DqWOB|BTTB=vagY5@F!{J)VWzG9YRo1l>XinIh zc?$f}a^^ZAbeO?}M-T?ndwcbdCOYI>hnQY^;W2H0J4fB3naw;Gn#_rzDc*`fU+x%| zc^T%-T7qg=Li?HV?akmM`Bc3{aX3*-BK>iszE5wg$#MN1XGUFK<}e6ZKNf?<>*38+ zp=xGdVj;Pbyc(KUHho~pozOu8G`1%=3KP6+h7K}3G-YC-gDApGku$ZRQXQ#|qRzig z_;%7une5(PB|=St>Pc>@ym-3cPok$s3wDOL*jkQFnqCf@UTPh}Ji{$FECK*?Z~%({ zK>r-TB2~{XkAzPZQ5SuhqT9W2IiX*#2FO(_ASSKvqf=UFaMo+wt0)F7ix6F}w`J76 znv`49DYu6r)<4X(GxTu@WjUXETdPGgJd0>itE=z;F-5p44#~IlfpK_{!nJJ=C0Ap6 z2iHRvC1TDCX0|_nOaXwpN-B_CtQIn}uiCg5u7gUkw%QAyWs#~Eo^Fx7y!x?f-WG)5 z2ybO(m!6RYQ+@Fis@%7IL8Whd|ME^clVk4&#n<1JS7!R(fE&5S3)Qb)2(tlp*p!$j znKmno-cLoc89(zNWrkAi8C!phc0Y76eK*(g62co5-^R@wtJlS<X1(|o2>~Y>zJMgt z;er=pgn`Rl)Xt?NnBdK$>`YRYLKT~ep?4xO+PDa$q8Ef`5W=@8ww@f5m*DzxlMIhG z>I~q5msqh})teY_bjopcjr(Yv&F}vPzjOosKnxUvk@d%@ryyb5^udzp4QoE?+O##{ zi?u-9ChOpl)eE{?1>cr2x_Xf5v^UWoUI=Y#um+PGp_A^x55S9?B|7NH>V-(*ukG4K zyJ{O{0x-KdyQS&sv*ytPG^SG@?Na|9&wzq0#4^wl;+O%l)W7IQ1_5VI;o6Z31s5z! z(e$<Ee*il3pY%s+Jr#6SraI}5)p|zz=sGMm$XQ4Bv$$4A=DRww%(&59O_A`~<Vlp6 zS$3c><&~?2rgirEp=_af4A4?`#Z;mBBw}O8EIg3{%V(7ybKqF`NwL+(d*PX2Pcn)4 zmjrFg7cX27%vDH^t1Y|$n5$%TIy*71hV)q`u}D%&)St)Z5&}-GG$pV(3{K7dyrwxV zyGI|Sw^`+Wh`_-OGL`p+TWY9UzccpzV7u&7T(%#5SOk0rJPA7yo3Z77ge>u(@lN}g zW%|}<U#u_Q!c@l|$#pW<<y>#z+Q#)Bt_Qe&#C0GY`$VowxUS$j64+}9Z{oTqzSew# zh!;MenrX`@+*ejF_Lc-&Z_p%h3tWWn;MQ3vRoj_|PzJM1`+~&Sot5`_Ia3a%rEM#( zdLt(Ev0bVUB+=sMK-@Z<WWSZLh>Wnaw#Fez1HzBOA<tAMilyw<t;yt;%=5_9rfB#M zZT#bGn2iKO{iXi)08E25+-7Q(Qcw;*COWy={K3FIG|1JmrC=z>q`8#q%$i}utuCqI zED=QcEiBY;Lyby#7Zk#ei(C;2m5OmwVpmu(ZvdUSWXGgMo~g>J&&0N2>l-^w0;Wc# zK=p0ZS${7#-|h6vHMpIA&0m-yWh&+u)CEN+u)f^L>iKTOpNcz29$CV5Iv3d5X2i-d zD-DK=<-T%%exSzg+W|0FSXSW?RQ8s_QZyv9f>F|j8!7Fwp=^2O4-5JAL%nQDuj`9Z z4i2Uc3_n4>BT#0iy15EU<>-@=5|7&|>tg*ka4Be@#;l79mG$8{urQSCDh_%VfjlGU zQq8IxpQ2b1Gje3|(Wgl-FKL5({fd1{y`|jx%6cBtsTn1sqF6Z}eg?cXqmMoISj_Q) zHcNr6C#vQCHUHe9GXV0pOmZ?P51Q)a8aU>e-iK$yZ888$BFh=JDHCLhu*YCq@~4vB z&9Ea}Keyh5nP0!Mmv}7~r`Ud!Y#qb-LiAZE4&gPY`szQY(;J^7y*XFP@+2XfU#A>@ zb*)QOlub!Gk$b5(7H}z>NH_?la=w#a7XdaFyGZ2P(#^%v<&gx^-K&JTq@-)*Qqrw? z<^G(1#2_+`Me1b9;G)Spd(-7UChe}N!Rx|vCCJ=VfKZFIVy-f+)l;#S4azGX$@#(h z)t+CK!us^b)1je1f2M}CDz96~%-f%tRM)<4Rlkb~Is$a64OL9gQJ~XpsA7VS#dCMI z7UF$vHAWA%wg7Ptwghp)nObB*v%Ki@^a>_*?TwgjOVVdDz9jA6zW@TTu{7+94%UVD zB?s#o8@?<UgNVkOWj2WV>srUCl2ce;bp{bX`id}3UpK%pYmm~2v5g=nUV2NgMY3{` zzFc`Js+GAVS6TWW7H*O7Tqb+!OMfC@zOwX>7H*N`T;@Qby!1~37Ai~sYT*_MkV&;W zSm3ubxNC)RtU^62u?PU%u>)9yS^A4&ezO@!WERW5n#Y0Ecpa+1bG>roWkjOuxCL1~ zGYo?0tCV3&^imSl;%N0)S0efv;H`|p<C^_%ROSg@<LdxhBIt#e3xp7lC*?=qAj40H zjERWg(Kkhe?lU4UiHUqmM3fy9;RJ<<(XJB&%(k9Np!O=MFiAg6X|>-XWSp1)EW*i( zk?;yp%7#~|E-+3?Ff0Pbc!KeY7~|vw!y**H5?n17xjJFai7tGV(T@|?h{n8$KGpP$ zq?knjoRR=6l61~EW6JyKn<ezk%!Q!n*hsBt(eh1w7B0T2|G`Hzt9TGeg+F5KjlNBc zJ?^vFqkf3!9m*aEqVEtdtURHhL3$6%>pm(?E~>P(SgjD`qwhkamg8BeBG7LUOudOm zn^_)hX5FLBAo?EAD#f&Z@-hcxF1gJ;+tVJ!AoM0^&ys8LL_9t&PZX~m1`V5-DBPB- z=r*F;sBUArjqA2Zx5c_G(QTrj`!-C=6~}5uZp&A=R5-7~`7u)CT#L9CbE#n73g)*3 zBXL12YV5W`g-ZnsDp(jJHO{q&YcZD!QlIYIg3-93ynlJoZ8&4yRJfE?=~8w~fN|Xx z>9$xmktk)2Mk%{37)yxI7v;)rjF-yq9Z_^tH#NM}tCp8~)pWYd?nbBA(dpe5j3;zh zgH$LNjEry_9py$Nc(gIjZP8+Gi*>WoZ0m|tuq{}Wl+H0YQ#z;8IhD?-bWWvnDxFhl z6MV@@zJ%x(C#CbHe1$S5`I3pglpmvLUgh&DpI3R4f5~+~i5}Qu8vT0AVhe86j2GA8 z%*i77QqLC5zWJsNWX8`qwObiXX7v!xJ?HZ?=b~>*4ew&`ior2O0Q0!|xq|r06Y5f) zt}K`IyEd=P6LRhKj8(_0i&&!^p4XaFq_#>sZ4Eda-l8XUGu{;!0e4SUlgUL>+_`6+ zZk)XYvQ*1+);W+xcWk=iDp;h)tb&YmKV}uh*^gO8>&j^u>O5u@TJo3`PeQ#;gcbpC zX#%hafG7c21i)niti@F-;^_ewkBjA|E>AEm0-&A%EONBhYyjwfs4GbIfp|EIAJvLQ zc74=F0x`yBs%mE$#(X=_{-#OkgTS=EsYLhw<~=DnvSnf7_L{=$dRQxf+qXOi`R`@= zAQ&@YF=6UcK41;g9^<J4OrE0(d9KV`Q5YU!7-#MQYU)9#3c07Ec<#@rLCd{LCH!B- z*dPr5;XorJ31}n%jgBUuQ3qng3jfEI^P~F}c>=p_cM}OetrWX|P-d|cR8RNosr|cb z43&@798Wgm+s@8Zc44tL;o>0^b|&wB@(8<@b5T~tLAF<Os>Gg7$1e76(_l|-5Tf7f zal0J&b=v_xlMvm=yc#%$oPp2GLgG9H%^b`146gND=Wt!fbvf6&xYm4#n-|?nb!&L^ zN%THNKStEICxNyID9+1Hjs^9zFvYR(VLE_420#3yFkh=eDOBwV1Zy_WhDv~Ip5K8^ z`NK6D&-ml!#L=IH@T3kxxP@v$<~_yeL1pPMgTwF3*+W!xFJ}))BSzI=O`iPRrW+XQ zEJG2Ev%#7_B8l9lw<H;gXfO`e(2fjCb*qPIMbV*uTF^9O-w^Iy9jGhteHHkwvaVN_ zrkuf=ms|9!L~B=g+Jy{i8@=cQ3NQAwZxYm=AJcYJejqA868vc~d?&elUAfb7t{oGK z{vgnJ{Q`Q!>5@H2s9!-koX6JlW>zImnPOFANg3$8QV*+@dA*a!y$WRQd;a~{V??yB zlgjL4I;I?stkmy<TI^;WmBrJGy?RjSsx$43oy_jQi}Vx&+j@xWnUmVYe35(OuE}u_ zRe~}8Jk5#i`GD8`d_W_HF83gTh{h@A`w8xDo;mm#mJare#yy?FN{v*3P)1c-=z5Sx zl<GhN^&jKWs-pHBroc|O{shk1L@ayRZMl(qdF7w&jL#u+*3k=8gI}#MF;JbDSDly- z-51YE7cBKp8SUPe{wWtz-q&B9t=N9MY8+YLm+P<Xoy)Ih>AV3qSg_+L<_!JSL4IUi zv6j!X2asnOX+8X2DvW!$Jd|B?4^`pd-V3epv)pum_G0K%R?{-6w;Rzat2vY;_{cPS zDT<6ugYX3*aD<K(AR>^L)Mo4u(;0h6rT$Y#^>Gbz)%IoFQQ_KwY_nUWmPGcB2dLVp zSAPf|OYtKrx}g~J%T&+S{J{|?u&QQ=bpIr)-pps9zZ6-`XfEU5<e0nx#VM>_<<<WI z#c&Ix+yf+YZw|$#7nZiCadA~HZ*-c2p<;7<nuEKFEM8so$JO#LrbKg$%QKO&ghgbo z3`eyT8JlM0w!+g3U1ZU8zdy#K1B2>mmB}$Mi7<4r<MuDeDAw;{3~T=s<P0yoOBDeB zvO-@gKSL}y#J#=6k0Y`q!HFYOR7^m#%agYo+8qK59DxpcC$@RMJD0`wo2gXQ18|+3 z;5Ws+vVTabD;w`#jJ}m*;}g2GA62$S2rK>L+1cBb{p}>1C4P75pD0_SftCL0?ChT@ zTce0&|DV~}KUcN}0ejYY6neKzK2&E7e<9qy!5()~Ialik_Df)Pn4~{G&DGV;Uy0cF zL<~CeW1_b_q4(=K=>6wz>HS9Z7~{I=?U&H|?Hu%ew_AF@7d?i(E_z`?k1=Vd_A>JB zroDd>JqExodiy8zm=5ej?=QQh_g|ui_PD<KtIDUf>~G4}Ou@SH@3XW2TiG_?NC}xH zc9;GiWut1YG#1#M{lCga_jvg1cWRv|IZHT?6B3wlak9-%Vo2wvu-U?5%fJs|)E?FD zP^d}hzg?sf(k45<DG#zluIGIM*!Zw8o5`RzJS$-t%Y#713VR4PNVuBoNUn3ZF6GjM z<rc0_a($HxRmjlb%xDk##`P4gQ@J*AUB&fwu6wz@&9$BDF|K}``4rb$t~0qV;CeOJ zja(n*`aIV!xc<WR7*{{T>zaAoyzCu}Ry|IUyzJzFOE+jFo1Hplb_5gJQV?MdjJ8?# zVuab4!`@2i2C@-$ZpXsIgq@49M8m#Gv`q;dw$hEq9Cm)k!lQ(pk1!m=zFF92at>SR z2D|B^UD&bkiNY>Kn6hCbvmR$q4qNF)kHaqRSa`UwixEa{*vzPUoL6($N}KURyDxr! zp)bNc8TPfpHe+zuN;f=5yMM>RBSpJE!U-7mt->~!=&+S;_zrtu$HIe!JrLpS4Ev43 zHV^5rm2U9lQ>~o0W8oTM&x?K%V_zd|bC?cW=|-=^p1)(^A;O*?{WQjYi?APZ3H7DY zjlf|q*s*Y}uopx>i?MGIwz*SBTj@s5VV8C+JXF}F2sdkdPYL@+9okCU$u0OEj1OfE zMrf~LPYU~y4z|*ExDo83`0(OT^qUxarLZ6EU@P5V2_c#ALe$aXWH|a=jD3Kxf84=V zx>0c03wJDhlCT#>zjp{5R|y;6C${WNk+xYafp;6X**mkzuLzdiGzjwK>Di46nKoaD z3+T&5&nKu%=Us%yw)^y_VCRxqD?a#YO4wH8Ku`#`pyE-P8_xstyf9@>gbh{vT(J3t zUj2oA$*ji?uG_I0H^FiK18!{2+&QU*(Y9x6i-{wW%<)`L-^H~K_}N?+r1EQ*vPO2x zYHjlVuZh8r7uwlPYQfZk`T_mj?+7@dxwW?!nj4HKJvhUE8I5=$&qGxl7ov@q?Dd-= z)!=zkakCuf=ahGfn=t!!u!{!|Ulx!hdpv*g-SjCNzDIC2@9!d{tf8IfPcHPs<5*H@ z4f8ID$CE<*^0-4;<u$k9j<w&a4FXH}5yA_q*LmT)3A@h(^}$@j2i#Jz>gELJF^DJU zhC0~^b-a5}y$!ZLPs9u7aaP`~Gp5*p5h1U6rML)$_XMv#Fwka|)HAzMZ`)Ps1TVZ# z<Qq-y;ecKi0CcZ`Uf2d54j1<e=C@v^7F^?n8iu?OW44nxVn-)&Of0<st17ZUEc>mi zROAFUeH4i<A=iP}^U5}^AZdtIJA;6F*q=k@aH|#C)W;w)IpGraUZmF)BYsq;I7bnT zt2nzKTt9k|m~d}}jZW8GWK2i#{sU2%>CAp*ESdW|hT&V%wZZsLqII+ve#I(dvOHgM zI@}AtYJf#9eGM&^(fd<HZ#Y517VJ5WYvLK8XwvKXcGP%cfh&2BzmyftOP_$gJ%3)i z6Ty|c2Uo5>!4-)I9auhnV$hLzz~2iJ`ZF>U^V4MH*&!pZp5UJjnTH%$?z`fs2r5?% zvfOkE`dtUz3UrCX6(iqs(3?d#Zi~PVJFv#e1g!O}<|ifogYkVZhKo$Pw&1?Pe(ZxM zh_fZ7p%G55O_34xA3Cr``GmUo)-V9}B;c6u*8|m1;(Ot31a>NTK@T`nDq83?nRzTl z%Z;mrC8e$6!$OS|TB=|a#j#Z0)#PbhAa6(6MhV<UG0pr2Ff<mRhO@IC+39^LI{lGU zZ_QfaEp}Yq=GV&$5@#_BCEIvSoA2UqwOG-AmW)_H(bgzq$Q|dzb9A;FrNfL-;Q=(W z=m&0Oa{CRdz^iFKxe0OgOwRZ3P^g6szNc8NFBb>uFuyaNG&q|XY*zVf=F^l%{ES3P z<vsmuEy#-fA_bOEEhoPB%7zoltN8VoC)Bd;Jm+skXc&_f>d0!gL_^+*4*F_G#-$6Z z7pAu8`rS(?eYL&(`j-<@4%2qVQbdCX)eajrSNG={bZ~L2AXUG9W+`q`nhCXKhPI$4 zrN-^Fw^%#ZQSQsdFRMI-?B!fJUA(I@R+|VMb55h*Mk)8IN*LIiD%ADyq^`NSbo+Bt zH~Q`c6%)s1zr*_UfdAl=nM=5K*kM~bd4;qUCbV{>@ANFWl-<bC;T8Q&3kf)4IFJjX zc?dPyPssGSC8YFj9`HoUNk3vam!_B22L{_+t?uYZ)b+P(s%=abgT?|;TI)ZkT8+CM zJ<>m8ZMx3R^<|9`GUxoFZ)c2Gbn3FVg}iLU>jfNS*?KJP<FLn<Rm2o)Ue<Tes21=5 z+z_hAJ}5k^$&ZF8SuOH*Wk(izANEzWX{E`6uIMTDMg_`mdaVS~I1VxN`?mcZM8lMi z*fiH8+toZnJ)NH0_zubp__-<0ps)$YlZTv(M1?$J)JT~33%$|)5K5lHet!GHQg#!g zc#l?NJdW*+dLZ?vZ(G7u_bhfYbL7Q3x~Tr@&1kH{f0VKhibreD^guS`b)(`&L2A8? z5#mK-INn!XUOU<G9CraUdLkBa#s2)TJ--^r`45VHBbT3-jjAwd4eBpU^}Dk9Xp9n0 z;g-8zADg~2K(K8_V!^hhDw+Nhe(@3Lmn!Izsc%mZf{53E5^1iv1N20o@1j5~@_e*N zNQ>K;y|r}+%jEuU&<1)Vp4{<{dj;t)0c-M*I5IOqim}}KWhrs%7ezY#((A{_(LoS_ zZi`NsdMlmN>pF)GN;)S<cTU`eYfonM?DQhLm>}j7#1ELc#P5?oJ@bMOxqkF;10UI* z^l3KpUo?6(?e5)VG76@aW;@-{?p@{4yL-WU>>I~ckHikdtseF!tKC5uc(8oUb&w9C zeaL9*!n0FafOrirFwy3teL<XB;(9maX;8o!1PMJ~Xe=X$SoIfkc}GCc5KX#r5uJKv z`eV~K=b{j(>)f1_z8j-*=y?dve2Hg|qi`=J_Ut+2P=sYXi{2c{jBxD}hl(GPx~7TO z4t`J*8q?eAgPMNCQK@(w-P(z240lj>iuKrzm}luOPPC0ICrV;&Cn~>x4V)Zkdiy36 zrx?`#fG?5_75jqv-;;QM%AX84PvRG*a)w;%E4V^!U%?r-Y&gZRXF6$!q9jD4m_p2_ z5uN97V=EJm%t7MI#@1MA7*I>WRKH*MhH%&M0Gb|nSyl2Z5Z_RaCJ6`f6$^*5!$ZBp zLnxeSOzj+}1vXjH?!ECp?w<J#$4GeMLd3y79ud^4posGrg<;v~fPyI*PEdpR!KhE1 zl{lFjb0gQH5IsX2THsvdHjXZE5~7q3r(h2vHjYtF&rnN#Jdf}p=H?MW_#DJIIUa<k zDI5x-Y05n~p6CJtPiiDkf9?w{=;5>I)t=6nSnzT|_zbL~%A?ob@D#<C_}S-XA)#?f zzFBkC;Uc3GBU!N$J{_FN{-C~2!d?j|$r@>AJ$rT*6V#;G+3mcb{`_`4rasn2yP%!r zXRSj5SzkQH`<YANYYlv*6cA;&SCZyLWBp=E*U(gj9j6#mvMmWi;|(T5Q`kZ41y4=g ziUaF$y6RN$i>~`Bnv~7UhNp=i2jcNco{1Vehd}CEA?MW4=7VpASFD_Q#RUABU*mzy ziioKv)>O&y(0>)t{(z&Y5p%ub0FR^!LqVBy$)}eBd@rZEdB?ZZD|MN;WaT{W7fzQI zpB|}A5jLhrxWAZpg(rACbT(sng~LD!=X2a=fg+61V}v^YD&5BQUyo(4dMi67jf0@? z=0M+r*R|H)+P*&y7qRAjfLtpF3cNxhKUU;=GZ&BWrq4HroU)wQ0m~jAZVMuBT@f3~ zytE{0r{wFBf1I~qu!rR=^M_ja1h}dl=<KI9X$HP%IFW3S8_Eu5!-K)m)7>2LHN;(0 zoVBez7Jr;(g1MQr-`r(tZpL#d9I896Vi8&<oB0gkp~#}MUdV3jk@W=i7s5w$2=#GZ z%z7tWD@Kyk#MJ6MO7thXyXpmQmGB&Nqd!-%<Dq8u6O*^H9eXI{)Zeuy7E0NhqQgiI z_2x^xgF(bOeoiq5%clJ0bUnKad=n{{Ebz6Dld$@sfC6$F@#Db4br-JsM13=i6+%8} z!l8B_&H08{pdI>N)3adyFtx||&MpTTtFf(2Y}K--mB~cmNG3_~sRT37{=9v^LC-&n zlYPNtet4+x<DY}WIRiC*D4U;{jE;b{h0~|zV?po@kg^0(G(qsKlcAutloQ)QEDGk2 zSO8iZJ{uC-I9{fYnJ}TDwLh@da@1eV9jGCWykYT;l}dP|L{Qj%zH8XxWX)vDl3W<E zjY#hC+m{dJ{rVPZ)fU)xdKnHQ-mE<b#UuYt>oLFn-40IoO28R<sgS&<bwuWy13k-G z5cSA^4$*$M)*sA7N5Ru_`qNv^R%4Yu$!0!BKI;y4vRJ%keUOd@Y3+L?HUlji3c@D= z>PDE%GyeSem0*QWCev<>V~EiN<~VeIc_?2y9y8D1#NfwMjUv0K3fM3m%o-<?i|Xeu zj2m9?Ez{bpX?AgQ!2I!eB8*Jyq^_kL5`SOJMG&1p*7iKA_*5c~235W~5TCQ$EAz(t z?EybF)T8tAyBx#TA!eP>eHtWMYJR+QxhrLGo9;o7lLKkbU9Eo(w&Ml2^qRe|%;Cte zt;4(=9>)u-SEqbU<3wsI2L0QQ>GSK4C2fy8T`z&=lHPt&xvdfH-j4C?WmTJF<S{Jw zZeBUFu$Eb(KF7s~<DFehcrtbCG}}89S7Q+XtO=a&u?T=W6M#hkupDq07BRVMFXIT) zn{8xjZ{q);zk1n<C_`<LolxH%6}5!GSl(l27+smS@2QLs+GUQkdYG$QJxmsodYCP^ zdY(z7C4_dFqpS=|A1lMSn3Q4AbY)Ig86jxNYQkXyS|Q`;dDyzZn-pp{`-L$84`?54 z3D+yKoQ>1)jCSly#f}y1m7p*1vJFmR*$KkCR1I`m7D1xemjhUY{cx+e626oIoRqs# z<*ot${oqmkD@eCKsQ5yA&zYUp4~T-Br@er_m~ZVBy1nl01H#+dv`bSj^br?WEFZw2 z_z=1kokeOn-<%N{mtfxTa60Ec<viEW>W{QDs?*-cbg##!a5yOnVV%v^3gT$$Z=4M_ zZ>gU{&|jOMkIp5+WB4F^IsDrP+KN;ExxJX5BmsBWtvPPdaqIE{Rs=S<vj^RqVLQ|Q zvf=X}6g{8Y)QYSPQ3%(y!+--WVUt1SY?t+*a7874ro<LGSGN`A;NIjxUi3rQnw-kk z|B;}0(IbFtPuPooltkV8;R!v7FCoqYj__L0ye4}QS)2rlqrE=9atY_o?}l4JU^As! z!D*aN{$@J#I$*__4^fDB3NBE?7G@{&Ue*s^MGh-tUX6M^vFZjdypU{Hfp+#)QM5tT z+~`B~c2T{^s9M$}2at@H=wjj6JB8wBFZg+q>4<V=rwJDhpHGxTm#D;fF3lS!#$Mx6 zfGw4&uJSit#i$THBL`n+dF)-P6<On0N>7&-tACi2seRH+ak4c@UPh7da+NFdPkip3 z$juAu!2M_uJ?F#~iv+$KD#2Hw#8#)l%#Di6rAwl7CgGFSUdLsT!&S5B^;!Gal9Tu+ zIfQJ~_HrS;qORnlesKfYgJ2q=E>TnQ3&rX?=WJ?Q{%Tvbf#WD{zSI$&>dg*61Hrov z;t7l}c*@h!py)+AgI+8UcIIb3L7R?IoBY-Kx`dG_`WEyBQ@yz<putoz7rlfce5tCM zn_{;hNw}EHoTmTziX~`F@lP7eg-xRN!J{jP4En~}lqN&lpUQEW7C`HJmIW^CWr2AL zdcgWeLG%nC9XI@OsLg;s_3rKSI3rMg20p?Wd!<?m;{CUiGH1S9k388YmCGw`ktN9C zZXuyT>cdLQVOj({?W?knm|@3}Gd}vFMV6Gur7+;ibJYqX_U*Wd1=aeUvWz11HjlFu zX2((Ah2TB7o@xX4il6esx6++`;Z>xfmvI}Yol<c7U!TMw@s%aqR&i?YJg*np6eu6m zKM2uWIUC`Si`!Y^xar5N44r>3%EvJb6zvm}#i@60A1=(XD_M2leLE~uI?>HpJWgAl z)wE-J8RYRIv|sZ0Vj>TV0Qgb@un2%JCjg58_(}q>2!O990E=w!nx6r{yZ;SbPO+tg z1L1R;pG{{e;XumzTslh$2U6DO(^*P5kg~oIXT4f=Dd9kRg85#0A-V>5d8IxAW$AMC z8UW!lG(&q~jDjC6x~Lz1L1nO;q6pkQi-6Lz2pEbZpy(_D_sk-o^eh5~;s_`@i@^J4 z5m0&-0Yh;F6rDxjUJ<yiBLk(&(e-H=7|Lr+28#OO7ggqUk^!CjHAHF#V-WyfPXHES zJY@`E%+;S$E0z=}bNtvld^^Ojh%*p)>tpI3HWP?*Mm{`~(0%u=^=X$gA*_!m?ll!m z=6Bj6YT>MutsuNZ#N+q|Rz9tdrZP1PZ+%<<Lw<079EMF_+0htjVTrt!>~db8Ol--i zbmdH@a>lxHUY*Jr?aE>M(M^+~HXi4cU5Je2Z`p^?H<(!)NtY)NaACwCz;~SH=b|?d z;RV5LbP`V^?EADfy~$0IK-9%Y8I0V#W;ipx!p&>C>B@XWSK<GkbY-!ktMLDw?vcph zc$0&i1fN4P&k@~Va$vtCd}CS=`V1iHsbAs$c`(aB9Q*&+_YY?lAK-ky)}Mz$`vjvc zr!dKx3x&~}9PM26=9o0&Oh?GS-d;=#Ig#<Al}^Tq-_)}mcDyoAHTu8xnW0r|*OS-n zvRm1W?AaDXZ=nKa4H{pxrg<8;jSZ+IuXDFlB-jyLM6z)r)oX+@kF4>i*LKkz?ca&E z+fhx?uJC5sZ2BjP{>3qU6@&gIqW=s>zsZJ4w)#s(K1DoBPU`(+C8KQ^lG&)<RAAOA zVC$PI!HU2_EI$dqCAh{=i;(eP0<Z{xZzlkY0C*??SVS^88JV0U`T60esGJj$1<7Xe zi9y7yGvIX(7YRqQu=X_>deD43WWsN__&XH;mW$t^__vA6V|_QN%OdAF$#O>MyTWbU zM7OlQBNQj=&F}#)rSWTJ(d=`DH-o`h-uhqU#kOdccngqixr$Byx8+9stt?D>>T5^H zKg6;|<E*jlwp@5CprY4Q9no#Xm;T!4u^Mmb8-%Grak+~J(d{I}a?Fp`Jg36X)76)5 z&EpEa4ZQx^Qf5qa6kDtDnu|Fm?v<UFoLgy;{|?eq-^W6{9p&e?EhJtJIei|?Oda9u z<PYvUMf4=Qqij;Bu?>7`vGskWy{3Z3`Ro(59u}afdnLMATW=VYa@*@H?JMpD?@Y_^ zYoce*3=o7XDoD8;;g17$h$MT5-`l~jk+(<uQU@RByk~r`gFp3n@K5RBPd^^~XLj&c z>=GYgnM4qfNzM{`rxU|UaMDaUezY*1rF|NS+X~@!I*Fy}#L-Gfu08f74n2zdVbej3 z%vcuM@<W-3)<e6%(ef>@rRtt=w1%zv=&R<x`g2F#P^BNxg0w0<qO{jk;8f{{0yK4Z zs^sE+#4b?~-N`Kh+#<lODF9|3MDI)iZWG|GDF6;4i0}+1BUS12^Qwd-AjpeF-;R~y zeFUnu5%3vp1dIEjf(`;@+Xxo-Lj@g#U#Ac(?uQCG2$)Tqg2mlwsSd&)QV16JLj@g# zAEgj1?v6oq5b!7MDlG0!eKF%Tx$83nalVU&0<?3#(#f@`%WaDY7v3grad*(HQ~RSS z1dF?)Rvm<IrVuRd4$XBC7)RPwSlk_n>md9og<x?%RM0^{z1kEk?v9mp5U{2;g2mlo zw+;eBU>m{W?(km+;m0Wii@Q@}9R!BQHU*2j^L`x!M#naS#r;r02jPz?1dF?4XB`B5 zYny__-Pybj!e3Gd7WYF19fUup5G?M83fjtWUpwDUfVk77?c5J^axJQt=TgK!*v|It z4N}Zapmy;Owe#&gJTDZW!`uDsY~Rl0P+TCEW~RnWkU!kPh!ZhNqUrax5$qYNJNeqK z|NWg@i-x*)>SxK*mafJ9P(cUb>nQ|_`=Nq1{r9!=?X3=XsFp1*XNC84auu!en>>#_ zR>YS+pG%X51^Z<(x3lIy^62@t&iaQOEq{xzeLWM9We@(IX<qnF#_KI~S+;&S6B2v& zxrHvy){ko^|4YeJ+sVHw`TTbBZ%V$fo&39!TieP1R`MO~BrIg>ceRuMqvU<<<Uf^s zpq>0*CBNQI{!7X2?c~3e{8>A>L&@K?laDF+*LE_~!;I}O3@?}gYe;Km3zO%C_i)5x zzPQAj5$6-9hD(&3@6Cwwa8wC9ONZRFR%HyaKhO8B_=PYQfpN&|fU#32z!P6V-1BE7 z!*vr=j@(87lHxk=ieIV_A65<~pGyg)R-W#{iT;(m@H->%whJB#Kmw-Vui6EdQ&6du zi(Tj{c0|H=(Vsg!?Xs2G1?G6_nCj9)_;Dft-MlqmA$Xd`c>e_N3I>>%Cw2stm>5~X zJIN=^sJqrptaXjxgE}Y7sK;RDKiee^^O{Ob9JXSW^3{dy5=#Y9FH+(+?Gnt<l$bbd z71ITO*$Ff1*mb9ZJ2CBQx|Ekae+#f&tgY~x>N5WXdzw74k{4Rbt5)!pi<SDaoRB7p zXXMryy1q97y~?^}{io)=rn+}UHdwss6T#vY<ALohFS8;u()Y!|`Ww!$a(ZB(z1aoG z<aA`h;|G;JjJEKw(W<xFIh=6DbZ;=RnNJp0T7LkApWRr{v*sc2{1LtjWi@gHc}BWP zn}0{(`kHq@m6&+m%0qdTW1{B1W;#s4eN_n;AA1^cG-ssB(5)@tby%w<fy9idZ<0<~ zX)JJyYd>C!`TKUgYrUot)VmT6p}BttbxAiWFYd;uy@ncBh9XHe*TLemB%9HsrkS*8 z=oq@yM8#Q+1JOZsRSX$vLs-Qa&S)DlP!3ie7)%sbtSIMJ)^bFam-8$4&J$T&F033a z5E;&bKqqs{>sDBIYNeVjpXzkk*E-OBGpj9y!}rV^^^U0CA?ls4dW&%_3GGW0Y4h7P z9Uaj5pK`V6RmW!Tq?K%w*S%2|a#?!N3wyb{HTz-kv<`V`6R;SuHHUcEUn}xm$0plk z#fcrO`MPOKQIAjdlpF6SrcbrqN7(uRH(S+zkO<#kb@Sx)vR5n3SAOyDrZ*c1pUzdg zfM;+<j)!NI((5M0)`y6ptAg`VwbxYIwvt=-D~G*$f;)~yeytA+Fk+~c;`U{6sklfB zVpE^;!jFJdE^g;Tc^@Ul^KGpOX?y0Cue7ty><u?Xh@Twz7{O+H4#!F*{$`l?uuXDl zJl1AcRpdmtvoAHmH&-1!7A~Ua4)*e5%!^<IH*O8>$hIZXR`2UbK<%_`?bgSMc}?B* zluDuPfnoC4yr*YjnKO{<#E!-%$kXo1CkgfZJ>9W^I#&4V*E47J>jM-}zp@dL^sAz- zUq4Mu{rVZg)@Qj{zkZI0_3N$BbN#9!seYxQndflTHqk00$F><Lu3tY-j2;rab`;&H zwCh)PplPq}o7An7`;e=Y>tyz3)yXOsce0Uo<*k$N^TIEY>pJ<%#OP$$Nc#DP8`}LW zTD$0H5uLlAMSB<hEPAv1*|<yfvqWwEY#FZIuAjd`4i6W&tDhC_)X&d${rpw()X!`R z>9mRS{YN`-m;CaI!TJI$+P#4@-1s_Jo4pPG2EJuf*|6ST#M!WFE}S4-t`XMh)p5`} zYnGm5vze^)#3zjHUs0zguXKBF%>YQNmm4~hS3IY<cKEh{VZQi$Xk-5P0u|?5O0p(h zlU%iv&=(`?HASXX;8xRMsYuJ?hT;f;M|CmgGRxyz<w9|Y8@#3}UiBrNmu#w3($%&$ z7Qh}y>t(grCauy`U#YofGb6AiSzu#vD_d%1;J4I3-k#ot(CtU{Vt*=mvLV&wPrpUi zNS+T8#`09u$&>9ov%7}~Ti@Y^JlVo4w!Wvh<oPfWljk|mcJfs5lsuU~XKKeGB_msI zeV=R-rRcSOzztC<&qQfR%bG$$lnU76vb(BW^<|T!3Ux_RfZ1Aalv0vZLu0*?EYEhb zWH-k2n4<yg_P5wlaqUufXfNnd0Dkmi?pD^%tfVY$Ej6|SQ<48rk*4nTMH<BNG}mL} z_a{IaKjo&MIIGdc&J`9(_ztsAnD*m`ss1^4R{#7A3hJN#Lm2muqON~_PE39B3&Pef zxe@=B;=fj0{qvth@R7ZlkHYu!pzSEdK9Zr<KJ@z%LOW?mHyQPE>o*ic-$gWfH@DVr z1*lkd?V02#9o?mz-zlf5Dw&|^zO1Rz%lhd-Me@<_xwATO*{weaXT&JQ{?qDo6wQC$ z?uCB@$@$Me5$pD!_ukv~pQ4qh!mM#pMCbOOqP+|MDSERt$+$~tlDdSK*J4o_+j5sC z5XNKoKA3cjHKgqI&&G(?`U@cn^Ir<oH;In@6@VZ8jeAPRULYO&J1`abZxw0kUSBC4 z8;Eu6A3z%a!!4Y*vyK_&e5YefFj6{p-Ygya7Zjvp|0axeOi`y}JBUfI9wThwAr<c- zXnBgO9X=6sEU@o5IvrE-l#aayVO%a9yP6w<GwS75mVzjSh&mnX6`*3-wWpG!w9~P` zp{h==X^CY`6*nbQBp>CtxAH<5F$%G6SzV5j>DHZISOCfCR*_h@ZryojTen1O7rG^) zbL*C9??SgkZ|jShPo(_4ahK99b%p6xhi&PW38G847{8=jebA&wT6{J_iZY-ety}W| z_|bgsDc!n2y0rk9ij-8Osk_rHCUfS$_=sh(F~lt#l=2k)>WuF&hD@i1cLXfGYK>u` zEEGygr56HhS8MCS1L*k+Rd1Or)mtG9n!4AImQE-2vXkKI&FW`nYSp{C9H*g*fo%N( zm8uZcp&iW4%`H!*o(;3~n?<|nH`@$}ek<zqn{5P1u*sH1u{FVs_)^99a`C+t-$!vZ za9<*(>+Frh{#2w`P*3;gMi0Fg=o+?zrQ}vcxwVXJR9Tdrk~6`Pk}G@7O+xjW0y#b3 zPnlj*b$d-qENhB_>A52LDC8dfQ`We@uttnh?MO-~9sRFzs><=2Vml_&6ey~3YfTC| zYQ?aTLt_eYakG&Rcp={)p{Ow?(Av}47xThtpw4nu5R>I3bK1ZEy=^z5-(@$NcZ|~~ zUQ>-WyJ4!(Ub~>znX1d<L*niwfMhmSD`;UOW*${U^*<V)t2rp+9qj7Vm&x`$(#2Wp zsQ#^ZnzWr+XQb>*Dq(hJ8P-nOnYGvK?9#Z4oLH1+(rw$|1WaE<o3KGvG}55f0fZ>_ zDh1irY6WSVI1qrJOeM@FG?%zoHgOPHD*6PKY3klRmpB-Rn@fyJ&v!kS7*n>b$t3ej zX4%0S$jHwhLKypbMV%e+!5OoILkU}lal;OtsQBTEt06}anKhSC@syu`1C^%d5=On; zIub0jQAC{y93?=drEHr^DDCwBXyr6jrPs9hvZhL#`YRI8C2EjUcI!#P95G6<zqdM@ zMlqR7JQ*aXwZ{<a_V=l|glKi??cOv8MMZB#bZ&ny+Pm=gqBnakVcezkP+ekr*kN0` zX6(0hO>>D$ovs~gjCif55TY>0DWFe0t$#C-c<oFxy-iy&0-idK1kv#zmRIs>`Uym; z96x%hLN9t60cZG4QoN_A+!~LvPbBP5AH>jc^!U8Xftk@0-C2xP-polLhS+vZN5aEJ zM8d^Nk#+LUSxZbk?flI~=v}r8ekXR~*8zB!X%4n|y+CXaY+oMpUCYIhxLtqF52Tw? zh|j7Vnwh$wyB*kcsvS$y?dZ<hD`|&kzvIr-rc3T7RZeG0s*|IENs|KuCgg0cfBR_T z=`g(6@r{^+Nj^KS-hMP6^EQ~N9@fnpx|rf^pEPgXS?q;&hT<wK(PvQC4jr{HxnDzA zhu`78#wld<=l#|*2~%p5ZwgReQK?_e2<uX|OikADiCPT=E;H_w+|)pRM{p`-%~kQe z-es_2>M*c<Wce<r@oJ0dl};^8T$UNRn`APP5cj7+Puy$&6uvVJcyF8zurKGgo<*4A zJl7PUyrRg-i-kAR-h8!f1It{dQ>0b)qj<vL*EC&5(uf_wI%qg&Yy6weCL38rT4V<{ z@Um`?LVH>0a@U%AJrv|;&mfHbtfJ1(o=Hr;_1T22=WsLMdKMA0<1ayPlk~|-^HS+_ ze}42(?HsRpJ2&PPMyl~#6+fGs*Ax-+s{^&6g1J$E$_k=$xW|W7f3dw-m<$R|&v2hY zh|cBKdLB1?sOa*jz`H`}@cGJlfpWa2g4TJ8j~W&~Beg6p5M!TD=G5oC@B%`9Xo`{g zLSm2V_oeU&9&go7oa*#h`<xFv(4H%Z>P|lQh3)pY=L1+rXP;BG?84`Y-fW+10!#T^ zbq`13V@X<bca-0PGMH@W*kn(W1)9e94d82hzlg9iqDwh127+=*H<!X7bNf=`62tae zmlA3pfW5}_K0u<|PoVf^R$Pyn-2RzpFnpF8m&Y{fF^$G9Xn4(y<oL;?LVRdWu~{@W z#WY?>7&LY7o>ROCNJq_gGpAq!CpD*NLc1eNulZugNY`IN80)&CPS-aRldd-jTUT%+ z-co!<am^`SN(8<4Gxx*y70`B+_!hHfh}xfcEf)%rS))ZHoo3X%rl`5e#1>*qCIsgr zu1zK5@yrXaB(eQ8uc`XtENxi?ZbyP20^!@OUq{2OkZopMCCm|{W@_#Tr^!C(g)ali zskthUnz!e{ci-LCZIRkZx7|Eg%=YnaF7pwm*V1p>!x!mY=(gz1)@_qUr$1Wi4x3L{ zhP6xc32UE5nD$;GgOPOm<={)VUqQ%x;%WueL9g<#^KblC6pYQNU()l6QJ5|UQ^Q`F zRbYsIG+s%;aDQn^5WR|cXF33(TD9!)L-Ev|)weh@FP%+~MVsg?^vW9`SQEiliy(Wk zB6v*~!6^Zm0>57Czak00ep?b{4l=Fm&i?Th>gvdcR}7&gecehJ>#L$pU#}%59legQ zbv-xYuT}hYic4Q#PsIE*50v9)4l2$ZSh}i94*VH$$Y7RP^I2}_t<~Z+Mb+u;8;GH| zg4b4|gG#$e@D0lGnhIKPRD8s+D#agPDO#>fT)-w3pW&Nju8bIU<liK~s3VV8Zz}D` zzuBQGaOB5g@_2PuAjUS@c=fk{>E_Qj5$m2m|L%8feHW`;`u=3Nb^5MGw&%~%d0lR8 zC&nLj{n3{jox>tjd$Q&m&3NOkK93XJ-eE4znoo7lwhfbbr|(<pdb177FnP;1OzvhI z+S7A+5|;8zXkB(g56EtA20?an3n6xMtAh69E-9tgxD6Qd;BW=0=&efZ?G1<6Q;py0 zNm-Mx-;`|6C$w(6YL?F4PGRZn+X!QwRn+P1He%A#w-dJB!HxJGioa8F>Fm3Rn2+U* zL9DYXo?5qkj*NG6t$BbOLNMxHQxqC^a%;Vt8&6vAQs6aJi&L`q2v9NnTAduFoszv* zIZfTITl6_Sm7aPU=!(>q@#<+CC%RjC{GfaXG#uTdY)7N@KE+3@qIjKWJh}=^Pp{-$ z5lBu?-%qStPk-{0ww{Vsm!9rTs~K)!QAFE%O22pJ9HPAozbtyQb<em<>7KgKbg#p< z^vmScrC%>|`gNZ%;<Y|Nh<<%gfu5N25jH&JDio&iAz;JdYUxfp<G>^%>oRx|FgqL` z6ziA9S?$2STy5=WpkIHl{O15z+4|=deFD+m#{J^KEfM*Iz@fYqre$HDpNl?B*v~sq zA0ga$4@S;UG0w|3K1z~Tz@v{57P7hM<Al*CxWym;nfk=6U(vx&YyU`Ze;xN?_xm}^ z^{dARi{W;o){wH+X7#IgHT^yWjasYdJ$q~hxV=sQuGpa}mQ2D<@|vH7JwJND?w{fg zOSaZHk?<ABsqtxm+Ryn6;oP+aP35`$NR|WaNA~L1!)r|bK1)X9bKLY}&o$n!g_~jh zVsRG_p9jH@zF_w+a(6sr^-Nv;Rcd?*U@_=zeVK4>9#S0_G==8aInvn4@;wph01SPF ztj1Tlg-3}Ax(=N<g?e5&TPJ=lML1gJ)63bZz^z^RZU9-85Eox_3tT@uhIn6kHJi+f zJl=cT|5!KwcfFcLiH`-n@inpX6k=+#cv(mIs%~Dgb>jukSnGAoI-aN>t7d;~LEb55 zmW_+ALyt`&^9a02(s>)XH;BGLUcA1pW){W#n7*AL2G%lpcq);s^U?63bpYzA@6?pM z!Hio|2I13$J<EloE^hx>{`(s6JGReD8&oX+{Vl@Se=F+z_k+abv%gK)dWakG?<oFV z#igp>BVu!o_d|QVcri-&Z!M-Y=b-a!BjOUmHH;qe;Z_50eNfo>>W7Kpd=1`I!bxc< zE>=~wzOVcd%g4o@5Tn*sl5f~HJvOA#1W5;6X47MO`~xUCKm0>t-F`Urd_}an{P1!( zcYatz=iVpQ+EVm8zIai_Thg8fh~{ixY#es_qowXJU)*6`zStVs<%?NyXsmz4nDJUa zBE%Ozs=)dKZOO33*6m9>4}r~Y`fI~ZJ@p;PA5(NH%gUh~tLV?uDq5*(y=?w)ac1cg zoxNypZ$Ij}w!5A#qnvGYj>cf7Fz#ryx8_cgmYT+&tXRqoZih3@YW)X6^b>Bjrag~( z*?A~6ehNhUEk7g7Wn2G;AmxT~O#!AV-X@sTe&YapDngBZ&aIkr`Sue^zX0Hh=XM0Y zB+>X4xA5t0zL+`JY_76}y05o3{~?*&r{?+Y2bn}|fftLyH*qK1Y<!SJK7h4#|Ms=< zK47-ozkNFEyp`J_jD8J;sjsJZ2h;wmTxCDb_Agduo^YO%rG5eR__~Xy<oBNt;w<!U zM9<4seUl#x87*H+jo$*6>imu{B{*#l{2ox_58Oh$a95Z75g;W0MBqr`kFs_=<#nR@ zXW$x_{z4ejd?pn5($<dPzkoIV$}MDN)ggMU*Zdnmi2j|RY@34GGuRhCUoV>f4VZ6b z|AV0QKitINKM5QE%Pl-jw4_U?6VXqRcTxTqC~eA~wO@33Bv5Mno4kbX4&tKw7~x!W z832;?8-r=)2FiDAmxsl^^QAq6u`gBB`BIOV{HIUY%5pRR*-Hd|JUip){ELdD&Zz7| zMYV%)nnucNs;HaB2E=f3g4_8NLvZ;v#yn&PQiPRwGCSHMz-%{UMLSJtsU_}NO^NE? zNIUU0Ie@gFl_%7XjxZU*<JUOuKIeRm`9!%<5FtZl!qAQCxv5<dIH;8r>X|}4J*N6> zmtT&aBdC!&YmWSi%TLt)Xs_8v)qccp5ZEUPI4|P>1L8>Ic{a11w%sTl;5Q12e1><f zReNJTdCV9a3kX{!ZeC$WFi7a!114BA>t-6tC&=7rUuX(3*NcfqL&O;ThY6CY<`253 zn!ZEd5iFd8YHy7%R~prRhnDY+%Ays2+45)5N_}lKfVoN+8QSXn#8Wbp4L6VVGPh>- z{#0sC`&<cBbI?k7c3aBlB*1bCc&>oVlQ=8RH0gPyZ1$_))J`V9FHqFv3v%X7$ail2 zNKFg*&M7>%Cr#t=q$!A}^T~956r^}?`f+-2(wRIruB^!HcY1qV$@b1;F3v#F@df94 z%`u30&2jF0<AZy&m>UzU<`RLj(S(wkUuCrx(bwKejitck&-Nk==4D%Z6MFT3cAS4O z#)R~IY6_adsShe`E0y|zifU3AG*!$^5-(8N@157H-=VIx_7Oe&&c1|=W!#7_SA0Ki z;RaCT+gy7tQYumN*L%$n6h_DW3A|=iiB7Yk8fn>aR{Ou1x2P?XfYg>LLbYX@a93>+ z&Mw-bVy-P0ceiDQ=)pg}yVy8@Tgc3>#@ExgVrt|1(dCQS<=l*j(GgGIX3X5w(UD8R zWv4XaC0^cW?aN2sB+?h;9!@&`_p>_Q_4{z9Qfv2n$g{?pcEh9>s)He1-}FiJ(CXMw zEN|#@^$gVby${vHvT?)1{PyyOhx_6O6TeD7n8=kktWK5~7w0ZMGoG)HWELMZtL_`R z>%OH^_hoVWRwJ1H+C)A&kO=J?81zGCDDfx#eEpnQvEAk$cD31lPb98;I8!^KQ}^X+ z_l>H1@A(-c=f2<aZrXqAEFN6@XL@*VW~ziKGs6rT2f@r1feaqjp%;nMfm)?toc0I2 zL(H_RI7?1Hoh_%n!EF4~9@%PevHjc!zmb0NP%zjV{#5Pk)9<*j;N^E*s=%H=Ef<%9 zGYwO^;rexLW}oNGYTui?+o!QpbMxEOzM|j9SHL7YeGGtL#RAfjD`^GKjo*)P>sOX1 ziB70rycsW%22=G|8Uh*Iq@jftGv4uF#!pb0@CS{9B{+c$9`Yd2%|@(8*qBW9$Zfo` zBUUCC#eFnc0wS4`R>0IpzlKViWVc#p@5E;|shl-T%%?yzy3OLVH$i2k5c4U}jBc~| zyhVJ<Ue-|OTRXDZNNdU)Fv>Nw(v0#DBD*n4*LMpumB~)uZGuS1wqs(GO!70g?^K7` zq^cRHEht2)2Ak|QNmkCCXN5bNWUMzMnMDWAs+(P|q;BmgyscCB3zPP(we~IL+mx<- zGRhy(BP@$H@S#mVJPdf-Du2*zmB?P>M$-1lqdN7!NNr~?)M<ezI=j3RKDO<|hh#7l zB;CfsE@(WFdbbE<@DN{Ki^S|etz0l>%`P8>aJQ^}Hd|KzZ)Ta;<lfJo)iyR=(``#^ z^6hGyvq?z~8&qI6DIt(n&~20N=$3~!lS?GQ+BTMiKn6ES$R^QPY%-sqvX%`Rhf8Pz z89aOmLbDZu^#<F=DUM~6V#RFIBC<)z6Pr}9vrX>AXCbMa<!a2QKr_0{;<K2bvZRgq z6lg}bS$wj??QHTebmfkYY&O%Hy#X=SMn}-l{u-Z+I+Dmm*yXxpu>4(@inhnAk@$Nh zS}!%Fn|G-eH&(JJ%e-^0ddxIc)j(~q;HttlFIv|%UjA~n!X@M7MY)TT@p3$~<dBa3 zSp96pC-uwUy{l9I6{&U}W$j#+kB%l1kD3301g3H(iCO^*eUd}~Q}HzMJ6!^>->7Qa z=t$;(<2!t?VycDg>N~9vS!bi~fgkKN87DgYn3?t^J;}aA(0DSHZxLulw{QlMk(jpO zQ%swg{sh{y#5VWvxmKei!>6&$=y{Qip4MU;JuTlxPiwVCPkaP?J3D=1W}mZXweQ~U z_Q_5|+Q<ALu~VajVOn^gMo-lTK!GeZ8I$hnmWemhpNN7DnOGD88Qer6I~B{p%s_(5 zMoiG)X?k&sKn4$Aiqy<btw-+b;#hVnM$AqvB0H5pu~P**+v!ex&Pyt1V<_fRpc&m} z@i{+1Wv?jaQ=l2$X7Tw!@u{)%NaTsmB>J+2)@TK9f7t4=(gNA)Q;1x=M_XN#8A**} zS4v0kS53}V*Fp8YyQ<6VRn?ijT6Ng##gEfoQ}f%2%#wJ&PyWJq_(+F`bK&9c4i8t& zYVUE@-u?5@@kC;q{V5$a)z_Aa*{#k0U@o@XZ*|)(4!<+DF3KGAjE-KvOfvbH_|cqK zq@CTq55Df%6<=n%3zFVtt1f7q0DoHqn$ay}=~s)yyxFdpH{1Og^k<21ZreRHv0btL ze>3xSwtG}&pXbkN<0rb?nAk4uOl;R=h^bm=wkvS}P>{CWd%NZ0&6E;Ru<aR(LLh^i zC}g{8QZO@^pt3m{G@dG{31sl_6-do&*LvlFE{<ipV#I9MBC=fxlzvmNv+eH0=TK5P zd!sR*0?p_)i_hT%mEF&nPl0B1o5d$j(K@#K{*G*}rZwfp(`X`wd!kf8-<Caz2#Oq@ zEO@N0-QSjt$Jx=$c*=HPDLwtHYI3&A9#-bQIqNdRRdoZk;eu6%-MZ@1OH;Pz=bi`W z!lzR><ja_8n^_v4*^~_%FFe>w^YVcXFRx0s`xMCZ*TQ`COd_!X|CQdF$~)26y!cdA zm=?%`-S*4GrNhf;=D_%ju6TL1<nl%FBKs9(XTSF&pAXK-lNs;Aq<h)b4jQLX{}zE} zbPKP6W+cW3YGVas+>G~c5Z_sj+h@zs=E#$Y{fc$$*JNtruQlGrU&FESSMBGM;1aq0 z`Xqhq?D+7^@{}E0TX_JQZmaCLMq59mwz|2psA07x)YFMiY8Y0v02SDTIT?pp%Oqos z`puguCz4@fKbDL@1~<vbmc@E7Q%O+S`wtq=qN*(d89aOq)XbKR>#ufkeHWH1PA2)8 zITslQBKeXwF^g|o#_p2Ok)(2-GQ@leG^5)rK1UN&o<+ob3N)kJEIxV0s&{B{y2x|| zvQcY~RcqM;e>&Uxn}O@QRL2nNZ)P2w+78HiB8@X71c3~`<xIt%&CM{LL&RYSWbiF# z5v#5$U#mK{JXZ<6=6yCHx_yq4yj^>)LVXa=A}1v;)Ha?6y!Cu#@~~f_AHBft=LzPX z^$)`%w!m{$L*P64=aV_b2TN@;U%==Bht7V1Z{PNs13w72sz2=;Vy>nOlR7+mJo{nl z=sW=6$K=V@bK#2!<7XL)@+@Ph+_;#So@HD@*wT&orHV(2Yj^T8BFu-fcI50M#=nZE z&h@;FhT(`ZYi{Aj;|-(U6al_2t@o$muS>gHto705<hJVEc<dqk+S54_taR8=&PL^U zMuXF*B=nQpygkmws8U+azmPC`5x3Th1s^do@u?l-z>#|inNx4~!p(&4X>pU7o)*il zvv8a`CoD?I6BgTV+?#yA-R8N^?1*ybIdRwb5JYeGJ3_`=r+-@N9y=%8VR}cI`F7Vi z;Su=wD17kj<_hrj?50J?!@d~>`jWNj&r3-~Texjy)E`&(T}eX5Kde3H@G7N}E$1)t z%bTR9{7S6{{dhTXulWk@?ln;t&)O@a(ba&@aOdMuzs$$rWtbla2ilkGZK+U>9cYor z&FgK6tg{V$;M!}eK+ebm(ovvTEBw~0R4Qln+vD3;lQvS>sr*>u8d7|OJ(wEcVeV^4 zG`4c%aP74OUbb}|0gsrPqQaR<?rg6&t{2qV-O2F#aqB~6a-z1jFHdn^OB_%4It88u z(d&u#=O?{<l^>Yt<0E=+0I=#iVBJ6jodZ#^@QvJ@ES>`GPZ(`g&*tlm1dTTdiJifk zb^&X2){fxKg1?1ZbQ8A#%$o(dg<E(%NOpKao~3asAR9r&n)>QC7dGE&8TcNH;EZlh z02Voew-J`m>3FNRk-=BXw<-Uf{^Y*?CS^=6@-A1nRX6{Rb~Jpu@XFP1hVLLkYwu8T zyGQRNIyn-)%VpeY8M;UB=4NY1-}V?~BTJ9&Td}#gbpO*%yCXQmXvIYC0(V_IL$tim zh`dJ``1oG^PM3XSHQd6;Q$L*tE$vUCIwJO%b6ZexCGGvzZ9({6ae;_V)~W)D?8h)- z?%5)D#VT08Q4ek|<eLl#Zy6|F<8BIu><#jZH0;P}oXKWR?8)di)$z~E!9h>f{0pwU zrj;<5eJ!UyuU~JO2;CXdy+C;`7m(@ci2IrDdqKUxUeEO;t~ICvbVM~cfUm=gAa2&u z?st<0yl^dS6ry`1oP5ZJSB${X@k(Fqg8F-DLSD~Zdi3G7qWvty=7i=xbJ66Nq>U(# zDvheu2RZbAG&fnUb7po9ipyfOmbi2D9dY{(*Aai%!TXtUOXjY%H?FnUYQ+R?Ec-Fx z1CnhQeShN2>FmV*{6O||FkRKySMDzlFc!=fIzRf94c~`wCIf!Vg%6~bvcc+XWuUgE zehTd<Wp@%yS4BHDWYw*OsdD{(iUzYw=5bHKBHYtvK75IY)myo|{k+vsyK$zc;k__q z?<}?3s&R57dh{vU%F!|Ffav|84dvGy0emnY-bbo0XFr~evpGB1#O9JWP?)S1^3iws zQMO{RmZ@(hd&qq5^=UY<%JTNp6OO6u<X-iw+8OT0nNmM~V~h_E<$nBIq@KG2HS8J6 z2Af_=Jwv_0CN{o2RJeEYaGpHhpr2OEuG}xnPw9L<A&EFuC{?4V-3m2+$|xHZ`CNao z*5KC{kK`w~Vha0;!tmml+c_z0KTE%Z<OFs$8qRw_*~$Itm(41)%l2$vg7`jw_||?1 zHRQ{;`5ooG@nsQ$(umIUr=u3pIQX2;bqe5fxaJYp-%UE^@Ii|E^*dFi90H%TOQH-V zAzh6d*{B|=7Tq_iJo}LTr`4Y!JAi=~eFze9PcaK~`Yk;dPIeQscyB77Z9D=lKbpHy zX?{1PQ#6Rahs;HO`axCXe)*6j{>vE9oVNfyn|FlwQyT;PSu>L`H^riak0ftV+yE-H zzqr<%)FR@ihm(+*%xB=o3s01wgQ<eY8xAgR!PK8MY4E2Pc$0m;zBy;Vzko;A?+rI= z2}z3ps3ri5sE%yrSJd&@b{$iJ{d88<3z=I7;cGSez0Qq(`WfJ&edQSQUh_7Jaj2J$ z(vKLf3!)Fx!c}~Xx**dwxU7Bh#RV<=0{ze%Z)+nAEduOP2iMjoKO>P#ewHSe`dJ$N zW~+W=#C<KfHd)v>Xv@H8lxl~9oc&Hs$^A@={WMMZ5%ua>j3dkCVDgTwBc93o=(*@F z3L%#G!`*880kB~GW75ZCd>u7%zdGeQ#EYIMTXqRv0P@RGUENMOl~+^#FUq$|YmIpr zWj}}9J99|hAmHmfn&aO{7|-z)b#wgv`lSM1^UXk7y4k#bDNx2eFLObg7ZpjJS5hNu zCo`cpQm(uyPwOop)~1-CE7E!+H>UBzveQd3y7D^c4tMHnrspb=%(KNz(*T|C6B&h0 z`&w$A@mh-8&OA77Roo!piEKVUOE$MqShBg9FqVy?PBtrI+1v`GrJKnnOk}gEEgKa{ z$>wm$=Gn-`NHtZ`+B$h0Qn3^}8A0nd;3g<VS~qb+P%2`Ava()Nc~KkPrDH*<M3<lp z&=HhTNC`@9bvow0mnK;ttGJbM15>j4!Yo<6jq;M!?S!$c6m_yXIF{8mAT8ZYRx1-( z@u)o3X%$Jy>Ist78OX{=c}*2HVMQ#PgVx(gnv4`_y_Fj>5~|54E~7jrBgJ?R#qOfC z`U|E~D%T|`19T*1bW)O1OFQS{BnRXaw=izprS*R%Lz5T22_N7F#N%)hn=h>&z9b&& zcFK$8t1;-)(8af&O*=W6$e>!Q?w;zdYaE;T7%mE@t(}En>%I(p;Ts^>__)Bkqk6UT zLUVel^KeSbtGmJQqYd&~YrRVO+KPrNb_}$~>gzZ0GGCPbY(X^kF?oJKT%VBV46l7T z-plbbQ((Jq($9JWJ=s_5%S=?={<y}iNoamaGK1OEcy&KsBW}8in)#WgjSB7Of)-@F zP0u93(D+5Kesh03o_lj*+CZ}PWh!f~{C*!IFc#i`{1&cWl;yXZ3@}lg<|L7_Ci-|^ zwqoO<_F|r#@D*M{CWnvb1v4uc6U!mn9KqCh{fdq@Tq?@?DL(g8T|x8<0VJgG`x;0@ zPd@j{)=stpcPzxEkLMUVyNOpGFYzgR6<tK~jPl*p*$?PhopZGTk$2kgiO1Cj#Mo)W zS2}H&+Nli(L%iLFf9!#{YlDb%x8Vm;E*`^m>ilY_PSj<V+|;0UoogrBCOT)QxH?6o zyUus0&O6d|eyvld9-egfRac#xA6K0s(p~2(RHr>1OZ4OGojQ-$sm>>)+xd~lRi}t_ z*ZE02N8{f~JNKv`f7wGdPRB7(*H?R_H@$TC-Q(yzAosQ_8|>2G4Udc7r*=nAVr|>> zp2X_-lMo*te|J7E{+J&>PI^CkT=YJj@F$=1jgC(3x06nF>G7UA+u4qYbnBG5-<@kr z^!S^dI-j`vI`^ayu1*o@u2U+~;3Y~YH?{LyojRGR?ap5Jq%^Kh5$Uc|YSiF>Wv9*u zJ9Qqp`#Sfe2(C^M>8?|%(cl=PtMfwI`Rz`fNA14OJt>Q;Q$%*I^ZdqRQcCLEl^x2} zx9w(6uHM;=9D92#e5lioHM?)eo(3t`4iV{YhlZ_&o$O2W@;jY6b(m#0K7GkvyLVKs zP7&#@^E1+sAnC6?`old9S59skoZ52xZl?_g@4gMseq3!3k?uBpR&C%sY^Toeb?Q81 z_jTU%xat&<?m9oGI(w5k_b9hL4Y^Kk8ekuvpWah<J9_F|qjx!W;pVLN+k>4s+^X~# z{ewNpLeBwh?zU-v1Tx9ankI4^l?Xqty3#YdF9@(3d+Zt)_tf>SJ?iMkC!alatD~n* zG<w(XN<M4SPNTf{?rqFAOef2;g%G|~-I^9$e@bxG`mV{EFWZvvmYRC6PP6swJ+ZY@ zXEnaq>8wpFS>{ab#B}3J9h5tSVsc_>l6kmeTSxC?TVkv|x7`zC&L@dTVp~qHVrERQ zjMWAQYugeuek-$uZ2Z=E=}{VK47);ZJUDj_86KFH;f;HeAsbC|NGZIC-+7F?_70(- z@bcZSq&^l>tPySP^rW5Sq{`cJ+Ee9DP9oBlld-dt5R9F+5QNj<KydsV@bW|kdYqqL z#~qaB<p+BZgq;O&K48_HB58cNqc|Id!rocqdvpr>zn3<?rN}C8>yb3Z_Md@nXhSu$ zJ18hxE4l;(l5$#nwJ|2s2`yJ<QEXS3u0zwoHremS>}V`*lhq*EPEbcrJE3V^JE8ej zJE1|TozQ6E5^(;Isv!JM96qeD%^4Zrjx)3yFT@|j;SUue2lacK+V^9ij3xoHymx)v zW6u<rw3OTiOp%j3Ur}$c^KSb)B41(4+4e@@GV?>>))(x9U(=%ozdoEq8<XJig$pk_ zh`p6uRQ>-rI}<p$ifaG&+}m?|nI+RRlkUk(k`93+m+77%$v~JSEMXTAWD^M@3JL-u z7rPVCOeRF!F`$C`lBX!o-S_ml;fni1L~%n=Kt<)jbKh6u|NA?2Z};t)1pU8!(o=O$ zojSFhI(6#QrUjMs@nEwPyM0HCGo=Y<AK{XhRiKBrDx0M0Jm-3Mu`1}EI}MqO1h?oj z85@rCGMVp@kMO<NWj0Lm<%dtFTNN?VU{zmEHW6U9Tu{R8=647`c*Sl~z6kdv{AT&R zh2N|AZRU3hzgzjem*3a<eSzP@{O;q2PMrAz?kFxhaWg0L)6y5xE5ovE<}!ZR*)uQU zH_PuTeox>x{c`?z;j<`$u_xW=O8Iw*%{^`R2zF@-i+`K^6jSi$%72uDvo#{v^?C>2 zDgP!1XU9jd>v{*@A-{NyxNOe|cD=#DuaRGD2b?`4!LBzt_^kZmYvAlQaZ3jH*$@%v z0Z_r&l@RQDlf!?W{9<|F4f&}v<&&)vfnJjooDB@YuIn6}Efc{m^$Or@d<dSg>vb+* zs{+*V2zW96%XeX|5~VE)Q1`_Dg4i!O8)t%D>cjZ2js1eNfg-?pnLuJ~{5QyN0}ppi zx!_j_r0ziQ%jK7Z;~=TyIc7V0u)WP{yyXd~#cQ$$ijlq#uVvee?s^2zwfGSicL#HC z5FmvC+B`Fu=~?1<+-Gg%Ezr?FuQ46OeaF)hl5PUCmnJ8Ay~bMgrFX*A+gw;>iW?j5 zmZj2tkLcT1cXZ#Q`hHsbdy&3xZR6|almNm}71wosudzdk?961?G^+G>(UUy0?75W5 zqt+ad!<l>4*PCBP9yCj23R^GgRKSQyM-1u<1B*X4*&8(e*vfbgi4ih854iH0=a22l zMxGW&oP3X!XFuYVfIymG!0sU5rqr_&j3!>z`6uynzr=RI+%dFXZ@Yl@f#p*6)KT(A zr)E!s&?K|y2JAU2kK?5WNr~*l6NSCuaa_ABf#=?}pxM;fOMde(KrAk0b#}$p1MYBc zbXtP@Zu<58;4Z%YdDI_|+b-T6RF>=xMwadl7LDx=Myq|hgRyF1cd%0?Rfon^*Nb=O zK+A!a11%@CoX~PRrQI$uYTR78cy}JOJZO2)@<PiCEx)+hzdOHk4Y<`FL+&e-tG&Am zmBqUYBTIG{7A@Uf7#-VP7$ZhuF)<2Dh*4NtU9h`QEmTYVEmjA17j{aIA2SMCm@F^d zUCLI*_%lMpQg#verR*qCOWB=L(MBC=cd1*b-9qg))b2$PEp_jdei9?GlSD{?kOD&r z7LjHt*eS&!PLvf;N?B5Euoeos>Z4>8Qp)X=$ttFnFXdIjQoaIGegvfaBIPl^Q}gqf zTA@TWklBKe3PLIvQel)d3Ol8gvz;nDm*!(lc>|xUjIS5;R9I6Qpzn<5cdCK8&c-C% z;;{88!MwEnDLI!4l@MFf4wbNrKaYSE;;XCL>w@(y;a@GdZ#Xa}s}M=A>H-&XzUQ;F z594vZuUcd~$v~Te#8|cDzQya=Oa<Qkf%=569i{9#8RJdj2PjO8q&}^FqdA=)FEZG3 zsooUN%XvZgunNwCJviFCbTp&t4~09?ofV#6ms=Uvcime!?hW;q`o}gO*9X1^Pz|#5 zLi2wJ_w)1*{qBxo8a(NRnJ4ml4ZrD6^T*$+dYl-^I(NX|$_UWKMgw!}%Y2hlp^O7V z3kDZt+n?cAq^0;<Rnv-ZF7ee6iZ2)OlMU}zv0^&()Z);<;6O}ApQ;_`bmD0qT8xq8 z*LM1^8lKAldU~-p4wt`g&?|)Kn-IE1Z9SBY15vEloIRK=b%%E;IBT;NR)MZKfK{NU zqiApQ4Kx(EAod0DPTWE^eW<S4Sdt3|(6Wdq&LHA@+7WHaGL+9cw=kG56~eE(R7}tA zX*}3QHobbNn00PXh>lq-aZd*sEcKWZp>8UNVl5I{x}udso2Cr)W}VwN*jwrgQG<)) zji-R**%DM^3tp=o_w5Fhe)7J}jVE>5|3~6aSA{PiVK$KL#L;O7tKvM^bra&b5cOZ1 z6Pi@J)WWf*b;RY~Qs;qn7@L0#P5tvH{3><7qe_KNnb*y$84Q1H&A(OZ%EYw4^+vg? z{jE}uCPIJf>*X#>*wEi9b!P%LlA1J;_jM^xSKV6-qrt7Q&sYo`V>xgr86iu+QQO!3 zYA;^YhB3VTcy~Ey0k0Yn=mNZIBD@25RpWR|<BfMEmFP#WQO&g1+iXl$-+X{NWD`4c z0tURL<9Jc<*-JAvSqPTualpQ*d<-04N)67Kki(VCgMj9mCqRd~WBe3QPo{H)lf0H{ zk?Q0Tb(aNLf3m{jzo=-QL7PdanCOfJsk^`7VJhe+(9G7?WpB8&yoUP-MX?^Ttlc6V zu17avopC7OMhHPo4~y91gGOU%^yFfhB6)HOzo+q|8=3NrqMTtLdxm|)87cYu<1(VO ze$(3Q7*kG{N?acO2AySmUx8n-!02}8d^v^cSX81Sx=Ub}Z`bI9F}YjB0`?wr5^Un9 z6|Aoa!)z<ISf}0!)>rh6d1<O!xLEtj^_}zLNE$`ong^B~iqK+P6<~&v=$9$Ty!tZY zjZ5<MaBCUY&A0O%#@)KblYWYq$}L`EHp;=IcHBsS-~v{*{mGhx`xZJi=Du9j`i?Q~ zgUfWgv-WPS^X=_S-;GgDo}kgXvCIaictB&zR}lWMx;!dAvtw;6Fme{(@u6}tepw7o zws*N8@rfNN`93(|uSI92H_X$_@{ykU4*fRs({_0~2y9(IOTylTfO}frDPk@ew?6OU zA4L2IiBFLjOfBCNzF+I{w`k$tG?BQ{T-+d3O^jb<`1`0Q6y~|5H1Tn-ii$dZr6}NP zhACGwO1YXr%GHcfu4agGH6xU(8K7Lv_~dGahcI?CI(cjcrx4B9<Z6ayvv|$f&0_+b z=BV~LMMP&%nW$=?-QM<Cc+sserQ2K4<N>#!_x|Br9cuzTo86G9%l@I^?hP8uaOFjj zPv%@bnU!mtpRvOyy3H5X6ZVkmeCzu`su%n%a*MV7{H-4rpx@sjH~M7(=~U}!46J1A z+op}OL3AFlr0oZxqqc*&dZ3-<unUb-Tqy+c2KFZz43cneu^H@&P(X?ktJorpxgg7{ zUUIzc`s+l?4+uxfW}_eC$&I50I^x|1FdOOsbW3fzN>@}>;a7{xknYDpPxU=(9s(G! zq{o_@fMs66Frk*3!GMt+Z@5k7I?nKXmH8RcNWiv0Mli}0lJ@^9?XW`NmJ0RMbN@)O z@n-O?0B-IWG-p&_IXhcOluUnrW+X=wk<??8yqSlvWN!8|(VanP+uV$CC7Hu9YFkHa z{shmg5LDLAB88)B-d2$knwyL!r8JtSlV|mP=7nsWbu`b!Gb@DFT=M4@2l5t&$v_h4 z!6YC5qkIUV73UWghh5PY=b?5S^k|n3a)={8={U$+%G-?N{Hz`4=SiGjD2@<X>HNy# zJS&d#%XXY!C2@YOI6_df!nKYM%#*6?UmKl9Oy@UkI=@Zm{7!U)&`SF#i}Rc~&ROlc ze0)-uXR9uS(2Bz_OBt_><NUsz&L5I={-|_>(2Db0i}UO_&Y#+G{+z`5i{c1DWrWjQ z8O;M=djc>I04#70!#n_XBmnaOxF!LZC$1;VA(`J<Ualrs_JY4EFToBrTxZ2Ye@pW7 zcjZS&+#5A>1+I?xG`>imPzRnBgzbI^Ez9ubaxD#apA@<c`{-j^MR|1r-}Ut4T35L~ z&_Ff4((MvMX|>*{=ums6QAzmx_m<D60u!M}luyU!dy+i<LwOWJtDc#I(Kb(u<7Bd} zI9+%(@HIU=vqEUa`J=_TD2{_jC7ng83xu<a!y})(c9D+rCyR4&9EYbiiBnM=Ui5Tv zcz2UmG177VY;l+pS$TK|G$~IpiG#>3&I+NGx4&4NOX4`a?Kpi&oPNa-LMzT+EzYHJ zoCWPT14*2c;s`-)i(S{+cE^PRNWcnW^4{5@&`GIN1gGU2tvbo~X-Oa118i0Z<L6!@ zM%uIRP~@V?&Yec}Bqzqb<{&ADHHkGho-m2X{LSdUK=ic*F&qMC%MD0j>|%oEb0K`f zaje|b4;+s<o8{bi3m+{Wm%#6YmYE4zKyV-XNjpqFP`BG3!}@4{%8J-RT&9mRyqV`h z&yUKaN}WBQ4=a;rd&K{4WfDeI0YPUX?PG+GSP!-DMSNRaBQGKm+po12k<D<;R^}0- zBlyH<<@y&=DLTYd<^Uj|n@d5HAwoJ>D`tH#^%0FJxnRc&K~9j^d2D<0Tekx<?3%s* z5%iDgJ^V=#NFrTNBu3ETRg9pw$avda4CSI1K9zuI34YGWpmAhM`DiI$ycu-^Hrx7s z&W$OG${?0n5b8OO5-h{Rfj%Lg<=kjLkt)<CxejhQ-oA89KinTscmRL6Lza`IEASZ+ zuxG`Vw{sI?p`PQDVxUX8@-NOsuT>hux#&i@z35u<xTx;_fDOlRV1U?pV&~)7<5ox= z$7+|dIF0g_!K|QC4q+;cUJa#*gYoRbvmVjLSsU|P;^iY=A_(RYgO#I|NuD`}<6!lZ zIwGvunEs5*|1xT>vU$z27NHJ!n<!CVuOe3Pyi%Tiiy^Not-IBE!$wzHnt`HNU2)5e zV-uSXH5#<E(|sIkiEC_n<R<L9sNQW|C{AAHx0#I-UA+_%|JyU4e@5cJzUwQSJ%bOi zgs_=#qy*>d17|O1Lcq%$??{pf%yw=^i~=*DyMs)}VJ``>8W(%K9E%9*q7Ks`HJcPH zyqLTtazXaLe<+<9Cr{Y#i_E`E<^MK+#{F$K+5=6j>a`as{8@<xuepl0nN_#c5PYrN z>)ZlDy{GX#vA*pfr?V@}8=h4k6slrd-_K@FQblxW?!$sWcsV)K*u~TJ#rh$B^k%Zq zJdh7y<2d0aRBw)VHr9r5bqBkS)&6i<Mf~t0S1{Q%cZw`@W5FePWQUr2fFmYsLa+`u z{gW=gh~F}PtN2aws~ub&upEq6mpOOTIU~-gIA^JIs+*jvt<K6<&c+yIW4tz@f=4yw zg;gvv>*gW~Cr?RUC-xS8MmwBr&5v($0VkyEdkbeKnb2pt*^a+Et{|END`Oe?WqDM6 zjhPkL@>#L9UY2Mwp4F)ua^kS&dubjn&U9@b-NKhOaf(LxY0(|@%B)FI-X_O3g75<V zq;Q6MN<GJ^?)QhjY&=KvyN2Jt@mm6n5mfVy%sM(AoRs-0zfme|fUt{k-_MWhlI>ft z=@I@gl~pp9EXR_sRqBkRMJ)!^bjSgtL?xHXkds>B77*dYj>ylQAGy~X$v=AJMZ^0F zPo<O=m0Z<Q>NPpphwb<p(&W>`^h5VOmg1Fqkv_dn`nU`x`E;eUtUIq8VYno;)aL|m z*5g>|Hj(UeBp<x*FVteG50ZUplHNXO^+T&a7UCYZ>+Pb|pU`@*X!S#@|6ifC09p$i zt-#|BlIMulf`rxuqO|~83;q>a1JD|9v~nJ%@n?(HKtgMwXbnJX;9sFtf>z1V%6p}J zc(rJi5?Z&zfu$0(N-?c{G~*yt1|5}xhy8u4s0_wb7%>MSF_>iMLIPKgQ|THp;|6RG zo<oota-@o0sTf`*QbTQ0Ly#JJG*T_{>U@s1n;+0nG~R^~)ytgIRlPbHf8N=(-<K2r zAG-D{yRpd29OdnIVdB5u+wXme{~m9@zb5{wzw~fF9@8%Km%iBf*Ll%yWWw;CE?MoC zdeIyCVos5U>MivO%<Y?8F%_>)FCFTheu%c?memQq7y~t)j!X>&(JS!OS#Q<|U*6*} zLF&m(tmX;>zA@kLc#%YtZijsl0PFEP1u}T}TDtxEmqD1Lx58hR5<}sq0B>NjOEhg; zi8w&W;3+(ZRgOMJn1e(}kzm7dAg3sdZe+nTCT&|?dV^u3lB-`4M4bHNPNc_T1PfnB zHtHvNjSE|&m=&k8xqTWrFtv8ai<8p4nAol~0vSAHrJ`nIUQFDMpHBZLeA=##mm~yU z(jp+x4*hY}u@ijX35=ljWOidpQ|l{OBh?@0+&JGTYqg2PLSndMP(#^#DQhR8+>t3e z1m!i}l@yC3)b9e<M(2X%6!Ip~UQ0&^;NJM1PTF~rR5$dx<IdfC%EvQ$I?f)?9CfgG z)ye+LaeqlI8?)gTypP}CfaUq<$FF~rEO;CQNpYTTX<~YyEdbb=y7dM_CY$ISPF>@) zp%x*w1v{=wD(pH{*czhk6v*HqYe2OfFHJCBDvY(l5Xj)+o75(|`GZD3rS#XV^cufR zDx|S(ICEt#I+%d)2(+}hdP{faGvuwiGjHN_ZYp^(JlVr_N-_)7j}Lksq%V(N4>K0m z=qky?WU$I>oN-`FL%I=F$YI<5o={4nQ<nVbg-{*J4#pcRP7H>+V;JY=2LpE@aRE<? z@<-=V7LB=-$1gOE&aZ9?pGW>}yGQs8eB<Z4fTeTcvMqLJ&|Nb@QhvWO2Py7sRdKjD zi)z_M;<_`(s^tXa0^mLe9?BLdSX?=-gtDhB_Zs1NQaKKDZtnf)*{YXr_|oW}=;*RW z<pN;b!CX=~xmM*sd1s2UXw0X49nkvY{77ze2%IpKuN}x7Y8_s!Dr>qnG2%5IXi>_g zS`0+%Kws^gd&T#+{UWn&e<#Dm=hsu0xmI0{?z=9j#+~Fw)%YWE*Ve@pR1n*iWvdP4 zH5BgHTD#iX!D)7Sz6!T)e)I`qzxJQT-a+g>*tneuK~kAG2r{ec?M$?T)0w!om5FvZ zM)^RQc)>r7y`9+BBP<t>iw`tDk9xV>k1SAZ@c`dX3U|QJNSK~nogOzlkz_3V3R8ZE z>@wfZon(+~6(7XS(>88iy8az}##2-q={BLD#())WY&a)+If<q8#h%)QIg{1MEiM<( zw7Py;VAI)&#{@Qeu8($1dmYfG*=vzXmnZp6A*BW&lh^T6FRxDT*^GH@W9Eu?x^)%t z+7IEiLW|c%_RVWHdf58@9Iji>a7Obx#&cbF9p=i**Qpb$E!20Z=AOw`HGk5o`B6CW zB$H=C&^;iCF{3yoftI59#D9&Vm}w|SzgN`t3<Z3$o6W$5Qhu-y-(p$7m!kgQT<UG6 zY_o+Q8Pk$qYQ-q_l!}8rt^D?+DQ-GwP7UmxqVa0)V6R239~U#^P~Tvmac?*aKk=%x zc$meg#vOC1D*in7UFUiJ6T?H1QU1A`d7&|!#=Adt!M~pz#(kK$+Iw_0ZcoAwZcZtw z?ONY9)5Kh-kvE9eL#1VjGf*YkphV0PHL*X>@Ps=pzr2gosIG2RKzriv=mpUYpy@tF z&#o)#RUVveZNRzNXrmI-QmZqiZFFvQ7+@2~_QsUNG5a~4^(@QVwdGjycDylFZoe_L zCbKNQ<Mjx)FzZ*BSvMGOeGj<rzxvTt)UBBcvS!klIM8c+BPo;%-Sr;`fUNyZiGRCg zU-teH>h~-rByL39dI-qK0j~18M~iuGPvl;4G|6`+A+t?93eNXMY0_+ZJIx@9<>qB5 zI%e`V4}g~^0P_HNMFKDnfEyElc>vs$0L%m6l?lK+02sK;PIN=;?vl$3E^I|hW)VIz z=RMSc{>8R(e^z+x;Zt-k%cP&{DY(|0hScGiTKHyZZ?7WI<_EhKcm#nv1v2=KS0{no zsSq@eRG>fx58p!cS!Kx|nL0GPgB@#*5Em}Qs<}W0H_aM;u7o!d=ruPf53j~Mz7Ac~ z%&=SF0MktOCv4pIE}dtkK^te6nz8Ie5Z+9pFsh8hJ6@Zl_!gyjlyWDK!Na$zaIZ@+ zZWhMT!Vt*d;oC%NIs4kq(n9=N+d$z*AJ#`|)%dO8TML_q<&L)j&{CGW^+xxfo{0W9 zE3j5WZi$0KZIG~tg1}q8-j>hw(f_h;7t~|2wiAwhMIv1tcye`M5_`3MY<hBa(^MYq z7VB>jEw`Plt)O|~yC_ijMpWivZLG0;P2B&p;UXD4ZBNugGPCn2+?|LSxBuu{q~EXf z!)0Kpdt}1}kXY&4F6C;^)P62#qT)B6KhUBna^cTJZkVc<DXcm$#Z?ayU<sfwxu4&- zGs%a;N^P6A*e-@Cs>s=Yr)2eRcC&GA#wyhy6H9aM%N5a8M|cb^XIn(a*{`Oe$M9oY z@RPh{J1O3*YR?N#QddRpdYNMZQpTjtN8&n<YqmEZzD0*3*wAp~TI{o~&Kl?EGgn4v zBmvc@9Zi1pAr)2Q`ahtDc#rFFuQgbuy8dYmE}9xiRfnZG8s1HnOsw)7SCbbT8B+D= zuub&2w(xC>dE9nORQ;K$`O%CQk_c+BTUZKX15Wrh%H7jJqq;yuwmdqKoNER;h}AK> zCm7kZe)aF-a%7dcEQ!gDSR>LK#qQ&HeP}bnXK29j-7)k8py4faMdZ_etCv1T0GOi| zzFi%Z`c^xx!5y%%OEfWEPv(MZX|lgI;%_;b5;cD+qW+f0%Kr=VH$Ne#mEiZ{1WzQs z9oBNW(r1Xesq}AG`X>qS&bjGNlYWWx9g(eHC7B62tCjL(V$=rQ#}<V|j|IZrTVn0N z6*sAbQwYK2V-fx6RDD_b#-Kl_@@=_TLzhDc9R0_EwbF0Z<7tYdJuoUCHUD<i{7K%7 zTyFCs)RnviI%7WQ%=w_R=7S#J0-X_)&vr*=w}9MuYiVYqC$wO#M9&e(8l{c4xdrPe zbCUIQ6DsTqioQVMtPlH{#c|!Vl6ztsu{%b*)&)lA5#(A|S+h@<i&TZZLlp*1@fBU7 zv)&aLM4u#e*OX6!;7YZa0{rNFKGT)|PSK)q<wj3dVDj-4eGpF}esn=P=)#Vmr|OHI z^L~-i^0|2cd>{ds2f%+N0P~Rlz}Aa~#FyFdujIMd#IjjzUc{dskID1j#3JFJ_&b3V z!xRR?1jtZ9n5c!UFQmd*fDOiP^tYY}57&GBEpi<%HU5NHNNu^WeNT5#cf+JT%$?U< zEg5|PqLrxul4`P~MhD16PshzgA0}W$&%}Lhc{7ME0UAV?@|PF)8cb&{!`qvUu!nFR z`-i}eSoy-}S<_90&%}%U?PGu&YYs-ly;md00fp$l1bL<)SAbF<%sNmZ`iLk*z=&<u zfm^W-q+Zw~#VZM&cmY=lX7`kzkg~10{c`7KPQJyN)U*@tnonfRjHWUCNt9V@OTOi& zzSd9W!tyofLfSc<=%@LW`RG}sS?d}`_-gE%7z`TEA@hzx*dUO>RAox$3=fi)lX<FH zTdpH%8`5OvyPTiI(zD~=DY!?Zz7u!@7(%6m_Z0lKtKw|VwkovL_<B1xt5FNa8{Y=N zn|0yeN#0gb#~b$m8gKkbf0K~$M&XcoczuAz8x{L|g8e<y{yu}hzH!Q~$G~0gPE#9p zU+uZ7yaNo^#2mP^MsMZO^myOy{bnVDHV~_5H$>>XJ3dGUF=ciEeBEqPr8@;Oc=#@g zjncz0aq)+&|GLPQ%8;E6*`6swv$++pu1Y;T8+{P8TyzzHUN7GrKEfx@j}K;}s{u_6 z7?X3qW&yJ<%Pc$%nRooIJA_^Ah^3t3+7AWMHr%1&G?vHAU{Q-{I`d$wMqElLBQTK4 z)F7)r<%kJrG2BC9L%Et?(KU#ifAf<NUFNJ_TRV~XEQ(<+>(8PfV+i{&-Iu!MZ<#F+ zBZ|XL29fJ7TO5x5oHN8Rpg6&`_rY&qlOyJm#SIr~QNMq%xTk!6sz=aD0}M%U{w-dY z^@Bt^KA-4h6Mc;<)y!+{#@c9ihNB*tie$r3cXOJH;#A7)tPo3q!xvAhaFxx+iK{EB z8rVAdZGwP)`u;PGqlHj?C+=Lle*<rNBM2(CrJ$Pn2Z@YRs|K)2t)G%)K+Rj~o>)){ z_5|z6qVbEiWQ6aAQ|c?yc-D~RHEdf=h?gDhZWCGwYFl*WYbVko5?x5TIil;Jz;Sv@ zbWP-JGErmVuL@-~M;zMQ&F!-$#p0Rv`#No$H2bihl+CfHu|NW{-Vye~D<Lz(+Qex| zE>&<VP-W_{G^}jAZk=<{)bgaH)(zqy6Ret0Oh1?ANXIpL6JrTT6(MG*Y3g=65o%|; z;fG6ptF21392P9q?uv0J4B7{KIu5bgv>tS4D++jOQ$NyJ)g3*T3SK$hpIv_;EYixc zW%D;6a6HJ7n$rS{61XrME%{RK>Wt71Xhl%_G}<Dni?sLN3Z0ozoh7ulJOd^j%I>Y{ zTpb}#9#Z|;C^6zUzJo+`ojVS(IUW9o(^wCuu@sVE{Va|3NE%BahUKbrys>Z{S1QL< zrv5osMknu5{Uvku;}W}iptlV&BPNe+ZrC%0-rLqgio-p_y?05KunTXq5$Z~@zAAgy zNeO7Or?HiU-R!G*Elt{2Xx>foJ-Oao-Oo>y8V?hmO$`=qVpJjKA%`Y0z3_Lfk`8)) zF7E(A=u2EOS|IC#l?1TtSOk=dJ`O%W=~2HFKl8soyP~+B^(tCf!<GrOi30;0_uR+2 zprN76eH;_m80S7tt6kFH&0w!-md$dbJ4hh9l|S%kXUJFf8FJ@7L%x~{$vW;>)SoTe z<>b{Pr}`L>`z7@96fT~Zk4*Io3cNe)7C6S~wo0MwlGT`*GK*+GqKf6%tn`U?rTRQ@ zn<HkC&=ND-p8l-q1=0J2dU}7h5>3&dEWfpi-Iq5^ySm#57PI+6^i6VKV~p(AP14V! zkqgnc01b6_Z@H8XfvWanKF7WOY?hY<!UAay1>Fo)R)0bCe4-2$Yv(gsy+B@Bo?nQ^ zrNs$Ym-%uwhU2j0&G8_myCi{<dfrk`f-Mh-97al|5A_!lYvOfoAY}7JyzCkqJ_?hq z8TS$gS~@u#hZQG_v2S3i%y7pPElVlVTo8x%Om!uOlfKEZem96%)3E(Rya~vOHaGUZ zE%S^8ZtRsU`D?J}XuH1^rqY!k(_J!Ejx7c|X{Ydc`tuSB76&iw41R%vuWJWai=E-$ zQTR(!;R90#q{)Am@M6HGv|ZqYugA0yUZ27?iQqRLH%+%uc3dsYH4i0f#Yu@;aSPgl z^{lv$BJwk1rc-2_8>CY(R(H<|tJFPX$YM}-hPbaRwP<Vv%jO&xm3wPtSIrJ37kX5- z?tOOBp&n<g+CTMOFZ=`iz;P+8WPxE#t&3rkIU5v1x&R!F2GPAI*eDGGTYJ&nSWgJM zmR!v7hM#SGoWk2k)A%|*V|~Z)ZhZjba%M4QYqGj6{j*GtOqv!pepW+UY@yruq4q~{ zBU92iWXVQsfw6z-Mr_YXjDd~MYke%*cs2fMZ76c|qzjHt_LmCPzKwMS)hwvpkqg$R zHn3=rDL6T!(hYGewtB$i3H;r(>E|>`!N~yDs$vmqe9x8h1$y<%DUhcXrXDJB{ZBwg z1q3e5X8POnW2XekP<Pg<%w|re2w%q4?;K^yjMWAP^IQtA#q7#CdJU_XZG4}KE#=(` zGkR^&`uW6n=D~+@LF1>w&Do^JC82C)OF8$Uym7GD=4S<)n#BdFt>RIJ{rOcZy%=79 z2bDB4D^)j)<tF-hPry~kh8x(%VYZBH=C2fZiOJfArbx!#>pu^0*v84}SKv+6z>1;n z`ZG%1rUJM@W+`79>fP50zBHt}uX^psxCv4uinUGifjw-VP3(uQ=B9Hr_FJzK3Dhy# zs$J`}ud!s`rgNDoWCPUGuhB*Nx(o3b$3WvaA(eb|7brtn34J#Zir?KG!b_=#Za0oG zx^!D})p$)tdzug@PM#MSP`?g|T0V<4_8a(m?EVay9miXu;@?xE!p3vX_GGG(6@AUa zBr2eyyh~&(a+k^@(`?eg?h>+5?Q_q1U>~>5?9)YgvZf4I3sXbc=-VXC(D-30$Te{( zJ=D)C2dyeqQX^BBmy0HDDEo|p89^m(xD*~SV>Ox*H$i0+GdI?5Bz4wf`c&%D)J@71 zCfJC*CpbJ2GJS=R^)R+<#=@!g9K_n3bZQr+nt=x^g~43W@(`zgOx&UirXHvr%E0R) zY<UTqS@dPnc1>1W%uIgczBt{H7~OayOzy~TcoAO8r!}c#D2V>~W~dpBZlr1Jt9{#+ zGB#CUDTa1Dowdg?r^alcs{O?-e6f2Yh0yHq>E-d`)8+tKd@xn*Kpwgo{{S`XX8Zyf zJjC8r8$Y+Ld-_iIWT{gNXW>CwCHQK*otx7M+R)uP-}fn~aH8mQa+Y;vxw!#Z(>42P zzQ;f8&3plueY_UZ{22q@tRPgfg_NU*0XhHpg&b@Y84flYHNUcX7MZR!p)9-K*<THx zg7X=NBgYHN6bJobxty6nWah}!3EuWE5*D5f>4`%5`s>M0v9>CPo}~mG!sFXs;f6P< zJ9$-9i}mp3xTCjdYJZ2mr~D<@&aKLL)k4mYutGBF=gfyuOrcP~5d!L*U01Hg>@60S zYy|Af7sxnCU|;)p60Y}fAqOiZF4bxw-$D8$&mTEA+dXn_e|F^D@Re#$>OyNQGq~8p zv9+tVZ@5%X7^qe@Umje(|Lb3;f43fa?jf98zD;%I!nikP%_0}WL7cyw3m2*mSInr& zV_d6#uRLp2ott%3l$N7deiLV!x%6g)h)JGKKpZSrJI#C^JYB)yaI@zmxvXqHl35;$ zmB%EIkvNCha~PstrA7#hiCFPdV&z;p!E|}d8Fx)Hn6cF*RkYr`C?vRR>-K4s`ts#9 z!!E!Ttx(Q8S_Pw3TLQw~Y9+?ncdg`8wQ|FyE<2kmn>oxfV?D!4;J`@sS5r9N$XQ{z zE_I({k+H4h=s~KlB#SCk`Awy6oyJz>`;<zswFQJzII8-txV6f|sD#HG547t$9b>aS zXvFJaxy{y2yr`4U<@I>i+W*Z32hlziPOz6}#iU-e8m8nWlyW$Y$31ltu2Ek=3apLY zsn|U@b`Ozj{P=zHGHiKahN$-q`qV=FKFu&Fw-Ep2PvCSP^C#b<eAlk_!nz9Sg`sm+ z;nd&G<uc`RxJdpp$>c$JR;C%vv8IZDQ}v)J=Cy0VAW~y1QrR@>q=F5{J#1vFwsuh# zyxQ;%OE5zU5$p=com(3;6f5WRv7YU3JT5Xt*F-R@zIumQ?NUC171aDq(j2ROs~2&l z&?INAs>O|;rl6)sz8+8Qn|POR<V{e)R&D&G^PD$%c<ol#;+#gBdLMsy1~9Bpnu)h~ zf$NWr)k#+Uxdlm3$`z|Dw!!@KIHVz_wXENy;or2^^Hv{>_PT0yg}=);qQ`S2i+r*U znVDvLtG*7}_!<X3Z{u?XZaVPAt4jo4IJug?7f+rxeVzkfF*yyOvH3Vg3bV=|COG~l z>-$hXH0&=O3Z|bF`>O>$PD?&815Y25eDw06!ySrJ?c?LX<l{U(m?ogG44ED=&Dyr1 zB{dNqKxN9<8lJ{nsNTEmk$)gmgJ~>)*z3Z_0bKuP{N<sXH{z;s{k42|Fi`cpsb{4D zm2+;YZk^&0r=fg2PK})78mlw8iN$deNxFH=*R`C>L%x7G2nWd?6Qfd|ozmg{e8lXP zV4-zyc#67}ab2;tR&|gRuEG6)j^7(!##icg3?i*N#mgP(1W7tU@ASq;pbI~^tXIOx zR`SK^YDZW&kqXKx$T3i5^G*Jy-~SzL9?s3>r*!R$I4g%3YCeG>Z&o98ZCyJHL4M6Z z!6D^?{O0Hv8k-BzZ*j_n=pmeTyi`%gx1kWPDRHZb$Ya#$c2T)B<LAVYT=Fw#(ryQ+ zzmB?wtZ#JauI@&gpQ2uRa?5-=U-%j%bjS|=V)#1#^yZ6kLyo$JL~&_+Rh4VfAfBt_ z;jI;Ed0?H$`hQQZdi>$yn_Ss?Pp(?qe4N&4pF!JQ7`t=*`hK*Z;_d6VuXwem<f`Xv zya39%>IIvRL#$;s@v*mGuKMha(}eNlj14-p;nav4GGQ+#i8c&_!@7OUCn?_xokCad zRPvmLv`|VE%7S#d?bO@ZbhmVC+@zz))dN>=${{va=E{@gyRi8<t!Dg?ADuL#8Hawq z!#}NANv^tV<2U&r-bQw9WTt;@9|x^on5)(|zSVtfyh$N<+sBh8H|MIelZQ={nGO|V zs?4w=F}vXs3g=aOXEl;BE_7&}(<dvi1LSchiN;I@n>q0QeZUta@MMtcj2AMnGXi%~ zoBjq926CtlIsHZXtpiSf9B&Z59)_(C&57}5VKpWXkL5x9m|uI$Q~&r8wXpYga7{4P zYJ#i4#42xBo-+AyLi_o6XoAVhbJc?;AESz`)tZiVTo0S-iEDM@O>;|BdudX0o%yC7 zlX{7Z`()L*EACnIs(<<@K>MhHl@{?psw~k_#U3lIzpA6UJi>R?<+}4~)l{`JD?v{@ z%gEU*qjnTqRmP!KA1EgwVU6!v=rul))N=<*&l{fSPZnCrOe#m!4U>>ua73bzn23vW zJC9^1_l(9<h@8z%n7NU^%J|uS_y%|cb4&HflYw77z+UiibBWJVC#&YlusAX9keoWA zqd^xY+Q@gj#@m!Z6Nj;okB6!tCFz+2qzcAtJg&jcny$ShXG}cNovUu(CMOqZujCs2 zN5<8Xn_CsGJfHIr=JVUQH(xz*^=uy5a$vr^@iq#bPsGc9#3=JSIQ|uJrw`&!zPij= zLUMfQ{OCt5+N#aRNuPZwzh5AP-px<0esAH2(Z>8I<C5q`8BC^sXdf4^UX`z&y7Bi$ zCVmc8It>$s%()I@@{(y5<cWC2<i+{w7H4xgjtE(U&TN!B{R;kcv`c>?zPe%hxqWT= z*OCQ6IBd+|h3jH>y>lz^;K&xHc3Yv*Ada_6mp&A<+EKacMfza&8PpE;8rzd*NJqM9 zZj*S8-wMx|L_PbkIOUC<DRXyMN6OU`mDC0$#pateaimzM52xLCC*xNVsoDu1**mz} z63$$yxp(p164S95dXJPGCx+f4Z$~=QHvrm)7;0M329|&(5H%ALHIph{T Y&J)pB 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 VYl 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 literal 389120 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⁡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%0Dsb$VZc+OKv4p1&Mt!j(2b3w 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 diff --git a/FineUI/bin/Release/Newtonsoft.Json.xml b/FineUI/bin/Release/Newtonsoft.Json.xml index 6d5ae2c..f75ed9b 100644 --- a/FineUI/bin/Release/Newtonsoft.Json.xml +++ b/FineUI/bin/Release/Newtonsoft.Json.xml @@ -1,8181 +1,8968 @@ -<?xml version="1.0"?> -<doc> - <assembly> - <name>Newtonsoft.Json</name> - </assembly> - <members> - <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> - <summary> - Represents a BSON Oid (object id). - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. - </summary> - <param name="value">The Oid value.</param> - </member> - <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> - <summary> - Gets or sets the value of the Oid. - </summary> - <value>The value of the Oid.</value> - </member> - <member name="T:Newtonsoft.Json.Bson.BsonReader"> - <summary> - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonReader"> - <summary> - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonReader.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonReader.Read"> - <summary> - Reads the next JSON token from the stream. - </summary> - <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.String"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. - </summary> - <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonReader.Skip"> - <summary> - Skips the children of the current token. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> - <summary> - Sets the current token. - </summary> - <param name="newToken">The new token.</param> - </member> - <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> - <summary> - Sets the current token and value. - </summary> - <param name="newToken">The new token.</param> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> - <summary> - Sets the state based on current token type. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> - <summary> - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> - <summary> - Releases unmanaged and - optionally - managed resources - </summary> - <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - </member> - <member name="M:Newtonsoft.Json.JsonReader.Close"> - <summary> - Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> - <summary> - Gets the current reader state. - </summary> - <value>The current reader state.</value> - </member> - <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> - <summary> - Gets or sets a value indicating whether the underlying stream or - <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. - </summary> - <value> - true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when - the reader is closed; otherwise false. The default is true. - </value> - </member> - <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> - <summary> - Gets the quotation mark character used to enclose the value of a string. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> - <summary> - Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> - <summary> - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> - <summary> - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.TokenType"> - <summary> - Gets the type of the current JSON token. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.Value"> - <summary> - Gets the text value of the current JSON token. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.ValueType"> - <summary> - Gets The Common Language Runtime (CLR) type for the current JSON token. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.Depth"> - <summary> - Gets the depth of the current token in the JSON document. - </summary> - <value>The depth of the current token in the JSON document.</value> - </member> - <member name="P:Newtonsoft.Json.JsonReader.Path"> - <summary> - Gets the path of the current JSON token. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonReader.Culture"> - <summary> - Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonReader.State"> - <summary> - Specifies the state of the reader. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Start"> - <summary> - The Read method has not been called. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> - <summary> - The end of the file has been reached successfully. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Property"> - <summary> - Reader is at a property. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> - <summary> - Reader is at the start of an object. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Object"> - <summary> - Reader is in an object. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> - <summary> - Reader is at the start of an array. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Array"> - <summary> - Reader is in an array. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> - <summary> - The Close method has been called. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> - <summary> - Reader has just read a value. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> - <summary> - Reader is at the start of a constructor. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> - <summary> - Reader in a constructor. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Error"> - <summary> - An error occurred that prevents the read operation from continuing. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> - <summary> - The end of the file has been reached successfully. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. - </summary> - <param name="stream">The stream.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. - </summary> - <param name="reader">The reader.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. - </summary> - <param name="stream">The stream.</param> - <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> - <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. - </summary> - <param name="reader">The reader.</param> - <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> - <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. - </summary> - <returns> - A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. - </returns> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.String"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> - <summary> - Reads the next JSON token from the stream. - </summary> - <returns> - true if the next token was read successfully; false if there are no more tokens to read. - </returns> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> - <summary> - Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. - </summary> - </member> - <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> - <summary> - Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. - </summary> - <value> - <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> - <summary> - Gets or sets a value indicating whether the root object will be read as a JSON array. - </summary> - <value> - <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> - <summary> - Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. - </summary> - <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> - </member> - <member name="T:Newtonsoft.Json.Bson.BsonWriter"> - <summary> - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonWriter"> - <summary> - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> - <summary> - Creates an instance of the <c>JsonWriter</c> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.Flush"> - <summary> - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.Close"> - <summary> - Closes this stream and the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> - <summary> - Writes the beginning of a Json object. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> - <summary> - Writes the end of a Json object. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> - <summary> - Writes the beginning of a Json array. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> - <summary> - Writes the end of an array. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> - <summary> - Writes the start of a constructor with the given name. - </summary> - <param name="name">The name of the constructor.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> - <summary> - Writes the end constructor. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> - <summary> - Writes the property name of a name/value pair on a Json object. - </summary> - <param name="name">The name of the property.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> - <summary> - Writes the end of the current Json object or array. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> - <summary> - Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> - <summary> - Writes the specified end token. - </summary> - <param name="token">The end token to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> - <summary> - Writes indent characters. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> - <summary> - Writes the JSON value delimiter. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> - <summary> - Writes an indent space. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> - <summary> - Writes a null value. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> - <summary> - Writes an undefined value. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> - <summary> - Writes raw JSON without changing the writer's state. - </summary> - <param name="json">The raw JSON to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> - <summary> - Writes raw JSON where a value is expected and updates the writer's state. - </summary> - <param name="json">The raw JSON to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> - <summary> - Writes a <see cref="T:System.String"/> value. - </summary> - <param name="value">The <see cref="T:System.String"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> - <summary> - Writes a <see cref="T:System.Int32"/> value. - </summary> - <param name="value">The <see cref="T:System.Int32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> - <summary> - Writes a <see cref="T:System.UInt32"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> - <summary> - Writes a <see cref="T:System.Int64"/> value. - </summary> - <param name="value">The <see cref="T:System.Int64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> - <summary> - Writes a <see cref="T:System.UInt64"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> - <summary> - Writes a <see cref="T:System.Single"/> value. - </summary> - <param name="value">The <see cref="T:System.Single"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> - <summary> - Writes a <see cref="T:System.Double"/> value. - </summary> - <param name="value">The <see cref="T:System.Double"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> - <summary> - Writes a <see cref="T:System.Boolean"/> value. - </summary> - <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> - <summary> - Writes a <see cref="T:System.Int16"/> value. - </summary> - <param name="value">The <see cref="T:System.Int16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> - <summary> - Writes a <see cref="T:System.UInt16"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> - <summary> - Writes a <see cref="T:System.Char"/> value. - </summary> - <param name="value">The <see cref="T:System.Char"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> - <summary> - Writes a <see cref="T:System.Byte"/> value. - </summary> - <param name="value">The <see cref="T:System.Byte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> - <summary> - Writes a <see cref="T:System.SByte"/> value. - </summary> - <param name="value">The <see cref="T:System.SByte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> - <summary> - Writes a <see cref="T:System.Decimal"/> value. - </summary> - <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> - <summary> - Writes a <see cref="T:System.DateTime"/> value. - </summary> - <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> - <summary> - Writes a <see cref="T:System.Guid"/> value. - </summary> - <param name="value">The <see cref="T:System.Guid"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> - <summary> - Writes a <see cref="T:System.TimeSpan"/> value. - </summary> - <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> - <summary> - Writes a <see cref="T:System.Nullable`1"/> value. - </summary> - <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> - <summary> - Writes a <see cref="T:Byte[]"/> value. - </summary> - <param name="value">The <see cref="T:Byte[]"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> - <summary> - Writes a <see cref="T:System.Uri"/> value. - </summary> - <param name="value">The <see cref="T:System.Uri"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> - <summary> - Writes a <see cref="T:System.Object"/> value. - An error will raised if the value cannot be written as a single JSON token. - </summary> - <param name="value">The <see cref="T:System.Object"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> - <summary> - Writes out a comment <code>/*...*/</code> containing the specified text. - </summary> - <param name="text">Text to place inside the comment.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> - <summary> - Writes out the given white space. - </summary> - <param name="ws">The string of white space characters.</param> - </member> - <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> - <summary> - Gets or sets a value indicating whether the underlying stream or - <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. - </summary> - <value> - true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when - the writer is closed; otherwise false. The default is true. - </value> - </member> - <member name="P:Newtonsoft.Json.JsonWriter.Top"> - <summary> - Gets the top. - </summary> - <value>The top.</value> - </member> - <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> - <summary> - Gets the state of the writer. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonWriter.Path"> - <summary> - Gets the path of the writer. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> - <summary> - Indicates how JSON text output is formatted. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> - <summary> - Get or set how dates are written to JSON text. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> - <summary> - Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. - </summary> - <param name="stream">The stream.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. - </summary> - <param name="writer">The writer.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> - <summary> - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> - <summary> - Writes the end. - </summary> - <param name="token">The token.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> - <summary> - Writes out a comment <code>/*...*/</code> containing the specified text. - </summary> - <param name="text">Text to place inside the comment.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> - <summary> - Writes the start of a constructor with the given name. - </summary> - <param name="name">The name of the constructor.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> - <summary> - Writes raw JSON. - </summary> - <param name="json">The raw JSON to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> - <summary> - Writes raw JSON where a value is expected and updates the writer's state. - </summary> - <param name="json">The raw JSON to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> - <summary> - Writes the beginning of a Json array. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> - <summary> - Writes the beginning of a Json object. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> - <summary> - Writes the property name of a name/value pair on a Json object. - </summary> - <param name="name">The name of the property.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> - <summary> - Closes this stream and the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> - <summary> - Writes a null value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> - <summary> - Writes an undefined value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> - <summary> - Writes a <see cref="T:System.String"/> value. - </summary> - <param name="value">The <see cref="T:System.String"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> - <summary> - Writes a <see cref="T:System.Int32"/> value. - </summary> - <param name="value">The <see cref="T:System.Int32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> - <summary> - Writes a <see cref="T:System.UInt32"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> - <summary> - Writes a <see cref="T:System.Int64"/> value. - </summary> - <param name="value">The <see cref="T:System.Int64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> - <summary> - Writes a <see cref="T:System.UInt64"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> - <summary> - Writes a <see cref="T:System.Single"/> value. - </summary> - <param name="value">The <see cref="T:System.Single"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> - <summary> - Writes a <see cref="T:System.Double"/> value. - </summary> - <param name="value">The <see cref="T:System.Double"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> - <summary> - Writes a <see cref="T:System.Boolean"/> value. - </summary> - <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> - <summary> - Writes a <see cref="T:System.Int16"/> value. - </summary> - <param name="value">The <see cref="T:System.Int16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> - <summary> - Writes a <see cref="T:System.UInt16"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> - <summary> - Writes a <see cref="T:System.Char"/> value. - </summary> - <param name="value">The <see cref="T:System.Char"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> - <summary> - Writes a <see cref="T:System.Byte"/> value. - </summary> - <param name="value">The <see cref="T:System.Byte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> - <summary> - Writes a <see cref="T:System.SByte"/> value. - </summary> - <param name="value">The <see cref="T:System.SByte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> - <summary> - Writes a <see cref="T:System.Decimal"/> value. - </summary> - <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> - <summary> - Writes a <see cref="T:System.DateTime"/> value. - </summary> - <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> - <summary> - Writes a <see cref="T:Byte[]"/> value. - </summary> - <param name="value">The <see cref="T:Byte[]"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> - <summary> - Writes a <see cref="T:System.Guid"/> value. - </summary> - <param name="value">The <see cref="T:System.Guid"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> - <summary> - Writes a <see cref="T:System.TimeSpan"/> value. - </summary> - <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> - <summary> - Writes a <see cref="T:System.Uri"/> value. - </summary> - <param name="value">The <see cref="T:System.Uri"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> - <summary> - Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. - </summary> - <param name="value"></param> - </member> - <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> - <summary> - Writes a BSON regex. - </summary> - <param name="pattern">The regex pattern.</param> - <param name="options">The regex options.</param> - </member> - <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> - <summary> - Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. - When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. - </summary> - <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> - </member> - <member name="T:Newtonsoft.Json.ConstructorHandling"> - <summary> - Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> - <summary> - First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. - </summary> - </member> - <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> - <summary> - Json.NET will use a non-public default constructor before falling back to a paramatized constructor. - </summary> - </member> - <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> - <summary> - Converts a binary value to and from a base 64 string value. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonConverter"> - <summary> - Converts an object to and from JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. - </summary> - <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> - </member> - <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> - <summary> - Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. - </summary> - <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> - </member> - <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> - <summary> - Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. - </summary> - <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> - </member> - <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> - <summary> - Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> - <summary> - Create a custom object - </summary> - <typeparam name="T"></typeparam> - </member> - <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> - <summary> - Creates an object which will then be populated by the serializer. - </summary> - <param name="objectType">Type of the object.</param> - <returns></returns> - </member> - <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> - <summary> - Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. - </summary> - <value> - <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. - </value> - </member> - <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> - <summary> - Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified value type. - </summary> - <param name="valueType">Type of the value.</param> - <returns> - <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> - <summary> - Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified value type. - </summary> - <param name="valueType">Type of the value.</param> - <returns> - <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> - <summary> - Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> - <summary> - Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.Converters.RegexConverter"> - <summary> - Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> - <summary> - Converts an <see cref="T:System.Enum"/> to and from its name string value. - </summary> - <summary> - Converts an <see cref="T:System.Enum"/> to and from its name string value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.GetEnumNameMap(System.Type)"> - <summary> - A cached representation of the Enum string representation to respect per Enum field name. - </summary> - <param name="t">The type of the Enum.</param> - <returns>A map of enum field name to either the field name, or the configured enum member name (<see cref="!:EnumMemberAttribute"/>).</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> - <summary> - Gets or sets a value indicating whether the written enum text should be camel case. - </summary> - <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> - </member> - <member name="T:Newtonsoft.Json.Converters.VersionConverter"> - <summary> - Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing property value of the JSON that is being converted.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified object type. - </summary> - <param name="objectType">Type of the object.</param> - <returns> - <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. - </returns> - </member> - <member name="T:Newtonsoft.Json.DateFormatHandling"> - <summary> - Specifies how dates are formatted when writing JSON text. - </summary> - </member> - <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> - <summary> - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - </summary> - </member> - <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> - <summary> - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - </summary> - </member> - <member name="T:Newtonsoft.Json.DateParseHandling"> - <summary> - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - </summary> - </member> - <member name="F:Newtonsoft.Json.DateParseHandling.None"> - <summary> - Date formatted strings are not parsed to a date type and are read as strings. - </summary> - </member> - <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> - <summary> - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> - <summary> - Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> - <summary> - Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. - </summary> - </member> - <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> - <summary> - Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. - </summary> - </member> - <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> - <summary> - Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. - If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. - </summary> - </member> - <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> - <summary> - Time zone information should be preserved when converting. - </summary> - </member> - <member name="T:Newtonsoft.Json.Formatting"> - <summary> - Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.Formatting.None"> - <summary> - No special formatting is applied. This is the default. - </summary> - </member> - <member name="F:Newtonsoft.Json.Formatting.Indented"> - <summary> - Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonContainerAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. - </summary> - <param name="id">The container Id.</param> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> - <summary> - Gets or sets the id. - </summary> - <value>The id.</value> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> - <summary> - Gets or sets the title. - </summary> - <value>The title.</value> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> - <summary> - Gets or sets the description. - </summary> - <value>The description.</value> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> - <summary> - Gets the collection's items converter. - </summary> - <value>The collection's items converter.</value> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> - <summary> - Gets or sets a value that indicates whether to preserve object references. - </summary> - <value> - <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> - <summary> - Gets or sets a value that indicates whether to preserve collection's items references. - </summary> - <value> - <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> - <summary> - Gets or sets the reference loop handling used when serializing the collection's items. - </summary> - <value>The reference loop handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> - <summary> - Gets or sets the type name handling used when serializing the collection's items. - </summary> - <value>The type name handling.</value> - </member> - <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. - </summary> - <param name="id">The container Id.</param> - </member> - <member name="T:Newtonsoft.Json.JsonException"> - <summary> - The exception thrown when an error occurs during Json serialization or deserialization. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonException.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class - with a specified error message. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - </member> - <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class - with a specified error message and a reference to the inner exception that is the cause of this exception. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> - </member> - <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. - </summary> - <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> - <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> - <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> - <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> - <summary> - Gets the underlying type for the contract. - </summary> - <value>The underlying type for the contract.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> - <summary> - Gets or sets the type created during deserialization. - </summary> - <value>The type created during deserialization.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> - <summary> - Gets or sets whether this type contract is serialized as a reference. - </summary> - <value>Whether this type contract is serialized as a reference.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> - <summary> - Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. - </summary> - <value>The converter.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> - <summary> - Gets or sets the method called immediately after deserialization of the object. - </summary> - <value>The method called immediately after deserialization of the object.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> - <summary> - Gets or sets the method called during deserialization of the object. - </summary> - <value>The method called during deserialization of the object.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> - <summary> - Gets or sets the method called after serialization of the object graph. - </summary> - <value>The method called after serialization of the object graph.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> - <summary> - Gets or sets the method called before serialization of the object. - </summary> - <value>The method called before serialization of the object.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> - <summary> - Gets or sets the default creator method used to create the object. - </summary> - <value>The default creator method used to create the object.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> - <summary> - Gets or sets a value indicating whether the default creator is non public. - </summary> - <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> - <summary> - Gets or sets the method called when an error is thrown during the serialization of the object. - </summary> - <value>The method called when an error is thrown during the serialization of the object.</value> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> - <summary> - Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. - </summary> - <value>The converter.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> - <summary> - Gets or sets a value indicating whether the collection items preserve object references. - </summary> - <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> - <summary> - Gets or sets the collection item reference loop handling. - </summary> - <value>The reference loop handling.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> - <summary> - Gets or sets the collection item type name handling. - </summary> - <value>The type name handling.</value> - </member> - <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Enumerable"> - <summary> - Provides a set of static (Shared in Visual Basic) methods for - querying objects that implement <see cref="T:System.Collections.Generic.IEnumerable`1"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.AsEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the input typed as <see cref="T:System.Collections.Generic.IEnumerable`1"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Empty``1"> - <summary> - Returns an empty <see cref="T:System.Collections.Generic.IEnumerable`1"/> that has the - specified type argument. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Cast``1(System.Collections.IEnumerable)"> - <summary> - Converts the elements of an <see cref="T:System.Collections.IEnumerable"/> to the - specified type. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OfType``1(System.Collections.IEnumerable)"> - <summary> - Filters the elements of an <see cref="T:System.Collections.IEnumerable"/> based on a specified type. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Range(System.Int32,System.Int32)"> - <summary> - Generates a sequence of integral numbers within a specified range. - </summary> - <param name="start">The value of the first integer in the sequence.</param> - <param name="count">The number of sequential integers to generate.</param> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Repeat``1(``0,System.Int32)"> - <summary> - Generates a sequence that contains one repeated value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Filters a sequence of values based on a predicate. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> - <summary> - Filters a sequence of values based on a predicate. - Each element's index is used in the logic of the predicate function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Projects each element of a sequence into a new form. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,``1})"> - <summary> - Projects each element of a sequence into a new form by - incorporating the element's index. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}})"> - <summary> - Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/> - and flattens the resulting sequences into one sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}})"> - <summary> - Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, - and flattens the resulting sequences into one sequence. The - index of each source element is used in the projected form of - that element. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> - <summary> - Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, - flattens the resulting sequences into one sequence, and invokes - a result selector function on each element therein. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> - <summary> - Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, - flattens the resulting sequences into one sequence, and invokes - a result selector function on each element therein. The index of - each source element is used in the intermediate projected form - of that element. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns elements from a sequence as long as a specified condition is true. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> - <summary> - Returns elements from a sequence as long as a specified condition is true. - The element's index is used in the logic of the predicate function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> - <summary> - Base implementation of First operator. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the first element of a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns the first element in a sequence that satisfies a specified condition. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the first element of a sequence, or a default value if - the sequence contains no elements. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns the first element of the sequence that satisfies a - condition or a default value if no such element is found. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> - <summary> - Base implementation of Last operator. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the last element of a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns the last element of a sequence that satisfies a - specified condition. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the last element of a sequence, or a default value if - the sequence contains no elements. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns the last element of a sequence that satisfies a - condition or a default value if no such element is found. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> - <summary> - Base implementation of Single operator. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the only element of a sequence, and throws an exception - if there is not exactly one element in the sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns the only element of a sequence that satisfies a - specified condition, and throws an exception if more than one - such element exists. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the only element of a sequence, or a default value if - the sequence is empty; this method throws an exception if there - is more than one element in the sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns the only element of a sequence that satisfies a - specified condition or a default value if no such element - exists; this method throws an exception if more than one element - satisfies the condition. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAt``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> - <summary> - Returns the element at a specified index in a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAtOrDefault``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> - <summary> - Returns the element at a specified index in a sequence or a - default value if the index is out of range. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Reverse``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Inverts the order of the elements in a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Take``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> - <summary> - Returns a specified number of contiguous elements from the start - of a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Skip``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> - <summary> - Bypasses a specified number of elements in a sequence and then - returns the remaining elements. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Bypasses elements in a sequence as long as a specified condition - is true and then returns the remaining elements. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> - <summary> - Bypasses elements in a sequence as long as a specified condition - is true and then returns the remaining elements. The element's - index is used in the logic of the predicate function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the number of elements in a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns a number that represents how many elements in the - specified sequence satisfy a condition. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns an <see cref="T:System.Int64"/> that represents the total number - of elements in a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Returns an <see cref="T:System.Int64"/> that represents how many elements - in a sequence satisfy a condition. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Concat``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> - <summary> - Concatenates two sequences. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToList``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Creates a <see cref="T:System.Collections.Generic.List`1"/> from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToArray``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Creates an array from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns distinct elements from a sequence by using the default - equality comparer to compare values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> - <summary> - Returns distinct elements from a sequence by using a specified - <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key - selector function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key - selector function and a key comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key - and element selector functions. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key - selector function, a comparer and an element selector function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Groups the elements of a sequence according to a specified key - selector function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Groups the elements of a sequence according to a specified key - selector function and compares the keys by using a specified - comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> - <summary> - Groups the elements of a sequence according to a specified key - selector function and projects the elements for each group by - using a specified function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2})"> - <summary> - Groups the elements of a sequence according to a key selector - function. The keys are compared by using a comparer and each - group's elements are projected by using a specified function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. The elements of each group are projected by using a - specified function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3})"> - <summary> - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. The keys are compared by using a specified comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Groups the elements of a sequence according to a specified key - selector function and creates a result value from each group and - its key. Key values are compared by using a specified comparer, - and the elements of each group are projected by using a - specified function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,``0})"> - <summary> - Applies an accumulator function over a sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``2(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1})"> - <summary> - Applies an accumulator function over a sequence. The specified - seed value is used as the initial accumulator value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``3(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1},Newtonsoft.Json.Serialization.Func{``1,``2})"> - <summary> - Applies an accumulator function over a sequence. The specified - seed value is used as the initial accumulator value, and the - specified function is used to select the result value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> - <summary> - Produces the set union of two sequences by using the default - equality comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> - <summary> - Produces the set union of two sequences by using a specified - <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the elements of the specified sequence or the type - parameter's default value in a singleton collection if the - sequence is empty. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0},``0)"> - <summary> - Returns the elements of the specified sequence or the specified - value in a singleton collection if the sequence is empty. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.All``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Determines whether all elements of a sequence satisfy a condition. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Determines whether a sequence contains any elements. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> - <summary> - Determines whether any element of a sequence satisfies a - condition. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0)"> - <summary> - Determines whether a sequence contains a specified element by - using the default equality comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> - <summary> - Determines whether a sequence contains a specified element by - using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> - <summary> - Determines whether two sequences are equal by comparing the - elements by using the default equality comparer for their type. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> - <summary> - Determines whether two sequences are equal by comparing their - elements by using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,System.Boolean})"> - <summary> - Base implementation for Min/Max operator. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{System.Nullable{``0}},System.Nullable{``0},Newtonsoft.Json.Serialization.Func{System.Nullable{``0},System.Nullable{``0},System.Boolean})"> - <summary> - Base implementation for Min/Max operator for nullable types. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the minimum value in a generic sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Invokes a transform function on each element of a generic - sequence and returns the minimum resulting value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the maximum value in a generic sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Invokes a transform function on each element of a generic - sequence and returns the maximum resulting value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Renumerable``1(System.Collections.Generic.IEnumerator{``0})"> - <summary> - Makes an enumerator seen as enumerable once more. - </summary> - <remarks> - The supplied enumerator must have been started. The first element - returned is the element the enumerator was on when passed in. - DO NOT use this method if the caller must be a generator. It is - mostly safe among aggregate operations. - </remarks> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Sorts the elements of a sequence in ascending order according to a key. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> - <summary> - Sorts the elements of a sequence in ascending order by using a - specified comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Sorts the elements of a sequence in descending order according to a key. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> - <summary> - Sorts the elements of a sequence in descending order by using a - specified comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Performs a subsequent ordering of the elements in a sequence in - ascending order according to a key. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> - <summary> - Performs a subsequent ordering of the elements in a sequence in - ascending order by using a specified comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Performs a subsequent ordering of the elements in a sequence in - descending order, according to a key. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> - <summary> - Performs a subsequent ordering of the elements in a sequence in - descending order by using a specified comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.IntersectExceptImpl``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0},System.Boolean)"> - <summary> - Base implementation for Intersect and Except operators. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> - <summary> - Produces the set intersection of two sequences by using the - default equality comparer to compare values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> - <summary> - Produces the set intersection of two sequences by using the - specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> - <summary> - Produces the set difference of two sequences by using the - default equality comparer to compare values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> - <summary> - Produces the set difference of two sequences by using the - specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> - <summary> - Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key - selector function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key - selector function and key comparer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> - <summary> - Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key - selector and element selector functions. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> - <summary> - Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an - <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key - selector function, a comparer, and an element selector function. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3})"> - <summary> - Correlates the elements of two sequences based on matching keys. - The default equality comparer is used to compare keys. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3},System.Collections.Generic.IEqualityComparer{``2})"> - <summary> - Correlates the elements of two sequences based on matching keys. - The default equality comparer is used to compare keys. A - specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> is used to compare keys. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3})"> - <summary> - Correlates the elements of two sequences based on equality of - keys and groups the results. The default equality comparer is - used to compare keys. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3},System.Collections.Generic.IEqualityComparer{``2})"> - <summary> - Correlates the elements of two sequences based on equality of - keys and groups the results. The default equality comparer is - used to compare keys. A specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> - is used to compare keys. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int32})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int32})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Int32"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Int32"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Int32"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Int32"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> - <summary> - Returns the minimum value in a sequence of nullable - <see cref="T:System.Int32"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the minimum nullable <see cref="T:System.Int32"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> - <summary> - Returns the maximum value in a sequence of nullable - <see cref="T:System.Int32"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the maximum nullable <see cref="T:System.Int32"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int64})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int64})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Int64"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Int64"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Int64"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Int64"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> - <summary> - Returns the minimum value in a sequence of nullable - <see cref="T:System.Int64"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the minimum nullable <see cref="T:System.Int64"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> - <summary> - Returns the maximum value in a sequence of nullable - <see cref="T:System.Int64"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the maximum nullable <see cref="T:System.Int64"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Single})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Single"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Single"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Single})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Single"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Single"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Single"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Single"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Single"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Single"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> - <summary> - Returns the minimum value in a sequence of nullable - <see cref="T:System.Single"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the minimum nullable <see cref="T:System.Single"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> - <summary> - Returns the maximum value in a sequence of nullable - <see cref="T:System.Single"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the maximum nullable <see cref="T:System.Single"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Double})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Double"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Double"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Double})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Double"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Double"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Double"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Double"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Double"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Double"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> - <summary> - Returns the minimum value in a sequence of nullable - <see cref="T:System.Double"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the minimum nullable <see cref="T:System.Double"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> - <summary> - Returns the maximum value in a sequence of nullable - <see cref="T:System.Double"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the maximum nullable <see cref="T:System.Double"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Decimal})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> - <summary> - Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Decimal})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> - <summary> - Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Decimal"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> - <summary> - Computes the sum of a sequence of <see cref="T:System.Decimal"/> - values that are obtained by invoking a transform function on - each element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Decimal"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> - <summary> - Computes the average of a sequence of <see cref="T:System.Decimal"/> values - that are obtained by invoking a transform function on each - element of the input sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> - <summary> - Returns the minimum value in a sequence of nullable - <see cref="T:System.Decimal"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the minimum nullable <see cref="T:System.Decimal"/> value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> - <summary> - Returns the maximum value in a sequence of nullable - <see cref="T:System.Decimal"/> values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> - <summary> - Invokes a transform function on each element of a sequence and - returns the maximum nullable <see cref="T:System.Decimal"/> value. - </summary> - </member> - <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"> - <summary> - Represents a collection of objects that have a common key. - </summary> - </member> - <member name="P:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2.Key"> - <summary> - Gets the key of the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.Utilities.LinqBridge.ILookup`2"> - <summary> - Defines an indexer, size property, and Boolean search method for - data structures that map keys to <see cref="T:System.Collections.Generic.IEnumerable`1"/> - sequences of values. - </summary> - </member> - <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"> - <summary> - Represents a sorted sequence. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1.CreateOrderedEnumerable``1(Newtonsoft.Json.Serialization.Func{`0,``0},System.Collections.Generic.IComparer{``0},System.Boolean)"> - <summary> - Performs a subsequent ordering on the elements of an - <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"/> according to a key. - </summary> - </member> - <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"> - <summary> - Represents a collection of keys each mapped to one or more values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Contains(`0)"> - <summary> - Determines whether a specified key is in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.ApplyResultSelector``1(Newtonsoft.Json.Serialization.Func{`0,System.Collections.Generic.IEnumerable{`1},``0})"> - <summary> - Applies a transform function to each key and its associated - values and returns the results. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.GetEnumerator"> - <summary> - Returns a generic enumerator that iterates through the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. - </summary> - </member> - <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Count"> - <summary> - Gets the number of key/value collection pairs in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. - </summary> - </member> - <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Item(`0)"> - <summary> - Gets the collection of values indexed by the specified key. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.TagPosition(`0,System.Int32)"> - <remarks> - See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> - for why this method is needed and cannot be expressed as a - lambda at the call site. - </remarks> - </member> - <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.GetFirst(Newtonsoft.Json.Utilities.LinqBridge.Tuple{`0,System.Int32})"> - <remarks> - See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> - for why this method is needed and cannot be expressed as a - lambda at the call site. - </remarks> - </member> - <member name="T:System.Runtime.CompilerServices.ExtensionAttribute"> - <remarks> - This attribute allows us to define extension methods without - requiring .NET Framework 3.5. For more information, see the section, - <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx#S7">Extension Methods in .NET Framework 2.0 Apps</a>, - of <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx">Basic Instincts: Extension Methods</a> - column in <a href="http://msdn.microsoft.com/msdnmag/">MSDN Magazine</a>, - issue <a href="http://msdn.microsoft.com/en-us/magazine/cc135410.aspx">Nov 2007</a>. - </remarks> - </member> - <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> - <summary> - Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. - </summary> - <param name="name">The name.</param> - <param name="propertyType">Type of the property.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> - <summary> - When overridden in a derived class, returns whether resetting an object changes its value. - </summary> - <returns> - true if resetting the component changes its value; otherwise, false. - </returns> - <param name="component">The component to test for reset capability. - </param> - </member> - <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> - <summary> - When overridden in a derived class, gets the current value of the property on a component. - </summary> - <returns> - The value of a property for a given component. - </returns> - <param name="component">The component with the property for which to retrieve the value. - </param> - </member> - <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> - <summary> - When overridden in a derived class, resets the value for this property of the component to the default value. - </summary> - <param name="component">The component with the property value that is to be reset to the default value. - </param> - </member> - <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> - <summary> - When overridden in a derived class, sets the value of the component to a different value. - </summary> - <param name="component">The component with the property value that is to be set. - </param><param name="value">The new value. - </param> - </member> - <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> - <summary> - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - </summary> - <returns> - true if the property should be persisted; otherwise, false. - </returns> - <param name="component">The component with the property to be examined for persistence. - </param> - </member> - <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> - <summary> - When overridden in a derived class, gets the type of the component this property is bound to. - </summary> - <returns> - A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. - </returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> - <summary> - When overridden in a derived class, gets a value indicating whether this property is read-only. - </summary> - <returns> - true if the property is read-only; otherwise, false. - </returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> - <summary> - When overridden in a derived class, gets the type of the property. - </summary> - <returns> - A <see cref="T:System.Type"/> that represents the type of the property. - </returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> - <summary> - Gets the hash code for the name of the member. - </summary> - <value></value> - <returns> - The hash code for the name of the member. - </returns> - </member> - <member name="T:Newtonsoft.Json.Linq.JRaw"> - <summary> - Represents a raw JSON string. - </summary> - </member> - <member name="T:Newtonsoft.Json.Linq.JValue"> - <summary> - Represents a value in JSON (string, integer, date, etc). - </summary> - </member> - <member name="T:Newtonsoft.Json.Linq.JToken"> - <summary> - Represents an abstract JSON token. - </summary> - </member> - <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> - <summary> - Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. - </summary> - <typeparam name="T">The type of token</typeparam> - </member> - <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. - </summary> - <value></value> - </member> - <member name="T:Newtonsoft.Json.IJsonLineInfo"> - <summary> - Provides an interface to enable a class to return line and position information. - </summary> - </member> - <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> - <summary> - Gets a value indicating whether the class can return line information. - </summary> - <returns> - <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. - </returns> - </member> - <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> - <summary> - Gets the current line number. - </summary> - <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> - </member> - <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> - <summary> - Gets the current line position. - </summary> - <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> - <summary> - Compares the values of two tokens, including the values of all descendant tokens. - </summary> - <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> - <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> - <returns>true if the tokens are equal; otherwise false.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> - <summary> - Adds the specified content immediately after this token. - </summary> - <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> - <summary> - Adds the specified content immediately before this token. - </summary> - <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> - <summary> - Returns a collection of the ancestor tokens of this token. - </summary> - <returns>A collection of the ancestor tokens of this token.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> - <summary> - Returns a collection of the sibling tokens after this token, in document order. - </summary> - <returns>A collection of the sibling tokens after this tokens, in document order.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> - <summary> - Returns a collection of the sibling tokens before this token, in document order. - </summary> - <returns>A collection of the sibling tokens before this token, in document order.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. - </summary> - <typeparam name="T">The type to convert the token to.</typeparam> - <param name="key">The token key.</param> - <returns>The converted token value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Children"> - <summary> - Returns a collection of the child tokens of this token, in document order. - </summary> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> - <summary> - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - </summary> - <typeparam name="T">The type to filter the child tokens on.</typeparam> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> - <summary> - Returns a collection of the child values of this token, in document order. - </summary> - <typeparam name="T">The type to convert the values to.</typeparam> - <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> - <summary> - Removes this token from its parent. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> - <summary> - Replaces this token with the specified token. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> - <summary> - Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> - <summary> - Returns the indented JSON for this token. - </summary> - <returns> - The indented JSON for this token. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> - <summary> - Returns the JSON for this token using the given formatting and converters. - </summary> - <param name="formatting">Indicates how the output is formatted.</param> - <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> - <returns>The JSON for this token using the given formatting and converters.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> - <summary> - Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. - </summary> - <param name="value">The value.</param> - <returns>The result of the conversion.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> - <summary> - Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> - <summary> - Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. - </summary> - <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. - </summary> - <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> - <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> - <summary> - Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <returns>The new object created from the JSON value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> - <summary> - Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> - <returns>The new object created from the JSON value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> - <returns> - An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> - <summary> - Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. - </summary> - <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> - <returns> - An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> - <summary> - Selects the token that matches the object path. - </summary> - <param name="path"> - The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> - to be returned. This must be a string of property names or array indexes separated - by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or - <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. - </param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> - <summary> - Selects the token that matches the object path. - </summary> - <param name="path"> - The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> - to be returned. This must be a string of property names or array indexes separated - by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or - <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. - </param> - <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> - <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> - <summary> - Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. - </summary> - <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> - <summary> - Gets a comparer that can compare two tokens for value equality. - </summary> - <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> - <summary> - Gets or sets the parent. - </summary> - <value>The parent.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.Root"> - <summary> - Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.Type"> - <summary> - Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <value>The type.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> - <summary> - Gets a value indicating whether this token has childen tokens. - </summary> - <value> - <c>true</c> if this token has child values; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.Next"> - <summary> - Gets the next sibling token of this node. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> - <summary> - Gets the previous sibling token of this node. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.First"> - <summary> - Get the first child token of this token. - </summary> - <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JToken.Last"> - <summary> - Get the last child token of this token. - </summary> - <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. - </summary> - <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. - </summary> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. - </summary> - <param name="value">The value.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. - </summary> - <param name="value">The value.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> - <summary> - Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> - <summary> - Indicates whether the current object is equal to another object of the same type. - </summary> - <returns> - true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. - </returns> - <param name="other">An object to compare with this object.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> - <summary> - Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. - </summary> - <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> - <returns> - true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. - </returns> - <exception cref="T:System.NullReferenceException"> - The <paramref name="obj"/> parameter is null. - </exception> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> - <summary> - Serves as a hash function for a particular type. - </summary> - <returns> - A hash code for the current <see cref="T:System.Object"/>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> - <summary> - Returns a <see cref="T:System.String"/> that represents this instance. - </summary> - <returns> - A <see cref="T:System.String"/> that represents this instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> - <summary> - Returns a <see cref="T:System.String"/> that represents this instance. - </summary> - <param name="format">The format.</param> - <returns> - A <see cref="T:System.String"/> that represents this instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> - <summary> - Returns a <see cref="T:System.String"/> that represents this instance. - </summary> - <param name="formatProvider">The format provider.</param> - <returns> - A <see cref="T:System.String"/> that represents this instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> - <summary> - Returns a <see cref="T:System.String"/> that represents this instance. - </summary> - <param name="format">The format.</param> - <param name="formatProvider">The format provider.</param> - <returns> - A <see cref="T:System.String"/> that represents this instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> - <summary> - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - </summary> - <param name="obj">An object to compare with this instance.</param> - <returns> - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than <paramref name="obj"/>. - Zero - This instance is equal to <paramref name="obj"/>. - Greater than zero - This instance is greater than <paramref name="obj"/>. - </returns> - <exception cref="T:System.ArgumentException"> - <paramref name="obj"/> is not the same type as this instance. - </exception> - </member> - <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> - <summary> - Gets a value indicating whether this token has childen tokens. - </summary> - <value> - <c>true</c> if this token has child values; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Linq.JValue.Type"> - <summary> - Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <value>The type.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JValue.Value"> - <summary> - Gets or sets the underlying token value. - </summary> - <value>The underlying token value.</value> - </member> - <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. - </summary> - <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. - </summary> - <param name="rawJson">The raw json.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> - <summary> - Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. - </summary> - <param name="reader">The reader.</param> - <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> - </member> - <member name="T:Newtonsoft.Json.Required"> - <summary> - Indicating whether a property is required. - </summary> - </member> - <member name="F:Newtonsoft.Json.Required.Default"> - <summary> - The property is not required. The default state. - </summary> - </member> - <member name="F:Newtonsoft.Json.Required.AllowNull"> - <summary> - The property must be defined in JSON but can be a null value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Required.Always"> - <summary> - The property must be defined in JSON and cannot be a null value. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> - <summary> - Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> - <summary> - Resolves a reference to its object. - </summary> - <param name="context">The serialization context.</param> - <param name="reference">The reference to resolve.</param> - <returns>The object that</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> - <summary> - Gets the reference for the sepecified object. - </summary> - <param name="context">The serialization context.</param> - <param name="value">The object to get a reference for.</param> - <returns>The reference to the object.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> - <summary> - Determines whether the specified object is referenced. - </summary> - <param name="context">The serialization context.</param> - <param name="value">The object to test for a reference.</param> - <returns> - <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> - <summary> - Adds a reference to the specified object. - </summary> - <param name="context">The serialization context.</param> - <param name="reference">The reference.</param> - <param name="value">The object to reference.</param> - </member> - <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> - <summary> - Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> - <summary> - Do not preserve references when serializing types. - </summary> - </member> - <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> - <summary> - Preserve references when serializing into a JSON object structure. - </summary> - </member> - <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> - <summary> - Preserve references when serializing into a JSON array structure. - </summary> - </member> - <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> - <summary> - Preserve references when serializing. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonArrayAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items - </summary> - <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> - </member> - <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. - </summary> - <param name="id">The container Id.</param> - </member> - <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> - <summary> - Gets or sets a value indicating whether null items are allowed in the collection. - </summary> - <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> - </member> - <member name="T:Newtonsoft.Json.DefaultValueHandling"> - <summary> - Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> - <summary> - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - </summary> - </member> - <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> - <summary> - Ignore members where the member value is the same as the member's default value when serializing objects - so that is is not written to JSON, and ignores setting members when the JSON value equals the member's default value. - </summary> - </member> - <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> - <summary> - Members with a default value but no JSON will be set to their default value when deserializing. - </summary> - </member> - <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> - <summary> - Ignore members where the member value is the same as the member's default value when serializing objects - and sets members to their default value when deserializing. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonConverterAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. - </summary> - <param name="converterType">Type of the converter.</param> - </member> - <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> - <summary> - Gets the type of the converter. - </summary> - <value>The type of the converter.</value> - </member> - <member name="T:Newtonsoft.Json.JsonObjectAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. - </summary> - <param name="memberSerialization">The member serialization.</param> - </member> - <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. - </summary> - <param name="id">The container Id.</param> - </member> - <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> - <summary> - Gets or sets the member serialization. - </summary> - <value>The member serialization.</value> - </member> - <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> - <summary> - Gets or sets a value that indicates whether the object's properties are required. - </summary> - <value> - A value indicating whether the object's properties are required. - </value> - </member> - <member name="T:Newtonsoft.Json.JsonSerializerSettings"> - <summary> - Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> - <summary> - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - </summary> - <value>Reference loop handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> - <summary> - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - </summary> - <value>Missing member handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> - <summary> - Gets or sets how objects are created during deserialization. - </summary> - <value>The object creation handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> - <summary> - Gets or sets how null values are handled during serialization and deserialization. - </summary> - <value>Null value handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> - <summary> - Gets or sets how null default are handled during serialization and deserialization. - </summary> - <value>The default value handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> - <summary> - Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. - </summary> - <value>The converters.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> - <summary> - Gets or sets how object references are preserved by the serializer. - </summary> - <value>The preserve references handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> - <summary> - Gets or sets how type name writing and reading is handled by the serializer. - </summary> - <value>The type name handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> - <summary> - Gets or sets how a type name assembly is written and resolved by the serializer. - </summary> - <value>The type name assembly format.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> - <summary> - Gets or sets how constructors are used during deserialization. - </summary> - <value>The constructor handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> - <summary> - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - </summary> - <value>The contract resolver.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. - </summary> - <value>The reference resolver.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> - <summary> - Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. - </summary> - <value>The binder.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> - <summary> - Gets or sets the error handler called during serialization and deserialization. - </summary> - <value>The error handler called during serialization and deserialization.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> - <summary> - Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. - </summary> - <value>The context.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> - <summary> - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> - <summary> - Indicates how JSON text output is formatted. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> - <summary> - Get or set how dates are written to JSON text. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> - <summary> - Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> - <summary> - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> - <summary> - Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonValidatingReader"> - <summary> - Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that - validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> - </member> - <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. - </summary> - <returns> - A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. - </returns> - </member> - <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.String"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> - <summary> - Reads the next JSON token from the stream. - </summary> - <returns> - true if the next token was read successfully; false if there are no more tokens to read. - </returns> - </member> - <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> - <summary> - Sets an event handler for receiving schema validation errors. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> - <summary> - Gets the text value of the current Json token. - </summary> - <value></value> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> - <summary> - Gets the depth of the current token in the JSON document. - </summary> - <value>The depth of the current token in the JSON document.</value> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> - <summary> - Gets the path of the current JSON token. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> - <summary> - Gets the quotation mark character used to enclose the value of a string. - </summary> - <value></value> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> - <summary> - Gets the type of the current Json token. - </summary> - <value></value> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> - <summary> - Gets the Common Language Runtime (CLR) type for the current Json token. - </summary> - <value></value> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> - <summary> - Gets or sets the schema. - </summary> - <value>The schema.</value> - </member> - <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. - </summary> - <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> - </member> - <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> - <summary> - Compares tokens to determine whether they are equal. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> - <summary> - Determines whether the specified objects are equal. - </summary> - <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> - <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> - <returns> - true if the specified objects are equal; otherwise, false. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> - <summary> - Returns a hash code for the specified object. - </summary> - <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> - <returns>A hash code for the specified object.</returns> - <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> - </member> - <member name="T:Newtonsoft.Json.MemberSerialization"> - <summary> - Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> - <summary> - All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. - This is the default member serialization mode. - </summary> - </member> - <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> - <summary> - Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="!:DataMemberAttribute"/> are serialized. - This member serialization mode can also be set by marking the class with <see cref="!:DataContractAttribute"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> - <summary> - All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. - This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> - and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. - </summary> - </member> - <member name="T:Newtonsoft.Json.ObjectCreationHandling"> - <summary> - Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> - <summary> - Reuse existing objects, create new objects when needed. - </summary> - </member> - <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> - <summary> - Only reuse existing objects. - </summary> - </member> - <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> - <summary> - Always create new objects. - </summary> - </member> - <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> - <summary> - Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> - <summary> - Gets or sets the date time styles used when converting a date to and from JSON. - </summary> - <value>The date time styles used when converting a date to and from JSON.</value> - </member> - <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> - <summary> - Gets or sets the date time format used when converting a date to and from JSON. - </summary> - <value>The date time format used when converting a date to and from JSON.</value> - </member> - <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> - <summary> - Gets or sets the culture used when converting a date to and from JSON. - </summary> - <value>The culture used when converting a date to and from JSON.</value> - </member> - <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> - <summary> - Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="value">The value.</param> - <param name="serializer">The calling serializer.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing property value of the JSON that is being converted.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> - <summary> - Converts XML to and from JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Writes the JSON representation of the object. - </summary> - <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> - <param name="serializer">The calling serializer.</param> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Reads the JSON representation of the object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> - <param name="objectType">Type of the object.</param> - <param name="existingValue">The existing value of object being read.</param> - <param name="serializer">The calling serializer.</param> - <returns>The object value.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> - <summary> - Checks if the attributeName is a namespace attribute. - </summary> - <param name="attributeName">Attribute name to test.</param> - <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> - <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> - </member> - <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> - <summary> - Determines whether this instance can convert the specified value type. - </summary> - <param name="valueType">Type of the value.</param> - <returns> - <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. - </returns> - </member> - <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> - <summary> - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. - </summary> - <value>The name of the deserialize root element.</value> - </member> - <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> - <summary> - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - </summary> - <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> - </member> - <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> - <summary> - Gets or sets a value indicating whether to write the root JSON object. - </summary> - <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> - </member> - <member name="T:Newtonsoft.Json.JsonTextReader"> - <summary> - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. - </summary> - <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.Read"> - <summary> - Reads the next JSON token from the stream. - </summary> - <returns> - true if the next token was read successfully; false if there are no more tokens to read. - </returns> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. - </summary> - <returns> - A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. - </returns> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.String"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.Close"> - <summary> - Changes the state to closed. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> - <summary> - Gets a value indicating whether the class can return line information. - </summary> - <returns> - <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. - </returns> - </member> - <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> - <summary> - Gets the current line number. - </summary> - <value> - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - </value> - </member> - <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> - <summary> - Gets the current line position. - </summary> - <value> - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - </value> - </member> - <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. - </summary> - <param name="propertyName">Name of the property.</param> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> - <summary> - Gets or sets the converter used when serializing the property's collection items. - </summary> - <value>The collection's items converter.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> - <summary> - Gets or sets the null value handling used when serializing this property. - </summary> - <value>The null value handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> - <summary> - Gets or sets the default value handling used when serializing this property. - </summary> - <value>The default value handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> - <summary> - Gets or sets the reference loop handling used when serializing this property. - </summary> - <value>The reference loop handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> - <summary> - Gets or sets the object creation handling used when deserializing this property. - </summary> - <value>The object creation handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> - <summary> - Gets or sets the type name handling used when serializing this property. - </summary> - <value>The type name handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> - <summary> - Gets or sets whether this property's value is serialized as a reference. - </summary> - <value>Whether this property's value is serialized as a reference.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> - <summary> - Gets or sets the order of serialization and deserialization of a member. - </summary> - <value>The numeric order of serialization or deserialization.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> - <summary> - Gets or sets a value indicating whether this property is required. - </summary> - <value> - A value indicating whether this property is required. - </value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> - <summary> - Gets or sets the name of the property. - </summary> - <value>The name of the property.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> - <summary> - Gets or sets the the reference loop handling used when serializing the property's collection items. - </summary> - <value>The collection's items reference loop handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> - <summary> - Gets or sets the the type name handling used when serializing the property's collection items. - </summary> - <value>The collection's items type name handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> - <summary> - Gets or sets whether this property's collection items are serialized as a reference. - </summary> - <value>Whether this property's collection items are serialized as a reference.</value> - </member> - <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> - <summary> - Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonTextWriter"> - <summary> - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> - <summary> - Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. - </summary> - <param name="textWriter">The <c>TextWriter</c> to write to.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> - <summary> - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> - <summary> - Closes this stream and the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> - <summary> - Writes the beginning of a Json object. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> - <summary> - Writes the beginning of a Json array. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> - <summary> - Writes the start of a constructor with the given name. - </summary> - <param name="name">The name of the constructor.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> - <summary> - Writes the specified end token. - </summary> - <param name="token">The end token to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> - <summary> - Writes the property name of a name/value pair on a Json object. - </summary> - <param name="name">The name of the property.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> - <summary> - Writes indent characters. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> - <summary> - Writes the JSON value delimiter. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> - <summary> - Writes an indent space. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> - <summary> - Writes a null value. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> - <summary> - Writes an undefined value. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> - <summary> - Writes raw JSON. - </summary> - <param name="json">The raw JSON to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> - <summary> - Writes a <see cref="T:System.String"/> value. - </summary> - <param name="value">The <see cref="T:System.String"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> - <summary> - Writes a <see cref="T:System.Int32"/> value. - </summary> - <param name="value">The <see cref="T:System.Int32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> - <summary> - Writes a <see cref="T:System.UInt32"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> - <summary> - Writes a <see cref="T:System.Int64"/> value. - </summary> - <param name="value">The <see cref="T:System.Int64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> - <summary> - Writes a <see cref="T:System.UInt64"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> - <summary> - Writes a <see cref="T:System.Single"/> value. - </summary> - <param name="value">The <see cref="T:System.Single"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> - <summary> - Writes a <see cref="T:System.Double"/> value. - </summary> - <param name="value">The <see cref="T:System.Double"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> - <summary> - Writes a <see cref="T:System.Boolean"/> value. - </summary> - <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> - <summary> - Writes a <see cref="T:System.Int16"/> value. - </summary> - <param name="value">The <see cref="T:System.Int16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> - <summary> - Writes a <see cref="T:System.UInt16"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> - <summary> - Writes a <see cref="T:System.Char"/> value. - </summary> - <param name="value">The <see cref="T:System.Char"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> - <summary> - Writes a <see cref="T:System.Byte"/> value. - </summary> - <param name="value">The <see cref="T:System.Byte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> - <summary> - Writes a <see cref="T:System.SByte"/> value. - </summary> - <param name="value">The <see cref="T:System.SByte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> - <summary> - Writes a <see cref="T:System.Decimal"/> value. - </summary> - <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> - <summary> - Writes a <see cref="T:System.DateTime"/> value. - </summary> - <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> - <summary> - Writes a <see cref="T:Byte[]"/> value. - </summary> - <param name="value">The <see cref="T:Byte[]"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> - <summary> - Writes a <see cref="T:System.Guid"/> value. - </summary> - <param name="value">The <see cref="T:System.Guid"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> - <summary> - Writes a <see cref="T:System.TimeSpan"/> value. - </summary> - <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> - <summary> - Writes a <see cref="T:System.Uri"/> value. - </summary> - <param name="value">The <see cref="T:System.Uri"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> - <summary> - Writes out a comment <code>/*...*/</code> containing the specified text. - </summary> - <param name="text">Text to place inside the comment.</param> - </member> - <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> - <summary> - Writes out the given white space. - </summary> - <param name="ws">The string of white space characters.</param> - </member> - <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> - <summary> - Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> - <summary> - Gets or sets which character to use to quote attribute values. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> - <summary> - Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> - <summary> - Gets or sets a value indicating whether object names will be surrounded with quotes. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonWriterException"> - <summary> - The exception thrown when an error occurs while reading Json text. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class - with a specified error message. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class - with a specified error message and a reference to the inner exception that is the cause of this exception. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> - </member> - <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. - </summary> - <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> - <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> - <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> - <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> - </member> - <member name="P:Newtonsoft.Json.JsonWriterException.Path"> - <summary> - Gets the path to the JSON where the error occurred. - </summary> - <value>The path to the JSON where the error occurred.</value> - </member> - <member name="T:Newtonsoft.Json.JsonReaderException"> - <summary> - The exception thrown when an error occurs while reading Json text. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class - with a specified error message. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - </member> - <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class - with a specified error message and a reference to the inner exception that is the cause of this exception. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> - </member> - <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. - </summary> - <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> - <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> - <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> - <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> - </member> - <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> - <summary> - Gets the line number indicating where the error occurred. - </summary> - <value>The line number indicating where the error occurred.</value> - </member> - <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> - <summary> - Gets the line position indicating where the error occurred. - </summary> - <value>The line position indicating where the error occurred.</value> - </member> - <member name="P:Newtonsoft.Json.JsonReaderException.Path"> - <summary> - Gets the path to the JSON where the error occurred. - </summary> - <value>The path to the JSON where the error occurred.</value> - </member> - <member name="T:Newtonsoft.Json.JsonConverterCollection"> - <summary> - Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.JsonConvert"> - <summary> - Provides methods for converting between common language runtime types and JSON types. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonConvert.True"> - <summary> - Represents JavaScript's boolean value true as a string. This field is read-only. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonConvert.False"> - <summary> - Represents JavaScript's boolean value false as a string. This field is read-only. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonConvert.Null"> - <summary> - Represents JavaScript's null as a string. This field is read-only. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> - <summary> - Represents JavaScript's undefined as a string. This field is read-only. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> - <summary> - Represents JavaScript's positive infinity as a string. This field is read-only. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> - <summary> - Represents JavaScript's negative infinity as a string. This field is read-only. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonConvert.NaN"> - <summary> - Represents JavaScript's NaN as a string. This field is read-only. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> - <summary> - Converts the <see cref="T:System.DateTime"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> - <summary> - Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. - </summary> - <param name="value">The value to convert.</param> - <param name="format">The format the date will be converted to.</param> - <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> - <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> - <summary> - Converts the <see cref="T:System.Boolean"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> - <summary> - Converts the <see cref="T:System.Char"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> - <summary> - Converts the <see cref="T:System.Enum"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> - <summary> - Converts the <see cref="T:System.Int32"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> - <summary> - Converts the <see cref="T:System.Int16"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> - <summary> - Converts the <see cref="T:System.UInt16"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> - <summary> - Converts the <see cref="T:System.UInt32"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> - <summary> - Converts the <see cref="T:System.Int64"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> - <summary> - Converts the <see cref="T:System.UInt64"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> - <summary> - Converts the <see cref="T:System.Single"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> - <summary> - Converts the <see cref="T:System.Double"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> - <summary> - Converts the <see cref="T:System.Byte"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> - <summary> - Converts the <see cref="T:System.SByte"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> - <summary> - Converts the <see cref="T:System.Decimal"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> - <summary> - Converts the <see cref="T:System.Guid"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> - <summary> - Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> - <summary> - Converts the <see cref="T:System.Uri"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> - <summary> - Converts the <see cref="T:System.String"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> - <summary> - Converts the <see cref="T:System.String"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <param name="delimter">The string delimiter character.</param> - <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> - <summary> - Converts the <see cref="T:System.Object"/> to its JSON string representation. - </summary> - <param name="value">The value to convert.</param> - <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> - <summary> - Serializes the specified object to a JSON string. - </summary> - <param name="value">The object to serialize.</param> - <returns>A JSON string representation of the object.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> - <summary> - Serializes the specified object to a JSON string. - </summary> - <param name="value">The object to serialize.</param> - <param name="formatting">Indicates how the output is formatted.</param> - <returns> - A JSON string representation of the object. - </returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> - <summary> - Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. - </summary> - <param name="value">The object to serialize.</param> - <param name="converters">A collection converters used while serializing.</param> - <returns>A JSON string representation of the object.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> - <summary> - Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. - </summary> - <param name="value">The object to serialize.</param> - <param name="formatting">Indicates how the output is formatted.</param> - <param name="converters">A collection converters used while serializing.</param> - <returns>A JSON string representation of the object.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> - <summary> - Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. - </summary> - <param name="value">The object to serialize.</param> - <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. - If this is null, default serialization settings will be is used.</param> - <returns> - A JSON string representation of the object. - </returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> - <summary> - Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. - </summary> - <param name="value">The object to serialize.</param> - <param name="formatting">Indicates how the output is formatted.</param> - <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. - If this is null, default serialization settings will be is used.</param> - <returns> - A JSON string representation of the object. - </returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> - <summary> - Deserializes the JSON to a .NET object. - </summary> - <param name="value">The JSON to deserialize.</param> - <returns>The deserialized object from the Json string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> - <summary> - Deserializes the JSON to a .NET object. - </summary> - <param name="value">The JSON to deserialize.</param> - <param name="settings"> - The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. - If this is null, default serialization settings will be is used. - </param> - <returns>The deserialized object from the JSON string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> - <summary> - Deserializes the JSON to the specified .NET type. - </summary> - <param name="value">The JSON to deserialize.</param> - <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> - <returns>The deserialized object from the Json string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> - <summary> - Deserializes the JSON to the specified .NET type. - </summary> - <typeparam name="T">The type of the object to deserialize to.</typeparam> - <param name="value">The JSON to deserialize.</param> - <returns>The deserialized object from the Json string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> - <summary> - Deserializes the JSON to the given anonymous type. - </summary> - <typeparam name="T"> - The anonymous type to deserialize to. This can't be specified - traditionally and must be infered from the anonymous type passed - as a parameter. - </typeparam> - <param name="value">The JSON to deserialize.</param> - <param name="anonymousTypeObject">The anonymous type object.</param> - <returns>The deserialized anonymous type from the JSON string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> - <summary> - Deserializes the JSON to the specified .NET type. - </summary> - <typeparam name="T">The type of the object to deserialize to.</typeparam> - <param name="value">The JSON to deserialize.</param> - <param name="converters">Converters to use while deserializing.</param> - <returns>The deserialized object from the JSON string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> - <summary> - Deserializes the JSON to the specified .NET type. - </summary> - <typeparam name="T">The type of the object to deserialize to.</typeparam> - <param name="value">The object to deserialize.</param> - <param name="settings"> - The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. - If this is null, default serialization settings will be is used. - </param> - <returns>The deserialized object from the JSON string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> - <summary> - Deserializes the JSON to the specified .NET type. - </summary> - <param name="value">The JSON to deserialize.</param> - <param name="type">The type of the object to deserialize.</param> - <param name="converters">Converters to use while deserializing.</param> - <returns>The deserialized object from the JSON string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> - <summary> - Deserializes the JSON to the specified .NET type. - </summary> - <param name="value">The JSON to deserialize.</param> - <param name="type">The type of the object to deserialize to.</param> - <param name="settings"> - The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. - If this is null, default serialization settings will be is used. - </param> - <returns>The deserialized object from the JSON string.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> - <summary> - Populates the object with values from the JSON string. - </summary> - <param name="value">The JSON to populate values from.</param> - <param name="target">The target object to populate values onto.</param> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> - <summary> - Populates the object with values from the JSON string. - </summary> - <param name="value">The JSON to populate values from.</param> - <param name="target">The target object to populate values onto.</param> - <param name="settings"> - The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. - If this is null, default serialization settings will be is used. - </param> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> - <summary> - Serializes the XML node to a JSON string. - </summary> - <param name="node">The node to serialize.</param> - <returns>A JSON string of the XmlNode.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> - <summary> - Serializes the XML node to a JSON string. - </summary> - <param name="node">The node to serialize.</param> - <param name="formatting">Indicates how the output is formatted.</param> - <returns>A JSON string of the XmlNode.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> - <summary> - Serializes the XML node to a JSON string. - </summary> - <param name="node">The node to serialize.</param> - <param name="formatting">Indicates how the output is formatted.</param> - <param name="omitRootObject">Omits writing the root object.</param> - <returns>A JSON string of the XmlNode.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> - <summary> - Deserializes the XmlNode from a JSON string. - </summary> - <param name="value">The JSON string.</param> - <returns>The deserialized XmlNode</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> - <summary> - Deserializes the XmlNode from a JSON string nested in a root elment. - </summary> - <param name="value">The JSON string.</param> - <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> - <returns>The deserialized XmlNode</returns> - </member> - <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> - <summary> - Deserializes the XmlNode from a JSON string nested in a root elment. - </summary> - <param name="value">The JSON string.</param> - <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> - <param name="writeArrayAttribute"> - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - </param> - <returns>The deserialized XmlNode</returns> - </member> - <member name="T:Newtonsoft.Json.JsonSerializationException"> - <summary> - The exception thrown when an error occurs during Json serialization or deserialization. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class - with a specified error message. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - </member> - <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class - with a specified error message and a reference to the inner exception that is the cause of this exception. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> - </member> - <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. - </summary> - <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> - <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> - <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> - <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> - </member> - <member name="T:Newtonsoft.Json.JsonSerializer"> - <summary> - Serializes and deserializes objects into and from the JSON format. - The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> - <summary> - Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. - </summary> - <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> - <returns>A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> - <summary> - Populates the JSON values onto the target object. - </summary> - <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> - <param name="target">The target object to populate values onto.</param> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> - <summary> - Populates the JSON values onto the target object. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> - <param name="target">The target object to populate values onto.</param> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> - <summary> - Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> - <returns>The <see cref="T:System.Object"/> being deserialized.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> - <summary> - Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> - into an instance of the specified type. - </summary> - <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> - <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> - <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> - <summary> - Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> - into an instance of the specified type. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> - <typeparam name="T">The type of the object to deserialize.</typeparam> - <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> - <summary> - Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> - into an instance of the specified type. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> - <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> - <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> - <summary> - Serializes the specified <see cref="T:System.Object"/> and writes the Json structure - to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. - </summary> - <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> - <param name="value">The <see cref="T:System.Object"/> to serialize.</param> - </member> - <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> - <summary> - Serializes the specified <see cref="T:System.Object"/> and writes the Json structure - to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> - <param name="value">The <see cref="T:System.Object"/> to serialize.</param> - </member> - <member name="E:Newtonsoft.Json.JsonSerializer.Error"> - <summary> - Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> - <summary> - Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> - <summary> - Gets or sets how type name writing and reading is handled by the serializer. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> - <summary> - Gets or sets how a type name assembly is written and resolved by the serializer. - </summary> - <value>The type name assembly format.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> - <summary> - Gets or sets how object references are preserved by the serializer. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> - <summary> - Get or set how reference loops (e.g. a class referencing itself) is handled. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> - <summary> - Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> - <summary> - Get or set how null values are handled during serialization and deserialization. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> - <summary> - Get or set how null default are handled during serialization and deserialization. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> - <summary> - Gets or sets how objects are created during deserialization. - </summary> - <value>The object creation handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> - <summary> - Gets or sets how constructors are used during deserialization. - </summary> - <value>The constructor handling.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> - <summary> - Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. - </summary> - <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> - <summary> - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.Context"> - <summary> - Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. - </summary> - <value>The context.</value> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> - <summary> - Indicates how JSON text output is formatted. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> - <summary> - Get or set how dates are written to JSON text. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> - <summary> - Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> - <summary> - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> - <summary> - Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. - </summary> - </member> - <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> - <summary> - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.Linq.Extensions"> - <summary> - Contains the LINQ to JSON extension methods. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns a collection of tokens that contains the ancestors of every token in the source collection. - </summary> - <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns a collection of tokens that contains the descendants of every token in the source collection. - </summary> - <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> - <summary> - Returns a collection of child properties of every object in the source collection. - </summary> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> - <summary> - Returns a collection of child values of every object in the source collection with the given key. - </summary> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <param name="key">The token key.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> - <summary> - Returns a collection of child values of every object in the source collection. - </summary> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> - <summary> - Returns a collection of converted child values of every object in the source collection with the given key. - </summary> - <typeparam name="U">The type to convert the values to.</typeparam> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <param name="key">The token key.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> - <summary> - Returns a collection of converted child values of every object in the source collection. - </summary> - <typeparam name="U">The type to convert the values to.</typeparam> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> - <summary> - Converts the value. - </summary> - <typeparam name="U">The type to convert the value to.</typeparam> - <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> - <returns>A converted value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Converts the value. - </summary> - <typeparam name="T">The source collection type.</typeparam> - <typeparam name="U">The type to convert the value to.</typeparam> - <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> - <returns>A converted value.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns a collection of child tokens of every array in the source collection. - </summary> - <typeparam name="T">The source collection type.</typeparam> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns a collection of converted child tokens of every array in the source collection. - </summary> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <typeparam name="U">The type to convert the values to.</typeparam> - <typeparam name="T">The source collection type.</typeparam> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> - <summary> - Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. - </summary> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> - <summary> - Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. - </summary> - <typeparam name="T">The source collection type.</typeparam> - <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> - <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> - </member> - <member name="T:Newtonsoft.Json.Linq.JConstructor"> - <summary> - Represents a JSON constructor. - </summary> - </member> - <member name="T:Newtonsoft.Json.Linq.JContainer"> - <summary> - Represents a token that can contain other tokens. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> - <summary> - Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. - </summary> - <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> - <summary> - Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. - </summary> - <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> - <summary> - Returns a collection of the child tokens of this token, in document order. - </summary> - <returns> - An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> - <summary> - Returns a collection of the child values of this token, in document order. - </summary> - <typeparam name="T">The type to convert the values to.</typeparam> - <returns> - A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> - <summary> - Returns a collection of the descendant tokens for this token in document order. - </summary> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> - <summary> - Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="content">The content to be added.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> - <summary> - Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="content">The content to be added.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> - <summary> - Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> - <summary> - Replaces the children nodes of this token with the specified content. - </summary> - <param name="content">The content.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> - <summary> - Removes the child nodes from this token. - </summary> - </member> - <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> - <summary> - Occurs when the list changes or an item in the list changes. - </summary> - </member> - <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> - <summary> - Occurs before an item is added to the collection. - </summary> - </member> - <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> - <summary> - Gets the container's children tokens. - </summary> - <value>The container's children tokens.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> - <summary> - Gets a value indicating whether this token has childen tokens. - </summary> - <value> - <c>true</c> if this token has child values; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Linq.JContainer.First"> - <summary> - Get the first child token of this token. - </summary> - <value> - A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </value> - </member> - <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> - <summary> - Get the last child token of this token. - </summary> - <value> - A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </value> - </member> - <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> - <summary> - Gets the count of child JSON tokens. - </summary> - <value>The count of child JSON tokens</value> - </member> - <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. - </summary> - <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. - </summary> - <param name="name">The constructor name.</param> - <param name="content">The contents of the constructor.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. - </summary> - <param name="name">The constructor name.</param> - <param name="content">The contents of the constructor.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. - </summary> - <param name="name">The constructor name.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> - <summary> - Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> - <summary> - Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> - <summary> - Gets the container's children tokens. - </summary> - <value>The container's children tokens.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> - <summary> - Gets or sets the name of this constructor. - </summary> - <value>The constructor name.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> - <summary> - Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <value>The type.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> - </member> - <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> - <summary> - Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. - </summary> - <typeparam name="T">The type of token</typeparam> - </member> - <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> - <summary> - An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. - </summary> - <param name="enumerable">The enumerable.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> - <summary> - Returns an enumerator that iterates through the collection. - </summary> - <returns> - A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> - <summary> - Returns an enumerator that iterates through a collection. - </summary> - <returns> - An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> - <summary> - Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. - </summary> - <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> - <returns> - <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> - <summary> - Returns a hash code for this instance. - </summary> - <returns> - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - </returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. - </summary> - <value></value> - </member> - <member name="T:Newtonsoft.Json.Linq.JObject"> - <summary> - Represents a JSON object. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. - </summary> - <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. - </summary> - <param name="content">The contents of the object.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. - </summary> - <param name="content">The contents of the object.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> - <summary> - Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. - </summary> - <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> - <summary> - Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. - </summary> - <param name="name">The property name.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> - <summary> - Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. - </summary> - <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> - <summary> - Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> - <summary> - Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. - </summary> - <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. - </summary> - <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. - </summary> - <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> - <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> - <summary> - Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> - <summary> - Adds the specified property name. - </summary> - <param name="propertyName">Name of the property.</param> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> - <summary> - Removes the property with the specified name. - </summary> - <param name="propertyName">Name of the property.</param> - <returns>true if item was successfully removed; otherwise, false.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> - <summary> - Tries the get value. - </summary> - <param name="propertyName">Name of the property.</param> - <param name="value">The value.</param> - <returns>true if a value was successfully retrieved; otherwise, false.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> - <summary> - Returns an enumerator that iterates through the collection. - </summary> - <returns> - A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> - <summary> - Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. - </summary> - <param name="propertyName">Name of the property.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> - <summary> - Returns the properties for this instance of a component. - </summary> - <returns> - A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> - <summary> - Returns the properties for this instance of a component using the attribute array as a filter. - </summary> - <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> - <returns> - A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> - <summary> - Returns a collection of custom attributes for this instance of a component. - </summary> - <returns> - An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> - <summary> - Returns the class name of this instance of a component. - </summary> - <returns> - The class name of the object, or null if the class does not have a name. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> - <summary> - Returns the name of this instance of a component. - </summary> - <returns> - The name of the object, or null if the object does not have a name. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> - <summary> - Returns a type converter for this instance of a component. - </summary> - <returns> - A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> - <summary> - Returns the default event for this instance of a component. - </summary> - <returns> - An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> - <summary> - Returns the default property for this instance of a component. - </summary> - <returns> - A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> - <summary> - Returns an editor of the specified type for this instance of a component. - </summary> - <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> - <returns> - An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> - <summary> - Returns the events for this instance of a component using the specified attribute array as a filter. - </summary> - <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> - <returns> - An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> - <summary> - Returns the events for this instance of a component. - </summary> - <returns> - An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> - <summary> - Returns an object that contains the property described by the specified property descriptor. - </summary> - <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> - <returns> - An <see cref="T:System.Object"/> that represents the owner of the specified property. - </returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> - <summary> - Gets the container's children tokens. - </summary> - <value>The container's children tokens.</value> - </member> - <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> - <summary> - Occurs when a property value changes. - </summary> - </member> - <member name="P:Newtonsoft.Json.Linq.JObject.Type"> - <summary> - Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <value>The type.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. - </summary> - <value></value> - </member> - <member name="T:Newtonsoft.Json.Linq.JArray"> - <summary> - Represents a JSON array. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. - </summary> - <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. - </summary> - <param name="content">The contents of the array.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. - </summary> - <param name="content">The contents of the array.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> - <summary> - Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> - <summary> - Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. - </summary> - <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. - </summary> - <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. - </summary> - <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> - <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> - <summary> - Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> - <summary> - Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. - </summary> - <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> - <returns> - The index of <paramref name="item"/> if found in the list; otherwise, -1. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> - <summary> - Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. - </summary> - <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> - <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> - <exception cref="T:System.ArgumentOutOfRangeException"> - <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> - <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> - <summary> - Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. - </summary> - <param name="index">The zero-based index of the item to remove.</param> - <exception cref="T:System.ArgumentOutOfRangeException"> - <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> - <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> - <summary> - Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. - </summary> - <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> - <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> - <summary> - Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. - </summary> - <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> - <summary> - Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. - </summary> - <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> - <returns> - true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> - <summary> - Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. - </summary> - <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> - <returns> - true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. - </returns> - <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> - </member> - <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> - <summary> - Gets the container's children tokens. - </summary> - <value>The container's children tokens.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JArray.Type"> - <summary> - Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <value>The type.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. - </summary> - <value></value> - </member> - <member name="T:Newtonsoft.Json.Linq.JTokenReader"> - <summary> - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. - </summary> - <param name="token">The token to read from.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. - </summary> - <returns> - A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. - </returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.String"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> - <summary> - Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. - </summary> - <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> - <summary> - Reads the next JSON token from the stream. - </summary> - <returns> - true if the next token was read successfully; false if there are no more tokens to read. - </returns> - </member> - <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> - <summary> - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. - </summary> - <param name="container">The container being written to.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> - <summary> - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> - <summary> - Closes this stream and the underlying stream. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> - <summary> - Writes the beginning of a Json object. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> - <summary> - Writes the beginning of a Json array. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> - <summary> - Writes the start of a constructor with the given name. - </summary> - <param name="name">The name of the constructor.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> - <summary> - Writes the end. - </summary> - <param name="token">The token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> - <summary> - Writes the property name of a name/value pair on a Json object. - </summary> - <param name="name">The name of the property.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> - <summary> - Writes a null value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> - <summary> - Writes an undefined value. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> - <summary> - Writes raw JSON. - </summary> - <param name="json">The raw JSON to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> - <summary> - Writes out a comment <code>/*...*/</code> containing the specified text. - </summary> - <param name="text">Text to place inside the comment.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> - <summary> - Writes a <see cref="T:System.String"/> value. - </summary> - <param name="value">The <see cref="T:System.String"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> - <summary> - Writes a <see cref="T:System.Int32"/> value. - </summary> - <param name="value">The <see cref="T:System.Int32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> - <summary> - Writes a <see cref="T:System.UInt32"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> - <summary> - Writes a <see cref="T:System.Int64"/> value. - </summary> - <param name="value">The <see cref="T:System.Int64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> - <summary> - Writes a <see cref="T:System.UInt64"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> - <summary> - Writes a <see cref="T:System.Single"/> value. - </summary> - <param name="value">The <see cref="T:System.Single"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> - <summary> - Writes a <see cref="T:System.Double"/> value. - </summary> - <param name="value">The <see cref="T:System.Double"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> - <summary> - Writes a <see cref="T:System.Boolean"/> value. - </summary> - <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> - <summary> - Writes a <see cref="T:System.Int16"/> value. - </summary> - <param name="value">The <see cref="T:System.Int16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> - <summary> - Writes a <see cref="T:System.UInt16"/> value. - </summary> - <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> - <summary> - Writes a <see cref="T:System.Char"/> value. - </summary> - <param name="value">The <see cref="T:System.Char"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> - <summary> - Writes a <see cref="T:System.Byte"/> value. - </summary> - <param name="value">The <see cref="T:System.Byte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> - <summary> - Writes a <see cref="T:System.SByte"/> value. - </summary> - <param name="value">The <see cref="T:System.SByte"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> - <summary> - Writes a <see cref="T:System.Decimal"/> value. - </summary> - <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> - <summary> - Writes a <see cref="T:System.DateTime"/> value. - </summary> - <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> - <summary> - Writes a <see cref="T:Byte[]"/> value. - </summary> - <param name="value">The <see cref="T:Byte[]"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> - <summary> - Writes a <see cref="T:System.TimeSpan"/> value. - </summary> - <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> - <summary> - Writes a <see cref="T:System.Guid"/> value. - </summary> - <param name="value">The <see cref="T:System.Guid"/> value to write.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> - <summary> - Writes a <see cref="T:System.Uri"/> value. - </summary> - <param name="value">The <see cref="T:System.Uri"/> value to write.</param> - </member> - <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> - <summary> - Gets the token being writen. - </summary> - <value>The token being writen.</value> - </member> - <member name="T:Newtonsoft.Json.Linq.JProperty"> - <summary> - Represents a JSON property. - </summary> - </member> - <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. - </summary> - <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. - </summary> - <param name="name">The property name.</param> - <param name="content">The property content.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. - </summary> - <param name="name">The property name.</param> - <param name="content">The property content.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> - <summary> - Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> - </member> - <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> - <summary> - Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> - <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> - </member> - <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> - <summary> - Gets the container's children tokens. - </summary> - <value>The container's children tokens.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> - <summary> - Gets the property name. - </summary> - <value>The property name.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> - <summary> - Gets or sets the property value. - </summary> - <value>The property value.</value> - </member> - <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> - <summary> - Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <value>The type.</value> - </member> - <member name="T:Newtonsoft.Json.Linq.JTokenType"> - <summary> - Specifies the type of token. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> - <summary> - No token type has been set. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> - <summary> - A JSON object. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> - <summary> - A JSON array. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> - <summary> - A JSON constructor. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> - <summary> - A JSON object property. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> - <summary> - A comment. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> - <summary> - An integer value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> - <summary> - A float value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> - <summary> - A string value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> - <summary> - A boolean value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> - <summary> - A null value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> - <summary> - An undefined value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> - <summary> - A date value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> - <summary> - A raw JSON value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> - <summary> - A collection of bytes value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> - <summary> - A Guid value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> - <summary> - A Uri value. - </summary> - </member> - <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> - <summary> - A TimeSpan value. - </summary> - </member> - <member name="T:Newtonsoft.Json.Schema.Extensions"> - <summary> - Contains the JSON schema extension methods. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> - <summary> - Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. - </summary> - <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> - <param name="schema">The schema to test with.</param> - <returns> - <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> - <summary> - Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. - </summary> - <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> - <param name="schema">The schema to test with.</param> - <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> - <returns> - <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> - <summary> - Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> - <param name="schema">The schema to test with.</param> - </member> - <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> - <summary> - Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. - </summary> - <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> - <param name="schema">The schema to test with.</param> - <param name="validationEventHandler">The validation event handler.</param> - </member> - <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> - <summary> - Returns detailed information about the schema exception. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class - with a specified error message. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class - with a specified error message and a reference to the inner exception that is the cause of this exception. - </summary> - <param name="message">The error message that explains the reason for the exception.</param> - <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. - </summary> - <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> - <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> - <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> - <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> - <summary> - Gets the line number indicating where the error occurred. - </summary> - <value>The line number indicating where the error occurred.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> - <summary> - Gets the line position indicating where the error occurred. - </summary> - <value>The line position indicating where the error occurred.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> - <summary> - Gets the path to the JSON where the error occurred. - </summary> - <value>The path to the JSON where the error occurred.</value> - </member> - <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> - <summary> - Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> - <summary> - Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified id. - </summary> - <param name="id">The id.</param> - <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified id.</returns> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> - <summary> - Gets or sets the loaded schemas. - </summary> - <value>The loaded schemas.</value> - </member> - <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> - <summary> - Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> - <summary> - Do not infer a schema Id. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> - <summary> - Use the .NET type name as the schema Id. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> - <summary> - Use the assembly qualified .NET type name as the schema Id. - </summary> - </member> - <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> - <summary> - Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. - </summary> - <value>The JsonSchemaException associated with the validation error.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> - <summary> - Gets the path of the JSON location where the validation error occurred. - </summary> - <value>The path of the JSON location where the validation error occurred.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> - <summary> - Gets the text description corresponding to the validation error. - </summary> - <value>The text description.</value> - </member> - <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> - <summary> - Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> - <summary> - Resolves member mappings for a type, camel casing property names. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> - <summary> - Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> - <summary> - Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> - <summary> - Resolves the contract for a given type. - </summary> - <param name="type">The type to resolve a contract for.</param> - <returns>The contract for a given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. - </summary> - <param name="shareCache"> - If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. - Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected - behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly - recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </param> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> - <summary> - Resolves the contract for a given type. - </summary> - <param name="type">The type to resolve a contract for.</param> - <returns>The contract for a given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> - <summary> - Gets the serializable members for the type. - </summary> - <param name="objectType">The type to get serializable members for.</param> - <returns>The serializable members for the type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> - <summary> - Creates the constructor parameters. - </summary> - <param name="constructor">The constructor to create properties for.</param> - <param name="memberProperties">The type's member properties.</param> - <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. - </summary> - <param name="matchingMemberProperty">The matching member property.</param> - <param name="parameterInfo">The constructor parameter.</param> - <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> - <summary> - Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. - </summary> - <param name="objectType">Type of the object.</param> - <returns></returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> - <summary> - Determines which contract type is created for the given type. - </summary> - <param name="objectType">Type of the object.</param> - <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> - <summary> - Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. - </summary> - <param name="type">The type to create properties for.</param> - /// <param name="memberSerialization">The member serialization mode for the type.</param> - <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> - <summary> - Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. - </summary> - <param name="member">The member.</param> - <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> - <summary> - Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. - </summary> - <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> - <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> - <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> - <summary> - Resolves the name of the property. - </summary> - <param name="propertyName">Name of the property.</param> - <returns>Name of the property.</returns> - </member> - <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> - <summary> - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - </summary> - <value> - <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> - <summary> - Gets or sets the default members search flags. - </summary> - <value>The default members search flags.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> - <summary> - Gets or sets a value indicating whether compiler generated members should be serialized. - </summary> - <value> - <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> - <summary> - Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. - </summary> - <value> - <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> - <summary> - Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. - </summary> - <value> - <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. - </value> - </member> - <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> - <summary> - Resolves the name of the property. - </summary> - <param name="propertyName">Name of the property.</param> - <returns>The property name camel cased.</returns> - </member> - <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> - <summary> - The default serialization binder used when resolving and loading classes from type names. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> - <summary> - When overridden in a derived class, controls the binding of a serialized object to a type. - </summary> - <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> - <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> - <returns> - The type of the object the formatter creates a new instance of. - </returns> - </member> - <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> - <summary> - Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> - <summary> - Provides methods to get and set values. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> - <summary> - Sets the value. - </summary> - <param name="target">The target to set the value on.</param> - <param name="value">The value to set on the target.</param> - </member> - <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> - <summary> - Gets the value. - </summary> - <param name="target">The target to get the value from.</param> - <returns>The value.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. - </summary> - <param name="memberInfo">The member info.</param> - </member> - <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> - <summary> - Sets the value. - </summary> - <param name="target">The target to set the value on.</param> - <param name="value">The value to set on the target.</param> - </member> - <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> - <summary> - Gets the value. - </summary> - <param name="target">The target to get the value from.</param> - <returns>The value.</returns> - </member> - <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> - <summary> - Provides information surrounding an error. - </summary> - </member> - <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> - <summary> - Gets or sets the error. - </summary> - <value>The error.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> - <summary> - Gets the original object that caused the error. - </summary> - <value>The original object that caused the error.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> - <summary> - Gets the member that caused the error. - </summary> - <value>The member that caused the error.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> - <summary> - Gets the path of the JSON location where the error occurred. - </summary> - <value>The path of the JSON location where the error occurred.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> - <summary> - Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. - </summary> - <value><c>true</c> if handled; otherwise, <c>false</c>.</value> - </member> - <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> - <summary> - Provides data for the Error event. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. - </summary> - <param name="currentObject">The current object.</param> - <param name="errorContext">The error context.</param> - </member> - <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> - <summary> - Gets the current object the error event is being raised against. - </summary> - <value>The current object the error event is being raised against.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> - <summary> - Gets the error context. - </summary> - <value>The error context.</value> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> - <summary> - Gets the <see cref="T:System.Type"/> of the collection items. - </summary> - <value>The <see cref="T:System.Type"/> of the collection items.</value> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> - <summary> - Gets or sets the property name resolver. - </summary> - <value>The property name resolver.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> - <summary> - Gets the <see cref="T:System.Type"/> of the dictionary keys. - </summary> - <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> - <summary> - Gets the <see cref="T:System.Type"/> of the dictionary values. - </summary> - <value>The <see cref="T:System.Type"/> of the dictionary values.</value> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> - <summary> - Gets or sets the ISerializable object constructor. - </summary> - <value>The ISerializable object constructor.</value> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> - <summary> - Maps a JSON property to a .NET member or constructor parameter. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> - <summary> - Returns a <see cref="T:System.String"/> that represents this instance. - </summary> - <returns> - A <see cref="T:System.String"/> that represents this instance. - </returns> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> - <summary> - Gets or sets the name of the property. - </summary> - <value>The name of the property.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> - <summary> - Gets or sets the type that declared this property. - </summary> - <value>The type that declared this property.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> - <summary> - Gets or sets the order of serialization and deserialization of a member. - </summary> - <value>The numeric order of serialization or deserialization.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> - <summary> - Gets or sets the name of the underlying member or parameter. - </summary> - <value>The name of the underlying member or parameter.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> - <summary> - Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> - <summary> - Gets or sets the type of the property. - </summary> - <value>The type of the property.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. - If set this converter takes presidence over the contract converter for the property type. - </summary> - <value>The converter.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> - <summary> - Gets the member converter. - </summary> - <value>The member converter.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> - <summary> - Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. - </summary> - <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> - <summary> - Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. - </summary> - <value><c>true</c> if readable; otherwise, <c>false</c>.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> - <summary> - Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. - </summary> - <value><c>true</c> if writable; otherwise, <c>false</c>.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> - <summary> - Gets the default value. - </summary> - <value>The default value.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> - <summary> - Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. - </summary> - <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> - <summary> - Gets a value indicating whether this property preserves object references. - </summary> - <value> - <c>true</c> if this instance is reference; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> - <summary> - Gets the property null value handling. - </summary> - <value>The null value handling.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> - <summary> - Gets the property default value handling. - </summary> - <value>The default value handling.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> - <summary> - Gets the property reference loop handling. - </summary> - <value>The reference loop handling.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> - <summary> - Gets the property object creation handling. - </summary> - <value>The object creation handling.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> - <summary> - Gets or sets the type name handling. - </summary> - <value>The type name handling.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> - <summary> - Gets or sets a predicate used to determine whether the property should be serialize. - </summary> - <value>A predicate used to determine whether the property should be serialize.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> - <summary> - Gets or sets a predicate used to determine whether the property should be serialized. - </summary> - <value>A predicate used to determine whether the property should be serialized.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> - <summary> - Gets or sets an action used to set whether the property has been deserialized. - </summary> - <value>An action used to set whether the property has been deserialized.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> - <summary> - Gets or sets the converter used when serializing the property's collection items. - </summary> - <value>The collection's items converter.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> - <summary> - Gets or sets whether this property's collection items are serialized as a reference. - </summary> - <value>Whether this property's collection items are serialized as a reference.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> - <summary> - Gets or sets the the type name handling used when serializing the property's collection items. - </summary> - <value>The collection's items type name handling.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> - <summary> - Gets or sets the the reference loop handling used when serializing the property's collection items. - </summary> - <value>The collection's items reference loop handling.</value> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> - <summary> - A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. - </summary> - <param name="type">The type.</param> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> - <summary> - When implemented in a derived class, extracts the key from the specified element. - </summary> - <param name="item">The element from which to extract the key.</param> - <returns>The key for the specified element.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> - <summary> - Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. - </summary> - <param name="property">The property to add to the collection.</param> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> - <summary> - Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. - First attempts to get an exact case match of propertyName and then - a case insensitive match. - </summary> - <param name="propertyName">Name of the property.</param> - <returns>A matching property if found.</returns> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> - <summary> - Gets a property by property name. - </summary> - <param name="propertyName">The name of the property to get.</param> - <param name="comparisonType">Type property name string comparison.</param> - <returns>A matching property if found.</returns> - </member> - <member name="T:Newtonsoft.Json.MissingMemberHandling"> - <summary> - Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> - <summary> - Ignore a missing member and do not attempt to deserialize it. - </summary> - </member> - <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> - <summary> - Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. - </summary> - </member> - <member name="T:Newtonsoft.Json.NullValueHandling"> - <summary> - Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.NullValueHandling.Include"> - <summary> - Include null values when serializing and deserializing objects. - </summary> - </member> - <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> - <summary> - Ignore null values when serializing and deserializing objects. - </summary> - </member> - <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> - <summary> - Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> - <summary> - Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. - </summary> - </member> - <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> - <summary> - Ignore loop references and do not serialize. - </summary> - </member> - <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> - <summary> - Serialize loop references. - </summary> - </member> - <member name="T:Newtonsoft.Json.Schema.JsonSchema"> - <summary> - An in-memory representation of a JSON Schema. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> - <summary> - Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> - <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> - <summary> - Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. - </summary> - <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> - <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> - <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> - <summary> - Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. - </summary> - <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> - <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> - <summary> - Parses the specified json. - </summary> - <param name="json">The json.</param> - <param name="resolver">The resolver.</param> - <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> - <summary> - Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> - <summary> - Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. - </summary> - <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> - <param name="resolver">The resolver used.</param> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> - <summary> - Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. - </summary> - <returns> - A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. - </returns> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> - <summary> - Gets or sets the id. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> - <summary> - Gets or sets the title. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> - <summary> - Gets or sets whether the object is required. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> - <summary> - Gets or sets whether the object is read only. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> - <summary> - Gets or sets whether the object is visible to users. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> - <summary> - Gets or sets whether the object is transient. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> - <summary> - Gets or sets the description of the object. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> - <summary> - Gets or sets the types of values allowed by the object. - </summary> - <value>The type.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> - <summary> - Gets or sets the pattern. - </summary> - <value>The pattern.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> - <summary> - Gets or sets the minimum length. - </summary> - <value>The minimum length.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> - <summary> - Gets or sets the maximum length. - </summary> - <value>The maximum length.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> - <summary> - Gets or sets a number that the value should be divisble by. - </summary> - <value>A number that the value should be divisble by.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> - <summary> - Gets or sets the minimum. - </summary> - <value>The minimum.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> - <summary> - Gets or sets the maximum. - </summary> - <value>The maximum.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> - <summary> - Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. - </summary> - <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> - <summary> - Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. - </summary> - <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> - <summary> - Gets or sets the minimum number of items. - </summary> - <value>The minimum number of items.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> - <summary> - Gets or sets the maximum number of items. - </summary> - <value>The maximum number of items.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> - <summary> - Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. - </summary> - <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> - <summary> - Gets or sets the pattern properties. - </summary> - <value>The pattern properties.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> - <summary> - Gets or sets a value indicating whether additional properties are allowed. - </summary> - <value> - <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. - </value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> - <summary> - Gets or sets the required property if this property is present. - </summary> - <value>The required property if this property is present.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Identity"> - <summary> - Gets or sets the identity. - </summary> - <value>The identity.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> - <summary> - Gets or sets the a collection of valid enum values allowed. - </summary> - <value>A collection of valid enum values allowed.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Options"> - <summary> - Gets or sets a collection of options. - </summary> - <value>A collection of options.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> - <summary> - Gets or sets disallowed types. - </summary> - <value>The disallow types.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> - <summary> - Gets or sets the default value. - </summary> - <value>The default value.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> - <summary> - Gets or sets the extend <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. - </summary> - <value>The extended <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>.</value> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> - <summary> - Gets or sets the format. - </summary> - <value>The format.</value> - </member> - <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> - <summary> - Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> - <summary> - Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. - </summary> - <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> - <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> - <summary> - Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. - </summary> - <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> - <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> - <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> - <summary> - Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. - </summary> - <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> - <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> - <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> - </member> - <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> - <summary> - Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. - </summary> - <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> - <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> - <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> - <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> - <summary> - Gets or sets how undefined schemas are handled by the serializer. - </summary> - </member> - <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> - <summary> - Gets or sets the contract resolver. - </summary> - <value>The contract resolver.</value> - </member> - <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> - <summary> - The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> - <summary> - No type specified. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> - <summary> - String type. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> - <summary> - Float type. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> - <summary> - Integer type. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> - <summary> - Boolean type. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> - <summary> - Object type. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> - <summary> - Array type. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> - <summary> - Null type. - </summary> - </member> - <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> - <summary> - Any type. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> - <summary> - Gets or sets the object member serialization. - </summary> - <value>The member object serialization.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> - <summary> - Gets or sets a value that indicates whether the object's properties are required. - </summary> - <value> - A value indicating whether the object's properties are required. - </value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> - <summary> - Gets the object's properties. - </summary> - <value>The object's properties.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> - <summary> - Gets the constructor parameters required for any non-default constructor - </summary> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> - <summary> - Gets or sets the override constructor used to create the object. - This is set when a constructor is marked up using the - JsonConstructor attribute. - </summary> - <value>The override constructor.</value> - </member> - <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> - <summary> - Gets or sets the parametrized constructor used to create the object. - </summary> - <value>The parametrized constructor.</value> - </member> - <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> - <summary> - Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. - </summary> - <param name="underlyingType">The underlying type for the contract.</param> - </member> - <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> - <summary> - Represents a method that constructs an object. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> - <summary> - When applied to a method, specifies that the method is called when an error occurs serializing an object. - </summary> - </member> - <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> - <summary> - Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. - </summary> - </member> - <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> - <summary> - Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. - </summary> - <param name="memberInfo">The member info.</param> - </member> - <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> - <summary> - Sets the value. - </summary> - <param name="target">The target to set the value on.</param> - <param name="value">The value to set on the target.</param> - </member> - <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> - <summary> - Gets the value. - </summary> - <param name="target">The target to get the value from.</param> - <returns>The value.</returns> - </member> - <member name="T:Newtonsoft.Json.TypeNameHandling"> - <summary> - Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.TypeNameHandling.None"> - <summary> - Do not include the .NET type name when serializing types. - </summary> - </member> - <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> - <summary> - Include the .NET type name when serializing into a JSON object structure. - </summary> - </member> - <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> - <summary> - Include the .NET type name when serializing into a JSON array structure. - </summary> - </member> - <member name="F:Newtonsoft.Json.TypeNameHandling.All"> - <summary> - Always include the .NET type name when serializing. - </summary> - </member> - <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> - <summary> - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> - <summary> - Converts the value to the specified type. - </summary> - <param name="initialValue">The value to convert.</param> - <param name="culture">The culture to use when converting.</param> - <param name="targetType">The type to convert the value to.</param> - <returns>The converted type.</returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> - <summary> - Converts the value to the specified type. - </summary> - <param name="initialValue">The value to convert.</param> - <param name="culture">The culture to use when converting.</param> - <param name="targetType">The type to convert the value to.</param> - <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> - <returns> - <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> - <summary> - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - </summary> - <param name="initialValue">The value to convert.</param> - <param name="culture">The culture to use when converting.</param> - <param name="targetType">The type to convert or cast the value to.</param> - <returns> - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> - <summary> - Gets a dictionary of the names and values of an Enum type. - </summary> - <returns></returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> - <summary> - Gets a dictionary of the names and values of an Enum type. - </summary> - <param name="enumType">The enum type to get names and values for.</param> - <returns></returns> - </member> - <member name="T:Newtonsoft.Json.JsonToken"> - <summary> - Specifies the type of Json token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.None"> - <summary> - This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.StartObject"> - <summary> - An object start token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.StartArray"> - <summary> - An array start token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> - <summary> - A constructor start token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> - <summary> - An object property name. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Comment"> - <summary> - A comment. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Raw"> - <summary> - Raw JSON. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Integer"> - <summary> - An integer. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Float"> - <summary> - A float. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.String"> - <summary> - A string. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Boolean"> - <summary> - A boolean. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Null"> - <summary> - A null token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Undefined"> - <summary> - An undefined token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.EndObject"> - <summary> - An object end token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.EndArray"> - <summary> - An array end token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> - <summary> - A constructor end token. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Date"> - <summary> - A Date. - </summary> - </member> - <member name="F:Newtonsoft.Json.JsonToken.Bytes"> - <summary> - Byte data. - </summary> - </member> - <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> - <summary> - Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. - </summary> - </member> - <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> - <summary> - Determines whether the collection is null or empty. - </summary> - <param name="collection">The collection.</param> - <returns> - <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> - <summary> - Adds the elements of the specified collection to the specified generic IList. - </summary> - <param name="initial">The list to add to.</param> - <param name="collection">The collection of elements to add.</param> - </member> - <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> - <summary> - Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. - </summary> - <typeparam name="TSource">The type of the elements of source.</typeparam> - <param name="list">A sequence in which to locate a value.</param> - <param name="value">The object to locate in the sequence</param> - <param name="comparer">An equality comparer to compare values.</param> - <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> - <summary> - Gets the type of the typed collection's items. - </summary> - <param name="type">The type.</param> - <returns>The type of the typed collection's items.</returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> - <summary> - Gets the member's underlying type. - </summary> - <param name="member">The member.</param> - <returns>The underlying type of the member.</returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> - <summary> - Determines whether the member is an indexed property. - </summary> - <param name="member">The member.</param> - <returns> - <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> - <summary> - Determines whether the property is an indexed property. - </summary> - <param name="property">The property.</param> - <returns> - <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> - <summary> - Gets the member's value on the object. - </summary> - <param name="member">The member.</param> - <param name="target">The target object.</param> - <returns>The member's value on the object.</returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> - <summary> - Sets the member's value on the target object. - </summary> - <param name="member">The member.</param> - <param name="target">The target.</param> - <param name="value">The value.</param> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> - <summary> - Determines whether the specified MemberInfo can be read. - </summary> - <param name="member">The MemberInfo to determine whether can be read.</param> - /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> - <returns> - <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> - <summary> - Determines whether the specified MemberInfo can be set. - </summary> - <param name="member">The MemberInfo to determine whether can be set.</param> - <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> - <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> - <returns> - <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> - <summary> - Determines whether the string is all white space. Empty string will return false. - </summary> - <param name="s">The string to test whether it is all white space.</param> - <returns> - <c>true</c> if the string is all white space; otherwise, <c>false</c>. - </returns> - </member> - <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> - <summary> - Nulls an empty string. - </summary> - <param name="s">The string.</param> - <returns>Null if the string was null, otherwise the string unchanged.</returns> - </member> - <member name="T:Newtonsoft.Json.WriteState"> - <summary> - Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. - </summary> - </member> - <member name="F:Newtonsoft.Json.WriteState.Error"> - <summary> - An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. - You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. - Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. - </summary> - </member> - <member name="F:Newtonsoft.Json.WriteState.Closed"> - <summary> - The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. - </summary> - </member> - <member name="F:Newtonsoft.Json.WriteState.Object"> - <summary> - An object is being written. - </summary> - </member> - <member name="F:Newtonsoft.Json.WriteState.Array"> - <summary> - A array is being written. - </summary> - </member> - <member name="F:Newtonsoft.Json.WriteState.Constructor"> - <summary> - A constructor is being written. - </summary> - </member> - <member name="F:Newtonsoft.Json.WriteState.Property"> - <summary> - A property is being written. - </summary> - </member> - <member name="F:Newtonsoft.Json.WriteState.Start"> - <summary> - A write method has not been called. - </summary> - </member> - </members> -</doc> +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Enumerable"> + <summary> + Provides a set of static (Shared in Visual Basic) methods for + querying objects that implement <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.AsEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Empty``1"> + <summary> + Returns an empty <see cref="T:System.Collections.Generic.IEnumerable`1"/> that has the + specified type argument. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Cast``1(System.Collections.IEnumerable)"> + <summary> + Converts the elements of an <see cref="T:System.Collections.IEnumerable"/> to the + specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OfType``1(System.Collections.IEnumerable)"> + <summary> + Filters the elements of an <see cref="T:System.Collections.IEnumerable"/> based on a specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Range(System.Int32,System.Int32)"> + <summary> + Generates a sequence of integral numbers within a specified range. + </summary> + <param name="start">The value of the first integer in the sequence.</param> + <param name="count">The number of sequential integers to generate.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Repeat``1(``0,System.Int32)"> + <summary> + Generates a sequence that contains one repeated value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + Each element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Projects each element of a sequence into a new form. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,``1})"> + <summary> + Projects each element of a sequence into a new form by + incorporating the element's index. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/> + and flattens the resulting sequences into one sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + and flattens the resulting sequences into one sequence. The + index of each source element is used in the projected form of + that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. The index of + each source element is used in the intermediate projected form + of that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + The element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of First operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element in a sequence that satisfies a specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element of the sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Last operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Single operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, and throws an exception + if there is not exactly one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition, and throws an exception if more than one + such element exists. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, or a default value if + the sequence is empty; this method throws an exception if there + is more than one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition or a default value if no such element + exists; this method throws an exception if more than one element + satisfies the condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAt``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAtOrDefault``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence or a + default value if the index is out of range. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Reverse``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Inverts the order of the elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Take``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns a specified number of contiguous elements from the start + of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Skip``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Bypasses a specified number of elements in a sequence and then + returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. The element's + index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the number of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns a number that represents how many elements in the + specified sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents the total number + of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents how many elements + in a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Concat``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Concatenates two sequences. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToList``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.List`1"/> from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToArray``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates an array from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns distinct elements from a sequence by using the default + equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns distinct elements from a sequence by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and a key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and compares the keys by using a specified + comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and projects the elements for each group by + using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2})"> + <summary> + Groups the elements of a sequence according to a key selector + function. The keys are compared by using a comparer and each + group's elements are projected by using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The keys are compared by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. Key values are compared by using a specified comparer, + and the elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,``0})"> + <summary> + Applies an accumulator function over a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``2(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``3(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1},Newtonsoft.Json.Serialization.Func{``1,``2})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value, and the + specified function is used to select the result value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set union of two sequences by using the default + equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set union of two sequences by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the elements of the specified sequence or the type + parameter's default value in a singleton collection if the + sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.All``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether all elements of a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether a sequence contains any elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether any element of a sequence satisfies a + condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Determines whether a sequence contains a specified element by + using the default equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether a sequence contains a specified element by + using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether two sequences are equal by comparing the + elements by using the default equality comparer for their type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether two sequences are equal by comparing their + elements by using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,System.Boolean})"> + <summary> + Base implementation for Min/Max operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{System.Nullable{``0}},System.Nullable{``0},Newtonsoft.Json.Serialization.Func{System.Nullable{``0},System.Nullable{``0},System.Boolean})"> + <summary> + Base implementation for Min/Max operator for nullable types. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the minimum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the minimum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the maximum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the maximum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Renumerable``1(System.Collections.Generic.IEnumerator{``0})"> + <summary> + Makes an enumerator seen as enumerable once more. + </summary> + <remarks> + The supplied enumerator must have been started. The first element + returned is the element the enumerator was on when passed in. + DO NOT use this method if the caller must be a generator. It is + mostly safe among aggregate operations. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in ascending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in descending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in descending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order, according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.IntersectExceptImpl``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0},System.Boolean)"> + <summary> + Base implementation for Intersect and Except operators. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set intersection of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set intersection of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set difference of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set difference of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + selector and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer, and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. A + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. A specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> + is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"> + <summary> + Represents a collection of objects that have a common key. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2.Key"> + <summary> + Gets the key of the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.ILookup`2"> + <summary> + Defines an indexer, size property, and Boolean search method for + data structures that map keys to <see cref="T:System.Collections.Generic.IEnumerable`1"/> + sequences of values. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"> + <summary> + Represents a sorted sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1.CreateOrderedEnumerable``1(Newtonsoft.Json.Serialization.Func{`0,``0},System.Collections.Generic.IComparer{``0},System.Boolean)"> + <summary> + Performs a subsequent ordering on the elements of an + <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"/> according to a key. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"> + <summary> + Represents a collection of keys each mapped to one or more values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Contains(`0)"> + <summary> + Determines whether a specified key is in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.ApplyResultSelector``1(Newtonsoft.Json.Serialization.Func{`0,System.Collections.Generic.IEnumerable{`1},``0})"> + <summary> + Applies a transform function to each key and its associated + values and returns the results. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.GetEnumerator"> + <summary> + Returns a generic enumerator that iterates through the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Count"> + <summary> + Gets the number of key/value collection pairs in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Item(`0)"> + <summary> + Gets the collection of values indexed by the specified key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.TagPosition(`0,System.Int32)"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.GetFirst(Newtonsoft.Json.Utilities.LinqBridge.Tuple{`0,System.Int32})"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="T:System.Runtime.CompilerServices.ExtensionAttribute"> + <remarks> + This attribute allows us to define extension methods without + requiring .NET Framework 3.5. For more information, see the section, + <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx#S7">Extension Methods in .NET Framework 2.0 Apps</a>, + of <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx">Basic Instincts: Extension Methods</a> + column in <a href="http://msdn.microsoft.com/msdnmag/">MSDN Magazine</a>, + issue <a href="http://msdn.microsoft.com/en-us/magazine/cc135410.aspx">Nov 2007</a>. + </remarks> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="!:DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="!:DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs b/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs index c4e3502..e55a1f1 100644 --- a/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs +++ b/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs @@ -1,24 +1,24 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Text; - -namespace HtmlAgilityPack -{ - internal class EncodingFoundException : Exception - { - private Encoding _encoding; - - internal EncodingFoundException(Encoding encoding) - { - _encoding = encoding; - } - - internal Encoding Encoding - { - get - { - return _encoding; - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Text; + +namespace HtmlAgilityPack +{ + internal class EncodingFoundException : Exception + { + private Encoding _encoding; + + internal EncodingFoundException(Encoding encoding) + { + _encoding = encoding; + } + + internal Encoding Encoding + { + get + { + return _encoding; + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs b/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs index b9385e1..a97fc18 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs @@ -1,182 +1,182 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents an HTML attribute. - /// </summary> - public class HtmlAttribute: IComparable - { - internal int _line = 0; - internal int _lineposition = 0; - internal int _streamposition = 0; - internal int _namestartindex = 0; - internal int _namelength = 0; - internal int _valuestartindex = 0; - internal int _valuelength = 0; - internal HtmlDocument _ownerdocument; // attribute can exists without a node - internal HtmlNode _ownernode; - internal string _name; - internal string _value; - - internal HtmlAttribute(HtmlDocument ownerdocument) - { - _ownerdocument = ownerdocument; - } - - /// <summary> - /// Creates a duplicate of this attribute. - /// </summary> - /// <returns>The cloned attribute.</returns> - public HtmlAttribute Clone() - { - HtmlAttribute att = new HtmlAttribute(_ownerdocument); - att.Name = Name; - att.Value = Value; - return att; - } - - /// <summary> - /// Compares the current instance with another attribute. Comparison is based on attributes' name. - /// </summary> - /// <param name="obj">An attribute to compare with this instance.</param> - /// <returns>A 32-bit signed integer that indicates the relative order of the names comparison.</returns> - public int CompareTo(object obj) - { - HtmlAttribute att = obj as HtmlAttribute; - if (att == null) - { - throw new ArgumentException("obj"); - } - return Name.CompareTo(att.Name); - } - - internal string XmlName - { - get - { - return HtmlDocument.GetXmlName(Name); - } - } - - internal string XmlValue - { - get - { - return Value; - } - } - - /// <summary> - /// Gets the qualified name of the attribute. - /// </summary> - public string Name - { - get - { - if (_name == null) - { - _name = _ownerdocument._text.Substring(_namestartindex, _namelength).ToLower(); - } - return _name; - } - set - { - if (value == null) - { - throw new ArgumentNullException("value"); - } - _name = value.ToLower(); - if (_ownernode != null) - { - _ownernode._innerchanged = true; - _ownernode._outerchanged = true; - } - } - } - - /// <summary> - /// Gets or sets the value of the attribute. - /// </summary> - public string Value - { - get - { - if (_value == null) - { - _value = _ownerdocument._text.Substring(_valuestartindex, _valuelength); - } - return _value; - } - set - { - _value = value; - if (_ownernode != null) - { - _ownernode._innerchanged = true; - _ownernode._outerchanged = true; - } - } - } - - /// <summary> - /// Gets the line number of this attribute in the document. - /// </summary> - public int Line - { - get - { - return _line; - } - } - - /// <summary> - /// Gets the column number of this attribute in the document. - /// </summary> - public int LinePosition - { - get - { - return _lineposition; - } - } - - /// <summary> - /// Gets the stream position of this attribute in the document, relative to the start of the document. - /// </summary> - public int StreamPosition - { - get - { - return _streamposition; - } - } - - /// <summary> - /// Gets the HTML node to which this attribute belongs. - /// </summary> - public HtmlNode OwnerNode - { - get - { - return _ownernode; - } - } - - /// <summary> - /// Gets the HTML document to which this attribute belongs. - /// </summary> - public HtmlDocument OwnerDocument - { - get - { - return _ownerdocument; - } - } - - } - - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML attribute. + /// </summary> + public class HtmlAttribute: IComparable + { + internal int _line = 0; + internal int _lineposition = 0; + internal int _streamposition = 0; + internal int _namestartindex = 0; + internal int _namelength = 0; + internal int _valuestartindex = 0; + internal int _valuelength = 0; + internal HtmlDocument _ownerdocument; // attribute can exists without a node + internal HtmlNode _ownernode; + internal string _name; + internal string _value; + + internal HtmlAttribute(HtmlDocument ownerdocument) + { + _ownerdocument = ownerdocument; + } + + /// <summary> + /// Creates a duplicate of this attribute. + /// </summary> + /// <returns>The cloned attribute.</returns> + public HtmlAttribute Clone() + { + HtmlAttribute att = new HtmlAttribute(_ownerdocument); + att.Name = Name; + att.Value = Value; + return att; + } + + /// <summary> + /// Compares the current instance with another attribute. Comparison is based on attributes' name. + /// </summary> + /// <param name="obj">An attribute to compare with this instance.</param> + /// <returns>A 32-bit signed integer that indicates the relative order of the names comparison.</returns> + public int CompareTo(object obj) + { + HtmlAttribute att = obj as HtmlAttribute; + if (att == null) + { + throw new ArgumentException("obj"); + } + return Name.CompareTo(att.Name); + } + + internal string XmlName + { + get + { + return HtmlDocument.GetXmlName(Name); + } + } + + internal string XmlValue + { + get + { + return Value; + } + } + + /// <summary> + /// Gets the qualified name of the attribute. + /// </summary> + public string Name + { + get + { + if (_name == null) + { + _name = _ownerdocument._text.Substring(_namestartindex, _namelength).ToLower(); + } + return _name; + } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + _name = value.ToLower(); + if (_ownernode != null) + { + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + } + } + + /// <summary> + /// Gets or sets the value of the attribute. + /// </summary> + public string Value + { + get + { + if (_value == null) + { + _value = _ownerdocument._text.Substring(_valuestartindex, _valuelength); + } + return _value; + } + set + { + _value = value; + if (_ownernode != null) + { + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + } + } + + /// <summary> + /// Gets the line number of this attribute in the document. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the column number of this attribute in the document. + /// </summary> + public int LinePosition + { + get + { + return _lineposition; + } + } + + /// <summary> + /// Gets the stream position of this attribute in the document, relative to the start of the document. + /// </summary> + public int StreamPosition + { + get + { + return _streamposition; + } + } + + /// <summary> + /// Gets the HTML node to which this attribute belongs. + /// </summary> + public HtmlNode OwnerNode + { + get + { + return _ownernode; + } + } + + /// <summary> + /// Gets the HTML document to which this attribute belongs. + /// </summary> + public HtmlDocument OwnerDocument + { + get + { + return _ownerdocument; + } + } + + } + + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs b/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs index f99f93a..407c869 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs @@ -1,293 +1,293 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents a combined list and collection of HTML nodes. - /// </summary> - public class HtmlAttributeCollection : IEnumerable - { - internal Hashtable _hashitems = new Hashtable(); - private ArrayList _items = new ArrayList(); - private HtmlNode _ownernode; - - internal HtmlAttributeCollection(HtmlNode ownernode) - { - _ownernode = ownernode; - } - - /// <summary> - /// Inserts the specified attribute as the last attribute in the collection. - /// </summary> - /// <param name="newAttribute">The attribute to insert. May not be null.</param> - /// <returns>The appended attribute.</returns> - public HtmlAttribute Append(HtmlAttribute newAttribute) - { - if (newAttribute == null) - { - throw new ArgumentNullException("newAttribute"); - } - - _hashitems[newAttribute.Name] = newAttribute; - newAttribute._ownernode = _ownernode; - _items.Add(newAttribute); - - _ownernode._innerchanged = true; - _ownernode._outerchanged = true; - return newAttribute; - } - - /// <summary> - /// Creates and inserts a new attribute as the last attribute in the collection. - /// </summary> - /// <param name="name">The name of the attribute to insert.</param> - /// <returns>The appended attribute.</returns> - public HtmlAttribute Append(string name) - { - HtmlAttribute att = _ownernode._ownerdocument.CreateAttribute(name); - return Append(att); - } - - /// <summary> - /// Creates and inserts a new attribute as the last attribute in the collection. - /// </summary> - /// <param name="name">The name of the attribute to insert.</param> - /// <param name="value">The value of the attribute to insert.</param> - /// <returns>The appended attribute.</returns> - public HtmlAttribute Append(string name, string value) - { - HtmlAttribute att = _ownernode._ownerdocument.CreateAttribute(name, value); - return Append(att); - } - - /// <summary> - /// Inserts the specified attribute as the first node in the collection. - /// </summary> - /// <param name="newAttribute">The attribute to insert. May not be null.</param> - /// <returns>The prepended attribute.</returns> - public HtmlAttribute Prepend(HtmlAttribute newAttribute) - { - if (newAttribute == null) - { - throw new ArgumentNullException("newAttribute"); - } - - _hashitems[newAttribute.Name] = newAttribute; - newAttribute._ownernode = _ownernode; - _items.Insert(0, newAttribute); - - _ownernode._innerchanged = true; - _ownernode._outerchanged = true; - return newAttribute; - } - - /// <summary> - /// Removes the attribute at the specified index. - /// </summary> - /// <param name="index">The index of the attribute to remove.</param> - public void RemoveAt(int index) - { - HtmlAttribute att = (HtmlAttribute)_items[index]; - _hashitems.Remove(att.Name); - _items.RemoveAt(index); - - _ownernode._innerchanged = true; - _ownernode._outerchanged = true; - } - - /// <summary> - /// Removes a given attribute from the list. - /// </summary> - /// <param name="attribute">The attribute to remove. May not be null.</param> - public void Remove(HtmlAttribute attribute) - { - if (attribute == null) - { - throw new ArgumentNullException("attribute"); - } - int index = GetAttributeIndex(attribute); - if (index == -1) - { - throw new IndexOutOfRangeException(); - } - RemoveAt(index); - } - - /// <summary> - /// Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. - /// </summary> - /// <param name="name">The attribute's name. May not be null.</param> - public void Remove(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - string lname = name.ToLower(); - for (int i = 0; i < _items.Count; i++) - { - HtmlAttribute att = (HtmlAttribute)_items[i]; - if (att.Name == lname) - { - RemoveAt(i); - } - } - } - - /// <summary> - /// Remove all attributes in the list. - /// </summary> - public void RemoveAll() - { - _hashitems.Clear(); - _items.Clear(); - - _ownernode._innerchanged = true; - _ownernode._outerchanged = true; - } - - /// <summary> - /// Gets the number of elements actually contained in the list. - /// </summary> - public int Count - { - get - { - return _items.Count; - } - } - - internal int GetAttributeIndex(HtmlAttribute attribute) - { - if (attribute == null) - { - throw new ArgumentNullException("attribute"); - } - for (int i = 0; i < _items.Count; i++) - { - if (((HtmlAttribute)_items[i]) == attribute) - return i; - } - return -1; - } - - internal int GetAttributeIndex(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - string lname = name.ToLower(); - for (int i = 0; i < _items.Count; i++) - { - if (((HtmlAttribute)_items[i]).Name == lname) - return i; - } - return -1; - } - - /// <summary> - /// Gets a given attribute from the list using its name. - /// </summary> - public HtmlAttribute this[string name] - { - get - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - return _hashitems[name.ToLower()] as HtmlAttribute; - } - } - - /// <summary> - /// Gets the attribute at the specified index. - /// </summary> - public HtmlAttribute this[int index] - { - get - { - return _items[index] as HtmlAttribute; - } - } - - internal void Clear() - { - _hashitems.Clear(); - _items.Clear(); - } - - /// <summary> - /// Returns an enumerator that can iterate through the list. - /// </summary> - /// <returns>An IEnumerator for the entire list.</returns> - public HtmlAttributeEnumerator GetEnumerator() - { - return new HtmlAttributeEnumerator(_items); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - /// <summary> - /// Represents an enumerator that can iterate through the list. - /// </summary> - public class HtmlAttributeEnumerator : IEnumerator - { - int _index; - ArrayList _items; - - internal HtmlAttributeEnumerator(ArrayList items) - { - _items = items; - _index = -1; - } - - /// <summary> - /// Sets the enumerator to its initial position, which is before the first element in the collection. - /// </summary> - public void Reset() - { - _index = -1; - } - - /// <summary> - /// Advances the enumerator to the next element of the collection. - /// </summary> - /// <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> - public bool MoveNext() - { - _index++; - return (_index < _items.Count); - } - - /// <summary> - /// Gets the current element in the collection. - /// </summary> - public HtmlAttribute Current - { - get - { - return (HtmlAttribute)(_items[_index]); - } - } - - /// <summary> - /// Gets the current element in the collection. - /// </summary> - object IEnumerator.Current - { - get - { - return (Current); - } - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a combined list and collection of HTML nodes. + /// </summary> + public class HtmlAttributeCollection : IEnumerable + { + internal Hashtable _hashitems = new Hashtable(); + private ArrayList _items = new ArrayList(); + private HtmlNode _ownernode; + + internal HtmlAttributeCollection(HtmlNode ownernode) + { + _ownernode = ownernode; + } + + /// <summary> + /// Inserts the specified attribute as the last attribute in the collection. + /// </summary> + /// <param name="newAttribute">The attribute to insert. May not be null.</param> + /// <returns>The appended attribute.</returns> + public HtmlAttribute Append(HtmlAttribute newAttribute) + { + if (newAttribute == null) + { + throw new ArgumentNullException("newAttribute"); + } + + _hashitems[newAttribute.Name] = newAttribute; + newAttribute._ownernode = _ownernode; + _items.Add(newAttribute); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + return newAttribute; + } + + /// <summary> + /// Creates and inserts a new attribute as the last attribute in the collection. + /// </summary> + /// <param name="name">The name of the attribute to insert.</param> + /// <returns>The appended attribute.</returns> + public HtmlAttribute Append(string name) + { + HtmlAttribute att = _ownernode._ownerdocument.CreateAttribute(name); + return Append(att); + } + + /// <summary> + /// Creates and inserts a new attribute as the last attribute in the collection. + /// </summary> + /// <param name="name">The name of the attribute to insert.</param> + /// <param name="value">The value of the attribute to insert.</param> + /// <returns>The appended attribute.</returns> + public HtmlAttribute Append(string name, string value) + { + HtmlAttribute att = _ownernode._ownerdocument.CreateAttribute(name, value); + return Append(att); + } + + /// <summary> + /// Inserts the specified attribute as the first node in the collection. + /// </summary> + /// <param name="newAttribute">The attribute to insert. May not be null.</param> + /// <returns>The prepended attribute.</returns> + public HtmlAttribute Prepend(HtmlAttribute newAttribute) + { + if (newAttribute == null) + { + throw new ArgumentNullException("newAttribute"); + } + + _hashitems[newAttribute.Name] = newAttribute; + newAttribute._ownernode = _ownernode; + _items.Insert(0, newAttribute); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + return newAttribute; + } + + /// <summary> + /// Removes the attribute at the specified index. + /// </summary> + /// <param name="index">The index of the attribute to remove.</param> + public void RemoveAt(int index) + { + HtmlAttribute att = (HtmlAttribute)_items[index]; + _hashitems.Remove(att.Name); + _items.RemoveAt(index); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + + /// <summary> + /// Removes a given attribute from the list. + /// </summary> + /// <param name="attribute">The attribute to remove. May not be null.</param> + public void Remove(HtmlAttribute attribute) + { + if (attribute == null) + { + throw new ArgumentNullException("attribute"); + } + int index = GetAttributeIndex(attribute); + if (index == -1) + { + throw new IndexOutOfRangeException(); + } + RemoveAt(index); + } + + /// <summary> + /// Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. + /// </summary> + /// <param name="name">The attribute's name. May not be null.</param> + public void Remove(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + string lname = name.ToLower(); + for (int i = 0; i < _items.Count; i++) + { + HtmlAttribute att = (HtmlAttribute)_items[i]; + if (att.Name == lname) + { + RemoveAt(i); + } + } + } + + /// <summary> + /// Remove all attributes in the list. + /// </summary> + public void RemoveAll() + { + _hashitems.Clear(); + _items.Clear(); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + + /// <summary> + /// Gets the number of elements actually contained in the list. + /// </summary> + public int Count + { + get + { + return _items.Count; + } + } + + internal int GetAttributeIndex(HtmlAttribute attribute) + { + if (attribute == null) + { + throw new ArgumentNullException("attribute"); + } + for (int i = 0; i < _items.Count; i++) + { + if (((HtmlAttribute)_items[i]) == attribute) + return i; + } + return -1; + } + + internal int GetAttributeIndex(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + string lname = name.ToLower(); + for (int i = 0; i < _items.Count; i++) + { + if (((HtmlAttribute)_items[i]).Name == lname) + return i; + } + return -1; + } + + /// <summary> + /// Gets a given attribute from the list using its name. + /// </summary> + public HtmlAttribute this[string name] + { + get + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + return _hashitems[name.ToLower()] as HtmlAttribute; + } + } + + /// <summary> + /// Gets the attribute at the specified index. + /// </summary> + public HtmlAttribute this[int index] + { + get + { + return _items[index] as HtmlAttribute; + } + } + + internal void Clear() + { + _hashitems.Clear(); + _items.Clear(); + } + + /// <summary> + /// Returns an enumerator that can iterate through the list. + /// </summary> + /// <returns>An IEnumerator for the entire list.</returns> + public HtmlAttributeEnumerator GetEnumerator() + { + return new HtmlAttributeEnumerator(_items); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// <summary> + /// Represents an enumerator that can iterate through the list. + /// </summary> + public class HtmlAttributeEnumerator : IEnumerator + { + int _index; + ArrayList _items; + + internal HtmlAttributeEnumerator(ArrayList items) + { + _items = items; + _index = -1; + } + + /// <summary> + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// </summary> + public void Reset() + { + _index = -1; + } + + /// <summary> + /// Advances the enumerator to the next element of the collection. + /// </summary> + /// <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> + public bool MoveNext() + { + _index++; + return (_index < _items.Count); + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + public HtmlAttribute Current + { + get + { + return (HtmlAttribute)(_items[_index]); + } + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + object IEnumerator.Current + { + get + { + return (Current); + } + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs b/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs index 0d00379..ac171f0 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs @@ -1,127 +1,127 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - internal class HtmlCmdLine - { - static internal bool Help; - - static HtmlCmdLine() - { - Help = false; - ParseArgs(); - } - - internal static string GetOption(string name, string def) - { - string p = def; - string[] args = Environment.GetCommandLineArgs(); - for (int i=1;i<args.Length;i++) - { - GetStringArg(args[i], name, ref p); - } - return p; - } - - internal static string GetOption(int index, string def) - { - string p = def; - string[] args = Environment.GetCommandLineArgs(); - int j = 0; - for (int i=1;i<args.Length;i++) - { - if (GetStringArg(args[i], ref p)) - { - if (index==j) - return p; - else - p = def; - j++; - } - } - return p; - } - - internal static bool GetOption(string name, bool def) - { - bool p = def; - string[] args = Environment.GetCommandLineArgs(); - for (int i=1;i<args.Length;i++) - { - GetBoolArg(args[i], name, ref p); - } - return p; - } - - internal static int GetOption(string name, int def) - { - int p = def; - string[] args = Environment.GetCommandLineArgs(); - for (int i=1;i<args.Length;i++) - { - GetIntArg(args[i], name, ref p); - } - return p; - } - - private static void ParseArgs() - { - string[] args = Environment.GetCommandLineArgs(); - for (int i=1;i<args.Length;i++) - { - // help - GetBoolArg(args[i], "?", ref Help); - GetBoolArg(args[i], "h", ref Help); - GetBoolArg(args[i], "help", ref Help); - } - } - - private static bool GetStringArg(string Arg, ref string ArgValue) - { - if (('/'==Arg[0]) || ('-'==Arg[0])) - return false; - ArgValue = Arg; - return true; - } - - private static void GetStringArg(string Arg, string Name, ref string ArgValue) - { - if (Arg.Length<(Name.Length+3)) // -name:x is 3 more than name - return; - if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param - return; - if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) - ArgValue = Arg.Substring(Name.Length+2, Arg.Length-Name.Length-2); - } - - private static void GetBoolArg(string Arg, string Name, ref bool ArgValue) - { - if (Arg.Length<(Name.Length+1)) // -name is 1 more than name - return; - if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param - return; - if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) - ArgValue = true; - } - - private static void GetIntArg(string Arg, string Name, ref int ArgValue) - { - if (Arg.Length<(Name.Length+3)) // -name:12 is 3 more than name - return; - if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param - return; - if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) - { - try - { - ArgValue = Convert.ToInt32(Arg.Substring(Name.Length+2, Arg.Length-Name.Length-2)); - } - catch - { - } - - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + internal class HtmlCmdLine + { + static internal bool Help; + + static HtmlCmdLine() + { + Help = false; + ParseArgs(); + } + + internal static string GetOption(string name, string def) + { + string p = def; + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + GetStringArg(args[i], name, ref p); + } + return p; + } + + internal static string GetOption(int index, string def) + { + string p = def; + string[] args = Environment.GetCommandLineArgs(); + int j = 0; + for (int i=1;i<args.Length;i++) + { + if (GetStringArg(args[i], ref p)) + { + if (index==j) + return p; + else + p = def; + j++; + } + } + return p; + } + + internal static bool GetOption(string name, bool def) + { + bool p = def; + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + GetBoolArg(args[i], name, ref p); + } + return p; + } + + internal static int GetOption(string name, int def) + { + int p = def; + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + GetIntArg(args[i], name, ref p); + } + return p; + } + + private static void ParseArgs() + { + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + // help + GetBoolArg(args[i], "?", ref Help); + GetBoolArg(args[i], "h", ref Help); + GetBoolArg(args[i], "help", ref Help); + } + } + + private static bool GetStringArg(string Arg, ref string ArgValue) + { + if (('/'==Arg[0]) || ('-'==Arg[0])) + return false; + ArgValue = Arg; + return true; + } + + private static void GetStringArg(string Arg, string Name, ref string ArgValue) + { + if (Arg.Length<(Name.Length+3)) // -name:x is 3 more than name + return; + if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param + return; + if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) + ArgValue = Arg.Substring(Name.Length+2, Arg.Length-Name.Length-2); + } + + private static void GetBoolArg(string Arg, string Name, ref bool ArgValue) + { + if (Arg.Length<(Name.Length+1)) // -name is 1 more than name + return; + if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param + return; + if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) + ArgValue = true; + } + + private static void GetIntArg(string Arg, string Name, ref int ArgValue) + { + if (Arg.Length<(Name.Length+3)) // -name:12 is 3 more than name + return; + if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param + return; + if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) + { + try + { + ArgValue = Convert.ToInt32(Arg.Substring(Name.Length+2, Arg.Length-Name.Length-2)); + } + catch + { + } + + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs b/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs index b6e226c..0e64de1 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs @@ -1,73 +1,73 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents an HTML comment. - /// </summary> - public class HtmlCommentNode : HtmlNode - { - private string _comment; - - internal HtmlCommentNode(HtmlDocument ownerdocument, int index) - : - base(HtmlNodeType.Comment, ownerdocument, index) - { - } - - /// <summary> - /// Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - /// </summary> - public override string InnerHtml - { - get - { - if (_comment == null) - { - return base.InnerHtml; - } - return _comment; - } - set - { - _comment = value; - } - } - - /// <summary> - /// Gets or Sets the object and its content in HTML. - /// </summary> - public override string OuterHtml - { - get - { - if (_comment == null) - { - return base.OuterHtml; - } - return "<!--" + _comment + "-->"; - } - } - - /// <summary> - /// Gets or Sets the comment text of the node. - /// </summary> - public string Comment - { - get - { - if (_comment == null) - { - return base.InnerHtml; - } - return _comment; - } - set - { - _comment = value; - } - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML comment. + /// </summary> + public class HtmlCommentNode : HtmlNode + { + private string _comment; + + internal HtmlCommentNode(HtmlDocument ownerdocument, int index) + : + base(HtmlNodeType.Comment, ownerdocument, index) + { + } + + /// <summary> + /// Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + /// </summary> + public override string InnerHtml + { + get + { + if (_comment == null) + { + return base.InnerHtml; + } + return _comment; + } + set + { + _comment = value; + } + } + + /// <summary> + /// Gets or Sets the object and its content in HTML. + /// </summary> + public override string OuterHtml + { + get + { + if (_comment == null) + { + return base.OuterHtml; + } + return "<!--" + _comment + "-->"; + } + } + + /// <summary> + /// Gets or Sets the comment text of the node. + /// </summary> + public string Comment + { + get + { + if (_comment == null) + { + return base.InnerHtml; + } + return _comment; + } + set + { + _comment = value; + } + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs b/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs index 6d99597..ea6c758 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs @@ -1,30 +1,30 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Diagnostics; - -namespace HtmlAgilityPack -{ - internal class HtmlConsoleListener : System.Diagnostics.TraceListener - { - public override void WriteLine(string Message) - { - Write(Message + "\n"); - } - - public override void Write(string Message) - { - Write(Message, ""); - } - - public override void Write(string Message, string Category) - { - Console.Write("T:" + Category + ": " + Message); - } - - public override void WriteLine(string Message, string Category) - { - Write(Message + "\n", Category); - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Diagnostics; + +namespace HtmlAgilityPack +{ + internal class HtmlConsoleListener : System.Diagnostics.TraceListener + { + public override void WriteLine(string Message) + { + Write(Message + "\n"); + } + + public override void Write(string Message) + { + Write(Message, ""); + } + + public override void Write(string Message, string Category) + { + Console.Write("T:" + Category + ": " + Message); + } + + public override void WriteLine(string Message, string Category) + { + Write(Message + "\n", Category); + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs b/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs index aabb77c..9d7d901 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs @@ -1,1936 +1,1936 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.IO; -using System.Text; -using System.Diagnostics; -using System.Collections; -using System.Text.RegularExpressions; -using System.Xml; -using System.Xml.XPath; - -namespace HtmlAgilityPack -{ - - /// <summary> - /// Represents a complete HTML document. - /// </summary> - public class HtmlDocument: IXPathNavigable - { - internal static readonly string HtmlExceptionRefNotChild = "Reference node must be a child of this node"; - internal static readonly string HtmlExceptionUseIdAttributeFalse = "You need to set UseIdAttribute property to true to enable this feature"; - - internal Hashtable _openednodes; - internal Hashtable _lastnodes = new Hashtable(); - internal Hashtable _nodesid; - private HtmlNode _documentnode; - internal string _text; - private string _remainder; - private int _remainderOffset; - private HtmlNode _currentnode; - private HtmlNode _lastparentnode; - private HtmlAttribute _currentattribute; - private int _index; - private int _line; - private int _lineposition, _maxlineposition; - private int _c; - private bool _fullcomment; - private System.Text.Encoding _streamencoding; - private System.Text.Encoding _declaredencoding; - private ArrayList _parseerrors = new ArrayList(); - private ParseState _state, _oldstate; - private Crc32 _crc32 = null; - private bool _onlyDetectEncoding = false; - - // public props - - /// <summary> - /// Defines if a checksum must be computed for the document while parsing. Default is false. - /// </summary> - public bool OptionComputeChecksum = false; - - /// <summary> - /// Defines if declared encoding must be read from the document. - /// Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - /// Default is true. - /// </summary> - public bool OptionReadEncoding = true; - - - /// <summary> - /// Defines if non closed nodes will be checked at the end of parsing. Default is true. - /// </summary> - public bool OptionCheckSyntax = true; - - /// <summary> - /// Defines if the 'id' attribute must be specifically used. Default is true. - /// </summary> - public bool OptionUseIdAttribute = true; - - /// <summary> - /// Defines if empty nodes must be written as closed during output. Default is false. - /// </summary> - public bool OptionWriteEmptyNodes = false; - - /// <summary> - /// Defines if output must conform to XML, instead of HTML. - /// </summary> - public bool OptionOutputAsXml = false; - - /// <summary> - /// Defines if name must be output in uppercase. Default is false. - /// </summary> - public bool OptionOutputUpperCase = false; - - /// <summary> - /// Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. - /// </summary> - public bool OptionOutputOptimizeAttributeValues = false; - - /// <summary> - /// Adds Debugging attributes to node. Default is false. - /// </summary> - public bool OptionAddDebuggingAttributes = false; - - /// <summary> - /// Defines if source text must be extracted while parsing errors. - /// If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. - /// Default is false. - /// </summary> - public bool OptionExtractErrorSourceText = false; // turning this on can dramatically slow performance if a lot of errors are detected - - /// <summary> - /// Defines if closing for non closed nodes must be done at the end or directly in the document. - /// Setting this to true can actually change how browsers render the page. Default is false. - /// </summary> - public bool OptionAutoCloseOnEnd = false; // close errors at the end - - /// <summary> - /// Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. - /// </summary> - public bool OptionFixNestedTags = false; // fix li, tr, th, td tags - - /// <summary> - /// Defines the maximum length of source text or parse errors. Default is 100. - /// </summary> - public int OptionExtractErrorSourceTextMaxLength = 100; - - /// <summary> - /// Defines the default stream encoding to use. Default is System.Text.Encoding.Default. - /// </summary> - public System.Text.Encoding OptionDefaultStreamEncoding = System.Text.Encoding.Default; - - /// <summary> - /// Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. - /// </summary> - public string OptionStopperNodeName = null; - - /// <summary> - /// Gets the remaining text. - /// Will always be null if OptionStopperNodeName is null. - /// </summary> - public string Remainder - { - get - { - return _remainder; - } - } - - /// <summary> - /// Gets the offset of Remainder in the original Html text. - /// If OptionStopperNodeName is null, this will return the length of the original Html text. - /// </summary> - public int RemainderOffset - { - get - { - return _remainderOffset; - } - } - - /// <summary> - /// Gets a list of parse errors found in the document. - /// </summary> - public ArrayList ParseErrors - { - get - { - return _parseerrors; - } - } - - /// <summary> - /// Gets the document's stream encoding. - /// </summary> - public System.Text.Encoding StreamEncoding - { - get - { - return _streamencoding; - } - } - - /// <summary> - /// Gets the document's declared encoding. - /// Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. - /// </summary> - public System.Text.Encoding DeclaredEncoding - { - get - { - return _declaredencoding; - } - } - - /// <summary> - /// Creates an instance of an HTML document. - /// </summary> - public HtmlDocument() - { - _documentnode = CreateNode(HtmlNodeType.Document, 0); - } - - internal HtmlNode GetXmlDeclaration() - { - if (!_documentnode.HasChildNodes) - { - return null; - } - - foreach(HtmlNode node in _documentnode._childnodes) - { - if (node.Name == "?xml") // it's ok, names are case sensitive - { - return node; - } - } - return null; - } - - /// <summary> - /// Applies HTML encoding to a specified string. - /// </summary> - /// <param name="html">The input string to encode. May not be null.</param> - /// <returns>The encoded string.</returns> - public static string HtmlEncode(string html) - { - if (html == null) - { - throw new ArgumentNullException("html"); - } - // replace & by & but only once! - Regex rx = new Regex("&(?!(amp;)|(lt;)|(gt;)|(quot;))", RegexOptions.IgnoreCase); - return rx.Replace(html, "&").Replace("<", "<").Replace(">", ">").Replace("\"", """); - } - - /// <summary> - /// Detects the encoding of an HTML stream. - /// </summary> - /// <param name="stream">The input stream. May not be null.</param> - /// <returns>The detected encoding.</returns> - public Encoding DetectEncoding(Stream stream) - { - if (stream == null) - { - throw new ArgumentNullException("stream"); - } - return DetectEncoding(new StreamReader(stream)); - } - - /// <summary> - /// Detects the encoding of an HTML file. - /// </summary> - /// <param name="path">Path for the file containing the HTML document to detect. May not be null.</param> - /// <returns>The detected encoding.</returns> - public Encoding DetectEncoding(string path) - { - if (path == null) - { - throw new ArgumentNullException("path"); - } - StreamReader sr = new StreamReader(path, OptionDefaultStreamEncoding); - Encoding encoding = DetectEncoding(sr); - sr.Close(); - return encoding; - } - - /// <summary> - /// Detects the encoding of an HTML text. - /// </summary> - /// <param name="html">The input html text. May not be null.</param> - /// <returns>The detected encoding.</returns> - public Encoding DetectEncodingHtml(string html) - { - if (html == null) - { - throw new ArgumentNullException("html"); - } - StringReader sr = new StringReader(html); - Encoding encoding = DetectEncoding(sr); - sr.Close(); - return encoding; - } - - /// <summary> - /// Detects the encoding of an HTML text provided on a TextReader. - /// </summary> - /// <param name="reader">The TextReader used to feed the HTML. May not be null.</param> - /// <returns>The detected encoding.</returns> - public Encoding DetectEncoding(TextReader reader) - { - if (reader == null) - { - throw new ArgumentNullException("reader"); - } - _onlyDetectEncoding = true; - if (OptionCheckSyntax) - { - _openednodes = new Hashtable(); - } - else - { - _openednodes = null; - } - - if (OptionUseIdAttribute) - { - _nodesid = new Hashtable(); - } - else - { - _nodesid = null; - } - - StreamReader sr = reader as StreamReader; - if (sr != null) - { - _streamencoding = sr.CurrentEncoding; - } - else - { - _streamencoding = null; - } - _declaredencoding = null; - - _text = reader.ReadToEnd(); - _documentnode = CreateNode(HtmlNodeType.Document, 0); - - // this is almost a hack, but it allows us not to muck with the original parsing code - try - { - Parse(); - } - catch(EncodingFoundException ex) - { - return ex.Encoding; - } - return null; - } - - /// <summary> - /// Loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - public void Load(Stream stream) - { - Load(new StreamReader(stream, OptionDefaultStreamEncoding)); - } - - /// <summary> - /// Loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - public void Load(Stream stream, bool detectEncodingFromByteOrderMarks) - { - Load(new StreamReader(stream, detectEncodingFromByteOrderMarks)); - } - - /// <summary> - /// Loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - public void Load(Stream stream, Encoding encoding) - { - Load(new StreamReader(stream, encoding)); - } - - /// <summary> - /// Loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) - { - Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks)); - } - - /// <summary> - /// Loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - /// <param name="buffersize">The minimum buffer size.</param> - public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) - { - Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks, buffersize)); - } - - /// <summary> - /// Loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read. May not be null.</param> - public void Load(string path) - { - if (path == null) - { - throw new ArgumentNullException("path"); - } - StreamReader sr = new StreamReader(path, OptionDefaultStreamEncoding); - Load(sr); - sr.Close(); - } - - /// <summary> - /// Loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read. May not be null.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public void Load(string path, bool detectEncodingFromByteOrderMarks) - { - if (path == null) - { - throw new ArgumentNullException("path"); - } - StreamReader sr = new StreamReader(path, detectEncodingFromByteOrderMarks); - Load(sr); - sr.Close(); - } - - /// <summary> - /// Loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read. May not be null.</param> - /// <param name="encoding">The character encoding to use. May not be null.</param> - public void Load(string path, Encoding encoding) - { - if (path == null) - { - throw new ArgumentNullException("path"); - } - if (encoding == null) - { - throw new ArgumentNullException("encoding"); - } - StreamReader sr = new StreamReader(path, encoding); - Load(sr); - sr.Close(); - } - - /// <summary> - /// Loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read. May not be null.</param> - /// <param name="encoding">The character encoding to use. May not be null.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) - { - if (path == null) - { - throw new ArgumentNullException("path"); - } - if (encoding == null) - { - throw new ArgumentNullException("encoding"); - } - StreamReader sr = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks); - Load(sr); - sr.Close(); - } - - /// <summary> - /// Loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read. May not be null.</param> - /// <param name="encoding">The character encoding to use. May not be null.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - /// <param name="buffersize">The minimum buffer size.</param> - public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) - { - if (path == null) - { - throw new ArgumentNullException("path"); - } - if (encoding == null) - { - throw new ArgumentNullException("encoding"); - } - StreamReader sr = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks, buffersize); - Load(sr); - sr.Close(); - } - - /// <summary> - /// Loads the HTML document from the specified string. - /// </summary> - /// <param name="html">String containing the HTML document to load. May not be null.</param> - public void LoadHtml(string html) - { - if (html == null) - { - throw new ArgumentNullException("html"); - } - StringReader sr = new StringReader(html); - Load(sr); - sr.Close(); - } - - /// <summary> - /// Detects the encoding of an HTML document from a file first, and then loads the file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - public void DetectEncodingAndLoad(string path) - { - DetectEncodingAndLoad(path, true); - } - - /// <summary> - /// Detects the encoding of an HTML document from a file first, and then loads the file. - /// </summary> - /// <param name="path">The complete file path to be read. May not be null.</param> - /// <param name="detectEncoding">true to detect encoding, false otherwise.</param> - public void DetectEncodingAndLoad(string path, bool detectEncoding) - { - if (path == null) - { - throw new ArgumentNullException("path"); - } - System.Text.Encoding enc; - if (detectEncoding) - { - enc = DetectEncoding(path); - } - else - { - enc = null; - } - - if (enc == null) - { - Load(path); - } - else - { - Load(path, enc); - } - } - - /// <summary> - /// Loads the HTML document from the specified TextReader. - /// </summary> - /// <param name="reader">The TextReader used to feed the HTML data into the document. May not be null.</param> - public void Load(TextReader reader) - { - // all Load methods pass down to this one - if (reader == null) - { - throw new ArgumentNullException("reader"); - } - - _onlyDetectEncoding = false; - - if (OptionCheckSyntax) - { - _openednodes = new Hashtable(); - } - else - { - _openednodes = null; - } - - if (OptionUseIdAttribute) - { - _nodesid = new Hashtable(); - } - else - { - _nodesid = null; - } - - StreamReader sr = reader as StreamReader; - if (sr != null) - { - try - { - // trigger bom read if needed - sr.Peek(); - } - catch - { - // void on purpose - } - _streamencoding = sr.CurrentEncoding; - } - else - { - _streamencoding = null; - } - _declaredencoding = null; - - _text = reader.ReadToEnd(); - _documentnode = CreateNode(HtmlNodeType.Document, 0); - Parse(); - - if (OptionCheckSyntax) - { - foreach(HtmlNode node in _openednodes.Values) - { - if (!node._starttag) // already reported - { - continue; - } - - string html; - if (OptionExtractErrorSourceText) - { - html = node.OuterHtml; - if (html.Length > OptionExtractErrorSourceTextMaxLength) - { - html = html.Substring(0, OptionExtractErrorSourceTextMaxLength); - } - } - else - { - html = string.Empty; - } - AddError( - HtmlParseErrorCode.TagNotClosed, - node._line, node._lineposition, - node._streamposition, html, - "End tag </" + node.Name + "> was not found"); - } - - // we don't need this anymore - _openednodes.Clear(); - } - } - - internal System.Text.Encoding GetOutEncoding() - { - // when unspecified, use the stream encoding first - if (_declaredencoding != null) - { - return _declaredencoding; - } - else - { - if (_streamencoding != null) - { - return _streamencoding; - } - } - return OptionDefaultStreamEncoding; - } - - - /// <summary> - /// Gets the document's output encoding. - /// </summary> - public System.Text.Encoding Encoding - { - get - { - return GetOutEncoding(); - } - } - - /// <summary> - /// Saves the HTML document to the specified stream. - /// </summary> - /// <param name="outStream">The stream to which you want to save.</param> - public void Save(Stream outStream) - { - StreamWriter sw = new StreamWriter(outStream, GetOutEncoding()); - Save(sw); - } - - /// <summary> - /// Saves the HTML document to the specified stream. - /// </summary> - /// <param name="outStream">The stream to which you want to save. May not be null.</param> - /// <param name="encoding">The character encoding to use. May not be null.</param> - public void Save(Stream outStream, System.Text.Encoding encoding) - { - if (outStream == null) - { - throw new ArgumentNullException("outStream"); - } - if (encoding == null) - { - throw new ArgumentNullException("encoding"); - } - StreamWriter sw = new StreamWriter(outStream, encoding); - Save(sw); - } - - /// <summary> - /// Saves the mixed document to the specified file. - /// </summary> - /// <param name="filename">The location of the file where you want to save the document.</param> - public void Save(string filename) - { - StreamWriter sw = new StreamWriter(filename, false, GetOutEncoding()); - Save(sw); - sw.Close(); - } - - /// <summary> - /// Saves the mixed document to the specified file. - /// </summary> - /// <param name="filename">The location of the file where you want to save the document. May not be null.</param> - /// <param name="encoding">The character encoding to use. May not be null.</param> - public void Save(string filename, System.Text.Encoding encoding) - { - if (filename == null) - { - throw new ArgumentNullException("filename"); - } - if (encoding == null) - { - throw new ArgumentNullException("encoding"); - } - StreamWriter sw = new StreamWriter(filename, false, encoding); - Save(sw); - sw.Close(); - } - - /// <summary> - /// Saves the HTML document to the specified StreamWriter. - /// </summary> - /// <param name="writer">The StreamWriter to which you want to save.</param> - public void Save(StreamWriter writer) - { - Save((TextWriter)writer); - } - - /// <summary> - /// Saves the HTML document to the specified TextWriter. - /// </summary> - /// <param name="writer">The TextWriter to which you want to save. May not be null.</param> - public void Save(TextWriter writer) - { - if (writer == null) - { - throw new ArgumentNullException("writer"); - } - DocumentNode.WriteTo(writer); - } - - /// <summary> - /// Saves the HTML document to the specified XmlWriter. - /// </summary> - /// <param name="writer">The XmlWriter to which you want to save.</param> - public void Save(XmlWriter writer) - { - DocumentNode.WriteTo(writer); - writer.Flush(); - } - - /// <summary> - /// Creates a new XPathNavigator object for navigating this HTML document. - /// </summary> - /// <returns>An XPathNavigator object. The XPathNavigator is positioned on the root of the document.</returns> - public XPathNavigator CreateNavigator() - { - return new HtmlNodeNavigator(this, _documentnode); - } - - /// <summary> - /// Gets a valid XML name. - /// </summary> - /// <param name="name">Any text.</param> - /// <returns>A string that is a valid XML name.</returns> - public static string GetXmlName(string name) - { - string xmlname = string.Empty; - bool nameisok = true; - for(int i=0;i<name.Length;i++) - { - // names are lcase - // note: we are very limited here, too much? - if (((name[i]>='a') && (name[i]<='z')) || - ((name[i]>='0') && (name[i]<='9')) || - // (name[i]==':') || (name[i]=='_') || (name[i]=='-') || (name[i]=='.')) // these are bads in fact - (name[i]=='_') || (name[i]=='-') || (name[i]=='.')) - { - xmlname += name[i]; - } - else - { - nameisok = false; - byte[] bytes = System.Text.Encoding.UTF8.GetBytes(new char[]{name[i]}); - for(int j=0;j<bytes.Length;j++) - { - xmlname += bytes[j].ToString("x2"); - } - xmlname += "_"; - } - - } - if (nameisok) - { - return xmlname; - } - return "_" + xmlname; - } - - internal void SetIdForNode(HtmlNode node, string id) - { - if (!OptionUseIdAttribute) - { - return; - } - - if ((_nodesid == null) || (id == null)) - { - return; - } - - if (node == null) - { - _nodesid.Remove(id.ToLower()); - } - else - { - _nodesid[id.ToLower()] = node; - } - } - - /// <summary> - /// Gets the HTML node with the specified 'id' attribute value. - /// </summary> - /// <param name="id">The attribute id to match. May not be null.</param> - /// <returns>The HTML node with the matching id or null if not found.</returns> - public HtmlNode GetElementbyId(string id) - { - if (id == null) - { - throw new ArgumentNullException("id"); - } - if (_nodesid == null) - { - throw new Exception(HtmlExceptionUseIdAttributeFalse); - } - - return _nodesid[id.ToLower()] as HtmlNode; - } - - /// <summary> - /// Creates an HTML element node with the specified name. - /// </summary> - /// <param name="name">The qualified name of the element. May not be null.</param> - /// <returns>The new HTML node.</returns> - public HtmlNode CreateElement(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - HtmlNode node = CreateNode(HtmlNodeType.Element); - node._name = name; - return node; - } - - /// <summary> - /// Creates an HTML comment node. - /// </summary> - /// <returns>The new HTML comment node.</returns> - public HtmlCommentNode CreateComment() - { - return (HtmlCommentNode)CreateNode(HtmlNodeType.Comment); - } - - /// <summary> - /// Creates an HTML comment node with the specified comment text. - /// </summary> - /// <param name="comment">The comment text. May not be null.</param> - /// <returns>The new HTML comment node.</returns> - public HtmlCommentNode CreateComment(string comment) - { - if (comment == null) - { - throw new ArgumentNullException("comment"); - } - HtmlCommentNode c = CreateComment(); - c.Comment = comment; - return c; - } - - /// <summary> - /// Creates an HTML text node. - /// </summary> - /// <returns>The new HTML text node.</returns> - public HtmlTextNode CreateTextNode() - { - return (HtmlTextNode)CreateNode(HtmlNodeType.Text); - } - - /// <summary> - /// Creates an HTML text node with the specified text. - /// </summary> - /// <param name="text">The text of the node. May not be null.</param> - /// <returns>The new HTML text node.</returns> - public HtmlTextNode CreateTextNode(string text) - { - if (text == null) - { - throw new ArgumentNullException("text"); - } - HtmlTextNode t = CreateTextNode(); - t.Text = text; - return t; - } - - internal HtmlNode CreateNode(HtmlNodeType type) - { - return CreateNode(type, -1); - } - - internal HtmlNode CreateNode(HtmlNodeType type, int index) - { - switch (type) - { - case HtmlNodeType.Comment: - return new HtmlCommentNode(this, index); - - case HtmlNodeType.Text: - return new HtmlTextNode(this, index); - - default: - return new HtmlNode(type, this, index); - } - } - - internal HtmlAttribute CreateAttribute() - { - return new HtmlAttribute(this); - } - - /// <summary> - /// Creates an HTML attribute with the specified name. - /// </summary> - /// <param name="name">The name of the attribute. May not be null.</param> - /// <returns>The new HTML attribute.</returns> - public HtmlAttribute CreateAttribute(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - HtmlAttribute att = CreateAttribute(); - att.Name = name; - return att; - } - - /// <summary> - /// Creates an HTML attribute with the specified name. - /// </summary> - /// <param name="name">The name of the attribute. May not be null.</param> - /// <param name="value">The value of the attribute.</param> - /// <returns>The new HTML attribute.</returns> - public HtmlAttribute CreateAttribute(string name, string value) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - HtmlAttribute att = CreateAttribute(name); - att.Value = value; - return att; - } - - /// <summary> - /// Gets the root node of the document. - /// </summary> - public HtmlNode DocumentNode - { - get - { - return _documentnode; - } - } - - /// <summary> - /// Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. - /// </summary> - public int CheckSum - { - get - { - if (_crc32 == null) - { - return 0; - } - else - { - return (int)_crc32.CheckSum; - } - } - } - - private HtmlParseError AddError( - HtmlParseErrorCode code, - int line, - int linePosition, - int streamPosition, - string sourceText, - string reason) - { - HtmlParseError err = new HtmlParseError(code, line, linePosition, streamPosition, sourceText, reason); - _parseerrors.Add(err); - return err; - } - - - private enum ParseState - { - Text, - WhichTag, - Tag, - BetweenAttributes, - EmptyTag, - AttributeName, - AttributeBeforeEquals, - AttributeAfterEquals, - AttributeValue, - Comment, - QuotedAttributeValue, - ServerSideCode, - PcData - } - - private void IncrementPosition() - { - if (_crc32 != null) - { - // REVIEW: should we add some checksum code in DecrementPosition too? - _crc32.AddToCRC32(_c); - } - - _index++; - _maxlineposition = _lineposition; - if (_c == 10) - { - _lineposition = 1; - _line++; - } - else - { - _lineposition++; - } - } - - private void DecrementPosition() - { - _index--; - if (_lineposition == 1) - { - _lineposition = _maxlineposition; - _line--; - } - else - { - _lineposition--; - } - } - - private void Parse() - { - int lastquote = 0; - if (OptionComputeChecksum) - { - _crc32 = new Crc32(); - } - - _lastnodes = new Hashtable(); - _c = 0; - _fullcomment = false; - _parseerrors = new ArrayList(); - _line = 1; - _lineposition = 1; - _maxlineposition = 1; - - _state = ParseState.Text; - _oldstate = _state; - _documentnode._innerlength = _text.Length; - _documentnode._outerlength = _text.Length; - _remainderOffset = _text.Length; - - _lastparentnode = _documentnode; - _currentnode = CreateNode(HtmlNodeType.Text, 0); - _currentattribute = null; - - _index = 0; - PushNodeStart(HtmlNodeType.Text, 0); - while (_index<_text.Length) - { - _c = _text[_index]; - IncrementPosition(); - - switch(_state) - { - case ParseState.Text: - if (NewCheck()) - continue; - break; - - case ParseState.WhichTag: - if (NewCheck()) - continue; - if (_c == '/') - { - PushNodeNameStart(false, _index); - } - else - { - PushNodeNameStart(true, _index-1); - DecrementPosition(); - } - _state = ParseState.Tag; - break; - - case ParseState.Tag: - if (NewCheck()) - continue; - if (IsWhiteSpace(_c)) - { - PushNodeNameEnd(_index-1); - if (_state != ParseState.Tag) - continue; - _state = ParseState.BetweenAttributes; - continue; - } - if (_c == '/') - { - PushNodeNameEnd(_index-1); - if (_state != ParseState.Tag) - continue; - _state = ParseState.EmptyTag; - continue; - } - if (_c == '>') - { - PushNodeNameEnd(_index-1); - if (_state != ParseState.Tag) - continue; - if (!PushNodeEnd(_index, false)) - { - // stop parsing - _index = _text.Length; - break; - } - if (_state != ParseState.Tag) - continue; - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - } - break; - - case ParseState.BetweenAttributes: - if (NewCheck()) - continue; - - if (IsWhiteSpace(_c)) - continue; - - if ((_c == '/') || (_c == '?')) - { - _state = ParseState.EmptyTag; - continue; - } - - if (_c == '>') - { - if (!PushNodeEnd(_index, false)) - { - // stop parsing - _index = _text.Length; - break; - } - - if (_state != ParseState.BetweenAttributes) - continue; - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - continue; - } - - PushAttributeNameStart(_index-1); - _state = ParseState.AttributeName; - break; - - case ParseState.EmptyTag: - if (NewCheck()) - continue; - - if (_c == '>') - { - if (!PushNodeEnd(_index, true)) - { - // stop parsing - _index = _text.Length; - break; - } - - if (_state != ParseState.EmptyTag) - continue; - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - continue; - } - _state = ParseState.BetweenAttributes; - break; - - case ParseState.AttributeName: - if (NewCheck()) - continue; - - if (IsWhiteSpace(_c)) - { - PushAttributeNameEnd(_index-1); - _state = ParseState.AttributeBeforeEquals; - continue; - } - if (_c == '=') - { - PushAttributeNameEnd(_index-1); - _state = ParseState.AttributeAfterEquals; - continue; - } - if (_c == '>') - { - PushAttributeNameEnd(_index-1); - if (!PushNodeEnd(_index, false)) - { - // stop parsing - _index = _text.Length; - break; - } - if (_state != ParseState.AttributeName) - continue; - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - continue; - } - break; - - case ParseState.AttributeBeforeEquals: - if (NewCheck()) - continue; - - if (IsWhiteSpace(_c)) - continue; - if (_c == '>') - { - if (!PushNodeEnd(_index, false)) - { - // stop parsing - _index = _text.Length; - break; - } - if (_state != ParseState.AttributeBeforeEquals) - continue; - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - continue; - } - if (_c == '=') - { - _state = ParseState.AttributeAfterEquals; - continue; - } - // no equals, no whitespace, it's a new attrribute starting - _state = ParseState.BetweenAttributes; - DecrementPosition(); - break; - - case ParseState.AttributeAfterEquals: - if (NewCheck()) - continue; - - if (IsWhiteSpace(_c)) - continue; - - if ((_c == '\'') || (_c == '"')) - { - _state = ParseState.QuotedAttributeValue; - PushAttributeValueStart(_index); - lastquote = _c; - continue; - } - if (_c == '>') - { - if (!PushNodeEnd(_index, false)) - { - // stop parsing - _index = _text.Length; - break; - } - if (_state != ParseState.AttributeAfterEquals) - continue; - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - continue; - } - PushAttributeValueStart(_index-1); - _state = ParseState.AttributeValue; - break; - - case ParseState.AttributeValue: - if (NewCheck()) - continue; - - if (IsWhiteSpace(_c)) - { - PushAttributeValueEnd(_index-1); - _state = ParseState.BetweenAttributes; - continue; - } - - if (_c == '>') - { - PushAttributeValueEnd(_index-1); - if (!PushNodeEnd(_index, false)) - { - // stop parsing - _index = _text.Length; - break; - } - if (_state != ParseState.AttributeValue) - continue; - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - continue; - } - break; - - case ParseState.QuotedAttributeValue: - if (_c == lastquote) - { - PushAttributeValueEnd(_index-1); - _state = ParseState.BetweenAttributes; - continue; - } - if (_c == '<') - { - if (_index<_text.Length) - { - if (_text[_index] == '%') - { - _oldstate = _state; - _state = ParseState.ServerSideCode; - continue; - } - } - } - break; - - case ParseState.Comment: - if (_c == '>') - { - if (_fullcomment) - { - if ((_text[_index-2] != '-') || - (_text[_index-3] != '-')) - { - continue; - } - } - if (!PushNodeEnd(_index, false)) - { - // stop parsing - _index = _text.Length; - break; - } - _state = ParseState.Text; - PushNodeStart(HtmlNodeType.Text, _index); - continue; - } - break; - - case ParseState.ServerSideCode: - if (_c == '%') - { - if (_index<_text.Length) - { - if (_text[_index] == '>') - { - switch(_oldstate) - { - case ParseState.AttributeAfterEquals: - _state = ParseState.AttributeValue; - break; - - case ParseState.BetweenAttributes: - PushAttributeNameEnd(_index+1); - _state = ParseState.BetweenAttributes; - break; - - default: - _state = _oldstate; - break; - } - IncrementPosition(); - } - } - } - break; - - case ParseState.PcData: - // look for </tag + 1 char - - // check buffer end - if ((_currentnode._namelength+3)<=(_text.Length-(_index-1))) - { - if (string.Compare(_text.Substring(_index-1, _currentnode._namelength+2), - "</" + _currentnode.Name, true) == 0) - { - int c = _text[_index-1 + 2 + _currentnode.Name.Length]; - if ((c == '>') || (IsWhiteSpace(c))) - { - // add the script as a text node - HtmlNode script = CreateNode(HtmlNodeType.Text, - _currentnode._outerstartindex + _currentnode._outerlength); - script._outerlength = _index-1 - script._outerstartindex; - _currentnode.AppendChild(script); - - - PushNodeStart(HtmlNodeType.Element, _index-1); - PushNodeNameStart(false, _index-1 +2); - _state = ParseState.Tag; - IncrementPosition(); - } - } - } - break; - } - } - - // finish the current work - if (_currentnode._namestartindex > 0) - { - PushNodeNameEnd(_index); - } - PushNodeEnd(_index, false); - - // we don't need this anymore - _lastnodes.Clear(); - } - - private bool NewCheck() - { - if (_c != '<') - { - return false; - } - if (_index<_text.Length) - { - if (_text[_index] == '%') - { - switch(_state) - { - case ParseState.AttributeAfterEquals: - PushAttributeValueStart(_index-1); - break; - - case ParseState.BetweenAttributes: - PushAttributeNameStart(_index-1); - break; - - case ParseState.WhichTag: - PushNodeNameStart(true, _index-1); - _state = ParseState.Tag; - break; - } - _oldstate = _state; - _state = ParseState.ServerSideCode; - return true; - } - } - - if (!PushNodeEnd(_index-1, true)) - { - // stop parsing - _index = _text.Length; - return true; - } - _state = ParseState.WhichTag; - if ((_index-1) <= (_text.Length-2)) - { - if (_text[_index] == '!') - { - PushNodeStart(HtmlNodeType.Comment, _index-1); - PushNodeNameStart(true, _index); - PushNodeNameEnd(_index+1); - _state = ParseState.Comment; - if (_index<(_text.Length-2)) - { - if ((_text[_index+1] == '-') && - (_text[_index+2] == '-')) - { - _fullcomment = true; - } - else - { - _fullcomment = false; - } - } - return true; - } - } - PushNodeStart(HtmlNodeType.Element, _index-1); - return true; - } - - private void ReadDocumentEncoding(HtmlNode node) - { - if (!OptionReadEncoding) - return; - // format is - // <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" /> - - // when we append a child, we are in node end, so attributes are already populated - if (node._namelength == 4) // quick check, avoids string alloc - { - if (node.Name == "meta") // all nodes names are lowercase - { - HtmlAttribute att = node.Attributes["http-equiv"]; - if (att != null) - { - if (string.Compare(att.Value, "content-type", true) == 0) - { - HtmlAttribute content = node.Attributes["content"]; - if (content != null) - { - string charset = NameValuePairList.GetNameValuePairsValue(content.Value, "charset"); - if (charset != null) - { - _declaredencoding = Encoding.GetEncoding(charset); - if (_onlyDetectEncoding) - { - throw new EncodingFoundException(_declaredencoding); - } - - if (_streamencoding != null) - { - if (_declaredencoding.WindowsCodePage != _streamencoding.WindowsCodePage) - { - AddError( - HtmlParseErrorCode.CharsetMismatch, - _line, _lineposition, - _index, node.OuterHtml, - "Encoding mismatch between StreamEncoding: " + - _streamencoding.WebName + " and DeclaredEncoding: " + _declaredencoding.WebName); - } - } - } - } - } - } - } - } - } - - private void PushAttributeNameStart(int index) - { - _currentattribute = CreateAttribute(); - _currentattribute._namestartindex = index; - _currentattribute._line = _line; - _currentattribute._lineposition = _lineposition; - _currentattribute._streamposition = index; - } - - private void PushAttributeNameEnd(int index) - { - _currentattribute._namelength = index - _currentattribute._namestartindex; - _currentnode.Attributes.Append(_currentattribute); - } - - private void PushAttributeValueStart(int index) - { - _currentattribute._valuestartindex = index; - } - - private void PushAttributeValueEnd(int index) - { - _currentattribute._valuelength = index - _currentattribute._valuestartindex; - } - - private void PushNodeStart(HtmlNodeType type, int index) - { - _currentnode = CreateNode(type, index); - _currentnode._line = _line; - _currentnode._lineposition = _lineposition; - if (type == HtmlNodeType.Element) - { - _currentnode._lineposition--; - } - _currentnode._streamposition = index; - } - - private bool PushNodeEnd(int index, bool close) - { - _currentnode._outerlength = index - _currentnode._outerstartindex; - - if ((_currentnode._nodetype == HtmlNodeType.Text) || - (_currentnode._nodetype == HtmlNodeType.Comment)) - { - // forget about void nodes - if (_currentnode._outerlength>0) - { - _currentnode._innerlength = _currentnode._outerlength; - _currentnode._innerstartindex = _currentnode._outerstartindex; - if (_lastparentnode != null) - { - _lastparentnode.AppendChild(_currentnode); - } - } - } - else - { - if ((_currentnode._starttag) && (_lastparentnode != _currentnode)) - { - // add to parent node - if (_lastparentnode != null) - { - _lastparentnode.AppendChild(_currentnode); - } - - ReadDocumentEncoding(_currentnode); - - // remember last node of this kind - HtmlNode prev = (HtmlNode)_lastnodes[_currentnode.Name]; - _currentnode._prevwithsamename = prev; - _lastnodes[_currentnode.Name] = _currentnode; - - // change parent? - if ((_currentnode.NodeType == HtmlNodeType.Document) || - (_currentnode.NodeType == HtmlNodeType.Element)) - { - _lastparentnode = _currentnode; - } - - if (HtmlNode.IsCDataElement(CurrentNodeName())) - { - _state = ParseState.PcData; - return true; - } - - if ((HtmlNode.IsClosedElement(_currentnode.Name)) || - (HtmlNode.IsEmptyElement(_currentnode.Name))) - { - close = true; - } - } - } - - if ((close) || (!_currentnode._starttag)) - { - if ((OptionStopperNodeName != null) && (_remainder == null) && - (string.Compare(_currentnode.Name, OptionStopperNodeName, true) == 0)) - { - _remainderOffset = index; - _remainder = _text.Substring(_remainderOffset); - CloseCurrentNode(); - return false; // stop parsing - } - CloseCurrentNode(); - } - return true; - } - - private void PushNodeNameStart(bool starttag, int index) - { - _currentnode._starttag = starttag; - _currentnode._namestartindex = index; - } - - private string[] GetResetters(string name) - { - switch (name) - { - case "li": - return new string[]{"ul"}; - - case "tr": - return new string[]{"table"}; - - case "th": - case "td": - return new string[]{"tr", "table"}; - - default: - return null; - } - } - - private void FixNestedTags() - { - // we are only interested by start tags, not closing tags - if (!_currentnode._starttag) - return; - - string name = CurrentNodeName().ToLower(); - FixNestedTag(name, GetResetters(name)); - } - - private void FixNestedTag(string name, string[] resetters) - { - if (resetters == null) - return; - - HtmlNode prev; - - // if we find a previous unclosed same name node, without a resetter node between, we must close it - prev = (HtmlNode)_lastnodes[name]; - if ((prev != null) && (!prev.Closed)) - { - - // try to find a resetter node, if found, we do nothing - if (FindResetterNodes(prev, resetters)) - { - return; - } - - // ok we need to close the prev now - // create a fake closer node - HtmlNode close = new HtmlNode(prev.NodeType, this, -1); - close._endnode = close; - prev.CloseNode(close); - - } - } - - private bool FindResetterNodes(HtmlNode node, string[] names) - { - if (names == null) - { - return false; - } - for(int i=0;i<names.Length;i++) - { - if (FindResetterNode(node, names[i]) != null) - { - return true; - } - } - return false; - } - - private HtmlNode FindResetterNode(HtmlNode node, string name) - { - HtmlNode resetter = (HtmlNode)_lastnodes[name]; - if (resetter == null) - return null; - if (resetter.Closed) - { - return null; - } - if (resetter._streamposition<node._streamposition) - { - return null; - } - return resetter; - } - - private void PushNodeNameEnd(int index) - { - _currentnode._namelength = index - _currentnode._namestartindex; - if (OptionFixNestedTags) - { - FixNestedTags(); - } - } - - private void CloseCurrentNode() - { - if (_currentnode.Closed) // text or document are by def closed - return; - - bool error = false; - - // find last node of this kind - HtmlNode prev = (HtmlNode)_lastnodes[_currentnode.Name]; - if (prev == null) - { - if (HtmlNode.IsClosedElement(_currentnode.Name)) - { - // </br> will be seen as <br> - _currentnode.CloseNode(_currentnode); - - // add to parent node - if (_lastparentnode != null) - { - HtmlNode foundNode = null; - Stack futureChild = new Stack(); - for (HtmlNode node = _lastparentnode.LastChild; node != null; node = node.PreviousSibling) - { - if ((node.Name == _currentnode.Name) && (! node.HasChildNodes)) - { - foundNode = node; - break; - } - futureChild.Push(node); - } - if (foundNode != null) - { - HtmlNode node = null; - while(futureChild.Count != 0) - { - node = (HtmlNode)futureChild.Pop(); - _lastparentnode.RemoveChild(node); - foundNode.AppendChild(node); - } - } - else - { - _lastparentnode.AppendChild(_currentnode); - } - - } - } - else - { - // node has no parent - // node is not a closed node - - if (HtmlNode.CanOverlapElement(_currentnode.Name)) - { - // this is a hack: add it as a text node - HtmlNode closenode = CreateNode(HtmlNodeType.Text, _currentnode._outerstartindex); - closenode._outerlength = _currentnode._outerlength; - ((HtmlTextNode)closenode).Text = ((HtmlTextNode)closenode).Text.ToLower(); - if (_lastparentnode != null) - { - _lastparentnode.AppendChild(closenode); - } - - } - else - { - if (HtmlNode.IsEmptyElement(_currentnode.Name)) - { - AddError( - HtmlParseErrorCode.EndTagNotRequired, - _currentnode._line, _currentnode._lineposition, - _currentnode._streamposition, _currentnode.OuterHtml, - "End tag </" + _currentnode.Name + "> is not required"); - } - else - { - // node cannot overlap, node is not empty - AddError( - HtmlParseErrorCode.TagNotOpened, - _currentnode._line, _currentnode._lineposition, - _currentnode._streamposition, _currentnode.OuterHtml, - "Start tag <" + _currentnode.Name + "> was not found"); - error = true; - } - } - } - } - else - { - if (OptionFixNestedTags) - { - if (FindResetterNodes(prev, GetResetters(_currentnode.Name))) - { - AddError( - HtmlParseErrorCode.EndTagInvalidHere, - _currentnode._line, _currentnode._lineposition, - _currentnode._streamposition, _currentnode.OuterHtml, - "End tag </" + _currentnode.Name + "> invalid here"); - error = true; - } - } - - if (!error) - { - _lastnodes[_currentnode.Name] = prev._prevwithsamename; - prev.CloseNode(_currentnode); - } - } - - - // we close this node, get grandparent - if (!error) - { - if ((_lastparentnode != null) && - ((!HtmlNode.IsClosedElement(_currentnode.Name)) || - (_currentnode._starttag))) - { - UpdateLastParentNode(); - } - } - } - - internal void UpdateLastParentNode() - { - do - { - if (_lastparentnode.Closed) - { - _lastparentnode = _lastparentnode.ParentNode; - } - } - while ((_lastparentnode != null) && (_lastparentnode.Closed)); - if (_lastparentnode == null) - { - _lastparentnode = _documentnode; - } - } - - private string CurrentAttributeName() - { - return _text.Substring(_currentattribute._namestartindex, _currentattribute._namelength); - } - - private string CurrentAttributeValue() - { - return _text.Substring(_currentattribute._valuestartindex, _currentattribute._valuelength); - } - - private string CurrentNodeName() - { - return _text.Substring(_currentnode._namestartindex, _currentnode._namelength); - } - - private string CurrentNodeOuter() - { - return _text.Substring(_currentnode._outerstartindex, _currentnode._outerlength); - } - - private string CurrentNodeInner() - { - return _text.Substring(_currentnode._innerstartindex, _currentnode._innerlength); - } - - /// <summary> - /// Determines if the specified character is considered as a whitespace character. - /// </summary> - /// <param name="c">The character to check.</param> - /// <returns>true if if the specified character is considered as a whitespace character.</returns> - public static bool IsWhiteSpace(int c) - { - if ((c == 10) || (c == 13) || (c == 32) || (c == 9)) - { - return true; - } - return false; - } - - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; +using System.Text; +using System.Diagnostics; +using System.Collections; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.XPath; + +namespace HtmlAgilityPack +{ + + /// <summary> + /// Represents a complete HTML document. + /// </summary> + public class HtmlDocument: IXPathNavigable + { + internal static readonly string HtmlExceptionRefNotChild = "Reference node must be a child of this node"; + internal static readonly string HtmlExceptionUseIdAttributeFalse = "You need to set UseIdAttribute property to true to enable this feature"; + + internal Hashtable _openednodes; + internal Hashtable _lastnodes = new Hashtable(); + internal Hashtable _nodesid; + private HtmlNode _documentnode; + internal string _text; + private string _remainder; + private int _remainderOffset; + private HtmlNode _currentnode; + private HtmlNode _lastparentnode; + private HtmlAttribute _currentattribute; + private int _index; + private int _line; + private int _lineposition, _maxlineposition; + private int _c; + private bool _fullcomment; + private System.Text.Encoding _streamencoding; + private System.Text.Encoding _declaredencoding; + private ArrayList _parseerrors = new ArrayList(); + private ParseState _state, _oldstate; + private Crc32 _crc32 = null; + private bool _onlyDetectEncoding = false; + + // public props + + /// <summary> + /// Defines if a checksum must be computed for the document while parsing. Default is false. + /// </summary> + public bool OptionComputeChecksum = false; + + /// <summary> + /// Defines if declared encoding must be read from the document. + /// Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + /// Default is true. + /// </summary> + public bool OptionReadEncoding = true; + + + /// <summary> + /// Defines if non closed nodes will be checked at the end of parsing. Default is true. + /// </summary> + public bool OptionCheckSyntax = true; + + /// <summary> + /// Defines if the 'id' attribute must be specifically used. Default is true. + /// </summary> + public bool OptionUseIdAttribute = true; + + /// <summary> + /// Defines if empty nodes must be written as closed during output. Default is false. + /// </summary> + public bool OptionWriteEmptyNodes = false; + + /// <summary> + /// Defines if output must conform to XML, instead of HTML. + /// </summary> + public bool OptionOutputAsXml = false; + + /// <summary> + /// Defines if name must be output in uppercase. Default is false. + /// </summary> + public bool OptionOutputUpperCase = false; + + /// <summary> + /// Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. + /// </summary> + public bool OptionOutputOptimizeAttributeValues = false; + + /// <summary> + /// Adds Debugging attributes to node. Default is false. + /// </summary> + public bool OptionAddDebuggingAttributes = false; + + /// <summary> + /// Defines if source text must be extracted while parsing errors. + /// If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. + /// Default is false. + /// </summary> + public bool OptionExtractErrorSourceText = false; // turning this on can dramatically slow performance if a lot of errors are detected + + /// <summary> + /// Defines if closing for non closed nodes must be done at the end or directly in the document. + /// Setting this to true can actually change how browsers render the page. Default is false. + /// </summary> + public bool OptionAutoCloseOnEnd = false; // close errors at the end + + /// <summary> + /// Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. + /// </summary> + public bool OptionFixNestedTags = false; // fix li, tr, th, td tags + + /// <summary> + /// Defines the maximum length of source text or parse errors. Default is 100. + /// </summary> + public int OptionExtractErrorSourceTextMaxLength = 100; + + /// <summary> + /// Defines the default stream encoding to use. Default is System.Text.Encoding.Default. + /// </summary> + public System.Text.Encoding OptionDefaultStreamEncoding = System.Text.Encoding.Default; + + /// <summary> + /// Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. + /// </summary> + public string OptionStopperNodeName = null; + + /// <summary> + /// Gets the remaining text. + /// Will always be null if OptionStopperNodeName is null. + /// </summary> + public string Remainder + { + get + { + return _remainder; + } + } + + /// <summary> + /// Gets the offset of Remainder in the original Html text. + /// If OptionStopperNodeName is null, this will return the length of the original Html text. + /// </summary> + public int RemainderOffset + { + get + { + return _remainderOffset; + } + } + + /// <summary> + /// Gets a list of parse errors found in the document. + /// </summary> + public ArrayList ParseErrors + { + get + { + return _parseerrors; + } + } + + /// <summary> + /// Gets the document's stream encoding. + /// </summary> + public System.Text.Encoding StreamEncoding + { + get + { + return _streamencoding; + } + } + + /// <summary> + /// Gets the document's declared encoding. + /// Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + /// </summary> + public System.Text.Encoding DeclaredEncoding + { + get + { + return _declaredencoding; + } + } + + /// <summary> + /// Creates an instance of an HTML document. + /// </summary> + public HtmlDocument() + { + _documentnode = CreateNode(HtmlNodeType.Document, 0); + } + + internal HtmlNode GetXmlDeclaration() + { + if (!_documentnode.HasChildNodes) + { + return null; + } + + foreach(HtmlNode node in _documentnode._childnodes) + { + if (node.Name == "?xml") // it's ok, names are case sensitive + { + return node; + } + } + return null; + } + + /// <summary> + /// Applies HTML encoding to a specified string. + /// </summary> + /// <param name="html">The input string to encode. May not be null.</param> + /// <returns>The encoded string.</returns> + public static string HtmlEncode(string html) + { + if (html == null) + { + throw new ArgumentNullException("html"); + } + // replace & by & but only once! + Regex rx = new Regex("&(?!(amp;)|(lt;)|(gt;)|(quot;))", RegexOptions.IgnoreCase); + return rx.Replace(html, "&").Replace("<", "<").Replace(">", ">").Replace("\"", """); + } + + /// <summary> + /// Detects the encoding of an HTML stream. + /// </summary> + /// <param name="stream">The input stream. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncoding(Stream stream) + { + if (stream == null) + { + throw new ArgumentNullException("stream"); + } + return DetectEncoding(new StreamReader(stream)); + } + + /// <summary> + /// Detects the encoding of an HTML file. + /// </summary> + /// <param name="path">Path for the file containing the HTML document to detect. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncoding(string path) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + StreamReader sr = new StreamReader(path, OptionDefaultStreamEncoding); + Encoding encoding = DetectEncoding(sr); + sr.Close(); + return encoding; + } + + /// <summary> + /// Detects the encoding of an HTML text. + /// </summary> + /// <param name="html">The input html text. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncodingHtml(string html) + { + if (html == null) + { + throw new ArgumentNullException("html"); + } + StringReader sr = new StringReader(html); + Encoding encoding = DetectEncoding(sr); + sr.Close(); + return encoding; + } + + /// <summary> + /// Detects the encoding of an HTML text provided on a TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncoding(TextReader reader) + { + if (reader == null) + { + throw new ArgumentNullException("reader"); + } + _onlyDetectEncoding = true; + if (OptionCheckSyntax) + { + _openednodes = new Hashtable(); + } + else + { + _openednodes = null; + } + + if (OptionUseIdAttribute) + { + _nodesid = new Hashtable(); + } + else + { + _nodesid = null; + } + + StreamReader sr = reader as StreamReader; + if (sr != null) + { + _streamencoding = sr.CurrentEncoding; + } + else + { + _streamencoding = null; + } + _declaredencoding = null; + + _text = reader.ReadToEnd(); + _documentnode = CreateNode(HtmlNodeType.Document, 0); + + // this is almost a hack, but it allows us not to muck with the original parsing code + try + { + Parse(); + } + catch(EncodingFoundException ex) + { + return ex.Encoding; + } + return null; + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + public void Load(Stream stream) + { + Load(new StreamReader(stream, OptionDefaultStreamEncoding)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public void Load(Stream stream, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Load(Stream stream, Encoding encoding) + { + Load(new StreamReader(stream, encoding)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks, buffersize)); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + public void Load(string path) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + StreamReader sr = new StreamReader(path, OptionDefaultStreamEncoding); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, bool detectEncodingFromByteOrderMarks) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + StreamReader sr = new StreamReader(path, detectEncodingFromByteOrderMarks); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + public void Load(string path, Encoding encoding) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamReader sr = new StreamReader(path, encoding); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamReader sr = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamReader sr = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks, buffersize); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads the HTML document from the specified string. + /// </summary> + /// <param name="html">String containing the HTML document to load. May not be null.</param> + public void LoadHtml(string html) + { + if (html == null) + { + throw new ArgumentNullException("html"); + } + StringReader sr = new StringReader(html); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Detects the encoding of an HTML document from a file first, and then loads the file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + public void DetectEncodingAndLoad(string path) + { + DetectEncodingAndLoad(path, true); + } + + /// <summary> + /// Detects the encoding of an HTML document from a file first, and then loads the file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="detectEncoding">true to detect encoding, false otherwise.</param> + public void DetectEncodingAndLoad(string path, bool detectEncoding) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + System.Text.Encoding enc; + if (detectEncoding) + { + enc = DetectEncoding(path); + } + else + { + enc = null; + } + + if (enc == null) + { + Load(path); + } + else + { + Load(path, enc); + } + } + + /// <summary> + /// Loads the HTML document from the specified TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML data into the document. May not be null.</param> + public void Load(TextReader reader) + { + // all Load methods pass down to this one + if (reader == null) + { + throw new ArgumentNullException("reader"); + } + + _onlyDetectEncoding = false; + + if (OptionCheckSyntax) + { + _openednodes = new Hashtable(); + } + else + { + _openednodes = null; + } + + if (OptionUseIdAttribute) + { + _nodesid = new Hashtable(); + } + else + { + _nodesid = null; + } + + StreamReader sr = reader as StreamReader; + if (sr != null) + { + try + { + // trigger bom read if needed + sr.Peek(); + } + catch + { + // void on purpose + } + _streamencoding = sr.CurrentEncoding; + } + else + { + _streamencoding = null; + } + _declaredencoding = null; + + _text = reader.ReadToEnd(); + _documentnode = CreateNode(HtmlNodeType.Document, 0); + Parse(); + + if (OptionCheckSyntax) + { + foreach(HtmlNode node in _openednodes.Values) + { + if (!node._starttag) // already reported + { + continue; + } + + string html; + if (OptionExtractErrorSourceText) + { + html = node.OuterHtml; + if (html.Length > OptionExtractErrorSourceTextMaxLength) + { + html = html.Substring(0, OptionExtractErrorSourceTextMaxLength); + } + } + else + { + html = string.Empty; + } + AddError( + HtmlParseErrorCode.TagNotClosed, + node._line, node._lineposition, + node._streamposition, html, + "End tag </" + node.Name + "> was not found"); + } + + // we don't need this anymore + _openednodes.Clear(); + } + } + + internal System.Text.Encoding GetOutEncoding() + { + // when unspecified, use the stream encoding first + if (_declaredencoding != null) + { + return _declaredencoding; + } + else + { + if (_streamencoding != null) + { + return _streamencoding; + } + } + return OptionDefaultStreamEncoding; + } + + + /// <summary> + /// Gets the document's output encoding. + /// </summary> + public System.Text.Encoding Encoding + { + get + { + return GetOutEncoding(); + } + } + + /// <summary> + /// Saves the HTML document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save.</param> + public void Save(Stream outStream) + { + StreamWriter sw = new StreamWriter(outStream, GetOutEncoding()); + Save(sw); + } + + /// <summary> + /// Saves the HTML document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + public void Save(Stream outStream, System.Text.Encoding encoding) + { + if (outStream == null) + { + throw new ArgumentNullException("outStream"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamWriter sw = new StreamWriter(outStream, encoding); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document.</param> + public void Save(string filename) + { + StreamWriter sw = new StreamWriter(filename, false, GetOutEncoding()); + Save(sw); + sw.Close(); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + public void Save(string filename, System.Text.Encoding encoding) + { + if (filename == null) + { + throw new ArgumentNullException("filename"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamWriter sw = new StreamWriter(filename, false, encoding); + Save(sw); + sw.Close(); + } + + /// <summary> + /// Saves the HTML document to the specified StreamWriter. + /// </summary> + /// <param name="writer">The StreamWriter to which you want to save.</param> + public void Save(StreamWriter writer) + { + Save((TextWriter)writer); + } + + /// <summary> + /// Saves the HTML document to the specified TextWriter. + /// </summary> + /// <param name="writer">The TextWriter to which you want to save. May not be null.</param> + public void Save(TextWriter writer) + { + if (writer == null) + { + throw new ArgumentNullException("writer"); + } + DocumentNode.WriteTo(writer); + } + + /// <summary> + /// Saves the HTML document to the specified XmlWriter. + /// </summary> + /// <param name="writer">The XmlWriter to which you want to save.</param> + public void Save(XmlWriter writer) + { + DocumentNode.WriteTo(writer); + writer.Flush(); + } + + /// <summary> + /// Creates a new XPathNavigator object for navigating this HTML document. + /// </summary> + /// <returns>An XPathNavigator object. The XPathNavigator is positioned on the root of the document.</returns> + public XPathNavigator CreateNavigator() + { + return new HtmlNodeNavigator(this, _documentnode); + } + + /// <summary> + /// Gets a valid XML name. + /// </summary> + /// <param name="name">Any text.</param> + /// <returns>A string that is a valid XML name.</returns> + public static string GetXmlName(string name) + { + string xmlname = string.Empty; + bool nameisok = true; + for(int i=0;i<name.Length;i++) + { + // names are lcase + // note: we are very limited here, too much? + if (((name[i]>='a') && (name[i]<='z')) || + ((name[i]>='0') && (name[i]<='9')) || + // (name[i]==':') || (name[i]=='_') || (name[i]=='-') || (name[i]=='.')) // these are bads in fact + (name[i]=='_') || (name[i]=='-') || (name[i]=='.')) + { + xmlname += name[i]; + } + else + { + nameisok = false; + byte[] bytes = System.Text.Encoding.UTF8.GetBytes(new char[]{name[i]}); + for(int j=0;j<bytes.Length;j++) + { + xmlname += bytes[j].ToString("x2"); + } + xmlname += "_"; + } + + } + if (nameisok) + { + return xmlname; + } + return "_" + xmlname; + } + + internal void SetIdForNode(HtmlNode node, string id) + { + if (!OptionUseIdAttribute) + { + return; + } + + if ((_nodesid == null) || (id == null)) + { + return; + } + + if (node == null) + { + _nodesid.Remove(id.ToLower()); + } + else + { + _nodesid[id.ToLower()] = node; + } + } + + /// <summary> + /// Gets the HTML node with the specified 'id' attribute value. + /// </summary> + /// <param name="id">The attribute id to match. May not be null.</param> + /// <returns>The HTML node with the matching id or null if not found.</returns> + public HtmlNode GetElementbyId(string id) + { + if (id == null) + { + throw new ArgumentNullException("id"); + } + if (_nodesid == null) + { + throw new Exception(HtmlExceptionUseIdAttributeFalse); + } + + return _nodesid[id.ToLower()] as HtmlNode; + } + + /// <summary> + /// Creates an HTML element node with the specified name. + /// </summary> + /// <param name="name">The qualified name of the element. May not be null.</param> + /// <returns>The new HTML node.</returns> + public HtmlNode CreateElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlNode node = CreateNode(HtmlNodeType.Element); + node._name = name; + return node; + } + + /// <summary> + /// Creates an HTML comment node. + /// </summary> + /// <returns>The new HTML comment node.</returns> + public HtmlCommentNode CreateComment() + { + return (HtmlCommentNode)CreateNode(HtmlNodeType.Comment); + } + + /// <summary> + /// Creates an HTML comment node with the specified comment text. + /// </summary> + /// <param name="comment">The comment text. May not be null.</param> + /// <returns>The new HTML comment node.</returns> + public HtmlCommentNode CreateComment(string comment) + { + if (comment == null) + { + throw new ArgumentNullException("comment"); + } + HtmlCommentNode c = CreateComment(); + c.Comment = comment; + return c; + } + + /// <summary> + /// Creates an HTML text node. + /// </summary> + /// <returns>The new HTML text node.</returns> + public HtmlTextNode CreateTextNode() + { + return (HtmlTextNode)CreateNode(HtmlNodeType.Text); + } + + /// <summary> + /// Creates an HTML text node with the specified text. + /// </summary> + /// <param name="text">The text of the node. May not be null.</param> + /// <returns>The new HTML text node.</returns> + public HtmlTextNode CreateTextNode(string text) + { + if (text == null) + { + throw new ArgumentNullException("text"); + } + HtmlTextNode t = CreateTextNode(); + t.Text = text; + return t; + } + + internal HtmlNode CreateNode(HtmlNodeType type) + { + return CreateNode(type, -1); + } + + internal HtmlNode CreateNode(HtmlNodeType type, int index) + { + switch (type) + { + case HtmlNodeType.Comment: + return new HtmlCommentNode(this, index); + + case HtmlNodeType.Text: + return new HtmlTextNode(this, index); + + default: + return new HtmlNode(type, this, index); + } + } + + internal HtmlAttribute CreateAttribute() + { + return new HtmlAttribute(this); + } + + /// <summary> + /// Creates an HTML attribute with the specified name. + /// </summary> + /// <param name="name">The name of the attribute. May not be null.</param> + /// <returns>The new HTML attribute.</returns> + public HtmlAttribute CreateAttribute(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlAttribute att = CreateAttribute(); + att.Name = name; + return att; + } + + /// <summary> + /// Creates an HTML attribute with the specified name. + /// </summary> + /// <param name="name">The name of the attribute. May not be null.</param> + /// <param name="value">The value of the attribute.</param> + /// <returns>The new HTML attribute.</returns> + public HtmlAttribute CreateAttribute(string name, string value) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlAttribute att = CreateAttribute(name); + att.Value = value; + return att; + } + + /// <summary> + /// Gets the root node of the document. + /// </summary> + public HtmlNode DocumentNode + { + get + { + return _documentnode; + } + } + + /// <summary> + /// Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. + /// </summary> + public int CheckSum + { + get + { + if (_crc32 == null) + { + return 0; + } + else + { + return (int)_crc32.CheckSum; + } + } + } + + private HtmlParseError AddError( + HtmlParseErrorCode code, + int line, + int linePosition, + int streamPosition, + string sourceText, + string reason) + { + HtmlParseError err = new HtmlParseError(code, line, linePosition, streamPosition, sourceText, reason); + _parseerrors.Add(err); + return err; + } + + + private enum ParseState + { + Text, + WhichTag, + Tag, + BetweenAttributes, + EmptyTag, + AttributeName, + AttributeBeforeEquals, + AttributeAfterEquals, + AttributeValue, + Comment, + QuotedAttributeValue, + ServerSideCode, + PcData + } + + private void IncrementPosition() + { + if (_crc32 != null) + { + // REVIEW: should we add some checksum code in DecrementPosition too? + _crc32.AddToCRC32(_c); + } + + _index++; + _maxlineposition = _lineposition; + if (_c == 10) + { + _lineposition = 1; + _line++; + } + else + { + _lineposition++; + } + } + + private void DecrementPosition() + { + _index--; + if (_lineposition == 1) + { + _lineposition = _maxlineposition; + _line--; + } + else + { + _lineposition--; + } + } + + private void Parse() + { + int lastquote = 0; + if (OptionComputeChecksum) + { + _crc32 = new Crc32(); + } + + _lastnodes = new Hashtable(); + _c = 0; + _fullcomment = false; + _parseerrors = new ArrayList(); + _line = 1; + _lineposition = 1; + _maxlineposition = 1; + + _state = ParseState.Text; + _oldstate = _state; + _documentnode._innerlength = _text.Length; + _documentnode._outerlength = _text.Length; + _remainderOffset = _text.Length; + + _lastparentnode = _documentnode; + _currentnode = CreateNode(HtmlNodeType.Text, 0); + _currentattribute = null; + + _index = 0; + PushNodeStart(HtmlNodeType.Text, 0); + while (_index<_text.Length) + { + _c = _text[_index]; + IncrementPosition(); + + switch(_state) + { + case ParseState.Text: + if (NewCheck()) + continue; + break; + + case ParseState.WhichTag: + if (NewCheck()) + continue; + if (_c == '/') + { + PushNodeNameStart(false, _index); + } + else + { + PushNodeNameStart(true, _index-1); + DecrementPosition(); + } + _state = ParseState.Tag; + break; + + case ParseState.Tag: + if (NewCheck()) + continue; + if (IsWhiteSpace(_c)) + { + PushNodeNameEnd(_index-1); + if (_state != ParseState.Tag) + continue; + _state = ParseState.BetweenAttributes; + continue; + } + if (_c == '/') + { + PushNodeNameEnd(_index-1); + if (_state != ParseState.Tag) + continue; + _state = ParseState.EmptyTag; + continue; + } + if (_c == '>') + { + PushNodeNameEnd(_index-1); + if (_state != ParseState.Tag) + continue; + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.Tag) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + } + break; + + case ParseState.BetweenAttributes: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + continue; + + if ((_c == '/') || (_c == '?')) + { + _state = ParseState.EmptyTag; + continue; + } + + if (_c == '>') + { + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + + if (_state != ParseState.BetweenAttributes) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + + PushAttributeNameStart(_index-1); + _state = ParseState.AttributeName; + break; + + case ParseState.EmptyTag: + if (NewCheck()) + continue; + + if (_c == '>') + { + if (!PushNodeEnd(_index, true)) + { + // stop parsing + _index = _text.Length; + break; + } + + if (_state != ParseState.EmptyTag) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + _state = ParseState.BetweenAttributes; + break; + + case ParseState.AttributeName: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + { + PushAttributeNameEnd(_index-1); + _state = ParseState.AttributeBeforeEquals; + continue; + } + if (_c == '=') + { + PushAttributeNameEnd(_index-1); + _state = ParseState.AttributeAfterEquals; + continue; + } + if (_c == '>') + { + PushAttributeNameEnd(_index-1); + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeName) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + break; + + case ParseState.AttributeBeforeEquals: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + continue; + if (_c == '>') + { + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeBeforeEquals) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + if (_c == '=') + { + _state = ParseState.AttributeAfterEquals; + continue; + } + // no equals, no whitespace, it's a new attrribute starting + _state = ParseState.BetweenAttributes; + DecrementPosition(); + break; + + case ParseState.AttributeAfterEquals: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + continue; + + if ((_c == '\'') || (_c == '"')) + { + _state = ParseState.QuotedAttributeValue; + PushAttributeValueStart(_index); + lastquote = _c; + continue; + } + if (_c == '>') + { + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeAfterEquals) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + PushAttributeValueStart(_index-1); + _state = ParseState.AttributeValue; + break; + + case ParseState.AttributeValue: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + { + PushAttributeValueEnd(_index-1); + _state = ParseState.BetweenAttributes; + continue; + } + + if (_c == '>') + { + PushAttributeValueEnd(_index-1); + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeValue) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + break; + + case ParseState.QuotedAttributeValue: + if (_c == lastquote) + { + PushAttributeValueEnd(_index-1); + _state = ParseState.BetweenAttributes; + continue; + } + if (_c == '<') + { + if (_index<_text.Length) + { + if (_text[_index] == '%') + { + _oldstate = _state; + _state = ParseState.ServerSideCode; + continue; + } + } + } + break; + + case ParseState.Comment: + if (_c == '>') + { + if (_fullcomment) + { + if ((_text[_index-2] != '-') || + (_text[_index-3] != '-')) + { + continue; + } + } + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + break; + + case ParseState.ServerSideCode: + if (_c == '%') + { + if (_index<_text.Length) + { + if (_text[_index] == '>') + { + switch(_oldstate) + { + case ParseState.AttributeAfterEquals: + _state = ParseState.AttributeValue; + break; + + case ParseState.BetweenAttributes: + PushAttributeNameEnd(_index+1); + _state = ParseState.BetweenAttributes; + break; + + default: + _state = _oldstate; + break; + } + IncrementPosition(); + } + } + } + break; + + case ParseState.PcData: + // look for </tag + 1 char + + // check buffer end + if ((_currentnode._namelength+3)<=(_text.Length-(_index-1))) + { + if (string.Compare(_text.Substring(_index-1, _currentnode._namelength+2), + "</" + _currentnode.Name, true) == 0) + { + int c = _text[_index-1 + 2 + _currentnode.Name.Length]; + if ((c == '>') || (IsWhiteSpace(c))) + { + // add the script as a text node + HtmlNode script = CreateNode(HtmlNodeType.Text, + _currentnode._outerstartindex + _currentnode._outerlength); + script._outerlength = _index-1 - script._outerstartindex; + _currentnode.AppendChild(script); + + + PushNodeStart(HtmlNodeType.Element, _index-1); + PushNodeNameStart(false, _index-1 +2); + _state = ParseState.Tag; + IncrementPosition(); + } + } + } + break; + } + } + + // finish the current work + if (_currentnode._namestartindex > 0) + { + PushNodeNameEnd(_index); + } + PushNodeEnd(_index, false); + + // we don't need this anymore + _lastnodes.Clear(); + } + + private bool NewCheck() + { + if (_c != '<') + { + return false; + } + if (_index<_text.Length) + { + if (_text[_index] == '%') + { + switch(_state) + { + case ParseState.AttributeAfterEquals: + PushAttributeValueStart(_index-1); + break; + + case ParseState.BetweenAttributes: + PushAttributeNameStart(_index-1); + break; + + case ParseState.WhichTag: + PushNodeNameStart(true, _index-1); + _state = ParseState.Tag; + break; + } + _oldstate = _state; + _state = ParseState.ServerSideCode; + return true; + } + } + + if (!PushNodeEnd(_index-1, true)) + { + // stop parsing + _index = _text.Length; + return true; + } + _state = ParseState.WhichTag; + if ((_index-1) <= (_text.Length-2)) + { + if (_text[_index] == '!') + { + PushNodeStart(HtmlNodeType.Comment, _index-1); + PushNodeNameStart(true, _index); + PushNodeNameEnd(_index+1); + _state = ParseState.Comment; + if (_index<(_text.Length-2)) + { + if ((_text[_index+1] == '-') && + (_text[_index+2] == '-')) + { + _fullcomment = true; + } + else + { + _fullcomment = false; + } + } + return true; + } + } + PushNodeStart(HtmlNodeType.Element, _index-1); + return true; + } + + private void ReadDocumentEncoding(HtmlNode node) + { + if (!OptionReadEncoding) + return; + // format is + // <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" /> + + // when we append a child, we are in node end, so attributes are already populated + if (node._namelength == 4) // quick check, avoids string alloc + { + if (node.Name == "meta") // all nodes names are lowercase + { + HtmlAttribute att = node.Attributes["http-equiv"]; + if (att != null) + { + if (string.Compare(att.Value, "content-type", true) == 0) + { + HtmlAttribute content = node.Attributes["content"]; + if (content != null) + { + string charset = NameValuePairList.GetNameValuePairsValue(content.Value, "charset"); + if (charset != null) + { + _declaredencoding = Encoding.GetEncoding(charset); + if (_onlyDetectEncoding) + { + throw new EncodingFoundException(_declaredencoding); + } + + if (_streamencoding != null) + { + if (_declaredencoding.WindowsCodePage != _streamencoding.WindowsCodePage) + { + AddError( + HtmlParseErrorCode.CharsetMismatch, + _line, _lineposition, + _index, node.OuterHtml, + "Encoding mismatch between StreamEncoding: " + + _streamencoding.WebName + " and DeclaredEncoding: " + _declaredencoding.WebName); + } + } + } + } + } + } + } + } + } + + private void PushAttributeNameStart(int index) + { + _currentattribute = CreateAttribute(); + _currentattribute._namestartindex = index; + _currentattribute._line = _line; + _currentattribute._lineposition = _lineposition; + _currentattribute._streamposition = index; + } + + private void PushAttributeNameEnd(int index) + { + _currentattribute._namelength = index - _currentattribute._namestartindex; + _currentnode.Attributes.Append(_currentattribute); + } + + private void PushAttributeValueStart(int index) + { + _currentattribute._valuestartindex = index; + } + + private void PushAttributeValueEnd(int index) + { + _currentattribute._valuelength = index - _currentattribute._valuestartindex; + } + + private void PushNodeStart(HtmlNodeType type, int index) + { + _currentnode = CreateNode(type, index); + _currentnode._line = _line; + _currentnode._lineposition = _lineposition; + if (type == HtmlNodeType.Element) + { + _currentnode._lineposition--; + } + _currentnode._streamposition = index; + } + + private bool PushNodeEnd(int index, bool close) + { + _currentnode._outerlength = index - _currentnode._outerstartindex; + + if ((_currentnode._nodetype == HtmlNodeType.Text) || + (_currentnode._nodetype == HtmlNodeType.Comment)) + { + // forget about void nodes + if (_currentnode._outerlength>0) + { + _currentnode._innerlength = _currentnode._outerlength; + _currentnode._innerstartindex = _currentnode._outerstartindex; + if (_lastparentnode != null) + { + _lastparentnode.AppendChild(_currentnode); + } + } + } + else + { + if ((_currentnode._starttag) && (_lastparentnode != _currentnode)) + { + // add to parent node + if (_lastparentnode != null) + { + _lastparentnode.AppendChild(_currentnode); + } + + ReadDocumentEncoding(_currentnode); + + // remember last node of this kind + HtmlNode prev = (HtmlNode)_lastnodes[_currentnode.Name]; + _currentnode._prevwithsamename = prev; + _lastnodes[_currentnode.Name] = _currentnode; + + // change parent? + if ((_currentnode.NodeType == HtmlNodeType.Document) || + (_currentnode.NodeType == HtmlNodeType.Element)) + { + _lastparentnode = _currentnode; + } + + if (HtmlNode.IsCDataElement(CurrentNodeName())) + { + _state = ParseState.PcData; + return true; + } + + if ((HtmlNode.IsClosedElement(_currentnode.Name)) || + (HtmlNode.IsEmptyElement(_currentnode.Name))) + { + close = true; + } + } + } + + if ((close) || (!_currentnode._starttag)) + { + if ((OptionStopperNodeName != null) && (_remainder == null) && + (string.Compare(_currentnode.Name, OptionStopperNodeName, true) == 0)) + { + _remainderOffset = index; + _remainder = _text.Substring(_remainderOffset); + CloseCurrentNode(); + return false; // stop parsing + } + CloseCurrentNode(); + } + return true; + } + + private void PushNodeNameStart(bool starttag, int index) + { + _currentnode._starttag = starttag; + _currentnode._namestartindex = index; + } + + private string[] GetResetters(string name) + { + switch (name) + { + case "li": + return new string[]{"ul"}; + + case "tr": + return new string[]{"table"}; + + case "th": + case "td": + return new string[]{"tr", "table"}; + + default: + return null; + } + } + + private void FixNestedTags() + { + // we are only interested by start tags, not closing tags + if (!_currentnode._starttag) + return; + + string name = CurrentNodeName().ToLower(); + FixNestedTag(name, GetResetters(name)); + } + + private void FixNestedTag(string name, string[] resetters) + { + if (resetters == null) + return; + + HtmlNode prev; + + // if we find a previous unclosed same name node, without a resetter node between, we must close it + prev = (HtmlNode)_lastnodes[name]; + if ((prev != null) && (!prev.Closed)) + { + + // try to find a resetter node, if found, we do nothing + if (FindResetterNodes(prev, resetters)) + { + return; + } + + // ok we need to close the prev now + // create a fake closer node + HtmlNode close = new HtmlNode(prev.NodeType, this, -1); + close._endnode = close; + prev.CloseNode(close); + + } + } + + private bool FindResetterNodes(HtmlNode node, string[] names) + { + if (names == null) + { + return false; + } + for(int i=0;i<names.Length;i++) + { + if (FindResetterNode(node, names[i]) != null) + { + return true; + } + } + return false; + } + + private HtmlNode FindResetterNode(HtmlNode node, string name) + { + HtmlNode resetter = (HtmlNode)_lastnodes[name]; + if (resetter == null) + return null; + if (resetter.Closed) + { + return null; + } + if (resetter._streamposition<node._streamposition) + { + return null; + } + return resetter; + } + + private void PushNodeNameEnd(int index) + { + _currentnode._namelength = index - _currentnode._namestartindex; + if (OptionFixNestedTags) + { + FixNestedTags(); + } + } + + private void CloseCurrentNode() + { + if (_currentnode.Closed) // text or document are by def closed + return; + + bool error = false; + + // find last node of this kind + HtmlNode prev = (HtmlNode)_lastnodes[_currentnode.Name]; + if (prev == null) + { + if (HtmlNode.IsClosedElement(_currentnode.Name)) + { + // </br> will be seen as <br> + _currentnode.CloseNode(_currentnode); + + // add to parent node + if (_lastparentnode != null) + { + HtmlNode foundNode = null; + Stack futureChild = new Stack(); + for (HtmlNode node = _lastparentnode.LastChild; node != null; node = node.PreviousSibling) + { + if ((node.Name == _currentnode.Name) && (! node.HasChildNodes)) + { + foundNode = node; + break; + } + futureChild.Push(node); + } + if (foundNode != null) + { + HtmlNode node = null; + while(futureChild.Count != 0) + { + node = (HtmlNode)futureChild.Pop(); + _lastparentnode.RemoveChild(node); + foundNode.AppendChild(node); + } + } + else + { + _lastparentnode.AppendChild(_currentnode); + } + + } + } + else + { + // node has no parent + // node is not a closed node + + if (HtmlNode.CanOverlapElement(_currentnode.Name)) + { + // this is a hack: add it as a text node + HtmlNode closenode = CreateNode(HtmlNodeType.Text, _currentnode._outerstartindex); + closenode._outerlength = _currentnode._outerlength; + ((HtmlTextNode)closenode).Text = ((HtmlTextNode)closenode).Text.ToLower(); + if (_lastparentnode != null) + { + _lastparentnode.AppendChild(closenode); + } + + } + else + { + if (HtmlNode.IsEmptyElement(_currentnode.Name)) + { + AddError( + HtmlParseErrorCode.EndTagNotRequired, + _currentnode._line, _currentnode._lineposition, + _currentnode._streamposition, _currentnode.OuterHtml, + "End tag </" + _currentnode.Name + "> is not required"); + } + else + { + // node cannot overlap, node is not empty + AddError( + HtmlParseErrorCode.TagNotOpened, + _currentnode._line, _currentnode._lineposition, + _currentnode._streamposition, _currentnode.OuterHtml, + "Start tag <" + _currentnode.Name + "> was not found"); + error = true; + } + } + } + } + else + { + if (OptionFixNestedTags) + { + if (FindResetterNodes(prev, GetResetters(_currentnode.Name))) + { + AddError( + HtmlParseErrorCode.EndTagInvalidHere, + _currentnode._line, _currentnode._lineposition, + _currentnode._streamposition, _currentnode.OuterHtml, + "End tag </" + _currentnode.Name + "> invalid here"); + error = true; + } + } + + if (!error) + { + _lastnodes[_currentnode.Name] = prev._prevwithsamename; + prev.CloseNode(_currentnode); + } + } + + + // we close this node, get grandparent + if (!error) + { + if ((_lastparentnode != null) && + ((!HtmlNode.IsClosedElement(_currentnode.Name)) || + (_currentnode._starttag))) + { + UpdateLastParentNode(); + } + } + } + + internal void UpdateLastParentNode() + { + do + { + if (_lastparentnode.Closed) + { + _lastparentnode = _lastparentnode.ParentNode; + } + } + while ((_lastparentnode != null) && (_lastparentnode.Closed)); + if (_lastparentnode == null) + { + _lastparentnode = _documentnode; + } + } + + private string CurrentAttributeName() + { + return _text.Substring(_currentattribute._namestartindex, _currentattribute._namelength); + } + + private string CurrentAttributeValue() + { + return _text.Substring(_currentattribute._valuestartindex, _currentattribute._valuelength); + } + + private string CurrentNodeName() + { + return _text.Substring(_currentnode._namestartindex, _currentnode._namelength); + } + + private string CurrentNodeOuter() + { + return _text.Substring(_currentnode._outerstartindex, _currentnode._outerlength); + } + + private string CurrentNodeInner() + { + return _text.Substring(_currentnode._innerstartindex, _currentnode._innerlength); + } + + /// <summary> + /// Determines if the specified character is considered as a whitespace character. + /// </summary> + /// <param name="c">The character to check.</param> + /// <returns>true if if the specified character is considered as a whitespace character.</returns> + public static bool IsWhiteSpace(int c) + { + if ((c == 10) || (c == 13) || (c == 32) || (c == 9)) + { + return true; + } + return false; + } + + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs b/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs index 4a2b4ea..d04a059 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs @@ -1,32 +1,32 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Flags that describe the behavior of an Element node. - /// </summary> - public enum HtmlElementFlag - { - /// <summary> - /// The node is a CDATA node. - /// </summary> - CData = 1, - - /// <summary> - /// The node is empty. META or IMG are example of such nodes. - /// </summary> - Empty = 2, - - /// <summary> - /// The node will automatically be closed during parsing. - /// </summary> - Closed = 4, - - /// <summary> - /// The node can overlap. - /// </summary> - CanOverlap = 8 - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Flags that describe the behavior of an Element node. + /// </summary> + public enum HtmlElementFlag + { + /// <summary> + /// The node is a CDATA node. + /// </summary> + CData = 1, + + /// <summary> + /// The node is empty. META or IMG are example of such nodes. + /// </summary> + Empty = 2, + + /// <summary> + /// The node will automatically be closed during parsing. + /// </summary> + Closed = 4, + + /// <summary> + /// The node can overlap. + /// </summary> + CanOverlap = 8 + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs b/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs index 6860c17..3cf906f 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs @@ -1,802 +1,802 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections; -using System.Text; - -namespace HtmlAgilityPack -{ - /// <summary> - /// A utility class to replace special characters by entities and vice-versa. - /// Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html - /// </summary> - public class HtmlEntity - { - private static Hashtable _entityName; - private static Hashtable _entityValue; - private static readonly int _maxEntitySize; - - private HtmlEntity() - { - } - - static HtmlEntity() - { - _entityName = new Hashtable(); - _entityValue = new Hashtable(); - - #region Entities Definition - _entityValue.Add("nbsp", 160); // no-break space = non-breaking space, U+00A0 ISOnum - _entityName.Add(160, "nbsp"); - _entityValue.Add("iexcl", 161); // inverted exclamation mark, U+00A1 ISOnum - _entityName.Add(161, "iexcl"); - _entityValue.Add("cent", 162); // cent sign, U+00A2 ISOnum - _entityName.Add(162, "cent"); - _entityValue.Add("pound", 163); // pound sign, U+00A3 ISOnum - _entityName.Add(163, "pound"); - _entityValue.Add("curren", 164); // currency sign, U+00A4 ISOnum - _entityName.Add(164, "curren"); - _entityValue.Add("yen", 165); // yen sign = yuan sign, U+00A5 ISOnum - _entityName.Add(165, "yen"); - _entityValue.Add("brvbar", 166); // broken bar = broken vertical bar, U+00A6 ISOnum - _entityName.Add(166, "brvbar"); - _entityValue.Add("sect", 167); // section sign, U+00A7 ISOnum - _entityName.Add(167, "sect"); - _entityValue.Add("uml", 168); // diaeresis = spacing diaeresis, U+00A8 ISOdia - _entityName.Add(168, "uml"); - _entityValue.Add("copy", 169); // copyright sign, U+00A9 ISOnum - _entityName.Add(169, "copy"); - _entityValue.Add("ordf", 170); // feminine ordinal indicator, U+00AA ISOnum - _entityName.Add(170, "ordf"); - _entityValue.Add("laquo", 171); // left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum - _entityName.Add(171, "laquo"); - _entityValue.Add("not", 172); // not sign, U+00AC ISOnum - _entityName.Add(172, "not"); - _entityValue.Add("shy", 173); // soft hyphen = discretionary hyphen, U+00AD ISOnum - _entityName.Add(173, "shy"); - _entityValue.Add("reg", 174); // registered sign = registered trade mark sign, U+00AE ISOnum - _entityName.Add(174, "reg"); - _entityValue.Add("macr", 175); // macron = spacing macron = overline = APL overbar, U+00AF ISOdia - _entityName.Add(175, "macr"); - _entityValue.Add("deg", 176); // degree sign, U+00B0 ISOnum - _entityName.Add(176, "deg"); - _entityValue.Add("plusmn", 177); // plus-minus sign = plus-or-minus sign, U+00B1 ISOnum - _entityName.Add(177, "plusmn"); - _entityValue.Add("sup2", 178); // superscript two = superscript digit two = squared, U+00B2 ISOnum - _entityName.Add(178, "sup2"); - _entityValue.Add("sup3", 179); // superscript three = superscript digit three = cubed, U+00B3 ISOnum - _entityName.Add(179, "sup3"); - _entityValue.Add("acute", 180); // acute accent = spacing acute, U+00B4 ISOdia - _entityName.Add(180, "acute"); - _entityValue.Add("micro", 181); // micro sign, U+00B5 ISOnum - _entityName.Add(181, "micro"); - _entityValue.Add("para", 182); // pilcrow sign = paragraph sign, U+00B6 ISOnum - _entityName.Add(182, "para"); - _entityValue.Add("middot", 183); // middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum - _entityName.Add(183, "middot"); - _entityValue.Add("cedil", 184); // cedilla = spacing cedilla, U+00B8 ISOdia - _entityName.Add(184, "cedil"); - _entityValue.Add("sup1", 185); // superscript one = superscript digit one, U+00B9 ISOnum - _entityName.Add(185, "sup1"); - _entityValue.Add("ordm", 186); // masculine ordinal indicator, U+00BA ISOnum - _entityName.Add(186, "ordm"); - _entityValue.Add("raquo", 187); // right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum - _entityName.Add(187, "raquo"); - _entityValue.Add("frac14", 188); // vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum - _entityName.Add(188, "frac14"); - _entityValue.Add("frac12", 189); // vulgar fraction one half = fraction one half, U+00BD ISOnum - _entityName.Add(189, "frac12"); - _entityValue.Add("frac34", 190); // vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum - _entityName.Add(190, "frac34"); - _entityValue.Add("iquest", 191); // inverted question mark = turned question mark, U+00BF ISOnum - _entityName.Add(191, "iquest"); - _entityValue.Add("Agrave", 192); // latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1 - _entityName.Add(192, "Agrave"); - _entityValue.Add("Aacute", 193); // latin capital letter A with acute, U+00C1 ISOlat1 - _entityName.Add(193, "Aacute"); - _entityValue.Add("Acirc", 194); // latin capital letter A with circumflex, U+00C2 ISOlat1 - _entityName.Add(194, "Acirc"); - _entityValue.Add("Atilde", 195); // latin capital letter A with tilde, U+00C3 ISOlat1 - _entityName.Add(195, "Atilde"); - _entityValue.Add("Auml", 196); // latin capital letter A with diaeresis, U+00C4 ISOlat1 - _entityName.Add(196, "Auml"); - _entityValue.Add("Aring", 197); // latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1 - _entityName.Add(197, "Aring"); - _entityValue.Add("AElig", 198); // latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 - _entityName.Add(198, "AElig"); - _entityValue.Add("Ccedil", 199); // latin capital letter C with cedilla, U+00C7 ISOlat1 - _entityName.Add(199, "Ccedil"); - _entityValue.Add("Egrave", 200); // latin capital letter E with grave, U+00C8 ISOlat1 - _entityName.Add(200, "Egrave"); - _entityValue.Add("Eacute", 201); // latin capital letter E with acute, U+00C9 ISOlat1 - _entityName.Add(201, "Eacute"); - _entityValue.Add("Ecirc", 202); // latin capital letter E with circumflex, U+00CA ISOlat1 - _entityName.Add(202, "Ecirc"); - _entityValue.Add("Euml", 203); // latin capital letter E with diaeresis, U+00CB ISOlat1 - _entityName.Add(203, "Euml"); - _entityValue.Add("Igrave", 204); // latin capital letter I with grave, U+00CC ISOlat1 - _entityName.Add(204, "Igrave"); - _entityValue.Add("Iacute", 205); // latin capital letter I with acute, U+00CD ISOlat1 - _entityName.Add(205, "Iacute"); - _entityValue.Add("Icirc", 206); // latin capital letter I with circumflex, U+00CE ISOlat1 - _entityName.Add(206, "Icirc"); - _entityValue.Add("Iuml", 207); // latin capital letter I with diaeresis, U+00CF ISOlat1 - _entityName.Add(207, "Iuml"); - _entityValue.Add("ETH", 208); // latin capital letter ETH, U+00D0 ISOlat1 - _entityName.Add(208, "ETH"); - _entityValue.Add("Ntilde", 209); // latin capital letter N with tilde, U+00D1 ISOlat1 - _entityName.Add(209, "Ntilde"); - _entityValue.Add("Ograve", 210); // latin capital letter O with grave, U+00D2 ISOlat1 - _entityName.Add(210, "Ograve"); - _entityValue.Add("Oacute", 211); // latin capital letter O with acute, U+00D3 ISOlat1 - _entityName.Add(211, "Oacute"); - _entityValue.Add("Ocirc", 212); // latin capital letter O with circumflex, U+00D4 ISOlat1 - _entityName.Add(212, "Ocirc"); - _entityValue.Add("Otilde", 213); // latin capital letter O with tilde, U+00D5 ISOlat1 - _entityName.Add(213, "Otilde"); - _entityValue.Add("Ouml", 214); // latin capital letter O with diaeresis, U+00D6 ISOlat1 - _entityName.Add(214, "Ouml"); - _entityValue.Add("times", 215); // multiplication sign, U+00D7 ISOnum - _entityName.Add(215, "times"); - _entityValue.Add("Oslash", 216); // latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1 - _entityName.Add(216, "Oslash"); - _entityValue.Add("Ugrave", 217); // latin capital letter U with grave, U+00D9 ISOlat1 - _entityName.Add(217, "Ugrave"); - _entityValue.Add("Uacute", 218); // latin capital letter U with acute, U+00DA ISOlat1 - _entityName.Add(218, "Uacute"); - _entityValue.Add("Ucirc", 219); // latin capital letter U with circumflex, U+00DB ISOlat1 - _entityName.Add(219, "Ucirc"); - _entityValue.Add("Uuml", 220); // latin capital letter U with diaeresis, U+00DC ISOlat1 - _entityName.Add(220, "Uuml"); - _entityValue.Add("Yacute", 221); // latin capital letter Y with acute, U+00DD ISOlat1 - _entityName.Add(221, "Yacute"); - _entityValue.Add("THORN", 222); // latin capital letter THORN, U+00DE ISOlat1 - _entityName.Add(222, "THORN"); - _entityValue.Add("szlig", 223); // latin small letter sharp s = ess-zed, U+00DF ISOlat1 - _entityName.Add(223, "szlig"); - _entityValue.Add("agrave", 224); // latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1 - _entityName.Add(224, "agrave"); - _entityValue.Add("aacute", 225); // latin small letter a with acute, U+00E1 ISOlat1 - _entityName.Add(225, "aacute"); - _entityValue.Add("acirc", 226); // latin small letter a with circumflex, U+00E2 ISOlat1 - _entityName.Add(226, "acirc"); - _entityValue.Add("atilde", 227); // latin small letter a with tilde, U+00E3 ISOlat1 - _entityName.Add(227, "atilde"); - _entityValue.Add("auml", 228); // latin small letter a with diaeresis, U+00E4 ISOlat1 - _entityName.Add(228, "auml"); - _entityValue.Add("aring", 229); // latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1 - _entityName.Add(229, "aring"); - _entityValue.Add("aelig", 230); // latin small letter ae = latin small ligature ae, U+00E6 ISOlat1 - _entityName.Add(230, "aelig"); - _entityValue.Add("ccedil", 231); // latin small letter c with cedilla, U+00E7 ISOlat1 - _entityName.Add(231, "ccedil"); - _entityValue.Add("egrave", 232); // latin small letter e with grave, U+00E8 ISOlat1 - _entityName.Add(232, "egrave"); - _entityValue.Add("eacute", 233); // latin small letter e with acute, U+00E9 ISOlat1 - _entityName.Add(233, "eacute"); - _entityValue.Add("ecirc", 234); // latin small letter e with circumflex, U+00EA ISOlat1 - _entityName.Add(234, "ecirc"); - _entityValue.Add("euml", 235); // latin small letter e with diaeresis, U+00EB ISOlat1 - _entityName.Add(235, "euml"); - _entityValue.Add("igrave", 236); // latin small letter i with grave, U+00EC ISOlat1 - _entityName.Add(236, "igrave"); - _entityValue.Add("iacute", 237); // latin small letter i with acute, U+00ED ISOlat1 - _entityName.Add(237, "iacute"); - _entityValue.Add("icirc", 238); // latin small letter i with circumflex, U+00EE ISOlat1 - _entityName.Add(238, "icirc"); - _entityValue.Add("iuml", 239); // latin small letter i with diaeresis, U+00EF ISOlat1 - _entityName.Add(239, "iuml"); - _entityValue.Add("eth", 240); // latin small letter eth, U+00F0 ISOlat1 - _entityName.Add(240, "eth"); - _entityValue.Add("ntilde", 241); // latin small letter n with tilde, U+00F1 ISOlat1 - _entityName.Add(241, "ntilde"); - _entityValue.Add("ograve", 242); // latin small letter o with grave, U+00F2 ISOlat1 - _entityName.Add(242, "ograve"); - _entityValue.Add("oacute", 243); // latin small letter o with acute, U+00F3 ISOlat1 - _entityName.Add(243, "oacute"); - _entityValue.Add("ocirc", 244); // latin small letter o with circumflex, U+00F4 ISOlat1 - _entityName.Add(244, "ocirc"); - _entityValue.Add("otilde", 245); // latin small letter o with tilde, U+00F5 ISOlat1 - _entityName.Add(245, "otilde"); - _entityValue.Add("ouml", 246); // latin small letter o with diaeresis, U+00F6 ISOlat1 - _entityName.Add(246, "ouml"); - _entityValue.Add("divide", 247); // division sign, U+00F7 ISOnum - _entityName.Add(247, "divide"); - _entityValue.Add("oslash", 248); // latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1 - _entityName.Add(248, "oslash"); - _entityValue.Add("ugrave", 249); // latin small letter u with grave, U+00F9 ISOlat1 - _entityName.Add(249, "ugrave"); - _entityValue.Add("uacute", 250); // latin small letter u with acute, U+00FA ISOlat1 - _entityName.Add(250, "uacute"); - _entityValue.Add("ucirc", 251); // latin small letter u with circumflex, U+00FB ISOlat1 - _entityName.Add(251, "ucirc"); - _entityValue.Add("uuml", 252); // latin small letter u with diaeresis, U+00FC ISOlat1 - _entityName.Add(252, "uuml"); - _entityValue.Add("yacute", 253); // latin small letter y with acute, U+00FD ISOlat1 - _entityName.Add(253, "yacute"); - _entityValue.Add("thorn", 254); // latin small letter thorn, U+00FE ISOlat1 - _entityName.Add(254, "thorn"); - _entityValue.Add("yuml", 255); // latin small letter y with diaeresis, U+00FF ISOlat1 - _entityName.Add(255, "yuml"); - _entityValue.Add("fnof", 402); // latin small f with hook = function = florin, U+0192 ISOtech - _entityName.Add(402, "fnof"); - _entityValue.Add("Alpha", 913); // greek capital letter alpha, U+0391 - _entityName.Add(913, "Alpha"); - _entityValue.Add("Beta", 914); // greek capital letter beta, U+0392 - _entityName.Add(914, "Beta"); - _entityValue.Add("Gamma", 915); // greek capital letter gamma, U+0393 ISOgrk3 - _entityName.Add(915, "Gamma"); - _entityValue.Add("Delta", 916); // greek capital letter delta, U+0394 ISOgrk3 - _entityName.Add(916, "Delta"); - _entityValue.Add("Epsilon", 917); // greek capital letter epsilon, U+0395 - _entityName.Add(917, "Epsilon"); - _entityValue.Add("Zeta", 918); // greek capital letter zeta, U+0396 - _entityName.Add(918, "Zeta"); - _entityValue.Add("Eta", 919); // greek capital letter eta, U+0397 - _entityName.Add(919, "Eta"); - _entityValue.Add("Theta", 920); // greek capital letter theta, U+0398 ISOgrk3 - _entityName.Add(920, "Theta"); - _entityValue.Add("Iota", 921); // greek capital letter iota, U+0399 - _entityName.Add(921, "Iota"); - _entityValue.Add("Kappa", 922); // greek capital letter kappa, U+039A - _entityName.Add(922, "Kappa"); - _entityValue.Add("Lambda", 923); // greek capital letter lambda, U+039B ISOgrk3 - _entityName.Add(923, "Lambda"); - _entityValue.Add("Mu", 924); // greek capital letter mu, U+039C - _entityName.Add(924, "Mu"); - _entityValue.Add("Nu", 925); // greek capital letter nu, U+039D - _entityName.Add(925, "Nu"); - _entityValue.Add("Xi", 926); // greek capital letter xi, U+039E ISOgrk3 - _entityName.Add(926, "Xi"); - _entityValue.Add("Omicron", 927); // greek capital letter omicron, U+039F - _entityName.Add(927, "Omicron"); - _entityValue.Add("Pi", 928); // greek capital letter pi, U+03A0 ISOgrk3 - _entityName.Add(928, "Pi"); - _entityValue.Add("Rho", 929); // greek capital letter rho, U+03A1 - _entityName.Add(929, "Rho"); - _entityValue.Add("Sigma", 931); // greek capital letter sigma, U+03A3 ISOgrk3 - _entityName.Add(931, "Sigma"); - _entityValue.Add("Tau", 932); // greek capital letter tau, U+03A4 - _entityName.Add(932, "Tau"); - _entityValue.Add("Upsilon", 933); // greek capital letter upsilon, U+03A5 ISOgrk3 - _entityName.Add(933, "Upsilon"); - _entityValue.Add("Phi", 934); // greek capital letter phi, U+03A6 ISOgrk3 - _entityName.Add(934, "Phi"); - _entityValue.Add("Chi", 935); // greek capital letter chi, U+03A7 - _entityName.Add(935, "Chi"); - _entityValue.Add("Psi", 936); // greek capital letter psi, U+03A8 ISOgrk3 - _entityName.Add(936, "Psi"); - _entityValue.Add("Omega", 937); // greek capital letter omega, U+03A9 ISOgrk3 - _entityName.Add(937, "Omega"); - _entityValue.Add("alpha", 945); // greek small letter alpha, U+03B1 ISOgrk3 - _entityName.Add(945, "alpha"); - _entityValue.Add("beta", 946); // greek small letter beta, U+03B2 ISOgrk3 - _entityName.Add(946, "beta"); - _entityValue.Add("gamma", 947); // greek small letter gamma, U+03B3 ISOgrk3 - _entityName.Add(947, "gamma"); - _entityValue.Add("delta", 948); // greek small letter delta, U+03B4 ISOgrk3 - _entityName.Add(948, "delta"); - _entityValue.Add("epsilon", 949); // greek small letter epsilon, U+03B5 ISOgrk3 - _entityName.Add(949, "epsilon"); - _entityValue.Add("zeta", 950); // greek small letter zeta, U+03B6 ISOgrk3 - _entityName.Add(950, "zeta"); - _entityValue.Add("eta", 951); // greek small letter eta, U+03B7 ISOgrk3 - _entityName.Add(951, "eta"); - _entityValue.Add("theta", 952); // greek small letter theta, U+03B8 ISOgrk3 - _entityName.Add(952, "theta"); - _entityValue.Add("iota", 953); // greek small letter iota, U+03B9 ISOgrk3 - _entityName.Add(953, "iota"); - _entityValue.Add("kappa", 954); // greek small letter kappa, U+03BA ISOgrk3 - _entityName.Add(954, "kappa"); - _entityValue.Add("lambda", 955); // greek small letter lambda, U+03BB ISOgrk3 - _entityName.Add(955, "lambda"); - _entityValue.Add("mu", 956); // greek small letter mu, U+03BC ISOgrk3 - _entityName.Add(956, "mu"); - _entityValue.Add("nu", 957); // greek small letter nu, U+03BD ISOgrk3 - _entityName.Add(957, "nu"); - _entityValue.Add("xi", 958); // greek small letter xi, U+03BE ISOgrk3 - _entityName.Add(958, "xi"); - _entityValue.Add("omicron", 959); // greek small letter omicron, U+03BF NEW - _entityName.Add(959, "omicron"); - _entityValue.Add("pi", 960); // greek small letter pi, U+03C0 ISOgrk3 - _entityName.Add(960, "pi"); - _entityValue.Add("rho", 961); // greek small letter rho, U+03C1 ISOgrk3 - _entityName.Add(961, "rho"); - _entityValue.Add("sigmaf", 962); // greek small letter final sigma, U+03C2 ISOgrk3 - _entityName.Add(962, "sigmaf"); - _entityValue.Add("sigma", 963); // greek small letter sigma, U+03C3 ISOgrk3 - _entityName.Add(963, "sigma"); - _entityValue.Add("tau", 964); // greek small letter tau, U+03C4 ISOgrk3 - _entityName.Add(964, "tau"); - _entityValue.Add("upsilon", 965); // greek small letter upsilon, U+03C5 ISOgrk3 - _entityName.Add(965, "upsilon"); - _entityValue.Add("phi", 966); // greek small letter phi, U+03C6 ISOgrk3 - _entityName.Add(966, "phi"); - _entityValue.Add("chi", 967); // greek small letter chi, U+03C7 ISOgrk3 - _entityName.Add(967, "chi"); - _entityValue.Add("psi", 968); // greek small letter psi, U+03C8 ISOgrk3 - _entityName.Add(968, "psi"); - _entityValue.Add("omega", 969); // greek small letter omega, U+03C9 ISOgrk3 - _entityName.Add(969, "omega"); - _entityValue.Add("thetasym", 977); // greek small letter theta symbol, U+03D1 NEW - _entityName.Add(977, "thetasym"); - _entityValue.Add("upsih", 978); // greek upsilon with hook symbol, U+03D2 NEW - _entityName.Add(978, "upsih"); - _entityValue.Add("piv", 982); // greek pi symbol, U+03D6 ISOgrk3 - _entityName.Add(982, "piv"); - _entityValue.Add("bull", 8226); // bullet = black small circle, U+2022 ISOpub - _entityName.Add(8226, "bull"); - _entityValue.Add("hellip", 8230); // horizontal ellipsis = three dot leader, U+2026 ISOpub - _entityName.Add(8230, "hellip"); - _entityValue.Add("prime", 8242); // prime = minutes = feet, U+2032 ISOtech - _entityName.Add(8242, "prime"); - _entityValue.Add("Prime", 8243); // double prime = seconds = inches, U+2033 ISOtech - _entityName.Add(8243, "Prime"); - _entityValue.Add("oline", 8254); // overline = spacing overscore, U+203E NEW - _entityName.Add(8254, "oline"); - _entityValue.Add("frasl", 8260); // fraction slash, U+2044 NEW - _entityName.Add(8260, "frasl"); - _entityValue.Add("weierp", 8472); // script capital P = power set = Weierstrass p, U+2118 ISOamso - _entityName.Add(8472, "weierp"); - _entityValue.Add("image", 8465); // blackletter capital I = imaginary part, U+2111 ISOamso - _entityName.Add(8465, "image"); - _entityValue.Add("real", 8476); // blackletter capital R = real part symbol, U+211C ISOamso - _entityName.Add(8476, "real"); - _entityValue.Add("trade", 8482); // trade mark sign, U+2122 ISOnum - _entityName.Add(8482, "trade"); - _entityValue.Add("alefsym", 8501); // alef symbol = first transfinite cardinal, U+2135 NEW - _entityName.Add(8501, "alefsym"); - _entityValue.Add("larr", 8592); // leftwards arrow, U+2190 ISOnum - _entityName.Add(8592, "larr"); - _entityValue.Add("uarr", 8593); // upwards arrow, U+2191 ISOnum - _entityName.Add(8593, "uarr"); - _entityValue.Add("rarr", 8594); // rightwards arrow, U+2192 ISOnum - _entityName.Add(8594, "rarr"); - _entityValue.Add("darr", 8595); // downwards arrow, U+2193 ISOnum - _entityName.Add(8595, "darr"); - _entityValue.Add("harr", 8596); // left right arrow, U+2194 ISOamsa - _entityName.Add(8596, "harr"); - _entityValue.Add("crarr", 8629); // downwards arrow with corner leftwards = carriage return, U+21B5 NEW - _entityName.Add(8629, "crarr"); - _entityValue.Add("lArr", 8656); // leftwards double arrow, U+21D0 ISOtech - _entityName.Add(8656, "lArr"); - _entityValue.Add("uArr", 8657); // upwards double arrow, U+21D1 ISOamsa - _entityName.Add(8657, "uArr"); - _entityValue.Add("rArr", 8658); // rightwards double arrow, U+21D2 ISOtech - _entityName.Add(8658, "rArr"); - _entityValue.Add("dArr", 8659); // downwards double arrow, U+21D3 ISOamsa - _entityName.Add(8659, "dArr"); - _entityValue.Add("hArr", 8660); // left right double arrow, U+21D4 ISOamsa - _entityName.Add(8660, "hArr"); - _entityValue.Add("forall", 8704); // for all, U+2200 ISOtech - _entityName.Add(8704, "forall"); - _entityValue.Add("part", 8706); // partial differential, U+2202 ISOtech - _entityName.Add(8706, "part"); - _entityValue.Add("exist", 8707); // there exists, U+2203 ISOtech - _entityName.Add(8707, "exist"); - _entityValue.Add("empty", 8709); // empty set = null set = diameter, U+2205 ISOamso - _entityName.Add(8709, "empty"); - _entityValue.Add("nabla", 8711); // nabla = backward difference, U+2207 ISOtech - _entityName.Add(8711, "nabla"); - _entityValue.Add("isin", 8712); // element of, U+2208 ISOtech - _entityName.Add(8712, "isin"); - _entityValue.Add("notin", 8713); // not an element of, U+2209 ISOtech - _entityName.Add(8713, "notin"); - _entityValue.Add("ni", 8715); // contains as member, U+220B ISOtech - _entityName.Add(8715, "ni"); - _entityValue.Add("prod", 8719); // n-ary product = product sign, U+220F ISOamsb - _entityName.Add(8719, "prod"); - _entityValue.Add("sum", 8721); // n-ary sumation, U+2211 ISOamsb - _entityName.Add(8721, "sum"); - _entityValue.Add("minus", 8722); // minus sign, U+2212 ISOtech - _entityName.Add(8722, "minus"); - _entityValue.Add("lowast", 8727); // asterisk operator, U+2217 ISOtech - _entityName.Add(8727, "lowast"); - _entityValue.Add("radic", 8730); // square root = radical sign, U+221A ISOtech - _entityName.Add(8730, "radic"); - _entityValue.Add("prop", 8733); // proportional to, U+221D ISOtech - _entityName.Add(8733, "prop"); - _entityValue.Add("infin", 8734); // infinity, U+221E ISOtech - _entityName.Add(8734, "infin"); - _entityValue.Add("ang", 8736); // angle, U+2220 ISOamso - _entityName.Add(8736, "ang"); - _entityValue.Add("and", 8743); // logical and = wedge, U+2227 ISOtech - _entityName.Add(8743, "and"); - _entityValue.Add("or", 8744); // logical or = vee, U+2228 ISOtech - _entityName.Add(8744, "or"); - _entityValue.Add("cap", 8745); // intersection = cap, U+2229 ISOtech - _entityName.Add(8745, "cap"); - _entityValue.Add("cup", 8746); // union = cup, U+222A ISOtech - _entityName.Add(8746, "cup"); - _entityValue.Add("int", 8747); // integral, U+222B ISOtech - _entityName.Add(8747, "int"); - _entityValue.Add("there4", 8756); // therefore, U+2234 ISOtech - _entityName.Add(8756, "there4"); - _entityValue.Add("sim", 8764); // tilde operator = varies with = similar to, U+223C ISOtech - _entityName.Add(8764, "sim"); - _entityValue.Add("cong", 8773); // approximately equal to, U+2245 ISOtech - _entityName.Add(8773, "cong"); - _entityValue.Add("asymp", 8776); // almost equal to = asymptotic to, U+2248 ISOamsr - _entityName.Add(8776, "asymp"); - _entityValue.Add("ne", 8800); // not equal to, U+2260 ISOtech - _entityName.Add(8800, "ne"); - _entityValue.Add("equiv", 8801); // identical to, U+2261 ISOtech - _entityName.Add(8801, "equiv"); - _entityValue.Add("le", 8804); // less-than or equal to, U+2264 ISOtech - _entityName.Add(8804, "le"); - _entityValue.Add("ge", 8805); // greater-than or equal to, U+2265 ISOtech - _entityName.Add(8805, "ge"); - _entityValue.Add("sub", 8834); // subset of, U+2282 ISOtech - _entityName.Add(8834, "sub"); - _entityValue.Add("sup", 8835); // superset of, U+2283 ISOtech - _entityName.Add(8835, "sup"); - _entityValue.Add("nsub", 8836); // not a subset of, U+2284 ISOamsn - _entityName.Add(8836, "nsub"); - _entityValue.Add("sube", 8838); // subset of or equal to, U+2286 ISOtech - _entityName.Add(8838, "sube"); - _entityValue.Add("supe", 8839); // superset of or equal to, U+2287 ISOtech - _entityName.Add(8839, "supe"); - _entityValue.Add("oplus", 8853); // circled plus = direct sum, U+2295 ISOamsb - _entityName.Add(8853, "oplus"); - _entityValue.Add("otimes", 8855); // circled times = vector product, U+2297 ISOamsb - _entityName.Add(8855, "otimes"); - _entityValue.Add("perp", 8869); // up tack = orthogonal to = perpendicular, U+22A5 ISOtech - _entityName.Add(8869, "perp"); - _entityValue.Add("sdot", 8901); // dot operator, U+22C5 ISOamsb - _entityName.Add(8901, "sdot"); - _entityValue.Add("lceil", 8968); // left ceiling = apl upstile, U+2308 ISOamsc - _entityName.Add(8968, "lceil"); - _entityValue.Add("rceil", 8969); // right ceiling, U+2309 ISOamsc - _entityName.Add(8969, "rceil"); - _entityValue.Add("lfloor", 8970); // left floor = apl downstile, U+230A ISOamsc - _entityName.Add(8970, "lfloor"); - _entityValue.Add("rfloor", 8971); // right floor, U+230B ISOamsc - _entityName.Add(8971, "rfloor"); - _entityValue.Add("lang", 9001); // left-pointing angle bracket = bra, U+2329 ISOtech - _entityName.Add(9001, "lang"); - _entityValue.Add("rang", 9002); // right-pointing angle bracket = ket, U+232A ISOtech - _entityName.Add(9002, "rang"); - _entityValue.Add("loz", 9674); // lozenge, U+25CA ISOpub - _entityName.Add(9674, "loz"); - _entityValue.Add("spades", 9824); // black spade suit, U+2660 ISOpub - _entityName.Add(9824, "spades"); - _entityValue.Add("clubs", 9827); // black club suit = shamrock, U+2663 ISOpub - _entityName.Add(9827, "clubs"); - _entityValue.Add("hearts", 9829); // black heart suit = valentine, U+2665 ISOpub - _entityName.Add(9829, "hearts"); - _entityValue.Add("diams", 9830); // black diamond suit, U+2666 ISOpub - _entityName.Add(9830, "diams"); - _entityValue.Add("quot", 34); // quotation mark = APL quote, U+0022 ISOnum - _entityName.Add(34, "quot"); - _entityValue.Add("amp", 38); // ampersand, U+0026 ISOnum - _entityName.Add(38, "amp"); - _entityValue.Add("lt", 60); // less-than sign, U+003C ISOnum - _entityName.Add(60, "lt"); - _entityValue.Add("gt", 62); // greater-than sign, U+003E ISOnum - _entityName.Add(62, "gt"); - _entityValue.Add("OElig", 338); // latin capital ligature OE, U+0152 ISOlat2 - _entityName.Add(338, "OElig"); - _entityValue.Add("oelig", 339); // latin small ligature oe, U+0153 ISOlat2 - _entityName.Add(339, "oelig"); - _entityValue.Add("Scaron", 352); // latin capital letter S with caron, U+0160 ISOlat2 - _entityName.Add(352, "Scaron"); - _entityValue.Add("scaron", 353); // latin small letter s with caron, U+0161 ISOlat2 - _entityName.Add(353, "scaron"); - _entityValue.Add("Yuml", 376); // latin capital letter Y with diaeresis, U+0178 ISOlat2 - _entityName.Add(376, "Yuml"); - _entityValue.Add("circ", 710); // modifier letter circumflex accent, U+02C6 ISOpub - _entityName.Add(710, "circ"); - _entityValue.Add("tilde", 732); // small tilde, U+02DC ISOdia - _entityName.Add(732, "tilde"); - _entityValue.Add("ensp", 8194); // en space, U+2002 ISOpub - _entityName.Add(8194, "ensp"); - _entityValue.Add("emsp", 8195); // em space, U+2003 ISOpub - _entityName.Add(8195, "emsp"); - _entityValue.Add("thinsp", 8201); // thin space, U+2009 ISOpub - _entityName.Add(8201, "thinsp"); - _entityValue.Add("zwnj", 8204); // zero width non-joiner, U+200C NEW RFC 2070 - _entityName.Add(8204, "zwnj"); - _entityValue.Add("zwj", 8205); // zero width joiner, U+200D NEW RFC 2070 - _entityName.Add(8205, "zwj"); - _entityValue.Add("lrm", 8206); // left-to-right mark, U+200E NEW RFC 2070 - _entityName.Add(8206, "lrm"); - _entityValue.Add("rlm", 8207); // right-to-left mark, U+200F NEW RFC 2070 - _entityName.Add(8207, "rlm"); - _entityValue.Add("ndash", 8211); // en dash, U+2013 ISOpub - _entityName.Add(8211, "ndash"); - _entityValue.Add("mdash", 8212); // em dash, U+2014 ISOpub - _entityName.Add(8212, "mdash"); - _entityValue.Add("lsquo", 8216); // left single quotation mark, U+2018 ISOnum - _entityName.Add(8216, "lsquo"); - _entityValue.Add("rsquo", 8217); // right single quotation mark, U+2019 ISOnum - _entityName.Add(8217, "rsquo"); - _entityValue.Add("sbquo", 8218); // single low-9 quotation mark, U+201A NEW - _entityName.Add(8218, "sbquo"); - _entityValue.Add("ldquo", 8220); // left double quotation mark, U+201C ISOnum - _entityName.Add(8220, "ldquo"); - _entityValue.Add("rdquo", 8221); // right double quotation mark, U+201D ISOnum - _entityName.Add(8221, "rdquo"); - _entityValue.Add("bdquo", 8222); // double low-9 quotation mark, U+201E NEW - _entityName.Add(8222, "bdquo"); - _entityValue.Add("dagger", 8224); // dagger, U+2020 ISOpub - _entityName.Add(8224, "dagger"); - _entityValue.Add("Dagger", 8225); // double dagger, U+2021 ISOpub - _entityName.Add(8225, "Dagger"); - _entityValue.Add("permil", 8240); // per mille sign, U+2030 ISOtech - _entityName.Add(8240, "permil"); - _entityValue.Add("lsaquo", 8249); // single left-pointing angle quotation mark, U+2039 ISO proposed - _entityName.Add(8249, "lsaquo"); - _entityValue.Add("rsaquo", 8250); // single right-pointing angle quotation mark, U+203A ISO proposed - _entityName.Add(8250, "rsaquo"); - _entityValue.Add("euro", 8364); // euro sign, U+20AC NEW - _entityName.Add(8364, "euro"); - - _maxEntitySize = 8 + 1; // we add the # char - #endregion - } - - /// <summary> - /// A collection of entities indexed by name. - /// </summary> - public static Hashtable EntityName - { - get - { - return _entityName; - } - } - - /// <summary> - /// A collection of entities indexed by value. - /// </summary> - public static Hashtable EntityValue - { - get - { - return _entityValue; - } - } - - /// <summary> - /// Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. - /// </summary> - /// <param name="node">The node to entitize.</param> - /// <returns>An entitized cloned node.</returns> - public static HtmlNode Entitize(HtmlNode node) - { - if (node == null) - { - throw new ArgumentNullException("node"); - } - HtmlNode result = node.CloneNode(true); - if (result.HasAttributes) - Entitize(result.Attributes); - - if (result.HasChildNodes) - { - Entitize(result.ChildNodes); - } - else - { - if (result.NodeType == HtmlNodeType.Text) - { - ((HtmlTextNode)result).Text = Entitize(((HtmlTextNode)result).Text, true, true); - } - } - return result; - } - - private static void Entitize(HtmlAttributeCollection collection) - { - foreach(HtmlAttribute at in collection) - { - at.Value = Entitize(at.Value); - } - } - - private static void Entitize(HtmlNodeCollection collection) - { - foreach(HtmlNode node in collection) - { - if (node.HasAttributes) - Entitize(node.Attributes); - - if (node.HasChildNodes) - { - Entitize(node.ChildNodes); - } - else - { - if (node.NodeType == HtmlNodeType.Text) - { - ((HtmlTextNode)node).Text = Entitize(((HtmlTextNode)node).Text, true, true); - } - } - } - } - - - /// <summary> - /// Replace characters above 127 by entities. - /// </summary> - /// <param name="text">The source text.</param> - /// <returns>The result text.</returns> - public static string Entitize(string text) - { - return Entitize(text, true); - } - - /// <summary> - /// Replace characters above 127 by entities. - /// </summary> - /// <param name="text">The source text.</param> - /// <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> - /// <returns>The result text.</returns> - public static string Entitize(string text, bool useNames) - { - return Entitize( text, useNames, false); - } - /// <summary> - /// Replace characters above 127 by entities. - /// </summary> - /// <param name="text">The source text.</param> - /// <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> - /// <param name="entitizeQuotAmpAndLtGt">If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized.</param> - /// <returns>The result text</returns> - public static string Entitize(string text, bool useNames, bool entitizeQuotAmpAndLtGt) -// _entityValue.Add("quot", 34); // quotation mark = APL quote, U+0022 ISOnum -// _entityName.Add(34, "quot"); -// _entityValue.Add("amp", 38); // ampersand, U+0026 ISOnum -// _entityName.Add(38, "amp"); -// _entityValue.Add("lt", 60); // less-than sign, U+003C ISOnum -// _entityName.Add(60, "lt"); -// _entityValue.Add("gt", 62); // greater-than sign, U+003E ISOnum -// _entityName.Add(62, "gt"); - { - if (text == null) - return null; - - if (text.Length == 0) - return text; - - StringBuilder sb = new StringBuilder(text.Length); - for(int i=0;i<text.Length;i++) - { - int code = (int)text[i]; - if ((code>127) || (entitizeQuotAmpAndLtGt && ((code == 34) || (code == 38) || (code == 60) || (code == 62)))) - { - string entity = _entityName[code] as string; - if ((entity == null) || (!useNames)) - { - sb.Append("&#" + code + ";"); - } - else - { - sb.Append("&" + entity + ";"); - } - } - else - { - sb.Append(text[i]); - } - } - - return sb.ToString(); - } - - /// <summary> - /// Replace known entities by characters. - /// </summary> - /// <param name="text">The source text.</param> - /// <returns>The result text.</returns> - public static string DeEntitize(string text) - { - if (text == null) - return null; - - if (text.Length == 0) - return text; - - StringBuilder sb = new StringBuilder(text.Length); - ParseState state = ParseState.Text; - StringBuilder entity = new StringBuilder(10); - - for(int i=0;i<text.Length;i++) - { - switch(state) - { - case ParseState.Text: - switch(text[i]) - { - case '&': - state = ParseState.EntityStart; - break; - - default: - sb.Append(text[i]); - break; - - } - break; - - case ParseState.EntityStart: - switch(text[i]) - { - case ';': - if (entity.Length == 0) - { - sb.Append("&;"); - } - else - { - if (entity[0] == '#') - { - string e = entity.ToString(); - try - { - int code = Convert.ToInt32(e.Substring(1, e.Length-1)); - sb.Append(Convert.ToChar(code)); - } - catch - { - sb.Append("&#" + e + ";"); - } - } - else - { - // named entity? - int code; - object o = _entityValue[entity.ToString()]; - if (o == null) - { - // nope - sb.Append("&" + entity + ";"); - } - else - { - // we found one - code = (int)o; - sb.Append(Convert.ToChar(code)); - } - } - entity.Remove(0, entity.Length); - } - state = ParseState.Text; - break; - - case '&': - // new entity start without end, it was not an entity... - sb.Append("&" + entity); - entity.Remove(0, entity.Length); - break; - - default: - entity.Append(text[i]); - if (entity.Length>_maxEntitySize) - { - // unknown stuff, just don't touch it - state = ParseState.Text; - sb.Append("&" + entity); - entity.Remove(0, entity.Length); - } - break; - - } - break; - } - } - - // finish the work - if (state == ParseState.EntityStart) - { - sb.Append("&" + entity); - } - return sb.ToString(); - } - - private enum ParseState - { - Text, - EntityStart - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; +using System.Text; + +namespace HtmlAgilityPack +{ + /// <summary> + /// A utility class to replace special characters by entities and vice-versa. + /// Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html + /// </summary> + public class HtmlEntity + { + private static Hashtable _entityName; + private static Hashtable _entityValue; + private static readonly int _maxEntitySize; + + private HtmlEntity() + { + } + + static HtmlEntity() + { + _entityName = new Hashtable(); + _entityValue = new Hashtable(); + + #region Entities Definition + _entityValue.Add("nbsp", 160); // no-break space = non-breaking space, U+00A0 ISOnum + _entityName.Add(160, "nbsp"); + _entityValue.Add("iexcl", 161); // inverted exclamation mark, U+00A1 ISOnum + _entityName.Add(161, "iexcl"); + _entityValue.Add("cent", 162); // cent sign, U+00A2 ISOnum + _entityName.Add(162, "cent"); + _entityValue.Add("pound", 163); // pound sign, U+00A3 ISOnum + _entityName.Add(163, "pound"); + _entityValue.Add("curren", 164); // currency sign, U+00A4 ISOnum + _entityName.Add(164, "curren"); + _entityValue.Add("yen", 165); // yen sign = yuan sign, U+00A5 ISOnum + _entityName.Add(165, "yen"); + _entityValue.Add("brvbar", 166); // broken bar = broken vertical bar, U+00A6 ISOnum + _entityName.Add(166, "brvbar"); + _entityValue.Add("sect", 167); // section sign, U+00A7 ISOnum + _entityName.Add(167, "sect"); + _entityValue.Add("uml", 168); // diaeresis = spacing diaeresis, U+00A8 ISOdia + _entityName.Add(168, "uml"); + _entityValue.Add("copy", 169); // copyright sign, U+00A9 ISOnum + _entityName.Add(169, "copy"); + _entityValue.Add("ordf", 170); // feminine ordinal indicator, U+00AA ISOnum + _entityName.Add(170, "ordf"); + _entityValue.Add("laquo", 171); // left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum + _entityName.Add(171, "laquo"); + _entityValue.Add("not", 172); // not sign, U+00AC ISOnum + _entityName.Add(172, "not"); + _entityValue.Add("shy", 173); // soft hyphen = discretionary hyphen, U+00AD ISOnum + _entityName.Add(173, "shy"); + _entityValue.Add("reg", 174); // registered sign = registered trade mark sign, U+00AE ISOnum + _entityName.Add(174, "reg"); + _entityValue.Add("macr", 175); // macron = spacing macron = overline = APL overbar, U+00AF ISOdia + _entityName.Add(175, "macr"); + _entityValue.Add("deg", 176); // degree sign, U+00B0 ISOnum + _entityName.Add(176, "deg"); + _entityValue.Add("plusmn", 177); // plus-minus sign = plus-or-minus sign, U+00B1 ISOnum + _entityName.Add(177, "plusmn"); + _entityValue.Add("sup2", 178); // superscript two = superscript digit two = squared, U+00B2 ISOnum + _entityName.Add(178, "sup2"); + _entityValue.Add("sup3", 179); // superscript three = superscript digit three = cubed, U+00B3 ISOnum + _entityName.Add(179, "sup3"); + _entityValue.Add("acute", 180); // acute accent = spacing acute, U+00B4 ISOdia + _entityName.Add(180, "acute"); + _entityValue.Add("micro", 181); // micro sign, U+00B5 ISOnum + _entityName.Add(181, "micro"); + _entityValue.Add("para", 182); // pilcrow sign = paragraph sign, U+00B6 ISOnum + _entityName.Add(182, "para"); + _entityValue.Add("middot", 183); // middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum + _entityName.Add(183, "middot"); + _entityValue.Add("cedil", 184); // cedilla = spacing cedilla, U+00B8 ISOdia + _entityName.Add(184, "cedil"); + _entityValue.Add("sup1", 185); // superscript one = superscript digit one, U+00B9 ISOnum + _entityName.Add(185, "sup1"); + _entityValue.Add("ordm", 186); // masculine ordinal indicator, U+00BA ISOnum + _entityName.Add(186, "ordm"); + _entityValue.Add("raquo", 187); // right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum + _entityName.Add(187, "raquo"); + _entityValue.Add("frac14", 188); // vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum + _entityName.Add(188, "frac14"); + _entityValue.Add("frac12", 189); // vulgar fraction one half = fraction one half, U+00BD ISOnum + _entityName.Add(189, "frac12"); + _entityValue.Add("frac34", 190); // vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum + _entityName.Add(190, "frac34"); + _entityValue.Add("iquest", 191); // inverted question mark = turned question mark, U+00BF ISOnum + _entityName.Add(191, "iquest"); + _entityValue.Add("Agrave", 192); // latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1 + _entityName.Add(192, "Agrave"); + _entityValue.Add("Aacute", 193); // latin capital letter A with acute, U+00C1 ISOlat1 + _entityName.Add(193, "Aacute"); + _entityValue.Add("Acirc", 194); // latin capital letter A with circumflex, U+00C2 ISOlat1 + _entityName.Add(194, "Acirc"); + _entityValue.Add("Atilde", 195); // latin capital letter A with tilde, U+00C3 ISOlat1 + _entityName.Add(195, "Atilde"); + _entityValue.Add("Auml", 196); // latin capital letter A with diaeresis, U+00C4 ISOlat1 + _entityName.Add(196, "Auml"); + _entityValue.Add("Aring", 197); // latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1 + _entityName.Add(197, "Aring"); + _entityValue.Add("AElig", 198); // latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 + _entityName.Add(198, "AElig"); + _entityValue.Add("Ccedil", 199); // latin capital letter C with cedilla, U+00C7 ISOlat1 + _entityName.Add(199, "Ccedil"); + _entityValue.Add("Egrave", 200); // latin capital letter E with grave, U+00C8 ISOlat1 + _entityName.Add(200, "Egrave"); + _entityValue.Add("Eacute", 201); // latin capital letter E with acute, U+00C9 ISOlat1 + _entityName.Add(201, "Eacute"); + _entityValue.Add("Ecirc", 202); // latin capital letter E with circumflex, U+00CA ISOlat1 + _entityName.Add(202, "Ecirc"); + _entityValue.Add("Euml", 203); // latin capital letter E with diaeresis, U+00CB ISOlat1 + _entityName.Add(203, "Euml"); + _entityValue.Add("Igrave", 204); // latin capital letter I with grave, U+00CC ISOlat1 + _entityName.Add(204, "Igrave"); + _entityValue.Add("Iacute", 205); // latin capital letter I with acute, U+00CD ISOlat1 + _entityName.Add(205, "Iacute"); + _entityValue.Add("Icirc", 206); // latin capital letter I with circumflex, U+00CE ISOlat1 + _entityName.Add(206, "Icirc"); + _entityValue.Add("Iuml", 207); // latin capital letter I with diaeresis, U+00CF ISOlat1 + _entityName.Add(207, "Iuml"); + _entityValue.Add("ETH", 208); // latin capital letter ETH, U+00D0 ISOlat1 + _entityName.Add(208, "ETH"); + _entityValue.Add("Ntilde", 209); // latin capital letter N with tilde, U+00D1 ISOlat1 + _entityName.Add(209, "Ntilde"); + _entityValue.Add("Ograve", 210); // latin capital letter O with grave, U+00D2 ISOlat1 + _entityName.Add(210, "Ograve"); + _entityValue.Add("Oacute", 211); // latin capital letter O with acute, U+00D3 ISOlat1 + _entityName.Add(211, "Oacute"); + _entityValue.Add("Ocirc", 212); // latin capital letter O with circumflex, U+00D4 ISOlat1 + _entityName.Add(212, "Ocirc"); + _entityValue.Add("Otilde", 213); // latin capital letter O with tilde, U+00D5 ISOlat1 + _entityName.Add(213, "Otilde"); + _entityValue.Add("Ouml", 214); // latin capital letter O with diaeresis, U+00D6 ISOlat1 + _entityName.Add(214, "Ouml"); + _entityValue.Add("times", 215); // multiplication sign, U+00D7 ISOnum + _entityName.Add(215, "times"); + _entityValue.Add("Oslash", 216); // latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1 + _entityName.Add(216, "Oslash"); + _entityValue.Add("Ugrave", 217); // latin capital letter U with grave, U+00D9 ISOlat1 + _entityName.Add(217, "Ugrave"); + _entityValue.Add("Uacute", 218); // latin capital letter U with acute, U+00DA ISOlat1 + _entityName.Add(218, "Uacute"); + _entityValue.Add("Ucirc", 219); // latin capital letter U with circumflex, U+00DB ISOlat1 + _entityName.Add(219, "Ucirc"); + _entityValue.Add("Uuml", 220); // latin capital letter U with diaeresis, U+00DC ISOlat1 + _entityName.Add(220, "Uuml"); + _entityValue.Add("Yacute", 221); // latin capital letter Y with acute, U+00DD ISOlat1 + _entityName.Add(221, "Yacute"); + _entityValue.Add("THORN", 222); // latin capital letter THORN, U+00DE ISOlat1 + _entityName.Add(222, "THORN"); + _entityValue.Add("szlig", 223); // latin small letter sharp s = ess-zed, U+00DF ISOlat1 + _entityName.Add(223, "szlig"); + _entityValue.Add("agrave", 224); // latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1 + _entityName.Add(224, "agrave"); + _entityValue.Add("aacute", 225); // latin small letter a with acute, U+00E1 ISOlat1 + _entityName.Add(225, "aacute"); + _entityValue.Add("acirc", 226); // latin small letter a with circumflex, U+00E2 ISOlat1 + _entityName.Add(226, "acirc"); + _entityValue.Add("atilde", 227); // latin small letter a with tilde, U+00E3 ISOlat1 + _entityName.Add(227, "atilde"); + _entityValue.Add("auml", 228); // latin small letter a with diaeresis, U+00E4 ISOlat1 + _entityName.Add(228, "auml"); + _entityValue.Add("aring", 229); // latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1 + _entityName.Add(229, "aring"); + _entityValue.Add("aelig", 230); // latin small letter ae = latin small ligature ae, U+00E6 ISOlat1 + _entityName.Add(230, "aelig"); + _entityValue.Add("ccedil", 231); // latin small letter c with cedilla, U+00E7 ISOlat1 + _entityName.Add(231, "ccedil"); + _entityValue.Add("egrave", 232); // latin small letter e with grave, U+00E8 ISOlat1 + _entityName.Add(232, "egrave"); + _entityValue.Add("eacute", 233); // latin small letter e with acute, U+00E9 ISOlat1 + _entityName.Add(233, "eacute"); + _entityValue.Add("ecirc", 234); // latin small letter e with circumflex, U+00EA ISOlat1 + _entityName.Add(234, "ecirc"); + _entityValue.Add("euml", 235); // latin small letter e with diaeresis, U+00EB ISOlat1 + _entityName.Add(235, "euml"); + _entityValue.Add("igrave", 236); // latin small letter i with grave, U+00EC ISOlat1 + _entityName.Add(236, "igrave"); + _entityValue.Add("iacute", 237); // latin small letter i with acute, U+00ED ISOlat1 + _entityName.Add(237, "iacute"); + _entityValue.Add("icirc", 238); // latin small letter i with circumflex, U+00EE ISOlat1 + _entityName.Add(238, "icirc"); + _entityValue.Add("iuml", 239); // latin small letter i with diaeresis, U+00EF ISOlat1 + _entityName.Add(239, "iuml"); + _entityValue.Add("eth", 240); // latin small letter eth, U+00F0 ISOlat1 + _entityName.Add(240, "eth"); + _entityValue.Add("ntilde", 241); // latin small letter n with tilde, U+00F1 ISOlat1 + _entityName.Add(241, "ntilde"); + _entityValue.Add("ograve", 242); // latin small letter o with grave, U+00F2 ISOlat1 + _entityName.Add(242, "ograve"); + _entityValue.Add("oacute", 243); // latin small letter o with acute, U+00F3 ISOlat1 + _entityName.Add(243, "oacute"); + _entityValue.Add("ocirc", 244); // latin small letter o with circumflex, U+00F4 ISOlat1 + _entityName.Add(244, "ocirc"); + _entityValue.Add("otilde", 245); // latin small letter o with tilde, U+00F5 ISOlat1 + _entityName.Add(245, "otilde"); + _entityValue.Add("ouml", 246); // latin small letter o with diaeresis, U+00F6 ISOlat1 + _entityName.Add(246, "ouml"); + _entityValue.Add("divide", 247); // division sign, U+00F7 ISOnum + _entityName.Add(247, "divide"); + _entityValue.Add("oslash", 248); // latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1 + _entityName.Add(248, "oslash"); + _entityValue.Add("ugrave", 249); // latin small letter u with grave, U+00F9 ISOlat1 + _entityName.Add(249, "ugrave"); + _entityValue.Add("uacute", 250); // latin small letter u with acute, U+00FA ISOlat1 + _entityName.Add(250, "uacute"); + _entityValue.Add("ucirc", 251); // latin small letter u with circumflex, U+00FB ISOlat1 + _entityName.Add(251, "ucirc"); + _entityValue.Add("uuml", 252); // latin small letter u with diaeresis, U+00FC ISOlat1 + _entityName.Add(252, "uuml"); + _entityValue.Add("yacute", 253); // latin small letter y with acute, U+00FD ISOlat1 + _entityName.Add(253, "yacute"); + _entityValue.Add("thorn", 254); // latin small letter thorn, U+00FE ISOlat1 + _entityName.Add(254, "thorn"); + _entityValue.Add("yuml", 255); // latin small letter y with diaeresis, U+00FF ISOlat1 + _entityName.Add(255, "yuml"); + _entityValue.Add("fnof", 402); // latin small f with hook = function = florin, U+0192 ISOtech + _entityName.Add(402, "fnof"); + _entityValue.Add("Alpha", 913); // greek capital letter alpha, U+0391 + _entityName.Add(913, "Alpha"); + _entityValue.Add("Beta", 914); // greek capital letter beta, U+0392 + _entityName.Add(914, "Beta"); + _entityValue.Add("Gamma", 915); // greek capital letter gamma, U+0393 ISOgrk3 + _entityName.Add(915, "Gamma"); + _entityValue.Add("Delta", 916); // greek capital letter delta, U+0394 ISOgrk3 + _entityName.Add(916, "Delta"); + _entityValue.Add("Epsilon", 917); // greek capital letter epsilon, U+0395 + _entityName.Add(917, "Epsilon"); + _entityValue.Add("Zeta", 918); // greek capital letter zeta, U+0396 + _entityName.Add(918, "Zeta"); + _entityValue.Add("Eta", 919); // greek capital letter eta, U+0397 + _entityName.Add(919, "Eta"); + _entityValue.Add("Theta", 920); // greek capital letter theta, U+0398 ISOgrk3 + _entityName.Add(920, "Theta"); + _entityValue.Add("Iota", 921); // greek capital letter iota, U+0399 + _entityName.Add(921, "Iota"); + _entityValue.Add("Kappa", 922); // greek capital letter kappa, U+039A + _entityName.Add(922, "Kappa"); + _entityValue.Add("Lambda", 923); // greek capital letter lambda, U+039B ISOgrk3 + _entityName.Add(923, "Lambda"); + _entityValue.Add("Mu", 924); // greek capital letter mu, U+039C + _entityName.Add(924, "Mu"); + _entityValue.Add("Nu", 925); // greek capital letter nu, U+039D + _entityName.Add(925, "Nu"); + _entityValue.Add("Xi", 926); // greek capital letter xi, U+039E ISOgrk3 + _entityName.Add(926, "Xi"); + _entityValue.Add("Omicron", 927); // greek capital letter omicron, U+039F + _entityName.Add(927, "Omicron"); + _entityValue.Add("Pi", 928); // greek capital letter pi, U+03A0 ISOgrk3 + _entityName.Add(928, "Pi"); + _entityValue.Add("Rho", 929); // greek capital letter rho, U+03A1 + _entityName.Add(929, "Rho"); + _entityValue.Add("Sigma", 931); // greek capital letter sigma, U+03A3 ISOgrk3 + _entityName.Add(931, "Sigma"); + _entityValue.Add("Tau", 932); // greek capital letter tau, U+03A4 + _entityName.Add(932, "Tau"); + _entityValue.Add("Upsilon", 933); // greek capital letter upsilon, U+03A5 ISOgrk3 + _entityName.Add(933, "Upsilon"); + _entityValue.Add("Phi", 934); // greek capital letter phi, U+03A6 ISOgrk3 + _entityName.Add(934, "Phi"); + _entityValue.Add("Chi", 935); // greek capital letter chi, U+03A7 + _entityName.Add(935, "Chi"); + _entityValue.Add("Psi", 936); // greek capital letter psi, U+03A8 ISOgrk3 + _entityName.Add(936, "Psi"); + _entityValue.Add("Omega", 937); // greek capital letter omega, U+03A9 ISOgrk3 + _entityName.Add(937, "Omega"); + _entityValue.Add("alpha", 945); // greek small letter alpha, U+03B1 ISOgrk3 + _entityName.Add(945, "alpha"); + _entityValue.Add("beta", 946); // greek small letter beta, U+03B2 ISOgrk3 + _entityName.Add(946, "beta"); + _entityValue.Add("gamma", 947); // greek small letter gamma, U+03B3 ISOgrk3 + _entityName.Add(947, "gamma"); + _entityValue.Add("delta", 948); // greek small letter delta, U+03B4 ISOgrk3 + _entityName.Add(948, "delta"); + _entityValue.Add("epsilon", 949); // greek small letter epsilon, U+03B5 ISOgrk3 + _entityName.Add(949, "epsilon"); + _entityValue.Add("zeta", 950); // greek small letter zeta, U+03B6 ISOgrk3 + _entityName.Add(950, "zeta"); + _entityValue.Add("eta", 951); // greek small letter eta, U+03B7 ISOgrk3 + _entityName.Add(951, "eta"); + _entityValue.Add("theta", 952); // greek small letter theta, U+03B8 ISOgrk3 + _entityName.Add(952, "theta"); + _entityValue.Add("iota", 953); // greek small letter iota, U+03B9 ISOgrk3 + _entityName.Add(953, "iota"); + _entityValue.Add("kappa", 954); // greek small letter kappa, U+03BA ISOgrk3 + _entityName.Add(954, "kappa"); + _entityValue.Add("lambda", 955); // greek small letter lambda, U+03BB ISOgrk3 + _entityName.Add(955, "lambda"); + _entityValue.Add("mu", 956); // greek small letter mu, U+03BC ISOgrk3 + _entityName.Add(956, "mu"); + _entityValue.Add("nu", 957); // greek small letter nu, U+03BD ISOgrk3 + _entityName.Add(957, "nu"); + _entityValue.Add("xi", 958); // greek small letter xi, U+03BE ISOgrk3 + _entityName.Add(958, "xi"); + _entityValue.Add("omicron", 959); // greek small letter omicron, U+03BF NEW + _entityName.Add(959, "omicron"); + _entityValue.Add("pi", 960); // greek small letter pi, U+03C0 ISOgrk3 + _entityName.Add(960, "pi"); + _entityValue.Add("rho", 961); // greek small letter rho, U+03C1 ISOgrk3 + _entityName.Add(961, "rho"); + _entityValue.Add("sigmaf", 962); // greek small letter final sigma, U+03C2 ISOgrk3 + _entityName.Add(962, "sigmaf"); + _entityValue.Add("sigma", 963); // greek small letter sigma, U+03C3 ISOgrk3 + _entityName.Add(963, "sigma"); + _entityValue.Add("tau", 964); // greek small letter tau, U+03C4 ISOgrk3 + _entityName.Add(964, "tau"); + _entityValue.Add("upsilon", 965); // greek small letter upsilon, U+03C5 ISOgrk3 + _entityName.Add(965, "upsilon"); + _entityValue.Add("phi", 966); // greek small letter phi, U+03C6 ISOgrk3 + _entityName.Add(966, "phi"); + _entityValue.Add("chi", 967); // greek small letter chi, U+03C7 ISOgrk3 + _entityName.Add(967, "chi"); + _entityValue.Add("psi", 968); // greek small letter psi, U+03C8 ISOgrk3 + _entityName.Add(968, "psi"); + _entityValue.Add("omega", 969); // greek small letter omega, U+03C9 ISOgrk3 + _entityName.Add(969, "omega"); + _entityValue.Add("thetasym", 977); // greek small letter theta symbol, U+03D1 NEW + _entityName.Add(977, "thetasym"); + _entityValue.Add("upsih", 978); // greek upsilon with hook symbol, U+03D2 NEW + _entityName.Add(978, "upsih"); + _entityValue.Add("piv", 982); // greek pi symbol, U+03D6 ISOgrk3 + _entityName.Add(982, "piv"); + _entityValue.Add("bull", 8226); // bullet = black small circle, U+2022 ISOpub + _entityName.Add(8226, "bull"); + _entityValue.Add("hellip", 8230); // horizontal ellipsis = three dot leader, U+2026 ISOpub + _entityName.Add(8230, "hellip"); + _entityValue.Add("prime", 8242); // prime = minutes = feet, U+2032 ISOtech + _entityName.Add(8242, "prime"); + _entityValue.Add("Prime", 8243); // double prime = seconds = inches, U+2033 ISOtech + _entityName.Add(8243, "Prime"); + _entityValue.Add("oline", 8254); // overline = spacing overscore, U+203E NEW + _entityName.Add(8254, "oline"); + _entityValue.Add("frasl", 8260); // fraction slash, U+2044 NEW + _entityName.Add(8260, "frasl"); + _entityValue.Add("weierp", 8472); // script capital P = power set = Weierstrass p, U+2118 ISOamso + _entityName.Add(8472, "weierp"); + _entityValue.Add("image", 8465); // blackletter capital I = imaginary part, U+2111 ISOamso + _entityName.Add(8465, "image"); + _entityValue.Add("real", 8476); // blackletter capital R = real part symbol, U+211C ISOamso + _entityName.Add(8476, "real"); + _entityValue.Add("trade", 8482); // trade mark sign, U+2122 ISOnum + _entityName.Add(8482, "trade"); + _entityValue.Add("alefsym", 8501); // alef symbol = first transfinite cardinal, U+2135 NEW + _entityName.Add(8501, "alefsym"); + _entityValue.Add("larr", 8592); // leftwards arrow, U+2190 ISOnum + _entityName.Add(8592, "larr"); + _entityValue.Add("uarr", 8593); // upwards arrow, U+2191 ISOnum + _entityName.Add(8593, "uarr"); + _entityValue.Add("rarr", 8594); // rightwards arrow, U+2192 ISOnum + _entityName.Add(8594, "rarr"); + _entityValue.Add("darr", 8595); // downwards arrow, U+2193 ISOnum + _entityName.Add(8595, "darr"); + _entityValue.Add("harr", 8596); // left right arrow, U+2194 ISOamsa + _entityName.Add(8596, "harr"); + _entityValue.Add("crarr", 8629); // downwards arrow with corner leftwards = carriage return, U+21B5 NEW + _entityName.Add(8629, "crarr"); + _entityValue.Add("lArr", 8656); // leftwards double arrow, U+21D0 ISOtech + _entityName.Add(8656, "lArr"); + _entityValue.Add("uArr", 8657); // upwards double arrow, U+21D1 ISOamsa + _entityName.Add(8657, "uArr"); + _entityValue.Add("rArr", 8658); // rightwards double arrow, U+21D2 ISOtech + _entityName.Add(8658, "rArr"); + _entityValue.Add("dArr", 8659); // downwards double arrow, U+21D3 ISOamsa + _entityName.Add(8659, "dArr"); + _entityValue.Add("hArr", 8660); // left right double arrow, U+21D4 ISOamsa + _entityName.Add(8660, "hArr"); + _entityValue.Add("forall", 8704); // for all, U+2200 ISOtech + _entityName.Add(8704, "forall"); + _entityValue.Add("part", 8706); // partial differential, U+2202 ISOtech + _entityName.Add(8706, "part"); + _entityValue.Add("exist", 8707); // there exists, U+2203 ISOtech + _entityName.Add(8707, "exist"); + _entityValue.Add("empty", 8709); // empty set = null set = diameter, U+2205 ISOamso + _entityName.Add(8709, "empty"); + _entityValue.Add("nabla", 8711); // nabla = backward difference, U+2207 ISOtech + _entityName.Add(8711, "nabla"); + _entityValue.Add("isin", 8712); // element of, U+2208 ISOtech + _entityName.Add(8712, "isin"); + _entityValue.Add("notin", 8713); // not an element of, U+2209 ISOtech + _entityName.Add(8713, "notin"); + _entityValue.Add("ni", 8715); // contains as member, U+220B ISOtech + _entityName.Add(8715, "ni"); + _entityValue.Add("prod", 8719); // n-ary product = product sign, U+220F ISOamsb + _entityName.Add(8719, "prod"); + _entityValue.Add("sum", 8721); // n-ary sumation, U+2211 ISOamsb + _entityName.Add(8721, "sum"); + _entityValue.Add("minus", 8722); // minus sign, U+2212 ISOtech + _entityName.Add(8722, "minus"); + _entityValue.Add("lowast", 8727); // asterisk operator, U+2217 ISOtech + _entityName.Add(8727, "lowast"); + _entityValue.Add("radic", 8730); // square root = radical sign, U+221A ISOtech + _entityName.Add(8730, "radic"); + _entityValue.Add("prop", 8733); // proportional to, U+221D ISOtech + _entityName.Add(8733, "prop"); + _entityValue.Add("infin", 8734); // infinity, U+221E ISOtech + _entityName.Add(8734, "infin"); + _entityValue.Add("ang", 8736); // angle, U+2220 ISOamso + _entityName.Add(8736, "ang"); + _entityValue.Add("and", 8743); // logical and = wedge, U+2227 ISOtech + _entityName.Add(8743, "and"); + _entityValue.Add("or", 8744); // logical or = vee, U+2228 ISOtech + _entityName.Add(8744, "or"); + _entityValue.Add("cap", 8745); // intersection = cap, U+2229 ISOtech + _entityName.Add(8745, "cap"); + _entityValue.Add("cup", 8746); // union = cup, U+222A ISOtech + _entityName.Add(8746, "cup"); + _entityValue.Add("int", 8747); // integral, U+222B ISOtech + _entityName.Add(8747, "int"); + _entityValue.Add("there4", 8756); // therefore, U+2234 ISOtech + _entityName.Add(8756, "there4"); + _entityValue.Add("sim", 8764); // tilde operator = varies with = similar to, U+223C ISOtech + _entityName.Add(8764, "sim"); + _entityValue.Add("cong", 8773); // approximately equal to, U+2245 ISOtech + _entityName.Add(8773, "cong"); + _entityValue.Add("asymp", 8776); // almost equal to = asymptotic to, U+2248 ISOamsr + _entityName.Add(8776, "asymp"); + _entityValue.Add("ne", 8800); // not equal to, U+2260 ISOtech + _entityName.Add(8800, "ne"); + _entityValue.Add("equiv", 8801); // identical to, U+2261 ISOtech + _entityName.Add(8801, "equiv"); + _entityValue.Add("le", 8804); // less-than or equal to, U+2264 ISOtech + _entityName.Add(8804, "le"); + _entityValue.Add("ge", 8805); // greater-than or equal to, U+2265 ISOtech + _entityName.Add(8805, "ge"); + _entityValue.Add("sub", 8834); // subset of, U+2282 ISOtech + _entityName.Add(8834, "sub"); + _entityValue.Add("sup", 8835); // superset of, U+2283 ISOtech + _entityName.Add(8835, "sup"); + _entityValue.Add("nsub", 8836); // not a subset of, U+2284 ISOamsn + _entityName.Add(8836, "nsub"); + _entityValue.Add("sube", 8838); // subset of or equal to, U+2286 ISOtech + _entityName.Add(8838, "sube"); + _entityValue.Add("supe", 8839); // superset of or equal to, U+2287 ISOtech + _entityName.Add(8839, "supe"); + _entityValue.Add("oplus", 8853); // circled plus = direct sum, U+2295 ISOamsb + _entityName.Add(8853, "oplus"); + _entityValue.Add("otimes", 8855); // circled times = vector product, U+2297 ISOamsb + _entityName.Add(8855, "otimes"); + _entityValue.Add("perp", 8869); // up tack = orthogonal to = perpendicular, U+22A5 ISOtech + _entityName.Add(8869, "perp"); + _entityValue.Add("sdot", 8901); // dot operator, U+22C5 ISOamsb + _entityName.Add(8901, "sdot"); + _entityValue.Add("lceil", 8968); // left ceiling = apl upstile, U+2308 ISOamsc + _entityName.Add(8968, "lceil"); + _entityValue.Add("rceil", 8969); // right ceiling, U+2309 ISOamsc + _entityName.Add(8969, "rceil"); + _entityValue.Add("lfloor", 8970); // left floor = apl downstile, U+230A ISOamsc + _entityName.Add(8970, "lfloor"); + _entityValue.Add("rfloor", 8971); // right floor, U+230B ISOamsc + _entityName.Add(8971, "rfloor"); + _entityValue.Add("lang", 9001); // left-pointing angle bracket = bra, U+2329 ISOtech + _entityName.Add(9001, "lang"); + _entityValue.Add("rang", 9002); // right-pointing angle bracket = ket, U+232A ISOtech + _entityName.Add(9002, "rang"); + _entityValue.Add("loz", 9674); // lozenge, U+25CA ISOpub + _entityName.Add(9674, "loz"); + _entityValue.Add("spades", 9824); // black spade suit, U+2660 ISOpub + _entityName.Add(9824, "spades"); + _entityValue.Add("clubs", 9827); // black club suit = shamrock, U+2663 ISOpub + _entityName.Add(9827, "clubs"); + _entityValue.Add("hearts", 9829); // black heart suit = valentine, U+2665 ISOpub + _entityName.Add(9829, "hearts"); + _entityValue.Add("diams", 9830); // black diamond suit, U+2666 ISOpub + _entityName.Add(9830, "diams"); + _entityValue.Add("quot", 34); // quotation mark = APL quote, U+0022 ISOnum + _entityName.Add(34, "quot"); + _entityValue.Add("amp", 38); // ampersand, U+0026 ISOnum + _entityName.Add(38, "amp"); + _entityValue.Add("lt", 60); // less-than sign, U+003C ISOnum + _entityName.Add(60, "lt"); + _entityValue.Add("gt", 62); // greater-than sign, U+003E ISOnum + _entityName.Add(62, "gt"); + _entityValue.Add("OElig", 338); // latin capital ligature OE, U+0152 ISOlat2 + _entityName.Add(338, "OElig"); + _entityValue.Add("oelig", 339); // latin small ligature oe, U+0153 ISOlat2 + _entityName.Add(339, "oelig"); + _entityValue.Add("Scaron", 352); // latin capital letter S with caron, U+0160 ISOlat2 + _entityName.Add(352, "Scaron"); + _entityValue.Add("scaron", 353); // latin small letter s with caron, U+0161 ISOlat2 + _entityName.Add(353, "scaron"); + _entityValue.Add("Yuml", 376); // latin capital letter Y with diaeresis, U+0178 ISOlat2 + _entityName.Add(376, "Yuml"); + _entityValue.Add("circ", 710); // modifier letter circumflex accent, U+02C6 ISOpub + _entityName.Add(710, "circ"); + _entityValue.Add("tilde", 732); // small tilde, U+02DC ISOdia + _entityName.Add(732, "tilde"); + _entityValue.Add("ensp", 8194); // en space, U+2002 ISOpub + _entityName.Add(8194, "ensp"); + _entityValue.Add("emsp", 8195); // em space, U+2003 ISOpub + _entityName.Add(8195, "emsp"); + _entityValue.Add("thinsp", 8201); // thin space, U+2009 ISOpub + _entityName.Add(8201, "thinsp"); + _entityValue.Add("zwnj", 8204); // zero width non-joiner, U+200C NEW RFC 2070 + _entityName.Add(8204, "zwnj"); + _entityValue.Add("zwj", 8205); // zero width joiner, U+200D NEW RFC 2070 + _entityName.Add(8205, "zwj"); + _entityValue.Add("lrm", 8206); // left-to-right mark, U+200E NEW RFC 2070 + _entityName.Add(8206, "lrm"); + _entityValue.Add("rlm", 8207); // right-to-left mark, U+200F NEW RFC 2070 + _entityName.Add(8207, "rlm"); + _entityValue.Add("ndash", 8211); // en dash, U+2013 ISOpub + _entityName.Add(8211, "ndash"); + _entityValue.Add("mdash", 8212); // em dash, U+2014 ISOpub + _entityName.Add(8212, "mdash"); + _entityValue.Add("lsquo", 8216); // left single quotation mark, U+2018 ISOnum + _entityName.Add(8216, "lsquo"); + _entityValue.Add("rsquo", 8217); // right single quotation mark, U+2019 ISOnum + _entityName.Add(8217, "rsquo"); + _entityValue.Add("sbquo", 8218); // single low-9 quotation mark, U+201A NEW + _entityName.Add(8218, "sbquo"); + _entityValue.Add("ldquo", 8220); // left double quotation mark, U+201C ISOnum + _entityName.Add(8220, "ldquo"); + _entityValue.Add("rdquo", 8221); // right double quotation mark, U+201D ISOnum + _entityName.Add(8221, "rdquo"); + _entityValue.Add("bdquo", 8222); // double low-9 quotation mark, U+201E NEW + _entityName.Add(8222, "bdquo"); + _entityValue.Add("dagger", 8224); // dagger, U+2020 ISOpub + _entityName.Add(8224, "dagger"); + _entityValue.Add("Dagger", 8225); // double dagger, U+2021 ISOpub + _entityName.Add(8225, "Dagger"); + _entityValue.Add("permil", 8240); // per mille sign, U+2030 ISOtech + _entityName.Add(8240, "permil"); + _entityValue.Add("lsaquo", 8249); // single left-pointing angle quotation mark, U+2039 ISO proposed + _entityName.Add(8249, "lsaquo"); + _entityValue.Add("rsaquo", 8250); // single right-pointing angle quotation mark, U+203A ISO proposed + _entityName.Add(8250, "rsaquo"); + _entityValue.Add("euro", 8364); // euro sign, U+20AC NEW + _entityName.Add(8364, "euro"); + + _maxEntitySize = 8 + 1; // we add the # char + #endregion + } + + /// <summary> + /// A collection of entities indexed by name. + /// </summary> + public static Hashtable EntityName + { + get + { + return _entityName; + } + } + + /// <summary> + /// A collection of entities indexed by value. + /// </summary> + public static Hashtable EntityValue + { + get + { + return _entityValue; + } + } + + /// <summary> + /// Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. + /// </summary> + /// <param name="node">The node to entitize.</param> + /// <returns>An entitized cloned node.</returns> + public static HtmlNode Entitize(HtmlNode node) + { + if (node == null) + { + throw new ArgumentNullException("node"); + } + HtmlNode result = node.CloneNode(true); + if (result.HasAttributes) + Entitize(result.Attributes); + + if (result.HasChildNodes) + { + Entitize(result.ChildNodes); + } + else + { + if (result.NodeType == HtmlNodeType.Text) + { + ((HtmlTextNode)result).Text = Entitize(((HtmlTextNode)result).Text, true, true); + } + } + return result; + } + + private static void Entitize(HtmlAttributeCollection collection) + { + foreach(HtmlAttribute at in collection) + { + at.Value = Entitize(at.Value); + } + } + + private static void Entitize(HtmlNodeCollection collection) + { + foreach(HtmlNode node in collection) + { + if (node.HasAttributes) + Entitize(node.Attributes); + + if (node.HasChildNodes) + { + Entitize(node.ChildNodes); + } + else + { + if (node.NodeType == HtmlNodeType.Text) + { + ((HtmlTextNode)node).Text = Entitize(((HtmlTextNode)node).Text, true, true); + } + } + } + } + + + /// <summary> + /// Replace characters above 127 by entities. + /// </summary> + /// <param name="text">The source text.</param> + /// <returns>The result text.</returns> + public static string Entitize(string text) + { + return Entitize(text, true); + } + + /// <summary> + /// Replace characters above 127 by entities. + /// </summary> + /// <param name="text">The source text.</param> + /// <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> + /// <returns>The result text.</returns> + public static string Entitize(string text, bool useNames) + { + return Entitize( text, useNames, false); + } + /// <summary> + /// Replace characters above 127 by entities. + /// </summary> + /// <param name="text">The source text.</param> + /// <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> + /// <param name="entitizeQuotAmpAndLtGt">If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized.</param> + /// <returns>The result text</returns> + public static string Entitize(string text, bool useNames, bool entitizeQuotAmpAndLtGt) +// _entityValue.Add("quot", 34); // quotation mark = APL quote, U+0022 ISOnum +// _entityName.Add(34, "quot"); +// _entityValue.Add("amp", 38); // ampersand, U+0026 ISOnum +// _entityName.Add(38, "amp"); +// _entityValue.Add("lt", 60); // less-than sign, U+003C ISOnum +// _entityName.Add(60, "lt"); +// _entityValue.Add("gt", 62); // greater-than sign, U+003E ISOnum +// _entityName.Add(62, "gt"); + { + if (text == null) + return null; + + if (text.Length == 0) + return text; + + StringBuilder sb = new StringBuilder(text.Length); + for(int i=0;i<text.Length;i++) + { + int code = (int)text[i]; + if ((code>127) || (entitizeQuotAmpAndLtGt && ((code == 34) || (code == 38) || (code == 60) || (code == 62)))) + { + string entity = _entityName[code] as string; + if ((entity == null) || (!useNames)) + { + sb.Append("&#" + code + ";"); + } + else + { + sb.Append("&" + entity + ";"); + } + } + else + { + sb.Append(text[i]); + } + } + + return sb.ToString(); + } + + /// <summary> + /// Replace known entities by characters. + /// </summary> + /// <param name="text">The source text.</param> + /// <returns>The result text.</returns> + public static string DeEntitize(string text) + { + if (text == null) + return null; + + if (text.Length == 0) + return text; + + StringBuilder sb = new StringBuilder(text.Length); + ParseState state = ParseState.Text; + StringBuilder entity = new StringBuilder(10); + + for(int i=0;i<text.Length;i++) + { + switch(state) + { + case ParseState.Text: + switch(text[i]) + { + case '&': + state = ParseState.EntityStart; + break; + + default: + sb.Append(text[i]); + break; + + } + break; + + case ParseState.EntityStart: + switch(text[i]) + { + case ';': + if (entity.Length == 0) + { + sb.Append("&;"); + } + else + { + if (entity[0] == '#') + { + string e = entity.ToString(); + try + { + int code = Convert.ToInt32(e.Substring(1, e.Length-1)); + sb.Append(Convert.ToChar(code)); + } + catch + { + sb.Append("&#" + e + ";"); + } + } + else + { + // named entity? + int code; + object o = _entityValue[entity.ToString()]; + if (o == null) + { + // nope + sb.Append("&" + entity + ";"); + } + else + { + // we found one + code = (int)o; + sb.Append(Convert.ToChar(code)); + } + } + entity.Remove(0, entity.Length); + } + state = ParseState.Text; + break; + + case '&': + // new entity start without end, it was not an entity... + sb.Append("&" + entity); + entity.Remove(0, entity.Length); + break; + + default: + entity.Append(text[i]); + if (entity.Length>_maxEntitySize) + { + // unknown stuff, just don't touch it + state = ParseState.Text; + sb.Append("&" + entity); + entity.Remove(0, entity.Length); + } + break; + + } + break; + } + } + + // finish the work + if (state == ParseState.EntityStart) + { + sb.Append("&" + entity); + } + return sb.ToString(); + } + + private enum ParseState + { + Text, + EntityStart + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs b/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs index c8e55ca..dab41c1 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs @@ -1,46 +1,46 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Xml; - -namespace HtmlAgilityPack -{ - internal class HtmlNameTable : XmlNameTable - { - private NameTable _nametable = new NameTable(); - - internal HtmlNameTable() - { - } - - internal string GetOrAdd(string array) - { - string s = Get(array); - if (s == null) - { - return Add(array); - } - return s; - } - - public override string Add(string array) - { - return _nametable.Add(array); - } - - public override string Get(string array) - { - return _nametable.Get(array); - } - - public override string Get(char[] array, int offset, int length) - { - return _nametable.Get(array, offset, length); - } - - public override string Add(char[] array, int offset, int length) - { - return _nametable.Add(array, offset, length); - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Xml; + +namespace HtmlAgilityPack +{ + internal class HtmlNameTable : XmlNameTable + { + private NameTable _nametable = new NameTable(); + + internal HtmlNameTable() + { + } + + internal string GetOrAdd(string array) + { + string s = Get(array); + if (s == null) + { + return Add(array); + } + return s; + } + + public override string Add(string array) + { + return _nametable.Add(array); + } + + public override string Get(string array) + { + return _nametable.Get(array); + } + + public override string Get(char[] array, int offset, int length) + { + return _nametable.Get(array, offset, length); + } + + public override string Add(char[] array, int offset, int length) + { + return _nametable.Add(array, offset, length); + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlNode.cs b/FineUI/lib/HtmlAgilityPack/HtmlNode.cs index 3053f71..beef132 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlNode.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlNode.cs @@ -1,1760 +1,1760 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections; -using System.IO; -using System.Xml; -using System.Xml.XPath; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents an HTML node. - /// </summary> - public class HtmlNode: IXPathNavigable - { - /// <summary> - /// Gets the name of a comment node. It is actually defined as '#comment'. - /// </summary> - public static readonly string HtmlNodeTypeNameComment = "#comment"; - - /// <summary> - /// Gets the name of the document node. It is actually defined as '#document'. - /// </summary> - public static readonly string HtmlNodeTypeNameDocument = "#document"; - - /// <summary> - /// Gets the name of a text node. It is actually defined as '#text'. - /// </summary> - public static readonly string HtmlNodeTypeNameText = "#text"; - - /// <summary> - /// Gets a collection of flags that define specific behaviors for specific element nodes. - /// The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. - /// </summary> - public static Hashtable ElementsFlags; - - internal HtmlNodeType _nodetype; - internal HtmlNode _nextnode; - internal HtmlNode _prevnode; - internal HtmlNode _parentnode; - internal HtmlDocument _ownerdocument; - internal HtmlNodeCollection _childnodes; - internal HtmlAttributeCollection _attributes; - internal int _line = 0; - internal int _lineposition = 0; - internal int _streamposition = 0; - internal int _innerstartindex = 0; - internal int _innerlength = 0; - internal int _outerstartindex = 0; - internal int _outerlength = 0; - internal int _namestartindex = 0; - internal int _namelength = 0; - internal bool _starttag = false; - internal string _name; - internal HtmlNode _prevwithsamename = null; - internal HtmlNode _endnode; - - internal bool _innerchanged = false; - internal bool _outerchanged = false; - internal string _innerhtml; - internal string _outerhtml; - - static HtmlNode() - { - // tags whose content may be anything - ElementsFlags = new Hashtable(); - ElementsFlags.Add("script", HtmlElementFlag.CData); - ElementsFlags.Add("style", HtmlElementFlag.CData); - ElementsFlags.Add("noxhtml", HtmlElementFlag.CData); - - // tags that can not contain other tags - ElementsFlags.Add("base", HtmlElementFlag.Empty); - ElementsFlags.Add("link", HtmlElementFlag.Empty); - ElementsFlags.Add("meta", HtmlElementFlag.Empty); - ElementsFlags.Add("isindex", HtmlElementFlag.Empty); - ElementsFlags.Add("hr", HtmlElementFlag.Empty); - ElementsFlags.Add("col", HtmlElementFlag.Empty); - ElementsFlags.Add("img", HtmlElementFlag.Empty); - ElementsFlags.Add("param", HtmlElementFlag.Empty); - ElementsFlags.Add("embed", HtmlElementFlag.Empty); - ElementsFlags.Add("frame", HtmlElementFlag.Empty); - ElementsFlags.Add("wbr", HtmlElementFlag.Empty); - ElementsFlags.Add("bgsound", HtmlElementFlag.Empty); - ElementsFlags.Add("spacer", HtmlElementFlag.Empty); - ElementsFlags.Add("keygen", HtmlElementFlag.Empty); - ElementsFlags.Add("area", HtmlElementFlag.Empty); - ElementsFlags.Add("input", HtmlElementFlag.Empty); - ElementsFlags.Add("basefont", HtmlElementFlag.Empty); - - ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty); - - // they sometimes contain, and sometimes they don 't... - ElementsFlags.Add("option", HtmlElementFlag.Empty); - - // tag whose closing tag is equivalent to open tag: - // <p>bla</p>bla will be transformed into <p>bla</p>bla - // <p>bla<p>bla will be transformed into <p>bla<p>bla and not <p>bla></p><p>bla</p> or <p>bla<p>bla</p></p> - //<br> see above - ElementsFlags.Add("br", HtmlElementFlag.Empty | HtmlElementFlag.Closed); - ElementsFlags.Add("p", HtmlElementFlag.Empty | HtmlElementFlag.Closed); - } - - /// <summary> - /// Determines if an element node is closed. - /// </summary> - /// <param name="name">The name of the element node to check. May not be null.</param> - /// <returns>true if the name is the name of a closed element node, false otherwise.</returns> - public static bool IsClosedElement(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - object flag = ElementsFlags[name.ToLower()]; - if (flag == null) - { - return false; - } - return (((HtmlElementFlag)flag)&HtmlElementFlag.Closed) != 0; - } - - /// <summary> - /// Determines if an element node can be kept overlapped. - /// </summary> - /// <param name="name">The name of the element node to check. May not be null.</param> - /// <returns>true if the name is the name of an element node that can be kept overlapped, false otherwise.</returns> - public static bool CanOverlapElement(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - object flag = ElementsFlags[name.ToLower()]; - if (flag == null) - { - return false; - } - return (((HtmlElementFlag)flag)&HtmlElementFlag.CanOverlap) != 0; - } - - /// <summary> - /// Determines if a text corresponds to the closing tag of an node that can be kept overlapped. - /// </summary> - /// <param name="text">The text to check. May not be null.</param> - /// <returns>true or false.</returns> - public static bool IsOverlappedClosingElement(string text) - { - if (text == null) - { - throw new ArgumentNullException("text"); - } - // min is </x>: 4 - if (text.Length <= 4) - return false; - - if ((text[0] != '<') || - (text[text.Length - 1] != '>') || - (text[1] != '/')) - return false; - - string name = text.Substring(2, text.Length - 3); - return CanOverlapElement(name); - } - - /// <summary> - /// Determines if an element node is a CDATA element node. - /// </summary> - /// <param name="name">The name of the element node to check. May not be null.</param> - /// <returns>true if the name is the name of a CDATA element node, false otherwise.</returns> - public static bool IsCDataElement(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - object flag = ElementsFlags[name.ToLower()]; - if (flag == null) - { - return false; - } - return (((HtmlElementFlag)flag)&HtmlElementFlag.CData) != 0; - } - - /// <summary> - /// Determines if an element node is defined as empty. - /// </summary> - /// <param name="name">The name of the element node to check. May not be null.</param> - /// <returns>true if the name is the name of an empty element node, false otherwise.</returns> - public static bool IsEmptyElement(string name) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - if (name.Length == 0) - { - return true; - } - - // <!DOCTYPE ... - if ('!' == name[0]) - { - return true; - } - - // <?xml ... - if ('?' == name[0]) - { - return true; - } - - object flag = ElementsFlags[name.ToLower()]; - if (flag == null) - { - return false; - } - return (((HtmlElementFlag)flag)&HtmlElementFlag.Empty) != 0; - } - - /// <summary> - /// Creates an HTML node from a string representing literal HTML. - /// </summary> - /// <param name="html">The HTML text.</param> - /// <returns>The newly created node instance.</returns> - public static HtmlNode CreateNode(string html) - { - // REVIEW: this is *not* optimum... - HtmlDocument doc = new HtmlDocument(); - doc.LoadHtml(html); - return doc.DocumentNode.FirstChild; - } - - /// <summary> - /// Creates a duplicate of the node and the subtree under it. - /// </summary> - /// <param name="node">The node to duplicate. May not be null.</param> - public void CopyFrom(HtmlNode node) - { - CopyFrom(node, true); - } - - /// <summary> - /// Creates a duplicate of the node. - /// </summary> - /// <param name="node">The node to duplicate. May not be null.</param> - /// <param name="deep">true to recursively clone the subtree under the specified node, false to clone only the node itself.</param> - public void CopyFrom(HtmlNode node, bool deep) - { - if (node == null) - { - throw new ArgumentNullException("node"); - } - - Attributes.RemoveAll(); - if (node.HasAttributes) - { - foreach(HtmlAttribute att in node.Attributes) - { - SetAttributeValue(att.Name, att.Value); - } - } - - if (!deep) - { - RemoveAllChildren(); - if (node.HasChildNodes) - { - foreach(HtmlNode child in node.ChildNodes) - { - AppendChild(child.CloneNode(true)); - } - } - } - } - - internal HtmlNode(HtmlNodeType type, HtmlDocument ownerdocument, int index) - { - _nodetype = type; - _ownerdocument = ownerdocument; - _outerstartindex = index; - - switch(type) - { - case HtmlNodeType.Comment: - _name = HtmlNodeTypeNameComment; - _endnode = this; - break; - - case HtmlNodeType.Document: - _name = HtmlNodeTypeNameDocument; - _endnode = this; - break; - - case HtmlNodeType.Text: - _name = HtmlNodeTypeNameText; - _endnode = this; - break; - } - - if (_ownerdocument._openednodes != null) - { - if (!Closed) - { - // we use the index as the key - - // -1 means the node comes from public - if (-1 != index) - { - _ownerdocument._openednodes.Add(index, this); - } - } - } - - if ((-1 == index) && (type != HtmlNodeType.Comment) && (type != HtmlNodeType.Text)) - { - // innerhtml and outerhtml must be calculated - _outerchanged = true; - _innerchanged = true; - } - } - - internal void CloseNode(HtmlNode endnode) - { - if (!_ownerdocument.OptionAutoCloseOnEnd) - { - // close all children - if (_childnodes != null) - { - foreach(HtmlNode child in _childnodes) - { - if (child.Closed) - continue; - - // create a fake closer node - HtmlNode close = new HtmlNode(NodeType, _ownerdocument, -1); - close._endnode = close; - child.CloseNode(close); - } - } - } - - if (!Closed) - { - _endnode = endnode; - - if (_ownerdocument._openednodes != null) - { - _ownerdocument._openednodes.Remove(_outerstartindex); - } - - HtmlNode self = _ownerdocument._lastnodes[Name] as HtmlNode; - if (self == this) - { - _ownerdocument._lastnodes.Remove(Name); - _ownerdocument.UpdateLastParentNode(); - } - - if (endnode == this) - return; - - // create an inner section - _innerstartindex = _outerstartindex + _outerlength; - _innerlength = endnode._outerstartindex - _innerstartindex; - - // update full length - _outerlength = (endnode._outerstartindex + endnode._outerlength) - _outerstartindex; - } - } - - internal HtmlNode EndNode - { - get - { - return _endnode; - } - } - - internal string GetId() - { - HtmlAttribute att = Attributes["id"]; - if (att == null) - { - return null; - } - return att.Value; - } - - internal void SetId(string id) - { - HtmlAttribute att = Attributes["id"]; - if (att == null) - { - att = _ownerdocument.CreateAttribute("id"); - } - att.Value = id; - _ownerdocument.SetIdForNode(this, att.Value); - _outerchanged = true; - } - - /// <summary> - /// Creates a new XPathNavigator object for navigating this HTML node. - /// </summary> - /// <returns>An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document.</returns> - public XPathNavigator CreateNavigator() - { - return new HtmlNodeNavigator(_ownerdocument, this); - } - - /// <summary> - /// Selects the first XmlNode that matches the XPath expression. - /// </summary> - /// <param name="xpath">The XPath expression. May not be null.</param> - /// <returns>The first HtmlNode that matches the XPath query or a null reference if no matching node was found.</returns> - public HtmlNode SelectSingleNode(string xpath) - { - if (xpath == null) - { - throw new ArgumentNullException("xpath"); - } - - HtmlNodeNavigator nav = new HtmlNodeNavigator(_ownerdocument, this); - XPathNodeIterator it = nav.Select(xpath); - if (!it.MoveNext()) - { - return null; - } - - HtmlNodeNavigator node = (HtmlNodeNavigator)it.Current; - return node.CurrentNode; - } - - /// <summary> - /// Selects a list of nodes matching the XPath expression. - /// </summary> - /// <param name="xpath">The XPath expression.</param> - /// <returns>An HtmlNodeCollection containing a collection of nodes matching the XPath query, or null if no node matched the XPath expression.</returns> - public HtmlNodeCollection SelectNodes(string xpath) - { - HtmlNodeCollection list = new HtmlNodeCollection(null); - - HtmlNodeNavigator nav = new HtmlNodeNavigator(_ownerdocument, this); - XPathNodeIterator it = nav.Select(xpath); - while (it.MoveNext()) - { - HtmlNodeNavigator n = (HtmlNodeNavigator)it.Current; - list.Add(n.CurrentNode); - } - if (list.Count == 0) - { - return null; - } - return list; - } - - /// <summary> - /// Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. - /// </summary> - public string Id - { - get - { - if (_ownerdocument._nodesid == null) - { - throw new Exception(HtmlDocument.HtmlExceptionUseIdAttributeFalse); - } - return GetId(); - } - set - { - if (_ownerdocument._nodesid == null) - { - throw new Exception(HtmlDocument.HtmlExceptionUseIdAttributeFalse); - } - - if (value == null) - { - throw new ArgumentNullException("value"); - } - SetId(value); - } - } - - /// <summary> - /// Gets the line number of this node in the document. - /// </summary> - public int Line - { - get - { - return _line; - } - } - - /// <summary> - /// Gets the column number of this node in the document. - /// </summary> - public int LinePosition - { - get - { - return _lineposition; - } - } - - /// <summary> - /// Gets the stream position of this node in the document, relative to the start of the document. - /// </summary> - public int StreamPosition - { - get - { - return _streamposition; - } - } - - /// <summary> - /// Gets a value indicating if this node has been closed or not. - /// </summary> - public bool Closed - { - get - { - return (_endnode != null); - } - } - - /// <summary> - /// Gets or sets this node's name. - /// </summary> - public string Name - { - get - { - if (_name == null) - { - _name = _ownerdocument._text.Substring(_namestartindex, _namelength).ToLower(); - } - return _name; - } - set - { - _name = value; - } - } - - /// <summary> - /// Gets or Sets the text between the start and end tags of the object. - /// </summary> - public virtual string InnerText - { - get - { - if (_nodetype == HtmlNodeType.Text) - { - return ((HtmlTextNode)this).Text; - } - - if (_nodetype == HtmlNodeType.Comment) - { - return ((HtmlCommentNode)this).Comment; - } - - // note: right now, this method is *slow*, because we recompute everything. - // it could be optimised like innerhtml - if (!HasChildNodes) - { - return string.Empty; - } - - string s = null; - foreach(HtmlNode node in ChildNodes) - { - s += node.InnerText; - } - return s; - } - } - - /// <summary> - /// Gets or Sets the HTML between the start and end tags of the object. - /// </summary> - public virtual string InnerHtml - { - get - { - if (_innerchanged) - { - _innerhtml = WriteContentTo(); - _innerchanged = false; - return _innerhtml; - } - if (_innerhtml != null) - { - return _innerhtml; - } - - if (_innerstartindex < 0) - { - return string.Empty; - } - - return _ownerdocument._text.Substring(_innerstartindex, _innerlength); - } - set - { - HtmlDocument doc = new HtmlDocument(); - doc.LoadHtml(value); - - RemoveAllChildren(); - AppendChildren(doc.DocumentNode.ChildNodes); - } - } - - /// <summary> - /// Gets or Sets the object and its content in HTML. - /// </summary> - public virtual string OuterHtml - { - get - { - if (_outerchanged) - { - _outerhtml = WriteTo(); - _outerchanged = false; - return _outerhtml; - } - - if (_outerhtml != null) - { - return _outerhtml; - } - - if (_outerstartindex < 0) - { - return string.Empty; - } - - return _ownerdocument._text.Substring(_outerstartindex, _outerlength); - } - } - - /// <summary> - /// Creates a duplicate of the node - /// </summary> - /// <returns></returns> - public HtmlNode Clone() - { - return CloneNode(true); - } - - /// <summary> - /// Creates a duplicate of the node and changes its name at the same time. - /// </summary> - /// <param name="newName">The new name of the cloned node. May not be null.</param> - /// <returns>The cloned node.</returns> - public HtmlNode CloneNode(string newName) - { - return CloneNode(newName, true); - } - - /// <summary> - /// Creates a duplicate of the node and changes its name at the same time. - /// </summary> - /// <param name="newName">The new name of the cloned node. May not be null.</param> - /// <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> - /// <returns>The cloned node.</returns> - public HtmlNode CloneNode(string newName, bool deep) - { - if (newName == null) - { - throw new ArgumentNullException("newName"); - } - - HtmlNode node = CloneNode(deep); - node._name = newName; - return node; - } - - /// <summary> - /// Creates a duplicate of the node. - /// </summary> - /// <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> - /// <returns>The cloned node.</returns> - public HtmlNode CloneNode(bool deep) - { - HtmlNode node = _ownerdocument.CreateNode(_nodetype); - node._name = Name; - - switch(_nodetype) - { - case HtmlNodeType.Comment: - ((HtmlCommentNode)node).Comment = ((HtmlCommentNode)this).Comment; - return node; - - case HtmlNodeType.Text: - ((HtmlTextNode)node).Text = ((HtmlTextNode)this).Text; - return node; - } - - // attributes - if (HasAttributes) - { - foreach(HtmlAttribute att in _attributes) - { - HtmlAttribute newatt = att.Clone(); - node.Attributes.Append(newatt); - } - } - - // closing attributes - if (HasClosingAttributes) - { - node._endnode = _endnode.CloneNode(false); - foreach(HtmlAttribute att in _endnode._attributes) - { - HtmlAttribute newatt = att.Clone(); - node._endnode._attributes.Append(newatt); - } - } - if (!deep) - { - return node; - } - - if (!HasChildNodes) - { - return node; - } - - // child nodes - foreach(HtmlNode child in _childnodes) - { - HtmlNode newchild = child.Clone(); - node.AppendChild(newchild); - } - return node; - } - - /// <summary> - /// Gets the HTML node immediately following this element. - /// </summary> - public HtmlNode NextSibling - { - get - { - return _nextnode; - } - } - - /// <summary> - /// Gets the node immediately preceding this node. - /// </summary> - public HtmlNode PreviousSibling - { - get - { - return _prevnode; - } - } - - /// <summary> - /// Removes all the children and/or attributes of the current node. - /// </summary> - public void RemoveAll() - { - RemoveAllChildren(); - - if (HasAttributes) - { - _attributes.Clear(); - } - - if ((_endnode != null) && (_endnode != this)) - { - if (_endnode._attributes != null) - { - _endnode._attributes.Clear(); - } - } - _outerchanged = true; - _innerchanged = true; - } - - /// <summary> - /// Removes all the children of the current node. - /// </summary> - public void RemoveAllChildren() - { - if (!HasChildNodes) - { - return; - } - - if (_ownerdocument.OptionUseIdAttribute) - { - // remove nodes from id list - foreach(HtmlNode node in _childnodes) - { - _ownerdocument.SetIdForNode(null, node.GetId()); - } - } - _childnodes.Clear(); - _outerchanged = true; - _innerchanged = true; - } - - /// <summary> - /// Removes the specified child node. - /// </summary> - /// <param name="oldChild">The node being removed. May not be null.</param> - /// <returns>The node removed.</returns> - public HtmlNode RemoveChild(HtmlNode oldChild) - { - if (oldChild == null) - { - throw new ArgumentNullException("oldChild"); - } - - int index = -1; - - if (_childnodes != null) - { - index = _childnodes[oldChild]; - } - - if (index == -1) - { - throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); - } - - _childnodes.Remove(index); - - _ownerdocument.SetIdForNode(null, oldChild.GetId()); - _outerchanged = true; - _innerchanged = true; - return oldChild; - } - - /// <summary> - /// Removes the specified child node. - /// </summary> - /// <param name="oldChild">The node being removed. May not be null.</param> - /// <param name="keepGrandChildren">true to keep grand children of the node, false otherwise.</param> - /// <returns>The node removed.</returns> - public HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren) - { - if (oldChild == null) - { - throw new ArgumentNullException("oldChild"); - } - - if ((oldChild._childnodes != null) && keepGrandChildren) - { - // get prev sibling - HtmlNode prev = oldChild.PreviousSibling; - - // reroute grand children to ourselves - foreach(HtmlNode grandchild in oldChild._childnodes) - { - InsertAfter(grandchild, prev); - } - } - RemoveChild(oldChild); - _outerchanged = true; - _innerchanged = true; - return oldChild; - } - - /// <summary> - /// Replaces the child node oldChild with newChild node. - /// </summary> - /// <param name="newChild">The new node to put in the child list.</param> - /// <param name="oldChild">The node being replaced in the list.</param> - /// <returns>The node replaced.</returns> - public HtmlNode ReplaceChild(HtmlNode newChild, HtmlNode oldChild) - { - if (newChild == null) - { - return RemoveChild(oldChild); - } - - if (oldChild == null) - { - return AppendChild(newChild); - } - - int index = -1; - - if (_childnodes != null) - { - index = _childnodes[oldChild]; - } - - if (index == -1) - { - throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); - } - - _childnodes.Replace(index, newChild); - - _ownerdocument.SetIdForNode(null, oldChild.GetId()); - _ownerdocument.SetIdForNode(newChild, newChild.GetId()); - _outerchanged = true; - _innerchanged = true; - return newChild; - } - - /// <summary> - /// Inserts the specified node immediately before the specified reference node. - /// </summary> - /// <param name="newChild">The node to insert. May not be null.</param> - /// <param name="refChild">The node that is the reference node. The newChild is placed before this node.</param> - /// <returns>The node being inserted.</returns> - public HtmlNode InsertBefore(HtmlNode newChild, HtmlNode refChild) - { - if (newChild == null) - { - throw new ArgumentNullException("newChild"); - } - - if (refChild == null) - { - return AppendChild(newChild); - } - - if (newChild == refChild) - { - return newChild; - } - - int index = -1; - - if (_childnodes != null) - { - index = _childnodes[refChild]; - } - - if (index == -1) - { - throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); - } - - _childnodes.Insert(index, newChild); - - _ownerdocument.SetIdForNode(newChild, newChild.GetId()); - _outerchanged = true; - _innerchanged = true; - return newChild; - } - - /// <summary> - /// Inserts the specified node immediately after the specified reference node. - /// </summary> - /// <param name="newChild">The node to insert. May not be null.</param> - /// <param name="refChild">The node that is the reference node. The newNode is placed after the refNode.</param> - /// <returns>The node being inserted.</returns> - public HtmlNode InsertAfter(HtmlNode newChild, HtmlNode refChild) - { - if (newChild == null) - { - throw new ArgumentNullException("newChild"); - } - - if (refChild == null) - { - return PrependChild(newChild); - } - - if (newChild == refChild) - { - return newChild; - } - - int index = -1; - - if (_childnodes != null) - { - index = _childnodes[refChild]; - } - if (index == -1) - { - throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); - } - - _childnodes.Insert(index + 1, newChild); - - _ownerdocument.SetIdForNode(newChild, newChild.GetId()); - _outerchanged = true; - _innerchanged = true; - return newChild; - } - - /// <summary> - /// Gets the first child of the node. - /// </summary> - public HtmlNode FirstChild - { - get - { - if (!HasChildNodes) - { - return null; - } - return _childnodes[0]; - } - } - - /// <summary> - /// Gets the last child of the node. - /// </summary> - public HtmlNode LastChild - { - get - { - if (!HasChildNodes) - { - return null; - } - return _childnodes[_childnodes.Count-1]; - } - } - - /// <summary> - /// Gets the type of this node. - /// </summary> - public HtmlNodeType NodeType - { - get - { - return _nodetype; - } - } - - /// <summary> - /// Gets the parent of this node (for nodes that can have parents). - /// </summary> - public HtmlNode ParentNode - { - get - { - return _parentnode; - } - } - - /// <summary> - /// Gets the HtmlDocument to which this node belongs. - /// </summary> - public HtmlDocument OwnerDocument - { - get - { - return _ownerdocument; - } - } - - /// <summary> - /// Gets all the children of the node. - /// </summary> - public HtmlNodeCollection ChildNodes - { - get - { - if (_childnodes == null) - { - _childnodes = new HtmlNodeCollection(this); - } - return _childnodes; - } - } - - /// <summary> - /// Adds the specified node to the beginning of the list of children of this node. - /// </summary> - /// <param name="newChild">The node to add. May not be null.</param> - /// <returns>The node added.</returns> - public HtmlNode PrependChild(HtmlNode newChild) - { - if (newChild == null) - { - throw new ArgumentNullException("newChild"); - } - ChildNodes.Prepend(newChild); - _ownerdocument.SetIdForNode(newChild, newChild.GetId()); - _outerchanged = true; - _innerchanged = true; - return newChild; - } - - /// <summary> - /// Adds the specified node list to the beginning of the list of children of this node. - /// </summary> - /// <param name="newChildren">The node list to add. May not be null.</param> - public void PrependChildren(HtmlNodeCollection newChildren) - { - if (newChildren == null) - { - throw new ArgumentNullException("newChildren"); - } - - foreach(HtmlNode newChild in newChildren) - { - PrependChild(newChild); - } - } - - /// <summary> - /// Adds the specified node to the end of the list of children of this node. - /// </summary> - /// <param name="newChild">The node to add. May not be null.</param> - /// <returns>The node added.</returns> - public HtmlNode AppendChild(HtmlNode newChild) - { - if (newChild == null) - { - throw new ArgumentNullException("newChild"); - } - - ChildNodes.Append(newChild); - _ownerdocument.SetIdForNode(newChild, newChild.GetId()); - _outerchanged = true; - _innerchanged = true; - return newChild; - } - - /// <summary> - /// Adds the specified node to the end of the list of children of this node. - /// </summary> - /// <param name="newChildren">The node list to add. May not be null.</param> - public void AppendChildren(HtmlNodeCollection newChildren) - { - if (newChildren == null) - throw new ArgumentNullException("newChildrend"); - - foreach(HtmlNode newChild in newChildren) - { - AppendChild(newChild); - } - } - - /// <summary> - /// Gets a value indicating whether the current node has any attributes. - /// </summary> - public bool HasAttributes - { - get - { - if (_attributes == null) - { - return false; - } - - if (_attributes.Count <= 0) - { - return false; - } - return true; - } - } - - /// <summary> - /// Gets a value indicating whether the current node has any attributes on the closing tag. - /// </summary> - public bool HasClosingAttributes - { - get - { - if ((_endnode == null) || (_endnode == this)) - { - return false; - } - - if (_endnode._attributes == null) - { - return false; - } - - if (_endnode._attributes.Count <= 0) - { - return false; - } - return true; - } - } - - /// <summary> - /// Gets a value indicating whether this node has any child nodes. - /// </summary> - public bool HasChildNodes - { - get - { - if (_childnodes == null) - { - return false; - } - - if (_childnodes.Count <= 0) - { - return false; - } - return true; - } - } - - /// <summary> - /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - /// </summary> - /// <param name="name">The name of the attribute to get. May not be null.</param> - /// <param name="def">The default value to return if not found.</param> - /// <returns>The value of the attribute if found, the default value if not found.</returns> - public string GetAttributeValue(string name, string def) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - if (!HasAttributes) - { - return def; - } - HtmlAttribute att = Attributes[name]; - if (att == null) - { - return def; - } - return att.Value; - } - - /// <summary> - /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - /// </summary> - /// <param name="name">The name of the attribute to get. May not be null.</param> - /// <param name="def">The default value to return if not found.</param> - /// <returns>The value of the attribute if found, the default value if not found.</returns> - public int GetAttributeValue(string name, int def) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - if (!HasAttributes) - { - return def; - } - HtmlAttribute att = Attributes[name]; - if (att == null) - { - return def; - } - try - { - return Convert.ToInt32(att.Value); - } - catch - { - return def; - } - } - - /// <summary> - /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. - /// </summary> - /// <param name="name">The name of the attribute to get. May not be null.</param> - /// <param name="def">The default value to return if not found.</param> - /// <returns>The value of the attribute if found, the default value if not found.</returns> - public bool GetAttributeValue(string name, bool def) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - - if (!HasAttributes) - { - return def; - } - HtmlAttribute att = Attributes[name]; - if (att == null) - { - return def; - } - try - { - return Convert.ToBoolean(att.Value); - } - catch - { - return def; - } - } - - /// <summary> - /// Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. - /// </summary> - /// <param name="name">The name of the attribute to set. May not be null.</param> - /// <param name="value">The value for the attribute.</param> - /// <returns>The corresponding attribute instance.</returns> - public HtmlAttribute SetAttributeValue(string name, string value) - { - if (name == null) - { - throw new ArgumentNullException("name"); - } - HtmlAttribute att = Attributes[name]; - if (att == null) - { - return Attributes.Append(_ownerdocument.CreateAttribute(name, value)); - } - att.Value = value; - return att; - } - - /// <summary> - /// Gets the collection of HTML attributes for this node. May not be null. - /// </summary> - public HtmlAttributeCollection Attributes - { - get - { - if (!HasAttributes) - { - _attributes = new HtmlAttributeCollection(this); - } - return _attributes; - } - } - - /// <summary> - /// Gets the collection of HTML attributes for the closing tag. May not be null. - /// </summary> - public HtmlAttributeCollection ClosingAttributes - { - get - { - if (!HasClosingAttributes) - { - return new HtmlAttributeCollection(this); - } - return _endnode.Attributes; - } - } - - internal void WriteAttribute(TextWriter outText, HtmlAttribute att) - { - string name; - - if (_ownerdocument.OptionOutputAsXml) - { - if (_ownerdocument.OptionOutputUpperCase) - { - name = att.XmlName.ToUpper(); - } - else - { - name = att.XmlName; - } - - outText.Write(" " + name + "=\"" + HtmlDocument.HtmlEncode(att.XmlValue) + "\""); - } - else - { - if (_ownerdocument.OptionOutputUpperCase) - { - name = att.Name.ToUpper(); - } - else - { - name = att.Name; - } - - if (att.Name.Length >= 4) - { - if ((att.Name[0] == '<') && (att.Name[1] == '%') && - (att.Name[att.Name.Length-1] == '>') && (att.Name[att.Name.Length-2] == '%')) - { - outText.Write(" " + name); - return; - } - } - if (_ownerdocument.OptionOutputOptimizeAttributeValues) - { - if (att.Value.IndexOfAny(new Char[]{(char)10, (char)13, (char)9, ' '}) < 0) - { - outText.Write(" " + name + "=" + att.Value); - } - else - { - outText.Write(" " + name + "=\"" + att.Value + "\""); - } - } - else - { - outText.Write(" " + name + "=\"" + att.Value + "\""); - } - } - } - - internal static void WriteAttributes(XmlWriter writer, HtmlNode node) - { - if (!node.HasAttributes) - { - return; - } - // we use _hashitems to make sure attributes are written only once - foreach(HtmlAttribute att in node.Attributes._hashitems.Values) - { - writer.WriteAttributeString(att.XmlName, att.Value); - } - } - - internal void WriteAttributes(TextWriter outText, bool closing) - { - if (_ownerdocument.OptionOutputAsXml) - { - if (_attributes == null) - { - return; - } - // we use _hashitems to make sure attributes are written only once - foreach(HtmlAttribute att in _attributes._hashitems.Values) - { - WriteAttribute(outText, att); - } - return; - } - - if (!closing) - { - if (_attributes != null) - { - - foreach(HtmlAttribute att in _attributes) - { - WriteAttribute(outText, att); - } - } - if (_ownerdocument.OptionAddDebuggingAttributes) - { - WriteAttribute(outText, _ownerdocument.CreateAttribute("_closed", Closed.ToString())); - WriteAttribute(outText, _ownerdocument.CreateAttribute("_children", ChildNodes.Count.ToString())); - - int i = 0; - foreach(HtmlNode n in ChildNodes) - { - WriteAttribute(outText, _ownerdocument.CreateAttribute("_child_" + i, - n.Name)); - i++; - } - } - } - else - { - if (_endnode == null) - { - return; - } - - if (_endnode._attributes == null) - { - return; - } - - if (_endnode == this) - { - return; - } - - foreach(HtmlAttribute att in _endnode._attributes) - { - WriteAttribute(outText, att); - } - if (_ownerdocument.OptionAddDebuggingAttributes) - { - WriteAttribute(outText, _ownerdocument.CreateAttribute("_closed", Closed.ToString())); - WriteAttribute(outText, _ownerdocument.CreateAttribute("_children", ChildNodes.Count.ToString())); - } - } - } - - internal static string GetXmlComment(HtmlCommentNode comment) - { - string s = comment.Comment; - return s.Substring(4, s.Length-7).Replace("--", " - -"); - } - - /// <summary> - /// Saves the current node to the specified TextWriter. - /// </summary> - /// <param name="outText">The TextWriter to which you want to save.</param> - public void WriteTo(TextWriter outText) - { - string html; - switch(_nodetype) - { - case HtmlNodeType.Comment: - html = ((HtmlCommentNode)this).Comment; - if (_ownerdocument.OptionOutputAsXml) - { - outText.Write("<!--" + GetXmlComment((HtmlCommentNode)this) + " -->"); - } - else - { - outText.Write(html); - } - break; - - case HtmlNodeType.Document: - if (_ownerdocument.OptionOutputAsXml) - { - outText.Write("<?xml version=\"1.0\" encoding=\"" + _ownerdocument.GetOutEncoding().BodyName + "\"?>"); - - // check there is a root element - if (_ownerdocument.DocumentNode.HasChildNodes) - { - int rootnodes = _ownerdocument.DocumentNode._childnodes.Count; - if (rootnodes > 0) - { - HtmlNode xml = _ownerdocument.GetXmlDeclaration(); - if (xml != null) - { - rootnodes --; - } - - if (rootnodes > 1) - { - if (_ownerdocument.OptionOutputUpperCase) - { - outText.Write("<SPAN>"); - WriteContentTo(outText); - outText.Write("</SPAN>"); - } - else - { - outText.Write("<span>"); - WriteContentTo(outText); - outText.Write("</span>"); - } - break; - } - } - } - } - WriteContentTo(outText); - break; - - case HtmlNodeType.Text: - html = ((HtmlTextNode)this).Text; - if (_ownerdocument.OptionOutputAsXml) - { - outText.Write(HtmlDocument.HtmlEncode(html)); - } - else - { - outText.Write(html); - } - break; - - case HtmlNodeType.Element: - string name; - if (_ownerdocument.OptionOutputUpperCase) - { - name = Name.ToUpper(); - } - else - { - name = Name; - } - - if (_ownerdocument.OptionOutputAsXml) - { - if (name.Length > 0) - { - if (name[0] == '?') - { - // forget this one, it's been done at the document level - break; - } - - if (name.Trim().Length == 0) - { - break; - } - name = HtmlDocument.GetXmlName(name); - } - else - { - break; - } - } - - outText.Write("<" + name); - WriteAttributes(outText, false); - - if (!HasChildNodes) - { - if (HtmlNode.IsEmptyElement(Name)) - { - if ((_ownerdocument.OptionWriteEmptyNodes) || (_ownerdocument.OptionOutputAsXml)) - { - outText.Write(" />"); - } - else - { - if (Name.Length > 0) - { - if (Name[0] == '?') - { - outText.Write("?"); - } - } - - outText.Write(">"); - } - } - else - { - outText.Write("></" + name + ">"); - } - } - else - { - outText.Write(">"); - bool cdata = false; - if (_ownerdocument.OptionOutputAsXml) - { - if (HtmlNode.IsCDataElement(Name)) - { - // this code and the following tries to output things as nicely as possible for old browsers. - cdata = true; - outText.Write("\r\n//<![CDATA[\r\n"); - } - } - - if (cdata) - { - if (HasChildNodes) - { - // child must be a text - ChildNodes[0].WriteTo(outText); - } - outText.Write("\r\n//]]>//\r\n"); - } - else - { - WriteContentTo(outText); - } - - outText.Write("</" + name); - if (!_ownerdocument.OptionOutputAsXml) - { - WriteAttributes(outText, true); - } - outText.Write(">"); - } - break; - } - } - - /// <summary> - /// Saves the current node to the specified XmlWriter. - /// </summary> - /// <param name="writer">The XmlWriter to which you want to save.</param> - public void WriteTo(XmlWriter writer) - { - string html; - switch(_nodetype) - { - case HtmlNodeType.Comment: - writer.WriteComment(GetXmlComment((HtmlCommentNode)this)); - break; - - case HtmlNodeType.Document: - writer.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"" + _ownerdocument.GetOutEncoding().BodyName + "\""); - if (HasChildNodes) - { - foreach(HtmlNode subnode in ChildNodes) - { - subnode.WriteTo(writer); - } - } - break; - - case HtmlNodeType.Text: - html = ((HtmlTextNode)this).Text; - writer.WriteString(html); - break; - - case HtmlNodeType.Element: - string name; - if (_ownerdocument.OptionOutputUpperCase) - { - name = Name.ToUpper(); - } - else - { - name = Name; - } - writer.WriteStartElement(name); - WriteAttributes(writer, this); - - if (HasChildNodes) - { - foreach(HtmlNode subnode in ChildNodes) - { - subnode.WriteTo(writer); - } - } - writer.WriteEndElement(); - break; - } - } - - /// <summary> - /// Saves all the children of the node to the specified TextWriter. - /// </summary> - /// <param name="outText">The TextWriter to which you want to save.</param> - public void WriteContentTo(TextWriter outText) - { - if (_childnodes == null) - { - return; - } - - foreach(HtmlNode node in _childnodes) - { - node.WriteTo(outText); - } - } - - /// <summary> - /// Saves the current node to a string. - /// </summary> - /// <returns>The saved string.</returns> - public string WriteTo() - { - StringWriter sw = new StringWriter(); - WriteTo(sw); - sw.Flush(); - return sw.ToString(); - } - - /// <summary> - /// Saves all the children of the node to a string. - /// </summary> - /// <returns>The saved string.</returns> - public string WriteContentTo() - { - StringWriter sw = new StringWriter(); - WriteContentTo(sw); - sw.Flush(); - return sw.ToString(); - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; +using System.IO; +using System.Xml; +using System.Xml.XPath; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML node. + /// </summary> + public class HtmlNode: IXPathNavigable + { + /// <summary> + /// Gets the name of a comment node. It is actually defined as '#comment'. + /// </summary> + public static readonly string HtmlNodeTypeNameComment = "#comment"; + + /// <summary> + /// Gets the name of the document node. It is actually defined as '#document'. + /// </summary> + public static readonly string HtmlNodeTypeNameDocument = "#document"; + + /// <summary> + /// Gets the name of a text node. It is actually defined as '#text'. + /// </summary> + public static readonly string HtmlNodeTypeNameText = "#text"; + + /// <summary> + /// Gets a collection of flags that define specific behaviors for specific element nodes. + /// The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. + /// </summary> + public static Hashtable ElementsFlags; + + internal HtmlNodeType _nodetype; + internal HtmlNode _nextnode; + internal HtmlNode _prevnode; + internal HtmlNode _parentnode; + internal HtmlDocument _ownerdocument; + internal HtmlNodeCollection _childnodes; + internal HtmlAttributeCollection _attributes; + internal int _line = 0; + internal int _lineposition = 0; + internal int _streamposition = 0; + internal int _innerstartindex = 0; + internal int _innerlength = 0; + internal int _outerstartindex = 0; + internal int _outerlength = 0; + internal int _namestartindex = 0; + internal int _namelength = 0; + internal bool _starttag = false; + internal string _name; + internal HtmlNode _prevwithsamename = null; + internal HtmlNode _endnode; + + internal bool _innerchanged = false; + internal bool _outerchanged = false; + internal string _innerhtml; + internal string _outerhtml; + + static HtmlNode() + { + // tags whose content may be anything + ElementsFlags = new Hashtable(); + ElementsFlags.Add("script", HtmlElementFlag.CData); + ElementsFlags.Add("style", HtmlElementFlag.CData); + ElementsFlags.Add("noxhtml", HtmlElementFlag.CData); + + // tags that can not contain other tags + ElementsFlags.Add("base", HtmlElementFlag.Empty); + ElementsFlags.Add("link", HtmlElementFlag.Empty); + ElementsFlags.Add("meta", HtmlElementFlag.Empty); + ElementsFlags.Add("isindex", HtmlElementFlag.Empty); + ElementsFlags.Add("hr", HtmlElementFlag.Empty); + ElementsFlags.Add("col", HtmlElementFlag.Empty); + ElementsFlags.Add("img", HtmlElementFlag.Empty); + ElementsFlags.Add("param", HtmlElementFlag.Empty); + ElementsFlags.Add("embed", HtmlElementFlag.Empty); + ElementsFlags.Add("frame", HtmlElementFlag.Empty); + ElementsFlags.Add("wbr", HtmlElementFlag.Empty); + ElementsFlags.Add("bgsound", HtmlElementFlag.Empty); + ElementsFlags.Add("spacer", HtmlElementFlag.Empty); + ElementsFlags.Add("keygen", HtmlElementFlag.Empty); + ElementsFlags.Add("area", HtmlElementFlag.Empty); + ElementsFlags.Add("input", HtmlElementFlag.Empty); + ElementsFlags.Add("basefont", HtmlElementFlag.Empty); + + ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty); + + // they sometimes contain, and sometimes they don 't... + ElementsFlags.Add("option", HtmlElementFlag.Empty); + + // tag whose closing tag is equivalent to open tag: + // <p>bla</p>bla will be transformed into <p>bla</p>bla + // <p>bla<p>bla will be transformed into <p>bla<p>bla and not <p>bla></p><p>bla</p> or <p>bla<p>bla</p></p> + //<br> see above + ElementsFlags.Add("br", HtmlElementFlag.Empty | HtmlElementFlag.Closed); + ElementsFlags.Add("p", HtmlElementFlag.Empty | HtmlElementFlag.Closed); + } + + /// <summary> + /// Determines if an element node is closed. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of a closed element node, false otherwise.</returns> + public static bool IsClosedElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.Closed) != 0; + } + + /// <summary> + /// Determines if an element node can be kept overlapped. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of an element node that can be kept overlapped, false otherwise.</returns> + public static bool CanOverlapElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.CanOverlap) != 0; + } + + /// <summary> + /// Determines if a text corresponds to the closing tag of an node that can be kept overlapped. + /// </summary> + /// <param name="text">The text to check. May not be null.</param> + /// <returns>true or false.</returns> + public static bool IsOverlappedClosingElement(string text) + { + if (text == null) + { + throw new ArgumentNullException("text"); + } + // min is </x>: 4 + if (text.Length <= 4) + return false; + + if ((text[0] != '<') || + (text[text.Length - 1] != '>') || + (text[1] != '/')) + return false; + + string name = text.Substring(2, text.Length - 3); + return CanOverlapElement(name); + } + + /// <summary> + /// Determines if an element node is a CDATA element node. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of a CDATA element node, false otherwise.</returns> + public static bool IsCDataElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.CData) != 0; + } + + /// <summary> + /// Determines if an element node is defined as empty. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of an empty element node, false otherwise.</returns> + public static bool IsEmptyElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (name.Length == 0) + { + return true; + } + + // <!DOCTYPE ... + if ('!' == name[0]) + { + return true; + } + + // <?xml ... + if ('?' == name[0]) + { + return true; + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.Empty) != 0; + } + + /// <summary> + /// Creates an HTML node from a string representing literal HTML. + /// </summary> + /// <param name="html">The HTML text.</param> + /// <returns>The newly created node instance.</returns> + public static HtmlNode CreateNode(string html) + { + // REVIEW: this is *not* optimum... + HtmlDocument doc = new HtmlDocument(); + doc.LoadHtml(html); + return doc.DocumentNode.FirstChild; + } + + /// <summary> + /// Creates a duplicate of the node and the subtree under it. + /// </summary> + /// <param name="node">The node to duplicate. May not be null.</param> + public void CopyFrom(HtmlNode node) + { + CopyFrom(node, true); + } + + /// <summary> + /// Creates a duplicate of the node. + /// </summary> + /// <param name="node">The node to duplicate. May not be null.</param> + /// <param name="deep">true to recursively clone the subtree under the specified node, false to clone only the node itself.</param> + public void CopyFrom(HtmlNode node, bool deep) + { + if (node == null) + { + throw new ArgumentNullException("node"); + } + + Attributes.RemoveAll(); + if (node.HasAttributes) + { + foreach(HtmlAttribute att in node.Attributes) + { + SetAttributeValue(att.Name, att.Value); + } + } + + if (!deep) + { + RemoveAllChildren(); + if (node.HasChildNodes) + { + foreach(HtmlNode child in node.ChildNodes) + { + AppendChild(child.CloneNode(true)); + } + } + } + } + + internal HtmlNode(HtmlNodeType type, HtmlDocument ownerdocument, int index) + { + _nodetype = type; + _ownerdocument = ownerdocument; + _outerstartindex = index; + + switch(type) + { + case HtmlNodeType.Comment: + _name = HtmlNodeTypeNameComment; + _endnode = this; + break; + + case HtmlNodeType.Document: + _name = HtmlNodeTypeNameDocument; + _endnode = this; + break; + + case HtmlNodeType.Text: + _name = HtmlNodeTypeNameText; + _endnode = this; + break; + } + + if (_ownerdocument._openednodes != null) + { + if (!Closed) + { + // we use the index as the key + + // -1 means the node comes from public + if (-1 != index) + { + _ownerdocument._openednodes.Add(index, this); + } + } + } + + if ((-1 == index) && (type != HtmlNodeType.Comment) && (type != HtmlNodeType.Text)) + { + // innerhtml and outerhtml must be calculated + _outerchanged = true; + _innerchanged = true; + } + } + + internal void CloseNode(HtmlNode endnode) + { + if (!_ownerdocument.OptionAutoCloseOnEnd) + { + // close all children + if (_childnodes != null) + { + foreach(HtmlNode child in _childnodes) + { + if (child.Closed) + continue; + + // create a fake closer node + HtmlNode close = new HtmlNode(NodeType, _ownerdocument, -1); + close._endnode = close; + child.CloseNode(close); + } + } + } + + if (!Closed) + { + _endnode = endnode; + + if (_ownerdocument._openednodes != null) + { + _ownerdocument._openednodes.Remove(_outerstartindex); + } + + HtmlNode self = _ownerdocument._lastnodes[Name] as HtmlNode; + if (self == this) + { + _ownerdocument._lastnodes.Remove(Name); + _ownerdocument.UpdateLastParentNode(); + } + + if (endnode == this) + return; + + // create an inner section + _innerstartindex = _outerstartindex + _outerlength; + _innerlength = endnode._outerstartindex - _innerstartindex; + + // update full length + _outerlength = (endnode._outerstartindex + endnode._outerlength) - _outerstartindex; + } + } + + internal HtmlNode EndNode + { + get + { + return _endnode; + } + } + + internal string GetId() + { + HtmlAttribute att = Attributes["id"]; + if (att == null) + { + return null; + } + return att.Value; + } + + internal void SetId(string id) + { + HtmlAttribute att = Attributes["id"]; + if (att == null) + { + att = _ownerdocument.CreateAttribute("id"); + } + att.Value = id; + _ownerdocument.SetIdForNode(this, att.Value); + _outerchanged = true; + } + + /// <summary> + /// Creates a new XPathNavigator object for navigating this HTML node. + /// </summary> + /// <returns>An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document.</returns> + public XPathNavigator CreateNavigator() + { + return new HtmlNodeNavigator(_ownerdocument, this); + } + + /// <summary> + /// Selects the first XmlNode that matches the XPath expression. + /// </summary> + /// <param name="xpath">The XPath expression. May not be null.</param> + /// <returns>The first HtmlNode that matches the XPath query or a null reference if no matching node was found.</returns> + public HtmlNode SelectSingleNode(string xpath) + { + if (xpath == null) + { + throw new ArgumentNullException("xpath"); + } + + HtmlNodeNavigator nav = new HtmlNodeNavigator(_ownerdocument, this); + XPathNodeIterator it = nav.Select(xpath); + if (!it.MoveNext()) + { + return null; + } + + HtmlNodeNavigator node = (HtmlNodeNavigator)it.Current; + return node.CurrentNode; + } + + /// <summary> + /// Selects a list of nodes matching the XPath expression. + /// </summary> + /// <param name="xpath">The XPath expression.</param> + /// <returns>An HtmlNodeCollection containing a collection of nodes matching the XPath query, or null if no node matched the XPath expression.</returns> + public HtmlNodeCollection SelectNodes(string xpath) + { + HtmlNodeCollection list = new HtmlNodeCollection(null); + + HtmlNodeNavigator nav = new HtmlNodeNavigator(_ownerdocument, this); + XPathNodeIterator it = nav.Select(xpath); + while (it.MoveNext()) + { + HtmlNodeNavigator n = (HtmlNodeNavigator)it.Current; + list.Add(n.CurrentNode); + } + if (list.Count == 0) + { + return null; + } + return list; + } + + /// <summary> + /// Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. + /// </summary> + public string Id + { + get + { + if (_ownerdocument._nodesid == null) + { + throw new Exception(HtmlDocument.HtmlExceptionUseIdAttributeFalse); + } + return GetId(); + } + set + { + if (_ownerdocument._nodesid == null) + { + throw new Exception(HtmlDocument.HtmlExceptionUseIdAttributeFalse); + } + + if (value == null) + { + throw new ArgumentNullException("value"); + } + SetId(value); + } + } + + /// <summary> + /// Gets the line number of this node in the document. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the column number of this node in the document. + /// </summary> + public int LinePosition + { + get + { + return _lineposition; + } + } + + /// <summary> + /// Gets the stream position of this node in the document, relative to the start of the document. + /// </summary> + public int StreamPosition + { + get + { + return _streamposition; + } + } + + /// <summary> + /// Gets a value indicating if this node has been closed or not. + /// </summary> + public bool Closed + { + get + { + return (_endnode != null); + } + } + + /// <summary> + /// Gets or sets this node's name. + /// </summary> + public string Name + { + get + { + if (_name == null) + { + _name = _ownerdocument._text.Substring(_namestartindex, _namelength).ToLower(); + } + return _name; + } + set + { + _name = value; + } + } + + /// <summary> + /// Gets or Sets the text between the start and end tags of the object. + /// </summary> + public virtual string InnerText + { + get + { + if (_nodetype == HtmlNodeType.Text) + { + return ((HtmlTextNode)this).Text; + } + + if (_nodetype == HtmlNodeType.Comment) + { + return ((HtmlCommentNode)this).Comment; + } + + // note: right now, this method is *slow*, because we recompute everything. + // it could be optimised like innerhtml + if (!HasChildNodes) + { + return string.Empty; + } + + string s = null; + foreach(HtmlNode node in ChildNodes) + { + s += node.InnerText; + } + return s; + } + } + + /// <summary> + /// Gets or Sets the HTML between the start and end tags of the object. + /// </summary> + public virtual string InnerHtml + { + get + { + if (_innerchanged) + { + _innerhtml = WriteContentTo(); + _innerchanged = false; + return _innerhtml; + } + if (_innerhtml != null) + { + return _innerhtml; + } + + if (_innerstartindex < 0) + { + return string.Empty; + } + + return _ownerdocument._text.Substring(_innerstartindex, _innerlength); + } + set + { + HtmlDocument doc = new HtmlDocument(); + doc.LoadHtml(value); + + RemoveAllChildren(); + AppendChildren(doc.DocumentNode.ChildNodes); + } + } + + /// <summary> + /// Gets or Sets the object and its content in HTML. + /// </summary> + public virtual string OuterHtml + { + get + { + if (_outerchanged) + { + _outerhtml = WriteTo(); + _outerchanged = false; + return _outerhtml; + } + + if (_outerhtml != null) + { + return _outerhtml; + } + + if (_outerstartindex < 0) + { + return string.Empty; + } + + return _ownerdocument._text.Substring(_outerstartindex, _outerlength); + } + } + + /// <summary> + /// Creates a duplicate of the node + /// </summary> + /// <returns></returns> + public HtmlNode Clone() + { + return CloneNode(true); + } + + /// <summary> + /// Creates a duplicate of the node and changes its name at the same time. + /// </summary> + /// <param name="newName">The new name of the cloned node. May not be null.</param> + /// <returns>The cloned node.</returns> + public HtmlNode CloneNode(string newName) + { + return CloneNode(newName, true); + } + + /// <summary> + /// Creates a duplicate of the node and changes its name at the same time. + /// </summary> + /// <param name="newName">The new name of the cloned node. May not be null.</param> + /// <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> + /// <returns>The cloned node.</returns> + public HtmlNode CloneNode(string newName, bool deep) + { + if (newName == null) + { + throw new ArgumentNullException("newName"); + } + + HtmlNode node = CloneNode(deep); + node._name = newName; + return node; + } + + /// <summary> + /// Creates a duplicate of the node. + /// </summary> + /// <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> + /// <returns>The cloned node.</returns> + public HtmlNode CloneNode(bool deep) + { + HtmlNode node = _ownerdocument.CreateNode(_nodetype); + node._name = Name; + + switch(_nodetype) + { + case HtmlNodeType.Comment: + ((HtmlCommentNode)node).Comment = ((HtmlCommentNode)this).Comment; + return node; + + case HtmlNodeType.Text: + ((HtmlTextNode)node).Text = ((HtmlTextNode)this).Text; + return node; + } + + // attributes + if (HasAttributes) + { + foreach(HtmlAttribute att in _attributes) + { + HtmlAttribute newatt = att.Clone(); + node.Attributes.Append(newatt); + } + } + + // closing attributes + if (HasClosingAttributes) + { + node._endnode = _endnode.CloneNode(false); + foreach(HtmlAttribute att in _endnode._attributes) + { + HtmlAttribute newatt = att.Clone(); + node._endnode._attributes.Append(newatt); + } + } + if (!deep) + { + return node; + } + + if (!HasChildNodes) + { + return node; + } + + // child nodes + foreach(HtmlNode child in _childnodes) + { + HtmlNode newchild = child.Clone(); + node.AppendChild(newchild); + } + return node; + } + + /// <summary> + /// Gets the HTML node immediately following this element. + /// </summary> + public HtmlNode NextSibling + { + get + { + return _nextnode; + } + } + + /// <summary> + /// Gets the node immediately preceding this node. + /// </summary> + public HtmlNode PreviousSibling + { + get + { + return _prevnode; + } + } + + /// <summary> + /// Removes all the children and/or attributes of the current node. + /// </summary> + public void RemoveAll() + { + RemoveAllChildren(); + + if (HasAttributes) + { + _attributes.Clear(); + } + + if ((_endnode != null) && (_endnode != this)) + { + if (_endnode._attributes != null) + { + _endnode._attributes.Clear(); + } + } + _outerchanged = true; + _innerchanged = true; + } + + /// <summary> + /// Removes all the children of the current node. + /// </summary> + public void RemoveAllChildren() + { + if (!HasChildNodes) + { + return; + } + + if (_ownerdocument.OptionUseIdAttribute) + { + // remove nodes from id list + foreach(HtmlNode node in _childnodes) + { + _ownerdocument.SetIdForNode(null, node.GetId()); + } + } + _childnodes.Clear(); + _outerchanged = true; + _innerchanged = true; + } + + /// <summary> + /// Removes the specified child node. + /// </summary> + /// <param name="oldChild">The node being removed. May not be null.</param> + /// <returns>The node removed.</returns> + public HtmlNode RemoveChild(HtmlNode oldChild) + { + if (oldChild == null) + { + throw new ArgumentNullException("oldChild"); + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[oldChild]; + } + + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Remove(index); + + _ownerdocument.SetIdForNode(null, oldChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return oldChild; + } + + /// <summary> + /// Removes the specified child node. + /// </summary> + /// <param name="oldChild">The node being removed. May not be null.</param> + /// <param name="keepGrandChildren">true to keep grand children of the node, false otherwise.</param> + /// <returns>The node removed.</returns> + public HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren) + { + if (oldChild == null) + { + throw new ArgumentNullException("oldChild"); + } + + if ((oldChild._childnodes != null) && keepGrandChildren) + { + // get prev sibling + HtmlNode prev = oldChild.PreviousSibling; + + // reroute grand children to ourselves + foreach(HtmlNode grandchild in oldChild._childnodes) + { + InsertAfter(grandchild, prev); + } + } + RemoveChild(oldChild); + _outerchanged = true; + _innerchanged = true; + return oldChild; + } + + /// <summary> + /// Replaces the child node oldChild with newChild node. + /// </summary> + /// <param name="newChild">The new node to put in the child list.</param> + /// <param name="oldChild">The node being replaced in the list.</param> + /// <returns>The node replaced.</returns> + public HtmlNode ReplaceChild(HtmlNode newChild, HtmlNode oldChild) + { + if (newChild == null) + { + return RemoveChild(oldChild); + } + + if (oldChild == null) + { + return AppendChild(newChild); + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[oldChild]; + } + + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Replace(index, newChild); + + _ownerdocument.SetIdForNode(null, oldChild.GetId()); + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Inserts the specified node immediately before the specified reference node. + /// </summary> + /// <param name="newChild">The node to insert. May not be null.</param> + /// <param name="refChild">The node that is the reference node. The newChild is placed before this node.</param> + /// <returns>The node being inserted.</returns> + public HtmlNode InsertBefore(HtmlNode newChild, HtmlNode refChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + + if (refChild == null) + { + return AppendChild(newChild); + } + + if (newChild == refChild) + { + return newChild; + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[refChild]; + } + + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Insert(index, newChild); + + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Inserts the specified node immediately after the specified reference node. + /// </summary> + /// <param name="newChild">The node to insert. May not be null.</param> + /// <param name="refChild">The node that is the reference node. The newNode is placed after the refNode.</param> + /// <returns>The node being inserted.</returns> + public HtmlNode InsertAfter(HtmlNode newChild, HtmlNode refChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + + if (refChild == null) + { + return PrependChild(newChild); + } + + if (newChild == refChild) + { + return newChild; + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[refChild]; + } + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Insert(index + 1, newChild); + + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Gets the first child of the node. + /// </summary> + public HtmlNode FirstChild + { + get + { + if (!HasChildNodes) + { + return null; + } + return _childnodes[0]; + } + } + + /// <summary> + /// Gets the last child of the node. + /// </summary> + public HtmlNode LastChild + { + get + { + if (!HasChildNodes) + { + return null; + } + return _childnodes[_childnodes.Count-1]; + } + } + + /// <summary> + /// Gets the type of this node. + /// </summary> + public HtmlNodeType NodeType + { + get + { + return _nodetype; + } + } + + /// <summary> + /// Gets the parent of this node (for nodes that can have parents). + /// </summary> + public HtmlNode ParentNode + { + get + { + return _parentnode; + } + } + + /// <summary> + /// Gets the HtmlDocument to which this node belongs. + /// </summary> + public HtmlDocument OwnerDocument + { + get + { + return _ownerdocument; + } + } + + /// <summary> + /// Gets all the children of the node. + /// </summary> + public HtmlNodeCollection ChildNodes + { + get + { + if (_childnodes == null) + { + _childnodes = new HtmlNodeCollection(this); + } + return _childnodes; + } + } + + /// <summary> + /// Adds the specified node to the beginning of the list of children of this node. + /// </summary> + /// <param name="newChild">The node to add. May not be null.</param> + /// <returns>The node added.</returns> + public HtmlNode PrependChild(HtmlNode newChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + ChildNodes.Prepend(newChild); + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Adds the specified node list to the beginning of the list of children of this node. + /// </summary> + /// <param name="newChildren">The node list to add. May not be null.</param> + public void PrependChildren(HtmlNodeCollection newChildren) + { + if (newChildren == null) + { + throw new ArgumentNullException("newChildren"); + } + + foreach(HtmlNode newChild in newChildren) + { + PrependChild(newChild); + } + } + + /// <summary> + /// Adds the specified node to the end of the list of children of this node. + /// </summary> + /// <param name="newChild">The node to add. May not be null.</param> + /// <returns>The node added.</returns> + public HtmlNode AppendChild(HtmlNode newChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + + ChildNodes.Append(newChild); + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Adds the specified node to the end of the list of children of this node. + /// </summary> + /// <param name="newChildren">The node list to add. May not be null.</param> + public void AppendChildren(HtmlNodeCollection newChildren) + { + if (newChildren == null) + throw new ArgumentNullException("newChildrend"); + + foreach(HtmlNode newChild in newChildren) + { + AppendChild(newChild); + } + } + + /// <summary> + /// Gets a value indicating whether the current node has any attributes. + /// </summary> + public bool HasAttributes + { + get + { + if (_attributes == null) + { + return false; + } + + if (_attributes.Count <= 0) + { + return false; + } + return true; + } + } + + /// <summary> + /// Gets a value indicating whether the current node has any attributes on the closing tag. + /// </summary> + public bool HasClosingAttributes + { + get + { + if ((_endnode == null) || (_endnode == this)) + { + return false; + } + + if (_endnode._attributes == null) + { + return false; + } + + if (_endnode._attributes.Count <= 0) + { + return false; + } + return true; + } + } + + /// <summary> + /// Gets a value indicating whether this node has any child nodes. + /// </summary> + public bool HasChildNodes + { + get + { + if (_childnodes == null) + { + return false; + } + + if (_childnodes.Count <= 0) + { + return false; + } + return true; + } + } + + /// <summary> + /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + /// </summary> + /// <param name="name">The name of the attribute to get. May not be null.</param> + /// <param name="def">The default value to return if not found.</param> + /// <returns>The value of the attribute if found, the default value if not found.</returns> + public string GetAttributeValue(string name, string def) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (!HasAttributes) + { + return def; + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return def; + } + return att.Value; + } + + /// <summary> + /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + /// </summary> + /// <param name="name">The name of the attribute to get. May not be null.</param> + /// <param name="def">The default value to return if not found.</param> + /// <returns>The value of the attribute if found, the default value if not found.</returns> + public int GetAttributeValue(string name, int def) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (!HasAttributes) + { + return def; + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return def; + } + try + { + return Convert.ToInt32(att.Value); + } + catch + { + return def; + } + } + + /// <summary> + /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + /// </summary> + /// <param name="name">The name of the attribute to get. May not be null.</param> + /// <param name="def">The default value to return if not found.</param> + /// <returns>The value of the attribute if found, the default value if not found.</returns> + public bool GetAttributeValue(string name, bool def) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (!HasAttributes) + { + return def; + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return def; + } + try + { + return Convert.ToBoolean(att.Value); + } + catch + { + return def; + } + } + + /// <summary> + /// Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. + /// </summary> + /// <param name="name">The name of the attribute to set. May not be null.</param> + /// <param name="value">The value for the attribute.</param> + /// <returns>The corresponding attribute instance.</returns> + public HtmlAttribute SetAttributeValue(string name, string value) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return Attributes.Append(_ownerdocument.CreateAttribute(name, value)); + } + att.Value = value; + return att; + } + + /// <summary> + /// Gets the collection of HTML attributes for this node. May not be null. + /// </summary> + public HtmlAttributeCollection Attributes + { + get + { + if (!HasAttributes) + { + _attributes = new HtmlAttributeCollection(this); + } + return _attributes; + } + } + + /// <summary> + /// Gets the collection of HTML attributes for the closing tag. May not be null. + /// </summary> + public HtmlAttributeCollection ClosingAttributes + { + get + { + if (!HasClosingAttributes) + { + return new HtmlAttributeCollection(this); + } + return _endnode.Attributes; + } + } + + internal void WriteAttribute(TextWriter outText, HtmlAttribute att) + { + string name; + + if (_ownerdocument.OptionOutputAsXml) + { + if (_ownerdocument.OptionOutputUpperCase) + { + name = att.XmlName.ToUpper(); + } + else + { + name = att.XmlName; + } + + outText.Write(" " + name + "=\"" + HtmlDocument.HtmlEncode(att.XmlValue) + "\""); + } + else + { + if (_ownerdocument.OptionOutputUpperCase) + { + name = att.Name.ToUpper(); + } + else + { + name = att.Name; + } + + if (att.Name.Length >= 4) + { + if ((att.Name[0] == '<') && (att.Name[1] == '%') && + (att.Name[att.Name.Length-1] == '>') && (att.Name[att.Name.Length-2] == '%')) + { + outText.Write(" " + name); + return; + } + } + if (_ownerdocument.OptionOutputOptimizeAttributeValues) + { + if (att.Value.IndexOfAny(new Char[]{(char)10, (char)13, (char)9, ' '}) < 0) + { + outText.Write(" " + name + "=" + att.Value); + } + else + { + outText.Write(" " + name + "=\"" + att.Value + "\""); + } + } + else + { + outText.Write(" " + name + "=\"" + att.Value + "\""); + } + } + } + + internal static void WriteAttributes(XmlWriter writer, HtmlNode node) + { + if (!node.HasAttributes) + { + return; + } + // we use _hashitems to make sure attributes are written only once + foreach(HtmlAttribute att in node.Attributes._hashitems.Values) + { + writer.WriteAttributeString(att.XmlName, att.Value); + } + } + + internal void WriteAttributes(TextWriter outText, bool closing) + { + if (_ownerdocument.OptionOutputAsXml) + { + if (_attributes == null) + { + return; + } + // we use _hashitems to make sure attributes are written only once + foreach(HtmlAttribute att in _attributes._hashitems.Values) + { + WriteAttribute(outText, att); + } + return; + } + + if (!closing) + { + if (_attributes != null) + { + + foreach(HtmlAttribute att in _attributes) + { + WriteAttribute(outText, att); + } + } + if (_ownerdocument.OptionAddDebuggingAttributes) + { + WriteAttribute(outText, _ownerdocument.CreateAttribute("_closed", Closed.ToString())); + WriteAttribute(outText, _ownerdocument.CreateAttribute("_children", ChildNodes.Count.ToString())); + + int i = 0; + foreach(HtmlNode n in ChildNodes) + { + WriteAttribute(outText, _ownerdocument.CreateAttribute("_child_" + i, + n.Name)); + i++; + } + } + } + else + { + if (_endnode == null) + { + return; + } + + if (_endnode._attributes == null) + { + return; + } + + if (_endnode == this) + { + return; + } + + foreach(HtmlAttribute att in _endnode._attributes) + { + WriteAttribute(outText, att); + } + if (_ownerdocument.OptionAddDebuggingAttributes) + { + WriteAttribute(outText, _ownerdocument.CreateAttribute("_closed", Closed.ToString())); + WriteAttribute(outText, _ownerdocument.CreateAttribute("_children", ChildNodes.Count.ToString())); + } + } + } + + internal static string GetXmlComment(HtmlCommentNode comment) + { + string s = comment.Comment; + return s.Substring(4, s.Length-7).Replace("--", " - -"); + } + + /// <summary> + /// Saves the current node to the specified TextWriter. + /// </summary> + /// <param name="outText">The TextWriter to which you want to save.</param> + public void WriteTo(TextWriter outText) + { + string html; + switch(_nodetype) + { + case HtmlNodeType.Comment: + html = ((HtmlCommentNode)this).Comment; + if (_ownerdocument.OptionOutputAsXml) + { + outText.Write("<!--" + GetXmlComment((HtmlCommentNode)this) + " -->"); + } + else + { + outText.Write(html); + } + break; + + case HtmlNodeType.Document: + if (_ownerdocument.OptionOutputAsXml) + { + outText.Write("<?xml version=\"1.0\" encoding=\"" + _ownerdocument.GetOutEncoding().BodyName + "\"?>"); + + // check there is a root element + if (_ownerdocument.DocumentNode.HasChildNodes) + { + int rootnodes = _ownerdocument.DocumentNode._childnodes.Count; + if (rootnodes > 0) + { + HtmlNode xml = _ownerdocument.GetXmlDeclaration(); + if (xml != null) + { + rootnodes --; + } + + if (rootnodes > 1) + { + if (_ownerdocument.OptionOutputUpperCase) + { + outText.Write("<SPAN>"); + WriteContentTo(outText); + outText.Write("</SPAN>"); + } + else + { + outText.Write("<span>"); + WriteContentTo(outText); + outText.Write("</span>"); + } + break; + } + } + } + } + WriteContentTo(outText); + break; + + case HtmlNodeType.Text: + html = ((HtmlTextNode)this).Text; + if (_ownerdocument.OptionOutputAsXml) + { + outText.Write(HtmlDocument.HtmlEncode(html)); + } + else + { + outText.Write(html); + } + break; + + case HtmlNodeType.Element: + string name; + if (_ownerdocument.OptionOutputUpperCase) + { + name = Name.ToUpper(); + } + else + { + name = Name; + } + + if (_ownerdocument.OptionOutputAsXml) + { + if (name.Length > 0) + { + if (name[0] == '?') + { + // forget this one, it's been done at the document level + break; + } + + if (name.Trim().Length == 0) + { + break; + } + name = HtmlDocument.GetXmlName(name); + } + else + { + break; + } + } + + outText.Write("<" + name); + WriteAttributes(outText, false); + + if (!HasChildNodes) + { + if (HtmlNode.IsEmptyElement(Name)) + { + if ((_ownerdocument.OptionWriteEmptyNodes) || (_ownerdocument.OptionOutputAsXml)) + { + outText.Write(" />"); + } + else + { + if (Name.Length > 0) + { + if (Name[0] == '?') + { + outText.Write("?"); + } + } + + outText.Write(">"); + } + } + else + { + outText.Write("></" + name + ">"); + } + } + else + { + outText.Write(">"); + bool cdata = false; + if (_ownerdocument.OptionOutputAsXml) + { + if (HtmlNode.IsCDataElement(Name)) + { + // this code and the following tries to output things as nicely as possible for old browsers. + cdata = true; + outText.Write("\r\n//<![CDATA[\r\n"); + } + } + + if (cdata) + { + if (HasChildNodes) + { + // child must be a text + ChildNodes[0].WriteTo(outText); + } + outText.Write("\r\n//]]>//\r\n"); + } + else + { + WriteContentTo(outText); + } + + outText.Write("</" + name); + if (!_ownerdocument.OptionOutputAsXml) + { + WriteAttributes(outText, true); + } + outText.Write(">"); + } + break; + } + } + + /// <summary> + /// Saves the current node to the specified XmlWriter. + /// </summary> + /// <param name="writer">The XmlWriter to which you want to save.</param> + public void WriteTo(XmlWriter writer) + { + string html; + switch(_nodetype) + { + case HtmlNodeType.Comment: + writer.WriteComment(GetXmlComment((HtmlCommentNode)this)); + break; + + case HtmlNodeType.Document: + writer.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"" + _ownerdocument.GetOutEncoding().BodyName + "\""); + if (HasChildNodes) + { + foreach(HtmlNode subnode in ChildNodes) + { + subnode.WriteTo(writer); + } + } + break; + + case HtmlNodeType.Text: + html = ((HtmlTextNode)this).Text; + writer.WriteString(html); + break; + + case HtmlNodeType.Element: + string name; + if (_ownerdocument.OptionOutputUpperCase) + { + name = Name.ToUpper(); + } + else + { + name = Name; + } + writer.WriteStartElement(name); + WriteAttributes(writer, this); + + if (HasChildNodes) + { + foreach(HtmlNode subnode in ChildNodes) + { + subnode.WriteTo(writer); + } + } + writer.WriteEndElement(); + break; + } + } + + /// <summary> + /// Saves all the children of the node to the specified TextWriter. + /// </summary> + /// <param name="outText">The TextWriter to which you want to save.</param> + public void WriteContentTo(TextWriter outText) + { + if (_childnodes == null) + { + return; + } + + foreach(HtmlNode node in _childnodes) + { + node.WriteTo(outText); + } + } + + /// <summary> + /// Saves the current node to a string. + /// </summary> + /// <returns>The saved string.</returns> + public string WriteTo() + { + StringWriter sw = new StringWriter(); + WriteTo(sw); + sw.Flush(); + return sw.ToString(); + } + + /// <summary> + /// Saves all the children of the node to a string. + /// </summary> + /// <returns>The saved string.</returns> + public string WriteContentTo() + { + StringWriter sw = new StringWriter(); + WriteContentTo(sw); + sw.Flush(); + return sw.ToString(); + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs b/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs index e9b89e0..6596a6e 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs @@ -1,326 +1,326 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents a combined list and collection of HTML nodes. - /// </summary> - public class HtmlNodeCollection : IEnumerable - { - private ArrayList _items = new ArrayList(); - private HtmlNode _parentnode; - - internal HtmlNodeCollection(HtmlNode parentnode) - { - _parentnode = parentnode; // may be null - } - - /// <summary> - /// Gets the number of elements actually contained in the list. - /// </summary> - public int Count - { - get - { - return _items.Count; - } - } - - internal void Clear() - { - foreach (HtmlNode node in _items) - { - node._parentnode = null; - node._nextnode = null; - node._prevnode = null; - } - _items.Clear(); - } - - internal void Remove(int index) - { - HtmlNode next = null; - HtmlNode prev = null; - HtmlNode oldnode = (HtmlNode)_items[index]; - - if (index > 0) - { - prev = (HtmlNode)_items[index - 1]; - } - - if (index < (_items.Count - 1)) - { - next = (HtmlNode)_items[index + 1]; - } - - _items.RemoveAt(index); - - if (prev != null) - { - if (next == prev) - { - throw new InvalidProgramException("Unexpected error."); - } - prev._nextnode = next; - } - - if (next != null) - { - next._prevnode = prev; - } - - oldnode._prevnode = null; - oldnode._nextnode = null; - oldnode._parentnode = null; - } - - internal void Replace(int index, HtmlNode node) - { - HtmlNode next = null; - HtmlNode prev = null; - HtmlNode oldnode = (HtmlNode)_items[index]; - - if (index > 0) - { - prev = (HtmlNode)_items[index - 1]; - } - - if (index < (_items.Count - 1)) - { - next = (HtmlNode)_items[index + 1]; - } - - _items[index] = node; - - if (prev != null) - { - if (node == prev) - { - throw new InvalidProgramException("Unexpected error."); - } - prev._nextnode = node; - } - - if (next != null) - { - next._prevnode = node; - } - - node._prevnode = prev; - if (next == node) - { - throw new InvalidProgramException("Unexpected error."); - } - node._nextnode = next; - node._parentnode = _parentnode; - - oldnode._prevnode = null; - oldnode._nextnode = null; - oldnode._parentnode = null; - } - - internal void Insert(int index, HtmlNode node) - { - HtmlNode next = null; - HtmlNode prev = null; - - if (index > 0) - { - prev = (HtmlNode)_items[index - 1]; - } - - if (index < _items.Count) - { - next = (HtmlNode)_items[index]; - } - - _items.Insert(index, node); - - if (prev != null) - { - if (node == prev) - { - throw new InvalidProgramException("Unexpected error."); - } - prev._nextnode = node; - } - - if (next != null) - { - next._prevnode = node; - } - - node._prevnode = prev; - - if (next == node) - { - throw new InvalidProgramException("Unexpected error."); - } - - node._nextnode = next; - node._parentnode = _parentnode; - } - - internal void Append(HtmlNode node) - { - HtmlNode last = null; - if (_items.Count > 0) - { - last = (HtmlNode)_items[_items.Count - 1]; - } - - _items.Add(node); - node._prevnode = last; - node._nextnode = null; - node._parentnode = _parentnode; - if (last != null) - { - if (last == node) - { - throw new InvalidProgramException("Unexpected error."); - } - last._nextnode = node; - } - } - - internal void Prepend(HtmlNode node) - { - HtmlNode first = null; - if (_items.Count > 0) - { - first = (HtmlNode)_items[0]; - } - - _items.Insert(0, node); - - if (node == first) - { - throw new InvalidProgramException("Unexpected error."); - } - node._nextnode = first; - node._prevnode = null; - node._parentnode = _parentnode; - if (first != null) - { - first._prevnode = node; - } - } - - internal void Add(HtmlNode node) - { - _items.Add(node); - } - - /// <summary> - /// Gets the node at the specified index. - /// </summary> - public HtmlNode this[int index] - { - get - { - return _items[index] as HtmlNode; - } - } - - internal int GetNodeIndex(HtmlNode node) - { - // TODO: should we rewrite this? what would be the key of a node? - for (int i = 0; i < _items.Count; i++) - { - if (node == ((HtmlNode)_items[i])) - { - return i; - } - } - return -1; - } - - /// <summary> - /// Gets a given node from the list. - /// </summary> - public int this[HtmlNode node] - { - get - { - int index = GetNodeIndex(node); - if (index == -1) - { - throw new ArgumentOutOfRangeException("node", "Node \"" + node.CloneNode(false).OuterHtml + "\" was not found in the collection"); - } - return index; - } - } - - /// <summary> - /// Returns an enumerator that can iterate through the list. - /// </summary> - /// <returns>An IEnumerator for the entire list.</returns> - public HtmlNodeEnumerator GetEnumerator() - { - return new HtmlNodeEnumerator(_items); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - /// <summary> - /// Represents an enumerator that can iterate through the list. - /// </summary> - public class HtmlNodeEnumerator : IEnumerator - { - int _index; - ArrayList _items; - - internal HtmlNodeEnumerator(ArrayList items) - { - _items = items; - _index = -1; - } - - /// <summary> - /// Sets the enumerator to its initial position, which is before the first element in the collection. - /// </summary> - public void Reset() - { - _index = -1; - } - - /// <summary> - /// Advances the enumerator to the next element of the collection. - /// </summary> - /// <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> - public bool MoveNext() - { - _index++; - return (_index < _items.Count); - } - - /// <summary> - /// Gets the current element in the collection. - /// </summary> - public HtmlNode Current - { - get - { - return (HtmlNode)(_items[_index]); - } - } - - /// <summary> - /// Gets the current element in the collection. - /// </summary> - object IEnumerator.Current - { - get - { - return (Current); - } - } - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a combined list and collection of HTML nodes. + /// </summary> + public class HtmlNodeCollection : IEnumerable + { + private ArrayList _items = new ArrayList(); + private HtmlNode _parentnode; + + internal HtmlNodeCollection(HtmlNode parentnode) + { + _parentnode = parentnode; // may be null + } + + /// <summary> + /// Gets the number of elements actually contained in the list. + /// </summary> + public int Count + { + get + { + return _items.Count; + } + } + + internal void Clear() + { + foreach (HtmlNode node in _items) + { + node._parentnode = null; + node._nextnode = null; + node._prevnode = null; + } + _items.Clear(); + } + + internal void Remove(int index) + { + HtmlNode next = null; + HtmlNode prev = null; + HtmlNode oldnode = (HtmlNode)_items[index]; + + if (index > 0) + { + prev = (HtmlNode)_items[index - 1]; + } + + if (index < (_items.Count - 1)) + { + next = (HtmlNode)_items[index + 1]; + } + + _items.RemoveAt(index); + + if (prev != null) + { + if (next == prev) + { + throw new InvalidProgramException("Unexpected error."); + } + prev._nextnode = next; + } + + if (next != null) + { + next._prevnode = prev; + } + + oldnode._prevnode = null; + oldnode._nextnode = null; + oldnode._parentnode = null; + } + + internal void Replace(int index, HtmlNode node) + { + HtmlNode next = null; + HtmlNode prev = null; + HtmlNode oldnode = (HtmlNode)_items[index]; + + if (index > 0) + { + prev = (HtmlNode)_items[index - 1]; + } + + if (index < (_items.Count - 1)) + { + next = (HtmlNode)_items[index + 1]; + } + + _items[index] = node; + + if (prev != null) + { + if (node == prev) + { + throw new InvalidProgramException("Unexpected error."); + } + prev._nextnode = node; + } + + if (next != null) + { + next._prevnode = node; + } + + node._prevnode = prev; + if (next == node) + { + throw new InvalidProgramException("Unexpected error."); + } + node._nextnode = next; + node._parentnode = _parentnode; + + oldnode._prevnode = null; + oldnode._nextnode = null; + oldnode._parentnode = null; + } + + internal void Insert(int index, HtmlNode node) + { + HtmlNode next = null; + HtmlNode prev = null; + + if (index > 0) + { + prev = (HtmlNode)_items[index - 1]; + } + + if (index < _items.Count) + { + next = (HtmlNode)_items[index]; + } + + _items.Insert(index, node); + + if (prev != null) + { + if (node == prev) + { + throw new InvalidProgramException("Unexpected error."); + } + prev._nextnode = node; + } + + if (next != null) + { + next._prevnode = node; + } + + node._prevnode = prev; + + if (next == node) + { + throw new InvalidProgramException("Unexpected error."); + } + + node._nextnode = next; + node._parentnode = _parentnode; + } + + internal void Append(HtmlNode node) + { + HtmlNode last = null; + if (_items.Count > 0) + { + last = (HtmlNode)_items[_items.Count - 1]; + } + + _items.Add(node); + node._prevnode = last; + node._nextnode = null; + node._parentnode = _parentnode; + if (last != null) + { + if (last == node) + { + throw new InvalidProgramException("Unexpected error."); + } + last._nextnode = node; + } + } + + internal void Prepend(HtmlNode node) + { + HtmlNode first = null; + if (_items.Count > 0) + { + first = (HtmlNode)_items[0]; + } + + _items.Insert(0, node); + + if (node == first) + { + throw new InvalidProgramException("Unexpected error."); + } + node._nextnode = first; + node._prevnode = null; + node._parentnode = _parentnode; + if (first != null) + { + first._prevnode = node; + } + } + + internal void Add(HtmlNode node) + { + _items.Add(node); + } + + /// <summary> + /// Gets the node at the specified index. + /// </summary> + public HtmlNode this[int index] + { + get + { + return _items[index] as HtmlNode; + } + } + + internal int GetNodeIndex(HtmlNode node) + { + // TODO: should we rewrite this? what would be the key of a node? + for (int i = 0; i < _items.Count; i++) + { + if (node == ((HtmlNode)_items[i])) + { + return i; + } + } + return -1; + } + + /// <summary> + /// Gets a given node from the list. + /// </summary> + public int this[HtmlNode node] + { + get + { + int index = GetNodeIndex(node); + if (index == -1) + { + throw new ArgumentOutOfRangeException("node", "Node \"" + node.CloneNode(false).OuterHtml + "\" was not found in the collection"); + } + return index; + } + } + + /// <summary> + /// Returns an enumerator that can iterate through the list. + /// </summary> + /// <returns>An IEnumerator for the entire list.</returns> + public HtmlNodeEnumerator GetEnumerator() + { + return new HtmlNodeEnumerator(_items); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// <summary> + /// Represents an enumerator that can iterate through the list. + /// </summary> + public class HtmlNodeEnumerator : IEnumerator + { + int _index; + ArrayList _items; + + internal HtmlNodeEnumerator(ArrayList items) + { + _items = items; + _index = -1; + } + + /// <summary> + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// </summary> + public void Reset() + { + _index = -1; + } + + /// <summary> + /// Advances the enumerator to the next element of the collection. + /// </summary> + /// <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> + public bool MoveNext() + { + _index++; + return (_index < _items.Count); + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + public HtmlNode Current + { + get + { + return (HtmlNode)(_items[_index]); + } + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + object IEnumerator.Current + { + get + { + return (Current); + } + } + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs b/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs index 49eab88..760ddde 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs @@ -1,767 +1,767 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Diagnostics; -using System.Collections.Specialized; -using System.IO; -using System.Text; -using System.Xml; -using System.Xml.XPath; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents an HTML navigator on an HTML document seen as a data store. - /// </summary> - public class HtmlNodeNavigator : XPathNavigator, IXPathNavigable - { - private HtmlDocument _doc = new HtmlDocument(); - private HtmlNode _currentnode; - private int _attindex; - private HtmlNameTable _nametable = new HtmlNameTable(); - - internal bool Trace = false; - - internal HtmlNodeNavigator() - { - Reset(); - } - - private void Reset() - { - InternalTrace(null); - _currentnode = _doc.DocumentNode; - _attindex = -1; - } - - [Conditional("TRACE")] - internal void InternalTrace(object Value) - { - if (!Trace) - { - return; - } - string name = null; - StackFrame sf = new StackFrame(1, true); - name = sf.GetMethod().Name; - string nodename; - if (_currentnode == null) - { - nodename = "(null)"; - } - else - { - nodename = _currentnode.Name; - } - string nodevalue; - if (_currentnode == null) - { - nodevalue = "(null)"; - } - else - { - switch(_currentnode.NodeType) - { - case HtmlNodeType.Comment: - nodevalue = ((HtmlCommentNode)_currentnode).Comment; - break; - - case HtmlNodeType.Document: - nodevalue = ""; - break; - - case HtmlNodeType.Text: - nodevalue = ((HtmlTextNode)_currentnode).Text; - break; - - default: - nodevalue = _currentnode.CloneNode(false).OuterHtml; - break; - - } - } - System.Diagnostics.Trace.WriteLine("oid=" + GetHashCode() - + ",n=" + nodename - + ",a=" + _attindex + "," - + ",v=" + nodevalue + "," - + Value, "N!"+ name); - } - - internal HtmlNodeNavigator(HtmlDocument doc, HtmlNode currentNode) - { - if (currentNode == null) - { - throw new ArgumentNullException("currentNode"); - } - if (currentNode.OwnerDocument != doc) - { - throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); - } - InternalTrace(null); - - _doc = doc; - Reset(); - _currentnode = currentNode; - } - - private HtmlNodeNavigator(HtmlNodeNavigator nav) - { - if (nav == null) - { - throw new ArgumentNullException("nav"); - } - InternalTrace(null); - - _doc = nav._doc; - _currentnode = nav._currentnode; - _attindex = nav._attindex; - _nametable = nav._nametable; // REVIEW: should we do this? - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - public HtmlNodeNavigator(Stream stream) - { - _doc.Load(stream); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - public HtmlNodeNavigator(Stream stream, bool detectEncodingFromByteOrderMarks) - { - _doc.Load(stream, detectEncodingFromByteOrderMarks); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - public HtmlNodeNavigator(Stream stream, Encoding encoding) - { - _doc.Load(stream, encoding); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - public HtmlNodeNavigator(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) - { - _doc.Load(stream, encoding, detectEncodingFromByteOrderMarks); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> - /// <param name="buffersize">The minimum buffer size.</param> - public HtmlNodeNavigator(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) - { - _doc.Load(stream, encoding, detectEncodingFromByteOrderMarks, buffersize); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. - /// </summary> - /// <param name="reader">The TextReader used to feed the HTML data into the document.</param> - public HtmlNodeNavigator(TextReader reader) - { - _doc.Load(reader); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - public HtmlNodeNavigator(string path) - { - _doc.Load(path); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public HtmlNodeNavigator(string path, bool detectEncodingFromByteOrderMarks) - { - _doc.Load(path, detectEncodingFromByteOrderMarks); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="encoding">The character encoding to use.</param> - public HtmlNodeNavigator(string path, Encoding encoding) - { - _doc.Load(path, encoding); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public HtmlNodeNavigator(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) - { - _doc.Load(path, encoding, detectEncodingFromByteOrderMarks); - Reset(); - } - - /// <summary> - /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - /// <param name="buffersize">The minimum buffer size.</param> - public HtmlNodeNavigator(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) - { - _doc.Load(path, encoding, detectEncodingFromByteOrderMarks, buffersize); - Reset(); - } - - /// <summary> - /// Gets the name of the current HTML node without the namespace prefix. - /// </summary> - public override string LocalName - { - get - { - if (_attindex != -1) - { - InternalTrace("att>" + _currentnode.Attributes[_attindex].Name); - return _nametable.GetOrAdd(_currentnode.Attributes[_attindex].Name); - } - else - { - InternalTrace("node>" + _currentnode.Name); - return _nametable.GetOrAdd(_currentnode.Name); - } - } - } - - /// <summary> - /// Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. - /// Always returns string.Empty in the case of HtmlNavigator implementation. - /// </summary> - public override string NamespaceURI - { - get - { - InternalTrace(">"); - return _nametable.GetOrAdd(string.Empty); - } - } - - /// <summary> - /// Gets the qualified name of the current node. - /// </summary> - public override string Name - { - get - { - InternalTrace(">" + _currentnode.Name); - return _nametable.GetOrAdd(_currentnode.Name); - } - } - - /// <summary> - /// Gets the prefix associated with the current node. - /// Always returns string.Empty in the case of HtmlNavigator implementation. - /// </summary> - public override string Prefix - { - get - { - InternalTrace(null); - return _nametable.GetOrAdd(string.Empty); - } - } - - /// <summary> - /// Gets the type of the current node. - /// </summary> - public override XPathNodeType NodeType - { - get - { - switch(_currentnode.NodeType) - { - case HtmlNodeType.Comment: - InternalTrace(">" + XPathNodeType.Comment); - return XPathNodeType.Comment; - - case HtmlNodeType.Document: - InternalTrace(">" + XPathNodeType.Root); - return XPathNodeType.Root; - - case HtmlNodeType.Text: - InternalTrace(">" + XPathNodeType.Text); - return XPathNodeType.Text; - - case HtmlNodeType.Element: - { - if (_attindex != -1) - { - InternalTrace(">" + XPathNodeType.Attribute); - return XPathNodeType.Attribute; - } - InternalTrace(">" + XPathNodeType.Element); - return XPathNodeType.Element; - } - - default: - throw new NotImplementedException("Internal error: Unhandled HtmlNodeType: " + _currentnode.NodeType); - } - } - } - - /// <summary> - /// Gets the text value of the current node. - /// </summary> - public override string Value - { - get - { - InternalTrace("nt=" + _currentnode.NodeType); - switch(_currentnode.NodeType) - { - case HtmlNodeType.Comment: - InternalTrace(">" + ((HtmlCommentNode)_currentnode).Comment); - return ((HtmlCommentNode)_currentnode).Comment; - - case HtmlNodeType.Document: - InternalTrace(">"); - return ""; - - case HtmlNodeType.Text: - InternalTrace(">" + ((HtmlTextNode)_currentnode).Text); - return ((HtmlTextNode)_currentnode).Text; - - case HtmlNodeType.Element: - { - if (_attindex != -1) - { - InternalTrace(">" + _currentnode.Attributes[_attindex].Value); - return _currentnode.Attributes[_attindex].Value; - } - return _currentnode.InnerText; - } - - default: - throw new NotImplementedException("Internal error: Unhandled HtmlNodeType: " + _currentnode.NodeType); - } - } - } - - /// <summary> - /// Gets the base URI for the current node. - /// Always returns string.Empty in the case of HtmlNavigator implementation. - /// </summary> - public override string BaseURI - { - get - { - InternalTrace(">"); - return _nametable.GetOrAdd(string.Empty); - } - } - - /// <summary> - /// Gets the xml:lang scope for the current node. - /// Always returns string.Empty in the case of HtmlNavigator implementation. - /// </summary> - public override string XmlLang - { - get - { - InternalTrace(null); - return _nametable.GetOrAdd(string.Empty); - } - } - - /// <summary> - /// Gets a value indicating whether the current node is an empty element. - /// </summary> - public override bool IsEmptyElement - { - get - { - InternalTrace(">" + !HasChildren); - // REVIEW: is this ok? - return !HasChildren; - } - } - - /// <summary> - /// Gets the XmlNameTable associated with this implementation. - /// </summary> - public override XmlNameTable NameTable - { - get - { - InternalTrace(null); - return _nametable; - } - } - - /// <summary> - /// Gets a value indicating whether the current node has child nodes. - /// </summary> - public override bool HasAttributes - { - get - { - InternalTrace(">" + (_currentnode.Attributes.Count>0)); - return (_currentnode.Attributes.Count>0); - } - } - - /// <summary> - /// Gets a value indicating whether the current node has child nodes. - /// </summary> - public override bool HasChildren - { - get - { - InternalTrace(">" + (_currentnode.ChildNodes.Count>0)); - return (_currentnode.ChildNodes.Count>0); - } - } - - /// <summary> - /// Moves to the next sibling of the current node. - /// </summary> - /// <returns>true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged.</returns> - public override bool MoveToNext() - { - if (_currentnode.NextSibling == null) - { - InternalTrace(">false"); - return false; - } - InternalTrace("_c=" + _currentnode.CloneNode(false).OuterHtml); - InternalTrace("_n=" + _currentnode.NextSibling.CloneNode(false).OuterHtml); - _currentnode = _currentnode.NextSibling; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Moves to the previous sibling of the current node. - /// </summary> - /// <returns>true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node.</returns> - public override bool MoveToPrevious() - { - if (_currentnode.PreviousSibling == null) - { - InternalTrace(">false"); - return false; - } - _currentnode = _currentnode.PreviousSibling; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Moves to the first sibling of the current node. - /// </summary> - /// <returns>true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node.</returns> - public override bool MoveToFirst() - { - if (_currentnode.ParentNode == null) - { - InternalTrace(">false"); - return false; - } - if (_currentnode.ParentNode.FirstChild == null) - { - InternalTrace(">false"); - return false; - } - _currentnode = _currentnode.ParentNode.FirstChild; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Moves to the first child of the current node. - /// </summary> - /// <returns>true if there is a first child node, otherwise false.</returns> - public override bool MoveToFirstChild() - { - if (!_currentnode.HasChildNodes) - { - InternalTrace(">false"); - return false; - } - _currentnode = _currentnode.ChildNodes[0]; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Moves to the parent of the current node. - /// </summary> - /// <returns>true if there is a parent node, otherwise false.</returns> - public override bool MoveToParent() - { - if (_currentnode.ParentNode == null) - { - InternalTrace(">false"); - return false; - } - _currentnode = _currentnode.ParentNode; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Moves to the root node to which the current node belongs. - /// </summary> - public override void MoveToRoot() - { - _currentnode = _doc.DocumentNode; - InternalTrace(null); - } - - /// <summary> - /// Moves to the same position as the specified HtmlNavigator. - /// </summary> - /// <param name="other">The HtmlNavigator positioned on the node that you want to move to.</param> - /// <returns>true if successful, otherwise false. If false, the position of the navigator is unchanged.</returns> - public override bool MoveTo(XPathNavigator other) - { - HtmlNodeNavigator nav = other as HtmlNodeNavigator; - if (nav == null) - { - InternalTrace(">false (nav is not an HtmlNodeNavigator)"); - return false; - } - InternalTrace("moveto oid=" + nav.GetHashCode() - + ", n:" + nav._currentnode.Name - + ", a:" + nav._attindex); - - if (nav._doc == _doc) - { - _currentnode = nav._currentnode; - _attindex = nav._attindex; - InternalTrace(">true"); - return true; - } - // we don't know how to handle that - InternalTrace(">false (???)"); - return false; - } - - /// <summary> - /// Moves to the node that has an attribute of type ID whose value matches the specified string. - /// </summary> - /// <param name="id">A string representing the ID value of the node to which you want to move. This argument does not need to be atomized.</param> - /// <returns>true if the move was successful, otherwise false. If false, the position of the navigator is unchanged.</returns> - public override bool MoveToId(string id) - { - InternalTrace("id=" + id); - HtmlNode node = _doc.GetElementbyId(id); - if (node == null) - { - InternalTrace(">false"); - return false; - } - _currentnode = node; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. - /// </summary> - /// <param name="other">The HtmlNavigator that you want to compare against.</param> - /// <returns>true if the two navigators have the same position, otherwise, false.</returns> - public override bool IsSamePosition(XPathNavigator other) - { - HtmlNodeNavigator nav = other as HtmlNodeNavigator; - if (nav == null) - { - InternalTrace(">false"); - return false; - } - InternalTrace(">" + (nav._currentnode == _currentnode)); - return (nav._currentnode == _currentnode); - } - - /// <summary> - /// Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. - /// </summary> - /// <returns>A new HtmlNavigator object positioned at the same node as the original HtmlNavigator.</returns> - public override XPathNavigator Clone() - { - InternalTrace(null); - return new HtmlNodeNavigator(this); - } - - /// <summary> - /// Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. - /// </summary> - /// <param name="localName">The local name of the HTML attribute.</param> - /// <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> - /// <returns>The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node.</returns> - public override string GetAttribute(string localName, string namespaceURI) - { - InternalTrace("localName=" + localName + ", namespaceURI=" + namespaceURI); - HtmlAttribute att = _currentnode.Attributes[localName]; - if (att == null) - { - InternalTrace(">null"); - return null; - } - InternalTrace(">" + att.Value); - return att.Value; - } - - /// <summary> - /// Moves to the HTML attribute with matching LocalName and NamespaceURI. - /// </summary> - /// <param name="localName">The local name of the HTML attribute.</param> - /// <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> - /// <returns>true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change.</returns> - public override bool MoveToAttribute(string localName, string namespaceURI) - { - InternalTrace("localName=" + localName + ", namespaceURI=" + namespaceURI); - int index = _currentnode.Attributes.GetAttributeIndex(localName); - if (index == -1) - { - InternalTrace(">false"); - return false; - } - _attindex = index; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Moves to the first HTML attribute. - /// </summary> - /// <returns>true if the navigator is successful moving to the first HTML attribute, otherwise, false.</returns> - public override bool MoveToFirstAttribute() - { - if (!HasAttributes) - { - InternalTrace(">false"); - return false; - } - _attindex = 0; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Moves to the next HTML attribute. - /// </summary> - /// <returns></returns> - public override bool MoveToNextAttribute() - { - InternalTrace(null); - if (_attindex>=(_currentnode.Attributes.Count-1)) - { - InternalTrace(">false"); - return false; - } - _attindex++; - InternalTrace(">true"); - return true; - } - - /// <summary> - /// Returns the value of the namespace node corresponding to the specified local name. - /// Always returns string.Empty for the HtmlNavigator implementation. - /// </summary> - /// <param name="name">The local name of the namespace node.</param> - /// <returns>Always returns string.Empty for the HtmlNavigator implementation.</returns> - public override string GetNamespace(string name) - { - InternalTrace("name=" + name); - return string.Empty; - } - - /// <summary> - /// Moves the XPathNavigator to the namespace node with the specified local name. - /// Always returns false for the HtmlNavigator implementation. - /// </summary> - /// <param name="name">The local name of the namespace node.</param> - /// <returns>Always returns false for the HtmlNavigator implementation.</returns> - public override bool MoveToNamespace(string name) - { - InternalTrace("name=" + name); - return false; - } - - /// <summary> - /// Moves the XPathNavigator to the first namespace node of the current element. - /// Always returns false for the HtmlNavigator implementation. - /// </summary> - /// <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> - /// <returns>Always returns false for the HtmlNavigator implementation.</returns> - public override bool MoveToFirstNamespace(XPathNamespaceScope scope) - { - InternalTrace(null); - return false; - } - - /// <summary> - /// Moves the XPathNavigator to the next namespace node. - /// Always returns falsefor the HtmlNavigator implementation. - /// </summary> - /// <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> - /// <returns>Always returns false for the HtmlNavigator implementation.</returns> - public override bool MoveToNextNamespace(XPathNamespaceScope scope) - { - InternalTrace(null); - return false; - } - - /// <summary> - /// Gets the current HTML node. - /// </summary> - public HtmlNode CurrentNode - { - get - { - return _currentnode; - } - } - - /// <summary> - /// Gets the current HTML document. - /// </summary> - public HtmlDocument CurrentDocument - { - get - { - return _doc; - } - } - - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Diagnostics; +using System.Collections.Specialized; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.XPath; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML navigator on an HTML document seen as a data store. + /// </summary> + public class HtmlNodeNavigator : XPathNavigator, IXPathNavigable + { + private HtmlDocument _doc = new HtmlDocument(); + private HtmlNode _currentnode; + private int _attindex; + private HtmlNameTable _nametable = new HtmlNameTable(); + + internal bool Trace = false; + + internal HtmlNodeNavigator() + { + Reset(); + } + + private void Reset() + { + InternalTrace(null); + _currentnode = _doc.DocumentNode; + _attindex = -1; + } + + [Conditional("TRACE")] + internal void InternalTrace(object Value) + { + if (!Trace) + { + return; + } + string name = null; + StackFrame sf = new StackFrame(1, true); + name = sf.GetMethod().Name; + string nodename; + if (_currentnode == null) + { + nodename = "(null)"; + } + else + { + nodename = _currentnode.Name; + } + string nodevalue; + if (_currentnode == null) + { + nodevalue = "(null)"; + } + else + { + switch(_currentnode.NodeType) + { + case HtmlNodeType.Comment: + nodevalue = ((HtmlCommentNode)_currentnode).Comment; + break; + + case HtmlNodeType.Document: + nodevalue = ""; + break; + + case HtmlNodeType.Text: + nodevalue = ((HtmlTextNode)_currentnode).Text; + break; + + default: + nodevalue = _currentnode.CloneNode(false).OuterHtml; + break; + + } + } + System.Diagnostics.Trace.WriteLine("oid=" + GetHashCode() + + ",n=" + nodename + + ",a=" + _attindex + "," + + ",v=" + nodevalue + "," + + Value, "N!"+ name); + } + + internal HtmlNodeNavigator(HtmlDocument doc, HtmlNode currentNode) + { + if (currentNode == null) + { + throw new ArgumentNullException("currentNode"); + } + if (currentNode.OwnerDocument != doc) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + InternalTrace(null); + + _doc = doc; + Reset(); + _currentnode = currentNode; + } + + private HtmlNodeNavigator(HtmlNodeNavigator nav) + { + if (nav == null) + { + throw new ArgumentNullException("nav"); + } + InternalTrace(null); + + _doc = nav._doc; + _currentnode = nav._currentnode; + _attindex = nav._attindex; + _nametable = nav._nametable; // REVIEW: should we do this? + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + public HtmlNodeNavigator(Stream stream) + { + _doc.Load(stream); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public HtmlNodeNavigator(Stream stream, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(stream, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + public HtmlNodeNavigator(Stream stream, Encoding encoding) + { + _doc.Load(stream, encoding); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public HtmlNodeNavigator(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(stream, encoding, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public HtmlNodeNavigator(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + _doc.Load(stream, encoding, detectEncodingFromByteOrderMarks, buffersize); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML data into the document.</param> + public HtmlNodeNavigator(TextReader reader) + { + _doc.Load(reader); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + public HtmlNodeNavigator(string path) + { + _doc.Load(path); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public HtmlNodeNavigator(string path, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(path, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + public HtmlNodeNavigator(string path, Encoding encoding) + { + _doc.Load(path, encoding); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public HtmlNodeNavigator(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(path, encoding, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public HtmlNodeNavigator(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + _doc.Load(path, encoding, detectEncodingFromByteOrderMarks, buffersize); + Reset(); + } + + /// <summary> + /// Gets the name of the current HTML node without the namespace prefix. + /// </summary> + public override string LocalName + { + get + { + if (_attindex != -1) + { + InternalTrace("att>" + _currentnode.Attributes[_attindex].Name); + return _nametable.GetOrAdd(_currentnode.Attributes[_attindex].Name); + } + else + { + InternalTrace("node>" + _currentnode.Name); + return _nametable.GetOrAdd(_currentnode.Name); + } + } + } + + /// <summary> + /// Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string NamespaceURI + { + get + { + InternalTrace(">"); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets the qualified name of the current node. + /// </summary> + public override string Name + { + get + { + InternalTrace(">" + _currentnode.Name); + return _nametable.GetOrAdd(_currentnode.Name); + } + } + + /// <summary> + /// Gets the prefix associated with the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string Prefix + { + get + { + InternalTrace(null); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets the type of the current node. + /// </summary> + public override XPathNodeType NodeType + { + get + { + switch(_currentnode.NodeType) + { + case HtmlNodeType.Comment: + InternalTrace(">" + XPathNodeType.Comment); + return XPathNodeType.Comment; + + case HtmlNodeType.Document: + InternalTrace(">" + XPathNodeType.Root); + return XPathNodeType.Root; + + case HtmlNodeType.Text: + InternalTrace(">" + XPathNodeType.Text); + return XPathNodeType.Text; + + case HtmlNodeType.Element: + { + if (_attindex != -1) + { + InternalTrace(">" + XPathNodeType.Attribute); + return XPathNodeType.Attribute; + } + InternalTrace(">" + XPathNodeType.Element); + return XPathNodeType.Element; + } + + default: + throw new NotImplementedException("Internal error: Unhandled HtmlNodeType: " + _currentnode.NodeType); + } + } + } + + /// <summary> + /// Gets the text value of the current node. + /// </summary> + public override string Value + { + get + { + InternalTrace("nt=" + _currentnode.NodeType); + switch(_currentnode.NodeType) + { + case HtmlNodeType.Comment: + InternalTrace(">" + ((HtmlCommentNode)_currentnode).Comment); + return ((HtmlCommentNode)_currentnode).Comment; + + case HtmlNodeType.Document: + InternalTrace(">"); + return ""; + + case HtmlNodeType.Text: + InternalTrace(">" + ((HtmlTextNode)_currentnode).Text); + return ((HtmlTextNode)_currentnode).Text; + + case HtmlNodeType.Element: + { + if (_attindex != -1) + { + InternalTrace(">" + _currentnode.Attributes[_attindex].Value); + return _currentnode.Attributes[_attindex].Value; + } + return _currentnode.InnerText; + } + + default: + throw new NotImplementedException("Internal error: Unhandled HtmlNodeType: " + _currentnode.NodeType); + } + } + } + + /// <summary> + /// Gets the base URI for the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string BaseURI + { + get + { + InternalTrace(">"); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets the xml:lang scope for the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string XmlLang + { + get + { + InternalTrace(null); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets a value indicating whether the current node is an empty element. + /// </summary> + public override bool IsEmptyElement + { + get + { + InternalTrace(">" + !HasChildren); + // REVIEW: is this ok? + return !HasChildren; + } + } + + /// <summary> + /// Gets the XmlNameTable associated with this implementation. + /// </summary> + public override XmlNameTable NameTable + { + get + { + InternalTrace(null); + return _nametable; + } + } + + /// <summary> + /// Gets a value indicating whether the current node has child nodes. + /// </summary> + public override bool HasAttributes + { + get + { + InternalTrace(">" + (_currentnode.Attributes.Count>0)); + return (_currentnode.Attributes.Count>0); + } + } + + /// <summary> + /// Gets a value indicating whether the current node has child nodes. + /// </summary> + public override bool HasChildren + { + get + { + InternalTrace(">" + (_currentnode.ChildNodes.Count>0)); + return (_currentnode.ChildNodes.Count>0); + } + } + + /// <summary> + /// Moves to the next sibling of the current node. + /// </summary> + /// <returns>true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged.</returns> + public override bool MoveToNext() + { + if (_currentnode.NextSibling == null) + { + InternalTrace(">false"); + return false; + } + InternalTrace("_c=" + _currentnode.CloneNode(false).OuterHtml); + InternalTrace("_n=" + _currentnode.NextSibling.CloneNode(false).OuterHtml); + _currentnode = _currentnode.NextSibling; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the previous sibling of the current node. + /// </summary> + /// <returns>true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node.</returns> + public override bool MoveToPrevious() + { + if (_currentnode.PreviousSibling == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.PreviousSibling; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the first sibling of the current node. + /// </summary> + /// <returns>true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node.</returns> + public override bool MoveToFirst() + { + if (_currentnode.ParentNode == null) + { + InternalTrace(">false"); + return false; + } + if (_currentnode.ParentNode.FirstChild == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.ParentNode.FirstChild; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the first child of the current node. + /// </summary> + /// <returns>true if there is a first child node, otherwise false.</returns> + public override bool MoveToFirstChild() + { + if (!_currentnode.HasChildNodes) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.ChildNodes[0]; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the parent of the current node. + /// </summary> + /// <returns>true if there is a parent node, otherwise false.</returns> + public override bool MoveToParent() + { + if (_currentnode.ParentNode == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.ParentNode; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the root node to which the current node belongs. + /// </summary> + public override void MoveToRoot() + { + _currentnode = _doc.DocumentNode; + InternalTrace(null); + } + + /// <summary> + /// Moves to the same position as the specified HtmlNavigator. + /// </summary> + /// <param name="other">The HtmlNavigator positioned on the node that you want to move to.</param> + /// <returns>true if successful, otherwise false. If false, the position of the navigator is unchanged.</returns> + public override bool MoveTo(XPathNavigator other) + { + HtmlNodeNavigator nav = other as HtmlNodeNavigator; + if (nav == null) + { + InternalTrace(">false (nav is not an HtmlNodeNavigator)"); + return false; + } + InternalTrace("moveto oid=" + nav.GetHashCode() + + ", n:" + nav._currentnode.Name + + ", a:" + nav._attindex); + + if (nav._doc == _doc) + { + _currentnode = nav._currentnode; + _attindex = nav._attindex; + InternalTrace(">true"); + return true; + } + // we don't know how to handle that + InternalTrace(">false (???)"); + return false; + } + + /// <summary> + /// Moves to the node that has an attribute of type ID whose value matches the specified string. + /// </summary> + /// <param name="id">A string representing the ID value of the node to which you want to move. This argument does not need to be atomized.</param> + /// <returns>true if the move was successful, otherwise false. If false, the position of the navigator is unchanged.</returns> + public override bool MoveToId(string id) + { + InternalTrace("id=" + id); + HtmlNode node = _doc.GetElementbyId(id); + if (node == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = node; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. + /// </summary> + /// <param name="other">The HtmlNavigator that you want to compare against.</param> + /// <returns>true if the two navigators have the same position, otherwise, false.</returns> + public override bool IsSamePosition(XPathNavigator other) + { + HtmlNodeNavigator nav = other as HtmlNodeNavigator; + if (nav == null) + { + InternalTrace(">false"); + return false; + } + InternalTrace(">" + (nav._currentnode == _currentnode)); + return (nav._currentnode == _currentnode); + } + + /// <summary> + /// Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. + /// </summary> + /// <returns>A new HtmlNavigator object positioned at the same node as the original HtmlNavigator.</returns> + public override XPathNavigator Clone() + { + InternalTrace(null); + return new HtmlNodeNavigator(this); + } + + /// <summary> + /// Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. + /// </summary> + /// <param name="localName">The local name of the HTML attribute.</param> + /// <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> + /// <returns>The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node.</returns> + public override string GetAttribute(string localName, string namespaceURI) + { + InternalTrace("localName=" + localName + ", namespaceURI=" + namespaceURI); + HtmlAttribute att = _currentnode.Attributes[localName]; + if (att == null) + { + InternalTrace(">null"); + return null; + } + InternalTrace(">" + att.Value); + return att.Value; + } + + /// <summary> + /// Moves to the HTML attribute with matching LocalName and NamespaceURI. + /// </summary> + /// <param name="localName">The local name of the HTML attribute.</param> + /// <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> + /// <returns>true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change.</returns> + public override bool MoveToAttribute(string localName, string namespaceURI) + { + InternalTrace("localName=" + localName + ", namespaceURI=" + namespaceURI); + int index = _currentnode.Attributes.GetAttributeIndex(localName); + if (index == -1) + { + InternalTrace(">false"); + return false; + } + _attindex = index; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the first HTML attribute. + /// </summary> + /// <returns>true if the navigator is successful moving to the first HTML attribute, otherwise, false.</returns> + public override bool MoveToFirstAttribute() + { + if (!HasAttributes) + { + InternalTrace(">false"); + return false; + } + _attindex = 0; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the next HTML attribute. + /// </summary> + /// <returns></returns> + public override bool MoveToNextAttribute() + { + InternalTrace(null); + if (_attindex>=(_currentnode.Attributes.Count-1)) + { + InternalTrace(">false"); + return false; + } + _attindex++; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Returns the value of the namespace node corresponding to the specified local name. + /// Always returns string.Empty for the HtmlNavigator implementation. + /// </summary> + /// <param name="name">The local name of the namespace node.</param> + /// <returns>Always returns string.Empty for the HtmlNavigator implementation.</returns> + public override string GetNamespace(string name) + { + InternalTrace("name=" + name); + return string.Empty; + } + + /// <summary> + /// Moves the XPathNavigator to the namespace node with the specified local name. + /// Always returns false for the HtmlNavigator implementation. + /// </summary> + /// <param name="name">The local name of the namespace node.</param> + /// <returns>Always returns false for the HtmlNavigator implementation.</returns> + public override bool MoveToNamespace(string name) + { + InternalTrace("name=" + name); + return false; + } + + /// <summary> + /// Moves the XPathNavigator to the first namespace node of the current element. + /// Always returns false for the HtmlNavigator implementation. + /// </summary> + /// <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> + /// <returns>Always returns false for the HtmlNavigator implementation.</returns> + public override bool MoveToFirstNamespace(XPathNamespaceScope scope) + { + InternalTrace(null); + return false; + } + + /// <summary> + /// Moves the XPathNavigator to the next namespace node. + /// Always returns falsefor the HtmlNavigator implementation. + /// </summary> + /// <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> + /// <returns>Always returns false for the HtmlNavigator implementation.</returns> + public override bool MoveToNextNamespace(XPathNamespaceScope scope) + { + InternalTrace(null); + return false; + } + + /// <summary> + /// Gets the current HTML node. + /// </summary> + public HtmlNode CurrentNode + { + get + { + return _currentnode; + } + } + + /// <summary> + /// Gets the current HTML document. + /// </summary> + public HtmlDocument CurrentDocument + { + get + { + return _doc; + } + } + + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs b/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs index c8fc47a..ba4a6fc 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs @@ -1,32 +1,32 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents the type of a node. - /// </summary> - public enum HtmlNodeType - { - /// <summary> - /// The root of a document. - /// </summary> - Document, - - /// <summary> - /// An HTML element. - /// </summary> - Element, - - /// <summary> - /// An HTML comment. - /// </summary> - Comment, - - /// <summary> - /// A text node is always the child of an element or a document node. - /// </summary> - Text, - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents the type of a node. + /// </summary> + public enum HtmlNodeType + { + /// <summary> + /// The root of a document. + /// </summary> + Document, + + /// <summary> + /// An HTML element. + /// </summary> + Element, + + /// <summary> + /// An HTML comment. + /// </summary> + Comment, + + /// <summary> + /// A text node is always the child of an element or a document node. + /// </summary> + Text, + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs b/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs index aecf638..e874dc7 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs @@ -1,101 +1,101 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - - /// <summary> - /// Represents a parsing error found during document parsing. - /// </summary> - public class HtmlParseError - { - private HtmlParseErrorCode _code; - private int _line; - private int _linePosition; - private int _streamPosition; - private string _sourceText; - private string _reason; - - internal HtmlParseError( - HtmlParseErrorCode code, - int line, - int linePosition, - int streamPosition, - string sourceText, - string reason) - { - _code = code; - _line = line; - _linePosition = linePosition; - _streamPosition = streamPosition; - _sourceText = sourceText; - _reason = reason; - } - - /// <summary> - /// Gets the type of error. - /// </summary> - public HtmlParseErrorCode Code - { - get - { - return _code; - } - } - - /// <summary> - /// Gets the line number of this error in the document. - /// </summary> - public int Line - { - get - { - return _line; - } - } - - /// <summary> - /// Gets the column number of this error in the document. - /// </summary> - public int LinePosition - { - get - { - return _linePosition; - } - } - - /// <summary> - /// Gets the absolute stream position of this error in the document, relative to the start of the document. - /// </summary> - public int StreamPosition - { - get - { - return _streamPosition; - } - } - - /// <summary> - /// Gets the the full text of the line containing the error. - /// </summary> - public string SourceText - { - get - { - return _sourceText; - } - } - - /// <summary> - /// Gets a description for the error. - /// </summary> - public string Reason - { - get - { - return _reason; - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + + /// <summary> + /// Represents a parsing error found during document parsing. + /// </summary> + public class HtmlParseError + { + private HtmlParseErrorCode _code; + private int _line; + private int _linePosition; + private int _streamPosition; + private string _sourceText; + private string _reason; + + internal HtmlParseError( + HtmlParseErrorCode code, + int line, + int linePosition, + int streamPosition, + string sourceText, + string reason) + { + _code = code; + _line = line; + _linePosition = linePosition; + _streamPosition = streamPosition; + _sourceText = sourceText; + _reason = reason; + } + + /// <summary> + /// Gets the type of error. + /// </summary> + public HtmlParseErrorCode Code + { + get + { + return _code; + } + } + + /// <summary> + /// Gets the line number of this error in the document. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the column number of this error in the document. + /// </summary> + public int LinePosition + { + get + { + return _linePosition; + } + } + + /// <summary> + /// Gets the absolute stream position of this error in the document, relative to the start of the document. + /// </summary> + public int StreamPosition + { + get + { + return _streamPosition; + } + } + + /// <summary> + /// Gets the the full text of the line containing the error. + /// </summary> + public string SourceText + { + get + { + return _sourceText; + } + } + + /// <summary> + /// Gets a description for the error. + /// </summary> + public string Reason + { + get + { + return _reason; + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs b/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs index 17db426..3c3b4be 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs @@ -1,38 +1,38 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections.Generic; -using System.Text; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents the type of parsing error. - /// </summary> - public enum HtmlParseErrorCode - { - /// <summary> - /// A tag was not closed. - /// </summary> - TagNotClosed, - - /// <summary> - /// A tag was not opened. - /// </summary> - TagNotOpened, - - /// <summary> - /// There is a charset mismatch between stream and declared (META) encoding. - /// </summary> - CharsetMismatch, - - /// <summary> - /// An end tag was not required. - /// </summary> - EndTagNotRequired, - - /// <summary> - /// An end tag is invalid at this position. - /// </summary> - EndTagInvalidHere - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections.Generic; +using System.Text; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents the type of parsing error. + /// </summary> + public enum HtmlParseErrorCode + { + /// <summary> + /// A tag was not closed. + /// </summary> + TagNotClosed, + + /// <summary> + /// A tag was not opened. + /// </summary> + TagNotOpened, + + /// <summary> + /// There is a charset mismatch between stream and declared (META) encoding. + /// </summary> + CharsetMismatch, + + /// <summary> + /// An end tag was not required. + /// </summary> + EndTagNotRequired, + + /// <summary> + /// An end tag is invalid at this position. + /// </summary> + EndTagInvalidHere + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs b/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs index bc6d7e3..f4c3035 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs @@ -1,69 +1,69 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents an HTML text node. - /// </summary> - public class HtmlTextNode : HtmlNode - { - private string _text; - - internal HtmlTextNode(HtmlDocument ownerdocument, int index) - : - base(HtmlNodeType.Text, ownerdocument, index) - { - } - - /// <summary> - /// Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. - /// </summary> - public override string InnerHtml - { - get - { - return OuterHtml; - } - set - { - _text = value; - } - } - - /// <summary> - /// Gets or Sets the object and its content in HTML. - /// </summary> - public override string OuterHtml - { - get - { - if (_text == null) - { - return base.OuterHtml; - } - return _text; - } - } - - /// <summary> - /// Gets or Sets the text of the node. - /// </summary> - public string Text - { - get - { - if (_text == null) - { - return base.OuterHtml; - } - return _text; - } - set - { - _text = value; - } - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML text node. + /// </summary> + public class HtmlTextNode : HtmlNode + { + private string _text; + + internal HtmlTextNode(HtmlDocument ownerdocument, int index) + : + base(HtmlNodeType.Text, ownerdocument, index) + { + } + + /// <summary> + /// Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + /// </summary> + public override string InnerHtml + { + get + { + return OuterHtml; + } + set + { + _text = value; + } + } + + /// <summary> + /// Gets or Sets the object and its content in HTML. + /// </summary> + public override string OuterHtml + { + get + { + if (_text == null) + { + return base.OuterHtml; + } + return _text; + } + } + + /// <summary> + /// Gets or Sets the text of the node. + /// </summary> + public string Text + { + get + { + if (_text == null) + { + return base.OuterHtml; + } + return _text; + } + set + { + _text = value; + } + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs b/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs index 0b78b20..6988a66 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs @@ -1,807 +1,807 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.IO; -using System.Net; -using System.Xml; -using System.Xml.Serialization; -using System.Xml.Xsl; -using Microsoft.Win32; - -namespace HtmlAgilityPack -{ - /// <summary> - /// A utility class to get HTML document from HTTP. - /// </summary> - public class HtmlWeb - { - /// <summary> - /// Represents the method that will handle the PreRequest event. - /// </summary> - public delegate bool PreRequestHandler(HttpWebRequest request); - - /// <summary> - /// Represents the method that will handle the PostResponse event. - /// </summary> - public delegate void PostResponseHandler(HttpWebRequest request, HttpWebResponse response); - - /// <summary> - /// Represents the method that will handle the PreHandleDocument event. - /// </summary> - public delegate void PreHandleDocumentHandler(HtmlDocument document); - - private int _streamBufferSize = 1024; - private string _cachePath; - private bool _usingCache; - private bool _fromCache; - private bool _cacheOnly; - private bool _useCookies; - private int _requestDuration; - private bool _autoDetectEncoding = true; - private HttpStatusCode _statusCode = HttpStatusCode.OK; - private Uri _responseUri; - - /// <summary> - /// Occurs before an HTTP request is executed. - /// </summary> - public PreRequestHandler PreRequest; - - /// <summary> - /// Occurs after an HTTP request has been executed. - /// </summary> - public PostResponseHandler PostResponse; - - /// <summary> - /// Occurs before an HTML document is handled. - /// </summary> - public PreHandleDocumentHandler PreHandleDocument; - - /// <summary> - /// Creates an instance of an HtmlWeb class. - /// </summary> - public HtmlWeb() - { - } - - /// <summary> - /// Gets an HTML document from an Internet resource and saves it to the specified file. - /// </summary> - /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="path">The location of the file where you want to save the document.</param> - public void Get(string url, string path) - { - Get(url, path, "GET"); - } - - /// <summary> - /// Gets an HTML document from an Internet resource and saves it to the specified file. - /// </summary> - /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="path">The location of the file where you want to save the document.</param> - /// <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> - public void Get(string url, string path, string method) - { - Uri uri = new Uri(url); - if ((uri.Scheme == Uri.UriSchemeHttps) || - (uri.Scheme == Uri.UriSchemeHttp)) - { - Get(uri, method, path, null); - } - else - { - throw new HtmlWebException("Unsupported uri scheme: '" + uri.Scheme + "'."); - } - } - - /// <summary> - /// Gets an HTML document from an Internet resource. - /// </summary> - /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <returns>A new HTML document.</returns> - public HtmlDocument Load(string url) - { - return Load(url, "GET"); - } - - /// <summary> - /// Loads an HTML document from an Internet resource. - /// </summary> - /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> - /// <returns>A new HTML document.</returns> - public HtmlDocument Load(string url, string method) - { - Uri uri = new Uri(url); - HtmlDocument doc; - if ((uri.Scheme == Uri.UriSchemeHttps) || - (uri.Scheme == Uri.UriSchemeHttp)) - { - doc = LoadUrl(uri, method); - } - else - { - - if (uri.Scheme == Uri.UriSchemeFile) - { - doc = new HtmlDocument(); - doc.OptionAutoCloseOnEnd = false; - doc.OptionAutoCloseOnEnd = true; - doc.DetectEncodingAndLoad(url, _autoDetectEncoding); - } - else - { - throw new HtmlWebException("Unsupported uri scheme: '" + uri.Scheme + "'."); - } - } - if (PreHandleDocument != null) - { - PreHandleDocument(doc); - } - return doc; - } - - private bool IsCacheHtmlContent(string path) - { - string ct = GetContentTypeForExtension(Path.GetExtension(path), null); - return IsHtmlContent(ct); - } - - private bool IsHtmlContent(string contentType) - { - return contentType.ToLower().StartsWith("text/html"); - } - - private string GetCacheHeadersPath(Uri uri) - { - //return Path.Combine(GetCachePath(uri), ".h.xml"); - return GetCachePath(uri) + ".h.xml"; - } - - /// <summary> - /// Gets the cache file path for a specified url. - /// </summary> - /// <param name="uri">The url fo which to retrieve the cache path. May not be null.</param> - /// <returns>The cache file path.</returns> - public string GetCachePath(Uri uri) - { - if (uri == null) - { - throw new ArgumentNullException("uri"); - } - if (!UsingCache) - { - throw new HtmlWebException("Cache is not enabled. Set UsingCache to true first."); - } - string cachePath; - if (uri.AbsolutePath == "/") - { - cachePath = Path.Combine(_cachePath, ".htm"); - } - else - { - cachePath = Path.Combine(_cachePath, (uri.Host + uri.AbsolutePath).Replace('/', '\\')); - } - return cachePath; - } - - /// <summary> - /// Gets a value indicating if the last document was retrieved from the cache. - /// </summary> - public bool FromCache - { - get - { - return _fromCache; - } - } - - /// <summary> - /// Gets the URI of the Internet resource that actually responded to the request. - /// </summary> - public Uri ResponseUri - { - get - { - return _responseUri; - } - } - - /// <summary> - /// Gets or Sets a value indicating whether to get document only from the cache. - /// If this is set to true and document is not found in the cache, nothing will be loaded. - /// </summary> - public bool CacheOnly - { - get - { - return _cacheOnly; - } - set - { - if ((value) && !UsingCache) - { - throw new HtmlWebException("Cache is not enabled. Set UsingCache to true first."); - } - _cacheOnly = value; - } - } - - /// <summary> - /// Gets or Sets a value indicating if cookies will be stored. - /// </summary> - public bool UseCookies - { - get - { - return _useCookies; - } - set - { - _useCookies = value; - } - } - - /// <summary> - /// Gets the last request duration in milliseconds. - /// </summary> - public int RequestDuration - { - get - { - return _requestDuration; - } - } - - /// <summary> - /// Gets or Sets a value indicating if document encoding must be automatically detected. - /// </summary> - public bool AutoDetectEncoding - { - get - { - return _autoDetectEncoding; - } - set - { - _autoDetectEncoding = value; - } - } - - /// <summary> - /// Gets the last request status. - /// </summary> - public HttpStatusCode StatusCode - { - get - { - return _statusCode; - } - } - - /// <summary> - /// Gets or Sets the size of the buffer used for memory operations. - /// </summary> - public int StreamBufferSize - { - get - { - return _streamBufferSize; - } - set - { - if (_streamBufferSize <= 0) - { - throw new ArgumentException("Size must be greater than zero."); - } - _streamBufferSize = value; - } - } - - private HtmlDocument LoadUrl(Uri uri, string method) - { - HtmlDocument doc = new HtmlDocument(); - doc.OptionAutoCloseOnEnd = false; - doc.OptionFixNestedTags = true; - _statusCode = Get(uri, method, null, doc); - if (_statusCode == HttpStatusCode.NotModified) - { - // read cached encoding - doc.DetectEncodingAndLoad(GetCachePath(uri)); - } - return doc; - } - - private HttpStatusCode Get(Uri uri, string method, string path, HtmlDocument doc) - { - string cachePath = null; - HttpWebRequest req; - bool oldFile = false; - - req = WebRequest.Create(uri) as HttpWebRequest; - req.Method = method; - - _fromCache = false; - _requestDuration = 0; - int tc = Environment.TickCount; - if (UsingCache) - { - cachePath = GetCachePath(req.RequestUri); - if (File.Exists(cachePath)) - { - req.IfModifiedSince = File.GetLastAccessTime(cachePath); - oldFile = true; - } - } - - if (_cacheOnly) - { - if (!File.Exists(cachePath)) - { - throw new HtmlWebException("File was not found at cache path: '" + cachePath + "'"); - } - - if (path != null) - { - IOLibrary.CopyAlways(cachePath, path); - // touch the file - File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); - } - _fromCache = true; - return HttpStatusCode.NotModified; - } - - if (_useCookies) - { - req.CookieContainer = new CookieContainer(); - } - - if (PreRequest != null) - { - // allow our user to change the request at will - if (!PreRequest(req)) - { - return HttpStatusCode.ResetContent; - } - - // dump cookie -// if (_useCookies) -// { -// foreach(Cookie cookie in req.CookieContainer.GetCookies(req.RequestUri)) -// { -// HtmlLibrary.Trace("Cookie " + cookie.Name + "=" + cookie.Value + " path=" + cookie.Path + " domain=" + cookie.Domain); -// } -// } - } - - HttpWebResponse resp; - - try - { - resp = req.GetResponse() as HttpWebResponse; - } - catch (WebException we) - { - _requestDuration = Environment.TickCount - tc; - resp = (HttpWebResponse)we.Response; - if (resp == null) - { - if (oldFile) - { - if (path != null) - { - IOLibrary.CopyAlways(cachePath, path); - // touch the file - File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); - } - return HttpStatusCode.NotModified; - } - throw; - } - } - catch(Exception) - { - _requestDuration = Environment.TickCount - tc; - throw; - } - - // allow our user to get some info from the response - if (PostResponse != null) - { - PostResponse(req, resp); - } - - _requestDuration = Environment.TickCount - tc; - _responseUri = resp.ResponseUri; - - bool html = IsHtmlContent(resp.ContentType); - System.Text.Encoding respenc; - - if ((resp.ContentEncoding != null) && (resp.ContentEncoding.Length>0)) - { - respenc = System.Text.Encoding.GetEncoding(resp.ContentEncoding); - } - else - { - respenc = null; - } - - if (resp.StatusCode == HttpStatusCode.NotModified) - { - if (UsingCache) - { - _fromCache = true; - if (path != null) - { - IOLibrary.CopyAlways(cachePath, path); - // touch the file - File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); - } - return resp.StatusCode; - } - else - { - // this should *never* happen... - throw new HtmlWebException("Server has send a NotModifed code, without cache enabled."); - } - } - Stream s = resp.GetResponseStream(); - if (s != null) - { - if (UsingCache) - { - // NOTE: LastModified does not contain milliseconds, so we remove them to the file - SaveStream(s, cachePath, RemoveMilliseconds(resp.LastModified), _streamBufferSize); - - // save headers - SaveCacheHeaders(req.RequestUri, resp); - - if (path != null) - { - // copy and touch the file - IOLibrary.CopyAlways(cachePath, path); - File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); - } - } - else - { - // try to work in-memory - if ((doc != null) && (html)) - { - if (respenc != null) - { - doc.Load(s, respenc); - } - else - { - doc.Load(s, true); - } - } - } - resp.Close(); - } - return resp.StatusCode; - } - - private string GetCacheHeader(Uri requestUri, string name, string def) - { - // note: some headers are collection (ex: www-authenticate) - // we don't handle that here - XmlDocument doc = new XmlDocument(); - doc.Load(GetCacheHeadersPath(requestUri)); - XmlNode node = doc.SelectSingleNode("//h[translate(@n, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')='" + name.ToUpper() + "']"); - if (node == null) - { - return def; - } - // attribute should exist - return node.Attributes[name].Value; - } - - private void SaveCacheHeaders(Uri requestUri, HttpWebResponse resp) - { - // we cache the original headers aside the cached document. - string file = GetCacheHeadersPath(requestUri); - XmlDocument doc = new XmlDocument(); - doc.LoadXml("<c></c>"); - XmlNode cache = doc.FirstChild; - foreach(string header in resp.Headers) - { - XmlNode entry = doc.CreateElement("h"); - XmlAttribute att = doc.CreateAttribute("n"); - att.Value = header; - entry.Attributes.Append(att); - - att = doc.CreateAttribute("v"); - att.Value = resp.Headers[header]; - entry.Attributes.Append(att); - - cache.AppendChild(entry); - } - doc.Save(file); - } - - private static long SaveStream(Stream stream, string path, DateTime touchDate, int streamBufferSize) - { - FilePreparePath(path); - FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); - BinaryReader br = null; - BinaryWriter bw = null; - long len; - try - { - br = new BinaryReader(stream); - bw = new BinaryWriter(fs); - len = 0; - byte[] buffer; - do - { - buffer = br.ReadBytes(streamBufferSize); - len += buffer.Length; - if (buffer.Length>0) - { - bw.Write(buffer); - } - } - while (buffer.Length>0); - } - finally - { - if (br != null) - { - br.Close(); - } - if (bw != null) - { - bw.Flush(); - bw.Close(); - } - if (fs != null) - { - fs.Close(); - } - } - File.SetLastWriteTime(path, touchDate); - return len; - } - - private static void FilePreparePath(string target) - { - if (File.Exists(target)) - { - FileAttributes atts = File.GetAttributes(target); - File.SetAttributes(target, atts & ~FileAttributes.ReadOnly); - } - else - { - string dir = Path.GetDirectoryName(target); - if (!Directory.Exists(dir)) - { - Directory.CreateDirectory(dir); - } - } - } - - private static DateTime RemoveMilliseconds(DateTime t) - { - return new DateTime(t.Year, t.Month, t.Day, t.Hour, t.Minute, t.Second, 0); - } - - /// <summary> - /// Gets the path extension for a given MIME content type. - /// </summary> - /// <param name="contentType">The input MIME content type.</param> - /// <param name="def">The default path extension to return if any error occurs.</param> - /// <returns>The MIME content type's path extension.</returns> - public static string GetExtensionForContentType(string contentType, string def) - { - if ((contentType == null) || (contentType.Length == 0)) - { - return def; - } - string ext; - try - { - RegistryKey reg = Registry.ClassesRoot; - reg = reg.OpenSubKey(@"MIME\Database\Content Type\" + contentType, false); - ext = (string)reg.GetValue("Extension", def); - } - catch(Exception) - { - ext = def; - } - return ext; - } - - /// <summary> - /// Gets the MIME content type for a given path extension. - /// </summary> - /// <param name="extension">The input path extension.</param> - /// <param name="def">The default content type to return if any error occurs.</param> - /// <returns>The path extention's MIME content type.</returns> - public static string GetContentTypeForExtension(string extension, string def) - { - if ((extension == null) || (extension.Length == 0)) - { - return def; - } - string contentType; - try - { - RegistryKey reg = Registry.ClassesRoot; - reg = reg.OpenSubKey(extension, false); - contentType = (string)reg.GetValue("", def); - } - catch(Exception) - { - contentType = def; - } - return contentType; - } - - /// <summary> - /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. - /// </summary> - /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="writer">The XmlTextWriter to which you want to save.</param> - public void LoadHtmlAsXml(string htmlUrl, XmlTextWriter writer) - { - HtmlDocument doc = Load(htmlUrl); - doc.Save(writer); - } - - /// <summary> - /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - /// </summary> - /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - /// <param name="writer">The XmlTextWriter to which you want to save.</param> - public void LoadHtmlAsXml(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, XmlTextWriter writer) - { - LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer, null); - } - - /// <summary> - /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. - /// </summary> - /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null.</param> - /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - /// <param name="writer">The XmlTextWriter to which you want to save.</param> - /// <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> - public void LoadHtmlAsXml(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, XmlTextWriter writer, string xmlPath) - { - if (htmlUrl == null) - { - throw new ArgumentNullException("htmlUrl"); - } - - HtmlDocument doc = Load(htmlUrl); - - if (xmlPath != null) - { - XmlTextWriter w = new XmlTextWriter(xmlPath, doc.Encoding); - doc.Save(w); - w.Close(); - } - if (xsltArgs == null) - { - xsltArgs = new XsltArgumentList(); - } - - // add some useful variables to the xslt doc - xsltArgs.AddParam("url", "", htmlUrl); - xsltArgs.AddParam("requestDuration", "", RequestDuration); - xsltArgs.AddParam("fromCache", "", FromCache); - - XslCompiledTransform xslt = new XslCompiledTransform(); - xslt.Load(xsltUrl); - xslt.Transform(doc, xsltArgs, writer); - } - - /// <summary> - /// Creates an instance of the given type from the specified Internet resource. - /// </summary> - /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="type">The requested type.</param> - /// <returns>An newly created instance.</returns> - public object CreateInstance(string url, Type type) - { - return CreateInstance(url, null, null, type); - } - - /// <summary> - /// Creates an instance of the given type from the specified Internet resource. - /// </summary> - /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - /// <param name="type">The requested type.</param> - /// <returns>An newly created instance.</returns> - public object CreateInstance(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, Type type) - { - return CreateInstance(htmlUrl, xsltUrl, xsltArgs, type, null); - } - - /// <summary> - /// Creates an instance of the given type from the specified Internet resource. - /// </summary> - /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> - /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> - /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> - /// <param name="type">The requested type.</param> - /// <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> - /// <returns>An newly created instance.</returns> - public object CreateInstance(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, Type type, string xmlPath) - { - StringWriter sw = new StringWriter(); - XmlTextWriter writer = new XmlTextWriter(sw); - if (xsltUrl == null) - { - LoadHtmlAsXml(htmlUrl, writer); - } - else - { - if (xmlPath == null) - { - LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer); - } - else - { - LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer, xmlPath); - } - } - writer.Flush(); - StringReader sr = new StringReader(sw.ToString()); - XmlTextReader reader = new XmlTextReader(sr); - XmlSerializer serializer = new XmlSerializer(type); - object o = null; - try - { - o = serializer.Deserialize(reader); - } - catch(InvalidOperationException ex) - { - throw new Exception(ex.ToString() + ", --- xml:" + sw.ToString()); - } - return o; - } - - /// <summary> - /// Gets or Sets the cache path. If null, no caching mechanism will be used. - /// </summary> - public string CachePath - { - get - { - return _cachePath; - } - set - { - _cachePath = value; - } - } - - /// <summary> - /// Gets or Sets a value indicating whether the caching mechanisms should be used or not. - /// </summary> - public bool UsingCache - { - get - { - if (_cachePath == null) - { - return false; - } - return _usingCache; - } - set - { - if ((value) && (_cachePath == null)) - { - throw new HtmlWebException("You need to define a CachePath first."); - } - _usingCache = value; - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; +using System.Net; +using System.Xml; +using System.Xml.Serialization; +using System.Xml.Xsl; +using Microsoft.Win32; + +namespace HtmlAgilityPack +{ + /// <summary> + /// A utility class to get HTML document from HTTP. + /// </summary> + public class HtmlWeb + { + /// <summary> + /// Represents the method that will handle the PreRequest event. + /// </summary> + public delegate bool PreRequestHandler(HttpWebRequest request); + + /// <summary> + /// Represents the method that will handle the PostResponse event. + /// </summary> + public delegate void PostResponseHandler(HttpWebRequest request, HttpWebResponse response); + + /// <summary> + /// Represents the method that will handle the PreHandleDocument event. + /// </summary> + public delegate void PreHandleDocumentHandler(HtmlDocument document); + + private int _streamBufferSize = 1024; + private string _cachePath; + private bool _usingCache; + private bool _fromCache; + private bool _cacheOnly; + private bool _useCookies; + private int _requestDuration; + private bool _autoDetectEncoding = true; + private HttpStatusCode _statusCode = HttpStatusCode.OK; + private Uri _responseUri; + + /// <summary> + /// Occurs before an HTTP request is executed. + /// </summary> + public PreRequestHandler PreRequest; + + /// <summary> + /// Occurs after an HTTP request has been executed. + /// </summary> + public PostResponseHandler PostResponse; + + /// <summary> + /// Occurs before an HTML document is handled. + /// </summary> + public PreHandleDocumentHandler PreHandleDocument; + + /// <summary> + /// Creates an instance of an HtmlWeb class. + /// </summary> + public HtmlWeb() + { + } + + /// <summary> + /// Gets an HTML document from an Internet resource and saves it to the specified file. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="path">The location of the file where you want to save the document.</param> + public void Get(string url, string path) + { + Get(url, path, "GET"); + } + + /// <summary> + /// Gets an HTML document from an Internet resource and saves it to the specified file. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="path">The location of the file where you want to save the document.</param> + /// <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> + public void Get(string url, string path, string method) + { + Uri uri = new Uri(url); + if ((uri.Scheme == Uri.UriSchemeHttps) || + (uri.Scheme == Uri.UriSchemeHttp)) + { + Get(uri, method, path, null); + } + else + { + throw new HtmlWebException("Unsupported uri scheme: '" + uri.Scheme + "'."); + } + } + + /// <summary> + /// Gets an HTML document from an Internet resource. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <returns>A new HTML document.</returns> + public HtmlDocument Load(string url) + { + return Load(url, "GET"); + } + + /// <summary> + /// Loads an HTML document from an Internet resource. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> + /// <returns>A new HTML document.</returns> + public HtmlDocument Load(string url, string method) + { + Uri uri = new Uri(url); + HtmlDocument doc; + if ((uri.Scheme == Uri.UriSchemeHttps) || + (uri.Scheme == Uri.UriSchemeHttp)) + { + doc = LoadUrl(uri, method); + } + else + { + + if (uri.Scheme == Uri.UriSchemeFile) + { + doc = new HtmlDocument(); + doc.OptionAutoCloseOnEnd = false; + doc.OptionAutoCloseOnEnd = true; + doc.DetectEncodingAndLoad(url, _autoDetectEncoding); + } + else + { + throw new HtmlWebException("Unsupported uri scheme: '" + uri.Scheme + "'."); + } + } + if (PreHandleDocument != null) + { + PreHandleDocument(doc); + } + return doc; + } + + private bool IsCacheHtmlContent(string path) + { + string ct = GetContentTypeForExtension(Path.GetExtension(path), null); + return IsHtmlContent(ct); + } + + private bool IsHtmlContent(string contentType) + { + return contentType.ToLower().StartsWith("text/html"); + } + + private string GetCacheHeadersPath(Uri uri) + { + //return Path.Combine(GetCachePath(uri), ".h.xml"); + return GetCachePath(uri) + ".h.xml"; + } + + /// <summary> + /// Gets the cache file path for a specified url. + /// </summary> + /// <param name="uri">The url fo which to retrieve the cache path. May not be null.</param> + /// <returns>The cache file path.</returns> + public string GetCachePath(Uri uri) + { + if (uri == null) + { + throw new ArgumentNullException("uri"); + } + if (!UsingCache) + { + throw new HtmlWebException("Cache is not enabled. Set UsingCache to true first."); + } + string cachePath; + if (uri.AbsolutePath == "/") + { + cachePath = Path.Combine(_cachePath, ".htm"); + } + else + { + cachePath = Path.Combine(_cachePath, (uri.Host + uri.AbsolutePath).Replace('/', '\\')); + } + return cachePath; + } + + /// <summary> + /// Gets a value indicating if the last document was retrieved from the cache. + /// </summary> + public bool FromCache + { + get + { + return _fromCache; + } + } + + /// <summary> + /// Gets the URI of the Internet resource that actually responded to the request. + /// </summary> + public Uri ResponseUri + { + get + { + return _responseUri; + } + } + + /// <summary> + /// Gets or Sets a value indicating whether to get document only from the cache. + /// If this is set to true and document is not found in the cache, nothing will be loaded. + /// </summary> + public bool CacheOnly + { + get + { + return _cacheOnly; + } + set + { + if ((value) && !UsingCache) + { + throw new HtmlWebException("Cache is not enabled. Set UsingCache to true first."); + } + _cacheOnly = value; + } + } + + /// <summary> + /// Gets or Sets a value indicating if cookies will be stored. + /// </summary> + public bool UseCookies + { + get + { + return _useCookies; + } + set + { + _useCookies = value; + } + } + + /// <summary> + /// Gets the last request duration in milliseconds. + /// </summary> + public int RequestDuration + { + get + { + return _requestDuration; + } + } + + /// <summary> + /// Gets or Sets a value indicating if document encoding must be automatically detected. + /// </summary> + public bool AutoDetectEncoding + { + get + { + return _autoDetectEncoding; + } + set + { + _autoDetectEncoding = value; + } + } + + /// <summary> + /// Gets the last request status. + /// </summary> + public HttpStatusCode StatusCode + { + get + { + return _statusCode; + } + } + + /// <summary> + /// Gets or Sets the size of the buffer used for memory operations. + /// </summary> + public int StreamBufferSize + { + get + { + return _streamBufferSize; + } + set + { + if (_streamBufferSize <= 0) + { + throw new ArgumentException("Size must be greater than zero."); + } + _streamBufferSize = value; + } + } + + private HtmlDocument LoadUrl(Uri uri, string method) + { + HtmlDocument doc = new HtmlDocument(); + doc.OptionAutoCloseOnEnd = false; + doc.OptionFixNestedTags = true; + _statusCode = Get(uri, method, null, doc); + if (_statusCode == HttpStatusCode.NotModified) + { + // read cached encoding + doc.DetectEncodingAndLoad(GetCachePath(uri)); + } + return doc; + } + + private HttpStatusCode Get(Uri uri, string method, string path, HtmlDocument doc) + { + string cachePath = null; + HttpWebRequest req; + bool oldFile = false; + + req = WebRequest.Create(uri) as HttpWebRequest; + req.Method = method; + + _fromCache = false; + _requestDuration = 0; + int tc = Environment.TickCount; + if (UsingCache) + { + cachePath = GetCachePath(req.RequestUri); + if (File.Exists(cachePath)) + { + req.IfModifiedSince = File.GetLastAccessTime(cachePath); + oldFile = true; + } + } + + if (_cacheOnly) + { + if (!File.Exists(cachePath)) + { + throw new HtmlWebException("File was not found at cache path: '" + cachePath + "'"); + } + + if (path != null) + { + IOLibrary.CopyAlways(cachePath, path); + // touch the file + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + _fromCache = true; + return HttpStatusCode.NotModified; + } + + if (_useCookies) + { + req.CookieContainer = new CookieContainer(); + } + + if (PreRequest != null) + { + // allow our user to change the request at will + if (!PreRequest(req)) + { + return HttpStatusCode.ResetContent; + } + + // dump cookie +// if (_useCookies) +// { +// foreach(Cookie cookie in req.CookieContainer.GetCookies(req.RequestUri)) +// { +// HtmlLibrary.Trace("Cookie " + cookie.Name + "=" + cookie.Value + " path=" + cookie.Path + " domain=" + cookie.Domain); +// } +// } + } + + HttpWebResponse resp; + + try + { + resp = req.GetResponse() as HttpWebResponse; + } + catch (WebException we) + { + _requestDuration = Environment.TickCount - tc; + resp = (HttpWebResponse)we.Response; + if (resp == null) + { + if (oldFile) + { + if (path != null) + { + IOLibrary.CopyAlways(cachePath, path); + // touch the file + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + return HttpStatusCode.NotModified; + } + throw; + } + } + catch(Exception) + { + _requestDuration = Environment.TickCount - tc; + throw; + } + + // allow our user to get some info from the response + if (PostResponse != null) + { + PostResponse(req, resp); + } + + _requestDuration = Environment.TickCount - tc; + _responseUri = resp.ResponseUri; + + bool html = IsHtmlContent(resp.ContentType); + System.Text.Encoding respenc; + + if ((resp.ContentEncoding != null) && (resp.ContentEncoding.Length>0)) + { + respenc = System.Text.Encoding.GetEncoding(resp.ContentEncoding); + } + else + { + respenc = null; + } + + if (resp.StatusCode == HttpStatusCode.NotModified) + { + if (UsingCache) + { + _fromCache = true; + if (path != null) + { + IOLibrary.CopyAlways(cachePath, path); + // touch the file + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + return resp.StatusCode; + } + else + { + // this should *never* happen... + throw new HtmlWebException("Server has send a NotModifed code, without cache enabled."); + } + } + Stream s = resp.GetResponseStream(); + if (s != null) + { + if (UsingCache) + { + // NOTE: LastModified does not contain milliseconds, so we remove them to the file + SaveStream(s, cachePath, RemoveMilliseconds(resp.LastModified), _streamBufferSize); + + // save headers + SaveCacheHeaders(req.RequestUri, resp); + + if (path != null) + { + // copy and touch the file + IOLibrary.CopyAlways(cachePath, path); + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + } + else + { + // try to work in-memory + if ((doc != null) && (html)) + { + if (respenc != null) + { + doc.Load(s, respenc); + } + else + { + doc.Load(s, true); + } + } + } + resp.Close(); + } + return resp.StatusCode; + } + + private string GetCacheHeader(Uri requestUri, string name, string def) + { + // note: some headers are collection (ex: www-authenticate) + // we don't handle that here + XmlDocument doc = new XmlDocument(); + doc.Load(GetCacheHeadersPath(requestUri)); + XmlNode node = doc.SelectSingleNode("//h[translate(@n, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')='" + name.ToUpper() + "']"); + if (node == null) + { + return def; + } + // attribute should exist + return node.Attributes[name].Value; + } + + private void SaveCacheHeaders(Uri requestUri, HttpWebResponse resp) + { + // we cache the original headers aside the cached document. + string file = GetCacheHeadersPath(requestUri); + XmlDocument doc = new XmlDocument(); + doc.LoadXml("<c></c>"); + XmlNode cache = doc.FirstChild; + foreach(string header in resp.Headers) + { + XmlNode entry = doc.CreateElement("h"); + XmlAttribute att = doc.CreateAttribute("n"); + att.Value = header; + entry.Attributes.Append(att); + + att = doc.CreateAttribute("v"); + att.Value = resp.Headers[header]; + entry.Attributes.Append(att); + + cache.AppendChild(entry); + } + doc.Save(file); + } + + private static long SaveStream(Stream stream, string path, DateTime touchDate, int streamBufferSize) + { + FilePreparePath(path); + FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); + BinaryReader br = null; + BinaryWriter bw = null; + long len; + try + { + br = new BinaryReader(stream); + bw = new BinaryWriter(fs); + len = 0; + byte[] buffer; + do + { + buffer = br.ReadBytes(streamBufferSize); + len += buffer.Length; + if (buffer.Length>0) + { + bw.Write(buffer); + } + } + while (buffer.Length>0); + } + finally + { + if (br != null) + { + br.Close(); + } + if (bw != null) + { + bw.Flush(); + bw.Close(); + } + if (fs != null) + { + fs.Close(); + } + } + File.SetLastWriteTime(path, touchDate); + return len; + } + + private static void FilePreparePath(string target) + { + if (File.Exists(target)) + { + FileAttributes atts = File.GetAttributes(target); + File.SetAttributes(target, atts & ~FileAttributes.ReadOnly); + } + else + { + string dir = Path.GetDirectoryName(target); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + } + } + + private static DateTime RemoveMilliseconds(DateTime t) + { + return new DateTime(t.Year, t.Month, t.Day, t.Hour, t.Minute, t.Second, 0); + } + + /// <summary> + /// Gets the path extension for a given MIME content type. + /// </summary> + /// <param name="contentType">The input MIME content type.</param> + /// <param name="def">The default path extension to return if any error occurs.</param> + /// <returns>The MIME content type's path extension.</returns> + public static string GetExtensionForContentType(string contentType, string def) + { + if ((contentType == null) || (contentType.Length == 0)) + { + return def; + } + string ext; + try + { + RegistryKey reg = Registry.ClassesRoot; + reg = reg.OpenSubKey(@"MIME\Database\Content Type\" + contentType, false); + ext = (string)reg.GetValue("Extension", def); + } + catch(Exception) + { + ext = def; + } + return ext; + } + + /// <summary> + /// Gets the MIME content type for a given path extension. + /// </summary> + /// <param name="extension">The input path extension.</param> + /// <param name="def">The default content type to return if any error occurs.</param> + /// <returns>The path extention's MIME content type.</returns> + public static string GetContentTypeForExtension(string extension, string def) + { + if ((extension == null) || (extension.Length == 0)) + { + return def; + } + string contentType; + try + { + RegistryKey reg = Registry.ClassesRoot; + reg = reg.OpenSubKey(extension, false); + contentType = (string)reg.GetValue("", def); + } + catch(Exception) + { + contentType = def; + } + return contentType; + } + + /// <summary> + /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="writer">The XmlTextWriter to which you want to save.</param> + public void LoadHtmlAsXml(string htmlUrl, XmlTextWriter writer) + { + HtmlDocument doc = Load(htmlUrl); + doc.Save(writer); + } + + /// <summary> + /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="writer">The XmlTextWriter to which you want to save.</param> + public void LoadHtmlAsXml(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, XmlTextWriter writer) + { + LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer, null); + } + + /// <summary> + /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null.</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="writer">The XmlTextWriter to which you want to save.</param> + /// <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> + public void LoadHtmlAsXml(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, XmlTextWriter writer, string xmlPath) + { + if (htmlUrl == null) + { + throw new ArgumentNullException("htmlUrl"); + } + + HtmlDocument doc = Load(htmlUrl); + + if (xmlPath != null) + { + XmlTextWriter w = new XmlTextWriter(xmlPath, doc.Encoding); + doc.Save(w); + w.Close(); + } + if (xsltArgs == null) + { + xsltArgs = new XsltArgumentList(); + } + + // add some useful variables to the xslt doc + xsltArgs.AddParam("url", "", htmlUrl); + xsltArgs.AddParam("requestDuration", "", RequestDuration); + xsltArgs.AddParam("fromCache", "", FromCache); + + XslCompiledTransform xslt = new XslCompiledTransform(); + xslt.Load(xsltUrl); + xslt.Transform(doc, xsltArgs, writer); + } + + /// <summary> + /// Creates an instance of the given type from the specified Internet resource. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="type">The requested type.</param> + /// <returns>An newly created instance.</returns> + public object CreateInstance(string url, Type type) + { + return CreateInstance(url, null, null, type); + } + + /// <summary> + /// Creates an instance of the given type from the specified Internet resource. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="type">The requested type.</param> + /// <returns>An newly created instance.</returns> + public object CreateInstance(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, Type type) + { + return CreateInstance(htmlUrl, xsltUrl, xsltArgs, type, null); + } + + /// <summary> + /// Creates an instance of the given type from the specified Internet resource. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="type">The requested type.</param> + /// <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> + /// <returns>An newly created instance.</returns> + public object CreateInstance(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, Type type, string xmlPath) + { + StringWriter sw = new StringWriter(); + XmlTextWriter writer = new XmlTextWriter(sw); + if (xsltUrl == null) + { + LoadHtmlAsXml(htmlUrl, writer); + } + else + { + if (xmlPath == null) + { + LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer); + } + else + { + LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer, xmlPath); + } + } + writer.Flush(); + StringReader sr = new StringReader(sw.ToString()); + XmlTextReader reader = new XmlTextReader(sr); + XmlSerializer serializer = new XmlSerializer(type); + object o = null; + try + { + o = serializer.Deserialize(reader); + } + catch(InvalidOperationException ex) + { + throw new Exception(ex.ToString() + ", --- xml:" + sw.ToString()); + } + return o; + } + + /// <summary> + /// Gets or Sets the cache path. If null, no caching mechanism will be used. + /// </summary> + public string CachePath + { + get + { + return _cachePath; + } + set + { + _cachePath = value; + } + } + + /// <summary> + /// Gets or Sets a value indicating whether the caching mechanisms should be used or not. + /// </summary> + public bool UsingCache + { + get + { + if (_cachePath == null) + { + return false; + } + return _usingCache; + } + set + { + if ((value) && (_cachePath == null)) + { + throw new HtmlWebException("You need to define a CachePath first."); + } + _usingCache = value; + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs b/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs index 28e8362..127a7fa 100644 --- a/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs +++ b/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs @@ -1,20 +1,20 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents an exception thrown by the HtmlWeb utility class. - /// </summary> - public class HtmlWebException : Exception - { - /// <summary> - /// Creates an instance of the HtmlWebException. - /// </summary> - /// <param name="message">The exception's message.</param> - public HtmlWebException(string message) - : base(message) - { - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an exception thrown by the HtmlWeb utility class. + /// </summary> + public class HtmlWebException : Exception + { + /// <summary> + /// Creates an instance of the HtmlWebException. + /// </summary> + /// <param name="message">The exception's message.</param> + public HtmlWebException(string message) + : base(message) + { + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/IOLibrary.cs b/FineUI/lib/HtmlAgilityPack/IOLibrary.cs index 47519ac..96df013 100644 --- a/FineUI/lib/HtmlAgilityPack/IOLibrary.cs +++ b/FineUI/lib/HtmlAgilityPack/IOLibrary.cs @@ -1,26 +1,26 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.IO; - -namespace HtmlAgilityPack -{ - internal struct IOLibrary - { - internal static void MakeWritable(string path) - { - if (!File.Exists(path)) - return; - File.SetAttributes(path, File.GetAttributes(path) & ~FileAttributes.ReadOnly); - } - - internal static void CopyAlways(string source, string target) - { - if (!File.Exists(source)) - return; - Directory.CreateDirectory(Path.GetDirectoryName(target)); - MakeWritable(target); - File.Copy(source, target, true); - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; + +namespace HtmlAgilityPack +{ + internal struct IOLibrary + { + internal static void MakeWritable(string path) + { + if (!File.Exists(path)) + return; + File.SetAttributes(path, File.GetAttributes(path) & ~FileAttributes.ReadOnly); + } + + internal static void CopyAlways(string source, string target) + { + if (!File.Exists(source)) + return; + Directory.CreateDirectory(Path.GetDirectoryName(target)); + MakeWritable(target); + File.Copy(source, target, true); + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs b/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs index 03aa58b..dcfc2b6 100644 --- a/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs +++ b/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs @@ -1,440 +1,440 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.IO; -using System.Text; -using System.Collections; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. - /// </summary> - public class MixedCodeDocument - { - private System.Text.Encoding _streamencoding = null; - internal string _text; - internal MixedCodeDocumentFragmentList _fragments; - internal MixedCodeDocumentFragmentList _codefragments; - internal MixedCodeDocumentFragmentList _textfragments; - private ParseState _state; - private int _index; - private int _c; - private int _line; - private int _lineposition; - private MixedCodeDocumentFragment _currentfragment; - - /// <summary> - /// Gets or sets the token representing code start. - /// </summary> - public string TokenCodeStart = "<%"; - - /// <summary> - /// Gets or sets the token representing code end. - /// </summary> - public string TokenCodeEnd = "%>"; - - /// <summary> - /// Gets or sets the token representing code directive. - /// </summary> - public string TokenDirective = "@"; - - /// <summary> - /// Gets or sets the token representing response write directive. - /// </summary> - public string TokenResponseWrite = "Response.Write "; - - - private string TokenTextBlock = "TextBlock({0})"; - - /// <summary> - /// Creates a mixed code document instance. - /// </summary> - public MixedCodeDocument() - { - _codefragments = new MixedCodeDocumentFragmentList(this); - _textfragments = new MixedCodeDocumentFragmentList(this); - _fragments = new MixedCodeDocumentFragmentList(this); - } - - /// <summary> - /// Loads a mixed code document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - public void Load(Stream stream) - { - Load(new StreamReader(stream)); - } - - /// <summary> - /// Loads a mixed code document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public void Load(Stream stream, bool detectEncodingFromByteOrderMarks) - { - Load(new StreamReader(stream, detectEncodingFromByteOrderMarks)); - } - - /// <summary> - /// Loads a mixed code document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - public void Load(Stream stream, Encoding encoding) - { - Load(new StreamReader(stream, encoding)); - } - - /// <summary> - /// Loads a mixed code document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) - { - Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks)); - } - - /// <summary> - /// Loads a mixed code document from a stream. - /// </summary> - /// <param name="stream">The input stream.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - /// <param name="buffersize">The minimum buffer size.</param> - public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) - { - Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks, buffersize)); - } - - /// <summary> - /// Loads a mixed code document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - public void Load(string path) - { - Load(new StreamReader(path)); - } - - /// <summary> - /// Loads a mixed code document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public void Load(string path, bool detectEncodingFromByteOrderMarks) - { - Load(new StreamReader(path, detectEncodingFromByteOrderMarks)); - } - - /// <summary> - /// Loads a mixed code document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="encoding">The character encoding to use.</param> - public void Load(string path, Encoding encoding) - { - Load(new StreamReader(path, encoding)); - } - - /// <summary> - /// Loads a mixed code document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) - { - Load(new StreamReader(path, encoding, detectEncodingFromByteOrderMarks)); - } - - /// <summary> - /// Loads a mixed code document from a file. - /// </summary> - /// <param name="path">The complete file path to be read.</param> - /// <param name="encoding">The character encoding to use.</param> - /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> - /// <param name="buffersize">The minimum buffer size.</param> - public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) - { - Load(new StreamReader(path, encoding, detectEncodingFromByteOrderMarks, buffersize)); - } - - /// <summary> - /// Loads a mixed document from a text - /// </summary> - /// <param name="html">The text to load.</param> - public void LoadHtml(string html) - { - Load(new StringReader(html)); - } - - /// <summary> - /// Loads the mixed code document from the specified TextReader. - /// </summary> - /// <param name="reader">The TextReader used to feed the HTML data into the document.</param> - public void Load(TextReader reader) - { - _codefragments.Clear(); - _textfragments.Clear(); - - // all pseudo constructors get down to this one - StreamReader sr = reader as StreamReader; - if (sr != null) - { - _streamencoding = sr.CurrentEncoding; - } - - _text = reader.ReadToEnd(); - reader.Close(); - Parse(); - } - - internal System.Text.Encoding GetOutEncoding() - { - if (_streamencoding != null) - return _streamencoding; - return System.Text.Encoding.Default; - } - - /// <summary> - /// Gets the encoding of the stream used to read the document. - /// </summary> - public System.Text.Encoding StreamEncoding - { - get - { - return _streamencoding; - } - } - - /// <summary> - /// Gets the list of code fragments in the document. - /// </summary> - public MixedCodeDocumentFragmentList CodeFragments - { - get - { - return _codefragments; - } - } - - /// <summary> - /// Gets the list of text fragments in the document. - /// </summary> - public MixedCodeDocumentFragmentList TextFragments - { - get - { - return _textfragments; - } - } - - /// <summary> - /// Gets the list of all fragments in the document. - /// </summary> - public MixedCodeDocumentFragmentList Fragments - { - get - { - return _fragments; - } - } - - /// <summary> - /// Saves the mixed document to the specified stream. - /// </summary> - /// <param name="outStream">The stream to which you want to save.</param> - public void Save(Stream outStream) - { - StreamWriter sw = new StreamWriter(outStream, GetOutEncoding()); - Save(sw); - } - - /// <summary> - /// Saves the mixed document to the specified stream. - /// </summary> - /// <param name="outStream">The stream to which you want to save.</param> - /// <param name="encoding">The character encoding to use.</param> - public void Save(Stream outStream, System.Text.Encoding encoding) - { - StreamWriter sw = new StreamWriter(outStream, encoding); - Save(sw); - } - - /// <summary> - /// Saves the mixed document to the specified file. - /// </summary> - /// <param name="filename">The location of the file where you want to save the document.</param> - public void Save(string filename) - { - StreamWriter sw = new StreamWriter(filename, false, GetOutEncoding()); - Save(sw); - } - - /// <summary> - /// Saves the mixed document to the specified file. - /// </summary> - /// <param name="filename">The location of the file where you want to save the document.</param> - /// <param name="encoding">The character encoding to use.</param> - public void Save(string filename, System.Text.Encoding encoding) - { - StreamWriter sw = new StreamWriter(filename, false, encoding); - Save(sw); - } - - /// <summary> - /// Saves the mixed document to the specified StreamWriter. - /// </summary> - /// <param name="writer">The StreamWriter to which you want to save.</param> - public void Save(StreamWriter writer) - { - Save((TextWriter)writer); - } - - /// <summary> - /// Saves the mixed document to the specified TextWriter. - /// </summary> - /// <param name="writer">The TextWriter to which you want to save.</param> - public void Save(TextWriter writer) - { - - writer.Flush(); - } - - /// <summary> - /// Gets the code represented by the mixed code document seen as a template. - /// </summary> - public string Code - { - get - { - string s = ""; - int i = 0; - foreach(MixedCodeDocumentFragment frag in _fragments) - { - switch(frag._type) - { - case MixedCodeDocumentFragmentType.Text: - s += TokenResponseWrite + string.Format(TokenTextBlock, i) + "\n"; - i++; - break; - - case MixedCodeDocumentFragmentType.Code: - s += ((MixedCodeDocumentCodeFragment)frag).Code + "\n"; - break; - } - } - return s; - } - } - - /// <summary> - /// Create a text fragment instances. - /// </summary> - /// <returns>The newly created text fragment instance.</returns> - public MixedCodeDocumentTextFragment CreateTextFragment() - { - return (MixedCodeDocumentTextFragment)CreateFragment(MixedCodeDocumentFragmentType.Text); - } - - /// <summary> - /// Create a code fragment instances. - /// </summary> - /// <returns>The newly created code fragment instance.</returns> - public MixedCodeDocumentCodeFragment CreateCodeFragment() - { - return (MixedCodeDocumentCodeFragment)CreateFragment(MixedCodeDocumentFragmentType.Code); - } - - internal MixedCodeDocumentFragment CreateFragment(MixedCodeDocumentFragmentType type) - { - switch(type) - { - case MixedCodeDocumentFragmentType.Text: - return new MixedCodeDocumentTextFragment(this); - - case MixedCodeDocumentFragmentType.Code: - return new MixedCodeDocumentCodeFragment(this); - - default: - throw new NotSupportedException(); - } - } - - private void SetPosition() - { - _currentfragment._line = _line; - _currentfragment._lineposition = _lineposition; - _currentfragment._index = _index - 1; - _currentfragment._length = 0; - } - - private void IncrementPosition() - { - _index++; - if (_c == 10) - { - _lineposition = 1; - _line++; - } - else - _lineposition++; - } - - private enum ParseState - { - Text, - Code - } - - private void Parse() - { - _state = ParseState.Text; - _index = 0; - _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Text); - - while (_index<_text.Length) - { - _c = _text[_index]; - IncrementPosition(); - - switch(_state) - { - case ParseState.Text: - if (_index+TokenCodeStart.Length<_text.Length) - { - if (_text.Substring(_index-1, TokenCodeStart.Length) == TokenCodeStart) - { - _state = ParseState.Code; - _currentfragment._length = _index -1 - _currentfragment._index; - _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Code); - SetPosition(); - continue; - } - } - break; - - case ParseState.Code: - if (_index+TokenCodeEnd.Length<_text.Length) - { - if (_text.Substring(_index-1, TokenCodeEnd.Length) == TokenCodeEnd) - { - _state = ParseState.Text; - _currentfragment._length = _index + TokenCodeEnd.Length - _currentfragment._index; - _index += TokenCodeEnd.Length; - _lineposition += TokenCodeEnd.Length; - _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Text); - SetPosition(); - continue; - } - } - break; - } - } - - _currentfragment._length = _index - _currentfragment._index; - } - - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; +using System.Text; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. + /// </summary> + public class MixedCodeDocument + { + private System.Text.Encoding _streamencoding = null; + internal string _text; + internal MixedCodeDocumentFragmentList _fragments; + internal MixedCodeDocumentFragmentList _codefragments; + internal MixedCodeDocumentFragmentList _textfragments; + private ParseState _state; + private int _index; + private int _c; + private int _line; + private int _lineposition; + private MixedCodeDocumentFragment _currentfragment; + + /// <summary> + /// Gets or sets the token representing code start. + /// </summary> + public string TokenCodeStart = "<%"; + + /// <summary> + /// Gets or sets the token representing code end. + /// </summary> + public string TokenCodeEnd = "%>"; + + /// <summary> + /// Gets or sets the token representing code directive. + /// </summary> + public string TokenDirective = "@"; + + /// <summary> + /// Gets or sets the token representing response write directive. + /// </summary> + public string TokenResponseWrite = "Response.Write "; + + + private string TokenTextBlock = "TextBlock({0})"; + + /// <summary> + /// Creates a mixed code document instance. + /// </summary> + public MixedCodeDocument() + { + _codefragments = new MixedCodeDocumentFragmentList(this); + _textfragments = new MixedCodeDocumentFragmentList(this); + _fragments = new MixedCodeDocumentFragmentList(this); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + public void Load(Stream stream) + { + Load(new StreamReader(stream)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(Stream stream, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Load(Stream stream, Encoding encoding) + { + Load(new StreamReader(stream, encoding)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks, buffersize)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + public void Load(string path) + { + Load(new StreamReader(path)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(path, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Load(string path, Encoding encoding) + { + Load(new StreamReader(path, encoding)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(path, encoding, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + Load(new StreamReader(path, encoding, detectEncodingFromByteOrderMarks, buffersize)); + } + + /// <summary> + /// Loads a mixed document from a text + /// </summary> + /// <param name="html">The text to load.</param> + public void LoadHtml(string html) + { + Load(new StringReader(html)); + } + + /// <summary> + /// Loads the mixed code document from the specified TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML data into the document.</param> + public void Load(TextReader reader) + { + _codefragments.Clear(); + _textfragments.Clear(); + + // all pseudo constructors get down to this one + StreamReader sr = reader as StreamReader; + if (sr != null) + { + _streamencoding = sr.CurrentEncoding; + } + + _text = reader.ReadToEnd(); + reader.Close(); + Parse(); + } + + internal System.Text.Encoding GetOutEncoding() + { + if (_streamencoding != null) + return _streamencoding; + return System.Text.Encoding.Default; + } + + /// <summary> + /// Gets the encoding of the stream used to read the document. + /// </summary> + public System.Text.Encoding StreamEncoding + { + get + { + return _streamencoding; + } + } + + /// <summary> + /// Gets the list of code fragments in the document. + /// </summary> + public MixedCodeDocumentFragmentList CodeFragments + { + get + { + return _codefragments; + } + } + + /// <summary> + /// Gets the list of text fragments in the document. + /// </summary> + public MixedCodeDocumentFragmentList TextFragments + { + get + { + return _textfragments; + } + } + + /// <summary> + /// Gets the list of all fragments in the document. + /// </summary> + public MixedCodeDocumentFragmentList Fragments + { + get + { + return _fragments; + } + } + + /// <summary> + /// Saves the mixed document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save.</param> + public void Save(Stream outStream) + { + StreamWriter sw = new StreamWriter(outStream, GetOutEncoding()); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Save(Stream outStream, System.Text.Encoding encoding) + { + StreamWriter sw = new StreamWriter(outStream, encoding); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document.</param> + public void Save(string filename) + { + StreamWriter sw = new StreamWriter(filename, false, GetOutEncoding()); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Save(string filename, System.Text.Encoding encoding) + { + StreamWriter sw = new StreamWriter(filename, false, encoding); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified StreamWriter. + /// </summary> + /// <param name="writer">The StreamWriter to which you want to save.</param> + public void Save(StreamWriter writer) + { + Save((TextWriter)writer); + } + + /// <summary> + /// Saves the mixed document to the specified TextWriter. + /// </summary> + /// <param name="writer">The TextWriter to which you want to save.</param> + public void Save(TextWriter writer) + { + + writer.Flush(); + } + + /// <summary> + /// Gets the code represented by the mixed code document seen as a template. + /// </summary> + public string Code + { + get + { + string s = ""; + int i = 0; + foreach(MixedCodeDocumentFragment frag in _fragments) + { + switch(frag._type) + { + case MixedCodeDocumentFragmentType.Text: + s += TokenResponseWrite + string.Format(TokenTextBlock, i) + "\n"; + i++; + break; + + case MixedCodeDocumentFragmentType.Code: + s += ((MixedCodeDocumentCodeFragment)frag).Code + "\n"; + break; + } + } + return s; + } + } + + /// <summary> + /// Create a text fragment instances. + /// </summary> + /// <returns>The newly created text fragment instance.</returns> + public MixedCodeDocumentTextFragment CreateTextFragment() + { + return (MixedCodeDocumentTextFragment)CreateFragment(MixedCodeDocumentFragmentType.Text); + } + + /// <summary> + /// Create a code fragment instances. + /// </summary> + /// <returns>The newly created code fragment instance.</returns> + public MixedCodeDocumentCodeFragment CreateCodeFragment() + { + return (MixedCodeDocumentCodeFragment)CreateFragment(MixedCodeDocumentFragmentType.Code); + } + + internal MixedCodeDocumentFragment CreateFragment(MixedCodeDocumentFragmentType type) + { + switch(type) + { + case MixedCodeDocumentFragmentType.Text: + return new MixedCodeDocumentTextFragment(this); + + case MixedCodeDocumentFragmentType.Code: + return new MixedCodeDocumentCodeFragment(this); + + default: + throw new NotSupportedException(); + } + } + + private void SetPosition() + { + _currentfragment._line = _line; + _currentfragment._lineposition = _lineposition; + _currentfragment._index = _index - 1; + _currentfragment._length = 0; + } + + private void IncrementPosition() + { + _index++; + if (_c == 10) + { + _lineposition = 1; + _line++; + } + else + _lineposition++; + } + + private enum ParseState + { + Text, + Code + } + + private void Parse() + { + _state = ParseState.Text; + _index = 0; + _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Text); + + while (_index<_text.Length) + { + _c = _text[_index]; + IncrementPosition(); + + switch(_state) + { + case ParseState.Text: + if (_index+TokenCodeStart.Length<_text.Length) + { + if (_text.Substring(_index-1, TokenCodeStart.Length) == TokenCodeStart) + { + _state = ParseState.Code; + _currentfragment._length = _index -1 - _currentfragment._index; + _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Code); + SetPosition(); + continue; + } + } + break; + + case ParseState.Code: + if (_index+TokenCodeEnd.Length<_text.Length) + { + if (_text.Substring(_index-1, TokenCodeEnd.Length) == TokenCodeEnd) + { + _state = ParseState.Text; + _currentfragment._length = _index + TokenCodeEnd.Length - _currentfragment._index; + _index += TokenCodeEnd.Length; + _lineposition += TokenCodeEnd.Length; + _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Text); + SetPosition(); + continue; + } + } + break; + } + } + + _currentfragment._length = _index - _currentfragment._index; + } + + } +} diff --git a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs index 6c9d252..984574c 100644 --- a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs +++ b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs @@ -1,43 +1,43 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents a fragment of code in a mixed code document. - /// </summary> - public class MixedCodeDocumentCodeFragment : MixedCodeDocumentFragment - { - internal string _code; - - internal MixedCodeDocumentCodeFragment(MixedCodeDocument doc) - : - base(doc, MixedCodeDocumentFragmentType.Code) - { - } - - /// <summary> - /// Gets the fragment code text. - /// </summary> - public string Code - { - get - { - if (_code == null) - { - _code = FragmentText.Substring(_doc.TokenCodeStart.Length, - FragmentText.Length - _doc.TokenCodeEnd.Length - _doc.TokenCodeStart.Length - 1).Trim(); - if (_code.StartsWith("=")) - { - _code = _doc.TokenResponseWrite + _code.Substring(1, _code.Length - 1); - } - } - return _code; - } - set - { - _code = value; - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a fragment of code in a mixed code document. + /// </summary> + public class MixedCodeDocumentCodeFragment : MixedCodeDocumentFragment + { + internal string _code; + + internal MixedCodeDocumentCodeFragment(MixedCodeDocument doc) + : + base(doc, MixedCodeDocumentFragmentType.Code) + { + } + + /// <summary> + /// Gets the fragment code text. + /// </summary> + public string Code + { + get + { + if (_code == null) + { + _code = FragmentText.Substring(_doc.TokenCodeStart.Length, + FragmentText.Length - _doc.TokenCodeEnd.Length - _doc.TokenCodeStart.Length - 1).Trim(); + if (_code.StartsWith("=")) + { + _code = _doc.TokenResponseWrite + _code.Substring(1, _code.Length - 1); + } + } + return _code; + } + set + { + _code = value; + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs index 847d929..7a9fc60 100644 --- a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs +++ b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs @@ -1,95 +1,95 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents a base class for fragments in a mixed code document. - /// </summary> - public abstract class MixedCodeDocumentFragment - { - internal MixedCodeDocumentFragmentType _type; - internal MixedCodeDocument _doc; - internal int _index; - internal int _length; - internal int _line; - internal int _lineposition; - internal string _fragmenttext; - - internal MixedCodeDocumentFragment(MixedCodeDocument doc, MixedCodeDocumentFragmentType type) - { - _doc = doc; - _type = type; - switch (type) - { - case MixedCodeDocumentFragmentType.Text: - _doc._textfragments.Append(this); - break; - - case MixedCodeDocumentFragmentType.Code: - _doc._codefragments.Append(this); - break; - } - _doc._fragments.Append(this); - } - - /// <summary> - /// Gets the type of fragment. - /// </summary> - public MixedCodeDocumentFragmentType FragmentType - { - get - { - return _type; - } - } - - /// <summary> - /// Gets the fragment position in the document's stream. - /// </summary> - public int StreamPosition - { - get - { - return _index; - } - } - - /// <summary> - /// Gets the line number of the fragment. - /// </summary> - public int Line - { - get - { - return _line; - } - } - - /// <summary> - /// Gets the line position (column) of the fragment. - /// </summary> - public int LinePosition - { - get - { - return _lineposition; - } - } - - /// <summary> - /// Gets the fragement text. - /// </summary> - public string FragmentText - { - get - { - if (_fragmenttext == null) - { - _fragmenttext = _doc._text.Substring(_index, _length); - } - return _fragmenttext; - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a base class for fragments in a mixed code document. + /// </summary> + public abstract class MixedCodeDocumentFragment + { + internal MixedCodeDocumentFragmentType _type; + internal MixedCodeDocument _doc; + internal int _index; + internal int _length; + internal int _line; + internal int _lineposition; + internal string _fragmenttext; + + internal MixedCodeDocumentFragment(MixedCodeDocument doc, MixedCodeDocumentFragmentType type) + { + _doc = doc; + _type = type; + switch (type) + { + case MixedCodeDocumentFragmentType.Text: + _doc._textfragments.Append(this); + break; + + case MixedCodeDocumentFragmentType.Code: + _doc._codefragments.Append(this); + break; + } + _doc._fragments.Append(this); + } + + /// <summary> + /// Gets the type of fragment. + /// </summary> + public MixedCodeDocumentFragmentType FragmentType + { + get + { + return _type; + } + } + + /// <summary> + /// Gets the fragment position in the document's stream. + /// </summary> + public int StreamPosition + { + get + { + return _index; + } + } + + /// <summary> + /// Gets the line number of the fragment. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the line position (column) of the fragment. + /// </summary> + public int LinePosition + { + get + { + return _lineposition; + } + } + + /// <summary> + /// Gets the fragement text. + /// </summary> + public string FragmentText + { + get + { + if (_fragmenttext == null) + { + _fragmenttext = _doc._text.Substring(_index, _length); + } + return _fragmenttext; + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs index f847394..75d5075 100644 --- a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs +++ b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs @@ -1,196 +1,196 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents a list of mixed code fragments. - /// </summary> - public class MixedCodeDocumentFragmentList : IEnumerable - { - private MixedCodeDocument _doc; - private ArrayList _items = new ArrayList(); - - internal MixedCodeDocumentFragmentList(MixedCodeDocument doc) - { - _doc = doc; - } - - /// <summary> - /// Appends a fragment to the list of fragments. - /// </summary> - /// <param name="newFragment">The fragment to append. May not be null.</param> - public void Append(MixedCodeDocumentFragment newFragment) - { - if (newFragment == null) - { - throw new ArgumentNullException("newFragment"); - } - _items.Add(newFragment); - } - - /// <summary> - /// Prepends a fragment to the list of fragments. - /// </summary> - /// <param name="newFragment">The fragment to append. May not be null.</param> - public void Prepend(MixedCodeDocumentFragment newFragment) - { - if (newFragment == null) - { - throw new ArgumentNullException("newFragment"); - } - _items.Insert(0, newFragment); - } - - /// <summary> - /// Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. - /// </summary> - /// <param name="fragment">The fragment to remove. May not be null.</param> - public void Remove(MixedCodeDocumentFragment fragment) - { - if (fragment == null) - { - throw new ArgumentNullException("fragment"); - } - int index = GetFragmentIndex(fragment); - if (index == -1) - { - throw new IndexOutOfRangeException(); - } - RemoveAt(index); - } - - /// <summary> - /// Remove a fragment from the list of fragments, using its index in the list. - /// </summary> - /// <param name="index">The index of the fragment to remove.</param> - public void RemoveAt(int index) - { - MixedCodeDocumentFragment frag = (MixedCodeDocumentFragment)_items[index]; - _items.RemoveAt(index); - } - - /// <summary> - /// Remove all fragments from the list. - /// </summary> - public void RemoveAll() - { - _items.Clear(); - } - - /// <summary> - /// Gets the number of fragments contained in the list. - /// </summary> - public int Count - { - get - { - return _items.Count; - } - } - - internal int GetFragmentIndex(MixedCodeDocumentFragment fragment) - { - if (fragment == null) - { - throw new ArgumentNullException("fragment"); - } - for (int i = 0; i < _items.Count; i++) - { - if (((MixedCodeDocumentFragment)_items[i]) == fragment) - { - return i; - } - } - return -1; - } - - /// <summary> - /// Gets a fragment from the list using its index. - /// </summary> - public MixedCodeDocumentFragment this[int index] - { - get - { - return _items[index] as MixedCodeDocumentFragment; - } - } - - internal void Clear() - { - _items.Clear(); - } - - /// <summary> - /// Gets an enumerator that can iterate through the fragment list. - /// </summary> - public MixedCodeDocumentFragmentEnumerator GetEnumerator() - { - return new MixedCodeDocumentFragmentEnumerator(_items); - } - - /// <summary> - /// Gets an enumerator that can iterate through the fragment list. - /// </summary> - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - /// <summary> - /// Represents a fragment enumerator. - /// </summary> - public class MixedCodeDocumentFragmentEnumerator : IEnumerator - { - int _index; - ArrayList _items; - - internal MixedCodeDocumentFragmentEnumerator(ArrayList items) - { - _items = items; - _index = -1; - } - - /// <summary> - /// Sets the enumerator to its initial position, which is before the first element in the collection. - /// </summary> - public void Reset() - { - _index = -1; - } - - /// <summary> - /// Advances the enumerator to the next element of the collection. - /// </summary> - /// <returns>true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.</returns> - public bool MoveNext() - { - _index++; - return (_index < _items.Count); - } - - /// <summary> - /// Gets the current element in the collection. - /// </summary> - public MixedCodeDocumentFragment Current - { - get - { - return (MixedCodeDocumentFragment)(_items[_index]); - } - } - - /// <summary> - /// Gets the current element in the collection. - /// </summary> - object IEnumerator.Current - { - get - { - return (Current); - } - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a list of mixed code fragments. + /// </summary> + public class MixedCodeDocumentFragmentList : IEnumerable + { + private MixedCodeDocument _doc; + private ArrayList _items = new ArrayList(); + + internal MixedCodeDocumentFragmentList(MixedCodeDocument doc) + { + _doc = doc; + } + + /// <summary> + /// Appends a fragment to the list of fragments. + /// </summary> + /// <param name="newFragment">The fragment to append. May not be null.</param> + public void Append(MixedCodeDocumentFragment newFragment) + { + if (newFragment == null) + { + throw new ArgumentNullException("newFragment"); + } + _items.Add(newFragment); + } + + /// <summary> + /// Prepends a fragment to the list of fragments. + /// </summary> + /// <param name="newFragment">The fragment to append. May not be null.</param> + public void Prepend(MixedCodeDocumentFragment newFragment) + { + if (newFragment == null) + { + throw new ArgumentNullException("newFragment"); + } + _items.Insert(0, newFragment); + } + + /// <summary> + /// Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. + /// </summary> + /// <param name="fragment">The fragment to remove. May not be null.</param> + public void Remove(MixedCodeDocumentFragment fragment) + { + if (fragment == null) + { + throw new ArgumentNullException("fragment"); + } + int index = GetFragmentIndex(fragment); + if (index == -1) + { + throw new IndexOutOfRangeException(); + } + RemoveAt(index); + } + + /// <summary> + /// Remove a fragment from the list of fragments, using its index in the list. + /// </summary> + /// <param name="index">The index of the fragment to remove.</param> + public void RemoveAt(int index) + { + MixedCodeDocumentFragment frag = (MixedCodeDocumentFragment)_items[index]; + _items.RemoveAt(index); + } + + /// <summary> + /// Remove all fragments from the list. + /// </summary> + public void RemoveAll() + { + _items.Clear(); + } + + /// <summary> + /// Gets the number of fragments contained in the list. + /// </summary> + public int Count + { + get + { + return _items.Count; + } + } + + internal int GetFragmentIndex(MixedCodeDocumentFragment fragment) + { + if (fragment == null) + { + throw new ArgumentNullException("fragment"); + } + for (int i = 0; i < _items.Count; i++) + { + if (((MixedCodeDocumentFragment)_items[i]) == fragment) + { + return i; + } + } + return -1; + } + + /// <summary> + /// Gets a fragment from the list using its index. + /// </summary> + public MixedCodeDocumentFragment this[int index] + { + get + { + return _items[index] as MixedCodeDocumentFragment; + } + } + + internal void Clear() + { + _items.Clear(); + } + + /// <summary> + /// Gets an enumerator that can iterate through the fragment list. + /// </summary> + public MixedCodeDocumentFragmentEnumerator GetEnumerator() + { + return new MixedCodeDocumentFragmentEnumerator(_items); + } + + /// <summary> + /// Gets an enumerator that can iterate through the fragment list. + /// </summary> + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// <summary> + /// Represents a fragment enumerator. + /// </summary> + public class MixedCodeDocumentFragmentEnumerator : IEnumerator + { + int _index; + ArrayList _items; + + internal MixedCodeDocumentFragmentEnumerator(ArrayList items) + { + _items = items; + _index = -1; + } + + /// <summary> + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// </summary> + public void Reset() + { + _index = -1; + } + + /// <summary> + /// Advances the enumerator to the next element of the collection. + /// </summary> + /// <returns>true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.</returns> + public bool MoveNext() + { + _index++; + return (_index < _items.Count); + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + public MixedCodeDocumentFragment Current + { + get + { + return (MixedCodeDocumentFragment)(_items[_index]); + } + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + object IEnumerator.Current + { + get + { + return (Current); + } + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs index 90def12..4b266da 100644 --- a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs +++ b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs @@ -1,22 +1,22 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents the type of fragement in a mixed code document. - /// </summary> - public enum MixedCodeDocumentFragmentType - { - /// <summary> - /// The fragment contains code. - /// </summary> - Code, - - /// <summary> - /// The fragment contains text. - /// </summary> - Text, - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents the type of fragement in a mixed code document. + /// </summary> + public enum MixedCodeDocumentFragmentType + { + /// <summary> + /// The fragment contains code. + /// </summary> + Code, + + /// <summary> + /// The fragment contains text. + /// </summary> + Text, + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs index 4b8741b..6d213e1 100644 --- a/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs +++ b/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs @@ -1,32 +1,32 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - /// <summary> - /// Represents a fragment of text in a mixed code document. - /// </summary> - public class MixedCodeDocumentTextFragment : MixedCodeDocumentFragment - { - internal MixedCodeDocumentTextFragment(MixedCodeDocument doc) - : - base(doc, MixedCodeDocumentFragmentType.Text) - { - } - - /// <summary> - /// Gets the fragment text. - /// </summary> - public string Text - { - get - { - return FragmentText; - } - set - { - base._fragmenttext = value; - } - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a fragment of text in a mixed code document. + /// </summary> + public class MixedCodeDocumentTextFragment : MixedCodeDocumentFragment + { + internal MixedCodeDocumentTextFragment(MixedCodeDocument doc) + : + base(doc, MixedCodeDocumentFragmentType.Text) + { + } + + /// <summary> + /// Gets the fragment text. + /// </summary> + public string Text + { + get + { + return FragmentText; + } + set + { + base._fragmenttext = value; + } + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/NameValuePair.cs b/FineUI/lib/HtmlAgilityPack/NameValuePair.cs index 55e0d2e..a5761b7 100644 --- a/FineUI/lib/HtmlAgilityPack/NameValuePair.cs +++ b/FineUI/lib/HtmlAgilityPack/NameValuePair.cs @@ -1,30 +1,30 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; - -namespace HtmlAgilityPack -{ - internal class NameValuePair - { - internal readonly string Name; - internal string Value; - - internal NameValuePair() - { - } - - internal NameValuePair(string name) - : - this() - { - Name = name; - } - - internal NameValuePair(string name, string value) - : - this(name) - { - Value = value; - } - } - -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + internal class NameValuePair + { + internal readonly string Name; + internal string Value; + + internal NameValuePair() + { + } + + internal NameValuePair(string name) + : + this() + { + Name = name; + } + + internal NameValuePair(string name, string value) + : + this(name) + { + Value = value; + } + } + +} diff --git a/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs b/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs index 1b5d113..8e45623 100644 --- a/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs +++ b/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs @@ -1,89 +1,89 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.Collections; - -namespace HtmlAgilityPack -{ - internal class NameValuePairList - { - internal readonly string Text; - private ArrayList _allPairs; - private Hashtable _pairsWithName; - - internal NameValuePairList(): - this(null) - { - } - - internal NameValuePairList(string text) - { - Text = text; - _allPairs = new ArrayList(); - _pairsWithName = new Hashtable(); - - Parse(text); - } - - internal string GetNameValuePairValue(string name) - { - if (name==null) - throw new ArgumentNullException(); - ArrayList al = GetNameValuePairs(name); - if (al==null) - return null; - - // return first item - NameValuePair nvp = al[0] as NameValuePair; - return nvp.Value; - } - - internal ArrayList GetNameValuePairs(string name) - { - if (name==null) - return _allPairs; - return _pairsWithName[name] as ArrayList; - } - - private void Parse(string text) - { - _allPairs.Clear(); - _pairsWithName.Clear(); - if (text==null) - return; - - string[] p = text.Split(';'); - if (p==null) - return; - foreach(string pv in p) - { - if (pv.Length==0) - continue; - string[] onep = pv.Split(new char[]{'='}, 2); - if (onep==null) - continue; - NameValuePair nvp = new NameValuePair(onep[0].Trim().ToLower()); - if (onep.Length<2) - nvp.Value = ""; - else - nvp.Value = onep[1]; - - _allPairs.Add(nvp); - - // index by name - ArrayList al = _pairsWithName[nvp.Name] as ArrayList; - if (al==null) - { - al = new ArrayList(); - _pairsWithName[nvp.Name] = al; - } - al.Add(nvp); - } - } - - internal static string GetNameValuePairsValue(string text, string name) - { - NameValuePairList l = new NameValuePairList(text); - return l.GetNameValuePairValue(name); - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + internal class NameValuePairList + { + internal readonly string Text; + private ArrayList _allPairs; + private Hashtable _pairsWithName; + + internal NameValuePairList(): + this(null) + { + } + + internal NameValuePairList(string text) + { + Text = text; + _allPairs = new ArrayList(); + _pairsWithName = new Hashtable(); + + Parse(text); + } + + internal string GetNameValuePairValue(string name) + { + if (name==null) + throw new ArgumentNullException(); + ArrayList al = GetNameValuePairs(name); + if (al==null) + return null; + + // return first item + NameValuePair nvp = al[0] as NameValuePair; + return nvp.Value; + } + + internal ArrayList GetNameValuePairs(string name) + { + if (name==null) + return _allPairs; + return _pairsWithName[name] as ArrayList; + } + + private void Parse(string text) + { + _allPairs.Clear(); + _pairsWithName.Clear(); + if (text==null) + return; + + string[] p = text.Split(';'); + if (p==null) + return; + foreach(string pv in p) + { + if (pv.Length==0) + continue; + string[] onep = pv.Split(new char[]{'='}, 2); + if (onep==null) + continue; + NameValuePair nvp = new NameValuePair(onep[0].Trim().ToLower()); + if (onep.Length<2) + nvp.Value = ""; + else + nvp.Value = onep[1]; + + _allPairs.Add(nvp); + + // index by name + ArrayList al = _pairsWithName[nvp.Name] as ArrayList; + if (al==null) + { + al = new ArrayList(); + _pairsWithName[nvp.Name] = al; + } + al.Add(nvp); + } + } + + internal static string GetNameValuePairsValue(string text, string name) + { + NameValuePairList l = new NameValuePairList(text); + return l.GetNameValuePairValue(name); + } + } +} diff --git a/FineUI/lib/HtmlAgilityPack/crc32.cs b/FineUI/lib/HtmlAgilityPack/crc32.cs index 5241e96..4b4624f 100644 --- a/FineUI/lib/HtmlAgilityPack/crc32.cs +++ b/FineUI/lib/HtmlAgilityPack/crc32.cs @@ -1,140 +1,140 @@ -// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> -using System; -using System.IO; - -namespace HtmlAgilityPack -{ - /// <summary> - /// A utility class to compute CRC32. - /// </summary> - public class Crc32 - { - private uint _crc32 = 0; - static private uint[] crc_32_tab = // CRC polynomial 0xedb88320 - { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d - }; - - static private uint UPDC32(byte octet, uint crc) - { - return (crc_32_tab[((crc)^((byte)octet)) & 0xff] ^ ((crc) >> 8)); - } - - internal uint CheckSum - { - get - { - return _crc32; - } - set - { - _crc32 = value; - } - } - - internal uint AddToCRC32(int c) - { - return AddToCRC32((ushort)c); - } - - internal uint AddToCRC32(ushort c) - { - byte lowByte, hiByte; - lowByte = (byte)(c & 0x00ff); - hiByte = (byte)(c >> 8); - _crc32 = UPDC32(hiByte, _crc32); - _crc32 = UPDC32(lowByte, _crc32); - return ~_crc32; - } - - /// <summary> - /// Compute a checksum for a given string. - /// </summary> - /// <param name="text">The string to compute the checksum for.</param> - /// <returns>The computed checksum.</returns> - static public uint CRC32String(string text) - { - uint oldcrc32; - oldcrc32 = 0xFFFFFFFF; - int len = text.Length; - ushort uCharVal; - byte lowByte, hiByte; - - for ( int i=0; len>0; i++) - { - --len; - uCharVal = text[len]; - unchecked - { - lowByte = (byte)(uCharVal & 0x00ff); - hiByte = (byte)(uCharVal >> 8); - } - oldcrc32 = UPDC32(hiByte, oldcrc32); - oldcrc32 = UPDC32(lowByte, oldcrc32); - } - - return ~oldcrc32; - } - - /// <summary> - /// Compute a checksum for a given array of bytes. - /// </summary> - /// <param name="bytes">The array of bytes to compute the checksum for.</param> - /// <returns>The computed checksum.</returns> - static public uint CRC32Bytes(byte[] bytes) - { - uint oldcrc32; - oldcrc32 = 0xFFFFFFFF; - int len = bytes.Length; - - for ( int i=0; len>0; i++) - { - --len; - oldcrc32 = UPDC32(bytes[len], oldcrc32); - } - return ~oldcrc32; - } - } -} +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; + +namespace HtmlAgilityPack +{ + /// <summary> + /// A utility class to compute CRC32. + /// </summary> + public class Crc32 + { + private uint _crc32 = 0; + static private uint[] crc_32_tab = // CRC polynomial 0xedb88320 + { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + }; + + static private uint UPDC32(byte octet, uint crc) + { + return (crc_32_tab[((crc)^((byte)octet)) & 0xff] ^ ((crc) >> 8)); + } + + internal uint CheckSum + { + get + { + return _crc32; + } + set + { + _crc32 = value; + } + } + + internal uint AddToCRC32(int c) + { + return AddToCRC32((ushort)c); + } + + internal uint AddToCRC32(ushort c) + { + byte lowByte, hiByte; + lowByte = (byte)(c & 0x00ff); + hiByte = (byte)(c >> 8); + _crc32 = UPDC32(hiByte, _crc32); + _crc32 = UPDC32(lowByte, _crc32); + return ~_crc32; + } + + /// <summary> + /// Compute a checksum for a given string. + /// </summary> + /// <param name="text">The string to compute the checksum for.</param> + /// <returns>The computed checksum.</returns> + static public uint CRC32String(string text) + { + uint oldcrc32; + oldcrc32 = 0xFFFFFFFF; + int len = text.Length; + ushort uCharVal; + byte lowByte, hiByte; + + for ( int i=0; len>0; i++) + { + --len; + uCharVal = text[len]; + unchecked + { + lowByte = (byte)(uCharVal & 0x00ff); + hiByte = (byte)(uCharVal >> 8); + } + oldcrc32 = UPDC32(hiByte, oldcrc32); + oldcrc32 = UPDC32(lowByte, oldcrc32); + } + + return ~oldcrc32; + } + + /// <summary> + /// Compute a checksum for a given array of bytes. + /// </summary> + /// <param name="bytes">The array of bytes to compute the checksum for.</param> + /// <returns>The computed checksum.</returns> + static public uint CRC32Bytes(byte[] bytes) + { + uint oldcrc32; + oldcrc32 = 0xFFFFFFFF; + int len = bytes.Length; + + for ( int i=0; len>0; i++) + { + --len; + oldcrc32 = UPDC32(bytes[len], oldcrc32); + } + return ~oldcrc32; + } + } +} diff --git a/FineUI/lib/JSBeautifyLib/JSBeautify.cs b/FineUI/lib/JSBeautifyLib/JSBeautify.cs index f71163d..6b412bc 100644 --- a/FineUI/lib/JSBeautifyLib/JSBeautify.cs +++ b/FineUI/lib/JSBeautifyLib/JSBeautify.cs @@ -1,971 +1,971 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Collections; -using System.Text.RegularExpressions; - -namespace JSBeautifyLib -{ - /// <summary> - /// JSBeautifyOptions - /// </summary> - public class JSBeautifyOptions - { - /// <summary> - /// indent_size - /// </summary> - public int? indent_size { get; set; } - /// <summary> - /// indent_char - /// </summary> - public char? indent_char { get; set; } - /// <summary> - /// indent_level - /// </summary> - public int? indent_level { get; set; } - /// <summary> - /// preserve_newlines - /// </summary> - public bool? preserve_newlines { get; set; } - } - - /// <summary> - /// JSBeautify - /// </summary> - public class JSBeautify - { - private StringBuilder output; - private string indent_string; - private int indent_level; - private string token_text; - private Stack<string> modes; - private string current_mode; - private int opt_indent_size; - private char opt_indent_char; - private int opt_indent_level; - private bool opt_preserve_newlines; - private bool if_line_flag; - private bool do_block_just_closed; - private string input; - - - private void trim_output() - { - while ((output.Length > 0) && ((output[output.Length - 1] == ' ') || (output[output.Length - 1].ToString() == indent_string))) - { - output.Remove(output.Length - 1, 1); - } - } - - private void print_newline(bool? ignore_repeated) - { - ignore_repeated = ignore_repeated ?? true; - - if_line_flag = false; - trim_output(); - - if (output.Length == 0) - return; - - if ((output[output.Length - 1] != '\n') || !ignore_repeated.Value) - { - output.Append(Environment.NewLine); - } - - for (var i = 0; i < indent_level; i++) - { - output.Append(indent_string); - } - } - - private void print_space() - { - var last_output = " "; - if (output.Length > 0) - last_output = output[output.Length - 1].ToString(); - if ((last_output != " ") && (last_output != "\n") && (last_output != indent_string)) - { - output.Append(' '); - } - } - - - private void print_token() - { - output.Append(token_text); - } - - private void indent() - { - indent_level++; - } - - private void unindent() - { - if (indent_level > 0) - indent_level--; - } - - private void remove_indent() - { - if ((output.Length > 0) && (output[output.Length - 1].ToString() == indent_string)) - { - output.Remove(output.Length - 1, 1); - } - } - - private void set_mode(string mode) - { - modes.Push(current_mode); - current_mode = mode; - } - - private void restore_mode() - { - do_block_just_closed = (current_mode == "DO_BLOCK"); - current_mode = modes.Pop(); - } - - private bool in_array(object what, ArrayList arr) - { - return arr.Contains(what); - - } - - private bool is_ternary_op() - { - int level = 0; - int colon_count = 0; - for (var i = output.Length - 1; i >= 0; i--) - { - switch (output[i]) - { - case ':': - if (level == 0) - colon_count++; - break; - case '?': - if (level == 0) - { - if (colon_count == 0) - { - return true; - } - else - { - colon_count--; - } - } - break; - case '{': - if (level == 0) return false; - level--; - break; - case '(': - case '[': - level--; - break; - case ')': - case ']': - case '}': - level++; - break; - } - } - return false; - } - - private string whitespace; - private string wordchar; - private int parser_pos; - private string last_type; - private string last_text; - private string digits; - private string[] punct; - private string prefix; - private string[] get_next_token(ref int parser_pos) - { - var n_newlines = 0; - - if (parser_pos >= input.Length) - { - return new string[] { "", "TK_EOF" }; - } - - string c = input[parser_pos].ToString(); - parser_pos++; - - while (whitespace.Contains(c)) - { - if (parser_pos >= input.Length) - { - return new string[] { "", "TK_EOF" }; - } - - if (c == "\n") - n_newlines++; - - c = input[parser_pos].ToString(); - parser_pos++; - } - - var wanted_newline = false; - - if (opt_preserve_newlines) - { - if (n_newlines > 1) - { - for (var i = 0; i < 2; i++) - { - print_newline(i == 0); - } - } - wanted_newline = (n_newlines == 1); - - } - - if (wordchar.Contains(c)) - { - if (parser_pos < input.Length) - { - while (wordchar.Contains(input[parser_pos].ToString())) - { - c += input[parser_pos]; - parser_pos++; - if (parser_pos == input.Length) - break; - } - } - - - if ((parser_pos != input.Length) && (Regex.IsMatch(c, "^[0-9]+[Ee]$")) && ((input[parser_pos] == '-') || (input[parser_pos] == '+'))) - { - var sign = input[parser_pos]; - parser_pos++; - - var t = get_next_token(ref parser_pos); - c += sign + t[0]; - return new string[] { c, "TK_WORD" }; - } - - if (c == "in") - { - return new string[] { c, "TK_OPERATOR" }; - } - - if (wanted_newline && last_type != "TK_OPERATOR" && !if_line_flag) - { - print_newline(null); - } - return new string[] { c, "TK_WORD" }; - - } - - if ((c == "(") || (c == "[")) - return new string[] { c, "TK_START_EXPR" }; - - if (c == ")" || c == "]") - { - return new string[] { c, "TK_END_EXPR" }; - } - - if (c == "{") - { - return new string[] { c, "TK_START_BLOCK" }; - } - - if (c == "}") - { - return new string[] { c, "TK_END_BLOCK" }; - } - - if (c == ";") - { - return new string[] { c, "TK_SEMICOLON" }; - } - - if (c == "/") - { - var comment = ""; - if (input[parser_pos] == '*') - { - parser_pos++; - if (parser_pos < input.Length) - { - while (!((input[parser_pos] == '*') && (input[parser_pos + 1] > '\0') && (input[parser_pos + 1] == '/') && (parser_pos < input.Length))) - { - comment += input[parser_pos]; - parser_pos++; - if (parser_pos >= input.Length) - { - break; - } - } - } - - parser_pos += 2; - return new string[] { "/*" + comment + "*/", "TK_BLOCK_COMMENT" }; - } - - if (input[parser_pos] == '/') - { - comment = c; - while ((input[parser_pos] != '\x0d') && (input[parser_pos] != '\x0a')) - { - comment += input[parser_pos]; - parser_pos++; - if (parser_pos >= input.Length) - { - break; - } - } - - parser_pos++; - if (wanted_newline) - { - print_newline(null); - } - return new string[] { comment, "TK_COMMENT" }; - - } - } - - if ((c == "'") || (c == "\"") || ((c == "/") - && ((last_type == "TK_WORD" && last_text == "return") || ((last_type == "TK_START_EXPR") || (last_type == "TK_START_BLOCK") || (last_type == "TK_END_BLOCK") - || (last_type == "TK_OPERATOR") || (last_type == "TK_EOF") || (last_type == "TK_SEMICOLON")))) - ) - { - var sep = c; - var esc = false; - var resulting_string = c; - - if (parser_pos < input.Length) - { - if (sep == "/") - { - var in_char_class = false; - while ((esc) || (in_char_class) || (input[parser_pos].ToString() != sep)) - { - resulting_string += input[parser_pos]; - if (!esc) - { - esc = input[parser_pos] == '\\'; - if (input[parser_pos] == '[') - { - in_char_class = true; - } - else if (input[parser_pos] == ']') - { - in_char_class = false; - } - } - else - { - esc = false; - } - parser_pos++; - if (parser_pos >= input.Length) - { - return new string[] { resulting_string, "TK_STRING" }; - } - } - } - else - { - while ((esc) || (input[parser_pos].ToString() != sep)) - { - resulting_string += input[parser_pos]; - if (!esc) - { - esc = input[parser_pos] == '\\'; - } - else - { - esc = false; - } - parser_pos++; - if (parser_pos >= input.Length) - { - return new string[] { resulting_string, "TK_STRING" }; - } - } - } - } - - parser_pos += 1; - - resulting_string += sep; - - if (sep == "/") - { - // regexps may have modifiers /regexp/MOD , so fetch those, too - while ((parser_pos < input.Length) && (wordchar.Contains(input[parser_pos].ToString()))) - { - resulting_string += input[parser_pos]; - parser_pos += 1; - } - } - return new string[] { resulting_string, "TK_STRING" }; - - - } - - if (c == "#") - { - var sharp = "#"; - if ((parser_pos < input.Length) && (digits.Contains(input[parser_pos].ToString()))) - { - do - { - c = input[parser_pos].ToString(); - sharp += c; - parser_pos += 1; - } while ((parser_pos < input.Length) && (c != "#") && (c != "=")); - if (c == "#") - { - return new string[] { sharp, "TK_WORD" }; ; - } - else - { - return new string[] { sharp, "TK_OPERATOR" }; ; - } - } - } - - - if ((c == "<") && (input.Substring(parser_pos - 1, 3) == "<!--")) - { - parser_pos += 3; - return new string[] { "<!--", "TK_COMMENT" }; ; - } - - if ((c == "-") && (input.Substring(parser_pos - 1, 2) == "-->")) - { - parser_pos += 2; - if (wanted_newline) - { - print_newline(null); - } - return new string[] { "-->", "TK_COMMENT" }; - } - - if (((IList<string>)punct).Contains(c)) - { - while ((parser_pos < input.Length) && (((IList<string>)punct).Contains(c + input[parser_pos]))) - { - c += input[parser_pos]; - parser_pos += 1; - if (parser_pos >= input.Length) - { - break; - } - } - - return new string[] { c, "TK_OPERATOR" }; - } - - return new string[] { c, "TK_UNKNOWN" }; - - - } - - private string last_word; - private bool var_line; - private bool var_line_tainted; - private string[] line_starters; - private bool in_case; - private string token_type; - - /// <summary> - /// GetResult - /// </summary> - /// <returns></returns> - public string GetResult() - { - if (add_script_tags) - { - output.AppendLine().AppendLine("</script>"); - } - - return output.ToString(); - } - - private bool add_script_tags; - /// <summary> - /// JSBeautify - /// </summary> - /// <param name="js_source_text"></param> - /// <param name="options"></param> - public JSBeautify(string js_source_text, JSBeautifyOptions options) - { - opt_indent_size = options.indent_size ?? 4; - opt_indent_char = options.indent_char ?? ' '; - opt_indent_level = options.indent_level ?? 0; - opt_preserve_newlines = options.preserve_newlines ?? true; - output = new StringBuilder(); - modes = new Stack<string>(); - - - - indent_string = ""; - - while (opt_indent_size > 0) - { - indent_string += opt_indent_char; - opt_indent_size -= 1; - } - - indent_level = opt_indent_level; - - - - input = js_source_text.Replace("<script type=\"text/javascript\">", "").Replace("</script>", ""); - if (input.Length != js_source_text.Length) - { - output.AppendLine("<script type=\"text/javascript\">"); - add_script_tags = true; - } - - last_word = ""; // last 'TK_WORD' passed - last_type = "TK_START_EXPR"; // last token type - last_text = ""; // last token text - - do_block_just_closed = false; - var_line = false; // currently drawing var .... ; - var_line_tainted = false; // false: var a = 5; true: var a = 5, b = 6 - - whitespace = "\n\r\t "; - wordchar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$"; - digits = "0123456789"; - - // <!-- is a special case (ok, it's a minor hack actually) - punct = "+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! !! , : ? ^ ^= |= ::".Split(' '); - - // words which should always start on new line. - line_starters = "continue,try,throw,return,var,if,switch,case,default,for,while,break,function".Split(','); - - // states showing if we are currently in expression (i.e. "if" case) - 'EXPRESSION', or in usual block (like, procedure), 'BLOCK'. - // some formatting depends on that. - current_mode = "BLOCK"; - modes.Push(current_mode); - - parser_pos = 0; - in_case = false; - - while (true) - { - var t = get_next_token(ref parser_pos); - token_text = t[0]; - token_type = t[1]; - if (token_type == "TK_EOF") - { - break; - } - - switch (token_type) - { - - case "TK_START_EXPR": - var_line = false; - set_mode("EXPRESSION"); - if ((last_text == ";") || (last_type == "TK_START_BLOCK")) - { - print_newline(null); - } - else if ((last_type == "TK_END_EXPR") || (last_type == "TK_START_EXPR")) - { - // do nothing on (( and )( and ][ and ]( .. - } - else if ((last_type != "TK_WORD") && (last_type != "TK_OPERATOR")) - { - print_space(); - } - else if (((IList<string>)line_starters).Contains(last_word)) - { - print_space(); - } - print_token(); - break; - - case "TK_END_EXPR": - print_token(); - restore_mode(); - break; - - case "TK_START_BLOCK": - - if (last_word == "do") - { - set_mode("DO_BLOCK"); - } - else - { - set_mode("BLOCK"); - } - if ((last_type != "TK_OPERATOR") && (last_type != "TK_START_EXPR")) - { - if (last_type == "TK_START_BLOCK") - { - print_newline(null); - } - else - { - print_space(); - } - } - print_token(); - indent(); - break; - - case "TK_END_BLOCK": - if (last_type == "TK_START_BLOCK") - { - // nothing - trim_output(); - unindent(); - } - else - { - unindent(); - print_newline(null); - } - print_token(); - restore_mode(); - break; - - case "TK_WORD": - - if (do_block_just_closed) - { - // do {} ## while () - print_space(); - print_token(); - print_space(); - do_block_just_closed = false; - break; - } - - if ((token_text == "case") || (token_text == "default")) - { - if (last_text == ":") - { - // switch cases following one another - remove_indent(); - } - else - { - // case statement starts in the same line where switch - unindent(); - print_newline(null); - indent(); - } - print_token(); - in_case = true; - break; - } - - prefix = "NONE"; - - if (last_type == "TK_END_BLOCK") - { - if (!(new List<string> { "else", "catch", "finally" }).Contains(token_text.ToLower())) - { - prefix = "NEWLINE"; - } - else - { - prefix = "SPACE"; - print_space(); - } - } - else if ((last_type == "TK_SEMICOLON") && ((current_mode == "BLOCK") || (current_mode == "DO_BLOCK"))) - { - prefix = "NEWLINE"; - } - else if ((last_type == "TK_SEMICOLON") && (current_mode == "EXPRESSION")) - { - prefix = "SPACE"; - } - else if (last_type == "TK_STRING") - { - prefix = "NEWLINE"; - } - else if (last_type == "TK_WORD") - { - prefix = "SPACE"; - } - else if (last_type == "TK_START_BLOCK") - { - prefix = "NEWLINE"; - } - else if (last_type == "TK_END_EXPR") - { - print_space(); - prefix = "NEWLINE"; - } - - if ((last_type != "TK_END_BLOCK") && ((new List<string> { "else", "catch", "finally" }).Contains(token_text.ToLower()))) - { - print_newline(null); - } - else if ((((IList<string>)line_starters).Contains(token_text)) || (prefix == "NEWLINE")) - { - if (last_text == "else") - { - // no need to force newline on else break - print_space(); - } - else if (((last_type == "TK_START_EXPR") || (last_text == "=") || (last_text == ",")) && (token_text == "function")) - { - // no need to force newline on "function": (function - // DONOTHING - } - else if ((last_type == "TK_WORD") && ((last_text == "return") || (last_text == "throw"))) - { - // no newline between "return nnn" - print_space(); - } - else if (last_type != "TK_END_EXPR") - { - if (((last_type != "TK_START_EXPR") || (token_text != "var")) && (last_text != ":")) - { - // no need to force newline on "var": for (var x = 0...) - if ((token_text == "if") && (last_type == "TK_WORD") && (last_word == "else")) - { - // no newline for } else if { - print_space(); - } - else - { - print_newline(null); - } - } - } - else - { - if ((((IList<string>)line_starters).Contains(token_text)) && (last_text != ")")) - { - print_newline(null); - } - } - } - else if (prefix == "SPACE") - { - print_space(); - } - print_token(); - last_word = token_text; - - if (token_text == "var") - { - var_line = true; - var_line_tainted = false; - } - - if (token_text == "if" || token_text == "else") - { - if_line_flag = true; - } - - break; - - case "TK_SEMICOLON": - - print_token(); - var_line = false; - break; - - case "TK_STRING": - - if ((last_type == "TK_START_BLOCK") || (last_type == "TK_END_BLOCK") || (last_type == "TK_SEMICOLON")) - { - print_newline(null); - } - else if (last_type == "TK_WORD") - { - print_space(); - } - print_token(); - break; - - case "TK_OPERATOR": - - var start_delim = true; - var end_delim = true; - if (var_line && (token_text != ",")) - { - var_line_tainted = true; - if (token_text == ":") - { - var_line = false; - } - } - if (var_line && (token_text == ",") && (current_mode == "EXPRESSION")) - { - // do not break on comma, for(var a = 1, b = 2) - var_line_tainted = false; - } - - if (token_text == ":" && in_case) - { - print_token(); // colon really asks for separate treatment - print_newline(null); - in_case = false; - break; - } - - if (token_text == "::") - { - // no spaces around exotic namespacing syntax operator - print_token(); - break; - } - - if (token_text == ",") - { - if (var_line) - { - if (var_line_tainted) - { - print_token(); - print_newline(null); - var_line_tainted = false; - } - else - { - print_token(); - print_space(); - } - } - else if (last_type == "TK_END_BLOCK") - { - print_token(); - print_newline(null); - } - else - { - if (current_mode == "BLOCK") - { - print_token(); - print_newline(null); - } - else - { - // EXPR od DO_BLOCK - print_token(); - print_space(); - } - } - break; - } - else if ((token_text == "--") || (token_text == "++")) - { // unary operators special case - if (last_text == ";") - { - if (current_mode == "BLOCK") - { - // { foo; --i } - print_newline(null); - start_delim = true; - end_delim = false; - } - else - { - // space for (;; ++i) - start_delim = true; - end_delim = false; - } - } - else - { - if (last_text == "{") - { - // {--i - print_newline(null); - } - start_delim = false; - end_delim = false; - } - } - else if (((token_text == "!") || (token_text == "+") || (token_text == "-")) && ((last_text == "return") || (last_text == "case"))) - { - start_delim = true; - end_delim = false; - } - else if (((token_text == "!") || (token_text == "+") || (token_text == "-")) && (last_type == "TK_START_EXPR")) - { - // special case handling: if (!a) - start_delim = false; - end_delim = false; - } - else if (last_type == "TK_OPERATOR") - { - start_delim = false; - end_delim = false; - } - else if (last_type == "TK_END_EXPR") - { - start_delim = true; - end_delim = true; - } - else if (token_text == ".") - { - // decimal digits or object.property - start_delim = false; - end_delim = false; - - } - else if (token_text == ":") - { - if (is_ternary_op()) - { - start_delim = true; - } - else - { - start_delim = false; - } - } - if (start_delim) - { - print_space(); - } - - print_token(); - - if (end_delim) - { - print_space(); - } - break; - - case "TK_BLOCK_COMMENT": - - print_newline(null); - print_token(); - print_newline(null); - break; - - case "TK_COMMENT": - - // print_newline(); - print_space(); - print_token(); - print_newline(null); - break; - - case "TK_UNKNOWN": - print_token(); - break; - } - - last_type = token_type; - last_text = token_text; - } - - - } - - - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; +using System.Text.RegularExpressions; + +namespace JSBeautifyLib +{ + /// <summary> + /// JSBeautifyOptions + /// </summary> + public class JSBeautifyOptions + { + /// <summary> + /// indent_size + /// </summary> + public int? indent_size { get; set; } + /// <summary> + /// indent_char + /// </summary> + public char? indent_char { get; set; } + /// <summary> + /// indent_level + /// </summary> + public int? indent_level { get; set; } + /// <summary> + /// preserve_newlines + /// </summary> + public bool? preserve_newlines { get; set; } + } + + /// <summary> + /// JSBeautify + /// </summary> + public class JSBeautify + { + private StringBuilder output; + private string indent_string; + private int indent_level; + private string token_text; + private Stack<string> modes; + private string current_mode; + private int opt_indent_size; + private char opt_indent_char; + private int opt_indent_level; + private bool opt_preserve_newlines; + private bool if_line_flag; + private bool do_block_just_closed; + private string input; + + + private void trim_output() + { + while ((output.Length > 0) && ((output[output.Length - 1] == ' ') || (output[output.Length - 1].ToString() == indent_string))) + { + output.Remove(output.Length - 1, 1); + } + } + + private void print_newline(bool? ignore_repeated) + { + ignore_repeated = ignore_repeated ?? true; + + if_line_flag = false; + trim_output(); + + if (output.Length == 0) + return; + + if ((output[output.Length - 1] != '\n') || !ignore_repeated.Value) + { + output.Append(Environment.NewLine); + } + + for (var i = 0; i < indent_level; i++) + { + output.Append(indent_string); + } + } + + private void print_space() + { + var last_output = " "; + if (output.Length > 0) + last_output = output[output.Length - 1].ToString(); + if ((last_output != " ") && (last_output != "\n") && (last_output != indent_string)) + { + output.Append(' '); + } + } + + + private void print_token() + { + output.Append(token_text); + } + + private void indent() + { + indent_level++; + } + + private void unindent() + { + if (indent_level > 0) + indent_level--; + } + + private void remove_indent() + { + if ((output.Length > 0) && (output[output.Length - 1].ToString() == indent_string)) + { + output.Remove(output.Length - 1, 1); + } + } + + private void set_mode(string mode) + { + modes.Push(current_mode); + current_mode = mode; + } + + private void restore_mode() + { + do_block_just_closed = (current_mode == "DO_BLOCK"); + current_mode = modes.Pop(); + } + + private bool in_array(object what, ArrayList arr) + { + return arr.Contains(what); + + } + + private bool is_ternary_op() + { + int level = 0; + int colon_count = 0; + for (var i = output.Length - 1; i >= 0; i--) + { + switch (output[i]) + { + case ':': + if (level == 0) + colon_count++; + break; + case '?': + if (level == 0) + { + if (colon_count == 0) + { + return true; + } + else + { + colon_count--; + } + } + break; + case '{': + if (level == 0) return false; + level--; + break; + case '(': + case '[': + level--; + break; + case ')': + case ']': + case '}': + level++; + break; + } + } + return false; + } + + private string whitespace; + private string wordchar; + private int parser_pos; + private string last_type; + private string last_text; + private string digits; + private string[] punct; + private string prefix; + private string[] get_next_token(ref int parser_pos) + { + var n_newlines = 0; + + if (parser_pos >= input.Length) + { + return new string[] { "", "TK_EOF" }; + } + + string c = input[parser_pos].ToString(); + parser_pos++; + + while (whitespace.Contains(c)) + { + if (parser_pos >= input.Length) + { + return new string[] { "", "TK_EOF" }; + } + + if (c == "\n") + n_newlines++; + + c = input[parser_pos].ToString(); + parser_pos++; + } + + var wanted_newline = false; + + if (opt_preserve_newlines) + { + if (n_newlines > 1) + { + for (var i = 0; i < 2; i++) + { + print_newline(i == 0); + } + } + wanted_newline = (n_newlines == 1); + + } + + if (wordchar.Contains(c)) + { + if (parser_pos < input.Length) + { + while (wordchar.Contains(input[parser_pos].ToString())) + { + c += input[parser_pos]; + parser_pos++; + if (parser_pos == input.Length) + break; + } + } + + + if ((parser_pos != input.Length) && (Regex.IsMatch(c, "^[0-9]+[Ee]$")) && ((input[parser_pos] == '-') || (input[parser_pos] == '+'))) + { + var sign = input[parser_pos]; + parser_pos++; + + var t = get_next_token(ref parser_pos); + c += sign + t[0]; + return new string[] { c, "TK_WORD" }; + } + + if (c == "in") + { + return new string[] { c, "TK_OPERATOR" }; + } + + if (wanted_newline && last_type != "TK_OPERATOR" && !if_line_flag) + { + print_newline(null); + } + return new string[] { c, "TK_WORD" }; + + } + + if ((c == "(") || (c == "[")) + return new string[] { c, "TK_START_EXPR" }; + + if (c == ")" || c == "]") + { + return new string[] { c, "TK_END_EXPR" }; + } + + if (c == "{") + { + return new string[] { c, "TK_START_BLOCK" }; + } + + if (c == "}") + { + return new string[] { c, "TK_END_BLOCK" }; + } + + if (c == ";") + { + return new string[] { c, "TK_SEMICOLON" }; + } + + if (c == "/") + { + var comment = ""; + if (input[parser_pos] == '*') + { + parser_pos++; + if (parser_pos < input.Length) + { + while (!((input[parser_pos] == '*') && (input[parser_pos + 1] > '\0') && (input[parser_pos + 1] == '/') && (parser_pos < input.Length))) + { + comment += input[parser_pos]; + parser_pos++; + if (parser_pos >= input.Length) + { + break; + } + } + } + + parser_pos += 2; + return new string[] { "/*" + comment + "*/", "TK_BLOCK_COMMENT" }; + } + + if (input[parser_pos] == '/') + { + comment = c; + while ((input[parser_pos] != '\x0d') && (input[parser_pos] != '\x0a')) + { + comment += input[parser_pos]; + parser_pos++; + if (parser_pos >= input.Length) + { + break; + } + } + + parser_pos++; + if (wanted_newline) + { + print_newline(null); + } + return new string[] { comment, "TK_COMMENT" }; + + } + } + + if ((c == "'") || (c == "\"") || ((c == "/") + && ((last_type == "TK_WORD" && last_text == "return") || ((last_type == "TK_START_EXPR") || (last_type == "TK_START_BLOCK") || (last_type == "TK_END_BLOCK") + || (last_type == "TK_OPERATOR") || (last_type == "TK_EOF") || (last_type == "TK_SEMICOLON")))) + ) + { + var sep = c; + var esc = false; + var resulting_string = c; + + if (parser_pos < input.Length) + { + if (sep == "/") + { + var in_char_class = false; + while ((esc) || (in_char_class) || (input[parser_pos].ToString() != sep)) + { + resulting_string += input[parser_pos]; + if (!esc) + { + esc = input[parser_pos] == '\\'; + if (input[parser_pos] == '[') + { + in_char_class = true; + } + else if (input[parser_pos] == ']') + { + in_char_class = false; + } + } + else + { + esc = false; + } + parser_pos++; + if (parser_pos >= input.Length) + { + return new string[] { resulting_string, "TK_STRING" }; + } + } + } + else + { + while ((esc) || (input[parser_pos].ToString() != sep)) + { + resulting_string += input[parser_pos]; + if (!esc) + { + esc = input[parser_pos] == '\\'; + } + else + { + esc = false; + } + parser_pos++; + if (parser_pos >= input.Length) + { + return new string[] { resulting_string, "TK_STRING" }; + } + } + } + } + + parser_pos += 1; + + resulting_string += sep; + + if (sep == "/") + { + // regexps may have modifiers /regexp/MOD , so fetch those, too + while ((parser_pos < input.Length) && (wordchar.Contains(input[parser_pos].ToString()))) + { + resulting_string += input[parser_pos]; + parser_pos += 1; + } + } + return new string[] { resulting_string, "TK_STRING" }; + + + } + + if (c == "#") + { + var sharp = "#"; + if ((parser_pos < input.Length) && (digits.Contains(input[parser_pos].ToString()))) + { + do + { + c = input[parser_pos].ToString(); + sharp += c; + parser_pos += 1; + } while ((parser_pos < input.Length) && (c != "#") && (c != "=")); + if (c == "#") + { + return new string[] { sharp, "TK_WORD" }; ; + } + else + { + return new string[] { sharp, "TK_OPERATOR" }; ; + } + } + } + + + if ((c == "<") && (input.Substring(parser_pos - 1, 3) == "<!--")) + { + parser_pos += 3; + return new string[] { "<!--", "TK_COMMENT" }; ; + } + + if ((c == "-") && (input.Substring(parser_pos - 1, 2) == "-->")) + { + parser_pos += 2; + if (wanted_newline) + { + print_newline(null); + } + return new string[] { "-->", "TK_COMMENT" }; + } + + if (((IList<string>)punct).Contains(c)) + { + while ((parser_pos < input.Length) && (((IList<string>)punct).Contains(c + input[parser_pos]))) + { + c += input[parser_pos]; + parser_pos += 1; + if (parser_pos >= input.Length) + { + break; + } + } + + return new string[] { c, "TK_OPERATOR" }; + } + + return new string[] { c, "TK_UNKNOWN" }; + + + } + + private string last_word; + private bool var_line; + private bool var_line_tainted; + private string[] line_starters; + private bool in_case; + private string token_type; + + /// <summary> + /// GetResult + /// </summary> + /// <returns></returns> + public string GetResult() + { + if (add_script_tags) + { + output.AppendLine().AppendLine("</script>"); + } + + return output.ToString(); + } + + private bool add_script_tags; + /// <summary> + /// JSBeautify + /// </summary> + /// <param name="js_source_text"></param> + /// <param name="options"></param> + public JSBeautify(string js_source_text, JSBeautifyOptions options) + { + opt_indent_size = options.indent_size ?? 4; + opt_indent_char = options.indent_char ?? ' '; + opt_indent_level = options.indent_level ?? 0; + opt_preserve_newlines = options.preserve_newlines ?? true; + output = new StringBuilder(); + modes = new Stack<string>(); + + + + indent_string = ""; + + while (opt_indent_size > 0) + { + indent_string += opt_indent_char; + opt_indent_size -= 1; + } + + indent_level = opt_indent_level; + + + + input = js_source_text.Replace("<script type=\"text/javascript\">", "").Replace("</script>", ""); + if (input.Length != js_source_text.Length) + { + output.AppendLine("<script type=\"text/javascript\">"); + add_script_tags = true; + } + + last_word = ""; // last 'TK_WORD' passed + last_type = "TK_START_EXPR"; // last token type + last_text = ""; // last token text + + do_block_just_closed = false; + var_line = false; // currently drawing var .... ; + var_line_tainted = false; // false: var a = 5; true: var a = 5, b = 6 + + whitespace = "\n\r\t "; + wordchar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$"; + digits = "0123456789"; + + // <!-- is a special case (ok, it's a minor hack actually) + punct = "+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! !! , : ? ^ ^= |= ::".Split(' '); + + // words which should always start on new line. + line_starters = "continue,try,throw,return,var,if,switch,case,default,for,while,break,function".Split(','); + + // states showing if we are currently in expression (i.e. "if" case) - 'EXPRESSION', or in usual block (like, procedure), 'BLOCK'. + // some formatting depends on that. + current_mode = "BLOCK"; + modes.Push(current_mode); + + parser_pos = 0; + in_case = false; + + while (true) + { + var t = get_next_token(ref parser_pos); + token_text = t[0]; + token_type = t[1]; + if (token_type == "TK_EOF") + { + break; + } + + switch (token_type) + { + + case "TK_START_EXPR": + var_line = false; + set_mode("EXPRESSION"); + if ((last_text == ";") || (last_type == "TK_START_BLOCK")) + { + print_newline(null); + } + else if ((last_type == "TK_END_EXPR") || (last_type == "TK_START_EXPR")) + { + // do nothing on (( and )( and ][ and ]( .. + } + else if ((last_type != "TK_WORD") && (last_type != "TK_OPERATOR")) + { + print_space(); + } + else if (((IList<string>)line_starters).Contains(last_word)) + { + print_space(); + } + print_token(); + break; + + case "TK_END_EXPR": + print_token(); + restore_mode(); + break; + + case "TK_START_BLOCK": + + if (last_word == "do") + { + set_mode("DO_BLOCK"); + } + else + { + set_mode("BLOCK"); + } + if ((last_type != "TK_OPERATOR") && (last_type != "TK_START_EXPR")) + { + if (last_type == "TK_START_BLOCK") + { + print_newline(null); + } + else + { + print_space(); + } + } + print_token(); + indent(); + break; + + case "TK_END_BLOCK": + if (last_type == "TK_START_BLOCK") + { + // nothing + trim_output(); + unindent(); + } + else + { + unindent(); + print_newline(null); + } + print_token(); + restore_mode(); + break; + + case "TK_WORD": + + if (do_block_just_closed) + { + // do {} ## while () + print_space(); + print_token(); + print_space(); + do_block_just_closed = false; + break; + } + + if ((token_text == "case") || (token_text == "default")) + { + if (last_text == ":") + { + // switch cases following one another + remove_indent(); + } + else + { + // case statement starts in the same line where switch + unindent(); + print_newline(null); + indent(); + } + print_token(); + in_case = true; + break; + } + + prefix = "NONE"; + + if (last_type == "TK_END_BLOCK") + { + if (!(new List<string> { "else", "catch", "finally" }).Contains(token_text.ToLower())) + { + prefix = "NEWLINE"; + } + else + { + prefix = "SPACE"; + print_space(); + } + } + else if ((last_type == "TK_SEMICOLON") && ((current_mode == "BLOCK") || (current_mode == "DO_BLOCK"))) + { + prefix = "NEWLINE"; + } + else if ((last_type == "TK_SEMICOLON") && (current_mode == "EXPRESSION")) + { + prefix = "SPACE"; + } + else if (last_type == "TK_STRING") + { + prefix = "NEWLINE"; + } + else if (last_type == "TK_WORD") + { + prefix = "SPACE"; + } + else if (last_type == "TK_START_BLOCK") + { + prefix = "NEWLINE"; + } + else if (last_type == "TK_END_EXPR") + { + print_space(); + prefix = "NEWLINE"; + } + + if ((last_type != "TK_END_BLOCK") && ((new List<string> { "else", "catch", "finally" }).Contains(token_text.ToLower()))) + { + print_newline(null); + } + else if ((((IList<string>)line_starters).Contains(token_text)) || (prefix == "NEWLINE")) + { + if (last_text == "else") + { + // no need to force newline on else break + print_space(); + } + else if (((last_type == "TK_START_EXPR") || (last_text == "=") || (last_text == ",")) && (token_text == "function")) + { + // no need to force newline on "function": (function + // DONOTHING + } + else if ((last_type == "TK_WORD") && ((last_text == "return") || (last_text == "throw"))) + { + // no newline between "return nnn" + print_space(); + } + else if (last_type != "TK_END_EXPR") + { + if (((last_type != "TK_START_EXPR") || (token_text != "var")) && (last_text != ":")) + { + // no need to force newline on "var": for (var x = 0...) + if ((token_text == "if") && (last_type == "TK_WORD") && (last_word == "else")) + { + // no newline for } else if { + print_space(); + } + else + { + print_newline(null); + } + } + } + else + { + if ((((IList<string>)line_starters).Contains(token_text)) && (last_text != ")")) + { + print_newline(null); + } + } + } + else if (prefix == "SPACE") + { + print_space(); + } + print_token(); + last_word = token_text; + + if (token_text == "var") + { + var_line = true; + var_line_tainted = false; + } + + if (token_text == "if" || token_text == "else") + { + if_line_flag = true; + } + + break; + + case "TK_SEMICOLON": + + print_token(); + var_line = false; + break; + + case "TK_STRING": + + if ((last_type == "TK_START_BLOCK") || (last_type == "TK_END_BLOCK") || (last_type == "TK_SEMICOLON")) + { + print_newline(null); + } + else if (last_type == "TK_WORD") + { + print_space(); + } + print_token(); + break; + + case "TK_OPERATOR": + + var start_delim = true; + var end_delim = true; + if (var_line && (token_text != ",")) + { + var_line_tainted = true; + if (token_text == ":") + { + var_line = false; + } + } + if (var_line && (token_text == ",") && (current_mode == "EXPRESSION")) + { + // do not break on comma, for(var a = 1, b = 2) + var_line_tainted = false; + } + + if (token_text == ":" && in_case) + { + print_token(); // colon really asks for separate treatment + print_newline(null); + in_case = false; + break; + } + + if (token_text == "::") + { + // no spaces around exotic namespacing syntax operator + print_token(); + break; + } + + if (token_text == ",") + { + if (var_line) + { + if (var_line_tainted) + { + print_token(); + print_newline(null); + var_line_tainted = false; + } + else + { + print_token(); + print_space(); + } + } + else if (last_type == "TK_END_BLOCK") + { + print_token(); + print_newline(null); + } + else + { + if (current_mode == "BLOCK") + { + print_token(); + print_newline(null); + } + else + { + // EXPR od DO_BLOCK + print_token(); + print_space(); + } + } + break; + } + else if ((token_text == "--") || (token_text == "++")) + { // unary operators special case + if (last_text == ";") + { + if (current_mode == "BLOCK") + { + // { foo; --i } + print_newline(null); + start_delim = true; + end_delim = false; + } + else + { + // space for (;; ++i) + start_delim = true; + end_delim = false; + } + } + else + { + if (last_text == "{") + { + // {--i + print_newline(null); + } + start_delim = false; + end_delim = false; + } + } + else if (((token_text == "!") || (token_text == "+") || (token_text == "-")) && ((last_text == "return") || (last_text == "case"))) + { + start_delim = true; + end_delim = false; + } + else if (((token_text == "!") || (token_text == "+") || (token_text == "-")) && (last_type == "TK_START_EXPR")) + { + // special case handling: if (!a) + start_delim = false; + end_delim = false; + } + else if (last_type == "TK_OPERATOR") + { + start_delim = false; + end_delim = false; + } + else if (last_type == "TK_END_EXPR") + { + start_delim = true; + end_delim = true; + } + else if (token_text == ".") + { + // decimal digits or object.property + start_delim = false; + end_delim = false; + + } + else if (token_text == ":") + { + if (is_ternary_op()) + { + start_delim = true; + } + else + { + start_delim = false; + } + } + if (start_delim) + { + print_space(); + } + + print_token(); + + if (end_delim) + { + print_space(); + } + break; + + case "TK_BLOCK_COMMENT": + + print_newline(null); + print_token(); + print_newline(null); + break; + + case "TK_COMMENT": + + // print_newline(); + print_space(); + print_token(); + print_newline(null); + break; + + case "TK_UNKNOWN": + print_token(); + break; + } + + last_type = token_type; + last_text = token_text; + } + + + } + + + } +} diff --git a/FineUI/lib/JSBeautifyLib/JSBeautify.txt b/FineUI/lib/JSBeautifyLib/JSBeautify.txt new file mode 100644 index 0000000..5967b77 --- /dev/null +++ b/FineUI/lib/JSBeautifyLib/JSBeautify.txt @@ -0,0 +1,8 @@ +License: The MIT License (MIT) +Copyright (c) 2009 Rekna + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/FineUI/lib/extjs.txt b/FineUI/lib/extjs.txt new file mode 100644 index 0000000..215b7bd --- /dev/null +++ b/FineUI/lib/extjs.txt @@ -0,0 +1,41 @@ +Ext JS - JavaScript Library +Copyright (c) 2006-2011, Sencha Inc. +All rights reserved. +licensing@sencha.com + +http://www.sencha.com/license + +Open Source License +------------------------------------------------------------------------------------------ +Ext JS is licensed under the terms of the Open Source GPL 3.0 license. + +http://www.gnu.org/licenses/gpl.html + +There are several FLOSS exceptions available for use with this release for +open source applications that are distributed under a license other than the GPL. + +* Open Source License Exception for Applications + + http://www.sencha.com/products/floss-exception.php + +* Open Source License Exception for Development + + http://www.sencha.com/products/ux-exception.php + + +Commercial License +------------------------------------------------------------------------------------------ +This is the appropriate option if you are creating proprietary applications and you are +not prepared to distribute and share the source code of your application under the +GPL v3 license. Please visit http://www.sencha.com/license for more details. + + +OEM / Reseller License +------------------------------------------------------------------------------------------ +For more details, please visit: http://www.sencha.com/license. + +-- + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. See the GNU +General Public License for more details. \ No newline at end of file diff --git a/FineUI/release_history.txt b/FineUI/release_history.txt index c8f0690..d9a894f 100644 --- a/FineUI/release_history.txt +++ b/FineUI/release_history.txt @@ -1,1835 +1,2232 @@ -关于FineUI -基于 ExtJS 的专业 ASP.NET 控件库。 - -FineUI的使命 -创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序。 - -支持的浏览器 -IE 7.0+、Firefox 3.6+、Chrome 3.0+、Opera 10.5+、Safari 3.0+ - -授权协议 -Apache License v2.0 -注:ExtJS 库在 GPL v3 协议下发布(http://www.sencha.com/license)。 - - -相关链接 -首页:http://fineui.com/ -论坛:http://fineui.com/bbs/ -示例:http://fineui.com/demo/ -文档:http://fineui.com/doc/ -下载:http://fineui.codeplex.com/ - - -FineUI 严格遵守 ExtJS 对开源软件的限制,不再内置 ExtJS 库,请通过如下两个途径获取ExtJS库: -1. 获取适用于 FineUI 的 ExtJS 库:http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218 -2. 基于 FineUI 的空项目(Net2.0 和 Net4.5 两个版本):http://fineui.com/bbs/forum.php?mod=viewthread&tid=2123 - - -发布历史 - -+2013-10-28 v4.0 beta1 - +修正面板的Collapsed属性在客户端改变后状态同步问题。 - -重现步骤:window/group_panel.aspx示例,折叠分组面板二,点击下面的按钮,不能展开分组面板二。 - +修正树控件的SelectedNodeIDArray属性在客户端改变后状态同步问题。 - -重现步骤:tree/checkbox/tree_checkall.aspx示例,选中驻马店,点击河南省,则驻马店没能保持选中状态。 - -修正TimerPicker无法赋值的问题(隨風往事、凤凰涅盘ing)。 - -修正表格列绑定的数据库字段值为空时出错的问题(欧志辉)。 - -修正引入样式文件的标签笔误,应为type=text/css(是梦~`)。 - -MsgTarget改名为MessageTarget,增加项None。 - -FormOffsetRight的默认值由20px改为5px。 - -为Web.config和PageManager增加FormLabelAlign配置项。 - -ToolbarPosition增加Left/Right。 - -删除Web.config中的配置项EnableBigFont。 - -删除PanelBase的EnableBackgroundColor和EnableLargeHeader属性。 - -删除Component的FormItemClass和ContainerClass属性。 - -ExtJS的CheckboxGroup的setValue和getValue方法和之前不兼容,已更新相关示例form/checkboxlist.aspx。 - -ExtJS_v4.2和之前版本对change事件的处理不同。 - -FineUI_v4中的文本输入框或者日期选择器,AutoPostBack使得TextChanged事件立即触发(输入单个字符串和选择日期后)。 - -FineUI_v3中的文本输入框或者日期选择器,AutoPostBack使得TextChanged事件在输入框失去焦点后触发。 - -为了在FineUI_v4中实现之前的失去焦点后触发的事件,为文本输入框增加EnableBlurEvent属性和Blur事件。 - +DropDownList更新。 - -默认可以为空,方便使用Required属性做客户端验证,示例form/form.aspx。 - -ForceSelection属性默认为false,更新示例dropdownlist/dropdownlist_forceselection.aspx。 - -删除Resizable属性。 - -优化XState的初始化代码,使得Reset按钮可用于下拉列表、富文本编辑器等控件,而不会清空这些控件的值。 - -删除PanelBase的属性AutoHeight和AutoWidth。 - +表格更新。 - -生成的样式类"x-grid3"字符串全部更改为"x-grid"。 - -删除表格属性VerticalScrollWidth、EnableColumnHide。 - +表格列和之前不兼容(现在使用HBox布局,注意列的Width和BoxFlex属性)。 - -可以为Column指定BoxFlex属性或者Width属性(之前ExpandUnusedSpace属性等价于BoxFlex=1)。 - -删除表格属性MinColumnWidth、AutoExpandColumnMax、AutoExpandColumnMin。 - -删除表格属性ForceFitFirstTime,属性ForceFitAllTime依然可用。 - -增加列属性HeaderToolTip、HeaderToolTipType、BoxFlex、EnableColumnHide。 - -增加列属性EnableHeaderMenu(默认为true),修改表格的EnableHeaderMenu默认值true。 - -删除表格属性EnableRowNumber、EnableRowNumberPaging、RowNumberWidth,增加列RowNumberField(增加EnablePagingNumber属性)。 - -LinkButtonField默认EnableHeaderMenu=false,EnableColumnHide=false。 - -删除表格属性SortColumnIndex、SortColumn,请直接使用SortField属性(注意RowNumberField对属性SortColumnIndex的影响)。 - -设置表格内图片的默认大小为16px*16px,用户可以手工设置样式来覆盖图片的默认大小。 - -删除HiddenColumnIndexArray属性,增加HiddenColumns属性。 - -更新可编辑表格实示例的客户端脚本,在执行onReady函数时表格的viewready事件已经执行完毕。 - +分组表头和之前不兼容。 - -删除类GridGroupColumn,删除表格的Columns属性,增加类GroupField。 - +选项卡控件更新。 - -为TabPosition类型增加Left、Right两个枚举类型。 - -自动完成文本框示例更新(FineUI的TextBox控件被渲染为table而不是之前的input)。 - +树控件更新。 - -删除TreeNode的属性SingleClickExpand。 - +增加事件参数类CheckedEventArgs,复选框、单选框以及菜单按钮的CheckedChanged事件会接收这个事件参数。 - -更新示例default.aspx、toolbar/menucheckbox.aspx、form/radiobutton.aspx,处理单选框列表时需要的技巧。 - +窗体控件更新。 - -如果删除面板初始属性IFrameUrl="#"或者IFrameUrl="about:blank",则面板中的IFrame会延迟加载。 - -对于设置了IFrameName的面板,初始属性IFrameUrl需要保留,比如iframe/topmenu/default.aspx。 - -删除Region的EnableSplitTip、CollapsibleSplitTip、SplitTip、CollapseMode、CMargins属性。 - -删除AccordionPane的EnableHightlight属性。 - -全部200多个示例更新。 - - - -+2013-11-** v3.3.2 - -修正IE7/IE8下表格的日期列显示错误,IE不能正确解析Date.parse('2015-10-01')(夏雨雪)。 - -修正表格中模板列在数据绑定时可能不更新的问题(小兵、舞柯庶、蒙奇.D.二毛、李明海)。 - +更新示例grid/grid_pageitems_pagesize.aspx和grid/grid_pageitems_pagesize_database.aspx。 - -在更改每页显示数目(PageSize)时,防止PageIndex越界。 - -UEditor更新为1.2.6.1。 - -增加自定义图片按钮示例button/button_custom.aspx(簫今Shawgin)。 - -修正Window控件不支持EnableAjax的问题,增加示例grid/grid_excel_selectcolumns.aspx(◆◇_提拉米苏℡)。 - +修正Collapsed属性在客户端改变后状态同步问题。 - -重现步骤:window/group_panel.aspx示例,折叠分组面板二,点击下面的按钮,不能展开分组面板二。 - +修正树控件的SelectedNodeIDArray属性在客户端改变后状态同步问题。 - -重现步骤:tree/checkbox/tree_checkall.aspx示例,选中驻马店,点击河南省,则驻马店没能保持选中状态。 - -修正TimerPicker无法赋值的问题(隨風往事、凤凰涅盘ing)。 - -修正表格列绑定的数据库字段值为空时出错的问题(欧志辉)。 - -修正引入样式文件的标签笔误,应为type=text/css(是梦~`)。 - -DropDownList的ForceSelection属性默认为false,更新示例dropdownlist/dropdownlist_forceselection.aspx。 - - - -+2013-07-29 v3.3.1 - -将工具YUICompressor替换为Microsoft Ajax Minifier(需要指定-evals:immediate)。 - -完善FineUI的代码注释,创建FineUI参考手册离线版。 - -修正Window控件无法在外层页面最大化的问题(小兵)。 - -修正Window控件在Master-Content页中无法触发关闭事件的问题(小兵)。 - -对X.util.initTreeTabStrip和X.util.addMainTab进行重构,可以指定切换/新增选项卡时是否刷新IFrame。 - -更新other/addtab.aspx示例,在JavaScript中使用网站根路径。 - -增加示例other/confirm_cancel.aspx,点击确认对话框的取消按钮也能回发页面(夏了,夏天)。 - -修正AJAX异常时提示信息没有消失的问题。 - -优化AJAX超时提示对话框(请求超时,请刷新页面并重试!)。 - +性能优化。 - -为官方示例增加压缩ViewState的方法,在页面基类PageBase中实现。 - +为表格/树/下拉列表/单选框复选框列表/表单字段控件启用XState的Gzip压缩,减少AJAX时POST的数据量。 - -会稍微增加下载数据量,从整体上提升用户体验。 - -可以通过设置控件、PageManager或者Web.config的EnableXStateCompress属性来关闭XState压缩(默认启用)。 - +表格性能优化 - -优化CheckBoxField/HyperLinkField/LinkButtonField,减少生成的HTML代码片段大小。 - -优化模板列存在时POST数据大小,优化内存分页时响应数据大小。 - -优化CheckBoxField生产的CSS类名,将.box-grid-checkbox-unchecked-disabled更改为.unchecked.disabled。 - -优化TextArea/HtmlEditor在页面第一次加载和AJAX回发时产生的数据大小,防止生成重复数据。 - -更新导出Excel的示例grid/grid_excel.aspx,特别注意如何处理模板列(为了优化性能,不能直接获取模板列的内容了)。 - +优化结果(A:grid/grid_rowcommand_paging.aspx,B:grid/grid_rowcommand_paging_database.aspx): - -[版本][A首次响应][A下一页请求][A下一页响应][B首次响应][B下一页请求][B下一页响应] - -[v3.3.0][56.4K][61.7K][7.8K][18.0K][14.4K][10.7K] - -[v3.3.1][43.7K][7.0K][0.2K][16.4K][3.5K][8.6K] - +表格增强。 - +修正模板列示例中注册客户端事件的错误,重新绑定数据后客户端脚本失效。 - -现在使用ExtJS的代理事件,只需要在页面第一次加载时注册事件即可。 - -更新全部模板列示例grid\grid_edit.aspx、grid_edit_compare.aspx等,请仔细阅读源代码。 - +修正SelectedRowIndexArray的一个BUG。 - -在grid/grid_checkboxfield_rowcheckall.aspx中,点击第一个复选框选中行,然后再次点击第一个复选框不能取消行的选中状态。 - +模板列重构(内部实现)。 - -模板列的ClientID由原来的Grid1_r1c5调整为Grid1_ctl09,现在ID由系统自动生成。 - -GridRow不再继承自WebControl,重新优化Grid内部的数据绑定逻辑(减少一个控件层次结构)。 - -模板列控件GridRowControl实例直接添加到Grid.Controls中(之前添加为行控件的子控件)。 - +可编辑单元格重构。 - -更新所有示例,通过行索引找到行DataKeys,然后根据行关键字查找需要更新的数据。 - -为表格增加DeleteSelected/GetDeleteSelectedReference方法,以便在客户端删除行。 - -服务器端通过GetDeletedList方法获取客户端删除的行在原始数据中的索引列表。 - -重构GetModifiedData的实现[[rowIndex(int),originalRowIndex(int),modifiedFields(Dictionary)]]。 - -增加示例grid/grid_editor_cell_new_delete.aspx。 - -为表格增加EnableAfterEditEvent属性和AfterEdit事件,用来处理单元格失去焦点事件。 - -增加示例grid/grid_editor_cell_afteredit.aspx。 - - - -+2013-06-17 v3.3.0 - -更新示例form/form_center_button.aspx,支持IE7(Stone.yu)。 - -修正动态添加列在页面回发时的错误(舞柯庶、落寞一声笑、路人甲)。 - -改变浏览器大小可以自动调整窗体控件的大小(窗体控件最大化时)(grass_root、蓝色天空)。 - -修正Chrome下多表头样式错位(风笑痴)。 - +对允许自动回发事件的属性名字进行重构。 - -在原来的名字后面添加Event,比如EnableRowClick改为EnableRowClickEvent。出于兼容性考虑,之前的属性依然有效。 - -表格相关:EnableRowSelectEvent、EnableRowClickEvent、EnableRowDoubleClickEvent - -表单相关:EnableTimeSelectEvent(TimePicker)、EnableDateSelect(DatePicker、Calendar) - +更新aspnet/ueditor.aspx、aspnet/ueditor_two.aspx. - -修正IE9下编辑框无法获取焦点的问题,将UEditor的初始化代码放在onReady函数中(消失的键盘 )。 - -UEditor更新为1.2.6.0,FineUI与百度的UEditor将携手促进国内开源软件的发展。 - -更新other/addtab.aspx示例,增加关闭当前TAB的实现。 - -增加示例tabstrip/tabstrip_iframe_disabled.aspx,在IFrame内部启用外部TabStrip的标签(◆◇_提拉米苏℡)。 - +窗体控件优化。 - -将JS函数box_show/box_hide等改名为x_show/x_hide。出于兼容性考虑,之前的函数依然有效。 - -减少窗体控件生成的JS代码量。 - +遵守ExtJS对开源软件的限制,将ExtJS相关JavaScript、CSS以及图片资源从FineUI库中移除。 - -增加Web.config中的配置项ExtjsBasePath,默认为~/extjs。 - -FineUI.dll从原来的2.4M减少为600K。 - -FineUI.Examples增加extjs_builder文件夹,用来生成FineUI所需的extjs目录。 - +表格增强。 - +合计行示例。 - -增加客户端合计行示例grid/grid_summary.aspx(◇辉◆:)。 - -增加服务器端合计行示例grid/grid_summary_serverside.aspx(◆◇提拉米苏℡)。 - -增加合计行绝对定位到分页条上方的示例grid/grid_summary_absolute.aspx。 - -修正Chrome下表格EnableTextSelection属性失效问题(D大调)。 - +优化模板列示例grid/grid_edit_compare.aspx。 - -增加自动换行的示例grid/grid_line_wrap.aspx(水中月 )。 - -增加CheckBoxSelectOnly属性,满足只能通过多选框选中行的需求,增加示例grid/grid_checkall_only.aspx(隨风.NET)。 - -修正下次提交依然提交上次修改数据的问题。 - +可编辑表格增强。 - +修改GetModifiedDict函数的返回结果,这个和上个版本不兼容,需要特别注意。 - -之前返回的结构是Dictionary<int, Dictionary<int, string>>,现在返回的结构是Dictionary<int, Dictionary<string, string>>。 - -之前是通过RowIndex + ColumnIndex获得修改的值,现在通过RowIndex + ColumnID获得修改的值,更简单直观。 - -如果同时启用EnableCheckBoxSelect和AllowCellEditing,则忽略EnableCheckBoxSelect属性。 - -增加SelectedCell属性,用来获取AllowCellEditing模式下选中的单元格。 - -增加示例grid/grid_editor_cell_delete.aspx。 - -优化GetSelectCountReference方法使其在AllowCellEditing模式下也不出错,并改名为GetSelectedCountReference。 - -增加方法GetSelectedCellReference,用来获取选中的单元格,仅在AllowCellEditing模式下有效。 - -增加方法RejectChanges、GetRejectChangesReference、ClearSelections、GetClearSelectionsReference。 - -增加示例grid/grid_editor_cell_renderfunction.aspx,在RendererFunction通过客户端脚本获得下拉列表的值(舞柯庶)。 - -增加函数GetNewAddedList,返回新增数据行,增加示例grid/grid_editor_cell_new.aspx。 - +综合示例。 - -增加顶部菜单框架(一)综合示例iframe/topmenu/default.aspx(未来(sun))。 - -增加顶部菜单框架(二)综合示例iframe/topmenu2/default.aspx,左侧菜单也是放在单独的IFrame中,灵活度更高。 - -增加顶部菜单框架(三)综合示例iframe/topmenu3/default.aspx,左侧是手风琴和树控件的组合。 - +去AXD化并更新整个示例工程,所有对res.axd的引用都换成直接的网址,这也有效地减少了服务器部署的麻烦。 - -出于兼容性考虑,之前对res.axd调用依然有效,比如res.axd?icon=World。 - - - -+2013-05-21 v3.2.6 - +修正extjs v3.4.1.1引入的问题。 - +恢复表格和树控件中链接光标的手型而非指针。 - -删除ext-all-notheme中对x-unselectable的光标定义。 - -修正grid/grid_textselection.aspx无法选择文本的问题。 - -修正Chrome下无法编辑表格模板列中的文本输入框(刘军)。 - +表单相关。 - -修正在文本输入框中按回车键无法触发type=submit按钮的表单提交事件(jieking、luyj56、^老鼠^、消失的键盘)。 - -更新示例form/layout_panel2.aspx,增加表单验证功能。 - -增加示例form/form_reset.aspx、form/form_hide_field.aspx(注意控件HideMode属性的使用)。 - -为DatePicker和TimePicker增加EnableEdit属性(默认为true),更新form/timepicker.aspx(DT♂杰杰 )。 - -增加示例form/form_center_button.aspx,使两个按钮水平居中显示(夜冰)。 - -增加示例form/fileupload_toolbar.aspx,在工具栏中放置FileUpload控件(asp.net)。 - -UEditor升级为v1.2.5.1。 - -增加两个UEditor的示例aspnet/ueditor_two.aspx(Apollo)。 - +表格增强。 - -表格,下拉列表、复选框列表以及单选框列表的数据源支持IDataReader(路过秋天、周星星)。 - +增加EnableColumnLines属性,是否启用列分隔线(默认为false)。 - -增加示例grid/grid_column_lines.aspx。 - -修正Access和Gray主题下表格多表头的样式问题(bestwowo)。 - -增加示例grid/grid_empty_text.aspx。 - +增加只读属性SortField(从SortColumnIndex或者SortColumn计算得来)。 - -最好在Sort事件中设置表格的SortDirection和SortColumnIndex。出于兼容性考虑,在触发事件之前已经设置好了。 - -对示例grid/grid_sorting.aspx、grid/grid_paging_sorting.aspx、grid/grid_groupheader_sort.aspx进行重构。 - -增加示例grid/grid_groupheader_sort_hdmenu.aspx、grid/grid_paging_database_sorting.aspx。 - +对GridColumn进行重构(表格列也是一个控件),如果没有设置ColumnID,则ColumnID等于列的ClientID。 - +对CheckBoxField进行重构(内部实现)。 - -删除生成X_Rows.Values中的换行符。 - -将X_States放在X_Rows.State中,因为客户端对States的更改会同时影响到X_Rows.Values和X_Rows.DataKeys。 - -服务器端对States的改变,会同时更新Values,进而促使表格重新加载。 - -注意:表格行的States属性对外部不可见(internal),可以通过CheckBoxField的GetCheckedState和SetCheckedState来访问此属性。 - +增加表格的单元格编辑功能。 - -增加AllowCellEditing、ClicksToEdit属性;CommitChanges、GetModifiedCells、GetModifiedDict几个方法。 - -增加RenderField和RenderCheckField两个列类型。 - -增加示例grid/grid_editor_cell.aspx。 - - - -+2013-04-27 v3.2.5 - +更新extjs库到v3.4.1.1。 - -解决IE9/IE10下的UI显示问题。 - -解决表格控件在谷歌浏览器下,最后一列的标题栏没对齐的问题。 - -解决IE7/Chrome下有时不能拖动窗体的问题。 - +删除PageManager的EnableAspnetSubmitButtonAjax属性(shiningrise、夏雨雪(joe) )。 - -原因是低版本IE浏览器不允许使用JS修改input标签的type属性。 - -我们需要手工设置Asp.Net按钮的UseSubmitBehavior=false,更新示例aspnet/aspnet.aspx。 - -修正extjs的Ext.lib.Ajax.serializeForm函数,使其在序列化表单时不包含submit按钮,从而避免触发后台submit按钮的事件。 - -更新示例aspnet/aspnet.aspx。 - -更新示例config/release_time_chart.htm。 - +表格增强。 - -增加RowVerticalAlign属性(默认为Middle),以后所有表格中的行文字默认都是垂直居中显示。 - +增加EnableHeaderMenu属性(默认为false),支持在表格标题栏下拉菜单中显示隐藏列以及排序操作。 - -增加EnableColumnHide属性(默认为true),是否可以标题栏下拉菜单中显示隐藏列。 - -增加示例grid/grid_hdmenu_hidecolumn.aspx。 - -增加示例grid/grid_hdmenu_sorting.aspx。 - +增加EmptyText属性,指定数据为空时显示在内容区域的文本,可以是HTML标签。 - - - -+2013-03-23 v3.2.4 - -修正FineUI按钮和Asp.Net按钮共存时,点击FineUI按钮会触发Asp.Net按钮事件的问题(shiningrise)。 - -修正在表单字段中按回车键触发表单提交的问题(欧志辉)。 - -修正RadioButtonList隐藏时客户端验证出错的问题(⑥阿太⑥、appletreegd)。 - -为Image、LinkButton、HyperLink、Label增加Attributes属性,用来设置HTML标签属性。 - +增加示例iframe/selectprovince1.aspx、iframe/selectprovince2.aspx、iframe/selectprovince3.aspx(猪八戒)。 - -演示如何使用Attributes属性(或者使用JS脚本来设置HTML标签属性)。 - -演示如何调用父窗口的JS函数(如何找到原始窗口对象X.wnd.getActiveWindow()[1])。 - -演示如何自定义回发,如何使用ActiveWindow的GetHideReference和GetHidePostBackReference函数。 - +表格增强。 - -增加实时比较表格中两个文本输入框值的例子grid/grid_edit_compare.aspx(Mr.Wu)。 - -增加同步表格中下拉列表的选中值到文本输入框的例子grid/grid_edit_dropdownlist_textbox.aspx(老皮鞋)。 - -更新示例grid/grid_pageitems.aspx,演示如何使用extjs内置的图片资源。 - +增加调整表格宽度的四个示例。 - -grid/grid_width_expandunusedspace.aspx(最常用,一列宽度自适应其他列宽度固定)。 - -grid/grid_width.aspx、grid/grid_width_forcefitalltime.aspx、grid/grid_width_forcefitfirsttime.aspx。 - +增加保存表格模板数据的示例grid/grid_edit_save_auto.aspx、grid/grid_edit_save_manual.aspx(angrySperm)。 - -通过向表格元素添加HTML属性来防止重复注册表格的客户端事件。 - -修正其他示例中潜在的重复注册客户端事件的问题。 - -注意RowSelect事件在本示例中的运用。 - +增加EnableRowSelect属性和RowSelect事件,注意RowClick和RowSelect事件的区别。 - -增加示例grid/grid_rowselect.aspx,更新示例grid/grid_twogrid.aspx。 - -增加表格中文字居中显示的例子grid/grid_text_middle.aspx。 - +数据库分页时支持每页显示的记录数不同(appletreegd)。 - -增加示例grid/grid_simulate_tree_paging.aspx、grid/grid_simulate_tree_database_paging.aspx。 - -增加示例grid/grid_simulate_tree_database_paging_dropdownlist.aspx。 - +更新内置JS函数X.util.initTreeTabStrip,切换选项卡时是否在top.location.hash记录当前页面的地址。 - -在更新此版本后,你可能需要将此变量置为true,参考js/default.js。 - - - -+2013-01-09 v3.2.3 - -修正身份证和IP地址验证规则错误(Mr.Wu、轻雨湿意)。 - -为正则表达式验证增加RegexIgnoreCase属性,默认是区分大小写的。 - -修正清空CheckBoxList或者RadioButtonList时仍然存在一项的问题(liugeZ)。 - -整合jQuery UI Autocomplete组件,并增加了6个示例。 - -增强grid/grid_edit.aspx示例,现在可以通过回车键遍历所有的文本框(Mr.Wu)。 - -增强表单字段的Label为Ajax属性,也即是可以在页面回发时修改。 - -修正表单字段隐藏后仍然进行有效性校验的问题。 - -增加工具栏图标。 - +修正ExpandAllNodes无法展开二级节点的问题(szjazz)。 - -现在有两个办法来展开全部节点tree.ExpandAllNodes(); - -或者PageContext.RegisterStartupScript(tree.GetExpandAllNodesReference())。 - -FineUI的设计时支持,以商业软件的形式单独提供,请到官方论坛了解详情。 - - - -+2012-12-03 v3.2.2 - -修正动态添加按钮菜单的错误,并更新示例button/button_menu.aspx(西门吹雪)。 - +为Window控件增加Plain属性;为ToolbarPosition增加Footer类型;为面板增加FooterBarAlign属性。 - -增加示例window/window_toolbar.aspx。 - -更新示例basic/login.aspx、basic/login_captcha.aspx。 - -更新示例basic/login_captcha.aspx,增加刷新验证码的功能。 - +第三方编辑器增强。 - -修正示例aspnet/fckeditor.aspx无法获取用户输入值的问题。 - -增强示例aspnet/fckeditor.aspx,在更新编辑器内容时不需要刷新整个编辑器。 - -增加示例aspnet/ckeditor.aspx,演示如何在项目中整合CKEditor_4.0。 - -增加示例aspnet/ueditor.aspx,演示如何在项目中整合UEditor_1.2.3。 - +Grid增强。 - +重新绑定数据时(DataBind)清空选中的行(SelectedRowIndexArray)(欧志辉)。 - -更新注意:1. 需要先绑定表格数据,再设置选中的行。2.重新绑定数据时不再需要手工清空选中的行。 - -增加RowNumberWidth属性,对于序号列可能大于等于100的表格,需要设置合适的宽度,比如30px(凡人哥)。 - +增加EnableRowNumberPaging属性,行序号列是否支持分页(默认为false,也即是每页都从1开始)(欧志辉)。 - -增加示例grid/grid_rownumber_paging.aspx、grid/grid_rownumber_paging_database.aspx。 - +修正设置DataSource为null时无法清空表格内容的问题(猪八戒)。 - -更新grid/grid_pageitems.aspx,演示如何清空表格数据。 - -更新grid/grid_rowexpander.aspx示例,控制显示隐藏行扩展列。 - +增加ClearSelectedRowsAfterPaging属性,用来控制是否在服务器端分页后清空选中的行。 - -增加示例grid/grid_paging_selection.aspx和grid/grid_paging_database_selection.aspx,演示如何跨页保持选中数据。 - - - -+2012-11-25 v3.2.1 - +优化示例首页代码。 - -MenuCheckBox的CheckedChanged事件处理函数,防止事件重复执行两次。 - -向客户端注册的window.IDS脚本只在页面第一次加载时执行。 - -优化集合类(比如TabCollection,ControlBaseCollection)的实现,避免动态添加控件时存在的潜在风险。 - +Grid增强。 - -增加SelectAllRows方法。 - -增加PageItems属性,可以向分页工具条中添加控件,比如分隔符、按钮、下拉列表等(欧志辉)。 - -增加示例grid/grid_pageitems.aspx、grid/grid_pageitems_rowexpander.aspx、grid/grid_pageitems_pagesize.aspx。 - -修正第一次打开页面无法隐藏表格列的问题。 - -优化ExpandAllRowExpanders属性,从而避免页面第一次打开时的闪烁现象(grid/grid_rowexpander_expandall2.aspx)。 - -增加两个方法ExpandRowExpanders和CollapseRowExpanders。 - +为表单字段和面板控件增加Reset和GetResetReference方法,用来重置表单字段(小豬仔→pig/抓、随便逛逛、六脉神剑)。 - -更新示例form/form_compare.aspx、form/form.aspx、form/fileupload.aspx。 - +FileUpload增强。 - -修正FileUpload控件的HasFile属性总是为true的问题(黑冰.cn、8730574、☆幻~精灵、feitian78)。 - -为FileUpload控件增加OnFileSelected事件(启用AutoPostBack时有效)(辉月)。 - -增加示例form/fileupload_autopostback.aspx。 - - - -+2012-11-18 v3.2.0 - -修正通过标签初始的复选框列表在设置SelectedValueArray属性时出错的问题(◇辉◆:)。 - -修正下拉列表未绑定数据时回发页面出现在RecoverPropertiesFromJObject中的错误(〓飚〓、隨風往事、破风、Vian_Pan)。 - -修正动态创建的复选框列表,在默认未选中任何值的情况下,回发时SelectedValueArray取不到值的问题(sam.chang)。 - -修正Alert.Show始终显示默认图标的问题(swtseaman)。 - -为提示对话框增加自定义图标功能,通过Icon或者IconUrl来自定义(swtseaman)。 - -增加选择时间的控件TimePicker(时分)。 - -内置资源改为短格式,比如/res.axd?css=blue.css&v=1(◇辉◆:、swtseaman)。 - -更新示例站点样式,将配置项放到左侧菜单的上方,增加主区域空间。 - -增加控件MenuCheckBox(复选框或单选框)。 - -为RadioButton增加AutoPostBack属性。 - -修正示例工程中FCKEditor无法上传文件和浏览文件的问题。 - - - -+2012-08-18 v3.1.9 - -修正other/addtab.aspx示例的JS错误和BoundField使用Tooltip的错误(Dennis_Liu)。 - +修正Window的GetShowReference返回的字符串中包含双引号的问题(︶ㄣ東東ㄣ、天蓝若空、李剑飞、克儿~)。 - -虽然返回的JavaScript语句没问题,但是如果放到HTML属性中就有问题了。 - -修正HtmlNodeBuilder在处理双引号等字符时可能导致潜在JavaScript问题。 - -从根本上解决WindowField、LinkButton、HyperLink等控件的客户端脚本中存在单引号或者双引号时出现的各种问题。 - -增加动态创建模板列示例grid/grid_dynamic_columns2.aspx(大鸟打小鸟)。 - -修正按钮的Type设为Reset无效的问题,注意重置的其实是页面上所有的表单控件(e先生)。 - -修正英文下确认对话框标题依然默认中文的问题。 - -修正后台对可为空的int,short,double属性赋值时出现的异常(石头鱼)。 - +为Window控件增加GetMaximizeReference和GetRestoreReference两个方法。 - -变通的实现打开窗体后最大化:PageContext.RegisterStartupScript(Window2.GetShowReference() + Window2.GetMaximizeReference()); - -增加英文示例http://demo.fineui.com/en/。 - -更新行布局、列布局和锚点布局示例。 - -增加表格导出Excel文件示例。 - -增加表格模板列使用单选列表、复选列表的示例。 - -完善在线文档http://doc.fineui.com/。 - -公开ControlBase的ConvertPropertiesToJObject和RecoverPropertiesFromJObject两个方法。 - -兼容Asp.Net的用户控件(UserControl)并增加示例(Spring)。 - -更新示例框架,增加手风琴控件和树控件的组合菜单(幻之达)。 - -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 - -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 - -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空的情况下去除<span></span>标签。 - -类似于onReady函数,增加对onInit函数的支持,用来在执行页面初始化脚本之前调用。 - -优化复选框列表和单选按钮列表,减少生成的代码量。 - -修正CheckBoxList和RadioButtonList无法在回发中更新的BUG(破风、吉吉﹑落叶飞尘)。 - -修正CheckBoxList和RadioButtonList初始为空时页面不能显示的BUG(e先生、黑眼睛咪咪、宇洋)。 - -预祝俺家小师生日快乐! - - - -+2012-06-24 v3.1.8 - +重新规划Grid中列宽度的设置(之前必须为除了ExpandUnusedSpace的列设置固定宽度)(含章)。 - -增加属性MinColumnWidth(列的最小宽度)。 - -增加属性AutoExpandColumn,自动扩展宽度以填充剩余空间的列(ColumnID)(如果设置了ForceFitFirstTime或者ForceFitAllTime,则忽略此属性)。 - -增加属性AutoExpandColumnMax和AutoExpandColumnMin。 - -增加属性ForceFitFirstTime,成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效)。 - -增加属性ForceFitAllTime,成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效)。 - -增加属性VerticalScrollWidth,垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度)。 - -增加示例grid/grid_forcefit.aspx。 - -修正工具栏中控件在设置EnableBigFont时的字体大小(£快乐→无罪、快乐的猪)。 - -修正三层IFrame结构并在最外层页面弹出窗体时无法关闭的问题,并增加示例iframe/parent_postback_top.aspx(feitian78)。 - +将框架页面中树控件和选项卡控件的交互操作、改变选项卡时更新地址栏,以及页面第一次打开时展开相应的树节点和打开选项卡封装到一个JS函数中。 - -现在一行代码X.util.initTreeTabStrip(treeMenu, mainTabStrip);就完成了之前需要手写的100行JavaScript代码。 - -这个函数带来的另一个好处是,不需要在手工写选项卡中每个选项卡所需要图标的CSS,这个函数会根据树节点的图标自动添加这些CSS代码。 - -更新default.aspx后台代码,以便根据树节点对象的页面地址返回相应的文件类型图标。 - -修正TriggerBox不能改变触发图标的问题。 - -修正ActiveWindow.GetHidePostBackReference不能传入带单引号参数的问题(e先生)。 - -修正Window控件最大化后关闭,下次再打开时位置不对的问题(蓝色天空、松松工作室)。 - -为Label、HyperLink增加Enabled属性,并更新相应示例(幻之达)。 - +为BoundField、HyperLinkField、WindowField、CheckBoxField增加Enabled属性。 - -更新示例grid/grid_prerowdatabound.aspx,演示如何根据行的不同参数启用禁用LinkButtonField。 - -Enabled属性在权限控制中非常重要,AppBox(基于FineUI的企业通用管理框架)依赖于此属性。 - -为Tree增加SelectedNode属性,为TreeNode增加ParentNode属性(你是我的)。 - +为Web.config和PageManager增加CustomTheme和CustomThemeBasePath属性,来支持自定义样式,并向示例工程增加自定义样式blueen。 - -向示例工程添加三个网友提供的样式(蓝色天空)。 - -为Grid增加PreDataBound事件,用来在数据绑定之前修改列的属性(如果列的属性依赖于行的数据,可以使用PreRowDataBound)。 - +此版本与AppBox v1.0(基于 FineUI 的企业通用管理框架)同时发布。 - -注:AppBox非免费软件,请捐赠作者以获得AppBox源代码,具体细节请查看论坛bbs.fineui.com。 - - - -+2012-06-03 v3.1.7 - -修正不能选蓝色主题BUG,修正后台生成RadioButtonList时,AJAX获取不到选中值的BUG(swtseaman、西门吹雪)。 - +为Grid的BoundField、HyperLinkField、LinkButtonField、WindowField增加HtmlEncode和HtmlEncodeFormatString(TiDi)。 - -HtmlEncode和HtmlEncodeFormatString的默认值都为true,这样字段中的HTML标签会被编码显示。 - -这两个属性和Asp.Net控件GridView的BoundField的同名属性作用相同。 - -http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.htmlencode - -为Grid的HyperLinkField、WindowField增加UrlEncode属性,用来进行URL编码(默认为true)。 - -修正窗体大小超过页面尺寸时,窗体的标题栏位于页面之外的BUG(⑥阿太⑥)。 - -为IconHelper.GetResolvedIconUrl增加保护,如果传入的参数为Icon.None和String.Empty,则返回空字符串。 - -修正在父页面弹出的窗体最大化时错位的问题。 - -为Grid增加SelectedRowIndex属性,用来简化单选行时的操作。 - +为Grid所有列增加TextAlign属性,用来控制文本的排列位置,默认靠左排列。 - -复选框列的排列位置默认靠左显示,同时更新示例grid/grid_centercolumn.aspx。 - -为Grid增加多表头功能,增加示例/grid/grid_groupheader.aspx和/grid/grid_groupheader2.aspx(快乐的猪)。 - - - -+2012-05-20 v3.1.6 - -修正RowDataBound中使用Grid1.DataKeys[e.RowIndex]出错的问题(信徒)。 - +增加配置项EnableAjaxLoading和AjaxLoadingType,用来全局控制是否显示Ajax提示以及提示样式(swtseaman、张怡)。 - -和其他配置项一样,可以从三个级别进行控制(Web.config全局级别、PageManager页面级别和控件级别)。 - -增加示例other/ajax_loading.aspx。 - -Panel的IFrameUrl为#或者about:blank,也会立即生成iframe节点,只有在IFrameUrl为空字符串时才会延迟生成iframe节点。 - -修正在Grid的Toolbar中放置可回发的单选框列表,并回发重新绑定Grid时出现的问题(找到多个具有相同ID“c6r0”的控件)(magicyugi)。 - -为Grid增加属性ExpandAllRowExpanders,并增加示例grid/grid_rowexpander_expandall2.aspx。 - -为Grid增加属性EnableTextSelection,并增加示例grid/grid_textselection.aspx(swtseaman)。 - +修正VBox布局时BoxLayoutAlign返回的错误代码,并统一为Start、Center、Stretch、StretchMax。 - -更新示例:layout/vbox.aspx、layout/hbox.aspx。 - -修正非AJAX页面回发时,会重复ASPX标签添加的下拉列表选项(同样的问题存在于RadioButtonList和CheckBoxList)(swtseaman)。 - -增加API文档:http://doc.fineui.com/。 - - - -+2012-05-06 v3.1.5 - -增加主从表的示例:grid/grid_twogrid.aspx。 - +修正表格中没有模板列时,更新表格出错的问题(大鸟打小鸟、水若寒冰、HUGO.理、河蟹社会、幻之达)。 - -只更新一行代码,由if(!tpls)改为if (typeof (tpls) === 'undefined'),因为没有模板列时tpls为空字符串。 - -修正重新绑定表单后无法获取TemplateField中数据的问题(落末醉)。 - +为示例网站(http://demo.fineui.com/)启用GZIP压缩,同时增加示例config/enable_gzip_iis6.htm。 - -经测试,FineUI示例首页下载的JavaScript由原来的650K减少到250K左右,对首次页面加载速度的提升非常可观。 - -修正Grid 做排序时SelectedRowIndexArray的BUG(emissary)。 - -增加示例iframe/passvalue_iframe.aspx,演示如何从子窗体向父窗体传真。 - -更新accordion/accordion_tree.aspx,演示如何通过后台改变每个树节点的Target属性。 - +页面第一次加载完成后会调用用户自定义的onReady函数,页面在AJAX回发后会调用用户定义的onAjaxReady函数。 - -更新示例grid/grid_rowcolor.aspx,增加在重新绑定数据后高亮行的功能。 - -增加示例grid/grid_rowexpander_expandall.aspx,演示如何在打开页面后展开所有的扩展列(〓飚〓)。 - +TabStrip的EnableDeferredRender属性默认值修改为false,DropDownList的EnableEdit属性的默认值修改为false。 - -EnableDeferredRender为true,在有些情况下会出现JS错误。 - -EnableEdit用来启用下拉列表过滤,默认false可以在点击列表框本身弹出下拉列表,和Asp.net的下拉列表行为一致。 - +修正在IE下,Grid的模版列中出现文本输入框或者下拉列表时,第一次不能选中的问题(水若寒冰、幻之达)。 - -问题出现在extjs源代码Ext.grid.GridView中的focusCell,在IE下会focusEl.focus.defer(1, focusEl); - -也就是说会在1秒钟后重新让当前行获得焦点,自然刚打开的下拉列表由于失去焦点就关闭了,出现闪烁问题。 - - - -+2012-04-24 v3.1.4 - -修正页面中单独放置GroupPanel出错的问题(〓飚〓)。 - -修正手工调用form.submit出错的问题(redleaf)。 - -修正IE8下aspnet目录下示例出错的问题(隨风.NET、〓飚〓)。 - -完善Calendar控件,增加DateSelect事件,增加示例form/calendar.aspx(被遗忘的角落)。 - -修正DropDownList中值为空字符串的项无法响应OnSelectedIndexChanged的问题,并增加示例dropdownlist/dropdownlist_emptyvalue.aspx(⑥阿太⑥)。 - -为DropDownList增加ForceSelection和Text属性,用来控制是否强制选中项为下拉列表中的项(dennis)。 - -修正地址中包含#时在IE下回发报错的问题(22854632)。 - +重要更新:修正Grid中TemplateField与Asp.net控件的兼容性问题(幻之达、快乐的猪)。 - -简单说来,就是可以通过(System.Web.UI.WebControls.TextBox)row.FindControl("tbxGroupName");来在回发时获取Asp.net控件了。 - -增加示例grid/grid_edit.aspx。 - -增加示例grid/grid_edit_dropdownlist.aspx和grid/grid_edit_dropdownlist2.aspx,演示如何在后台绑定Grid中下拉列表数据。 - -为Grid增加UpdateTemplateFields方法,并增加示例grid/grid_edit_dropdownlist_update.aspx。 - - - -+2012-04-08 v3.1.3 - -修正Language="zh_TW"时JS报错的BUG(大雄)。 - +为DatePicker增加EnableDateSelect属性和DateSelect事件,用来在选择日期时回发页面(Landroid)。 - -为了区分AutoPostBack和EnableDateSelect两个属性,特增加示例form/datepicker_autopostback.aspx。 - -修正Accordion在Access主题下的样式问题(czfeifan)。 - -修正ImageWidth等类型为Unit的属性在AJAX改变时出错的问题(过往烟云)。 - -修正Chrome下上传文件出错的问题(渔夫子、Landroid)。 - +为FileUpload控件增加ShortFileName属性,用来获取不包含路径的客户端文件名(Landroid)。 - -FileName得到的值在IE下为完成路径,在Chrome下为文件名。 - -更新俄语语言包(vbelyaev)。 - -为Grid中的ImageField增加ImageWidth和ImageHeight(redleaf0724)。 - -为IconHelper增加String2Icon和Icon2String两个方法(redleaf0724)。 - -可以直接在ASPX中指定SortDirection和SortColumnIndex,同时增加SortColumn属性(杜志彬)。 - -修正Grid的排序标记在翻页或绑定后消失的问题(杜志彬)。 - - - -+2012-04-04 v3.1.2 - -修正IE下出现错误提示时拒绝访问的BUG(错将"about:blank"写成"about:blank;")。 - -修正Grid中自动回发复选框的BUG。 - -修正示例问题,grid/grid_rowdoubleclick.aspx,config/ajax.aspx。 - -增加如何绑定到二级属性的示例grid/grid_complex_property.aspx。 - -修正form/triggerbox.aspx中在输入框中按回车出错的BUG。 - -修正dropdownlist/dropdownlist.aspx选项中存在左右尖括号时出错的BUG。 - +更新示例grid/grid_checkboxfield.aspx,增加获取复选框选中状态的代码。 - -为CheckBoxField增加GetCheckedState方法。 - -Convert.ToBoolean(Grid1.Rows[rowIndex].States[field1.ColumnIndex]) 和 field1.GetCheckedState(rowIndex) 结果一样。 - +增加示例grid/grid_rowcheckall.aspx,用来全选反选当前行的全部复选框(第一滴冰雨)。 - -为CheckBoxField增加SetCheckedState和GetCheckedState两个方法。 - +为PanelBase增加RefreshIFrame和GetRefreshIFrameReference两个方法(郑伟)。 - -更新示例iframe/parent_postback.aspx。 - - - -+2012-04-02 v3.1.1 - +手工输入日期值时,如果输入项不匹配指定的格式,则会按照如下格式尝试解析(dennis)。 - -增加EnableChineseAltFormats,默认为true。 - -yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd。 - -修正DropDownList中ListItem的值为空字符串时不能选中的BUG(杜志彬)。 - -为DropDownList增加EnableEdit属性,用来表示是否启用编辑,以便在录入时自动过滤下拉框中的值,默认为true(随便逛逛、杜志彬、峰回路转)。 - -Nii.JSON类库更换为JSON.NET,从下个版本开始,引入FineUI.dll的同时还必须引入Newtonsoft.Json.dll(杜志彬、惊鸿沧海)。 - -为Form和SimpleForm增加LabelAlign属性,用来控制表单标签的位置(靠左,靠右,靠上)(知心叔叔)。 - -为表单控件增加FormItemClass,用来向一个表单项的外部DIV添加Css类名,参见示例other/formitemclass.aspx(凤舞天翔)。 - -为Grid增加EnableRowClick和EnableRowDoubleClick属性,可以用来控制单击或者双击行回发页面(低调的生活、凤舞天翔)。 - -修正FormRow的ColumnWidths不能指定像素值的BUG,并增加示例(form/layout_panel1.aspx)(yezie)。 - -将所有布局设置相关属性从Container移动到BoxComponent,这就意味着所有的控件都能够参与布局(见示例form/layout_panel2.aspx)。 - -DLL减肥,除去了不必要的JS、CSS以及语言资源,还把所有的内置图标移到了外面,DLL的大小由原来的6.5M减少为2.5M(liko1688、yezie、蓝色幻想)。 - -修正返回数据为空时出现JS错误的问题(第一滴冰雨、杜志彬)。 - -增加示例other/addtab.aspx,这样设置URL中hash值:window.location.hash='#/basic/hello.aspx'(稻草人)。 - -修正IE7下,窗口出现滚动条时,点击Window控件标题栏有时node为null的问题(泗水亭长)。 - +修正原生的IE7(非IE8下的IE7模式)中,iframe中的页面出现滚动条时,页面上的所有按钮都不能点击了(泗水亭长)。 - -最终发现是初始化QuickTips时出的问题,必须这样初始化Ext.QuickTips.init(false);,这是Extjs本身的兼容性问题。 - -Ext.QuickTips.init - autoReader:True to render the QuickTips container immediately to preload images.。 - -优化出错提示,现在可以显示详细的出错信息,并且会启用已经变灰的按钮(凤舞天翔)。 - -Grid绑定时简化DataBinder.Eval(Container.DataItem, "Gender")为Eval("Gender")(大石头、杜志彬)。 - - - -+2012-03-04 v3.1.0 - -修正Hidden属性失效的问题(〓飚〓、杜志彬)。 - -为PageManager增加EnableAspnetSubmitButtonAjax属性。 - -修正了在IE9兼容模式以及IE7和IE8下面,IFrame的Tab页在第二次打开时显示空白的问题(快乐的猪、恒业创达)。 - -修正Grid在第一个列设置为RenderAsRowExpander时排序出现的问题(第一滴冰雨)。 - +为可回发控件增加EnableAjaxLoading属性,用来控制是否显示Ajax提示信息(dennis)。 - -同时注意PageManager有相同的属性来控制页面级别的行为。 - +启用Visible属性,但请尽量不要使用这个属性除非你理解它的工作原理(宇洋)。 - -为了解决ExtJS本身的一个问题——如果单选框列表或者复选框列表中没有任何一项,就会出现JS错误。 - -你需要手动将那些没有任何项的单选框列表或者复选框列表的Visible属性设置false来解决这个问题。 - -为了能够在Ajax中显示隐藏元素,请使用Hidden属性(而不是Visible)。 - -使用Visible属性会导致不向浏览器输出这个元素,因此也无法通过Ajax切换Visible属性。 - -修正Form的LabelWidth属性不能控制单列表单字段的标签宽度的问题(〓飚〓、173242184、※晨曦后浪、yezie)。 - -修正HtmlEditor获取不到值的问题(あ雨换晴)。 - +按需加载ExtJS的JavaScript文件,大大加快了页面第一次的显示速度。 - -原来需要一次性下载800K的JavaScript文件,在网络较慢的环境中,单独的文件下载就需要6s左右,形成严重的水桶效应。 - -现在将ExtJS的JavaScript文件拆成如下几个部分:core、foundation、form、grid、menu、tab、tree,页面按需下载其中的一些文件。 - -将一个大文件分成几个小文件下载,也充分发挥了浏览器并行下载的特性,为更快的显示页面提供了帮助。 - -注意:这仅仅适用于页面第一次加载的情况,第二次及以后的页面加载会充分利用浏览器自身的客户端缓存,而无需再次下载这些已经下载过的JavaScript文件。 - -为Button\MenuButton\LinkButton\LinkButtonField增加ValidateMessageBox,用来控制在验证失败时是否出现提示对话框。 - - - -+2012-02-05 v3.0.1 - -修正IE7、IE8的兼容性问题(dotnet试验田)。 - -修正BUG - 弹出层如果我点击右上角的关闭按钮,再打开就不能打开(用情)。 - -修正上传控件在IE7下的问题(yfen)。 - - - -+2012-01-28 v3.0 - -修正 TwinTriggerBox 控件输入值后回车出错的问题(李渝川)。 - +Tree 控件增强。 - -Tree 控件增加 EnableIcons 属性。 - -Tree 控件的 AutoLeafIdentification 属性默认为 true(这是常用属性,不应该每次都设置)。 - -Tree 控件增加 SelectedNodeIDArray 属性。 - -简化 TreeNode 的内部结构,现在不需要写 Nodes 节点(土豆丝)。 - +Web.config 增强。 - -为 Web.config 中的 FineUI 配置节增加 EnableBigFont 配置项,适合于显示中文字体(最小字体由11px改为12px)。 - -为 Web.config 中的 FineUI 配置节增加 DebugMode 属性,用于在 ASPX 生成的 HTML 源代码中显示格式化后的 ExtJS 代码,方便调试(vazumi)。 - -为 Web.config 中的 FineUI 配置节增加 FormLabelSeparator 属性,同时 SimpleForm 和 From 控件增加 LabelSeparator 属性。 - -LabelWidth的默认值改为100px,与extjs保持一致(以前默认是80px)。 - +Button 控件增强。 - -修正 Button 设置图标后,CssClass 不起作用的问题。 - -Button 增加 IconAlign 属性。 - -为 Button 增加 Size 属性,可以设置按钮的大小。 - +表单控件增强。 - -HtmlEditor 控件增加 EnableChineseFont 属性,默认为 true(土豆丝)。 - -修正位于表单外面的 CheckBox 控件自动回发时的 JavaScript 错误。 - -表单字段增加 ShowEmptyLabel 属性(默认为 false),用来控制是否显示空白标签(示例在 /basic/login_captcha.aspx)。 - -为 Label HyperLink LinkButton 增加 Tooltip ToolTipTitle ToolTipAutoHide 三个属性,用来显示提示信息。 - -为 HyperLink LinkButton 增加 EncodeText 属性。 - -为 TextArea 增加 AutoGrowHeightMin 属性。 - -为 HyperLinkField 添加属性 DataNavigateUrlFieldsEncode,用来编码地址栏URL。 - -修正 Window 的 ESC 按键事件处理和关闭按钮事件处理不一致的情况(sa)。 - -简化客户端应用内置图标的方式,以前需要这样的代码 <%= IconHelper.GetIconUrl(Icon.Reload) %>(依然有效),现在直接 res.axd?icon=Reload 就可以了(土豆丝)。 - +修正TabStrip以及Window的内容高度异常的问题:AutoWidth和AutoHeight默认为false,FineUI不会默认渲染这个值,除非手工指定。 - -这是extjs3.4引入的特性,如果组件的autoHeight为true,则浏览器会根据组件的内容管理其高度,手工调用setHeight没有效果。 - -典型的案例,如果设置Window的AutoHeight为true,在不能最大化和改变窗体的大小。 - -修正首页打开后不能默认选中左侧第三级树节点的问题。 - +增加FileUpload控件,并增加示例页面form/fileupload.aspx。 - -修正使用文件上传控件后,返回的结果中出现HTML编码问题。 - +Grid控件增强。 - -为 WindowField 和 LinkButtonField 字段增加 Icon 和 IconUrl 两个属性(efrigate43)。 - -为全部表格列字段增加 ToolTip 属性,同时原来的 DataTooltipField 改名为 DataToolTipField。 - -增加示例 grid/grid_centercolumn.aspx,使某列居中显示。 - -为 TemplateField 增加 RenderAsRowExpander 属性,用来显示行扩展。增加示例 /grid/grid_rowexpander.aspx。 - +为所有控件增加 Ajax 属性 CssClass 和 CssStyle(goansonpan)。 - -增加示例 other/cssstyle.aspx。 - -示例工程,在切换示例时同时修改地址栏,以便页面刷新后也能回到最后一次浏览的页面。 - -增加 Table、HBox 和 VBox三种布局,并对所有布局示例进行重构。 - +单选框控件增强。 - -为 RadioButtonList 增加 ColumnVertical、Required 和 RequiredMessage 三个属性。 - -增加 CheckBoxList 控件,并增加示例 /form/checkboxlist.aspx。 - -增加示例 /aspnet/aspnet_literal.aspx。 - +将Button和MenuItem的Menus属性改为Menu属性,毕竟一个按钮只可能有一个菜单,这样也简化了ASPX中的标签。 - -同时更新/button/button_menu.aspx和/other/menu_dynamic.aspx两个示例。 - - - -+2011-05-09 v2.3.5 - -大部分控件的设计时支持。 - -从下个版本开始,我将会启动本地化战略调整方案,简体中文将会作为官方支持语言。 - - - -+2011-05-02 v2.3.4 - -更新extjs版本至v3.3.3(GMz)。 - -修正问题#9869(Pablogrind)。 - -为Region控件增加CMargins属性 - issue #9597(ronnieoverby)。 - +修正问题#9448(tonyredondo). - -这个问题仅在树控件中出现,需要在客户端回发时使用UniqueID。 - -修正Grid控件排序图标显示的问题。 - -修正X.utils.updateViewState中存在的问题,它导致Grid的第一个示例在回发两次后出错。 - - - -+2011-02-22 v2.3.3 - -更新extjs版本至v3.3.1。 - -更新Ext.ux.TabCloseMenu的多语言支持(en, zh_CN, zh_TW)。 - - - -+2010-09-29 v2.3.2 - -不绑定任何数据到Grid时,确保页面不会出错。 - -修正了Grid列属性DataFormatString的一个bug,比如设置{0:yy-MM-dd HH:mm}时没有效果。 - -修正下拉列表控件不能绑定DataTable的BUG(RedOcean)。 - -增加土耳其语言资料文件(abdullaharslan)。 - -Grid的BoundField增加NullDisplayText属性,用于处理数据库中的null值,如果没有设置则默认为空字符串。 - -修正DatePicker中的一个bug(31/01/2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(OktaEndy)。 - -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(ben.zhou)。 - -应用补丁#6593, #6621(vbelyaev)。 - +修正IE7下Grid分页速度慢(youwei, StevenGuan, hazardvn, gavindou, ttjacky)。 - -实际上IE7下所有的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 - -俄语翻译(vbelyaev)。 - - - -+2010-06-30 v2.3.1 - -FineUI控件将不在依赖ViewState,减少1/4左右的HTTP数据传输量。 - -控件和示例的增强。 - - - -+2010-03-28 v2.2.1 - +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(mmdcup)。 - -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(zhaowenke)。 - -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 - -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 - +集成Extjs最新版本v3.1.1。 - -增加一个新的Theme - Access。 - -修正了Firefox下Zoom In/Out时页面消失的BUG。 - -删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 - - - -+2010-01-31 v2.2.0 - -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(261629698)。 - +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。 - -增加示例tabstrip/tabstrip_addtab.aspx。 - -重构了示例网站的架构,目前只有一层IFrame结构。 - -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 - -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(zqmars)。 - -Window控件更新。 - -关闭按钮默认直接关闭,不会弹出确认对话框。 - -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 - -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 - -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 - -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 - -WindowPosition默认居中,而不是黄金分割位置。 - +Button, Window等控件弹出位置属性的变化。 - -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 - -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 - -Confirm.GetShowReference的最后一个参数target变为枚举类型。 - -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 - -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 - - - -+2010-01-06 v2.1.9 - -集成Extjs最新版本v3.1.0。 - -修正灰色皮肤的CSS问题。 - -修正Grid的列名中不能包含中文字符的BUG(davidwen)。 - -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 - -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(Violet)。 - -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 - -修正了弹出菜单的位置在Firefox下不正确的BUG(eroach)。 - -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 - -使用Hidden来显示隐藏FineUI控件,而不是使用Visible属性(Visible目前设置为只读属性)。 - -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 - -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 - -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(anson)。 - -修正绑定到Tree的XMLDocument中Icon属性映射错误(nopnop9)。 - -修正HtmlEditor不能编辑的BUG(TheBox)。 - -修正IE下有时会出现空白页面的情况(olivia919)。 - - - -+2009-12-06 v2.1.8 - -修正了使用IFrame的Window关闭后不能再次打开的BUG(alexa99)。 - -修正了IE下Grid中的一个JS问题(lqm4108)。 - -修正Alert消息中引号未编码导致的JS错误(sun1299shine)。 - +集成extjs3.0.3。 - -修正弹出对话框的宽度计算错误(会保持最小的状态)。 - -增加新的皮肤Gray。 - -为示例工程添加改变语言和皮肤的下拉列表。 - -为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。 - - - -+2009-12-01 v2.1.7 - -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(eroach)。 - -修正一些书写错误(bmck)。 - -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(bmck)。 - -BorderPanel更名为RegionPanel。 - -DropDownList拥有MarkInvalid方法(sun1299shine)。 - -增加中国的省市县三级联动示例(data/shengshixian.aspx)(Blues T)。 - -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(eroach)。 - -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(yymaoji)。 - - - -+2009-11-26 v2.1.6 - +修正动态创建Grid列的BUG(gxpan)。 - -增加示例(data/grid_dynamic_columns.aspx)。 - -修正Form不能自适应浏览器大小的改变(kaywood)(WorkItem#6309)。 - -增加重载方法Alert.Show(message, title, icon)(TheBox)(WorkItem#6353)。 - -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(BluesT)。 - -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 - - - -+2009-11-21 v2.1.5 - +Tree优化。 - -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 - -GetNodeById更名为FindNode,保持和FindControl一致命名。 - -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 - -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 - -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(wjl_wjl520)。 - +TreeNode的属性NodeId被重命名为NodeID,这是FineUI中的一个命名约定。 - -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 - -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 - -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 - -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 - -增加示例(other/custom_postback.aspx)(thebox)。 - -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 - -为Tree增加AutoLeafIdentification属性。 - -增加示例(tree_auto_leaf_identification.aspx)(wdrabbit)。 - - - -+2009-11-17 v2.1.4 - -修正Window的关闭按钮提示信息一直是中文的BUG(thebox)。 - -部分FineUI控件的设计时支持(会在后续版本中逐步完善)。 - -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 - -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 - -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(dk3214)。 - +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 - -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 - +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(sun1299shine)。 - -增加示例:form/form_validate.aspx - - - -+2009-10-19 v2.1.3 - +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 - -FineUI支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 - -加载s.gif图片在本机进行,不会请求extjs.com远程资源(efrigate43,abaocoole)。 - -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 - -更新/basic/login.aspx示例,使用验证图片(kedee)。 - -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_rowclick.aspx(chenguizhu2006)。 - -为所有的表单字段增加AJAX属性ReadOnly(skydb)。 - -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(geruger)。 - - - -+2009-09-27 v2.1.2 - -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 - -修正RELEASE版本下多语言加载的BUG(yigehaoren)。 - -增加pt_BR语言,由Ujvari提供。 - +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 - -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 - -所有Icon的列表在icon.aspx。 - -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 - - - -+2009-09-15 v2.1.1 - -修正不能动态修改AccordionPane属性Items的BUG。 - +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 - -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 - +为FineUI.Alert.Show增加点击确定的JavaScript回调函数。 - -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 - -FineUI.Alert.Show("参数错误!", String.Empty, FineUI.ActiveWindow.GetCloseReference()); - +TreeNode的前面的多选框可以自动回发了。 - -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 - -示例在:http://demo.fineui.com/data/tree_run.aspx - -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 - -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(Steve.Wei)。 - -添加定时器控件Timer,用来定时发起AJAX请求。 - - - -+2009-09-06 v2.1.0 - -Button的Pressed属性值能够正确的反映客户端的变化。 - -优化Tree控件的AJAX实现。 - +为页面的Form添加autocomplete="off"属性。 - -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 - +添加对extjs3.0中所有语言的支持。 - -FineUI扩展的多语言包在js\languages\fineui目录下,目前只有en,zh_CN,zh_TW三种实现 - -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 - - - -+2009-09-01 v2.0.9 - -为FineUI.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 - +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 - -这将会影响所有的aspx页面,所以要特别关注。 - -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). - +所有的面板默认有两个集合属性(Toolbars和Items). - -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). - -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 - -祝你生日快乐 - 小师妹妹。 - - - -+2009-08-29 v2.0.8 - -FineUI支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 - -将所有的示例转化为英语版本。 - -修正Tree控件的一个BUG(定义Mappings属性时)。 - +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 - -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 - +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 - -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 - - - -+2009-08-25 v2.0.7 - -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 - -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 - -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(503684912)。 - -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(your568)。 - -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 - -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 - -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 - +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 - -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 - -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 - - - -+2009-08-14 v2.0.6 - -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(shguo)。 - -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 - -优化Tree节点的NodeId自动生成,减少ViewState占用。 - - - -+2009-08-09 v2.0 beta5 - +FineUI和Asp.net的提交按钮兼容问题(千帆)。 - -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" - --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 - --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 - +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 - -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 - -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 - -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 - -修正ToolbarText的文本在AJAX下更新的BUG。 - -Button的Pressed属性在AJAX可更新(mgzhenhong)。 - -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 - - - -+2009-08-02 v2.0 beta4 - +和Asp.Net的Forms Authentication兼容[mgzhenhong]。 - -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 - -现在支持Response.Redirect,你可以选择Response.Redirect或者FineUI.PageContext.Redirect重定向页面,两者效果一样。 - -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 - -Button增加Type属性(button,reset,submit)[mgzhenhong]。 - -修正Alert.Show方法不能指定文本前图片的BUG[xmq&mgzhenhong]。 - -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 - -增加Menu和Accordion的示例。 - -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[xmq&mgzhenhong]。 - - - -+2009-07-22 v2.0 beta3 - -兼容FCKEditor。 - -在IE8.0,Firefox3.5下测试通过。以后FineUI将不会对IE6.0提供支持。 - - - -+2009-07-13 v2.0 beta2 - -集成extjs最新版本v3.0。 - +兼容IE6.0-7.0-8.0。 - -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 - -目前先禁用IE6.0-7.0的QuickTips。 - -优化底层JavaScript。 - - - -+2009-07-05 v2.0 beta1 - -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 - -使用YUI Compressor压缩JavaScript和CSS文件。 - -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 - -FineUI自身的CSS会紧挨着页面<title>标签引入,这样在<head>中自定义的样式可以覆盖FineUI缺省样式。 - +Alert对话框会遮挡所有的Window窗口。 - -使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 - -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 - -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 - -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 - -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 - -更新示例工程。 - - - -+2009-03-25 v1.3.1 - -Tree在AJAX回发展开节点时JS错误[xlli]。 - -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。 - -页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx) - -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。 - - - -+2009-03-03 v1.3.0 - -如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[xlli]。 - -如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。 - -页面上放置FineUI-Button和ASP.NET-Button,则点击FineUI-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。 - -FineUI内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。 - +如果以前你听过不要在FineUI工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在FineUI控件和ASP.NET标准控件和平共处了。 - -如果一个ASP.NET按钮控件要使用FineUI的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 - -如果要在一次FineUI的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 - - - -+2009-02-27 v1.2 beta9 - -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。 - -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。 - +系统底层代码优化(主要是Javascript的封装和BUG修复)。 - -底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。 - -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 - ---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 - -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 - -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 - ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! - -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 - ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 - -Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。 - ---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 - ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 - ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 - -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 - ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 - -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 - -CurrentActiveWindow改名为ActiveWindow。 - -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) - ---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。 - - - -+2009-02-23 v1.2 beta8 - -ContentPanel中内容不能自动扩展高度的BUG[huihuang]。 - -DropDownList在Ajax回发时不能计算模拟树的数据[huihuang]。 - -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。 - -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。 - -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。 - +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。 - - - -+2008-10-28 v1.2 beta7 - -DropDownList没有选中任何一项,回发时报错[huihuang]。 - -Window显示位置不对,以及不能拖动的BUG[huihuang]。 - +PageContext优化。 - -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 - -去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。 - -Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[jqpeng]。 - -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[jqpeng]。 - -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。 - -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。 - -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。 - -AccordionLink当鼠标移上和移开时,有背景色的变化效果[huihuang]。 - +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。 - -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 - - - -+2008-10-20 v1.2 beta6 - +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。 - -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 - +DropDownList优化。 - -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 - 现在可以方便的在后台DropDownList1.Items.Insert(0, new FineUI.ListItem("全部", "-1"));来达到同样的效果。 - +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[jqpeng]。 - -和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; - -ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。 - -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。 - -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。 - +为所有控件属性增加在VS中的智能提示。 - -需要将FineUI.XML和FineUI.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 - +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。 - -TriggerIconType.Default -> TriggerIconType.None - -SystemIconType.Empty -> SystemIconType.None - -RegexPattern.USER_DEFINED -> RegexPattern.None - -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。 - +注意:一个属性可以拥有多个值的情况。 - -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 - -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 - +AccordionLink实现为控件。 - -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[jima]。 - +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。 - - - -+2008-10-15 v1.2 beta5 - -验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。 - +优化下拉列表。 - -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 - -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 - -DropDownList不支持EmptyText属性。 - -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 - -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 - - - -+2008-09-27 v1.2 beta4 - +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。 - -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 - -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 - -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。 - +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。 - -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上<Items>标签。 - -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 - -通过BodyPadding控制链接列表的边距。 - -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。 - - - -+2008-09-25 v1.2 beta3 - +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。 - -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading - -TabStrip/Toolbar - -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。 - -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。 - +大部分容器的子控件集合更正为Items(以前有些是Rows)。 - -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 - -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 - -保留TabStrip的Tabs(TabCollection)属性。 - -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 - -预祝今晚神七发射成功。 - - - -+2008-09-22 v1.2 beta2 - +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [xmzhu]。 - -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时数组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 - +代码优化与设计时支持(示例中表单控件都已支持设计)。 - -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox - -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox - -CheckBox/RadioButton/RadioButtonList/DropDownList - -Grid - - - -+2008-09-19 v1.2 beta1 - -Image/LinkButton/HyperLink增加一些Ajax可更新属性。 - +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。 - -修正Form/SimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。 - -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [jbzhang]。 - -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果) - - - -+2008-09-09 v1.1 - +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在控件中。 - -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 - -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。 - -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。 - +布局整理。 - -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 - -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 - -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor - - - -+2008-09-08 v1.1 beta7 - -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [huayu]。 - -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。 - +大部分的FineUI控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。 - -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 - -US的FineUI改造强烈依赖于此属性,这个版本发布后可以继续。 - -网报中唯一没有用到FineUIAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 - - - -+2008-09-04 v1.1 beta6 - -PageContext.Redirect支持普通页面转向和FineUIAjax下页面转向。 - +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[xmzhu]。 - -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 - -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 - -DropDownList在Ajax时应该先更新数据再设置选定项 [xmzhu]。 - -Button/MenuButton增加Ajax可更新属性OnClientClick [xmzhu]。 - -Tree的Ajax支持(尚需优化)。 - - - -+2008-09-02 v1.1 beta5 - -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维数组),而不是[](一维数组)。 - -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。 - -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。 - -不要使用Asp.net的控件HiddenField,而是使用FineUI的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。 - -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。 - -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。 - -增加两个Theme[Slate/Black](样式尚需完善)。 - - - -+2008-09-01 v1.1 beta4 - -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。 - -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。 - -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。 - -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。 - +完善Ajax。 - -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 - -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 - -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 - -ToolbarText增加Ajax可更新属性Text。 - - - -+2008-08-31 v1.1 beta3 - -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。 - -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。 - +安全的Ajax设计。 - -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 - -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 - -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 - -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。 - - - -+2008-08-29 v1.1 beta1 - +Window控件是否弹出的状态在回发时维持。 - -控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 - +完全抛弃Asp.NetAjax,FineUI控件内置Ajax支持。 - -这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 - -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 - +在这种设计下,其实可以完全抛弃Javascript。 - -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 - -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 - -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 - +目前FineUIAjax的限制。 - -只对FineUI控件起作用,对Asp.net控件不起作用。 - -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 - -对改变控件的Visible属性会有错误。 - -Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。 - -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。 - -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。 - -Grid选中行的状态在第一次回发时不能保持的BUG。 - - - -+2008-08-26 v1.0 - +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 - -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 - +优化弹出窗口中IFrame的显示速度。 - -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 - -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致) - +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。 - -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 - -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。 - +TabStrip中非当前Tab会延迟渲染。 - -这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染时间。 - -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 - -不能比较两个DataPicker大小的BUG。 - -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。 - -全新的FineUI.Examples(基础知识/表单控件/数据绑定/容器布局/IFrame框架)。 - - - -+2008-08-19 v0.4 beta6 - +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。 - -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 - -RadioButtonList放在在BorderLayout中显示不了的BUG [zgjiang2]。 - +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx) - -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; - +需要先回发页面再弹出IFrame窗口。 - -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 - -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 - - - -+2008-08-15 v0.4 beta5 - -点击关闭窗口的按钮,在IE6下会有JS错误。 - -增加BorderLayout控件,示例在iframe/borderlayout.aspx。 - +Radiobuttonlist显示有重影(示例在radio.aspx)。 - -全新的样式。 - -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 - -GetValueReference取得的值不正确的BUG。 - -动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx) - +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[xmzhu]。 - -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 - -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) - - - -+2008-08-13 v0.4 beta4 - -点击关闭窗口的按钮,在IE下会有JS错误。 - -Window的右上角关闭图标增加提示,优化事件响应。 - -Window的代码重构。 - +修正一个的内存泄漏。 - -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 - -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 - -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 - -IE窗口最小化时,IE会自动进行垃圾回收。 - - - -+2008-08-12 v0.4 beta3 - -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。 - -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。 - +页面正在加载的提示尽早的显示出来。 - -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 - -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 - - - -+2008-08-08 v0.4 beta2 - -TabStrip延时加载出错。 - -Window的IFrameUrl处理的BUG,比如Pages_FineUI目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_FineUI/FE_ApplyEditor.aspx。 - -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。 - -实现网报首页下拉菜单和左侧菜单的导航功能。 - -Window的创建在页面显示后进行,不计算在js渲染时间内。 - -优化费用申请页面(尽量减少不必要的层次嵌套)。 - -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。 - -Window中的保存并关闭按钮和Asp.netAjax冲突。 - -优化关闭Window的js脚本,减少写到页面的js大小。 - -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。 - - - -+2008-08-05 v0.4 beta1 - -DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。 - -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。 - -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[dcding]。 - -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。 - +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [xmzhu]。 - -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 - -一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。 - -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 - +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。 - -这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 - -每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。 - -TextField等表单字段增加Readonly属性。 - +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。 - -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下) - +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) - -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 - -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 - -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) - +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) - -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 - -示例4,弹出窗口中的弹出窗口。 - -对整个Examples更新测试。 - - - -+2008-07-31 v0.3 beta12 - -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。 - -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。 - -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。 - -Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [zgjiang2]。 - +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。 - -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 - -参照Yslow的评分规则,将JS文件引用由head移动到body中。 - -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。 - +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx) - -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 - - - -+2008-07-24 v0.3 beta11 - -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [jima]。 - -Window在回发时设置的Title不起作用的BUG。 - -增加Image控件 [jima]。 - -Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [zgjiang2]。 - -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。 - -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [xmzhu]。 - -过滤提示消息中的换行符(转换为<br/>),否则提示信息可能导致页面渲染错误 [dcding]。 - - - -+2008-07-23 v0.3 beta10 - +完善Tree控件。 - -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 - -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 - -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 - -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码! - -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。 - - - -+2008-07-22 v0.3 beta9 - +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。 - -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 - +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。 - -虽然最后未能解决<div style="width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;"><div style="width: 16px; height: 18px; float: left;">##</div>差旅交通费</div>在IE和Firefox下显示的不同效果。 - -但是通过用<img src="##" />来代替<div style="background:url(##)" />,从而实现FF和IE下样式的统一。 - -刚看到old9的解决方案:把“差旅交通费”改成“<span style="margin-right: -1000px;">差旅交通费</span>”,在IE下和FF下的都不换行,:-) - -LinkButton增加OnClick事件 [huihuang]。 - -Window通过设置IFrameUrl和Popup不起作用的BUG。[xmzhu]。 - +增加树控件(Tree)(示例在tree2.aspx)。 - -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 - -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 - -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 - - - -+2008-07-16 v0.3 beta8 - +ContentPanel中放置FineUI控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。 - -隐蔽性非常强,原来在ContentPanel中渲染FineUI控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 - 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 - -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 - +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。 - -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 - -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: - 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): - 示例在 Site.Master 页面。 - +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了! - -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), - 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 - - - -+2008-07-14 v0.3 beta6 - -增加FlashObject控件。 - -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。 - -Accordion选中样式微调。 - -预加载Form表单出错时提示信息的背景图片。 - +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。 - -因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 - -改变Grid中静态的CheckBoxField图片。 - -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx) - - - -+2008-07-12 v0.3 beta5 - -页面菜单Toolbar的分割符和背景不相融合。 - -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。 - -如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。 - +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。 - -这是由于ajax后执行的javascript中不能有return false语句。 - +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [xmzhu]。 - -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。 - -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。 - +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [xmzhu]。 - -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 - -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[jima]。 - +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。 - -增加SplitButton控件。 - - - -+2008-07-09 v0.3 beta4 - -DataPicker默认的日期格式为(yyyy-MM-dd)。 - +Form表单字段(TextBox,DropDownList...)之间可以比较大小 [huihuang]。 - -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 - +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[jima]。 - -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 - -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [xmzhu]。 - -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[jima]。 - +表单字段Enable=false时显示颜色太浅 [jima]。 - -覆盖缺省样式的.x-item-disabled,设置不透明。 - - - -+2008-07-08 v0.3 beta3 - -Grid没有数据,向后翻页按钮可以点击的BUG [huihuang]。 - +增加HiddenField控件。 - -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 - +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。 - -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 - -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。 - +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。 - -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 - -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。 - - - -+2008-07-07 v0.3 beta2 - +增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。 - -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 - -示例在ajax3.aspx/content_page4.aspx。 - -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 - - - -+2008-07-03 v0.3 beta1 - +容器控件的AutoHeight/AutoWidth默认为false。 - -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 - +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。 - -也可以在ContentPanel中放置用户控件,注意两者的区别。 - +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。 - +支持Asp.net ajax异步加载。 - -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 - -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 - - - -+2008-07-02 v0.2 beta12 - +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx) - -支持Iframe内按钮和window右上角关闭按钮。 - -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 - +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。 - -在Firefox下还有问题。 - +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。 - -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 - -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 - +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。 - -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。 - -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。 - - - -+2008-06-30 v0.2 beta11 - -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。 - -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录时总记录数不会变化 [zgjiang2]。 - -关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [zgjiang2](示例在window_postback.aspx)。 - -如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。 - +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx) - -目前还不支持Window右上角关闭按钮的提示保存功能。 - -Master/Content的内容页中Grid的Sort事件不起作用的BUG [zgjiang2]。 - -Grid中的LinkButtonField设置ConfirmText会出错 [huihuang]。 - -增加静态类Confirm。 - - - -+2008-06-27 v0.2 beta10 - +Grid完善。 - -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 - -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 - -切换分页时清空选中的值 [jqpeng]。 - -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [xmzhu] (示例在grid_prerowdatabound.aspx)。 - -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 - - - -+2008-06-25 v0.2 beta9 - +Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx/simpleform.aspx) - -在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。 - +关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。 - +Grid完善。 - -去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。 - +EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx) - -使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。 - +增加AllowPaging属性。(示例在grid_paging.aspx) - -使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。 - +数据库分页支持。(示例在grid_database_paging.aspx) - -使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIndex = e.NewPageIndex;LoadPageData(Grid1.PageIndex);OK。 - -增加CheckBox绑定,可响应回发事件 [zgjiang2](示例在grid.aspx)。 - - - -+2008-06-23 v0.2 beta8 - -SimpleForm和Form可以在窗口大小发生变化时自动调整宽度。 - -Accordion右侧菜单增加鼠标hover的样式。 - +TriggerBox。 - -设置Enable=false,不会响应回车和点击事件。 - -增加EnableTextBox属性,只禁用文本框,不禁用Trigger。 - +向弹出的窗口动态传递页面数据。 - -解决方法和Button的ConfirmText的使用一样(<script>)。 - -Window1.GetShowReference(String.Format("triggerbox_iframe2.aspx?param1=<script>{0}</script>", TriggerBox2.GetValueReference())) (示例在textbox.aspx/triggerbox_iframe2.aspx)。 - -Grid的WindowField也支持将页面中的文本框等表单元素的值作为参数传递到Iframe页面 [zgjiang2]。(示例在grid_iframe.aspx/simpleform.aspx) - -Form中只有一行,并且某一列的字段设置Visible=false时会渲染出错的BUG [zgjiang2]。 - -Label/HyperLink在Form外面时不会占据一行的位置。 - -增加LinkButton控件。(示例在hyperlink.aspx) - +Grid完善。 - -增加RowDataBound事件 [zgjiang2]。(示例在grid.aspx) - -增加LinkButtonField [zgjiang2]。(示例在grid.aspx) - - - -+2008-06-20 v0.2 beta7 - -在链接中调用Window1.GetShowReference()出现js错误的BUG [clyin2]。 - -容器的EnableLightBackgroundColor在Form中有多列时渲染不正常 [zgjiang2]。 - -Button增加ConfirmIcon属性(默认MessageBoxIcon.Warning),两个按钮文本“确定”和“取消”[zgjiang2]。 - +Grid上面的Button要显示类似“你确定要删除 2 条信息吗?”这样的信息 [zgjiang2](示例在content_page1.aspx中)。 - -btnConfirmButton.ConfirmText = String.Format("你确定要删除 <b><script>{0}</script></b> 条信息吗?<br/>这是不可恢复操作,确认删除请选择“确定”。", Grid2.GetSelectCountReference());,系统会把<script></script>之间的内容解析为js代码。 - -TriggerBox响应回车按键 [zgjiang2]。 - +怎样查看Window中iframe页面的高度(示例在simpleform.aspx)。 - -在页面添加function onReady(){alert(Ext.get('<%= Panel1.ClientID %>').getSize().height);}脚本即可。 - -如果iframe中页面高579,则要设置Window的高度为579+31=610px(ie和firefox下少有不同,以ie下为准)。 - +Form中的表单字段不能设置Visible=false属性 [zgjiang2]。 - -Grid如果没有绑定数据,在回发时渲染出错 [zgjiang2](示例在budget.aspx)。 - -参考Asp.net自身的控件,DropDownList的SelectedIndex属性只能在后台代码中设置(以前在ASPX代码中设置的都要改动),就好像使用Accordion的ActiveIndex一样。 - -HyperLink增加OnClientClick属性 [jima](示例在hyperlink.aspx)。 - +增加RadioButton控件(可以模拟竖排RadioButtonList),在回发时保持状态 (示例在radio.aspx)。 - -增加RadioButtonList控件,可以在回发时保持状态,可以绑定数据(用法和DropDownList类似) (示例在radio.aspx)。 - -Grid在绑定DataBind()后的DataKeys还是空的BUG [zgjiang2]。 - -TabStrip中的Tab支持IFrame (IE下显示还有问题)。 - +已知问题(已经在v0.2 beta9中解决) - -Grid如果有选择框,则不能客户端排序,否则客户端排序后再回发取得的选中项不正确,目前是增加一个EnableClientSort属性,默认为false。 - - - -+2008-06-19 v0.2 beta6 - +Accordion完善。 - -ActiveIndex只能在代码中设置,不能在ASPX源码中设置。 - -AccordionPanel选中时标题的背景是高亮的(参考CRM实现)[zgjiang2]。 - -TabStrip中有多个Tab时,只有当前显示的Tab内容布局正确,其他不正确 [jima]。 - -IE6下表单字段(比如TextBox)下面的线显示不了(每个页面都应该添加正确的DOCTYPE:xhtml1-transitional)。 - -Utility改名为PageContext,和关闭Window相关的代码移动到CurrentActiveWindow(表示当前激活的窗口)。 - +Window完善。 - -Firefox下,用服务器端隐藏窗体控件时还有问题(Window内部放置一个ContentPanel)的BUG。 - -Window位置WindowPositionType(GoldenSection/Center)(默认使用黄金分割点)(如果不设置Top/Left),不会超出屏幕范围 [clyin2]。 - -CloseAction仅仅是点击关闭按钮的动作(示例在textbox.aspx)。 - -Window中网页的按钮动作通过注册特定的JS脚来实现(CurrentActiveWindow静态类下面的GetCloseReference/GetCloseRefreshReference/GetClosePostBackReference)(示例在textbox.aspx)。 - -GetShowReference(string windowTitle, string iframeUrl)定义改变成GetShowReference(string iframeUrl, string windowTitle),这个和以前的版本不兼容,需要注意! - -容器控件增加EnableLightBackgroundColor属性,此时背景色较浅。 - +增加TriggerBox。 - -服务器端事件TriggerClick。 - +弹出Window,关闭返回值(示例在textbox.aspx/triggerbox_iframe2.aspx)。 - +这个过程非常有意思: - -1.首先在弹出窗口之前,我们通过 TriggerBox1.OnClientTriggerClick = Window1.GetSaveStateReference(TriggerBox1.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx") + "return false;"; 把TriggerBox1的客户端id保存在Window1的js对象中,然后弹出窗口。 - -2.弹出窗口中点击一个按钮处理业务逻辑,并把结果返回给TriggerBox1的代码时:PageContext.RegisterStartupScript(CurrentActiveWindow.GetWriteBackValueReference(CurrentActiveWindow.GetLoadStateReference(), TextBox1.Text) + CurrentActiveWindow.GetClosePostBackReference());取得保存在Window1的js对象中的TriggerBox1的客户端id,然后把TextBox1的值赋给父页面的TriggerBox1,最后关闭Window。 - -3.OK。 - -如果弹出窗口时设置: TriggerBox1.OnClientTriggerClick = Window1.GetSaveStateReference(tbxName.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx") + "return false;"; 则返回时会把内容写到tbxName的文本框中,:-) - -这种方式的扩展性也很好,我们可以点击任一个按钮,弹出窗口,然后把窗口的返回值赋给任意一个文本框。只需要在父页面中:btnSetValueToName.OnClientClick = Window1.GetSaveStateReference(tbxName.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx");(注意:如果最后不加"return false;",则需要设置按钮的EnablePostBack=false,否则点击按钮会回发页面。) - +还有一种常见的应用:从窗口需要返回两个值,一个是给用户看的值(Text),另一个是隐藏的值(Value)(当然也可以返回多个值)。 - -1.首先在Window上下文中保存三个文本框的ClientID: TriggerBox2.OnClientTriggerClick = Window1.GetSaveStateReference(TriggerBox2.ClientID, TriggerBox2_TextBox.ClientID, TriggerBox2_TextBox2.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx"); - -2.然后在Window返回时向这三个文本框赋值:PageContext.RegisterStartupScript(CurrentActiveWindow.GetWriteBackValueReference(CurrentActiveWindow.GetLoadStateReference(), TextBox1.Text, TextBox1.Text + " 的值", TextBox1.Text + " 的值2") + CurrentActiveWindow.GetCloseReference()); - -3.OK。 - -4.实际执行的javascript代码还是蛮复杂的(if(!activeWindow){var activeWindow=parent.box.window_default_group.getActive();if(!activeWindow)return false;}var controlClientIds=(function(){return eval('parent.box.'+activeWindow.id+'.box_string_state');})();if(typeof(controlClientIds)=='string'){eval('parent.box.'+controlClientIds).setValue('这是返回的值');}else{eval('parent.box.'+controlClientIds[0]).setValue('这是返回的值');var controlValues=['这是返回的值 的值','这是返回的值 的值2'];var controlCount=Math.min(controlClientIds.length-1,controlValues.length);for(var i=0;i<controlCount;i++){eval('parent.box.'+controlClientIds[i+1]).setValue(controlValues[i]);}}if(!activeWindow){var activeWindow=parent.box.window_default_group.getActive();if(!activeWindow)return false;}eval('parent.box.'+activeWindow.id+'_hide();');),不过不用管它,呵呵。 - -Button/TriggerBox增加EnablePostBack属性,EnablePostBack=false则点击按钮不会回发(这样OnClientClick时就不必写"return false;")(示例在triggerbox_iframe2.aspx)。 - - - -+2008-06-17 v0.2 beta4 - +Window完善。 - -标题前面的图标显示位置不正确(window.aspx)。 - -Window窗体有背景色的BUG(应该为白色)(window.aspx)。 - -Window的滚动条的颜色不对(button_iframe.aspx)。 - -登陆页面脚本错误,去掉Window控件的DefaultButtonID属性。 - +Grid,WindowField的DataWindowTitleFormatString属性有问题。 - -默认页面字体大小为12px。 - -容器控件(Panel,Accordion等)增加EnableLargeHeader属性(默认为false),同时删除Accordion的UsePanelHeaderStyle属性。 - -Form/SimpleForm的LabelWidth默认为80px(原来的是100px)。 - -表单字段控件增加FocusOnPageLoad属性,可以在页面加载完毕后获得焦点(示例在login.aspx)。 - -单行文本框(TextBox/NumberBox/DataPicker/DropDownList)增加NextFocusControlID属性,指定回车时获取焦点的控件(这样login.aspx可以实现两种效果:1.用户名框回车焦点到密码框,密码框回车提交页面;2.用户名框或密码框回车都提交页面)。 - -删除图标替换,按钮的关闭/删除/保存并继续等图标可以使用属性SystemIcon(枚举类型)来指定。 - - - -+2008-06-16 v0.2 beta3 - +Accordion完善(示例在content_page1.aspx)。 - -名称变化,增加AccordionPanel子控件,增加属性(ShowCollapseTool/EnableActiveOnTop/EnableFill/EnableAnimate)。 - -增加ActiveIndex属性,并在回发时保持状态。 - -增加UsePanelHeaderStyle属性,将AccordionPanel的标题渲染成Panel的标题样式。 - -标题前面的图标大小必须是:24*24,所有容器控件(Panel/Form等)的标题前面的图标都要求24*24。 - -页面菜单样式调整(设置Toolbar的IsPageMenu="true")。 - -滚动条和链接缺省样式的定义(在dll中定义)。 - - - -+2008-06-13 v0.2 beta2 - +Master/Content完善。 - -Content中弹出的Window窗口只能在Content中移动的BUG [leizhang5&clyin2&jima]。 - -Content下的最外层Panel不用设置AutoHeight=false&AutoWidth=false,这个是默认的 [leizhang5]。 - -Grid的工具条上的新增按钮和检查是否选中按钮出错 [zgjiang2]。(示例在content_page1.aspx) - +优化框架的视图状态(涉及所有的容器控件)。 - +参考Asp.net Ajax Extension对视图状态的处理方式。 - -所有Box控件实现INamingContainer接口。 - -对于像Panel这样的容器控件,设置[ParseChildren(true)] & [PersistChildren(true)],也就是说把控件内容作为属性,但是把控件的子控件作为控件保持状态,这样就不用手工一层一层的向下维护属性的视图状态了。 - -在控件的OnInit中,EnsureChildControls(),这样可以确保在Page_Load时引用的控件的ClientID是正确的(有层次结构)。 - -修正“ContentPanel放置在Panel等控件中,不能在回发时保持状态”的BUG。 - -pagelayout2.aspx中文本框的状态不能保持,其实时渲染时没有放在form中,参考extjs的开源实现FormViewport。 - -Master/Content的Content中的控件可以保持状态。 - -Grid中的WindowField,修改DataTitleField为DataWindowTitleField。 - -DropDownList的Traditional默认为true。 - - - -+2008-06-12 v0.2 beta1 - +Grid完善。 - +Grid控件中的列增加Visible属性,可以隐藏/显示列,使用:Grid1.Columns[0].Hidden = false; (Grid前面的多选框列和序号列不计算在内) [zgjiang2]。 - -CheckBoxField不使用CheckBox的图片,这样容易和Grid自身的多选框混淆 [zgjiang2]。 - -如果DataSource是对象的集合,则支持复合对象,也即时可以绑定到UserInfo.UserName的形式(示例在grid_complex.aspx)[zgjiang2]。 - -如果Grid放在Panel中,则WindowField不起作用,已经修正 [zgjiang2&jima]。 - -ToolBar内的Button不能设置Visible=false的BUG(同时容器控件中的子控件也面临同样BUG,并修正)[zgjiang2]。 - -Panel中只放置一个Toolbar,不放其他控件时会出错,已经修正 [zgjiang2]。 - +DropDownList完善。 - -和Grid的DataSource一样,DataTextField/DataValueField也支持复合对象的绑定。 - -自动回发的事件被激发两次 [zgjiang2]。 - +TabStrip中放置Form时显示不正确 [jima]。 - +页面布局完善。 - -容器控件增加属性(Layout=Anchor/Fit,AutoScroll,AutoHeight,AutoWidth,AnchorValue)。 - -Layout="",自动扩展的宽度和高度(autoHeight=true 并且 autoWidth=true)。 - -Layout=Fit,容器控件A中只能有一个子控件B,并且B会填充整个A(示例在layout_fit.aspx)。 - +Layout=Anchor,容器控件A可以包含很多子控件B1,B2,B3...通过B1,B2,B3的属性AnchorValue控制每个控件占据的宽度和高度(示例在layout_anchor.aspx)。 - -常用数据(每行表单26px,如果有一个三行的表单,并且设置了BodyPadding="5px",则此表单占据高度为 26px*3+5px*2=88px)。 - -经典查询页面布局为:Panel(Layout=Anchor)[Form(AnchorValue='100%'), Panel(Layout=Fit & AnchorValue='100% -88')[Grid]]。 - 其中"100% -88":第一个参数表示宽度,可以是百分比也可以是一个负整数(比如-56意思是距离右边框56px);第二个参数表示高度,可以是百分比也可以是一个负整数(比如-88意思是距离下边框88px); - +整体页面框架。 - -增加PageLayout控件,用于页面的整体布局(示例在pagelayout2.aspx)。 - -支持MasterPage(示例在Site.master/content_page1.aspx)(VERY COOL~~~)。 - -增加Accordin控件。 - - - -+2008-06-10 v0.1 beta12 - +Grid完善。 - -如果没有选中任何一项,则弹出对话框提示(btn1.OnClientClick=String.Format("if(!{0}){{{1}return false;}}",grid1.GetHasSelectionReference(),Alert.GetShowReference('至少选中一项'));),太麻烦,封装成一个函数(btn1.OnClientClick=grid1.GetNoSelectionAlertReference('至少选中一项');)[zgjiang2]。 - -禁用客户端排序(在GridColumn中不设置SortField即可)[clyin2]。 - +Button完善。 - -增加系统图标属性SystemIcon,并能自动设置ToolTip属性 [jima]。 - -按钮可以按下(在Toolbar中使用),增加属性(EnablePress/Pressed)(例子在simpleform.aspx)。 - -默认按钮的右侧不留任何空白,同时增加属性MarginRight来设置右侧空白。 - +DropDownList完善。 - -增加验证(Required)[clyin2]。 - -增加一些属性(Traditional将下拉框变成传统的不可编辑模式,Resizable下拉列表可以拖放大小) - -增加自动回发的支持(AutoPostBack属性和SelectedIndexChanged事件)[clyin2]。 - -下拉列表中经常需要一项“全部”,增加默认支持(EnableFirstItem/FirstItemText(默认"全部")/FirstItemText(默认"-1"))[jima]。 - +Form完善。 - -FormRow实现为控件。 - -Form中两列的LabelWidth不起作用。 - -Form中一列和两列的右侧对齐问题(全部距右边框25px)。 - -很多控件(包括Form/Panel/SimpleForm)增加在源代码(HTML)视图下的自动排版功能(使用Ctrl+D+K自动格式化),这对ASPX源代码的清晰非常有好处。 - -增加HyperLink控件(使用类似Label) [jima]。 - -在web.config中增加一个配置项(MessageTarget=side/qtip),设置表单验证的提示信息的显示方式。 - -增加静态类Utility(GetCloseWindowReference/RegisterStartupScript)。 - +Window的IFrame网页中添加关闭Window的功能(可以指定关闭后刷新Window所在页面或者引发Window的回发事件,在Window中定义)。 - -关闭Window:btnClose.OnClientClick = FineUI.PageContext.GetCloseWindowReference() + "return false;";(例子在button_iframe.aspx) - -保存后关闭Window:在按钮的回发事件最后注册脚本 FineUI.PageContext.RegisterStartupScript(Page, FineUI.PageContext.GetCloseWindowReference()); (示例在button_iframe.aspx) - +Toolbar完善(示例在simpleform.aspx)。 - -增加ToolbarSeparator,工具条分隔符。 - -增加ToolbarText,可以在工具栏放置静态的文本内容。 - -增加ToolbarFill,可以将工具栏分割成左右两部分。 - -页面整体布局示例(在pagelayout.aspx)。 - +已知问题。 - -有时设计时更改的内容不能保存到HTML源代码中,建议的做法是在HTML代码中修改,在设计时预览效果。 - - - -+2008-06-05 v0.1 beta10 - -Button的 OnClientClick 容错处理,如果最后没有分号结束,添加分号结束 [zgjiang2]。 - +Grid完善。 - -Grid增加客户端脚本,判断是否有CheckBox被选中(GetHasSelectionReference/GetSelectCountReference)(示例在grid.aspx) [zgjiang2]。 - -Grid如果不设置DataKeyNames会出错 [zgjiang2]。 - +Window完善。 - -Window控件通过右上角的图标按钮关闭,不能在回发时保持状态 [zgjiang2]。 - -关闭Window控件时的动作(CloseAction=None/Refresh/PostBack),并增加Close事件(示例在window.aspx)。 - -增加一些控件的默认属性,在从工具栏拖放到代码区域时直接赋值(Panel/Form/Window等)。 - -所有容器的BodyPadding默认为"0px"。 - -容器增加背景色支持(EnableBackgroundColor/BackgroundColor)(每种主题的默认背景色是不同,可以自己设置背景色)(示例在grid.aspx)。 - +Form完善。 - -DropDownList如果放在Form中,则不能在回发时保持状态 [zgjiang2&jima]。 - -Form中的FormRow不再是控件。 - -Tree/DropDownTree控件原型(只是简单的渲染,没有绑定编辑功能)(示例在tree.aspx)。 - - - -+2008-06-03 v0.1 beta9 - +增加IFrame支持。 - -Panel、Tab、Window、GroupPanel增加属性(EnableIFrame、IFrameUrl),用来指定iframe加载的网页地址。 - -Button控件增加OnClientClick属性,可以设置点击按钮时需要执行的客户端脚本 [zgjiang2]。 - +Window完善。 - -增加 Popup 属性(默认为true),指定页面加载时显示窗口,注意和Visible=false的区别(不渲染),Popup=false(渲染但不弹出)。 - -回发时保持弹出窗体是否显示的状态。 - -客户端(JavaScript)、服务器端代码(C#)显示隐藏弹出窗口的代码示例(window.aspx)。 - -如果Window窗体中嵌套ContentPanel,则隐藏(Popup=false)窗体时ContentPanel任然显示的BUG。 - -客户端改变IFrameUrl和窗体的Title,并在回发时保持状态(button_iframe.aspx)。 - +Grid和IFrame的交互。 - -示例(grid_iframe.aspx)。 - - - -+2008-05-30 v0.1 beta8 - +增加ContentPanel控件。 - -设计时支持,ContentPanel默认不显示边框和标题栏,并且BodyPadding为0。 - -去掉容器的RenderChildrenAsContent属性(这是一个不易用的设计),增加的ContentPanel控件专门放置html/asp/box标签,我们的Panel/Window/Tab/GroupPanel中只能放置box标签。 - -不向后兼容,这将影响所有的容器控件示例,已经更新工程。 - -Window窗口居中显示时避免闪烁(其实是移动Window造成的,现在的做法是先移动再显示,就不会闪烁了)。 - +DropDownList[jima]。 - -可以绑定到简单/复杂类型的列表(比如:List<string>/List<MyClass>),如果未指定DataTextField/DataValueField,则取对象的ToString()值。 - -Items集合增加 FindByText/FindByValue 方法。 - -Button控件增加一个IconUrl属性,可以在按钮文字前面添加一个图标。 - +增加Toolbar控件。 - -这是一个很酷的效果,可以向Panel/Window/SimpleForm等容器控件中加入顶部工具栏或底部工具栏。 - -设计时支持。 - - - -+2008-05-29 v0.1 beta7 - +Grid完善。 - -支持DataKeyNames,DataKeys,SelectedRowIndexArray属性,方便对选中行进行控制。 - -完善设计时支持,增加列编辑窗口。 - -列类型增加ImageField。 - -列增加Width属性,每列都应该指定列的宽度(除了设置ExpandUnusedSpace="True"的列)。 - -列的ExpandUnusedSpace指定此列的宽度是否占用未使用的空间,每个Grid只能有一列的ExpandUnusedSpace为true。 - -支持服务器端排序(列增加SortField属性,Grid增加EnableServerSort属性,Sort事件),客户端排序是默认支持的。 - -支持客户端分页(EnableClientPaging,PageSize),不需要回发刷新,适合数据量比较小的情况(<500)。 - -回发服务器过程中,能够保持客户端分页的状态和选中的状态。 - +Grid已知问题。 - -不支持行内按钮事件。 - -TemplateField内不能包含服务器端控件。 - -不支持服务器端分页。 - -Form中的字段不会随着页面的缩放而缩放,目前没有找到解决方法 [jima]。 - -Button不要占据一行,多个按钮排列成一行(并且默认margin-right:10px),现在不再需要table定位了 [jima]。 - - - -+2008-05-27 v0.1 beta6 - +Grid功能增强(不支持分页)。 - -设计时支持。 - -单选/多选,回发时保持状态。 - -属性控制是否显示多选框。 - -属性控制是否显示行序号。 - -客户端排序。 - -列类型可以为BoundField,CheckBoxField,HyperLinkField,TemplateField。 - -TemplateField中可以自定义数据绑定,目前只支持Asp.Net1.1的绑定语法<%# DataBinder.Eval(Container.DataItem, "MyValue") %>,不支持Asp.Net2.0的语法<%# Eval("MyValue") %>。 - -用户可以在function onReady(){}函数中,书写自定义Javascript代码块 [jqpeng]。 - -Button增加弹出Confirm对话框的功能(只需要设置属性ConfirmText)[jima]。 - -Window控件增加在窗体定位的属性(Top/Left)[jqpeng]。 - -容器控件增加IconUrl属性,可以在标题前面增加一个图标 [jqpeng]。 - - - -+2008-05-23 v0.1 beta5 - -如果Button的ValidateForms指定的表单嵌套在其他容器里面,会渲染失败 [jqpeng]。 - -去除容器的RenderAsItems属性(字面意思难理解),增加RenderChildrenAsContent(默认为false,将容器子控件渲染为内容),如果要在容器中放置System.Web.UI.HtmlControls和System.Web.UI.WebControls子控件,必须设置RenderChildrenAsContent="true"。 - -容器控件的内容只有在容器渲染完成后(RenderChildrenAsContent="true"),才会显示出来。 - -如果设置容器控件不可折叠,渲染时去掉保持折叠状态的隐藏字段。 - -在页面回发时保持可折叠容器的折叠状态 [jqpeng]。 - -在页面渲染时,Button的Text属性默认为"["+ID+"]",容器的Title属性默认为"["+ID+"]"。 - -容器的BodyPadding实现为字符串,可以设置为"5px"或"5px 10px"或"5px 10px 10px 20px",最终渲染为Style的padding属性。 - -PageLoading可以更改加载图片,可以设置回发时是否显示。 - -TextBox等表单控件放置在FromPanel中,其状态在回发过程中不能保持 [jqpeng]。 - -SimpleForm/Form的FormRow属性不再只能添加表单字段,而是和Panel一样可以添加任意的FineUI控件,这就意味这可以很方便的把Panel/Button/GroupPanel/TabPanel添加到Form中。 - -SimpleForm/Form的设计时有很大变化,去除SimpleForm/Form的字段设计窗口(可以方便的从工具栏拖放),FormRow重新实现为控件。 - - - -+2008-05-20 v0.1 beta4 - -修正表单字段的TabIndex属性,应该从1开始设置。 - -Button增加ValidateForms属性,可以执行提交之前对哪些表单进行有效性验证 [jima]。 - -表单嵌套在容器控件时,宽度和高度的自适应。Panel/GroupPanel/Window/Tab这几个控件增加RenderAsItems属性,表示将容器渲染为集合而非内容,其实FormPanel/SimpleFormPanel默认的就是把容器渲染为集合。 - -新增PageLoading控件,用于在页面尚未完成加载时显示Loading图标,完成加载后渐变到页面内容。 - -新增DropDownList控件。 - -新增Grid控件(原型阶段)。 - -改名:TabPanel->TabStrip,SimpleFormPanel->SimpleForm,FormPanel->Form,Row->FormRow。 - - - -+2008-05-14 v0.1 beta3 - -TabPanel设计时样式修正。 - -TabPanel增加选项卡编辑窗口。 - -SimpleFormPanel/FormPanel编辑表单字段的窗体的易用性调整。 - -设计时,阻止拖放非表单字段控件到表单字段编辑区域。 - -所有表单字段的设计时样式调整,表单字段必须放置在SimpleFormPanel/FormPanel容器中,已更新示例工程。 - -SimpleFormPanel设计时的可编辑区域,最后增加一个空白行,方便从工具条拖放表单字段控件。 - -FormPanel设计时用Table组织一行的显示效果,可以方便在一行中增加删除表单字段,这个效果非常酷,可以在行之间增加删除调整控件,行的列数会自动调整。 - -FormPanel中的Row不再实现为控件,同时舍弃ColumnCount属性,降低复杂度。 - -兼容UTF-8和GB2312类型的网站。 - -DesignTimeControl改名为DesignTimeStyle,需要在设计时样式支持的页面需要添加此控件。 - -表单字段增加属性ShowRedStar,在Label后面显示一个红色的星号,用来标示关键字段。 - -HtmlEditor控件的高度设置没用,这个应该是extjs的bug(http://extjs.com/forum/showthread.php?t=28150)[jima]。 - -允许自动回发的CheckBox放置在FormPanel中,在页面渲染时会回发到后台的BUG。 - - - -+2008-05-08 v0.1 beta2 - -增加控件的设计时支持。舍弃FormPanel里面的RowSet控件,并增加 GroupPanel控件。 - - - -+2008-04-30 v0.1 beta1 - -共包含Button、TextBox、TextArea、DataPicker、NumberBox、HtmlEditor、CheckBox、Label、 - Panel、Window、TabPanel、FormPanel、SimpleFormPanel 共 13 个服务器端控件和 Alert 一个静态帮助类。 - - - -+2008-04-25 v0.1 preview2 - -增加DropDownList,FormPanel,Label,CheckBox,RadioBox,Panel,TabPanel,TextArea,Window共 9 个服务端控件。 - - - -+2008-04-11 v0.1 preview - -包含Alert,Button,TextBox,DataBox,HtmlBox,Calendar,NumberBox共 7 个简单的控件。 - - - -Copyright 2008 30372245@qq.com, All rights reserved. +FineUI(开源版) +基于 ExtJS 的开源 ASP.NET 控件库 + +FineUI的使命 +创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序 + +支持的浏览器 +Chrome、Firefox、Safari、IE 8.0+ + +授权协议 +Apache License v2.0 +注:ExtJS 库在 GPL v3 协议下发布(http://www.sencha.com/license) + + +相关链接 +首页:http://fineui.com/ +论坛:http://fineui.com/bbs/ +示例:http://fineui.com/demo/ +文档:http://fineui.com/doc/ +下载:http://fineui.codeplex.com/ + + +FineUI 严格遵守 ExtJS 对开源软件的规定,不再内置 ExtJS 库,请自行获取: +1. 获取适用于 FineUI 的 ExtJS 库 + http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218 +2. 基于 FineUI 的空项目(已包含 ExtJS 库) + http://fineui.com/bbs/forum.php?mod=viewthread&tid=2123 + + +发布历史 + ++2015-05-20 v4.2.0 + -增加示例:其他控件->面板与窗体->同时打开多个窗体。 + -增加示例:第三方组件->jQueryUI Autocomplete->内联数据(位于Window控件中)。 + -增加示例:其他控件->工具栏与菜单->工具栏上的图片(固定宽度);工具栏上的图片(动态调整)。 + -修正删除不存在的选项卡时可能出现的错误(揣兜-7085)。 + +表格增强。 + -增加示例:行与列样式->行样式(数据库分页);行样式(内存分页);列样式。 + -增加示例:序号列->序号列(靠左显示)(dennisliu)。 + -更新示例:杂项->文本居中显示(标题靠左)。 + -增加示例:事件->行内按钮事件(内存分页);行内按钮事件(数据库分页)。 + +仅对表格内存分页有部分影响(不兼容提醒!)。 + -表格属性SelectedRowIndex、SelectedRowIndexArray指的是在当前分页中的索引(和之前兼容,无需修改)。 + +表格所有其他地方的RowIndex指的是在全部数据源中的索引(和之前不兼容,需要注意)。 + -所有表格事件参数RowIndex属性,包括GridAfterEditEventArgs、GridRowClickEventArgs等。 + -获取单元格编辑修改值grid1.GetModifiedData返回的键值。 + -表格行实例的RowIndex属性。 + -CheckBoxField的函数GetCheckedState的参数。 + +修正一直存在的一个隐藏问题。 + -此问题仅在用户多次快速点击页面上的回发按钮,并且网速比较慢时才可能会出现。 + -关于如何重现本问题以及内部原因,请搜索论坛 - 验证视图状态MAC失败。 + -修正多选下拉列表取消某项选中时出现的JS错误(uykonxu、揣兜-7053)。 + -增加示例:杂项->捕获全局JavaScript错误。 + -删除PageLoading控件,为PageManager增加PageLoadingImageUrl属性。 + -优化官网示例首页[仅显示最新示例]逻辑,仅在叶子节点定义IsNew属性。 + -增加客户端函数F.cookie和F.removeCookie,在前端处理官网首页配置菜单的点击事件。 + -修正选项卡标题中放置红色[New!]时,底部出现的一行空白线。 + -优化官网示例首页样式。 + + + ++2015-02-03 v4.1.6 + -增加示例:表格控件->导出与下载->导出文件(FindControl,查找模板列中控件)。 + -增加示例:表格控件->导出与下载->导出文件(多表头)。 + -修正下拉列表数据绑定后在第一个位置插入项,而最终选中的非第一项的问题。 + -修正下拉列表在没有数据项时,可能会触发SelectedIndexChanged事件的问题。 + -BoxLayoutAlign的默认值由Start改为Stretch。 + -增加示例:其他控件->选项卡控件->选项卡的位置。 + -更新示例:表单控件->杂项->禁用与只读。 + -修正AutoSizePanelID的面板中Submit按钮回车无效的问题(Ward_Lee)。 + +支持一个面板拥有多个工具栏。 + -增加示例:其他控件->工具栏与菜单->多行工具栏。 + -增加示例:表格控件->分页与排序->数据库分页(底部工具栏)。 + +重构表单改变确认对话框(不兼容提醒!)。 + -删除Window控件的EnableConfirmOnClose属性,以及GetConfirmHideReference类似的5个方法。 + -删除ActiveWindow中GetConfirmHideReference类似的5个方法。 + -增加配置项EnableFormChangeConfirm,启用表单改变确认对话框(默认为false)。 + -为面板控件增加GetClearDirtyReference方法,用来清空面板内表单字段的改变状态。 + -更新示例:内联框架->窗体关闭前的确认对话框;保存按钮放在窗体工具栏中。 + + + ++2014-11-14 v4.1.5 + +F.util.addMainTab函数在指定refreshWhenExist参数时也要更新标题(舞柯庶)。 + -更新示例:杂项->向父页面添加选项卡。 + -页面回发时如果脚本出错,不再弹出出错对话框,有助于快速定位错误。 + -新增示例:表格控件->单元格编辑->行扩展列与单元格编辑/行扩展列与新增删除行。 + -新增示例:导航控件->面板与窗体->窗体与表单。 + -修正下拉列表(可编辑、不强制选择)清空内容后,后台依然可以获取SelectedItem的问题。 + -下拉列表控件增加EmptyText属性并更新相关示例。 + -修正下拉列表后台绑定后SelectedIndex返回-1的问题(yezie、brawei)。 + -修正ShowLabel=false时,表单验证失败对话框消息中缺失字段标签字符串,更新示例:表单控件->表单布局->自定义表单布局。 + -修正NextFocusControl是按钮出错的问题,增加示例:基本用法->登录页面(回车导航)(ZZZzzz)。 + +修正多选下拉列表启用自动回发时,取消最后一个选中项不会自动回发的问题(偶然那么一次)。 + -新增示例:表单控件->下拉列表控件->多选->下拉列表(自动回发)。 + + + ++2014-09-22 v4.1.4 + -修正TriggerBox先禁用再启用后不能触发TriggerClick事件的问题(飘移-2870)。 + +下拉列表增加MatchFieldWidth属性,可设置弹出框和字段宽度不同。 + -增加示例:表单控件->下拉列表控件->下拉列表(MatchFieldWidth)。 + -废除Region的Split和Position,请使用RegionSplit和RegionPosition属性。 + -增加页面底部区域,显示版本和版权信息。 + -修正表格在RecordCount=0时获取PageIndex出错的问题(userlm-6302)。 + -修正表格AllowPaging=true,并且数据源为空出错的问题(tlxyniu、hroger-6289)。 + -修正在母版页内容中放置Window控件,在页面回发时出错的问题。 + -增加示例:表格控件->扩展列->全选列(单选)。 + +Tree增加PreNodeDataBound事件。 + -增加类TreePreNodeEventArgs,其Cancelled属性用来取消添加当前树节点。 + -GridPreRowEventArgs增加Cancelled属性,作用同上。 + -官网主框架增加[仅显示最新示例]菜单项。 + -增加示例:表格控件->事件->行预绑定事件(Cancelled属性)。 + +修正通过服务器端脚本关闭当前标签页可能出现的JS错误(xtb_sp-6277)。 + -在IE11出现错误[无法获取未定义或 null 引用的属性 callback]。 + -更新示例:杂项->向父页面添加选项卡。 + + + ++2014-09-09 v4.1.3 + +母版页支持。 + -增加新控件CPHConnector(ContentPlaceHolder)。 + +增加三个示例,演示布局、接口以及动态加载在母版页中的运用: + -杂项->母版页->树(布局)。 + -杂项->母版页->表格(布局、接口与动态加载)。 + -杂项->母版页->表格与表单(布局、接口与动态加载)。 + -修正UMEditor在从全屏恢复时滚动条消失的问题(Gnid-6187)。 + +窗体控件增强。 + +增加子窗体关闭后调用父页面JS函数的方法(txw999-6022)。 + -分别为ActiveWindow和Window增加GetHideExecuteScriptReference方法。 + -增加示例:内联框架->新窗口中选择省份(GetHideExecuteScriptReference)。 + -窗体的Width和Height属性更新为AJAX属性,可以在后台改变 + +修正在父页面弹出窗体时无法通过设置Title属性来改变标题的问题(舞柯庶-6031)。 + -更新示例:内联框架->回发父页面(改变属性或者注册脚本)。 + -HyperLinkField的DataNavigateUrlFieldsEncode属性已废除,请替换为UrlEncode属性。 + +为ControlBase增加Listeners属性,方便设置控件的客户端事件处理函数,同时更新如下示例: + -表格控件->复选框列->全选复选框列(客户端实现)。 + -表格控件->杂项->右键菜单(全选复选框)。 + -杂项->自定义回发(__doPostBack)。 + -杂项->自定义回发(F.customEvent)。 + -杂项->文本框改变客户端事件。 + -修正行扩展列无法显示隐藏的问题(zy32002-6195)。 + -为Grid增加ShowPagingMessage,并更新示例:表格控件->分页与排序->数据库分页。 + -增加示例:导航控件->工具栏与菜单->内联菜单(HideOnClick)。 + -表格的PageIndex有效性检查,更新示例:表格控件->分页工具条->改变每页记录数。 + + + ++2014-08-29 v4.1.2 + -修正树控件的EnableIcons属性无效的问题。 + -为树控件增加NodeDataBound事件,并增加示例tree/tree_nodedatabound.aspx。 + -修正F.util.initTreeTabStrip不处理父节点打开新标签页的问题。 + -修正更新未打开选项卡IFrame地址出错的问题(xxdddail-6107)。 + -修正选项卡非激活ContentPanel面板内容在外部显示的问题(张海-6011)。 + -修正页面上只有一个input[type=text]时,回车键会默认提交表单的问题(隨風往事-6128)。 + -表格增加EnableRowLines属性,增加示例:表格控件->杂项->隐藏表格标题栏。 + -修正单选框列表和复选框列表默认设置ReadOnly=true无效的问题(mark_01-6160)。 + -修正日期字段为DBNull.Value时导致RenderField绑定出错的问题。 + -修正表格的[改变行背景色]示例在显示隐藏列时行背景色消失的问题(robsun-6162)。 + +下拉列表增强。 + +增加AutoSelectFirstItem属性,如果设置为false,则下拉列表可以默认为空。 + -更新示例:表单控件->下拉列表控件->杂项->重置表单。 + -可以使用Required属性做客户端验证,从而减少为下拉列表添加默认项[--请选择--]的麻烦。 + -可多选,增加属性EnableMultiSelect、MultiSelectSeparator。 + -增加示例:表单控件->下拉列表控件->多选下拉列表->多选。 + -增加示例:表单控件->下拉列表控件->多选下拉列表->多选(可过滤,强制选择)。 + + + ++2014-08-15 v4.1.1 + -修正Form中表单字段设置宽度无效的问题(李明海-5929)。 + -为TemplateField增加ExpandOnDoubleClick、ExpandOnEnter、ExpandToSelectRow三个属性(LZOM-5932)。 + -BodyPadding支持纯数字形式,类似“5”“5 10”,之前只支持带单位的形式“5px”“5px 10px”。 + -修正TriggerBox在EnableEdit=false的情况下,点击文本输入框不能触发的问题(Jango_Jing-5450)。 + -修正可编辑单元格未定义DataKeyNames的情况下可能出现的错误(yygy-6002)。 + -修正下拉列表在数据重新加载后没有更新选中值的问题(Gnid-6018)。 + -确保PageManager在指定AutoSizePanelID的情况下,其初始化脚本在用户自定义脚本之前执行(yygy-6008)。 + -将FState的相关操作放在页面初始化完毕后,防止出现与动态创建控件相关的问题(隨風往事-5925)。 + -修正树节点的OnClientClick中包含return语句可能引起的错误(FineUserSG-6042)。 + -修正Confirm对话框标题无效的问题(小豬仔-5987)。 + -表格的行扩展列支持,并增加6个相关示例。 + + + ++2014-07-21 v4.1.0 + -渲染到页面上的按钮,其外部容器display默认为inline-block。 + -示例grid/grid_iframe_window.aspx减少两个Panel,实现和之前一样的效果。 + +反射获取对象属性时,不仅包含public属性,而且包含private, internal属性。 + -指定参数BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic。 + +修正普通回发时主题丢失问题。 + -重现步骤:选择Blue主题,打开aspnet/aspnet.aspx,点击“4.ASP.NET按钮”,页面回到默认的Neptune主题。 + -增加示例other/keydown.aspx。 + -为ControlUtil.FindParentControl增加重载方法,用来处理继承关系。 + -为ControlBase的GetPostBackEventReference增加重置函数,指定是否返回启用AJAX的脚本。 + -更新示例iframe/passvalue_iframe.aspx,增加父窗口向子窗口传值。 + -GroupPanel的默认布局由Container改为Anchor。 + -修正输出页面的X-UA-Compatible标签错误(zjfeiye-5803)。 + -将icon目录移到res目录内部。 + -修正打开包含IFrame的Window的过程中按下ESC键时,可能出现弹出框的问题(tucq168-5858)。 + -Tree的EnableArrows属性默认为true。 + -修正MenuCheckBox总是回发的问题,也即AutoPostBack设置无效。 + +表单增强。 + -Web.config和PageManager中FormOffsetRight的默认值从5px改为0px。 + -Form控件中非最后一列的右侧空白默认为5px。 + -修正定义在Form,SimpleForm上的OffsetRight、LabelSeparator无效的问题。 + -增加示例form/form_disabled.aspx,将所有表单字段禁用、设置只读、应用无效标识。 + -Form控件启用Items属性,Layout属性默认为Anchor,可以自行设置(之前为只读属性)。 + -如果父控件的布局不是Anchor,则表单字段忽略OffsetRight属性(也即渲染到客户端的anchor属性)。 + -更新示例form/layout_panel2.aspx。 + -增加示例form/layout_contactus.aspx,演示用VBox和HBox进行复杂的表单布局。 + -增加示例form/layout_checkout.aspx,演示用Form和GroupPanel制作更加复杂的表单。 + -示例dropdownlist/shengshixian.aspx重构。 + -修正FileUpload无法显示图标的问题,更新示例form/fileupload_autopostback.aspx。 + +表格增强。 + -增加简单购物车示例(grid/grid_edit_cart.aspx)。 + -增加示例grid/grid_rowcommand_download.aspx,以便在表格行内下载文件。 + -增加示例grid/grid_summary_scrollbar.aspx,演示绝对定位合计行与横向滚动条同时存在的情况。 + -GridRow的Values属性类型更改为object[]。 + -删除示例grid/grid_edit_save_manual.aspx。 + -重构示例grid/grid_edit_save_auto.aspx,客户端更新表格行对应的表单,定时保存全部数据并显示提示信息。 + +单元格编辑表格增强。 + -可编辑单元格和CheckBoxField同时存在时,出现BackupPostDataProperty中无法添加相同键的问题(ji78-5797)。 + -修正日期列在不进行修改即退出编辑状态后,显示左上角的已修改标识的问题。 + +返回后台的日期字段为字符串是格式化后的(类似2014-07-20,而不是之前的2003-09-01T00:00:00)。 + -修改后台的处理代码DateTime.Parse(rowDict["EntranceDate"]).ToString("yyyy-MM-dd"),直接使用rowDict["EntranceDate"]。 + -修正重新绑定数据后,仍然显示左上角已修改标识的问题(zjfeiye-5779)。 + -Grid的GetNewAddedList函数返回类型更改为List<Dictionary<string, object>>。 + -Grid的GetModifiedDict函数返回类型更改为Dictionary<int, Dictionary<string, object>>。 + +比如入学年份列标签定义了DataField=EntranceYear,FieldType=Int,那么后台拿到修改值就是整形值,无需再做转换。 + -rowData["AtSchool"]=Convert.ToBoolean(rowDict["AtSchool"]);可以更改为:rowData["AtSchool"]=rowDict["AtSchool"]; + -修正NumberBox的NoNegative属性无效的问题(yezie-5789)。 + +删除无效或者重复的属性。 + -删除TabStrip的属性EnableTitleBackgroundColor、EnableDeferredRender。 + -删除Window的属性Plain。 + -删除ToolbarPosition的枚举类型Footer、Buttons,这两个都用Bottom枚举类型代替。 + -删除Region上的Margins属性,删除BoxComponent上的BoxMargin属性,这两个都可以使用Margin属性代替。 + -修正用户控件中使用NextFocusControl时定位错误的问题(牙膏人-5835)。 + +第三方编辑器示例重构。 + -删除FCKEditor的示例。 + -CKEditor的示例不再使用ASP.NET控件,而是直接调用JS。 + -增加TinyMCE和UMEditor的示例。 + -更新ueditor/ueditor.aspx示例,删除难以理解的jQuery Promise,使用简单的处理方式。 + -更新ueditor/ueditor_two.aspx示例,使用Form的自定义布局,而不是原始的table标签。 + -修正树控件绑定为空值无效的问题,更新示例tree/databind/tree_document.aspx(IT刀客)。 + + + ++2014-05-11 v4.0.6 + -修正下拉列表禁用时提交数据错误的问题(惘思)。 + +修正顶部菜单框架(右侧选项卡)在多次点击头部菜单后,出现“不能执行已释放 Script 的代码”的错误(failist)。 + -IE的问题:外部页面使用已关闭IFrame页面的数据(或回调)时发生。 + -修正方法是将initTreeTabStrip的调用放在父页面,如此以来mainTabStrip的回调存在于父页面,而非已关闭IFrame。 + -使用google-code-prettify对示例源代码进行着色。 + -添加到页面上的主题样式类由theme-neptune改名为f-theme-neptune。 + +树控件增强。 + -TreeNode的AutoPostBack改名为EnableCheckEvent,EnablePostBack改名为EnableClickEvent。 + -NodeExpand事件改名为NodeLazyLoad,TreeExpandEventArgs改名为TreeNodeEventArgs。 + -TreeNode增加属性EnableExpandEvent和EnableCollapseEvent,Tree增加事件NodeExpand和NodeCollapse。 + -增加示例tree/tree_expand.aspx,更新示例tree/tree_ajax.aspx。 + -支持Server.Transfer,需要设置EnableAjax=false(chwentao)。 + -修正TriggerBox的TriggerIcon无效的问题。 + +增加FineUI与My97DatePicker整合的示例(aspnet/my97.aspx)。 + -自定义皮肤neptune,以便和FineUIv4.x的Neptune主题兼容。 + -修正UserControlConnector无效的问题。 + +为面板Panel、Tab、Region、GroupPanel、AccordionPane、Window增加Content属性。 + -可以在一定程度上避免使用ContentPanel,从而减少页面层次结构,加快页面渲染速度。 + -更新示例window/window.aspx、default.aspx。 + +为FileUpload控件增加AcceptFileTypes属性,控制默认显示的文件类型(六月寒)。 + -更新示例form/fileupload_toolbar.aspx。 + +表格中模板列的CSS类名由x-grid-tpl更改为f-grid-tpl。 + +为Component增加Margin属性。 + -删除Region上的Margins属性,请使用新增的Margin属性。 + -删除BoxComponent上的BoxMargin属性,请使用新增的Margin属性。 + +Layout枚举值Border改名为Region,为BoxComponent增加RegionPosition和RegionSplit两个属性。 + -普通的面板也支持Region布局,可以在一定程度上减少页面上的层次结构。 + -更新示例iframe/topmenu4/default.aspx。 + -为Web.config和PageManager增加IEEdge属性(在IE浏览器中使用最新的渲染模式),默认为true(⑥阿太⑥)。 + -新增三列面板示例layout/column.aspx(binbin)。 + -修正Alert对话框与ActiveWindow.GetHidePostBackReference冲突的问题(wlj928449657)。 + + + ++2014-03-03 v4.0.5 + -修正表格在AJAX更新时加载慢的问题。 + -修正表格在分页和排序同时存在,分页时会发送两次AJAX请求的问题(Gunu40)。 + -修正表格在特殊情况下出现getEditor未定义的错误(yygy)。 + -修正示例form/layout_panel.aspx的布局错位(隨風往事、死水沼泽)。 + -修正合计行在Blue主题下的样式问题(yygy)。 + -修正示例form/layout_panel2.aspx的布局错位。 + -修正basic/login_captcha.aspx的布局错位。 + -修正复选框列表的标签分隔符为半角冒号的问题(highong)。 + -确保EnableIFrame=false时Target只能为Self。 + -为CheckItem、RadioItem、ListItem增加可以设置是否选中的构造函数(五四)。 + + + ++2014-02-28 v4.0.4 + -为Neptune主题下的工具条添加背景色(szjazz)。 + -树控件增加EnableSingleClickExpand属性,实现单击展开树节点功能(erp8@live.cn)。 + -修复手风琴控件首次加载后无法获取展开状态的问题(asdfsdgd)。 + +将在线示例的设置按钮移到左侧面板的顶部。 + -演示如何使用JS为面板添加工具图标。 + -演示如何使用JS来显示上下文菜单。 + +修正表格无法多选的问题。 + -更新示例grid/grid_checkboxfield_rowcheckall.aspx。 + -增加示例grid/grid_checkboxfield_rowcheckall_clientside.aspx。 + -增加示例grid/grid_checkboxfield_rowcheckall_contextmenu.aspx,演示如何在表格中使用右键菜单。 + +面板增加展开折叠事件(asdfsdgd)。 + -增加EnableCollapseEvent属性和Collapse事件。 + -增加EnableExpandEvent属性和Expand事件。 + -增加示例window/panel_collapse.aspx。 + +Accordion增强(asdfsdgd)。 + -修正Accordion的EnableFill,ShowCollapseTool等属性失效的问题。 + -ActiveIndex改名为ActivePaneIndex,并更新为AJAX属性。 + -增加属性AutoPostBack和PaneIndexChanged事件。 + -更新示例accordion/accordion.aspx。 + -增加示例accordion/accordion_autopostback.aspx。 + -为Button增加MenuID属性,增加示例button/button_menu_menuid.aspx。 + -修正页面第一次加载时Window控件遮挡Alert对话框的问题。 + -修正无法修改表单字段Label的问题。 + +删除所有之前版本标记为废除的方法和属性。 + -PanelBase: EnableBackgroundColor + -Calendar: EnableDateSelect + -PageManager: HideScrollbar + -DatePicker: EnableDateSelect + -TimePicker: EnableTimeSelect + -Window: Popup + -Grid: AutoPostBack, EnableRowSelect, EnableRowDoubleClick, EnableRowClick, GetSelectCountReference + -GlobalConfig: GetDefaultBackgroundColor + -修正IE8下无法上传文件的问题(猫咪君、asdfsdgd)。 + -修正Window控件不支持EnableAjax的问题,增加示例grid/grid_excel_selectcolumns.aspx(◆◇_提拉米苏℡)。 + -将控件的Visible属性设为只读,如果想隐藏控件并在随后的请求中显示出来,请使用Hidden属性。 + -修正tabstrip/tabstrip_addtab.aspx示例中相同ID可以多次添加的问题(春节)。 + -修正删除选中树节点后重新绑定出错的问题(Panda)。 + -修正aspnet/fckeditor.aspx示例无法获取用户输入值的问题(xie_g_j)。 + -添加extjs缺少提醒,避免初学者走弯路。 + + + ++2014-01-20 v4.0.3(beta) + -修正表格动态创建列与模板列的冲突问题,增加示例grid/grid_excel_dynamic_columns.aspx(气人号-4586)。 + -配置项ExtjsBasePath改名为JSBasePath,控件标签前缀由x改名为f,配置项删除不再使用的ResourceHandler。 + -子窗口向父窗口传值错误(小兵、水+木-4591)。 + -修正没有项目的下拉列回发时会触发SelectedIndexChanged事件的问题(purplebolt-4571)。 + -修正在父页面弹出的窗体在显示时加载两次的问题(Gunu40-4725)。 + -更新示例form/textbox_autopostback.aspx,增加示例grid/grid_summary2.aspx。 + +表格增强。 + -单元格编辑支持。 + -更新之前的6个示例; + -新增示例grid/grid_editor_cell_databind.aspx,演示在后台绑定可编辑表格中的下拉列表。 + +修正向表格末尾添加行时,不能默认选中第一个单元格的问题(奋斗~-4658)。 + -更新示例grid/grid_editor_cell_new.aspx和grid/grid_editor_cell_new_delete.aspx。 + +为PageManager增加CustomEvent事件。 + -为PageManager增加ValidateForms、ValidateTarget、ValidateMessageBox属性。 + -为PageManager增加重载方法GetCustomEventReference。 + -为Window增加重载方法GetIFrameCustomEventReference方法。 + -更新示例iframe/window2.aspx,在保存之前首先验证IFrame中的表单。 + -增加示例other/confirm_cancel2.aspx,演示如何在后台响应确认对话框的确定和取消按钮事件。 + +根据网友反馈,删除Form和SimpleForm的SubmitButton属性,恢复按钮的Type属性(Submit/Reset)。 + -尽管新版ExtJS不支持按钮的Submit属性,我们还是手工实现,为了和正常的HTML表单兼容。 + -更新示例basic/login.aspx和basic/login_captcha.aspx。 + + + ++2014-01-20 v3.3.3 + -下拉列表ForceSelection默认值保持为true,否则对现有项目影响很大(蓝色天空-4381)。 + -下拉列表在页面第一次加载时出现错误提示(牙膏人-4390)。 + -修正在父页面弹出的窗体在显示时加载两次的问题(Gunu40-4725)。 + -修正表格动态创建列与模板列的冲突问题,增加示例grid/grid_excel_dynamic_columns.aspx(气人号-4586)。 + +新增示例grid/grid_editor_cell_databind.aspx,演示在后台绑定可编辑表格中的下拉列表。 + -注意与模板列中的下拉列表的后台绑定对比:grid/grid_edit_dropdownlist2.aspx。 + +修正向表格末尾添加行时,不能默认选中第一个单元格的问题(奋斗~-4658)。 + -更新示例grid/grid_editor_cell_new.aspx和grid/grid_editor_cell_new_delete.aspx。 + + + ++2013-12-14 v4.0.2(beta) + +表格合计行重构。 + -增加属性EnableSummary、SummaryData、SummaryPosition。 + -增加示例grid/grid_summary.aspx、。 + +增强品牌意识。 + -客户端库简称 X 统一改为 F。 + -服务器控件标签前缀由 x 统一改为 f。 + -自定义CSS、JavaScript前缀由 x_ 或者 box- 统一改为 f_ 或者 f- 。 + +客户端事件由函数定义形式改为传入回调函数。 + -函数onReady更改为F.ready(fn)。 + -函数onAjaxReady更改为F.ajaxReady(fn)。 + -函数X.util.beforeAjaxPostBackScript更改为F.beforeAjax(fn)。 + -删除PageManager的ExecuteOnReadyWhenPostBack属性。 + -更新需要JavaScript参与的示例,DOM相关操作改为jQuery实现。 + -增加示例grid/grid_edit_enterkey_v.aspx,演示如果使用回车键遍历表格中所有文本框(⑥阿太⑥)。 + -更新X.util.addMainTab方法,如果refreshWhenExist为true,则尝试更新iframe的url,而不是调用location.reload(KITTEN-4293)。 + -如果面板的EnableIFrame为true,则忽略Items属性(purplebolt)。 + -为窗体控件的GetShowReference增加重载方法,可以在打开窗体时指定宽度和高度(黑冰.cn)。 + -修正Can not add property X_Rows_GZ to Newtonsoft.Json.Linq.JObject(今夕何夕、treedun、欧志辉)。 + -增加示例iframe/topmenu4/default.aspx,演示IFrame中的树如何与父窗口中的选项卡控件交互(wolkai-4386)。 + -修正IE8下数组不支持indexOf方法的问题。 + -IE10下示例页面顶部背景空白(奋斗~-4173)。 + -IE9/10下自定义按钮的图片显示不了(奋斗~-4197)。 + -包含日期控件的页面回发时出错(奋斗~-4172)。 + -选项卡示例中的多行文本框在IE7下没有展开(奋斗~-4198)。 + -多行显示补全数据示例问题(慧信-4180)。 + -示例站点Cookie冲突导致无法访问(石头oswica-4182)。 + -主题为Access时,表格的序号列背景色异常(死水沼泽-4183)。 + -最大化窗体不能响应浏览器窗口大小改变事件(老白杨-4403)。 + -删除行布局(吉吉﹑-4200)。 + +多表头问题(吉吉﹑-4242)。 + -表格的ForceFitAllTime改名为ForceFit,此属性暂时不能和多表头一起使用。 + +按钮的Type=Submit无效(Herb-4192)。 + -删除Button的Type属性,为SimpleForm和Form控件增加属性SubmitButton。 + -更新示例basic/login.aspx和form/form_reset.aspx。 + +关闭窗体之前,检查窗体IFrame内表单是否已经改变,如果已经改变则弹出是否关闭的确认对话框以防止用户录入数据丢失。 + -窗体启用EnableConfirmOnClose,EnableIFrame。 + -窗体IFrame里面的关闭按钮通过ActiveWindow.GetConfirmHideReference等函数注册客户端事件。 + -更新客户端函数F.wnd.getActiveWindow,直接返回窗体对象,浏览器窗口对象可以通过F.wnd.getActiveWindow().window来获取。 + -窗体增加GetIFramePostBackEventReference函数,用来回发窗体内的IFrame页面。 + -增加示例iframe/window.aspx和iframe/window2.aspx,演示如何使用窗体关闭确认对话框,并且第一次将保持按钮放在窗体的工具栏中。 + -窗体控件的IsModal属性无效(purplebolt-4209)。 + -删除面板的FooterBarAlign属性,为Toolbar控件增加ToolbarAlign属性(可能需要为Footer工具栏设置ToolbarAlign="Right")。 + -修正动态创建模板列无法导出的问题(hroger-4584)。 + + + ++2013-11-21 v3.3.2 + -修正IE7/IE8下表格的日期列显示错误,IE不能正确解析Date.parse('2015-10-01')(夏雨雪)。 + -修正表格中模板列在数据绑定时可能不更新的问题(小兵、舞柯庶、蒙奇.D.二毛、李明海)。 + +更新示例grid/grid_pageitems_pagesize.aspx和grid/grid_pageitems_pagesize_database.aspx。 + -在更改每页显示数目(PageSize)时,防止PageIndex越界。 + -UEditor更新为1.2.6.1。 + -增加自定义图片按钮示例button/button_custom.aspx(簫今Shawgin)。 + +修正Collapsed属性在客户端改变后状态同步问题。 + -重现步骤:window/group_panel.aspx示例,折叠分组面板二,点击下面的按钮,不能展开分组面板二。 + +修正树控件的SelectedNodeIDArray属性在客户端改变后状态同步问题。 + -重现步骤:tree/checkbox/tree_checkall.aspx示例,选中驻马店,点击河南省,则驻马店没能保持选中状态。 + -修正TimerPicker无法赋值的问题(隨風往事、凤凰涅盘ing)。 + -修正表格列绑定的数据库字段值为空时出错的问题(欧志辉)。 + -修正引入样式文件的标签笔误,应为type=text/css(是梦~`)。 + -DropDownList的ForceSelection属性默认为false,更新示例dropdownlist/dropdownlist_forceselection.aspx。 + -更新X.util.addMainTab方法,如果refreshWhenExist为true,则尝试更新iframe的url,而不是调用location.reload(KITTEN)。 + -如果面板的EnableIFrame为true,则忽略Items属性(purplebolt)。 + -为窗体控件的GetShowReference增加重载方法,可以在打开窗体时指定宽度和高度(黑冰.cn)。 + -修正Can not add property X_Rows_GZ to Newtonsoft.Json.Linq.JObject(今夕何夕、treedun、欧志辉)。 + + + ++2013-10-28 v4.0.1(beta) + +修正面板的Collapsed属性在客户端改变后状态同步问题。 + -重现步骤:window/group_panel.aspx示例,折叠分组面板二,点击下面的按钮,不能展开分组面板二。 + +修正树控件的SelectedNodeIDArray属性在客户端改变后状态同步问题。 + -重现步骤:tree/checkbox/tree_checkall.aspx示例,选中驻马店,点击河南省,则驻马店没能保持选中状态。 + -修正TimerPicker无法赋值的问题(隨風往事、凤凰涅盘ing)。 + -修正表格列绑定的数据库字段值为空时出错的问题(欧志辉)。 + -修正引入样式文件的标签笔误,应为type=text/css(是梦~`)。 + -MsgTarget改名为MessageTarget,增加项None。 + -FormOffsetRight的默认值由20px改为5px。 + -为Web.config和PageManager增加FormLabelAlign配置项。 + -ToolbarPosition增加Left/Right。 + -删除Web.config中的配置项EnableBigFont。 + -删除PanelBase的EnableBackgroundColor和EnableLargeHeader属性。 + -删除Component的FormItemClass和ContainerClass属性。 + -ExtJS的CheckboxGroup的setValue和getValue方法和之前不兼容,已更新相关示例form/checkboxlist.aspx。 + -ExtJS_v4.2和之前版本对change事件的处理不同。 + -FineUI_v4中的文本输入框或者日期选择器,AutoPostBack使得TextChanged事件立即触发(输入单个字符串和选择日期后)。 + -FineUI_v3中的文本输入框或者日期选择器,AutoPostBack使得TextChanged事件在输入框失去焦点后触发。 + -为了在FineUI_v4中实现之前的失去焦点后触发的事件,为文本输入框增加EnableBlurEvent属性和Blur事件。 + +DropDownList更新。 + -默认可以为空,方便使用Required属性做客户端验证,示例form/form.aspx。 + -ForceSelection属性默认为false,更新示例dropdownlist/dropdownlist_forceselection.aspx。 + -删除Resizable属性。 + -优化XState的初始化代码,使得Reset按钮可用于下拉列表、富文本编辑器等控件,而不会清空这些控件的值。 + -删除PanelBase的属性AutoHeight和AutoWidth。 + +表格更新。 + -生成的样式类"x-grid3"字符串全部更改为"x-grid"。 + -删除表格属性VerticalScrollWidth、EnableColumnHide。 + +表格列和之前不兼容(现在使用HBox布局,注意列的Width和BoxFlex属性)。 + -可以为Column指定BoxFlex属性或者Width属性(之前ExpandUnusedSpace属性等价于BoxFlex=1)。 + -删除表格属性MinColumnWidth、AutoExpandColumnMax、AutoExpandColumnMin。 + -删除表格属性ForceFitFirstTime,属性ForceFitAllTime依然可用。 + -增加列属性HeaderToolTip、HeaderToolTipType、BoxFlex、EnableColumnHide。 + -增加列属性EnableHeaderMenu(默认为true),修改表格的EnableHeaderMenu默认值true。 + -删除表格属性EnableRowNumber、EnableRowNumberPaging、RowNumberWidth,增加列RowNumberField(增加EnablePagingNumber属性)。 + -LinkButtonField默认EnableHeaderMenu=false,EnableColumnHide=false。 + -删除表格属性SortColumnIndex、SortColumn,请直接使用SortField属性(注意RowNumberField对属性SortColumnIndex的影响)。 + -设置表格内图片的默认大小为16px*16px,用户可以手工设置样式来覆盖图片的默认大小。 + -删除HiddenColumnIndexArray属性,增加HiddenColumns属性。 + -更新可编辑表格实示例的客户端脚本,在执行onReady函数时表格的viewready事件已经执行完毕。 + +分组表头和之前不兼容。 + -删除类GridGroupColumn,删除表格的Columns属性,增加类GroupField。 + +选项卡控件更新。 + -为TabPosition类型增加Left、Right两个枚举类型。 + -自动完成文本框示例更新(FineUI的TextBox控件被渲染为table而不是之前的input)。 + +树控件更新。 + -删除TreeNode的属性SingleClickExpand。 + +增加事件参数类CheckedEventArgs,复选框、单选框以及菜单按钮的CheckedChanged事件会接收这个事件参数。 + -更新示例default.aspx、toolbar/menucheckbox.aspx、form/radiobutton.aspx,处理单选框列表时需要的技巧。 + +窗体控件更新。 + -如果删除面板初始属性IFrameUrl=#,则面板中的IFrame会延迟加载。 + -对于设置了IFrameName的面板,初始属性IFrameUrl需要保留,比如iframe/topmenu/default.aspx。 + -删除Region的EnableSplitTip、CollapsibleSplitTip、SplitTip、CollapseMode、CMargins属性。 + -删除AccordionPane的EnableHightlight属性。 + -全部200多个示例更新。 + + + ++2013-07-29 v3.3.1 + -将工具YUICompressor替换为Microsoft Ajax Minifier(需要指定-evals:immediate)。 + -完善FineUI的代码注释,创建FineUI参考手册离线版。 + -修正Window控件无法在外层页面最大化的问题(小兵)。 + -修正Window控件在Master-Content页中无法触发关闭事件的问题(小兵)。 + -对X.util.initTreeTabStrip和X.util.addMainTab进行重构,可以指定切换/新增选项卡时是否刷新IFrame。 + -更新other/addtab.aspx示例,在JavaScript中使用网站根路径。 + -增加示例other/confirm_cancel.aspx,点击确认对话框的取消按钮也能回发页面(夏了,夏天)。 + -修正AJAX异常时提示信息没有消失的问题。 + -优化AJAX超时提示对话框(请求超时,请刷新页面并重试!)。 + +性能优化。 + -为官方示例增加压缩ViewState的方法,在页面基类PageBase中实现。 + +为表格/树/下拉列表/单选框复选框列表/表单字段控件启用XState的Gzip压缩,减少AJAX时POST的数据量。 + -会稍微增加下载数据量,从整体上提升用户体验。 + -可以通过设置控件、PageManager或者Web.config的EnableXStateCompress属性来关闭XState压缩(默认启用)。 + +表格性能优化 + -优化CheckBoxField/HyperLinkField/LinkButtonField,减少生成的HTML代码片段大小。 + -优化模板列存在时POST数据大小,优化内存分页时响应数据大小。 + -优化CheckBoxField生产的CSS类名,将.box-grid-checkbox-unchecked-disabled更改为.unchecked.disabled。 + -优化TextArea/HtmlEditor在页面第一次加载和AJAX回发时产生的数据大小,防止生成重复数据。 + -更新导出Excel的示例grid/grid_excel.aspx,特别注意如何处理模板列(为了优化性能,不能直接获取模板列的内容了)。 + +优化结果(A:grid/grid_rowcommand_paging.aspx,B:grid/grid_rowcommand_paging_database.aspx): + -[版本][A首次响应][A下一页请求][A下一页响应][B首次响应][B下一页请求][B下一页响应] + -[v3.3.0][56.4K][61.7K][7.8K][18.0K][14.4K][10.7K] + -[v3.3.1][43.7K][7.0K][0.2K][16.4K][3.5K][8.6K] + +表格增强。 + +修正模板列示例中注册客户端事件的错误,重新绑定数据后客户端脚本失效。 + -现在使用ExtJS的代理事件,只需要在页面第一次加载时注册事件即可。 + -更新全部模板列示例grid\grid_edit.aspx、grid_edit_compare.aspx等,请仔细阅读源代码。 + +修正SelectedRowIndexArray的一个BUG。 + -在grid/grid_checkboxfield_rowcheckall.aspx中,点击第一个复选框选中行,然后再次点击第一个复选框不能取消行的选中状态。 + +模板列重构(内部实现)。 + -模板列的ClientID由原来的Grid1_r1c5调整为Grid1_ctl09,现在ID由系统自动生成。 + -GridRow不再继承自WebControl,重新优化Grid内部的数据绑定逻辑(减少一个控件层次结构)。 + -模板列控件GridRowControl实例直接添加到Grid.Controls中(之前添加为行控件的子控件)。 + +可编辑单元格重构。 + -更新所有示例,通过行索引找到行DataKeys,然后根据行关键字查找需要更新的数据。 + -为表格增加DeleteSelected/GetDeleteSelectedReference方法,以便在客户端删除行。 + -服务器端通过GetDeletedList方法获取客户端删除的行在原始数据中的索引列表。 + -重构GetModifiedData的实现[[rowIndex(int),originalRowIndex(int),modifiedFields(Dictionary)]]。 + -增加示例grid/grid_editor_cell_new_delete.aspx。 + -为表格增加EnableAfterEditEvent属性和AfterEdit事件,用来处理单元格失去焦点事件。 + -增加示例grid/grid_editor_cell_afteredit.aspx。 + + + ++2013-06-17 v3.3.0 + -更新示例form/form_center_button.aspx,支持IE7(Stone.yu)。 + -修正动态添加列在页面回发时的错误(舞柯庶、落寞一声笑、路人甲)。 + -改变浏览器大小可以自动调整窗体控件的大小(窗体控件最大化时)(grass_root、蓝色天空)。 + -修正Chrome下多表头样式错位(风笑痴)。 + +对允许自动回发事件的属性名字进行重构。 + -在原来的名字后面添加Event,比如EnableRowClick改为EnableRowClickEvent。出于兼容性考虑,之前的属性依然有效。 + -表格相关:EnableRowSelectEvent、EnableRowClickEvent、EnableRowDoubleClickEvent + -表单相关:EnableTimeSelectEvent(TimePicker)、EnableDateSelect(DatePicker、Calendar) + +更新aspnet/ueditor.aspx、aspnet/ueditor_two.aspx. + -修正IE9下编辑框无法获取焦点的问题,将UEditor的初始化代码放在onReady函数中(消失的键盘 )。 + -UEditor更新为1.2.6.0,FineUI与百度的UEditor将携手促进国内开源软件的发展。 + -更新other/addtab.aspx示例,增加关闭当前TAB的实现。 + -增加示例tabstrip/tabstrip_iframe_disabled.aspx,在IFrame内部启用外部TabStrip的标签(◆◇_提拉米苏℡)。 + +窗体控件优化。 + -将JS函数box_show/box_hide等改名为x_show/x_hide。出于兼容性考虑,之前的函数依然有效。 + -减少窗体控件生成的JS代码量。 + +遵守ExtJS对开源软件的限制,将ExtJS相关JavaScript、CSS以及图片资源从FineUI库中移除。 + -增加Web.config中的配置项ExtjsBasePath,默认为~/extjs。 + -FineUI.dll从原来的2.4M减少为600K。 + -FineUI.Examples增加extjs_builder文件夹,用来生成FineUI所需的extjs目录。 + +表格增强。 + +合计行示例。 + -增加客户端合计行示例grid/grid_summary.aspx(◇辉◆:)。 + -增加服务器端合计行示例grid/grid_summary_serverside.aspx(◆◇提拉米苏℡)。 + -增加合计行绝对定位到分页条上方的示例grid/grid_summary_absolute.aspx。 + -修正Chrome下表格EnableTextSelection属性失效问题(D大调)。 + +优化模板列示例grid/grid_edit_compare.aspx。 + -增加自动换行的示例grid/grid_line_wrap.aspx(水中月 )。 + -增加CheckBoxSelectOnly属性,满足只能通过多选框选中行的需求,增加示例grid/grid_checkall_only.aspx(隨风.NET)。 + -修正下次提交依然提交上次修改数据的问题。 + +可编辑表格增强。 + +修改GetModifiedDict函数的返回结果,这个和上个版本不兼容,需要特别注意。 + -之前返回的结构是Dictionary<int, Dictionary<int, string>>,现在返回的结构是Dictionary<int, Dictionary<string, string>>。 + -之前是通过RowIndex + ColumnIndex获得修改的值,现在通过RowIndex + ColumnID获得修改的值,更简单直观。 + -如果同时启用EnableCheckBoxSelect和AllowCellEditing,则忽略EnableCheckBoxSelect属性。 + -增加SelectedCell属性,用来获取AllowCellEditing模式下选中的单元格。 + -增加示例grid/grid_editor_cell_delete.aspx。 + -优化GetSelectCountReference方法使其在AllowCellEditing模式下也不出错,并改名为GetSelectedCountReference。 + -增加方法GetSelectedCellReference,用来获取选中的单元格,仅在AllowCellEditing模式下有效。 + -增加方法RejectChanges、GetRejectChangesReference、ClearSelections、GetClearSelectionsReference。 + -增加示例grid/grid_editor_cell_renderfunction.aspx,在RendererFunction通过客户端脚本获得下拉列表的值(舞柯庶)。 + -增加函数GetNewAddedList,返回新增数据行,增加示例grid/grid_editor_cell_new.aspx。 + +综合示例。 + -增加顶部菜单框架(一)综合示例iframe/topmenu/default.aspx(未来(sun))。 + -增加顶部菜单框架(二)综合示例iframe/topmenu2/default.aspx,左侧菜单也是放在单独的IFrame中,灵活度更高。 + -增加顶部菜单框架(三)综合示例iframe/topmenu3/default.aspx,左侧是手风琴和树控件的组合。 + +去AXD化并更新整个示例工程,所有对res.axd的引用都换成直接的网址,这也有效地减少了服务器部署的麻烦。 + -出于兼容性考虑,之前对res.axd调用依然有效,比如res.axd?icon=World。 + + + ++2013-05-21 v3.2.6 + +修正extjs v3.4.1.1引入的问题。 + +恢复表格和树控件中链接光标的手型而非指针。 + -删除ext-all-notheme中对x-unselectable的光标定义。 + -修正grid/grid_textselection.aspx无法选择文本的问题。 + -修正Chrome下无法编辑表格模板列中的文本输入框(刘军)。 + +表单相关。 + -修正在文本输入框中按回车键无法触发type=submit按钮的表单提交事件(jieking、luyj56、^老鼠^、消失的键盘)。 + -更新示例form/layout_panel2.aspx,增加表单验证功能。 + -增加示例form/form_reset.aspx、form/form_hide_field.aspx(注意控件HideMode属性的使用)。 + -为DatePicker和TimePicker增加EnableEdit属性(默认为true),更新form/timepicker.aspx(DT♂杰杰 )。 + -增加示例form/form_center_button.aspx,使两个按钮水平居中显示(夜冰)。 + -增加示例form/fileupload_toolbar.aspx,在工具栏中放置FileUpload控件(asp.net)。 + -UEditor升级为v1.2.5.1。 + -增加两个UEditor的示例aspnet/ueditor_two.aspx(Apollo)。 + +表格增强。 + -表格,下拉列表、复选框列表以及单选框列表的数据源支持IDataReader(路过秋天、周星星)。 + +增加EnableColumnLines属性,是否启用列分隔线(默认为false)。 + -增加示例grid/grid_column_lines.aspx。 + -修正Access和Gray主题下表格多表头的样式问题(bestwowo)。 + -增加示例grid/grid_empty_text.aspx。 + +增加只读属性SortField(从SortColumnIndex或者SortColumn计算得来)。 + -最好在Sort事件中设置表格的SortDirection和SortColumnIndex。出于兼容性考虑,在触发事件之前已经设置好了。 + -对示例grid/grid_sorting.aspx、grid/grid_paging_sorting.aspx、grid/grid_groupheader_sort.aspx进行重构。 + -增加示例grid/grid_groupheader_sort_hdmenu.aspx、grid/grid_paging_database_sorting.aspx。 + +对GridColumn进行重构(表格列也是一个控件),如果没有设置ColumnID,则ColumnID等于列的ClientID。 + +对CheckBoxField进行重构(内部实现)。 + -删除生成X_Rows.Values中的换行符。 + -将X_States放在X_Rows.State中,因为客户端对States的更改会同时影响到X_Rows.Values和X_Rows.DataKeys。 + -服务器端对States的改变,会同时更新Values,进而促使表格重新加载。 + -注意:表格行的States属性对外部不可见(internal),可以通过CheckBoxField的GetCheckedState和SetCheckedState来访问此属性。 + +增加表格的单元格编辑功能。 + -增加AllowCellEditing、ClicksToEdit属性;CommitChanges、GetModifiedCells、GetModifiedDict几个方法。 + -增加RenderField和RenderCheckField两个列类型。 + -增加示例grid/grid_editor_cell.aspx。 + + + ++2013-04-27 v3.2.5 + +更新extjs库到v3.4.1.1。 + -解决IE9/IE10下的UI显示问题。 + -解决表格控件在谷歌浏览器下,最后一列的标题栏没对齐的问题。 + -解决IE7/Chrome下有时不能拖动窗体的问题。 + +删除PageManager的EnableAspnetSubmitButtonAjax属性(shiningrise、夏雨雪(joe) )。 + -原因是低版本IE浏览器不允许使用JS修改input标签的type属性。 + -我们需要手工设置Asp.Net按钮的UseSubmitBehavior=false,更新示例aspnet/aspnet.aspx。 + -修正extjs的Ext.lib.Ajax.serializeForm函数,使其在序列化表单时不包含submit按钮,从而避免触发后台submit按钮的事件。 + -更新示例aspnet/aspnet.aspx。 + -更新示例config/release_time_chart.htm。 + +表格增强。 + -增加RowVerticalAlign属性(默认为Middle),以后所有表格中的行文字默认都是垂直居中显示。 + +增加EnableHeaderMenu属性(默认为false),支持在表格标题栏下拉菜单中显示隐藏列以及排序操作。 + -增加EnableColumnHide属性(默认为true),是否可以标题栏下拉菜单中显示隐藏列。 + -增加示例grid/grid_hdmenu_hidecolumn.aspx。 + -增加示例grid/grid_hdmenu_sorting.aspx。 + +增加EmptyText属性,指定数据为空时显示在内容区域的文本,可以是HTML标签。 + + + ++2013-03-23 v3.2.4 + -修正FineUI按钮和Asp.Net按钮共存时,点击FineUI按钮会触发Asp.Net按钮事件的问题(shiningrise)。 + -修正在表单字段中按回车键触发表单提交的问题(欧志辉)。 + -修正RadioButtonList隐藏时客户端验证出错的问题(⑥阿太⑥、appletreegd)。 + -为Image、LinkButton、HyperLink、Label增加Attributes属性,用来设置HTML标签属性。 + +增加示例iframe/selectprovince1.aspx、iframe/selectprovince2.aspx、iframe/selectprovince3.aspx(猪八戒)。 + -演示如何使用Attributes属性(或者使用JS脚本来设置HTML标签属性)。 + -演示如何调用父窗口的JS函数(如何找到原始窗口对象X.wnd.getActiveWindow()[1])。 + -演示如何自定义回发,如何使用ActiveWindow的GetHideReference和GetHidePostBackReference函数。 + +表格增强。 + -增加实时比较表格中两个文本输入框值的例子grid/grid_edit_compare.aspx(Mr.Wu)。 + -增加同步表格中下拉列表的选中值到文本输入框的例子grid/grid_edit_dropdownlist_textbox.aspx(老皮鞋)。 + -更新示例grid/grid_pageitems.aspx,演示如何使用extjs内置的图片资源。 + +增加调整表格宽度的四个示例。 + -grid/grid_width_expandunusedspace.aspx(最常用,一列宽度自适应其他列宽度固定)。 + -grid/grid_width.aspx、grid/grid_width_forcefitalltime.aspx、grid/grid_width_forcefitfirsttime.aspx。 + +增加保存表格模板数据的示例grid/grid_edit_save_auto.aspx、grid/grid_edit_save_manual.aspx(angrySperm)。 + -通过向表格元素添加HTML属性来防止重复注册表格的客户端事件。 + -修正其他示例中潜在的重复注册客户端事件的问题。 + -注意RowSelect事件在本示例中的运用。 + +增加EnableRowSelect属性和RowSelect事件,注意RowClick和RowSelect事件的区别。 + -增加示例grid/grid_rowselect.aspx,更新示例grid/grid_twogrid.aspx。 + -增加表格中文字居中显示的例子grid/grid_text_middle.aspx。 + +数据库分页时支持每页显示的记录数不同(appletreegd)。 + -增加示例grid/grid_simulate_tree_paging.aspx、grid/grid_simulate_tree_database_paging.aspx。 + -增加示例grid/grid_simulate_tree_database_paging_dropdownlist.aspx。 + +更新内置JS函数X.util.initTreeTabStrip,切换选项卡时是否在top.location.hash记录当前页面的地址。 + -在更新此版本后,你可能需要将此变量置为true,参考js/default.js。 + + + ++2013-01-09 v3.2.3 + -修正身份证和IP地址验证规则错误(Mr.Wu、轻雨湿意)。 + -为正则表达式验证增加RegexIgnoreCase属性,默认是区分大小写的。 + -修正清空CheckBoxList或者RadioButtonList时仍然存在一项的问题(liugeZ)。 + -整合jQuery UI Autocomplete组件,并增加了6个示例。 + -增强grid/grid_edit.aspx示例,现在可以通过回车键遍历所有的文本框(Mr.Wu)。 + -增强表单字段的Label为Ajax属性,也即是可以在页面回发时修改。 + -修正表单字段隐藏后仍然进行有效性校验的问题。 + -增加工具栏图标。 + +修正ExpandAllNodes无法展开二级节点的问题(szjazz)。 + -现在有两个办法来展开全部节点tree.ExpandAllNodes(); + -或者PageContext.RegisterStartupScript(tree.GetExpandAllNodesReference())。 + -FineUI的设计时支持,以商业软件的形式单独提供,请到官方论坛了解详情。 + + + ++2012-12-03 v3.2.2 + -修正动态添加按钮菜单的错误,并更新示例button/button_menu.aspx(西门吹雪)。 + +为Window控件增加Plain属性;为ToolbarPosition增加Footer类型;为面板增加FooterBarAlign属性。 + -增加示例window/window_toolbar.aspx。 + -更新示例basic/login.aspx、basic/login_captcha.aspx。 + -更新示例basic/login_captcha.aspx,增加刷新验证码的功能。 + +第三方编辑器增强。 + -修正示例aspnet/fckeditor.aspx无法获取用户输入值的问题。 + -增强示例aspnet/fckeditor.aspx,在更新编辑器内容时不需要刷新整个编辑器。 + -增加示例aspnet/ckeditor.aspx,演示如何在项目中整合CKEditor_4.0。 + -增加示例aspnet/ueditor.aspx,演示如何在项目中整合UEditor_1.2.3。 + +Grid增强。 + +重新绑定数据时(DataBind)清空选中的行(SelectedRowIndexArray)(欧志辉)。 + -更新注意:1. 需要先绑定表格数据,再设置选中的行。2.重新绑定数据时不再需要手工清空选中的行。 + -增加RowNumberWidth属性,对于序号列可能大于等于100的表格,需要设置合适的宽度,比如30px(凡人哥)。 + +增加EnableRowNumberPaging属性,行序号列是否支持分页(默认为false,也即是每页都从1开始)(欧志辉)。 + -增加示例grid/grid_rownumber_paging.aspx、grid/grid_rownumber_paging_database.aspx。 + +修正设置DataSource为null时无法清空表格内容的问题(猪八戒)。 + -更新grid/grid_pageitems.aspx,演示如何清空表格数据。 + -更新grid/grid_rowexpander.aspx示例,控制显示隐藏行扩展列。 + +增加ClearSelectedRowsAfterPaging属性,用来控制是否在服务器端分页后清空选中的行。 + -增加示例grid/grid_paging_selection.aspx和grid/grid_paging_database_selection.aspx,演示如何跨页保持选中数据。 + + + ++2012-11-25 v3.2.1 + +优化示例首页代码。 + -MenuCheckBox的CheckedChanged事件处理函数,防止事件重复执行两次。 + -向客户端注册的window.IDS脚本只在页面第一次加载时执行。 + -优化集合类(比如TabCollection,ControlBaseCollection)的实现,避免动态添加控件时存在的潜在风险。 + +Grid增强。 + -增加SelectAllRows方法。 + -增加PageItems属性,可以向分页工具条中添加控件,比如分隔符、按钮、下拉列表等(欧志辉)。 + -增加示例grid/grid_pageitems.aspx、grid/grid_pageitems_rowexpander.aspx、grid/grid_pageitems_pagesize.aspx。 + -修正第一次打开页面无法隐藏表格列的问题。 + -优化ExpandAllRowExpanders属性,从而避免页面第一次打开时的闪烁现象(grid/grid_rowexpander_expandall2.aspx)。 + -增加两个方法ExpandRowExpanders和CollapseRowExpanders。 + +为表单字段和面板控件增加Reset和GetResetReference方法,用来重置表单字段(小豬仔→pig/抓、随便逛逛、六脉神剑)。 + -更新示例form/form_compare.aspx、form/form.aspx、form/fileupload.aspx。 + +FileUpload增强。 + -修正FileUpload控件的HasFile属性总是为true的问题(黑冰.cn、8730574、☆幻~精灵、feitian78)。 + -为FileUpload控件增加OnFileSelected事件(启用AutoPostBack时有效)(辉月)。 + -增加示例form/fileupload_autopostback.aspx。 + + + ++2012-11-18 v3.2.0 + -修正通过标签初始的复选框列表在设置SelectedValueArray属性时出错的问题(◇辉◆:)。 + -修正下拉列表未绑定数据时回发页面出现在RecoverPropertiesFromJObject中的错误(〓飚〓、隨風往事、破风、Vian_Pan)。 + -修正动态创建的复选框列表,在默认未选中任何值的情况下,回发时SelectedValueArray取不到值的问题(sam.chang)。 + -修正Alert.Show始终显示默认图标的问题(swtseaman)。 + -为提示对话框增加自定义图标功能,通过Icon或者IconUrl来自定义(swtseaman)。 + -增加选择时间的控件TimePicker(时分)。 + -内置资源改为短格式,比如/res.axd?css=blue.css&v=1(◇辉◆:、swtseaman)。 + -更新示例站点样式,将配置项放到左侧菜单的上方,增加主区域空间。 + -增加控件MenuCheckBox(复选框或单选框)。 + -为RadioButton增加AutoPostBack属性。 + -修正示例工程中FCKEditor无法上传文件和浏览文件的问题。 + + + ++2012-08-18 v3.1.9 + -修正other/addtab.aspx示例的JS错误和BoundField使用Tooltip的错误(Dennis_Liu)。 + +修正Window的GetShowReference返回的字符串中包含双引号的问题(︶ㄣ東東ㄣ、天蓝若空、李剑飞、克儿~)。 + -虽然返回的JavaScript语句没问题,但是如果放到HTML属性中就有问题了。 + -修正HtmlNodeBuilder在处理双引号等字符时可能导致潜在JavaScript问题。 + -从根本上解决WindowField、LinkButton、HyperLink等控件的客户端脚本中存在单引号或者双引号时出现的各种问题。 + -增加动态创建模板列示例grid/grid_dynamic_columns2.aspx(大鸟打小鸟)。 + -修正按钮的Type设为Reset无效的问题,注意重置的其实是页面上所有的表单控件(e先生)。 + -修正英文下确认对话框标题依然默认中文的问题。 + -修正后台对可为空的int,short,double属性赋值时出现的异常(石头鱼)。 + +为Window控件增加GetMaximizeReference和GetRestoreReference两个方法。 + -变通的实现打开窗体后最大化:PageContext.RegisterStartupScript(Window2.GetShowReference() + Window2.GetMaximizeReference()); + -增加英文示例http://demo.fineui.com/en/。 + -更新行布局、列布局和锚点布局示例。 + -增加表格导出Excel文件示例。 + -增加表格模板列使用单选列表、复选列表的示例。 + -完善在线文档http://doc.fineui.com/。 + -公开ControlBase的ConvertPropertiesToJObject和RecoverPropertiesFromJObject两个方法。 + -兼容Asp.Net的用户控件(UserControl)并增加示例(Spring)。 + -更新示例框架,增加手风琴控件和树控件的组合菜单(幻之达)。 + -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 + -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 + -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空的情况下去除<span></span>标签。 + -类似于onReady函数,增加对onInit函数的支持,用来在执行页面初始化脚本之前调用。 + -优化复选框列表和单选按钮列表,减少生成的代码量。 + -修正CheckBoxList和RadioButtonList无法在回发中更新的BUG(破风、吉吉﹑落叶飞尘)。 + -修正CheckBoxList和RadioButtonList初始为空时页面不能显示的BUG(e先生、黑眼睛咪咪、宇洋)。 + -预祝俺家小师生日快乐! + + + ++2012-06-24 v3.1.8 + +重新规划Grid中列宽度的设置(之前必须为除了ExpandUnusedSpace的列设置固定宽度)(含章)。 + -增加属性MinColumnWidth(列的最小宽度)。 + -增加属性AutoExpandColumn,自动扩展宽度以填充剩余空间的列(ColumnID)(如果设置了ForceFitFirstTime或者ForceFitAllTime,则忽略此属性)。 + -增加属性AutoExpandColumnMax和AutoExpandColumnMin。 + -增加属性ForceFitFirstTime,成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效)。 + -增加属性ForceFitAllTime,成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效)。 + -增加属性VerticalScrollWidth,垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度)。 + -增加示例grid/grid_forcefit.aspx。 + -修正工具栏中控件在设置EnableBigFont时的字体大小(£快乐→无罪、快乐的猪)。 + -修正三层IFrame结构并在最外层页面弹出窗体时无法关闭的问题,并增加示例iframe/parent_postback_top.aspx(feitian78)。 + +将框架页面中树控件和选项卡控件的交互操作、改变选项卡时更新地址栏,以及页面第一次打开时展开相应的树节点和打开选项卡封装到一个JS函数中。 + -现在一行代码X.util.initTreeTabStrip(treeMenu, mainTabStrip);就完成了之前需要手写的100行JavaScript代码。 + -这个函数带来的另一个好处是,不需要在手工写选项卡中每个选项卡所需要图标的CSS,这个函数会根据树节点的图标自动添加这些CSS代码。 + -更新default.aspx后台代码,以便根据树节点对象的页面地址返回相应的文件类型图标。 + -修正TriggerBox不能改变触发图标的问题。 + -修正ActiveWindow.GetHidePostBackReference不能传入带单引号参数的问题(e先生)。 + -修正Window控件最大化后关闭,下次再打开时位置不对的问题(蓝色天空、松松工作室)。 + -为Label、HyperLink增加Enabled属性,并更新相应示例(幻之达)。 + +为BoundField、HyperLinkField、WindowField、CheckBoxField增加Enabled属性。 + -更新示例grid/grid_prerowdatabound.aspx,演示如何根据行的不同参数启用禁用LinkButtonField。 + -Enabled属性在权限控制中非常重要,AppBox(基于FineUI的企业通用管理框架)依赖于此属性。 + -为Tree增加SelectedNode属性,为TreeNode增加ParentNode属性(你是我的)。 + +为Web.config和PageManager增加CustomTheme和CustomThemeBasePath属性,来支持自定义样式,并向示例工程增加自定义样式blueen。 + -向示例工程添加三个网友提供的样式(蓝色天空)。 + -为Grid增加PreDataBound事件,用来在数据绑定之前修改列的属性(如果列的属性依赖于行的数据,可以使用PreRowDataBound)。 + +此版本与AppBox v1.0(基于 FineUI 的企业通用管理框架)同时发布。 + -注:AppBox非免费软件,请捐赠作者以获得AppBox源代码,具体细节请查看论坛bbs.fineui.com。 + + + ++2012-06-03 v3.1.7 + -修正不能选蓝色主题BUG,修正后台生成RadioButtonList时,AJAX获取不到选中值的BUG(swtseaman、西门吹雪)。 + +为Grid的BoundField、HyperLinkField、LinkButtonField、WindowField增加HtmlEncode和HtmlEncodeFormatString(TiDi)。 + -HtmlEncode和HtmlEncodeFormatString的默认值都为true,这样字段中的HTML标签会被编码显示。 + -这两个属性和Asp.Net控件GridView的BoundField的同名属性作用相同。 + -http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.htmlencode + -为Grid的HyperLinkField、WindowField增加UrlEncode属性,用来进行URL编码(默认为true)。 + -修正窗体大小超过页面尺寸时,窗体的标题栏位于页面之外的BUG(⑥阿太⑥)。 + -为IconHelper.GetResolvedIconUrl增加保护,如果传入的参数为Icon.None和String.Empty,则返回空字符串。 + -修正在父页面弹出的窗体最大化时错位的问题。 + -为Grid增加SelectedRowIndex属性,用来简化单选行时的操作。 + +为Grid所有列增加TextAlign属性,用来控制文本的排列位置,默认靠左排列。 + -复选框列的排列位置默认靠左显示,同时更新示例grid/grid_centercolumn.aspx。 + -为Grid增加多表头功能,增加示例/grid/grid_groupheader.aspx和/grid/grid_groupheader2.aspx(快乐的猪)。 + + + ++2012-05-20 v3.1.6 + -修正RowDataBound中使用Grid1.DataKeys[e.RowIndex]出错的问题(信徒)。 + +增加配置项EnableAjaxLoading和AjaxLoadingType,用来全局控制是否显示Ajax提示以及提示样式(swtseaman、张怡)。 + -和其他配置项一样,可以从三个级别进行控制(Web.config全局级别、PageManager页面级别和控件级别)。 + -增加示例other/ajax_loading.aspx。 + -Panel的IFrameUrl为#或者about:blank,也会立即生成iframe节点,只有在IFrameUrl为空字符串时才会延迟生成iframe节点。 + -修正在Grid的Toolbar中放置可回发的单选框列表,并回发重新绑定Grid时出现的问题(找到多个具有相同ID“c6r0”的控件)(magicyugi)。 + -为Grid增加属性ExpandAllRowExpanders,并增加示例grid/grid_rowexpander_expandall2.aspx。 + -为Grid增加属性EnableTextSelection,并增加示例grid/grid_textselection.aspx(swtseaman)。 + +修正VBox布局时BoxLayoutAlign返回的错误代码,并统一为Start、Center、Stretch、StretchMax。 + -更新示例:layout/vbox.aspx、layout/hbox.aspx。 + -修正非AJAX页面回发时,会重复ASPX标签添加的下拉列表选项(同样的问题存在于RadioButtonList和CheckBoxList)(swtseaman)。 + -增加API文档:http://doc.fineui.com/。 + + + ++2012-05-06 v3.1.5 + -增加主从表的示例:grid/grid_twogrid.aspx。 + +修正表格中没有模板列时,更新表格出错的问题(大鸟打小鸟、水若寒冰、HUGO.理、河蟹社会、幻之达)。 + -只更新一行代码,由if(!tpls)改为if (typeof (tpls) === 'undefined'),因为没有模板列时tpls为空字符串。 + -修正重新绑定表单后无法获取TemplateField中数据的问题(落末醉)。 + +为示例网站(http://demo.fineui.com/)启用GZIP压缩,同时增加示例config/enable_gzip_iis6.htm。 + -经测试,FineUI示例首页下载的JavaScript由原来的650K减少到250K左右,对首次页面加载速度的提升非常可观。 + -修正Grid 做排序时SelectedRowIndexArray的BUG(emissary)。 + -增加示例iframe/passvalue_iframe.aspx,演示如何从子窗体向父窗体传真。 + -更新accordion/accordion_tree.aspx,演示如何通过后台改变每个树节点的Target属性。 + +页面第一次加载完成后会调用用户自定义的onReady函数,页面在AJAX回发后会调用用户定义的onAjaxReady函数。 + -更新示例grid/grid_rowcolor.aspx,增加在重新绑定数据后高亮行的功能。 + -增加示例grid/grid_rowexpander_expandall.aspx,演示如何在打开页面后展开所有的扩展列(〓飚〓)。 + +TabStrip的EnableDeferredRender属性默认值修改为false,DropDownList的EnableEdit属性的默认值修改为false。 + -EnableDeferredRender为true,在有些情况下会出现JS错误。 + -EnableEdit用来启用下拉列表过滤,默认false可以在点击列表框本身弹出下拉列表,和Asp.net的下拉列表行为一致。 + +修正在IE下,Grid的模版列中出现文本输入框或者下拉列表时,第一次不能选中的问题(水若寒冰、幻之达)。 + -问题出现在extjs源代码Ext.grid.GridView中的focusCell,在IE下会focusEl.focus.defer(1, focusEl); + -也就是说会在1秒钟后重新让当前行获得焦点,自然刚打开的下拉列表由于失去焦点就关闭了,出现闪烁问题。 + + + ++2012-04-24 v3.1.4 + -修正页面中单独放置GroupPanel出错的问题(〓飚〓)。 + -修正手工调用form.submit出错的问题(redleaf)。 + -修正IE8下aspnet目录下示例出错的问题(隨风.NET、〓飚〓)。 + -完善Calendar控件,增加DateSelect事件,增加示例form/calendar.aspx(被遗忘的角落)。 + -修正DropDownList中值为空字符串的项无法响应OnSelectedIndexChanged的问题,并增加示例dropdownlist/dropdownlist_emptyvalue.aspx(⑥阿太⑥)。 + -为DropDownList增加ForceSelection和Text属性,用来控制是否强制选中项为下拉列表中的项(dennis)。 + -修正地址中包含#时在IE下回发报错的问题(22854632)。 + +重要更新:修正Grid中TemplateField与Asp.net控件的兼容性问题(幻之达、快乐的猪)。 + -简单说来,就是可以通过(System.Web.UI.WebControls.TextBox)row.FindControl("tbxGroupName");来在回发时获取Asp.net控件了。 + -增加示例grid/grid_edit.aspx。 + -增加示例grid/grid_edit_dropdownlist.aspx和grid/grid_edit_dropdownlist2.aspx,演示如何在后台绑定Grid中下拉列表数据。 + -为Grid增加UpdateTemplateFields方法,并增加示例grid/grid_edit_dropdownlist_update.aspx。 + + + ++2012-04-08 v3.1.3 + -修正Language="zh_TW"时JS报错的BUG(大雄)。 + +为DatePicker增加EnableDateSelect属性和DateSelect事件,用来在选择日期时回发页面(Landroid)。 + -为了区分AutoPostBack和EnableDateSelect两个属性,特增加示例form/datepicker_autopostback.aspx。 + -修正Accordion在Access主题下的样式问题(czfeifan)。 + -修正ImageWidth等类型为Unit的属性在AJAX改变时出错的问题(过往烟云)。 + -修正Chrome下上传文件出错的问题(渔夫子、Landroid)。 + +为FileUpload控件增加ShortFileName属性,用来获取不包含路径的客户端文件名(Landroid)。 + -FileName得到的值在IE下为完成路径,在Chrome下为文件名。 + -更新俄语语言包(vbelyaev)。 + -为Grid中的ImageField增加ImageWidth和ImageHeight(redleaf0724)。 + -为IconHelper增加String2Icon和Icon2String两个方法(redleaf0724)。 + -可以直接在ASPX中指定SortDirection和SortColumnIndex,同时增加SortColumn属性(杜志彬)。 + -修正Grid的排序标记在翻页或绑定后消失的问题(杜志彬)。 + + + ++2012-04-04 v3.1.2 + -修正IE下出现错误提示时拒绝访问的BUG(错将"about:blank"写成"about:blank;")。 + -修正Grid中自动回发复选框的BUG。 + -修正示例问题,grid/grid_rowdoubleclick.aspx,config/ajax.aspx。 + -增加如何绑定到二级属性的示例grid/grid_complex_property.aspx。 + -修正form/triggerbox.aspx中在输入框中按回车出错的BUG。 + -修正dropdownlist/dropdownlist.aspx选项中存在左右尖括号时出错的BUG。 + +更新示例grid/grid_checkboxfield.aspx,增加获取复选框选中状态的代码。 + -为CheckBoxField增加GetCheckedState方法。 + -Convert.ToBoolean(Grid1.Rows[rowIndex].States[field1.ColumnIndex]) 和 field1.GetCheckedState(rowIndex) 结果一样。 + +增加示例grid/grid_rowcheckall.aspx,用来全选反选当前行的全部复选框(第一滴冰雨)。 + -为CheckBoxField增加SetCheckedState和GetCheckedState两个方法。 + +为PanelBase增加RefreshIFrame和GetRefreshIFrameReference两个方法(郑伟)。 + -更新示例iframe/parent_postback.aspx。 + + + ++2012-04-02 v3.1.1 + +手工输入日期值时,如果输入项不匹配指定的格式,则会按照如下格式尝试解析(dennis)。 + -增加EnableChineseAltFormats,默认为true。 + -yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd。 + -修正DropDownList中ListItem的值为空字符串时不能选中的BUG(杜志彬)。 + -为DropDownList增加EnableEdit属性,用来表示是否启用编辑,以便在录入时自动过滤下拉框中的值,默认为true(随便逛逛、杜志彬、峰回路转)。 + -Nii.JSON类库更换为JSON.NET,从下个版本开始,引入FineUI.dll的同时还必须引入Newtonsoft.Json.dll(杜志彬、惊鸿沧海)。 + -为Form和SimpleForm增加LabelAlign属性,用来控制表单标签的位置(靠左,靠右,靠上)(知心叔叔)。 + -为表单控件增加FormItemClass,用来向一个表单项的外部DIV添加Css类名,参见示例other/formitemclass.aspx(凤舞天翔)。 + -为Grid增加EnableRowClick和EnableRowDoubleClick属性,可以用来控制单击或者双击行回发页面(低调的生活、凤舞天翔)。 + -修正FormRow的ColumnWidths不能指定像素值的BUG,并增加示例(form/layout_panel1.aspx)(yezie)。 + -将所有布局设置相关属性从Container移动到BoxComponent,这就意味着所有的控件都能够参与布局(见示例form/layout_panel2.aspx)。 + -DLL减肥,除去了不必要的JS、CSS以及语言资源,还把所有的内置图标移到了外面,DLL的大小由原来的6.5M减少为2.5M(liko1688、yezie、蓝色幻想)。 + -修正返回数据为空时出现JS错误的问题(第一滴冰雨、杜志彬)。 + -增加示例other/addtab.aspx,这样设置URL中hash值:window.location.hash='#/basic/hello.aspx'(稻草人)。 + -修正IE7下,窗口出现滚动条时,点击Window控件标题栏有时node为null的问题(泗水亭长)。 + +修正原生的IE7(非IE8下的IE7模式)中,iframe中的页面出现滚动条时,页面上的所有按钮都不能点击了(泗水亭长)。 + -最终发现是初始化QuickTips时出的问题,必须这样初始化Ext.QuickTips.init(false);,这是Extjs本身的兼容性问题。 + -Ext.QuickTips.init - autoReader:True to render the QuickTips container immediately to preload images.。 + -优化出错提示,现在可以显示详细的出错信息,并且会启用已经变灰的按钮(凤舞天翔)。 + -Grid绑定时简化DataBinder.Eval(Container.DataItem, "Gender")为Eval("Gender")(大石头、杜志彬)。 + + + ++2012-03-04 v3.1.0 + -修正Hidden属性失效的问题(〓飚〓、杜志彬)。 + -为PageManager增加EnableAspnetSubmitButtonAjax属性。 + -修正了在IE9兼容模式以及IE7和IE8下面,IFrame的Tab页在第二次打开时显示空白的问题(快乐的猪、恒业创达)。 + -修正Grid在第一个列设置为RenderAsRowExpander时排序出现的问题(第一滴冰雨)。 + +为可回发控件增加EnableAjaxLoading属性,用来控制是否显示Ajax提示信息(dennis)。 + -同时注意PageManager有相同的属性来控制页面级别的行为。 + +启用Visible属性,但请尽量不要使用这个属性除非你理解它的工作原理(宇洋)。 + -为了解决ExtJS本身的一个问题——如果单选框列表或者复选框列表中没有任何一项,就会出现JS错误。 + -你需要手动将那些没有任何项的单选框列表或者复选框列表的Visible属性设置false来解决这个问题。 + -为了能够在Ajax中显示隐藏元素,请使用Hidden属性(而不是Visible)。 + -使用Visible属性会导致不向浏览器输出这个元素,因此也无法通过Ajax切换Visible属性。 + -修正Form的LabelWidth属性不能控制单列表单字段的标签宽度的问题(〓飚〓、173242184、※晨曦后浪、yezie)。 + -修正HtmlEditor获取不到值的问题(あ雨换晴)。 + +按需加载ExtJS的JavaScript文件,大大加快了页面第一次的显示速度。 + -原来需要一次性下载800K的JavaScript文件,在网络较慢的环境中,单独的文件下载就需要6s左右,形成严重的水桶效应。 + -现在将ExtJS的JavaScript文件拆成如下几个部分:core、foundation、form、grid、menu、tab、tree,页面按需下载其中的一些文件。 + -将一个大文件分成几个小文件下载,也充分发挥了浏览器并行下载的特性,为更快的显示页面提供了帮助。 + -注意:这仅仅适用于页面第一次加载的情况,第二次及以后的页面加载会充分利用浏览器自身的客户端缓存,而无需再次下载这些已经下载过的JavaScript文件。 + -为Button\MenuButton\LinkButton\LinkButtonField增加ValidateMessageBox,用来控制在验证失败时是否出现提示对话框。 + + + ++2012-02-05 v3.0.1 + -修正IE7、IE8的兼容性问题(dotnet试验田)。 + -修正BUG - 弹出层如果我点击右上角的关闭按钮,再打开就不能打开(用情)。 + -修正上传控件在IE7下的问题(yfen)。 + + + ++2012-01-28 v3.0 + -修正 TwinTriggerBox 控件输入值后回车出错的问题(李渝川)。 + +Tree 控件增强。 + -Tree 控件增加 EnableIcons 属性。 + -Tree 控件的 AutoLeafIdentification 属性默认为 true(这是常用属性,不应该每次都设置)。 + -Tree 控件增加 SelectedNodeIDArray 属性。 + -简化 TreeNode 的内部结构,现在不需要写 Nodes 节点(土豆丝)。 + +Web.config 增强。 + -为 Web.config 中的 FineUI 配置节增加 EnableBigFont 配置项,适合于显示中文字体(最小字体由11px改为12px)。 + -为 Web.config 中的 FineUI 配置节增加 DebugMode 属性,用于在 ASPX 生成的 HTML 源代码中显示格式化后的 ExtJS 代码,方便调试(vazumi)。 + -为 Web.config 中的 FineUI 配置节增加 FormLabelSeparator 属性,同时 SimpleForm 和 From 控件增加 LabelSeparator 属性。 + -LabelWidth的默认值改为100px,与extjs保持一致(以前默认是80px)。 + +Button 控件增强。 + -修正 Button 设置图标后,CssClass 不起作用的问题。 + -Button 增加 IconAlign 属性。 + -为 Button 增加 Size 属性,可以设置按钮的大小。 + +表单控件增强。 + -HtmlEditor 控件增加 EnableChineseFont 属性,默认为 true(土豆丝)。 + -修正位于表单外面的 CheckBox 控件自动回发时的 JavaScript 错误。 + -表单字段增加 ShowEmptyLabel 属性(默认为 false),用来控制是否显示空白标签(示例在 /basic/login_captcha.aspx)。 + -为 Label HyperLink LinkButton 增加 Tooltip ToolTipTitle ToolTipAutoHide 三个属性,用来显示提示信息。 + -为 HyperLink LinkButton 增加 EncodeText 属性。 + -为 TextArea 增加 AutoGrowHeightMin 属性。 + -为 HyperLinkField 添加属性 DataNavigateUrlFieldsEncode,用来编码地址栏URL。 + -修正 Window 的 ESC 按键事件处理和关闭按钮事件处理不一致的情况(sa)。 + -简化客户端应用内置图标的方式,以前需要这样的代码 <%= IconHelper.GetIconUrl(Icon.Reload) %>(依然有效),现在直接 res.axd?icon=Reload 就可以了(土豆丝)。 + +修正TabStrip以及Window的内容高度异常的问题:AutoWidth和AutoHeight默认为false,FineUI不会默认渲染这个值,除非手工指定。 + -这是extjs3.4引入的特性,如果组件的autoHeight为true,则浏览器会根据组件的内容管理其高度,手工调用setHeight没有效果。 + -典型的案例,如果设置Window的AutoHeight为true,在不能最大化和改变窗体的大小。 + -修正首页打开后不能默认选中左侧第三级树节点的问题。 + +增加FileUpload控件,并增加示例页面form/fileupload.aspx。 + -修正使用文件上传控件后,返回的结果中出现HTML编码问题。 + +Grid控件增强。 + -为 WindowField 和 LinkButtonField 字段增加 Icon 和 IconUrl 两个属性(efrigate43)。 + -为全部表格列字段增加 ToolTip 属性,同时原来的 DataTooltipField 改名为 DataToolTipField。 + -增加示例 grid/grid_centercolumn.aspx,使某列居中显示。 + -为 TemplateField 增加 RenderAsRowExpander 属性,用来显示行扩展。增加示例 /grid/grid_rowexpander.aspx。 + +为所有控件增加 Ajax 属性 CssClass 和 CssStyle(goansonpan)。 + -增加示例 other/cssstyle.aspx。 + -示例工程,在切换示例时同时修改地址栏,以便页面刷新后也能回到最后一次浏览的页面。 + -增加 Table、HBox 和 VBox三种布局,并对所有布局示例进行重构。 + +单选框控件增强。 + -为 RadioButtonList 增加 ColumnVertical、Required 和 RequiredMessage 三个属性。 + -增加 CheckBoxList 控件,并增加示例 /form/checkboxlist.aspx。 + -增加示例 /aspnet/aspnet_literal.aspx。 + +将Button和MenuItem的Menus属性改为Menu属性,毕竟一个按钮只可能有一个菜单,这样也简化了ASPX中的标签。 + -同时更新/button/button_menu.aspx和/other/menu_dynamic.aspx两个示例。 + + + ++2011-05-09 v2.3.5 + -大部分控件的设计时支持。 + -从下个版本开始,我将会启动本地化战略调整方案,简体中文将会作为官方支持语言。 + + + ++2011-05-02 v2.3.4 + -更新extjs版本至v3.3.3(GMz)。 + -修正问题#9869(Pablogrind)。 + -为Region控件增加CMargins属性 - issue #9597(ronnieoverby)。 + +修正问题#9448(tonyredondo). + -这个问题仅在树控件中出现,需要在客户端回发时使用UniqueID。 + -修正Grid控件排序图标显示的问题。 + -修正X.utils.updateViewState中存在的问题,它导致Grid的第一个示例在回发两次后出错。 + + + ++2011-02-22 v2.3.3 + -更新extjs版本至v3.3.1。 + -更新Ext.ux.TabCloseMenu的多语言支持(en, zh_CN, zh_TW)。 + + + ++2010-09-29 v2.3.2 + -不绑定任何数据到Grid时,确保页面不会出错。 + -修正了Grid列属性DataFormatString的一个bug,比如设置{0:yy-MM-dd HH:mm}时没有效果。 + -修正下拉列表控件不能绑定DataTable的BUG(RedOcean)。 + -增加土耳其语言资料文件(abdullaharslan)。 + -Grid的BoundField增加NullDisplayText属性,用于处理数据库中的null值,如果没有设置则默认为空字符串。 + -修正DatePicker中的一个bug(31/01/2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(OktaEndy)。 + -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(ben.zhou)。 + -应用补丁#6593, #6621(vbelyaev)。 + +修正IE7下Grid分页速度慢(youwei, StevenGuan, hazardvn, gavindou, ttjacky)。 + -实际上IE7下所有的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 + -俄语翻译(vbelyaev)。 + + + ++2010-06-30 v2.3.1 + -FineUI控件将不在依赖ViewState,减少1/4左右的HTTP数据传输量。 + -控件和示例的增强。 + + + ++2010-03-28 v2.2.1 + +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(mmdcup)。 + -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(zhaowenke)。 + -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 + -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 + +集成Extjs最新版本v3.1.1。 + -增加一个新的Theme - Access。 + -修正了Firefox下Zoom In/Out时页面消失的BUG。 + -删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 + + + ++2010-01-31 v2.2.0 + -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(261629698)。 + +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。 + -增加示例tabstrip/tabstrip_addtab.aspx。 + -重构了示例网站的架构,目前只有一层IFrame结构。 + -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 + -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(zqmars)。 + -Window控件更新。 + -关闭按钮默认直接关闭,不会弹出确认对话框。 + -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 + -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 + -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 + -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 + -WindowPosition默认居中,而不是黄金分割位置。 + +Button, Window等控件弹出位置属性的变化。 + -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 + -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 + -Confirm.GetShowReference的最后一个参数target变为枚举类型。 + -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 + -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 + + + ++2010-01-06 v2.1.9 + -集成Extjs最新版本v3.1.0。 + -修正灰色皮肤的CSS问题。 + -修正Grid的列名中不能包含中文字符的BUG(davidwen)。 + -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 + -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(Violet)。 + -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 + -修正了弹出菜单的位置在Firefox下不正确的BUG(eroach)。 + -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 + -使用Hidden来显示隐藏FineUI控件,而不是使用Visible属性(Visible目前设置为只读属性)。 + -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 + -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 + -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(anson)。 + -修正绑定到Tree的XMLDocument中Icon属性映射错误(nopnop9)。 + -修正HtmlEditor不能编辑的BUG(TheBox)。 + -修正IE下有时会出现空白页面的情况(olivia919)。 + + + ++2009-12-06 v2.1.8 + -修正了使用IFrame的Window关闭后不能再次打开的BUG(alexa99)。 + -修正了IE下Grid中的一个JS问题(lqm4108)。 + -修正Alert消息中引号未编码导致的JS错误(sun1299shine)。 + +集成extjs3.0.3。 + -修正弹出对话框的宽度计算错误(会保持最小的状态)。 + -增加新的皮肤Gray。 + -为示例工程添加改变语言和皮肤的下拉列表。 + -为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。 + + + ++2009-12-01 v2.1.7 + -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(eroach)。 + -修正一些书写错误(bmck)。 + -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(bmck)。 + -BorderPanel更名为RegionPanel。 + -DropDownList拥有MarkInvalid方法(sun1299shine)。 + -增加中国的省市县三级联动示例(data/shengshixian.aspx)(Blues T)。 + -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(eroach)。 + -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(yymaoji)。 + + + ++2009-11-26 v2.1.6 + +修正动态创建Grid列的BUG(gxpan)。 + -增加示例(data/grid_dynamic_columns.aspx)。 + -修正Form不能自适应浏览器大小的改变(kaywood)(WorkItem#6309)。 + -增加重载方法Alert.Show(message, title, icon)(TheBox)(WorkItem#6353)。 + -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(BluesT)。 + -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 + + + ++2009-11-21 v2.1.5 + +Tree优化。 + -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 + -GetNodeById更名为FindNode,保持和FindControl一致命名。 + -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 + -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 + -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(wjl_wjl520)。 + +TreeNode的属性NodeId被重命名为NodeID,这是FineUI中的一个命名约定。 + -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 + -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 + -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 + -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 + -增加示例(other/custom_postback.aspx)(thebox)。 + -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 + -为Tree增加AutoLeafIdentification属性。 + -增加示例(tree_auto_leaf_identification.aspx)(wdrabbit)。 + + + ++2009-11-17 v2.1.4 + -修正Window的关闭按钮提示信息一直是中文的BUG(thebox)。 + -部分FineUI控件的设计时支持(会在后续版本中逐步完善)。 + -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 + -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 + -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(dk3214)。 + +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 + -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 + +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(sun1299shine)。 + -增加示例:form/form_validate.aspx + + + ++2009-10-19 v2.1.3 + +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 + -FineUI支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 + -加载s.gif图片在本机进行,不会请求extjs.com远程资源(efrigate43,abaocoole)。 + -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 + -更新/basic/login.aspx示例,使用验证图片(kedee)。 + -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_rowclick.aspx(chenguizhu2006)。 + -为所有的表单字段增加AJAX属性ReadOnly(skydb)。 + -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(geruger)。 + + + ++2009-09-27 v2.1.2 + -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 + -修正RELEASE版本下多语言加载的BUG(yigehaoren)。 + -增加pt_BR语言,由Ujvari提供。 + +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 + -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 + -所有Icon的列表在icon.aspx。 + -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 + + + ++2009-09-15 v2.1.1 + -修正不能动态修改AccordionPane属性Items的BUG。 + +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 + -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 + +为FineUI.Alert.Show增加点击确定的JavaScript回调函数。 + -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 + -FineUI.Alert.Show("参数错误!", String.Empty, FineUI.ActiveWindow.GetCloseReference()); + +TreeNode的前面的多选框可以自动回发了。 + -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 + -示例在:http://demo.fineui.com/data/tree_run.aspx + -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 + -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(Steve.Wei)。 + -添加定时器控件Timer,用来定时发起AJAX请求。 + + + ++2009-09-06 v2.1.0 + -Button的Pressed属性值能够正确的反映客户端的变化。 + -优化Tree控件的AJAX实现。 + +为页面的Form添加autocomplete="off"属性。 + -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 + +添加对extjs3.0中所有语言的支持。 + -FineUI扩展的多语言包在js\languages\fineui目录下,目前只有en,zh_CN,zh_TW三种实现 + -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 + + + ++2009-09-01 v2.0.9 + -为FineUI.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 + +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 + -这将会影响所有的aspx页面,所以要特别关注。 + -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). + +所有的面板默认有两个集合属性(Toolbars和Items). + -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). + -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 + -祝你生日快乐 - 小师妹妹。 + + + ++2009-08-29 v2.0.8 + -FineUI支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 + -将所有的示例转化为英语版本。 + -修正Tree控件的一个BUG(定义Mappings属性时)。 + +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 + -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 + +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 + -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 + + + ++2009-08-25 v2.0.7 + -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 + -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 + -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(503684912)。 + -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(your568)。 + -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 + -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 + -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 + +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 + -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 + -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 + + + ++2009-08-14 v2.0.6 + -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(shguo)。 + -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 + -优化Tree节点的NodeId自动生成,减少ViewState占用。 + + + ++2009-08-09 v2.0 beta5 + +FineUI和Asp.net的提交按钮兼容问题(千帆)。 + -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" + --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 + --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 + +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 + -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 + -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 + -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 + -修正ToolbarText的文本在AJAX下更新的BUG。 + -Button的Pressed属性在AJAX可更新(mgzhenhong)。 + -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 + + + ++2009-08-02 v2.0 beta4 + +和Asp.Net的Forms Authentication兼容[mgzhenhong]。 + -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 + -现在支持Response.Redirect,你可以选择Response.Redirect或者FineUI.PageContext.Redirect重定向页面,两者效果一样。 + -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 + -Button增加Type属性(button,reset,submit)[mgzhenhong]。 + -修正Alert.Show方法不能指定文本前图片的BUG[xmq&mgzhenhong]。 + -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 + -增加Menu和Accordion的示例。 + -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[xmq&mgzhenhong]。 + + + ++2009-07-22 v2.0 beta3 + -兼容FCKEditor。 + -在IE8.0,Firefox3.5下测试通过。以后FineUI将不会对IE6.0提供支持。 + + + ++2009-07-13 v2.0 beta2 + -集成extjs最新版本v3.0。 + +兼容IE6.0-7.0-8.0。 + -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 + -目前先禁用IE6.0-7.0的QuickTips。 + -优化底层JavaScript。 + + + ++2009-07-05 v2.0 beta1 + -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 + -使用YUI Compressor压缩JavaScript和CSS文件。 + -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 + -FineUI自身的CSS会紧挨着页面<title>标签引入,这样在<head>中自定义的样式可以覆盖FineUI缺省样式。 + +Alert对话框会遮挡所有的Window窗口。 + -使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 + -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 + -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 + -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 + -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 + -更新示例工程。 + + + ++2009-03-25 v1.3.1 + -Tree在AJAX回发展开节点时JS错误[xlli]。 + -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。 + -页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx) + -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。 + + + ++2009-03-03 v1.3.0 + -如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[xlli]。 + -如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。 + -页面上放置FineUI-Button和ASP.NET-Button,则点击FineUI-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。 + -FineUI内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。 + +如果以前你听过不要在FineUI工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在FineUI控件和ASP.NET标准控件和平共处了。 + -如果一个ASP.NET按钮控件要使用FineUI的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 + -如果要在一次FineUI的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 + + + ++2009-02-27 v1.2 beta9 + -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。 + -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。 + +系统底层代码优化(主要是Javascript的封装和BUG修复)。 + -底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。 + -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 + ---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 + -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 + -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 + ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! + -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 + ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 + -Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。 + ---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 + ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 + ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 + -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 + ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 + -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 + -CurrentActiveWindow改名为ActiveWindow。 + -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) + ---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。 + + + ++2009-02-23 v1.2 beta8 + -ContentPanel中内容不能自动扩展高度的BUG[huihuang]。 + -DropDownList在Ajax回发时不能计算模拟树的数据[huihuang]。 + -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。 + -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。 + -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。 + +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。 + + + ++2008-10-28 v1.2 beta7 + -DropDownList没有选中任何一项,回发时报错[huihuang]。 + -Window显示位置不对,以及不能拖动的BUG[huihuang]。 + +PageContext优化。 + -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 + -去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。 + -Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[jqpeng]。 + -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[jqpeng]。 + -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。 + -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。 + -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。 + -AccordionLink当鼠标移上和移开时,有背景色的变化效果[huihuang]。 + +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。 + -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 + + + ++2008-10-20 v1.2 beta6 + +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。 + -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 + +DropDownList优化。 + -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 + 现在可以方便的在后台DropDownList1.Items.Insert(0, new FineUI.ListItem("全部", "-1"));来达到同样的效果。 + +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[jqpeng]。 + -和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; + -ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。 + -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。 + -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。 + +为所有控件属性增加在VS中的智能提示。 + -需要将FineUI.XML和FineUI.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 + +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。 + -TriggerIconType.Default -> TriggerIconType.None + -SystemIconType.Empty -> SystemIconType.None + -RegexPattern.USER_DEFINED -> RegexPattern.None + -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。 + +注意:一个属性可以拥有多个值的情况。 + -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 + -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 + +AccordionLink实现为控件。 + -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[jima]。 + +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。 + + + ++2008-10-15 v1.2 beta5 + -验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。 + +优化下拉列表。 + -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 + -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 + -DropDownList不支持EmptyText属性。 + -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 + -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 + + + ++2008-09-27 v1.2 beta4 + +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。 + -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 + -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 + -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。 + +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。 + -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上<Items>标签。 + -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 + -通过BodyPadding控制链接列表的边距。 + -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。 + + + ++2008-09-25 v1.2 beta3 + +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。 + -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading + -TabStrip/Toolbar + -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。 + -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。 + +大部分容器的子控件集合更正为Items(以前有些是Rows)。 + -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 + -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 + -保留TabStrip的Tabs(TabCollection)属性。 + -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 + -预祝今晚神七发射成功。 + + + ++2008-09-22 v1.2 beta2 + +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [xmzhu]。 + -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时数组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 + +代码优化与设计时支持(示例中表单控件都已支持设计)。 + -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox + -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox + -CheckBox/RadioButton/RadioButtonList/DropDownList + -Grid + + + ++2008-09-19 v1.2 beta1 + -Image/LinkButton/HyperLink增加一些Ajax可更新属性。 + +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。 + -修正Form/SimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。 + -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [jbzhang]。 + -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果) + + + ++2008-09-09 v1.1 + +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在控件中。 + -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 + -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。 + -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。 + +布局整理。 + -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 + -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 + -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor + + + ++2008-09-08 v1.1 beta7 + -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [huayu]。 + -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。 + +大部分的FineUI控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。 + -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 + -US的FineUI改造强烈依赖于此属性,这个版本发布后可以继续。 + -网报中唯一没有用到FineUIAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 + + + ++2008-09-04 v1.1 beta6 + -PageContext.Redirect支持普通页面转向和FineUIAjax下页面转向。 + +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[xmzhu]。 + -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 + -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 + -DropDownList在Ajax时应该先更新数据再设置选定项 [xmzhu]。 + -Button/MenuButton增加Ajax可更新属性OnClientClick [xmzhu]。 + -Tree的Ajax支持(尚需优化)。 + + + ++2008-09-02 v1.1 beta5 + -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维数组),而不是[](一维数组)。 + -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。 + -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。 + -不要使用Asp.net的控件HiddenField,而是使用FineUI的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。 + -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。 + -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。 + -增加两个Theme[Slate/Black](样式尚需完善)。 + + + ++2008-09-01 v1.1 beta4 + -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。 + -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。 + -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。 + -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。 + +完善Ajax。 + -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 + -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 + -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 + -ToolbarText增加Ajax可更新属性Text。 + + + ++2008-08-31 v1.1 beta3 + -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。 + -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。 + +安全的Ajax设计。 + -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 + -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 + -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 + -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。 + + + ++2008-08-29 v1.1 beta1 + +Window控件是否弹出的状态在回发时维持。 + -控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 + +完全抛弃Asp.NetAjax,FineUI控件内置Ajax支持。 + -这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 + -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 + +在这种设计下,其实可以完全抛弃Javascript。 + -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 + -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 + -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 + +目前FineUIAjax的限制。 + -只对FineUI控件起作用,对Asp.net控件不起作用。 + -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 + -对改变控件的Visible属性会有错误。 + -Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。 + -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。 + -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。 + -Grid选中行的状态在第一次回发时不能保持的BUG。 + + + ++2008-08-26 v1.0 + +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 + -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 + +优化弹出窗口中IFrame的显示速度。 + -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 + -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致) + +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。 + -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 + -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。 + +TabStrip中非当前Tab会延迟渲染。 + -这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染时间。 + -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 + -不能比较两个DataPicker大小的BUG。 + -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。 + -全新的FineUI.Examples(基础知识/表单控件/数据绑定/容器布局/IFrame框架)。 + + + ++2008-08-19 v0.4 beta6 + +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。 + -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 + -RadioButtonList放在在BorderLayout中显示不了的BUG [zgjiang2]。 + +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx) + -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; + +需要先回发页面再弹出IFrame窗口。 + -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 + -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 + + + ++2008-08-15 v0.4 beta5 + -点击关闭窗口的按钮,在IE6下会有JS错误。 + -增加BorderLayout控件,示例在iframe/borderlayout.aspx。 + +Radiobuttonlist显示有重影(示例在radio.aspx)。 + -全新的样式。 + -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 + -GetValueReference取得的值不正确的BUG。 + -动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx) + +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[xmzhu]。 + -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 + -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) + + + ++2008-08-13 v0.4 beta4 + -点击关闭窗口的按钮,在IE下会有JS错误。 + -Window的右上角关闭图标增加提示,优化事件响应。 + -Window的代码重构。 + +修正一个的内存泄漏。 + -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 + -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 + -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 + -IE窗口最小化时,IE会自动进行垃圾回收。 + + + ++2008-08-12 v0.4 beta3 + -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。 + -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。 + +页面正在加载的提示尽早的显示出来。 + -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 + -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 + + + ++2008-08-08 v0.4 beta2 + -TabStrip延时加载出错。 + -Window的IFrameUrl处理的BUG,比如Pages_FineUI目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_FineUI/FE_ApplyEditor.aspx。 + -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。 + -实现网报首页下拉菜单和左侧菜单的导航功能。 + -Window的创建在页面显示后进行,不计算在js渲染时间内。 + -优化费用申请页面(尽量减少不必要的层次嵌套)。 + -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。 + -Window中的保存并关闭按钮和Asp.netAjax冲突。 + -优化关闭Window的js脚本,减少写到页面的js大小。 + -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。 + + + ++2008-08-05 v0.4 beta1 + -DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。 + -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。 + -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[dcding]。 + -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。 + +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [xmzhu]。 + -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 + -一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。 + -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 + +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。 + -这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 + -每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。 + -TextField等表单字段增加Readonly属性。 + +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。 + -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下) + +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) + -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 + -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 + -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) + +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) + -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 + -示例4,弹出窗口中的弹出窗口。 + -对整个Examples更新测试。 + + + ++2008-07-31 v0.3 beta12 + -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。 + -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。 + -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。 + -Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [zgjiang2]。 + +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。 + -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 + -参照Yslow的评分规则,将JS文件引用由head移动到body中。 + -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。 + +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx) + -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 + + + ++2008-07-24 v0.3 beta11 + -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [jima]。 + -Window在回发时设置的Title不起作用的BUG。 + -增加Image控件 [jima]。 + -Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [zgjiang2]。 + -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。 + -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [xmzhu]。 + -过滤提示消息中的换行符(转换为<br/>),否则提示信息可能导致页面渲染错误 [dcding]。 + + + ++2008-07-23 v0.3 beta10 + +完善Tree控件。 + -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 + -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 + -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 + -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码! + -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。 + + + ++2008-07-22 v0.3 beta9 + +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。 + -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 + +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。 + -虽然最后未能解决<div style="width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;"><div style="width: 16px; height: 18px; float: left;">##</div>差旅交通费</div>在IE和Firefox下显示的不同效果。 + -但是通过用<img src="##" />来代替<div style="background:url(##)" />,从而实现FF和IE下样式的统一。 + -刚看到old9的解决方案:把“差旅交通费”改成“<span style="margin-right: -1000px;">差旅交通费</span>”,在IE下和FF下的都不换行,:-) + -LinkButton增加OnClick事件 [huihuang]。 + -Window通过设置IFrameUrl和Popup不起作用的BUG。[xmzhu]。 + +增加树控件(Tree)(示例在tree2.aspx)。 + -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 + -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 + -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 + + + ++2008-07-16 v0.3 beta8 + +ContentPanel中放置FineUI控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。 + -隐蔽性非常强,原来在ContentPanel中渲染FineUI控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 + 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 + -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 + +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。 + -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 + -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: + 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): + 示例在 Site.Master 页面。 + +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了! + -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), + 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 + + + ++2008-07-14 v0.3 beta6 + -增加FlashObject控件。 + -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。 + -Accordion选中样式微调。 + -预加载Form表单出错时提示信息的背景图片。 + +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。 + -因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 + -改变Grid中静态的CheckBoxField图片。 + -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx) + + + ++2008-07-12 v0.3 beta5 + -页面菜单Toolbar的分割符和背景不相融合。 + -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。 + -如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。 + +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。 + -这是由于ajax后执行的javascript中不能有return false语句。 + +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [xmzhu]。 + -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。 + -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。 + +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [xmzhu]。 + -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 + -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[jima]。 + +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。 + -增加SplitButton控件。 + + + ++2008-07-09 v0.3 beta4 + -DataPicker默认的日期格式为(yyyy-MM-dd)。 + +Form表单字段(TextBox,DropDownList...)之间可以比较大小 [huihuang]。 + -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 + +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[jima]。 + -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 + -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [xmzhu]。 + -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[jima]。 + +表单字段Enable=false时显示颜色太浅 [jima]。 + -覆盖缺省样式的.x-item-disabled,设置不透明。 + + + ++2008-07-08 v0.3 beta3 + -Grid没有数据,向后翻页按钮可以点击的BUG [huihuang]。 + +增加HiddenField控件。 + -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 + +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。 + -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 + -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。 + +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。 + -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 + -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。 + + + ++2008-07-07 v0.3 beta2 + +增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。 + -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 + -示例在ajax3.aspx/content_page4.aspx。 + -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 + + + ++2008-07-03 v0.3 beta1 + +容器控件的AutoHeight/AutoWidth默认为false。 + -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 + +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。 + -也可以在ContentPanel中放置用户控件,注意两者的区别。 + +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。 + +支持Asp.net ajax异步加载。 + -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 + -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 + + + ++2008-07-02 v0.2 beta12 + +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx) + -支持Iframe内按钮和window右上角关闭按钮。 + -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 + +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。 + -在Firefox下还有问题。 + +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。 + -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 + -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 + +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。 + -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。 + -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。 + + + ++2008-06-30 v0.2 beta11 + -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。 + -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录时总记录数不会变化 [zgjiang2]。 + -关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [zgjiang2](示例在window_postback.aspx)。 + -如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。 + +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx) + -目前还不支持Window右上角关闭按钮的提示保存功能。 + -Master/Content的内容页中Grid的Sort事件不起作用的BUG [zgjiang2]。 + -Grid中的LinkButtonField设置ConfirmText会出错 [huihuang]。 + -增加静态类Confirm。 + + + ++2008-06-27 v0.2 beta10 + +Grid完善。 + -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 + -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 + -切换分页时清空选中的值 [jqpeng]。 + -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [xmzhu] (示例在grid_prerowdatabound.aspx)。 + -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 + + + ++2008-06-25 v0.2 beta9 + +Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx/simpleform.aspx) + -在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。 + +关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。 + +Grid完善。 + -去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。 + +EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx) + -使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。 + +增加AllowPaging属性。(示例在grid_paging.aspx) + -使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。 + +数据库分页支持。(示例在grid_database_paging.aspx) + -使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIndex = e.NewPageIndex;LoadPageData(Grid1.PageIndex);OK。 + -增加CheckBox绑定,可响应回发事件 [zgjiang2](示例在grid.aspx)。 + + + ++2008-06-23 v0.2 beta8 + -SimpleForm和Form可以在窗口大小发生变化时自动调整宽度。 + -Accordion右侧菜单增加鼠标hover的样式。 + +TriggerBox。 + -设置Enable=false,不会响应回车和点击事件。 + -增加EnableTextBox属性,只禁用文本框,不禁用Trigger。 + +向弹出的窗口动态传递页面数据。 + -解决方法和Button的ConfirmText的使用一样(<script>)。 + -Window1.GetShowReference(String.Format("triggerbox_iframe2.aspx?param1=<script>{0}</script>", TriggerBox2.GetValueReference())) (示例在textbox.aspx/triggerbox_iframe2.aspx)。 + -Grid的WindowField也支持将页面中的文本框等表单元素的值作为参数传递到Iframe页面 [zgjiang2]。(示例在grid_iframe.aspx/simpleform.aspx) + -Form中只有一行,并且某一列的字段设置Visible=false时会渲染出错的BUG [zgjiang2]。 + -Label/HyperLink在Form外面时不会占据一行的位置。 + -增加LinkButton控件。(示例在hyperlink.aspx) + +Grid完善。 + -增加RowDataBound事件 [zgjiang2]。(示例在grid.aspx) + -增加LinkButtonField [zgjiang2]。(示例在grid.aspx) + + + ++2008-06-20 v0.2 beta7 + -在链接中调用Window1.GetShowReference()出现js错误的BUG [clyin2]。 + -容器的EnableLightBackgroundColor在Form中有多列时渲染不正常 [zgjiang2]。 + -Button增加ConfirmIcon属性(默认MessageBoxIcon.Warning),两个按钮文本“确定”和“取消”[zgjiang2]。 + +Grid上面的Button要显示类似“你确定要删除 2 条信息吗?”这样的信息 [zgjiang2](示例在content_page1.aspx中)。 + -btnConfirmButton.ConfirmText = String.Format("你确定要删除 <b><script>{0}</script></b> 条信息吗?<br/>这是不可恢复操作,确认删除请选择“确定”。", Grid2.GetSelectCountReference());,系统会把<script></script>之间的内容解析为js代码。 + -TriggerBox响应回车按键 [zgjiang2]。 + +怎样查看Window中iframe页面的高度(示例在simpleform.aspx)。 + -在页面添加function onReady(){alert(Ext.get('<%= Panel1.ClientID %>').getSize().height);}脚本即可。 + -如果iframe中页面高579,则要设置Window的高度为579+31=610px(ie和firefox下少有不同,以ie下为准)。 + +Form中的表单字段不能设置Visible=false属性 [zgjiang2]。 + -Grid如果没有绑定数据,在回发时渲染出错 [zgjiang2](示例在budget.aspx)。 + -参考Asp.net自身的控件,DropDownList的SelectedIndex属性只能在后台代码中设置(以前在ASPX代码中设置的都要改动),就好像使用Accordion的ActiveIndex一样。 + -HyperLink增加OnClientClick属性 [jima](示例在hyperlink.aspx)。 + +增加RadioButton控件(可以模拟竖排RadioButtonList),在回发时保持状态 (示例在radio.aspx)。 + -增加RadioButtonList控件,可以在回发时保持状态,可以绑定数据(用法和DropDownList类似) (示例在radio.aspx)。 + -Grid在绑定DataBind()后的DataKeys还是空的BUG [zgjiang2]。 + -TabStrip中的Tab支持IFrame (IE下显示还有问题)。 + +已知问题(已经在v0.2 beta9中解决) + -Grid如果有选择框,则不能客户端排序,否则客户端排序后再回发取得的选中项不正确,目前是增加一个EnableClientSort属性,默认为false。 + + + ++2008-06-19 v0.2 beta6 + +Accordion完善。 + -ActiveIndex只能在代码中设置,不能在ASPX源码中设置。 + -AccordionPanel选中时标题的背景是高亮的(参考CRM实现)[zgjiang2]。 + -TabStrip中有多个Tab时,只有当前显示的Tab内容布局正确,其他不正确 [jima]。 + -IE6下表单字段(比如TextBox)下面的线显示不了(每个页面都应该添加正确的DOCTYPE:xhtml1-transitional)。 + -Utility改名为PageContext,和关闭Window相关的代码移动到CurrentActiveWindow(表示当前激活的窗口)。 + +Window完善。 + -Firefox下,用服务器端隐藏窗体控件时还有问题(Window内部放置一个ContentPanel)的BUG。 + -Window位置WindowPositionType(GoldenSection/Center)(默认使用黄金分割点)(如果不设置Top/Left),不会超出屏幕范围 [clyin2]。 + -CloseAction仅仅是点击关闭按钮的动作(示例在textbox.aspx)。 + -Window中网页的按钮动作通过注册特定的JS脚来实现(CurrentActiveWindow静态类下面的GetCloseReference/GetCloseRefreshReference/GetClosePostBackReference)(示例在textbox.aspx)。 + -GetShowReference(string windowTitle, string iframeUrl)定义改变成GetShowReference(string iframeUrl, string windowTitle),这个和以前的版本不兼容,需要注意! + -容器控件增加EnableLightBackgroundColor属性,此时背景色较浅。 + +增加TriggerBox。 + -服务器端事件TriggerClick。 + +弹出Window,关闭返回值(示例在textbox.aspx/triggerbox_iframe2.aspx)。 + +这个过程非常有意思: + -1.首先在弹出窗口之前,我们通过 TriggerBox1.OnClientTriggerClick = Window1.GetSaveStateReference(TriggerBox1.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx") + "return false;"; 把TriggerBox1的客户端id保存在Window1的js对象中,然后弹出窗口。 + -2.弹出窗口中点击一个按钮处理业务逻辑,并把结果返回给TriggerBox1的代码时:PageContext.RegisterStartupScript(CurrentActiveWindow.GetWriteBackValueReference(CurrentActiveWindow.GetLoadStateReference(), TextBox1.Text) + CurrentActiveWindow.GetClosePostBackReference());取得保存在Window1的js对象中的TriggerBox1的客户端id,然后把TextBox1的值赋给父页面的TriggerBox1,最后关闭Window。 + -3.OK。 + -如果弹出窗口时设置: TriggerBox1.OnClientTriggerClick = Window1.GetSaveStateReference(tbxName.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx") + "return false;"; 则返回时会把内容写到tbxName的文本框中,:-) + -这种方式的扩展性也很好,我们可以点击任一个按钮,弹出窗口,然后把窗口的返回值赋给任意一个文本框。只需要在父页面中:btnSetValueToName.OnClientClick = Window1.GetSaveStateReference(tbxName.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx");(注意:如果最后不加"return false;",则需要设置按钮的EnablePostBack=false,否则点击按钮会回发页面。) + +还有一种常见的应用:从窗口需要返回两个值,一个是给用户看的值(Text),另一个是隐藏的值(Value)(当然也可以返回多个值)。 + -1.首先在Window上下文中保存三个文本框的ClientID: TriggerBox2.OnClientTriggerClick = Window1.GetSaveStateReference(TriggerBox2.ClientID, TriggerBox2_TextBox.ClientID, TriggerBox2_TextBox2.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx"); + -2.然后在Window返回时向这三个文本框赋值:PageContext.RegisterStartupScript(CurrentActiveWindow.GetWriteBackValueReference(CurrentActiveWindow.GetLoadStateReference(), TextBox1.Text, TextBox1.Text + " 的值", TextBox1.Text + " 的值2") + CurrentActiveWindow.GetCloseReference()); + -3.OK。 + -4.实际执行的javascript代码还是蛮复杂的(if(!activeWindow){var activeWindow=parent.box.window_default_group.getActive();if(!activeWindow)return false;}var controlClientIds=(function(){return eval('parent.box.'+activeWindow.id+'.box_string_state');})();if(typeof(controlClientIds)=='string'){eval('parent.box.'+controlClientIds).setValue('这是返回的值');}else{eval('parent.box.'+controlClientIds[0]).setValue('这是返回的值');var controlValues=['这是返回的值 的值','这是返回的值 的值2'];var controlCount=Math.min(controlClientIds.length-1,controlValues.length);for(var i=0;i<controlCount;i++){eval('parent.box.'+controlClientIds[i+1]).setValue(controlValues[i]);}}if(!activeWindow){var activeWindow=parent.box.window_default_group.getActive();if(!activeWindow)return false;}eval('parent.box.'+activeWindow.id+'_hide();');),不过不用管它,呵呵。 + -Button/TriggerBox增加EnablePostBack属性,EnablePostBack=false则点击按钮不会回发(这样OnClientClick时就不必写"return false;")(示例在triggerbox_iframe2.aspx)。 + + + ++2008-06-17 v0.2 beta4 + +Window完善。 + -标题前面的图标显示位置不正确(window.aspx)。 + -Window窗体有背景色的BUG(应该为白色)(window.aspx)。 + -Window的滚动条的颜色不对(button_iframe.aspx)。 + -登陆页面脚本错误,去掉Window控件的DefaultButtonID属性。 + +Grid,WindowField的DataWindowTitleFormatString属性有问题。 + -默认页面字体大小为12px。 + -容器控件(Panel,Accordion等)增加EnableLargeHeader属性(默认为false),同时删除Accordion的UsePanelHeaderStyle属性。 + -Form/SimpleForm的LabelWidth默认为80px(原来的是100px)。 + -表单字段控件增加FocusOnPageLoad属性,可以在页面加载完毕后获得焦点(示例在login.aspx)。 + -单行文本框(TextBox/NumberBox/DataPicker/DropDownList)增加NextFocusControlID属性,指定回车时获取焦点的控件(这样login.aspx可以实现两种效果:1.用户名框回车焦点到密码框,密码框回车提交页面;2.用户名框或密码框回车都提交页面)。 + -删除图标替换,按钮的关闭/删除/保存并继续等图标可以使用属性SystemIcon(枚举类型)来指定。 + + + ++2008-06-16 v0.2 beta3 + +Accordion完善(示例在content_page1.aspx)。 + -名称变化,增加AccordionPanel子控件,增加属性(ShowCollapseTool/EnableActiveOnTop/EnableFill/EnableAnimate)。 + -增加ActiveIndex属性,并在回发时保持状态。 + -增加UsePanelHeaderStyle属性,将AccordionPanel的标题渲染成Panel的标题样式。 + -标题前面的图标大小必须是:24*24,所有容器控件(Panel/Form等)的标题前面的图标都要求24*24。 + -页面菜单样式调整(设置Toolbar的IsPageMenu="true")。 + -滚动条和链接缺省样式的定义(在dll中定义)。 + + + ++2008-06-13 v0.2 beta2 + +Master/Content完善。 + -Content中弹出的Window窗口只能在Content中移动的BUG [leizhang5&clyin2&jima]。 + -Content下的最外层Panel不用设置AutoHeight=false&AutoWidth=false,这个是默认的 [leizhang5]。 + -Grid的工具条上的新增按钮和检查是否选中按钮出错 [zgjiang2]。(示例在content_page1.aspx) + +优化框架的视图状态(涉及所有的容器控件)。 + +参考Asp.net Ajax Extension对视图状态的处理方式。 + -所有Box控件实现INamingContainer接口。 + -对于像Panel这样的容器控件,设置[ParseChildren(true)] & [PersistChildren(true)],也就是说把控件内容作为属性,但是把控件的子控件作为控件保持状态,这样就不用手工一层一层的向下维护属性的视图状态了。 + -在控件的OnInit中,EnsureChildControls(),这样可以确保在Page_Load时引用的控件的ClientID是正确的(有层次结构)。 + -修正“ContentPanel放置在Panel等控件中,不能在回发时保持状态”的BUG。 + -pagelayout2.aspx中文本框的状态不能保持,其实时渲染时没有放在form中,参考extjs的开源实现FormViewport。 + -Master/Content的Content中的控件可以保持状态。 + -Grid中的WindowField,修改DataTitleField为DataWindowTitleField。 + -DropDownList的Traditional默认为true。 + + + ++2008-06-12 v0.2 beta1 + +Grid完善。 + +Grid控件中的列增加Visible属性,可以隐藏/显示列,使用:Grid1.Columns[0].Hidden = false; (Grid前面的多选框列和序号列不计算在内) [zgjiang2]。 + -CheckBoxField不使用CheckBox的图片,这样容易和Grid自身的多选框混淆 [zgjiang2]。 + -如果DataSource是对象的集合,则支持复合对象,也即时可以绑定到UserInfo.UserName的形式(示例在grid_complex.aspx)[zgjiang2]。 + -如果Grid放在Panel中,则WindowField不起作用,已经修正 [zgjiang2&jima]。 + -ToolBar内的Button不能设置Visible=false的BUG(同时容器控件中的子控件也面临同样BUG,并修正)[zgjiang2]。 + -Panel中只放置一个Toolbar,不放其他控件时会出错,已经修正 [zgjiang2]。 + +DropDownList完善。 + -和Grid的DataSource一样,DataTextField/DataValueField也支持复合对象的绑定。 + -自动回发的事件被激发两次 [zgjiang2]。 + +TabStrip中放置Form时显示不正确 [jima]。 + +页面布局完善。 + -容器控件增加属性(Layout=Anchor/Fit,AutoScroll,AutoHeight,AutoWidth,AnchorValue)。 + -Layout="",自动扩展的宽度和高度(autoHeight=true 并且 autoWidth=true)。 + -Layout=Fit,容器控件A中只能有一个子控件B,并且B会填充整个A(示例在layout_fit.aspx)。 + +Layout=Anchor,容器控件A可以包含很多子控件B1,B2,B3...通过B1,B2,B3的属性AnchorValue控制每个控件占据的宽度和高度(示例在layout_anchor.aspx)。 + -常用数据(每行表单26px,如果有一个三行的表单,并且设置了BodyPadding="5px",则此表单占据高度为 26px*3+5px*2=88px)。 + -经典查询页面布局为:Panel(Layout=Anchor)[Form(AnchorValue='100%'), Panel(Layout=Fit & AnchorValue='100% -88')[Grid]]。 + 其中"100% -88":第一个参数表示宽度,可以是百分比也可以是一个负整数(比如-56意思是距离右边框56px);第二个参数表示高度,可以是百分比也可以是一个负整数(比如-88意思是距离下边框88px); + +整体页面框架。 + -增加PageLayout控件,用于页面的整体布局(示例在pagelayout2.aspx)。 + -支持MasterPage(示例在Site.master/content_page1.aspx)(VERY COOL~~~)。 + -增加Accordin控件。 + + + ++2008-06-10 v0.1 beta12 + +Grid完善。 + -如果没有选中任何一项,则弹出对话框提示(btn1.OnClientClick=String.Format("if(!{0}){{{1}return false;}}",grid1.GetHasSelectionReference(),Alert.GetShowReference('至少选中一项'));),太麻烦,封装成一个函数(btn1.OnClientClick=grid1.GetNoSelectionAlertReference('至少选中一项');)[zgjiang2]。 + -禁用客户端排序(在GridColumn中不设置SortField即可)[clyin2]。 + +Button完善。 + -增加系统图标属性SystemIcon,并能自动设置ToolTip属性 [jima]。 + -按钮可以按下(在Toolbar中使用),增加属性(EnablePress/Pressed)(例子在simpleform.aspx)。 + -默认按钮的右侧不留任何空白,同时增加属性MarginRight来设置右侧空白。 + +DropDownList完善。 + -增加验证(Required)[clyin2]。 + -增加一些属性(Traditional将下拉框变成传统的不可编辑模式,Resizable下拉列表可以拖放大小) + -增加自动回发的支持(AutoPostBack属性和SelectedIndexChanged事件)[clyin2]。 + -下拉列表中经常需要一项“全部”,增加默认支持(EnableFirstItem/FirstItemText(默认"全部")/FirstItemText(默认"-1"))[jima]。 + +Form完善。 + -FormRow实现为控件。 + -Form中两列的LabelWidth不起作用。 + -Form中一列和两列的右侧对齐问题(全部距右边框25px)。 + -很多控件(包括Form/Panel/SimpleForm)增加在源代码(HTML)视图下的自动排版功能(使用Ctrl+D+K自动格式化),这对ASPX源代码的清晰非常有好处。 + -增加HyperLink控件(使用类似Label) [jima]。 + -在web.config中增加一个配置项(MessageTarget=side/qtip),设置表单验证的提示信息的显示方式。 + -增加静态类Utility(GetCloseWindowReference/RegisterStartupScript)。 + +Window的IFrame网页中添加关闭Window的功能(可以指定关闭后刷新Window所在页面或者引发Window的回发事件,在Window中定义)。 + -关闭Window:btnClose.OnClientClick = FineUI.PageContext.GetCloseWindowReference() + "return false;";(例子在button_iframe.aspx) + -保存后关闭Window:在按钮的回发事件最后注册脚本 FineUI.PageContext.RegisterStartupScript(Page, FineUI.PageContext.GetCloseWindowReference()); (示例在button_iframe.aspx) + +Toolbar完善(示例在simpleform.aspx)。 + -增加ToolbarSeparator,工具条分隔符。 + -增加ToolbarText,可以在工具栏放置静态的文本内容。 + -增加ToolbarFill,可以将工具栏分割成左右两部分。 + -页面整体布局示例(在pagelayout.aspx)。 + +已知问题。 + -有时设计时更改的内容不能保存到HTML源代码中,建议的做法是在HTML代码中修改,在设计时预览效果。 + + + ++2008-06-05 v0.1 beta10 + -Button的 OnClientClick 容错处理,如果最后没有分号结束,添加分号结束 [zgjiang2]。 + +Grid完善。 + -Grid增加客户端脚本,判断是否有CheckBox被选中(GetHasSelectionReference/GetSelectCountReference)(示例在grid.aspx) [zgjiang2]。 + -Grid如果不设置DataKeyNames会出错 [zgjiang2]。 + +Window完善。 + -Window控件通过右上角的图标按钮关闭,不能在回发时保持状态 [zgjiang2]。 + -关闭Window控件时的动作(CloseAction=None/Refresh/PostBack),并增加Close事件(示例在window.aspx)。 + -增加一些控件的默认属性,在从工具栏拖放到代码区域时直接赋值(Panel/Form/Window等)。 + -所有容器的BodyPadding默认为"0px"。 + -容器增加背景色支持(EnableBackgroundColor/BackgroundColor)(每种主题的默认背景色是不同,可以自己设置背景色)(示例在grid.aspx)。 + +Form完善。 + -DropDownList如果放在Form中,则不能在回发时保持状态 [zgjiang2&jima]。 + -Form中的FormRow不再是控件。 + -Tree/DropDownTree控件原型(只是简单的渲染,没有绑定编辑功能)(示例在tree.aspx)。 + + + ++2008-06-03 v0.1 beta9 + +增加IFrame支持。 + -Panel、Tab、Window、GroupPanel增加属性(EnableIFrame、IFrameUrl),用来指定iframe加载的网页地址。 + -Button控件增加OnClientClick属性,可以设置点击按钮时需要执行的客户端脚本 [zgjiang2]。 + +Window完善。 + -增加 Popup 属性(默认为true),指定页面加载时显示窗口,注意和Visible=false的区别(不渲染),Popup=false(渲染但不弹出)。 + -回发时保持弹出窗体是否显示的状态。 + -客户端(JavaScript)、服务器端代码(C#)显示隐藏弹出窗口的代码示例(window.aspx)。 + -如果Window窗体中嵌套ContentPanel,则隐藏(Popup=false)窗体时ContentPanel任然显示的BUG。 + -客户端改变IFrameUrl和窗体的Title,并在回发时保持状态(button_iframe.aspx)。 + +Grid和IFrame的交互。 + -示例(grid_iframe.aspx)。 + + + ++2008-05-30 v0.1 beta8 + +增加ContentPanel控件。 + -设计时支持,ContentPanel默认不显示边框和标题栏,并且BodyPadding为0。 + -去掉容器的RenderChildrenAsContent属性(这是一个不易用的设计),增加的ContentPanel控件专门放置html/asp/box标签,我们的Panel/Window/Tab/GroupPanel中只能放置box标签。 + -不向后兼容,这将影响所有的容器控件示例,已经更新工程。 + -Window窗口居中显示时避免闪烁(其实是移动Window造成的,现在的做法是先移动再显示,就不会闪烁了)。 + +DropDownList[jima]。 + -可以绑定到简单/复杂类型的列表(比如:List<string>/List<MyClass>),如果未指定DataTextField/DataValueField,则取对象的ToString()值。 + -Items集合增加 FindByText/FindByValue 方法。 + -Button控件增加一个IconUrl属性,可以在按钮文字前面添加一个图标。 + +增加Toolbar控件。 + -这是一个很酷的效果,可以向Panel/Window/SimpleForm等容器控件中加入顶部工具栏或底部工具栏。 + -设计时支持。 + + + ++2008-05-29 v0.1 beta7 + +Grid完善。 + -支持DataKeyNames,DataKeys,SelectedRowIndexArray属性,方便对选中行进行控制。 + -完善设计时支持,增加列编辑窗口。 + -列类型增加ImageField。 + -列增加Width属性,每列都应该指定列的宽度(除了设置ExpandUnusedSpace="True"的列)。 + -列的ExpandUnusedSpace指定此列的宽度是否占用未使用的空间,每个Grid只能有一列的ExpandUnusedSpace为true。 + -支持服务器端排序(列增加SortField属性,Grid增加EnableServerSort属性,Sort事件),客户端排序是默认支持的。 + -支持客户端分页(EnableClientPaging,PageSize),不需要回发刷新,适合数据量比较小的情况(<500)。 + -回发服务器过程中,能够保持客户端分页的状态和选中的状态。 + +Grid已知问题。 + -不支持行内按钮事件。 + -TemplateField内不能包含服务器端控件。 + -不支持服务器端分页。 + -Form中的字段不会随着页面的缩放而缩放,目前没有找到解决方法 [jima]。 + -Button不要占据一行,多个按钮排列成一行(并且默认margin-right:10px),现在不再需要table定位了 [jima]。 + + + ++2008-05-27 v0.1 beta6 + +Grid功能增强(不支持分页)。 + -设计时支持。 + -单选/多选,回发时保持状态。 + -属性控制是否显示多选框。 + -属性控制是否显示行序号。 + -客户端排序。 + -列类型可以为BoundField,CheckBoxField,HyperLinkField,TemplateField。 + -TemplateField中可以自定义数据绑定,目前只支持Asp.Net1.1的绑定语法<%# DataBinder.Eval(Container.DataItem, "MyValue") %>,不支持Asp.Net2.0的语法<%# Eval("MyValue") %>。 + -用户可以在function onReady(){}函数中,书写自定义Javascript代码块 [jqpeng]。 + -Button增加弹出Confirm对话框的功能(只需要设置属性ConfirmText)[jima]。 + -Window控件增加在窗体定位的属性(Top/Left)[jqpeng]。 + -容器控件增加IconUrl属性,可以在标题前面增加一个图标 [jqpeng]。 + + + ++2008-05-23 v0.1 beta5 + -如果Button的ValidateForms指定的表单嵌套在其他容器里面,会渲染失败 [jqpeng]。 + -去除容器的RenderAsItems属性(字面意思难理解),增加RenderChildrenAsContent(默认为false,将容器子控件渲染为内容),如果要在容器中放置System.Web.UI.HtmlControls和System.Web.UI.WebControls子控件,必须设置RenderChildrenAsContent="true"。 + -容器控件的内容只有在容器渲染完成后(RenderChildrenAsContent="true"),才会显示出来。 + -如果设置容器控件不可折叠,渲染时去掉保持折叠状态的隐藏字段。 + -在页面回发时保持可折叠容器的折叠状态 [jqpeng]。 + -在页面渲染时,Button的Text属性默认为"["+ID+"]",容器的Title属性默认为"["+ID+"]"。 + -容器的BodyPadding实现为字符串,可以设置为"5px"或"5px 10px"或"5px 10px 10px 20px",最终渲染为Style的padding属性。 + -PageLoading可以更改加载图片,可以设置回发时是否显示。 + -TextBox等表单控件放置在FromPanel中,其状态在回发过程中不能保持 [jqpeng]。 + -SimpleForm/Form的FormRow属性不再只能添加表单字段,而是和Panel一样可以添加任意的FineUI控件,这就意味这可以很方便的把Panel/Button/GroupPanel/TabPanel添加到Form中。 + -SimpleForm/Form的设计时有很大变化,去除SimpleForm/Form的字段设计窗口(可以方便的从工具栏拖放),FormRow重新实现为控件。 + + + ++2008-05-20 v0.1 beta4 + -修正表单字段的TabIndex属性,应该从1开始设置。 + -Button增加ValidateForms属性,可以执行提交之前对哪些表单进行有效性验证 [jima]。 + -表单嵌套在容器控件时,宽度和高度的自适应。Panel/GroupPanel/Window/Tab这几个控件增加RenderAsItems属性,表示将容器渲染为集合而非内容,其实FormPanel/SimpleFormPanel默认的就是把容器渲染为集合。 + -新增PageLoading控件,用于在页面尚未完成加载时显示Loading图标,完成加载后渐变到页面内容。 + -新增DropDownList控件。 + -新增Grid控件(原型阶段)。 + -改名:TabPanel->TabStrip,SimpleFormPanel->SimpleForm,FormPanel->Form,Row->FormRow。 + + + ++2008-05-14 v0.1 beta3 + -TabPanel设计时样式修正。 + -TabPanel增加选项卡编辑窗口。 + -SimpleFormPanel/FormPanel编辑表单字段的窗体的易用性调整。 + -设计时,阻止拖放非表单字段控件到表单字段编辑区域。 + -所有表单字段的设计时样式调整,表单字段必须放置在SimpleFormPanel/FormPanel容器中,已更新示例工程。 + -SimpleFormPanel设计时的可编辑区域,最后增加一个空白行,方便从工具条拖放表单字段控件。 + -FormPanel设计时用Table组织一行的显示效果,可以方便在一行中增加删除表单字段,这个效果非常酷,可以在行之间增加删除调整控件,行的列数会自动调整。 + -FormPanel中的Row不再实现为控件,同时舍弃ColumnCount属性,降低复杂度。 + -兼容UTF-8和GB2312类型的网站。 + -DesignTimeControl改名为DesignTimeStyle,需要在设计时样式支持的页面需要添加此控件。 + -表单字段增加属性ShowRedStar,在Label后面显示一个红色的星号,用来标示关键字段。 + -HtmlEditor控件的高度设置没用,这个应该是extjs的bug(http://extjs.com/forum/showthread.php?t=28150)[jima]。 + -允许自动回发的CheckBox放置在FormPanel中,在页面渲染时会回发到后台的BUG。 + + + ++2008-05-08 v0.1 beta2 + -增加控件的设计时支持。舍弃FormPanel里面的RowSet控件,并增加 GroupPanel控件。 + + + ++2008-04-30 v0.1 beta1 + -共包含Button、TextBox、TextArea、DataPicker、NumberBox、HtmlEditor、CheckBox、Label、 + Panel、Window、TabPanel、FormPanel、SimpleFormPanel 共 13 个服务器端控件和 Alert 一个静态帮助类。 + + + ++2008-04-25 v0.1 preview2 + -增加DropDownList,FormPanel,Label,CheckBox,RadioBox,Panel,TabPanel,TextArea,Window共 9 个服务端控件。 + + + ++2008-04-11 v0.1 preview + -包含Alert,Button,TextBox,DataBox,HtmlBox,Calendar,NumberBox共 7 个简单的控件。 + + + +Copyright 2008 30372245@qq.com, All rights reserved. diff --git a/FineUI/release_history_en.txt b/FineUI/release_history_en.txt index f360d00..2f67ea4 100644 --- a/FineUI/release_history_en.txt +++ b/FineUI/release_history_en.txt @@ -1,401 +1,404 @@ -About FineUI -ExtJS based professional ASP.NET Controls. - -FineUI Mission -Create No JavaScript, No CSS, No UpdatePanel, No ViewState and No WebServices web application. - -Support Browsers -IE 7.0+, Firefox 3.6+, Chrome 3.0+, Opera 10.5+, Safari 3.0+ - -License -Apache License 2.0 (Apache) -Note: ExtJS is released under GPL v3 license (http://www.sencha.com/license). - -Demo&Download -http://fineui.com/demo/ - -You can download FineUI from CodePlex or install using NuGet. -PM> Install-Package FineUI - - - -Release History - -+2012-11-18 v3.2.0 - -Check the chinese version. - - - -+2012-08-18 v3.1.9 - -Check the chinese version. - - - -+2012-06-24 v3.1.8 - -Check the chinese version. - - - -+2012-06-03 v3.1.7 - -Check the chinese version. - - - -+2012-05-20 v3.1.6 - -Check the chinese version. - - - -+2012-05-06 v3.1.5 - -Check the chinese version. - - - -+2012-04-24 v3.1.4 - -Check the chinese version. - - - -+2012-04-08 v3.1.3 - -Check the chinese version. - - - -+2012-04-04 v3.1.2 - -Check the chinese version. - - - -+2012-04-02 v3.1.1 - -Check the chinese version. - - - -+2012-03-04 v3.1.0 - -Check the chinese version. - - -+2012-02-05 v3.0.1 - -Check the chinese version. - - - -+2012-01-28 v3.0 - -Check the chinese version. - - - -+2011-05-09 v2.3.5 - -Design time support for most controls. - -From the next verion, I will start localization strategic adjustment, and Simplied Chinese will be the official support language. - - - -+2011-05-02 v2.3.4 - -Update to extjs v3.3.3(GMz). - -Fix issue #9869(Pablogrind). - -Add CMargins for Region control - issue #9597(ronnieoverby). - +Fix issue #9448(tonyredondo). - -It's bug only exist in Tree control, we need the UniqueID for postback usage. - -Fix Grid sort icon display issue. - -Fix a bug in X.utils.updateViewState, which cause the grid basic example doesn't work when postback more than 2 times. - - - -+2011-02-22 v2.3.3 - -Update to extjs v3.3.1. - -Add language support to Ext.ux.TabCloseMenu(en, zh_CN, zh_TW). - - - -+2010-09-29 v2.3.2 - -Make sure there is no error when no data is binding to Grid in page's first load. - -Fix a bug that DataFormatString not works in Grid, for example {0:yy-MM-dd HH:mm}. - -Fix a bug that DataTable cann't be binded to DropDownList(RedOcean). - -Add language translation for Turkish(abdullaharslan). - -Add NullDisplayText property to BoundField control of Grid, the default value of this property is an empty string. - -Fix a bug in DatePicker that Text = 31/01/2010 (31 Jan 2010) will return NULL, trying to parse DateTime using it's DateFormatString(OktaEndy). - -Fix a bug(ComboBox in extjs v3.2.2), the getValue function will always get the first item of duplicate item text(ben.zhou). - -Apply patch #6593, #6621(vbelyaev). - -Fix a bug that Grid paging is very slow under IE7&IE6(youwei, StevenGuan, hazardvn, gavindou, ttjacky). - -Russian language FineUI translation(vbelyaev). - -Construction like ToString("F2") on system with comma as decimal separator produce incorrect properties value(vbelyaev). - - - -+2010-06-30 v2.3.1 - -FineUI controls will on longer depends on ViewState, more than 1/4 data exchange will be saved. - -Enhancement for controls and examples. - - - -+2010-03-28 v2.2.1 - +Add a overload funtion to GetAddTabReference of TabStrip that you can specify the tab's icon url(mmdcup). - -Fix a bug when invoking this function through PageContext.RegisterStartupScript, the icon disappears(zhaowenke). - -Fix a bug in basic/hello.aspx, which can not pupop dialog in a new window. - -Hide the RegionPanel's border of the example site home page - ShowBorder="false". - +Integrate with extjs3.1.0. - -Add a new theme - Access. - -Fix a bug in firefox that page will disappear when using zoom in/out. - -Delete EnableLightBackgroundColor property for Panel, and EnableBackgroundColor property only support Blue and Gray themes. - - - -+2010-01-31 v2.2.0 - -Make ImageButton control in Asp.net has the similar behavior of Button(Ajax Submit)(261629698). - +Add two functions GetAddTabReference and GetRemoveTabReference to TabStrip, which are used to dynamic add Tabs. - -Add example tabstrip/tabstrip_addtab.aspx. - -Refector FineUI.Examples structure, now there is only one level iframe. - -Add EnableTabCloseMenu property to TabStrip, which is used to enable the mouse right menu. - -Add DecimalPrecision property to NumberBox control(Need set the property NoDecimal="false")(zqmars). - -Window control updates. - -Click the close button of a Window control, it will not show the confirm dialog by default. - -GetConfirmFormModifiedHideReference is renamed to GetConfirmHideReference, and the same thing happened to other funtions. - -Add two property EnableConfirmOnClose(default:false), CloseAction(Hide, HideRefresh, HidePostBack). - -Fix a bug that prevent EnableMaximize from working in Window control. - -Remove SystemIcon property from Button control, now you should use Icon="SystemClose" instead of SystemIcon="Close". - -Set WindowPosition default to Center, not GoldenSection. - +The target property of Button, Window etc controls change. - -The type of Window Target property is changed from string to enum, don't forget to change code in aspx: Target="_self" -> Target="Self", Target="_parent" -> Target="Parent". - -MenuButton, LinkButton, Button, LinkButtonField ConfirmTarget Target property is changed from string to enum. - -Confirm.GetShowReference and Alert.GetShowReference has the similar changes. - -Add ValidateTarget property to MenuButton, LinkButton, Button, LinkButtonField, to control where to show the form validation failure message. - - - -+2010-01-06 v2.1.9 - -Integrate with extjs3.1.0. - -Fix css issue in gray theme. - -Fix a bug that Grid column cann't contain chinese characters(davidwen). - -Add AjaxTimeout property to Web.config and PageManager(unit:second, default:30). - -Fix a bug that Grid control cann't get SelectedRowIndexArray property in PageIndexChange event(Violet). - -Button control will not gain display:inline CSS rules auto, if you want two buttons stay in the same line, please use float:left CSS rule. - -Fix a bug that popup menu's position is not right in Firefox(eroach). - -Add EnableEdit for TriggerBox and TwinTriggerBox controls. - -Use Hidden property to show and hide control instead of Visible, which is a readonly property now. - -Use Hidden to show and hide Window control, now Popup is marked as an Obsolete property. - -Method GetCloseReference in Window and GetCloseReference in ActiveWindow are renamed to GetHideReference(Notice all Close character are changed to Hide). - -Add EnableClose property(default false), two methods GetShowReference and GetHideReference to Tab control(anson). - -Fix a bug that Xml document binding to Tree has a error Icon property mapping(nopnop9). - -Fix a bug that HtmlEditor is not editable(TheBox). - -Fix a bug there will be blank page under IE sometimes(olivia919). - - - -+2009-12-06 v2.1.8 - -Fix a serious bug in previous version, the Window with iframe can't be opened twice(alexa99). - -Fix a JS error of Grid control in IE(lqm4108). - -Fix a JS bug in Alert class(when there are quote in the message or title)(sun1299shine). - +Integrate with extjs3.0.3. - -fix an issue where MessageBox width is calculated differently depending on the previous content. - -Add new theme - Gray. - -Add change language and theme dropdown list for examples. - -Add static method Refresh to PageContext, which is used in changing language and theme. - - - -+2009-12-01 v2.1.7 - -Add example(iframe/parent_postback_run3.aspx), how to postback parent page through simple javascript(eroach). - -Fix some typos(bmck). - -Remove SplitColor property from Region control, and add CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip properties(bmck). - -Rename BorderPanel to RegionPanel. - -Add MarkInvalid method for DropDownList(sun1299shine). - -Add example for interaction of Province-Region-Town of China(data/shengshixian.aspx)(Blues T). - -Fix a regression bug when changing Tab with IFrameUrl enabled will cause the page load again(eroach). - -Fix a bug that Grid with AutoPostBack="true", RowClick event will override other control's(LinkButtonField, HyperLinkField, CheckBoxField) click event(yymaoji). - - - -+2009-11-26 v2.1.6 - +Fix a bug when dynamic create Grid's columns(gxpan). - -Add an example(data/grid_dynamic_columns.aspx). - -Fix a bug that Form cann't adaptive browser size chaneg(kaywood)(WorkItem#6309). - -Add an overload method Alert.Show(message, title, icon)(TheBox)(WorkItem#6353). - -Add AJAX property IFrameUrl for container control(such as Panel,Region,Tab etc.)(BluesT). - -Redesign the implement of simulate tree DropDownList, avoid flicker when select a ListItem. - - - -+2009-11-21 v2.1.5 - +Tree optimize。 - -Fix the bug that states of Expanded and Checked items cann't be persisted through page post back. - -GetNodeById renamed to FindNode, which is consistent with FindControl of Asp.net controls. - -Remove CheckedNodeIDArray property, Add GetCheckedNodes and GetCheckedNodeIDs functions. - -Remove ExpandedNodeIDArray property, Add GetExpandedNodes and GetExpandedNodeIDs functions. - -Add example(data/tree_select_run.aspx), to explain how to check all children node when a parent node is checked(wjl_wjl520). - +NodeId property of TreeNode renamed to NodeID, this is a convention of FineUI. - -At the same time, In GridColumn class ColumnId renamed to ColumnID and GetColumnId renamed to GetColumnID. - -Grid1.Columns.FindColumnById replaced by Grid1.FindColumn function. - -Add Node property for the following class TreeCheckEventArgs, TreeExpandEventArgs and TreeCommandEventArgs. - -Add Focus(overwrite Control's Focus function) and GetFocusReference functions for all componnets. - -Add example other/custom_postback.aspx(thebox)。 - -Explain a way to send a postback on a textbox when you click the enter key. - -Add AutoLeafIdentification property to Tree control. - -Add examples(tree_auto_leaf_identification.aspx)(wdrabbit)。 - - - -+2009-11-17 v2.1.4 - -Fix a bug that Window's close button tooltip is always Chinese text(thebox). - -Design time support for part of FineUI controls. - -There is a mistake in v0.2beta2 about PersistChildren(true), which is design time property, no relation to runtime state persistence. - -Fix a bug that CheckedChanged event of CheckBox control will be triggered twice. - -Add AutoPostBack property for TextBox,TextArea,DatePicker,NumberBox,TriggerBox etc.(dk3214). - +Add RequiredMessage,MaxLengthMessage,MinLengthMessage for form field. - +Add MarkInvalid and GetMarkInvalidReference for form field controls(form/form_validate.aspx).(sun1299shine). - - - -+2009-10-19 v2.1.3 - +Add an AJAX properties list for all controls(/ajax.aspx). - -FineUI support native AJAX, which not means all properties change will be relfected on the page. - -Load s.gif from local server, not the remote extjs.com(efrigate43,abaocoole). - -Ensure the asp.net button still has AJAX feature after AJAX update. - -Update demo /basic/login.aspx, using CAPTCHA image(kedee). - -Add AutoPostBack property and RowClick event for Grid(/data/grid_autopostback.aspx)(chenguizhu2006). - -Add AJAX property ReadOnly for all form field controls(skydb). - -TemplateField will have a unique ID on the page Grid, for example Grid1_ct5_Label2,Grid1_ct6_Label2(geruger). - - - -+2009-09-27 v2.1.2 - -Add GetExpandAllNodesReference and GetCollapseAllNodesReference to tree control. - -Fix the bug when loading multi-lang package in RELEASE mode(yigehaoren). - -Add language - pt_BR, provide by Ujvari. - +Add Icon property to panel control(Include Grid,Tree,Form...), which contains more than 1700 icons. - -If the panel has IconUrl already, then IconUrl will take effect. - -All the icons can be found here - icon.aspx. - -Add Icon property for Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image. - - - -+2009-09-15 v2.1.1 - -Fix a bug with AccordionPane's Items property. - +Add ConfirmTarget property for Controls like Button, MenuButton, LinkButton, LinkButtonField. - -Use this property(ConfirmTarget="_parent"), we can popup confirm dialog in parent page(Similar to Target="_parent" of Window control). - +Add Javascript callback function to FineUI.Alert.Show when clicking the OK button. - -A typical scenario: Open an edit page in new window, if the url parameter is incorrect, first show an alert dialog, and then close the popup window when user click the OK button. - -FineUI.Alert.Show("Parameter error!", String.Empty, FineUI.ActiveWindow.GetCloseReference()); - +CheckBox in the TreeNode can be clicked with server-side event. - -Add AutoPostBack property to TreeNode, add event data class - TreeCheckEventArgs, add NodeCheck event to Tree。 - -Examples:http://fineui.com/data/tree_run.aspx - -Add GetNoSelectionAlertInParentReference function to Grid, which stands for a piece of javascript code to show an alert dialog in parent window. - -Fix a bug that underline character cann't be the prefix of CSS class name in IE7(Steve.Wei)。 - -Add control Timer, which procedure an interval AJAX request to server. - - - -+2009-09-04 v2.1.0 - -Fix a bug in Button's Pressed property. - -Optimize the AJAX process of Tree control. - +Add autocomplete="off" property to form tag. - -Refer: http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 - +Add all extjs3.0 languages to FineUI. - -FineUI has it's own extend language pack in js\languages\fineui, we currently support en,zh_CN,zh_TW. - -You can add your own language to js\languages, and don't forget to run pack.bat and rebuild the project. - - - -+2009-09-01 v2.0.9 - -Add two static functions ShowInParent and GetShowInParentReference to FineUI.Alert. Now we can show dialog in parent window. - +You must declare control's collection property explicitly in aspx source code now, which you don't need to do so before. - -This will affect all of you aspx pages, please take special attention! - -These properties include Tabs in TabStrip, Items in PanelBase, Nodes in TreeNode etc. - -Rename AccordionPanel to AccordionPane (It's a name used in Asp.net AJAX). - +All panels have two default collection properties - Toolbars and Items. - -Although TabStrip, From, Tree, Accordion inherite the Items property, but it's useless. - -This will affect all of you aspx pages, please separate the toolbars from the items. - -Happy birthday to you - xiaoshi meimei. - - - -+2009-08-29 v2.0.8 - -FineUI now support mutli-languages(en,zh_CN,zh_TW), you can modify it in Web.config. - -Convert example application into english. - -Fix a bug in Tree Control with Mappings property. - +PageManager.Instance should exist in HttpContext.Current, not a global static parameter. - -The Asp.net compatibility is ok now according to this bug fix. - +Remove PageManager function AddAjaxAspnetControls, Add AjaxAspnetControls property. - -This property is similar to ValidateForms of Button. You can check the example in aspnet folder. - - - -+2009-08-25 v2.0.7 - -Add DisableControlBeforePostBack for Button(Whether to disable control before postback, default to true). - -You can modify Values property of Grid freely. - -Add example - how to export Grid to Excel(data\grid_excel_run.aspx)(503684912). - -Add Enabled="false" to TreeNode, this item is gray and can't be selected(your568). - -Fix the bug NavigateUrl of TreeNode can't accept server-side url(such as ~/default.aspx). - -Add example(other\accordion_tree_run.aspx). - -Fix the bug Icon in Panel show abnormal(class name of CSS can't contain $ character). - +Remove PageLayout control, instead you can use BorderLayout control and specify AutoSizePanelID property of PageManager. - -In this method, all Panel(No matter you are Accordion, Panel, ContentPanel, Form, GroupPanel, SimpleForm, Tree or you are Grid, TabStrip) can be full size of the viewport. - -Add exmples(default.aspx, other\accordion_tree_run.aspx). - - - -+2009-08-14 v2.0.6 - -Add exampls(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(shguo). - -Optimise AJAX internal implement, ViewState of each page should be much less than before. - -Optimise NodeId generation of TreeNode. - - - -+2009-08-09 v2.0 beta5 - +Compatible FineUI with Asp.net submit button(qianfan). - -We do some optimization, to make an Asp.Net button AJAX behavior, you only need to set EnableAjax="true" for PageManager control, and this is default value). - +Rename AddAjaxUpdateControl of PageManager control to AddAjaxAspnetControls, now you can set how many Asp.Net controls should be updated in Page_Load event. - -Use RemoveAjaxAspnetControls to remove the Asp.Net controls which will not be updated in AJAX request. - -Examples under aspnet\fckeditor_run.aspx and aspnet\aspnet_run.aspx. - -Compatible FCKEditor with Asp.Net upload control, add an example(aspnet\fileupload_run.aspx). - -Fix the bug Text of ToolbarText can't update in AJAX mode. - -Update Pressed property as an AJAX property of Button control(mgzhenhong). - -Update all examples, test under IE7.0, IE8.0, Firefox3.5, Chrome2.0. - - - -+2009-08-02 v2.0 beta4 - +Compatible with Asp.Net Forms Authentication[mgzhenhong]. - -Adopt the same way used in Asp.Net Ajax, we must add a httpModules section in Web.config. - -Support Response.Redirect, which is the same effort with FineUI.PageContext.Redirect. - -Support FormsAuthentication.RedirectFromLoginPage(accountID, false); method. - -Add Type property for Button(button,reset,submit)[mgzhenhong]. - -Fix the bug Alert.Show can't assign the icon[xmq&mgzhenhong]. - -Fix the bug Iframe in window control can't load in the first time. - -Add Menu and Accordion examples. - -Fix the bug IconUrl of Window control disappear some times(Target="_parent")[xmq&mgzhenhong]. - - - -+2009-07-22 v2.0 beta3 - -Compatible with FCKEditor。 - -Test under IE8.0, Firefox3.5. From now on FineUI will not support IE6.0. - - - -+2009-07-13 v2.0 beta2 - -Integrate extjs v3.0。 - +Compatible with IE6.0,7.0,8.0。 - -This must be an extjs3.0 bug, because Ext.QuickTips.init(); will cause the click event of button abnormal under IE6.0,7.0(IE8 works well). - -Now I must disable QucikTips in IE6.0, 7.0. - -Optimize inner JavaScript。 - - - -+2009-07-05 v2.0 beta1 - -Update extjs to v3.0 RC2, now there is only one theme(blue). - -Use YUI Compressor to compress JavaScript and CSS files. - -In release version, one page only contains one JavaScript file(except for language file) and one CSS file. - -CSS introduced by FineUI will be inserted after html title tag, then custom defined styles can override FineUI default style. - +Alert will on top of all window controls. - -Because I can't modify the default z-index of Ext.Message(9000), I adjust the zseed property of box.window_default_group to 6000. - -Add 5px margin for all button(.x-btn button { margin: 0 5px !important; })。 - -Because dropdownlist is not editable and can't be empty, if SelectedIndex or SelectedValue is blank, then the first item will be selected. - -Update component Ext.ux.SimplePagingToolbar. - -Update examples. - - -This project's first version is released on 2008-04-11, the previous release history is in another document(release_history_cn.txt) under this folder. - - -Copyright 2008 30372245@qq.com, All rights reserved. +About FineUI +ExtJS based open source ASP.NET Controls + +FineUI Mission +Create No JavaScript, No CSS, No UpdatePanel, No ViewState and No WebServices web application + +Support Browsers +Chrome、Firefox、Safari、IE 8.0+ + +License +Apache License 2.0 (Apache) +Note: ExtJS is released under GPL v3 license (http://www.sencha.com/license). + +Demo&Download +http://fineui.com/demo/ + +You can download FineUI from CodePlex or install using NuGet. +PM> Install-Package FineUI + + + +Release History + +Check chinese version for latest releases. + + ++2012-11-18 v3.2.0 + -Check the chinese version. + + + ++2012-08-18 v3.1.9 + -Check the chinese version. + + + ++2012-06-24 v3.1.8 + -Check the chinese version. + + + ++2012-06-03 v3.1.7 + -Check the chinese version. + + + ++2012-05-20 v3.1.6 + -Check the chinese version. + + + ++2012-05-06 v3.1.5 + -Check the chinese version. + + + ++2012-04-24 v3.1.4 + -Check the chinese version. + + + ++2012-04-08 v3.1.3 + -Check the chinese version. + + + ++2012-04-04 v3.1.2 + -Check the chinese version. + + + ++2012-04-02 v3.1.1 + -Check the chinese version. + + + ++2012-03-04 v3.1.0 + -Check the chinese version. + + ++2012-02-05 v3.0.1 + -Check the chinese version. + + + ++2012-01-28 v3.0 + -Check the chinese version. + + + ++2011-05-09 v2.3.5 + -Design time support for most controls. + -From the next verion, I will start localization strategic adjustment, and Simplied Chinese will be the official support language. + + + ++2011-05-02 v2.3.4 + -Update to extjs v3.3.3(GMz). + -Fix issue #9869(Pablogrind). + -Add CMargins for Region control - issue #9597(ronnieoverby). + +Fix issue #9448(tonyredondo). + -It's bug only exist in Tree control, we need the UniqueID for postback usage. + -Fix Grid sort icon display issue. + -Fix a bug in X.utils.updateViewState, which cause the grid basic example doesn't work when postback more than 2 times. + + + ++2011-02-22 v2.3.3 + -Update to extjs v3.3.1. + -Add language support to Ext.ux.TabCloseMenu(en, zh_CN, zh_TW). + + + ++2010-09-29 v2.3.2 + -Make sure there is no error when no data is binding to Grid in page's first load. + -Fix a bug that DataFormatString not works in Grid, for example {0:yy-MM-dd HH:mm}. + -Fix a bug that DataTable cann't be binded to DropDownList(RedOcean). + -Add language translation for Turkish(abdullaharslan). + -Add NullDisplayText property to BoundField control of Grid, the default value of this property is an empty string. + -Fix a bug in DatePicker that Text = 31/01/2010 (31 Jan 2010) will return NULL, trying to parse DateTime using it's DateFormatString(OktaEndy). + -Fix a bug(ComboBox in extjs v3.2.2), the getValue function will always get the first item of duplicate item text(ben.zhou). + -Apply patch #6593, #6621(vbelyaev). + -Fix a bug that Grid paging is very slow under IE7&IE6(youwei, StevenGuan, hazardvn, gavindou, ttjacky). + -Russian language FineUI translation(vbelyaev). + -Construction like ToString("F2") on system with comma as decimal separator produce incorrect properties value(vbelyaev). + + + ++2010-06-30 v2.3.1 + -FineUI controls will on longer depends on ViewState, more than 1/4 data exchange will be saved. + -Enhancement for controls and examples. + + + ++2010-03-28 v2.2.1 + +Add a overload funtion to GetAddTabReference of TabStrip that you can specify the tab's icon url(mmdcup). + -Fix a bug when invoking this function through PageContext.RegisterStartupScript, the icon disappears(zhaowenke). + -Fix a bug in basic/hello.aspx, which can not pupop dialog in a new window. + -Hide the RegionPanel's border of the example site home page - ShowBorder="false". + +Integrate with extjs3.1.0. + -Add a new theme - Access. + -Fix a bug in firefox that page will disappear when using zoom in/out. + -Delete EnableLightBackgroundColor property for Panel, and EnableBackgroundColor property only support Blue and Gray themes. + + + ++2010-01-31 v2.2.0 + -Make ImageButton control in Asp.net has the similar behavior of Button(Ajax Submit)(261629698). + +Add two functions GetAddTabReference and GetRemoveTabReference to TabStrip, which are used to dynamic add Tabs. + -Add example tabstrip/tabstrip_addtab.aspx. + -Refector FineUI.Examples structure, now there is only one level iframe. + -Add EnableTabCloseMenu property to TabStrip, which is used to enable the mouse right menu. + -Add DecimalPrecision property to NumberBox control(Need set the property NoDecimal="false")(zqmars). + -Window control updates. + -Click the close button of a Window control, it will not show the confirm dialog by default. + -GetConfirmFormModifiedHideReference is renamed to GetConfirmHideReference, and the same thing happened to other funtions. + -Add two property EnableConfirmOnClose(default:false), CloseAction(Hide, HideRefresh, HidePostBack). + -Fix a bug that prevent EnableMaximize from working in Window control. + -Remove SystemIcon property from Button control, now you should use Icon="SystemClose" instead of SystemIcon="Close". + -Set WindowPosition default to Center, not GoldenSection. + +The target property of Button, Window etc controls change. + -The type of Window Target property is changed from string to enum, don't forget to change code in aspx: Target="_self" -> Target="Self", Target="_parent" -> Target="Parent". + -MenuButton, LinkButton, Button, LinkButtonField ConfirmTarget Target property is changed from string to enum. + -Confirm.GetShowReference and Alert.GetShowReference has the similar changes. + -Add ValidateTarget property to MenuButton, LinkButton, Button, LinkButtonField, to control where to show the form validation failure message. + + + ++2010-01-06 v2.1.9 + -Integrate with extjs3.1.0. + -Fix css issue in gray theme. + -Fix a bug that Grid column cann't contain chinese characters(davidwen). + -Add AjaxTimeout property to Web.config and PageManager(unit:second, default:30). + -Fix a bug that Grid control cann't get SelectedRowIndexArray property in PageIndexChange event(Violet). + -Button control will not gain display:inline CSS rules auto, if you want two buttons stay in the same line, please use float:left CSS rule. + -Fix a bug that popup menu's position is not right in Firefox(eroach). + -Add EnableEdit for TriggerBox and TwinTriggerBox controls. + -Use Hidden property to show and hide control instead of Visible, which is a readonly property now. + -Use Hidden to show and hide Window control, now Popup is marked as an Obsolete property. + -Method GetCloseReference in Window and GetCloseReference in ActiveWindow are renamed to GetHideReference(Notice all Close character are changed to Hide). + -Add EnableClose property(default false), two methods GetShowReference and GetHideReference to Tab control(anson). + -Fix a bug that Xml document binding to Tree has a error Icon property mapping(nopnop9). + -Fix a bug that HtmlEditor is not editable(TheBox). + -Fix a bug there will be blank page under IE sometimes(olivia919). + + + ++2009-12-06 v2.1.8 + -Fix a serious bug in previous version, the Window with iframe can't be opened twice(alexa99). + -Fix a JS error of Grid control in IE(lqm4108). + -Fix a JS bug in Alert class(when there are quote in the message or title)(sun1299shine). + +Integrate with extjs3.0.3. + -fix an issue where MessageBox width is calculated differently depending on the previous content. + -Add new theme - Gray. + -Add change language and theme dropdown list for examples. + -Add static method Refresh to PageContext, which is used in changing language and theme. + + + ++2009-12-01 v2.1.7 + -Add example(iframe/parent_postback_run3.aspx), how to postback parent page through simple javascript(eroach). + -Fix some typos(bmck). + -Remove SplitColor property from Region control, and add CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip properties(bmck). + -Rename BorderPanel to RegionPanel. + -Add MarkInvalid method for DropDownList(sun1299shine). + -Add example for interaction of Province-Region-Town of China(data/shengshixian.aspx)(Blues T). + -Fix a regression bug when changing Tab with IFrameUrl enabled will cause the page load again(eroach). + -Fix a bug that Grid with AutoPostBack="true", RowClick event will override other control's(LinkButtonField, HyperLinkField, CheckBoxField) click event(yymaoji). + + + ++2009-11-26 v2.1.6 + +Fix a bug when dynamic create Grid's columns(gxpan). + -Add an example(data/grid_dynamic_columns.aspx). + -Fix a bug that Form cann't adaptive browser size chaneg(kaywood)(WorkItem#6309). + -Add an overload method Alert.Show(message, title, icon)(TheBox)(WorkItem#6353). + -Add AJAX property IFrameUrl for container control(such as Panel,Region,Tab etc.)(BluesT). + -Redesign the implement of simulate tree DropDownList, avoid flicker when select a ListItem. + + + ++2009-11-21 v2.1.5 + +Tree optimize。 + -Fix the bug that states of Expanded and Checked items cann't be persisted through page post back. + -GetNodeById renamed to FindNode, which is consistent with FindControl of Asp.net controls. + -Remove CheckedNodeIDArray property, Add GetCheckedNodes and GetCheckedNodeIDs functions. + -Remove ExpandedNodeIDArray property, Add GetExpandedNodes and GetExpandedNodeIDs functions. + -Add example(data/tree_select_run.aspx), to explain how to check all children node when a parent node is checked(wjl_wjl520). + +NodeId property of TreeNode renamed to NodeID, this is a convention of FineUI. + -At the same time, In GridColumn class ColumnId renamed to ColumnID and GetColumnId renamed to GetColumnID. + -Grid1.Columns.FindColumnById replaced by Grid1.FindColumn function. + -Add Node property for the following class TreeCheckEventArgs, TreeExpandEventArgs and TreeCommandEventArgs. + -Add Focus(overwrite Control's Focus function) and GetFocusReference functions for all componnets. + -Add example other/custom_postback.aspx(thebox)。 + -Explain a way to send a postback on a textbox when you click the enter key. + -Add AutoLeafIdentification property to Tree control. + -Add examples(tree_auto_leaf_identification.aspx)(wdrabbit)。 + + + ++2009-11-17 v2.1.4 + -Fix a bug that Window's close button tooltip is always Chinese text(thebox). + -Design time support for part of FineUI controls. + -There is a mistake in v0.2beta2 about PersistChildren(true), which is design time property, no relation to runtime state persistence. + -Fix a bug that CheckedChanged event of CheckBox control will be triggered twice. + -Add AutoPostBack property for TextBox,TextArea,DatePicker,NumberBox,TriggerBox etc.(dk3214). + +Add RequiredMessage,MaxLengthMessage,MinLengthMessage for form field. + +Add MarkInvalid and GetMarkInvalidReference for form field controls(form/form_validate.aspx).(sun1299shine). + + + ++2009-10-19 v2.1.3 + +Add an AJAX properties list for all controls(/ajax.aspx). + -FineUI support native AJAX, which not means all properties change will be relfected on the page. + -Load s.gif from local server, not the remote extjs.com(efrigate43,abaocoole). + -Ensure the asp.net button still has AJAX feature after AJAX update. + -Update demo /basic/login.aspx, using CAPTCHA image(kedee). + -Add AutoPostBack property and RowClick event for Grid(/data/grid_autopostback.aspx)(chenguizhu2006). + -Add AJAX property ReadOnly for all form field controls(skydb). + -TemplateField will have a unique ID on the page Grid, for example Grid1_ct5_Label2,Grid1_ct6_Label2(geruger). + + + ++2009-09-27 v2.1.2 + -Add GetExpandAllNodesReference and GetCollapseAllNodesReference to tree control. + -Fix the bug when loading multi-lang package in RELEASE mode(yigehaoren). + -Add language - pt_BR, provide by Ujvari. + +Add Icon property to panel control(Include Grid,Tree,Form...), which contains more than 1700 icons. + -If the panel has IconUrl already, then IconUrl will take effect. + -All the icons can be found here - icon.aspx. + -Add Icon property for Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image. + + + ++2009-09-15 v2.1.1 + -Fix a bug with AccordionPane's Items property. + +Add ConfirmTarget property for Controls like Button, MenuButton, LinkButton, LinkButtonField. + -Use this property(ConfirmTarget="_parent"), we can popup confirm dialog in parent page(Similar to Target="_parent" of Window control). + +Add Javascript callback function to FineUI.Alert.Show when clicking the OK button. + -A typical scenario: Open an edit page in new window, if the url parameter is incorrect, first show an alert dialog, and then close the popup window when user click the OK button. + -FineUI.Alert.Show("Parameter error!", String.Empty, FineUI.ActiveWindow.GetCloseReference()); + +CheckBox in the TreeNode can be clicked with server-side event. + -Add AutoPostBack property to TreeNode, add event data class - TreeCheckEventArgs, add NodeCheck event to Tree。 + -Examples:http://fineui.com/data/tree_run.aspx + -Add GetNoSelectionAlertInParentReference function to Grid, which stands for a piece of javascript code to show an alert dialog in parent window. + -Fix a bug that underline character cann't be the prefix of CSS class name in IE7(Steve.Wei)。 + -Add control Timer, which procedure an interval AJAX request to server. + + + ++2009-09-04 v2.1.0 + -Fix a bug in Button's Pressed property. + -Optimize the AJAX process of Tree control. + +Add autocomplete="off" property to form tag. + -Refer: http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 + +Add all extjs3.0 languages to FineUI. + -FineUI has it's own extend language pack in js\languages\fineui, we currently support en,zh_CN,zh_TW. + -You can add your own language to js\languages, and don't forget to run pack.bat and rebuild the project. + + + ++2009-09-01 v2.0.9 + -Add two static functions ShowInParent and GetShowInParentReference to FineUI.Alert. Now we can show dialog in parent window. + +You must declare control's collection property explicitly in aspx source code now, which you don't need to do so before. + -This will affect all of you aspx pages, please take special attention! + -These properties include Tabs in TabStrip, Items in PanelBase, Nodes in TreeNode etc. + -Rename AccordionPanel to AccordionPane (It's a name used in Asp.net AJAX). + +All panels have two default collection properties - Toolbars and Items. + -Although TabStrip, From, Tree, Accordion inherite the Items property, but it's useless. + -This will affect all of you aspx pages, please separate the toolbars from the items. + -Happy birthday to you - xiaoshi meimei. + + + ++2009-08-29 v2.0.8 + -FineUI now support mutli-languages(en,zh_CN,zh_TW), you can modify it in Web.config. + -Convert example application into english. + -Fix a bug in Tree Control with Mappings property. + +PageManager.Instance should exist in HttpContext.Current, not a global static parameter. + -The Asp.net compatibility is ok now according to this bug fix. + +Remove PageManager function AddAjaxAspnetControls, Add AjaxAspnetControls property. + -This property is similar to ValidateForms of Button. You can check the example in aspnet folder. + + + ++2009-08-25 v2.0.7 + -Add DisableControlBeforePostBack for Button(Whether to disable control before postback, default to true). + -You can modify Values property of Grid freely. + -Add example - how to export Grid to Excel(data\grid_excel_run.aspx)(503684912). + -Add Enabled="false" to TreeNode, this item is gray and can't be selected(your568). + -Fix the bug NavigateUrl of TreeNode can't accept server-side url(such as ~/default.aspx). + -Add example(other\accordion_tree_run.aspx). + -Fix the bug Icon in Panel show abnormal(class name of CSS can't contain $ character). + +Remove PageLayout control, instead you can use BorderLayout control and specify AutoSizePanelID property of PageManager. + -In this method, all Panel(No matter you are Accordion, Panel, ContentPanel, Form, GroupPanel, SimpleForm, Tree or you are Grid, TabStrip) can be full size of the viewport. + -Add exmples(default.aspx, other\accordion_tree_run.aspx). + + + ++2009-08-14 v2.0.6 + -Add exampls(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(shguo). + -Optimise AJAX internal implement, ViewState of each page should be much less than before. + -Optimise NodeId generation of TreeNode. + + + ++2009-08-09 v2.0 beta5 + +Compatible FineUI with Asp.net submit button(qianfan). + -We do some optimization, to make an Asp.Net button AJAX behavior, you only need to set EnableAjax="true" for PageManager control, and this is default value). + +Rename AddAjaxUpdateControl of PageManager control to AddAjaxAspnetControls, now you can set how many Asp.Net controls should be updated in Page_Load event. + -Use RemoveAjaxAspnetControls to remove the Asp.Net controls which will not be updated in AJAX request. + -Examples under aspnet\fckeditor_run.aspx and aspnet\aspnet_run.aspx. + -Compatible FCKEditor with Asp.Net upload control, add an example(aspnet\fileupload_run.aspx). + -Fix the bug Text of ToolbarText can't update in AJAX mode. + -Update Pressed property as an AJAX property of Button control(mgzhenhong). + -Update all examples, test under IE7.0, IE8.0, Firefox3.5, Chrome2.0. + + + ++2009-08-02 v2.0 beta4 + +Compatible with Asp.Net Forms Authentication[mgzhenhong]. + -Adopt the same way used in Asp.Net Ajax, we must add a httpModules section in Web.config. + -Support Response.Redirect, which is the same effort with FineUI.PageContext.Redirect. + -Support FormsAuthentication.RedirectFromLoginPage(accountID, false); method. + -Add Type property for Button(button,reset,submit)[mgzhenhong]. + -Fix the bug Alert.Show can't assign the icon[xmq&mgzhenhong]. + -Fix the bug Iframe in window control can't load in the first time. + -Add Menu and Accordion examples. + -Fix the bug IconUrl of Window control disappear some times(Target="_parent")[xmq&mgzhenhong]. + + + ++2009-07-22 v2.0 beta3 + -Compatible with FCKEditor。 + -Test under IE8.0, Firefox3.5. From now on FineUI will not support IE6.0. + + + ++2009-07-13 v2.0 beta2 + -Integrate extjs v3.0。 + +Compatible with IE6.0,7.0,8.0。 + -This must be an extjs3.0 bug, because Ext.QuickTips.init(); will cause the click event of button abnormal under IE6.0,7.0(IE8 works well). + -Now I must disable QucikTips in IE6.0, 7.0. + -Optimize inner JavaScript。 + + + ++2009-07-05 v2.0 beta1 + -Update extjs to v3.0 RC2, now there is only one theme(blue). + -Use YUI Compressor to compress JavaScript and CSS files. + -In release version, one page only contains one JavaScript file(except for language file) and one CSS file. + -CSS introduced by FineUI will be inserted after html title tag, then custom defined styles can override FineUI default style. + +Alert will on top of all window controls. + -Because I can't modify the default z-index of Ext.Message(9000), I adjust the zseed property of box.window_default_group to 6000. + -Add 5px margin for all button(.x-btn button { margin: 0 5px !important; })。 + -Because dropdownlist is not editable and can't be empty, if SelectedIndex or SelectedValue is blank, then the first item will be selected. + -Update component Ext.ux.SimplePagingToolbar. + -Update examples. + + +This project's first version is released on 2008-04-11, the previous release history is in another document(release_history_cn.txt) under this folder. + + +Copyright 2008 30372245@qq.com, All rights reserved. diff --git a/Newtonsoft.Json/Net20/Newtonsoft.Json.dll b/Newtonsoft.Json/Net20/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..2024b03b53bf96f74c2bc94f27d0fbc776e51564 GIT binary patch literal 440320 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 Y&J)pB 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 VYl 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 literal 0 HcmV?d00001 diff --git a/Newtonsoft.Json/Net20/Newtonsoft.Json.xml b/Newtonsoft.Json/Net20/Newtonsoft.Json.xml new file mode 100644 index 0000000..f75ed9b --- /dev/null +++ b/Newtonsoft.Json/Net20/Newtonsoft.Json.xml @@ -0,0 +1,8968 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Enumerable"> + <summary> + Provides a set of static (Shared in Visual Basic) methods for + querying objects that implement <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.AsEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Empty``1"> + <summary> + Returns an empty <see cref="T:System.Collections.Generic.IEnumerable`1"/> that has the + specified type argument. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Cast``1(System.Collections.IEnumerable)"> + <summary> + Converts the elements of an <see cref="T:System.Collections.IEnumerable"/> to the + specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OfType``1(System.Collections.IEnumerable)"> + <summary> + Filters the elements of an <see cref="T:System.Collections.IEnumerable"/> based on a specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Range(System.Int32,System.Int32)"> + <summary> + Generates a sequence of integral numbers within a specified range. + </summary> + <param name="start">The value of the first integer in the sequence.</param> + <param name="count">The number of sequential integers to generate.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Repeat``1(``0,System.Int32)"> + <summary> + Generates a sequence that contains one repeated value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + Each element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Projects each element of a sequence into a new form. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,``1})"> + <summary> + Projects each element of a sequence into a new form by + incorporating the element's index. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/> + and flattens the resulting sequences into one sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + and flattens the resulting sequences into one sequence. The + index of each source element is used in the projected form of + that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. The index of + each source element is used in the intermediate projected form + of that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + The element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of First operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element in a sequence that satisfies a specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element of the sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Last operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Single operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, and throws an exception + if there is not exactly one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition, and throws an exception if more than one + such element exists. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, or a default value if + the sequence is empty; this method throws an exception if there + is more than one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition or a default value if no such element + exists; this method throws an exception if more than one element + satisfies the condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAt``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAtOrDefault``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence or a + default value if the index is out of range. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Reverse``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Inverts the order of the elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Take``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns a specified number of contiguous elements from the start + of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Skip``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Bypasses a specified number of elements in a sequence and then + returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. The element's + index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the number of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns a number that represents how many elements in the + specified sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents the total number + of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents how many elements + in a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Concat``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Concatenates two sequences. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToList``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.List`1"/> from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToArray``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates an array from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns distinct elements from a sequence by using the default + equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns distinct elements from a sequence by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and a key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and compares the keys by using a specified + comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and projects the elements for each group by + using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2})"> + <summary> + Groups the elements of a sequence according to a key selector + function. The keys are compared by using a comparer and each + group's elements are projected by using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The keys are compared by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. Key values are compared by using a specified comparer, + and the elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,``0})"> + <summary> + Applies an accumulator function over a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``2(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``3(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1},Newtonsoft.Json.Serialization.Func{``1,``2})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value, and the + specified function is used to select the result value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set union of two sequences by using the default + equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set union of two sequences by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the elements of the specified sequence or the type + parameter's default value in a singleton collection if the + sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.All``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether all elements of a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether a sequence contains any elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether any element of a sequence satisfies a + condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Determines whether a sequence contains a specified element by + using the default equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether a sequence contains a specified element by + using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether two sequences are equal by comparing the + elements by using the default equality comparer for their type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether two sequences are equal by comparing their + elements by using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,System.Boolean})"> + <summary> + Base implementation for Min/Max operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{System.Nullable{``0}},System.Nullable{``0},Newtonsoft.Json.Serialization.Func{System.Nullable{``0},System.Nullable{``0},System.Boolean})"> + <summary> + Base implementation for Min/Max operator for nullable types. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the minimum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the minimum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the maximum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the maximum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Renumerable``1(System.Collections.Generic.IEnumerator{``0})"> + <summary> + Makes an enumerator seen as enumerable once more. + </summary> + <remarks> + The supplied enumerator must have been started. The first element + returned is the element the enumerator was on when passed in. + DO NOT use this method if the caller must be a generator. It is + mostly safe among aggregate operations. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in ascending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in descending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in descending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order, according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.IntersectExceptImpl``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0},System.Boolean)"> + <summary> + Base implementation for Intersect and Except operators. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set intersection of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set intersection of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set difference of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set difference of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + selector and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer, and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. A + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. A specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> + is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"> + <summary> + Represents a collection of objects that have a common key. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2.Key"> + <summary> + Gets the key of the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.ILookup`2"> + <summary> + Defines an indexer, size property, and Boolean search method for + data structures that map keys to <see cref="T:System.Collections.Generic.IEnumerable`1"/> + sequences of values. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"> + <summary> + Represents a sorted sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1.CreateOrderedEnumerable``1(Newtonsoft.Json.Serialization.Func{`0,``0},System.Collections.Generic.IComparer{``0},System.Boolean)"> + <summary> + Performs a subsequent ordering on the elements of an + <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"/> according to a key. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"> + <summary> + Represents a collection of keys each mapped to one or more values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Contains(`0)"> + <summary> + Determines whether a specified key is in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.ApplyResultSelector``1(Newtonsoft.Json.Serialization.Func{`0,System.Collections.Generic.IEnumerable{`1},``0})"> + <summary> + Applies a transform function to each key and its associated + values and returns the results. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.GetEnumerator"> + <summary> + Returns a generic enumerator that iterates through the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Count"> + <summary> + Gets the number of key/value collection pairs in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Item(`0)"> + <summary> + Gets the collection of values indexed by the specified key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.TagPosition(`0,System.Int32)"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.GetFirst(Newtonsoft.Json.Utilities.LinqBridge.Tuple{`0,System.Int32})"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="T:System.Runtime.CompilerServices.ExtensionAttribute"> + <remarks> + This attribute allows us to define extension methods without + requiring .NET Framework 3.5. For more information, see the section, + <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx#S7">Extension Methods in .NET Framework 2.0 Apps</a>, + of <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx">Basic Instincts: Extension Methods</a> + column in <a href="http://msdn.microsoft.com/msdnmag/">MSDN Magazine</a>, + issue <a href="http://msdn.microsoft.com/en-us/magazine/cc135410.aspx">Nov 2007</a>. + </remarks> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="!:DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="!:DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/Newtonsoft.Json/Net35/Newtonsoft.Json.dll b/Newtonsoft.Json/Net35/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..a7dfbe06b340fad1464d63b9a1d66b9a6223e9c1 GIT binary patch literal 401920 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 literal 0 HcmV?d00001 diff --git a/Newtonsoft.Json/Net35/Newtonsoft.Json.xml b/Newtonsoft.Json/Net35/Newtonsoft.Json.xml new file mode 100644 index 0000000..a374f26 --- /dev/null +++ b/Newtonsoft.Json/Net35/Newtonsoft.Json.xml @@ -0,0 +1,8105 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns> + A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter"> + <summary> + Converts an Entity Framework EntityKey to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting. + </summary> + <param name="node">The node to convert to JSON.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"> + <summary> + Occurs when a property value is changing. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/Newtonsoft.Json/Net40/Newtonsoft.Json.dll b/Newtonsoft.Json/Net40/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..0a159151ba7bfd0d6199945e948ae996c9bb2912 GIT binary patch literal 456192 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≻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 V0{hT|;AHF6^Q6-YUH&Tq{{S8CnLGdh literal 0 HcmV?d00001 diff --git a/Newtonsoft.Json/Net40/Newtonsoft.Json.xml b/Newtonsoft.Json/Net40/Newtonsoft.Json.xml new file mode 100644 index 0000000..edc54c6 --- /dev/null +++ b/Newtonsoft.Json/Net40/Newtonsoft.Json.xml @@ -0,0 +1,8380 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns> + A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter"> + <summary> + Converts an Entity Framework EntityKey to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.ExpandoObjectConverter"> + <summary> + Converts an ExpandoObject to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.System#Dynamic#IDynamicMetaObjectProvider#GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDynamicContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDynamicContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object)"> + <summary> + Asynchronously serializes the specified object to a JSON string. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObjectAsync(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous populate operation. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting. + </summary> + <param name="node">The node to convert to JSON.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"> + <summary> + Occurs when the items list of the collection has changed, or the collection is reset. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"> + <summary> + Occurs when a property value is changing. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDynamicContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToName(System.Type,System.String@,System.String@)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="serializedType">The type of the object the formatter creates a new instance of.</param> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object. </param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object. </param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodWithResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback,Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodReturnLast(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodNoResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.GetRestrictions"> + <summary> + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/Newtonsoft.Json/Net45/Newtonsoft.Json.dll b/Newtonsoft.Json/Net45/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..52306fdbdce983729b500602f8e928f2203768a2 GIT binary patch literal 465408 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%0DfKx=r7K}T&(bI4y=Tf4~G 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%0Dk0w+ZheWr^8r$zD<W(UTfC4n<>q0lc_ znXhW~EII?M0sLDrSjO-Yim8ef6{`p~ko^`-taR!H-W>Vb56Ek3*(roID2v7enLh$t z0elj;+H&Y=;9B5|!1chLz-M9qKJZ20KfqUj;Z&m6fR%x}fEmC&&~E|!5ZDE{58)37 zeh&Nj<=Nh(>$Kgo=uhzVNY@3$PzA$FDDs{jwy&U^cMCAjR?Jasq1aimk77T;yrQAN z({=+I2W)LMpec%T6dw^xr;Whoj)`w;Jmr@}ZqZI)2k;Mpoq^v1y8?d)_5=nha=I)k zuh<kg&6mz&l~})L(Fw(iig8%3W_hY&Eyc!)Z58_p)+F8o)7inDxZtPl5RDPEXczEB z#N(jwbSjyK6)B{H@mrvIuIY3WILChl@HEQ)HXz44xeAvji-rKRQI?Apw<&TtdC@V? z?TSFpqWzF}M!XLx@^fO&&xeuAE93WSe?sxJ;(0|%H+n(EIK?uG<rUKvvlSaDUafeo zVh6znln3k?$f3T1(eme(UoO{!k<O{G9}fHiI0opJ=U>6cg9oY-6#>furvlw_e`}3@ zm*c_67cReyTz(ljUl_UkGIIVfa(QLs^2*5NnUTxw;DD*G_0SfqLpc0gpHqApI5iNh zKarX^a4yudC|NMC=mFr=Kwi<eimhvzcn<=$#9VTWa+8j{q9eldihfi)t@w{%I*rL7 zdJgVB2JW$vY1~2F@7pz<4%f!GC!9|2WfJuQhO%&s2yirT0&p>KI)>;U16PETsoWv# z5A1I6tL}M42eM5(k0}14_@`p1j<K(zSYHtNU)Q83tDY&hT?CE4g*}q#{jYIIXpd<A z@D780XfJrj*gju<d=c_7$nTwkQT_ekA3~q^l`-<JvJZXk4#NI5$iGoMs(4B;>JQb& zy@#<qi^7T}6w3-m^|<~NAs$@L88cyD<a@pxpW%=<fqXbt6;A<=#5(kkVp0RlNWrs! zr(-Sp6UgN>uA#xIiY<YuaTe_Z?y(wEZVuZwrcR1n51Dg)W$dQ%fr@+x)6_sR?P^3c zD<PfE0NKAsuQ1PHlj0HJt^|kv0KStDO(&=0uLM&c7`YxWa{2!Y`rNKDn)VFec{Jwm zaL)~p`;$$;Dv1ug1<V9~1>|)94r~M---Od2&7aEPyWp+{@E!R3zw*n?m%EyBcouC3 za=ZA2;#rX!|92vsPR&sMfwu$S*LZvkEC$~X<oFx}a(s^fIliAFUXQ>&2kU�FOfc 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�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 literal 0 HcmV?d00001 diff --git a/Newtonsoft.Json/Net45/Newtonsoft.Json.xml b/Newtonsoft.Json/Net45/Newtonsoft.Json.xml new file mode 100644 index 0000000..3025e68 --- /dev/null +++ b/Newtonsoft.Json/Net45/Newtonsoft.Json.xml @@ -0,0 +1,8380 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns> + A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter"> + <summary> + Converts an Entity Framework EntityKey to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.ExpandoObjectConverter"> + <summary> + Converts an ExpandoObject to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object)"> + <summary> + Asynchronously serializes the specified object to a JSON string. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObjectAsync(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous populate operation. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting. + </summary> + <param name="node">The node to convert to JSON.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.System#Dynamic#IDynamicMetaObjectProvider#GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"> + <summary> + Occurs when the items list of the collection has changed, or the collection is reset. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"> + <summary> + Occurs when a property value is changing. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDynamicContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToName(System.Type,System.String@,System.String@)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="serializedType">The type of the object the formatter creates a new instance of.</param> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object. </param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object. </param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDynamicContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDynamicContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodWithResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback,Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodReturnLast(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodNoResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.GetRestrictions"> + <summary> + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc>