|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
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 'треугольничек текущей записи ⊳ (внутри)
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 'треугольничек текущей записи ⊳ (верх)
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 'звёздочка новой записи ✴ (верх)
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 'треугольничек текущей записи ⊳ (низ)
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 'звёздочка новой записи ✴ (низ)
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 ― возможно использовано свойство 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→sSqlSimpleTable.sField,x=1→значение.
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< | | | |