Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

Max Pro

 
Название:

WebDataGridSql версия 2.0

Дата: 30 June 2008
Описание: Список изменений: отображение спецсимволами NULL и логических значений, упрощение Яваскрипта. Эту версию я отношу к средней сложности. Кстати, разобраться и повторить её Вы скорее всего не сможете - слишком сложно для понимания - нужна статья. Статью планирую написать. А пока можете использовать коды как образец программирования в стиле Микрософта.  
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=233]WebDataGridSql версия 2.0[/CODEPOST]
Оценка: Проголосовало 4 посетителей, средняя оценка 3.00
Оценить:
  1 REM DataGrid + дополнительный нумератор страниц + редактор; версия для SQL-сервера 2000 и выше. Стиль Microsoft, качество  Max Pro, совместимость со всеми .NET фраймеворками, совместимость со всеми вэб-обозревателями.
  2 Option Compare Text
  3 Imports System
  4 Imports System.Web
  5 Imports System.Web.UI
  6 Imports System.Web.UI.WebControls
  7 Imports System.Drawing
  8 Imports System.ComponentModel
  9 Imports System.Data
 10 Imports System.Data.SqlClient
 11 ''' -----------------------------------------------------------------------------
 12 ''' Project	 : WebControlLibrary
 13 ''' Class	 : WebDataGridSql
 14 ''' 
 15 ''' -----------------------------------------------------------------------------
 16 ''' <summary>
 17 ''' DataGrid + дополнительный нумератор страниц + редактор; версия для SQL-сервера 2000 и выше.
 18 ''' </summary>
 19 ''' <remarks>
 20 ''' </remarks>
 21 ''' <history>
 22 ''' 	[Max Pro]	30.04.2008	Created WebDataGridSql
 23 ''' </history>
 24 ''' -----------------------------------------------------------------------------
 25 <ToolboxData("<{0}:WebDataGridSql runat=server></{0}:WebDataGridSql>"), ToolboxBitmap(GetType(Bitmap))> _
 26 Public Class WebDataGridSql
 27 	Inherits DataGrid
 28 	Implements IPostBackEventHandler
 29 #Region "var"
 30 #Region "var нумератор страниц."
 31 	'top
 32 	Private oTextBoxTop As New TextBox	'текущая страница (верх)
 33 	Private oLabel1Top As New Label	'страницы: (верх)
 34 	Private oLabel2Top As New Label	'из 1000 (верх)
 35 	Private oImage1Top As New System.Web.UI.WebControls.Image	 '<< (верх)
 36 	Private oImage2Top As New System.Web.UI.WebControls.Image	'< (верх)
 37 	Private oImage3Top As New System.Web.UI.WebControls.Image	'> (верх)
 38 	Private oImage4Top As New System.Web.UI.WebControls.Image	'>> (верх)
 39 	Private oTableTop As New Table	'верхняя строка состояния
 40 	'bottom
 41 	Private oTextBoxBottom As New TextBox	'текущая страница (низ)
 42 	Private oLabel1Bottom As New Label	'страницы: (низ)
 43 	Private oLabel2Bottom As New Label	'из 1000 (низ)
 44 	Private oImage1Bottom As New System.Web.UI.WebControls.Image	'<< (низ)
 45 	Private oImage2Bottom As New System.Web.UI.WebControls.Image	'< (низ)
 46 	Private oImage3Bottom As New System.Web.UI.WebControls.Image	'> (низ)
 47 	Private oImage4Bottom As New System.Web.UI.WebControls.Image	'>> (низ)
 48 	Private oTableBottom As New Table	'нижняя строка состояния
 49 #End Region 'var нумератор страниц.
 50 #Region "var редактор."
 51 	Private bErrArrayConfig As Boolean
 52 	Private bSetDataSource As Boolean
 53 	Private bChangeDataSource As Boolean
 54 	Private sArrayTextBoxEdit() As String
 55 	Private ddlName As New DropDownList	'наименование редактора и список наименований для перехода
 56 	'in
 57 	Private oImageSelectEditIn As New System.Web.UI.WebControls.Image	  'треугольничек текущей записи &#8883; (внутри)
 58 	Private oImageEditEditIn As New System.Web.UI.WebControls.Image	  'значок редактора (внутри)
 59 	Private oImageYesEditIn As New System.Web.UI.WebControls.Image	  'запрос на обновление (внутри)
 60 	Private oImageNoEditIn As New System.Web.UI.WebControls.Image	  'отмена (внутри)
 61 	'top
 62 	Private oLabelNameEditTop As New Label	  'название панели редактора (верх)
 63 	Private oLabelEventEditTop As New Label	  'метка последнего события (верх)
 64 	Private oTextBoxEventEditTop As New TextBox	  'текст последнего события (верх)
 65 	Private oImageSelectEditTop As New System.Web.UI.WebControls.Image	  'треугольничек текущей записи &#8883; (верх)
 66 	Private oImageEditEditTop As New System.Web.UI.WebControls.Image	  'запрос на обновление (верх)
 67 	Private oImageDoubleEditTop As New System.Web.UI.WebControls.Image	  'дублирование (верх)
 68 	Private oImageLoadEditTop As New System.Web.UI.WebControls.Image	  'заливка (верх)
 69 	Private oImageClearEditTop As New System.Web.UI.WebControls.Image	  'очистка (верх)
 70 	Private oImageDelEditTop As New System.Web.UI.WebControls.Image	  'запрос на удаление (верх)
 71 	Private oImageNewEditTop As New System.Web.UI.WebControls.Image	  'звёздочка новой записи &#10036; (верх)
 72 	Private oImageAddEditTop As New System.Web.UI.WebControls.Image	  'запрос на добавление (верх)
 73 	Private oArrayLabelEditTop() As Label	 'метки полей редактора (верх)
 74 	Private oArrayTextBoxEditTop() As TextBox	 'поля редактора (верх)
 75 	Private oTableEditTop As New Table	'верхняя строка состояния
 76 	'bottom
 77 	Private oLabelNameEditBottom As New Label	  'название панели редактора (низ)
 78 	Private oLabelEventEditBottom As New Label	  'метка последнего события (низ)
 79 	Private oTextBoxEventEditBottom As New TextBox	  'текст последнего события (низ)
 80 	Private oImageSelectEditBottom As New System.Web.UI.WebControls.Image	  'треугольничек текущей записи &#8883; (низ)
 81 	Private oImageEditEditBottom As New System.Web.UI.WebControls.Image	  'запрос на обновление (низ)
 82 	Private oImageDoubleEditBottom As New System.Web.UI.WebControls.Image	  'дублирование (низ)
 83 	Private oImageLoadEditBottom As New System.Web.UI.WebControls.Image	  'заливка (низ)
 84 	Private oImageClearEditBottom As New System.Web.UI.WebControls.Image	  'очистка (низ)
 85 	Private oImageDelEditBottom As New System.Web.UI.WebControls.Image	  'запрос на удаление (низ)
 86 	Private oImageNewEditBottom As New System.Web.UI.WebControls.Image	  'звёздочка новой записи &#10036; (низ)
 87 	Private oImageAddEditBottom As New System.Web.UI.WebControls.Image	  'запрос на добавление (низ)
 88 	Private oArrayLabelEditBottom() As Label	 'метки полей редактора (низ)
 89 	Private oArrayTextBoxEditBottom() As TextBox	 'поля редактора (низ)
 90 	Private oTableEditBottom As New Table	'нижняя строка состояния
 91 #End Region 'var редактор.
 92 #Region "var остальные"
 93 	Private bRaisePostBackEvent As Boolean
 94 #End Region
 95 #End Region 'var
 96 #Region "property"
 97 	'группа свойств типа нумератора страниц
 98 	Private _customPager As New PagingStyle
 99 	''' -----------------------------------------------------------------------------
100 	''' <summary>
101 	''' Определяет свойства строки состояния CustomPaging; не поддерживает ViewState.
102 	''' </summary>
103 	''' <value>Стиль.</value>
104 	''' <remarks>
105 	''' </remarks>
106 	''' <history>
107 	''' 	[Max Pro]	4.05.2008	Created
108 	''' </history>
109 	''' -----------------------------------------------------------------------------
110 	<DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
111 	NotifyParentProperty(True), _
112 	PersistenceMode(PersistenceMode.InnerProperty), _
113 	Category("Styles"), _
114 	Description("Определяет свойства строки состояния CustomPaging.")> _
115 	Public ReadOnly Property CustomPager() As PagingStyle
116 		Get
117 			Return _customPager
118 		End Get
119 	End Property
120 	'группа свойств типа редактора
121 	Private _customEditor As New EditStyle
122 	''' -----------------------------------------------------------------------------
123 	''' <summary>
124 	''' Определяет свойства строки состояния CustomEditor; не поддерживает ViewState.
125 	''' </summary>
126 	''' <value>Стиль.</value>
127 	''' <remarks>
128 	''' </remarks>
129 	''' <history>
130 	''' 	[Max Pro]	4.05.2008	Created
131 	''' </history>
132 	''' -----------------------------------------------------------------------------
133 	<DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
134 	NotifyParentProperty(True), _
135 	PersistenceMode(PersistenceMode.InnerProperty), _
136 	Category("Styles"), _
137 	Description("Определяет свойства строки состояния CustomEditor.")> _
138 	Public ReadOnly Property CustomEditor() As EditStyle
139 		Get
140 			Return _customEditor
141 		End Get
142 	End Property
143 	''' -----------------------------------------------------------------------------
144 	''' <summary>
145 	''' Строка соединения с базой данных SQL-сервер; не поддерживает ViewState.
146 	''' </summary>
147 	''' <value>По умолчанию пустая строка.</value>
148 	''' <remarks>
149 	''' </remarks>
150 	''' <history>
151 	''' 	[Max Pro]	4.05.2008	Created
152 	''' </history>
153 	''' -----------------------------------------------------------------------------
154 	<Bindable(True), Category("Data"), DefaultValue(""), Description("Строка соединения с базой данных SQL-сервер.")> _
155 	Public Property sConnectionString() As String
156 		Get
157 			Return sConStrWebDataGridSql
158 		End Get
159 		Set(ByVal Value As String)
160 			sConStrWebDataGridSql = Value
161 		End Set
162 	End Property
163 	Private _sSqlProcedure As String
164 	''' -----------------------------------------------------------------------------
165 	''' <summary>
166 	''' (Необязательно)Процедура, выдающая в том числе наименования полей простой таблицы SimpleTable; не поддерживает ViewState.
167 	''' </summary>
168 	''' <value>По умолчанию имеется ввиду простая таблица SimpleTable.</value>
169 	''' <remarks>
170 	''' </remarks>
171 	''' <history>
172 	''' 	[Max Pro]	5.05.2008	Created
173 	''' </history>
174 	''' -----------------------------------------------------------------------------
175 	<Bindable(True), Category("Data"), DefaultValue(""), Description("(Необязательно)Процедура, выдающая в том числе наименования полей простой таблицы SimpleTable.")> _
176 	Public Property sSqlProcedure() As String
177 		Get
178 			Return _sSqlProcedure
179 		End Get
180 		Set(ByVal Value As String)
181 			_sSqlProcedure = Value
182 		End Set
183 	End Property
184 	Private _sSqlSimpleTable As String
185 	''' -----------------------------------------------------------------------------
186 	''' <summary>
187 	''' Простая таблица SimpleTable; не поддерживает ViewState.
188 	''' </summary>
189 	''' <value>Если sSqlProcedure не заполнено, берётся SELECT * FROM SimpleTable.</value>
190 	''' <remarks>
191 	''' </remarks>
192 	''' <history>
193 	''' 	[Max Pro]	5.05.2008	Created
194 	''' </history>
195 	''' -----------------------------------------------------------------------------
196 	<Bindable(True), Category("Data"), DefaultValue(""), Description("Простая таблица SimpleTable.")> _
197 	Public Property sSqlSimpleTable() As String
198 		Get
199 			Return _sSqlSimpleTable
200 		End Get
201 		Set(ByVal Value As String)
202 			_sSqlSimpleTable = Value
203 		End Set
204 	End Property
205 	Private _sConfigTables As String
206 	''' -----------------------------------------------------------------------------
207 	''' <summary>
208 	''' (Необязательно)Настроечная таблица для таблиц sConfigTables; не поддерживает ViewState.
209 	''' </summary>
210 	''' <value>По умолчанию tabConfigTables (dbo).</value>
211 	''' <remarks>
212 	''' </remarks>
213 	''' <history>
214 	''' 	[Max Pro]	5.05.2008	Created
215 	''' </history>
216 	''' -----------------------------------------------------------------------------
217 	<Bindable(True), Category("Data"), DefaultValue("tabConfigTables"), Description("(Необязательно)Настроечная таблица для таблиц sConfigTables.")> _
218 	Public Property sConfigTables() As String
219 		Get
220 			Return _sConfigTables
221 		End Get
222 		Set(ByVal Value As String)
223 			_sConfigTables = Value
224 		End Set
225 	End Property
226 	Private _sConfigFields As String
227 	''' -----------------------------------------------------------------------------
228 	''' <summary>
229 	''' (Необязательно)Настроечная таблица для полей sConfigFields; не поддерживает ViewState.
230 	''' </summary>
231 	''' <value>По умолчанию tabConfigFields (dbo).</value>
232 	''' <remarks>
233 	''' </remarks>
234 	''' <history>
235 	''' 	[Max Pro]	5.05.2008	Created
236 	''' </history>
237 	''' -----------------------------------------------------------------------------
238 	<Bindable(True), Category("Data"), DefaultValue("tabConfigFields"), Description("(Необязательно)Настроечная таблица для полей sConfigFields.")> _
239 	Public Property sConfigFields() As String
240 		Get
241 			Return _sConfigFields
242 		End Get
243 		Set(ByVal Value As String)
244 			_sConfigFields = Value
245 		End Set
246 	End Property
247 	Private _bIsVisibleName As Boolean
248 	''' -----------------------------------------------------------------------------
249 	''' <summary>
250 	''' Показывать или нет наименование текущего редактора (в виде DropDownList); не поддерживает ViewState.
251 	''' </summary>
252 	''' <value>По умолчанию да, показывать.</value>
253 	''' <remarks>
254 	''' </remarks>
255 	''' <history>
256 	''' 	[Max Pro]	31.05.2008	Created
257 	''' </history>
258 	''' -----------------------------------------------------------------------------
259 	<Bindable(True), Category("Layout"), DefaultValue(True), Description("Показывать или нет наименование текущего редактора (в виде DropDownList).")> _
260 	Public Property bIsVisibleName() As Boolean
261 		Get
262 			Return _bIsVisibleName
263 		End Get
264 		Set(ByVal Value As Boolean)
265 			_bIsVisibleName = Value
266 		End Set
267 	End Property
268 	REM Строка сортировки.
269 	Private Property sSortWebDataGridSql() As String
270 		Get
271 			If IsNothing(Page.Session("sSort1" & Page.Request.QueryString("table") & ID)) Then Return "" Else Return Page.Session("sSort1" & Page.Request.QueryString("table") & ID)
272 		End Get
273 		Set(ByVal Value As String)
274 			Page.Session("sSort1" & Page.Request.QueryString("table") & ID) = Value
275 		End Set
276 	End Property
277 	REM Направление сортировки.
278 	Private Property sSort() As String
279 		Get
280 			If IsNothing(Page.Session("sSort2" & Page.Request.QueryString("table") & ID)) Then Return "asc" Else Return Page.Session("sSort2" & Page.Request.QueryString("table") & ID)
281 		End Get
282 		Set(ByVal Value As String)
283 			Page.Session("sSort2" & Page.Request.QueryString("table") & ID) = Value
284 		End Set
285 	End Property
286 	REM Настроечные таблицы, свойство 1 из 2.
287 	Private _iMaxArray As Integer
288 	Private ReadOnly Property iMaxArray() As Integer
289 		Get
290 			FirstDataSet()
291 			Return _iMaxArray
292 		End Get
293 	End Property
294 	REM Настроечные таблицы, свойство 2 из 2.
295 	Private _oArrayConfig(,)
296 	Private ReadOnly Property oArrayConfig() As Object(,)
297 		Get
298 			FirstDataSet()
299 			Return _oArrayConfig
300 		End Get
301 	End Property
302 #End Region 'property
303 #Region "enum"
304 	REM Список типов данных, которые могут быть в ячейках.
305 	Private Enum eData
306 		[Boolean]
307 		Numeric
308 		DateSql
309 		Guid
310 		Array
311 		Text
312 	End Enum
313 	REM Список представлений ячеек.
314 	Private Enum eEdit
315 		ItemTemplate
316 		EditItemTemplate
317 	End Enum
318 #End Region 'enum
319 #Region "template"
320 	REM Шаблоны для чтения и записи ячеек датагрида.
321 	Private Class CellTemplate
322 		Implements ITemplate
323 		'var
324 		Private iData As eData
325 		Private iEdit As eEdit
326 		Public sDataField As String
327 		'end var
328 		REM Конструктор.
329 		Public Sub New(ByVal iData As eData, ByVal iEdit As eEdit, ByVal sDataField As String)
330 			Me.iData = iData
331 			Me.iEdit = iEdit
332 			Me.sDataField = sDataField
333 		End Sub
334 		REM Наполнение ячейки.
335 		Private Sub InstantiateIn(ByVal oControl As Control) Implements ITemplate.InstantiateIn
336 			'var
337 			Dim litHtml As New Literal
338 			Dim tbxHtml As New TextBox
339 			'end var
340 			Select Case iEdit
341 				Case eEdit.ItemTemplate
342 					AddHandler litHtml.DataBinding, AddressOf CellTemplate_DataBinding
343 					oControl.Controls.Add(litHtml)
344 				Case eEdit.EditItemTemplate
345 					AddHandler tbxHtml.DataBinding, AddressOf CellTemplate_DataBinding
346 					oControl.Controls.Add(tbxHtml)
347 			End Select
348 		End Sub
349 		REM Привязка к данным
350 		Private Sub CellTemplate_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs)
351 			'var
352 			Dim litHtml As Literal
353 			Dim tbxHtml As New TextBox
354 			Dim oContainer As DataGridItem
355 			Dim oData
356 			'end var
357 			'ini
358 			Select Case iEdit
359 				Case eEdit.ItemTemplate
360 					litHtml = CType(sender, Literal)
361 					oContainer = CType(litHtml.NamingContainer, DataGridItem)
362 				Case eEdit.EditItemTemplate
363 					tbxHtml = CType(sender, TextBox)
364 					oContainer = CType(tbxHtml.NamingContainer, DataGridItem)
365 			End Select
366 			oData = DataBinder.Eval(oContainer.DataItem, sDataField)
367 			'end ini
368 			If IsDBNull(oData) Then
369 				Select Case iEdit
370 					Case eEdit.ItemTemplate
371 						litHtml.Text = "<img src=""http://okno.mos.ru/images/gif/Null1.gif"" />"
372 					Case eEdit.EditItemTemplate
373 						tbxHtml.Text = "NULL"
374 						tbxHtml.ForeColor = Color.Magenta
375 						tbxHtml.Width = Unit.Percentage(100)
376 				End Select
377 			Else
378 				Select Case iData
379 					Case eData.Boolean
380 						Select Case iEdit
381 							Case eEdit.ItemTemplate
382 								litHtml.Text = "<img src=""http://okno.mos.ru/images/gif/" & IIf(bBoolean(oData), "Yes1", "No1") & ".gif"" />"
383 							Case eEdit.EditItemTemplate
384 								tbxHtml.Text = Convert.ToString(oData)
385 								tbxHtml.ForeColor = Color.Violet
386 								tbxHtml.Width = Unit.Percentage(100)
387 						End Select
388 					Case eData.Numeric
389 						Select Case iEdit
390 							Case eEdit.ItemTemplate
391 								litHtml.Text = "<font color=""darkviolet"">" & Convert.ToString(oData) & "</font>"
392 							Case eEdit.EditItemTemplate
393 								tbxHtml.Text = Convert.ToString(oData)
394 								tbxHtml.ForeColor = Color.DarkViolet
395 								tbxHtml.Width = Unit.Percentage(100)
396 						End Select
397 					Case eData.DateSql
398 						Select Case iEdit
399 							Case eEdit.ItemTemplate
400 								litHtml.Text = "<font color=""blue"">" & Convert.ToDateTime(oData) & "</font>"
401 							Case eEdit.EditItemTemplate
402 								tbxHtml.Text = Convert.ToString(oData)
403 								tbxHtml.ForeColor = Color.Blue
404 								tbxHtml.Width = Unit.Percentage(100)
405 						End Select
406 					Case eData.Guid
407 						Select Case iEdit
408 							Case eEdit.ItemTemplate
409 								litHtml.Text = "<font color=""green"">" & Convert.ToString(oData) & "</font>"
410 							Case eEdit.EditItemTemplate
411 								tbxHtml.Text = Convert.ToString(oData)
412 								tbxHtml.ForeColor = Color.Green
413 								tbxHtml.Width = Unit.Percentage(100)
414 						End Select
415 					Case eData.Array, eData.Text
416 						Select Case iEdit
417 							Case eEdit.ItemTemplate
418 								litHtml.Text = Convert.ToString(oData)
419 							Case eEdit.EditItemTemplate
420 								tbxHtml.Text = Convert.ToString(oData)
421 								tbxHtml.Width = Unit.Percentage(100)
422 						End Select
423 				End Select
424 			End If
425 		End Sub
426 	End Class
427 #End Region 'template
428 #Region "system"
429 	REM Конструктор.
430 	Public Sub New()
431 		'общие
432 		HeaderStyle.HorizontalAlign = HorizontalAlign.Center
433 		HeaderStyle.BackColor = Color.Gainsboro
434 		HeaderStyle.ForeColor = Color.Black
435 		AlternatingItemStyle.BackColor = Color.WhiteSmoke
436 		SelectedItemStyle.BackColor = Color.DarkGray
437 		SelectedItemStyle.ForeColor = Color.White
438 		AutoGenerateColumns = False
439 		'нумератор страниц
440 		AllowPaging = True
441 		AllowSorting = True
442 		EnableViewState = False
443 		PagerStyle.Visible = False
444 		PagerStyle.Position = PagerPosition.Top
445 		'редактор
446 		_iMaxArray = -1
447 		_bIsVisibleName = True
448 		_sConfigTables = "tabConfigTables"
449 		_sConfigFields = "tabConfigFields"
450 		ReDim _oArrayConfig(6, -1)
451 		ReDim sArrayTextBoxEdit(-1)		  'поля редактора (текст)
452 		ReDim oArrayLabelEditTop(-1)		  'метки полей редактора (верх)
453 		ReDim oArrayTextBoxEditTop(-1)		  'поля редактора (верх)
454 		ReDim oArrayLabelEditBottom(-1)		  'метки полей редактора (низ)
455 		ReDim oArrayTextBoxEditBottom(-1)		  'поля редактора (низ)
456 	End Sub
457 	REM Обработка входящих данных формы.
458 	Private Sub WebDataGridSql_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Init
459 		ReadSessionVar()
460 		SetDataSource()
461 		SetArrayTextBoxEdit()
462 	End Sub
463 	REM Формирование дочерних элементов управления.
464 	Protected Overrides Sub CreateChildControls()
465 		MyBase.CreateChildControls()
466 		'нумератор страниц
467 		oTextBoxTop.ID = ID & "_oTextBoxTop"
468 		oTextBoxBottom.ID = ID & "_oTextBoxBottom"
469 		Controls.Add(oTextBoxTop)
470 		Controls.Add(oTextBoxBottom)
471 		'редактор
472 		oTextBoxEventEditTop.ID = ID & "_oTextBoxEventEditTop"
473 		oTextBoxEventEditBottom.ID = ID & "_oTextBoxEventEditBottom"
474 		oTextBoxEventEditTop.ReadOnly = True
475 		oTextBoxEventEditBottom.ReadOnly = True
476 		Controls.Add(oTextBoxEventEditTop)
477 		Controls.Add(oTextBoxEventEditBottom)
478 	End Sub
479 	REM Сортировка.
480 	Private Sub WebDataGridSql_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles MyBase.SortCommand
481 		sSortWebDataGridSql = e.SortExpression + " " + sSort
482 		CType(DataSource, DataView).Sort = sSortWebDataGridSql
483 		DataBind()
484 		If sSort = "asc" Then
485 			sSort = "desc"
486 			SetTextBoxEvent("Была проведена сортировка по возрастанию.")
487 		Else
488 			sSort = "asc"
489 			SetTextBoxEvent("Была проведена сортировка по убыванию.")
490 		End If
491 	End Sub
492 	REM Выделение строки.
493 	Private Sub WebDataGridSql_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SelectedIndexChanged
494 		Page.Session("iSelect" & Page.Request.QueryString("table") & ID) = SelectedIndex
495 		SetTextBoxEvent("Была выделена строка.")
496 	End Sub
497 	REM Режим редактирования.
498 	Private Sub WebDataGridSql_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles MyBase.EditCommand
499 		Page.Session("iEdit" & Page.Request.QueryString("table") & ID) = e.Item.ItemIndex
500 		EditItemIndex = e.Item.ItemIndex : DataBind()
501 		SetTextBoxEvent("Открыт внутристрочный режим редактирования строки.")
502 	End Sub
503 	REM Отмена редактирования.
504 	Private Sub WebDataGridSql_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles MyBase.CancelCommand
505 		Page.Session("iEdit" & Page.Request.QueryString("table") & ID) = -1
506 		EditItemIndex = -1 : DataBind()
507 		SetTextBoxEvent("Отменён внутристрочный режим редактирования строки.")
508 	End Sub
509 	REM Обновление строки.
510 	Private Sub WebDataGridSql_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles MyBase.UpdateCommand
511 		'var
512 		Dim i As Integer
513 		Dim iConfig As Integer
514 		Dim iColumn As Integer
515 		Dim iSum As Integer
516 		Dim iMaxColumn As Integer
517 		Dim sArrayDataField(,) As String
518 		'var zap
519 		Dim iNum As Integer
520 		Dim sSelect As String
521 		Dim oP(,)
522 		Dim oErr As Exception
523 		'end var
524 		'ini
525 		iMaxColumn = Columns.Count - 1
526 		'end ini
527 		'обновление
528 		iSum = -1
529 		For iConfig = 0 To iMaxArray
530 			If oArrayConfig(2, iConfig) = False Then
531 				For iColumn = 0 To iMaxColumn
532 					If TypeOf Columns(iColumn) Is TemplateColumn Then
533 						If oArrayConfig(0, iConfig) = CType(CType(Columns(iColumn), TemplateColumn).ItemTemplate, CellTemplate).sDataField Then
534 							If Items(EditItemIndex).Cells(iColumn).Controls.Count > 0 Then
535 								If TypeOf Items(EditItemIndex).Cells(iColumn).Controls(0) Is TextBox Then
536 									iSum += 1
537 									ReDim Preserve sArrayDataField(1, iSum)
538 									sArrayDataField(0, iSum) = oArrayConfig(0, iConfig)
539 									sArrayDataField(1, iSum) = CType(Items(EditItemIndex).Cells(iColumn).Controls(0), TextBox).Text
540 								End If								  'TypeOf Is TextBox
541 							End If							'Controls.Count>0
542 						End If						 'iConfig=iColumn
543 					End If					  'TypeOf Is TemplateColumn
544 				Next iColumn
545 			End If			'не является ReadOnly
546 		Next iConfig
547 		If sConnectionString > "" And sSqlSimpleTable > "" Then
548 			If EditItemIndex > -1 Then
549 				If iMaxColumn > -1 Then
550 					If iSum > -1 Then
551 						sSelect = "UPDATE " & sSqlSimpleTable & " SET "
552 						ReDim oP(1, iSum)
553 						For i = 0 To iSum
554 							sSelect &= "[" & sArrayDataField(0, i) & "]=@" & sArrayDataField(0, i) & ","
555 							oP(0, i) = "@" & sArrayDataField(0, i)
556 							Select Case sArrayDataField(1, i)
557 								Case "null"
558 									oP(1, i) = DBNull.Value
559 								Case "true", "да", "истина"
560 									oP(1, i) = True
561 								Case "false", "нет", "ложь"
562 									oP(1, i) = False
563 								Case Else
564 									If IsNumeric(sArrayDataField(1, i)) Then
565 										oP(1, i) = Convert.ToDecimal(sArrayDataField(1, i))
566 									ElseIf All.bIsDateTsql(sArrayDataField(1, i)) Then
567 										oP(1, i) = Convert.ToDateTime(sArrayDataField(1, i))
568 									Else
569 										oP(1, i) = sArrayDataField(1, i)
570 									End If
571 							End Select
572 						Next i
573 						If Right(sSelect, 1) = "," Then sSelect = Left(sSelect, Len(sSelect) - 1)
574 						sSelect &= " WHERE Cast([" & oArrayConfig(5, 0) & "] AS NVarChar(4000))='" & Convert.ToString(DataKeys(EditItemIndex)) & "'"
575 						iNum = All.iZapExeN(All.ConnectString.WebDataGridSql, sSelect, oP, oErr, System.Data.CommandType.Text)
576 						If iNum > 0 Then
577 							SetTextBoxEvent("Строк обновлено: " & iNum & ".")
578 							bChangeDataSource = True
579 							Page.Session("iEdit" & Page.Request.QueryString("table") & ID) = -1
580 							EditItemIndex = -1
581 						ElseIf iNum = 0 Then
582 							SetTextBoxEvent("Строчное обновление не прошло; вероятно обновляемая строка была удалена.")
583 						Else
584 							SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: " & oErr.Message)
585 						End If
586 					Else
587 						SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: не найдено ни одной колонки в коллекции Columns типа TemplateColumn с доступом на запись.")
588 					End If
589 				Else
590 					SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: не найдено ни одной колонки Columns &#8213; возможно использовано свойство DataSource вместо рекомендованного sSqlProcedure, и свойство AutoGenerateColumns установлено в true.")
591 				End If
592 			Else
593 				SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: непонятно какую строку обновлять.")
594 			End If
595 		Else
596 			SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: не задано свойство sConnectionString или sSqlSimpleTable.")
597 		End If
598 	End Sub
599 	REM Обработка события на стороне клиента, которое вызвало обратный запрос, а также порождение соответствующих событий на стороне сервера.
600 	Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
601 		'var
602 		Dim i As Integer
603 		Dim sDdlNameValue As String
604 		'var zap
605 		Dim iSum As Integer
606 		Dim iNum As Integer
607 		Dim iMax As Integer
608 		Dim sSelect As String
609 		Dim oP(,)
610 		Dim oErr As Exception
611 		Dim oZap(,)
612 		Dim oArrayDouble(,)		  'x=0&#8594;sSqlSimpleTable.sField,x=1&#8594;значение.
613 		'end var
614 		'нумератор страниц
615 		Select Case eventArgument
616 			Case "oTextBoxTop"
617 				Dim s As String = Page.Request.Form(oTextBoxTop.ID)
618 				If IsNumeric(s) Then
619 					If s > 0 And s <= PageCount Then
620 						Page.Session("iPage" & Page.Request.QueryString("table") & ID) = s - 1
621 						CurrentPageIndex = s - 1
622 						Page.Session("iSelect" & Page.Request.QueryString("table") & ID) = -1
623 						SelectedIndex = -1
624 						DataBind()
625 					End If
626 				End If
627 				SetTextBoxEvent("Состоялся переход на страницу " & CurrentPageIndex + 1 & ".")
628 			Case "oTextBoxBottom"
629 				Dim s As String = Page.Request.Form(oTextBoxBottom.ID)
630 				If IsNumeric(s) Then
631 					If s > 0 And s <= PageCount Then
632<