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

Логин

Email:
  Пароль:

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

Поиск

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

Книги по теме

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

Исходник

Автор:

Max Pro

 
Название:

WebDataGridSql версия 1.0

Дата: 30 June 2008
Описание: Этот элемент управления представляет из себя 1-ю версию редактора таблиц БД. Уже готова 2-я версия и на подходе 3-я. Публикую 1-ю версию для сравнения. Эту версию я отношу к средней сложности. Кстати, разобраться и повторить её Вы скорее всего не сможете - слишком сложно для понимания - нужна статья. Статью планирую написать. А пока можете использовать коды как образец программирования в стиле Микрософта. 
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=232]WebDataGridSql версия 1.0[/CODEPOST]
Оценить:
  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.ID & ID)) Then Return "" Else Return Page.Session("sSort1" & Page.ID & ID)
272 		End Get
273 		Set(ByVal Value As String)
274 			Page.Session("sSort1" & Page.ID & 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.ID & ID)) Then Return "asc" Else Return Page.Session("sSort2" & Page.ID & ID)
281 		End Get
282 		Set(ByVal Value As String)
283 			Page.Session("sSort2" & Page.ID & 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 "system"
304 	REM Конструктор.
305 	Public Sub New()
306 		'общие
307 		HeaderStyle.HorizontalAlign = HorizontalAlign.Center
308 		HeaderStyle.BackColor = Color.Gainsboro
309 		HeaderStyle.ForeColor = Color.Black
310 		AlternatingItemStyle.BackColor = Color.WhiteSmoke
311 		SelectedItemStyle.BackColor = Color.DarkGray
312 		SelectedItemStyle.ForeColor = Color.White
313 		AutoGenerateColumns = False
314 		'нумератор страниц
315 		AllowPaging = True
316 		AllowSorting = True
317 		EnableViewState = False
318 		PagerStyle.Visible = False
319 		PagerStyle.Position = PagerPosition.Top
320 		'редактор
321 		_iMaxArray = -1
322 		_bIsVisibleName = True
323 		_sConfigTables = "tabConfigTables"
324 		_sConfigFields = "tabConfigFields"
325 		ReDim _oArrayConfig(6, -1)
326 		ReDim sArrayTextBoxEdit(-1)	   'поля редактора (текст)
327 		ReDim oArrayLabelEditTop(-1)	   'метки полей редактора (верх)
328 		ReDim oArrayTextBoxEditTop(-1)	   'поля редактора (верх)
329 		ReDim oArrayLabelEditBottom(-1)	   'метки полей редактора (низ)
330 		ReDim oArrayTextBoxEditBottom(-1)	   'поля редактора (низ)
331 	End Sub
332 	REM Обработка входящих данных формы.
333 	Private Sub WebDataGridSql_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Init
334 		ReadSessionVar()
335 		SetDataSource()
336 		SetArrayTextBoxEdit()
337 	End Sub
338 	REM Формирование дочерних элементов управления.
339 	Protected Overrides Sub CreateChildControls()
340 		MyBase.CreateChildControls()
341 		'нумератор страниц
342 		oTextBoxTop.ID = ID & "_oTextBoxTop"
343 		oTextBoxBottom.ID = ID & "_oTextBoxBottom"
344 		Controls.Add(oTextBoxTop)
345 		Controls.Add(oTextBoxBottom)
346 		'редактор
347 		oTextBoxEventEditTop.ID = ID & "_oTextBoxEventEditTop"
348 		oTextBoxEventEditBottom.ID = ID & "_oTextBoxEventEditBottom"
349 		oTextBoxEventEditTop.ReadOnly = True
350 		oTextBoxEventEditBottom.ReadOnly = True
351 		Controls.Add(oTextBoxEventEditTop)
352 		Controls.Add(oTextBoxEventEditBottom)
353 	End Sub
354 	REM Сортировка.
355 	Private Sub WebDataGridSql_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles MyBase.SortCommand
356 		sSortWebDataGridSql = e.SortExpression + " " + sSort
357 		CType(DataSource, DataView).Sort = sSortWebDataGridSql
358 		DataBind()
359 		If sSort = "asc" Then
360 			sSort = "desc"
361 			SetTextBoxEvent("Была проведена сортировка по возрастанию.")
362 		Else
363 			sSort = "asc"
364 			SetTextBoxEvent("Была проведена сортировка по убыванию.")
365 		End If
366 	End Sub
367 	REM Выделение строки.
368 	Private Sub WebDataGridSql_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SelectedIndexChanged
369 		Page.Session("iSelect" & Page.ID & ID) = SelectedIndex
370 		SetTextBoxEvent("Была выделена строка.")
371 	End Sub
372 	REM Режим редактирования.
373 	Private Sub WebDataGridSql_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles MyBase.EditCommand
374 		Page.Session("iEdit" & Page.ID & ID) = e.Item.ItemIndex
375 		EditItemIndex = e.Item.ItemIndex : DataBind()
376 		SetTextBoxEvent("Открыт внутристрочный режим редактирования строки.")
377 	End Sub
378 	REM Отмена редактирования.
379 	Private Sub WebDataGridSql_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles MyBase.CancelCommand
380 		Page.Session("iEdit" & Page.ID & ID) = -1
381 		EditItemIndex = -1 : DataBind()
382 		SetTextBoxEvent("Отменён внутристрочный режим редактирования строки.")
383 	End Sub
384 	REM Обновление строки.
385 	Private Sub WebDataGridSql_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles MyBase.UpdateCommand
386 		'var
387 		Dim i As Integer
388 		Dim iConfig As Integer
389 		Dim iColumn As Integer
390 		Dim iSum As Integer
391 		Dim iMaxColumn As Integer
392 		Dim sArrayDataField(,) As String
393 		'var zap
394 		Dim iNum As Integer
395 		Dim sSelect As String
396 		Dim oP(,)
397 		Dim oErr As Exception
398 		'end var
399 		'ini
400 		iMaxColumn = Columns.Count - 1
401 		'end ini
402 		'обновление
403 		iSum = -1
404 		For iConfig = 0 To iMaxArray
405 			If oArrayConfig(2, iConfig) = False Then
406 				For iColumn = 0 To iMaxColumn
407 					If TypeOf Columns(iColumn) Is BoundColumn Then
408 						If oArrayConfig(0, iConfig) = CType(Columns(iColumn), BoundColumn).DataField Then
409 							If Items(EditItemIndex).Cells(iColumn).Controls.Count > 0 Then
410 								If TypeOf Items(EditItemIndex).Cells(iColumn).Controls(0) Is TextBox Then
411 									iSum += 1
412 									ReDim Preserve sArrayDataField(1, iSum)
413 									sArrayDataField(0, iSum) = oArrayConfig(0, iConfig)
414 									sArrayDataField(1, iSum) = CType(Items(EditItemIndex).Cells(iColumn).Controls(0), TextBox).Text
415 								End If							   'TypeOf Is TextBox
416 							End If							'Controls.Count>0
417 						End If						 'iConfig=iColumn
418 					End If				   'TypeOf Is BoundColumn
419 				Next iColumn
420 			End If			'не является ReadOnly
421 		Next iConfig
422 		If sConnectionString > "" And sSqlSimpleTable > "" Then
423 			If EditItemIndex > -1 Then
424 				If iMaxColumn > -1 Then
425 					If iSum > -1 Then
426 						sSelect = "UPDATE " & sSqlSimpleTable & " SET "
427 						ReDim oP(1, iSum)
428 						For i = 0 To iSum
429 							sSelect &= "[" & sArrayDataField(0, i) & "]=@" & sArrayDataField(0, i) & ","
430 							oP(0, i) = "@" & sArrayDataField(0, i)
431 							Select Case sArrayDataField(1, i)
432 								Case "null"
433 									oP(1, i) = DBNull.Value
434 								Case "true", "да", "истина"
435 									oP(1, i) = True
436 								Case "false", "нет", "ложь"
437 									oP(1, i) = False
438 								Case Else
439 									If IsNumeric(sArrayDataField(1, i)) Then
440 										oP(1, i) = Convert.ToDecimal(sArrayDataField(1, i))
441 									ElseIf All.bIsDateTsql(sArrayDataField(1, i)) Then
442 										oP(1, i) = Convert.ToDateTime(sArrayDataField(1, i))
443 									Else
444 										oP(1, i) = sArrayDataField(1, i)
445 									End If
446 							End Select
447 						Next i
448 						If Right(sSelect, 1) = "," Then sSelect = Left(sSelect, Len(sSelect) - 1)
449 						sSelect &= " WHERE Cast([" & oArrayConfig(5, 0) & "] AS NVarChar(4000))='" & Convert.ToString(DataKeys(EditItemIndex)) & "'"
450 						iNum = All.iZapExeN(All.ConnectString.WebDataGridSql, sSelect, oP, oErr, System.Data.CommandType.Text)
451 						If iNum > 0 Then
452 							SetTextBoxEvent("Строк обновлено: " & iNum & ".")
453 							bChangeDataSource = True
454 							Page.Session("iEdit" & Page.ID & ID) = -1
455 							EditItemIndex = -1
456 						ElseIf iNum = 0 Then
457 							SetTextBoxEvent("Строчное обновление не прошло; вероятно обновляемая строка была удалена.")
458 						Else
459 							SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: " & oErr.Message)
460 						End If
461 					Else
462 						SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: не найдено ни одной колонки в коллекции Columns типа BoundColumn с доступом на запись.")
463 					End If
464 				Else
465 					SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: не найдено ни одной колонки Columns &#8213; возможно использовано свойство DataSource вместо рекомендованного sSqlProcedure, и свойство AutoGenerateColumns установлено в true.")
466 				End If
467 			Else
468 				SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: непонятно какую строку обновлять.")
469 			End If
470 		Else
471 			SetTextBoxEvent("Строчное обновление не прошло из-за ошибки: не задано свойство sConnectionString или sSqlSimpleTable.")
472 		End If
473 	End Sub
474 	REM Обработка события на стороне клиента, которое вызвало обратный запрос, а также порождение соответствующих событий на стороне сервера.
475 	Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
476 		'var
477 		Dim i As Integer
478 		Dim sDdlNameValue As String
479 		'var zap
480 		Dim iSum As Integer
481 		Dim iNum As Integer
482 		Dim iMax As Integer
483 		Dim sSelect As String
484 		Dim oP(,)
485 		Dim oErr As Exception
486 		Dim oZap(,)
487 		Dim oArrayDouble(,)		  'x=0&#8594;sSqlSimpleTable.sField,x=1&#8594;значение.
488 		'end var
489 		'нумератор страниц
490 		Select Case eventArgument
491 			Case "oTextBoxTop"
492 				Dim s As String = Page.Request.Form(oTextBoxTop.ID)
493 				If IsNumeric(s) Then
494 					If s > 0 And s <= PageCount Then
495 						Page.Session("iPage" & Page.ID & ID) = s - 1
496 						CurrentPageIndex = s - 1
497 						Page.Session("iSelect" & Page.ID & ID) = -1
498 						SelectedIndex = -1
499 						DataBind()
500 					End If
501 				End If
502 				SetTextBoxEvent("Состоялся переход на страницу " & CurrentPageIndex + 1 & ".")
503 			Case "oTextBoxBottom"
504 				Dim s As String = Page.Request.Form(oTextBoxBottom.ID)
505 				If IsNumeric(s) Then
506 					If s > 0 And s <= PageCount Then
507 						Page.Session("iPage" & Page.ID & ID) = s - 1
508 						CurrentPageIndex = s - 1
509 						Page.Session("iSelect" & Page.ID & ID) = -1
510 						SelectedIndex = -1
511 						DataBind()
512 					End If
513 				End If
514 				SetTextBoxEvent("Состоялся переход на страницу " & CurrentPageIndex + 1 & ".")
515 			Case "oImage1"
516 				Page.Session("iPage" & Page.ID & ID) = 0
517 				CurrentPageIndex = 0
518 				DataBind()
519 				SetTextBoxEvent("Состоялся переход на страницу " & CurrentPageIndex + 1 & ".")
520 			Case "oImage2"
521 				If CurrentPageIndex > 0 Then
522 					Page.Session("iPage" & Page.ID & ID) -= 1
523 					CurrentPageIndex -= 1
524 					Page.Session("iSelect" & Page.ID & ID) = -1
525 					SelectedIndex = -1
526 					DataBind()
527 				End If
528 				SetTextBoxEvent("Состоялся переход на страницу " & CurrentPageIndex + 1 & ".")
529 			Case "oImage3"
530 				If CurrentPageIndex < (PageCount - 1) Then
531 					Page.Session("iPage" & Page.ID & ID) += 1
532 					CurrentPageIndex += 1
533 					Page.Session("iSelect" & Page.ID & ID) = -1
534 					SelectedIndex = -1
535 					DataBind()
536 				End If
537 				SetTextBoxEvent("Состоялся переход на страницу " & CurrentPageIndex + 1 & ".")
538 			Case "oImage4"
539 				If PageCount > 0 Then
540 					Page.Session("iPage" & Page.ID & ID) = PageCount - 1
541 					CurrentPageIndex = PageCount - 1
542 					Page.Session("iSelect" & Page.ID & ID) = -1
543 					SelectedIndex = -1
544 					DataBind()
545 				End If
546 				SetTextBoxEvent("Состоялся переход на страницу " & CurrentPageIndex + 1 & ".")
547 		End Select
548 		'редактор
549 		'синхронизация
550 		iSum = -1
551 		For i = 0 To iMaxArray
552 			If oArrayConfig(2, i) = False Then iSum += 1
553 		Next i
554 		ReDim sArrayTextBoxEdit(iSum)
555 		iSum = -1
556 		For i = 0 To iMaxArray
557 			If oArrayConfig(2, i) = False Then
558 				iSum += 1
559 				If Page.Request.Form(oArrayTextBoxEditTop(i).ID) > "" Then
560 					sArrayTextBoxEdit(iSum) = Page.Request.Form(oArrayTextBoxEditTop(i).ID)
561 				ElseIf Page.Request.Form(oArrayTextBoxEditBottom(i).ID) > "" Then
562 					sArrayTextBoxEdit(iSum) = Page.Request.Form(oArrayTextBoxEditBottom(i).ID)
563 				Else
564 					sArrayTextBoxEdit(iSum) = ""
565 				End If
566 			End If
567 		Next i
568 		Select Case eventArgument
569 			Case "oImageEditEdit"			'запрос на обновление
570 				If sConnectionString > "" And sSqlSimpleTable > "" Then
571 					If iMaxArray > -1 And SelectedIndex > -1 Then
572 						If iSum > -1 Then
573 							sSelect = "UPDATE " & sSqlSimpleTable & " SET "
574 							ReDim oP(1, iSum)
575 							iSum = -1
576 							For i = 0 To iMaxArray
577 								If oArrayConfig(2, i) = False Then
578 									iSum += 1
579 									sSelect &= "[" & oArrayConfig(0, i) & "]=@" & oArrayConfig(0, i) & ","
580 									oP(0, iSum) = "@" & oArrayConfig(0, i)
581 									Select Case sArrayTextBoxEdit(iSum)
582 										Case "null"
583 											oP(1, iSum) = DBNull.Value
584 										Case "true", "да", "истина"
585 											oP(1, iSum) = True
586 										Case "false", "нет", "ложь"
587 											oP(1, iSum) = False
588 										Case Else
589 											If IsNumeric(sArrayTextBoxEdit(iSum)) Then
590 												oP(1, iSum) = Convert.ToDecimal(sArrayTextBoxEdit(iSum))
591 											ElseIf bIsDateTsql(sArrayTextBoxEdit(iSum)) Then
592 												oP(1, iSum) = Convert.ToDateTime(sArrayTextBoxEdit(iSum))
593 											Else
594 												oP(1, iSum) = sArrayTextBoxEdit(iSum)
595 											End If
596 									End Select
597 								End If
598 							Next i
599 							If Right(sSelect, 1) = "," Then sSelect = Left(sSelect, Len(sSelect) - 1)
600 							sSelect &= " WHERE Cast([" & oArrayConfig(5, 0) & "] AS NVarChar(4000))='" & Convert.ToString(DataKeys(SelectedIndex)) & "'"
601 							iNum = All.iZapExeN(All.ConnectString.WebDataGridSql, sSelect, oP, oErr, System.Data.CommandType.Text)
602 							If iNum > 0 Then
603 								SetTextBoxEvent("Обновлено строк: " & iNum & ".")
604 								bChangeDataSource = True
605 							ElseIf iNum = 0 Then
606 								SetTextBoxEvent("Обновление не прошло; вероятно обновляемая строка была удалена.")
607 							Else
608 								SetTextBoxEvent("Обновление не прошло из-за ошибки: " & oErr.Message)
609 							End If
610 						Else
611 							SetTextBoxEvent("Обновление не прошло из-за ошибки: не найдено ни одного поля с доступом на запись.")
612 						End If
613 					Else
614 						SetTextBoxEvent("Обновление не прошло из-за ошибки: непонятно какую строку обновлять.")
615 					End If
616 				Else
617 					SetTextBoxEvent("Обновление не прошло из-за ошибки: не задано свойство sConnectionString или sSqlSimpleTable.")
618 				End If
619 			Case "oImageDoubleEdit"			 'дублирование