Автоматически генерировать таблицы, автоматически выполнять функции удаления, редактирования, заполнения, разбиения на страницы и настраивать
код стиля заголовка с помощью двух классов
.Сначала я слишком много думал, и функция была слишком мощной. Чем сильнее универсальность, тем медленнее работает класс asp. он запускается, тем меньше ему становится в итоге интереса. Есть еще много не доделанных функций, таких как проверка типа поля, отображение картинок, управление и т.д. Код выложен для того, чтобы все вместе изучали и учились. Желающие могут добавить
примеры этих функций:
set a = new DataGrid
'a.Connstr="Provider=SQLOLEDB.1;Идентификатор пользователя=sa;Пароль=сервер;Начальный каталог=temp_blue;Источник данных=сервер;Время ожидания подключения=30;Автоперевод=True;Размер пакета=4096;"
a.Connstr="Provider=Microsoft.Jet.OLEDB.4.0;"&" Data Source="&server.mappath("test.mdb") 'Подключить строку ACCSS
a.SQLString="select * from table1" 'Сгенерировать оператор sql для набора записей, отображаемого в сетке данных
a.isAddnew = 1 'Можно ли добавлять новые записи
a.Table = "table1" 'Основная таблица, управляемая datagrid
a.UniqueField = "ID" 'Поле флага, все записи не должны повторять целые числа
a.PagePosition = "down" 'Положение страницы: сверху вверх, снизу вниз, сверху вниз, сверху и снизу, остальные не отображаются.
a.pagesize = 5 'Отображать количество записей на странице
a.Pagenumber = 10 'Отображение номера страницы
a.BorderColor="#ff0000" 'По умолчанию отображается отображение
a.BackGround="#00ff00" 'По умолчанию отображается отображение
a.BorderWidth=1 По умолчанию – 1
a.
установить b1 = новый столбец
b1.Field = "id" 'Поле базы данных, привязанное к этому столбцу
b1.Title = "Логотип" 'Название
b1.Align = "center" 'Выравнивание
a.AddColumn(b1) 'Вставьте этот столбец в сетку данных
установить b2 = новый столбец
b2.Field="имя"
b2.Title="Фамилия"
a.AddColumn(b2)
set b3 = новый столбец
b3.Field = "фамилия"
b3.Title = "Имя"
a.AddColumn(b3)
set b4 = новый столбец
b4.Field = "время входа"
b4.Title = "Количество входов"
b4.ReadOnly = true 'Установить только для чтения и не будет отображаться в поле редактирования и новых записях.
a.AddColumn(b4)
set b5 = новый столбец
b5.Title="Редактировать"
b5.Columntype ="edit" 'Редактировать столбец
b5.EditCommandText = "Редактировать" 'Редактировать текст кнопки
a.AddColumn(b5)
set b6 = новый столбец
b6.align = "центр"
b6.Ширина = 200
b6.Columntype = «удалить»
b6.DeleteCommandText = "Кнопка "Удалить""
b6.Title="Удалить"
а.AddColumn(b6)
a.CreateGrid()
устанавливает b1 = ничего
установить b2 = ничего
установить b3 = ничего
установить b4 = ничего
установить b5 = ничего
установить b6 = ничего
Файл класса выглядит следующим образом:
<%Class DataGrid
Частные страницы
Частная строка SQLString
Пабликконнстр
Частные колонки
Частный индекс
Частное strUniqueField,strTable
Частный rs
Частное strCellspacing, strCellpadding, strCssClass
Частный strBorderColorDark,strBorderColorLight,strBackGroundColor
Частный intBorderWidth
Частный strHeadStyle, strHeadBackgroudColor
Частный стрстиле, стралтернатестиле
Частный уникальный ключ, dg_action, currPage
Частное действиеURL,pageURL,operationURL,formURL
Общедоступная позиция страницы, размер страницы, номер страницы
Публичный isAddnew
Частный подкласс_Initialize()
set Columns = Server.CreateObject("Scripting.Dictionary")
индекс = 0
Размер страницы = 10
Номер страницы = 10
PagePosition = "вверх"
strSQLString = Сеанс («DSN»)
уникальный ключ = Запрос («уникальный ключ»)
dg_action = Запрос («dg_action»)
currPage = Запрос («Страница»)
actionURL = Request.ServerVariables("Script_name") & "?page=" & currPage
если dg_action= "изменить", то formURL = actionURL& "&dg_action=update&uniquekey="&uniquekey
OperationURL = Request.ServerVariables("Script_name") & "?page=" & currPage& "&uniquekey=" & uniquekey
pageURL = Request.ServerVariables("Script_name")&"?1=1"
если currPage = "" или isnull(currPage), то currPage = 1
strBorderColorDark="#f7f7f7"
strBorderColorLight = "#cccccc"
strBackgroundColor = "#f7f7f7"
strHeadBackgroudColor = "#F2F2F2"
интбордервидс = 1
strAlternateStyle="bgcolor=#f6f6f6"
isAddnew = 1
Установите rs = Server.CreateObject("Adodb.Recordset")
Конец субтитра
Частный подкласс_Terminate()
RS.закрыть
setrs=ничего
установить столбцы = ничего
Конец субтитра
Открытая собственность Получить SQLString()
SQLString = стрSQLString
Конечная собственность
Открытое свойство Let SQLString (значение)
стрSQLString = Значение
Конечная собственность
Открытая собственность Let Style(значение)
стрСтиль = Значение()
Конечная собственность
Открытая собственность Получить стиль()
Стиль = стрСтиль
Конечная собственность
Открытое свойство Let UniqueField(Value)
strUniqueField = lcase (значение)
Конечная собственность
Публичная собственность Get UniqueField()
УникальноеПоле = стрУникеФилд
Конечная собственность
Таблица разрешений публичной собственности (значение)
strTable = lcase (значение)
Конечная собственность
Открытая собственность GetTable()
Таблица = стрТаблица
Конечная собственность
Открытое свойство Let DbConn(Value)
стрКонн = Значение
Конечная собственность
Открытая собственность Получить версию()
Версия = "1.0"
Конечное свойство Открытое свойство
Let Cellspacing(Value)
strcellspace = Значение
Конечная собственность
Открытая собственность Получить Cellspace()
Cellspacing = strcellspacing
Конечная собственность
Открытое свойство Let cellpadding(Value)
strcellpadding = Значение
Конечная собственность
Открытая собственность Получить cellpadding()
cellpadding = strCellspaceing
Конечная собственность
Открытое свойство Let CssClass (значение)
стрКссКласс = Значение
Конечная собственность
Открытая собственность Получить CssClass()
CssClass = стрCssClass
Конечная собственность
Открытое свойство Let BorderColor(значение)
стрБордерЦветДарк = значение
Конечная собственность
Открытое свойство GetBorderColor()
BorderColor = strBorderColorDark
Конечная собственность
Открытое свойство Let BackGround(значение)
стрБордерЦветДарк = значение
стрбакграундколор = значение
Конечная собственность
Открытая собственность Get BackGround()
BackGround = strBorderColorLight
Конечная собственность
Открытое свойство Let BorderWidth(значение)
intBorderWidth = значение
Конечная собственность
Открытое свойство GetBorderWidth()
BorderWidth = intBorderWidth
Конечная собственность
Открытое свойство Get nColumns(intIndex)
nkeys = Столбцы.Ключи
nItems = Столбцы.Предметы
для i = 0 до Columns.Count - 1
если intIndex = nkeys(i), то
установить tmp = nItems(i)
конец, если
следующий
установите nColumns = tmp
Конечная собственность
Страница частной функции (общая страница, номер страницы, эта страница)
MinPage = thisPage - номер страницы/2
если MinPage <= 0, то MinPage = 1
'если MinPage + номер страницы/2 > общее количество страниц, то Maxpage = общее количество страниц else Maxpage = MinPage + номер страницы
для i = от MinPage до MinPage + номер страницы -1
если я <= общая страница, то
если cint(thisPage)<> cint(i), то
strtemp = strtemp & "<a href="&pageURL&"&page=" & i &">" & i & "</a> "
еще
стртемп = стртемп & я&" "
конец, если
еще
страница = стртемп
Выход из функции
конец, если
Следующий
страница = стремп
Конечная функция
Публичная подпрограмма CreateGrid()
nkeys = Столбцы.Ключи
nItems = Столбцы.Предметы
Если dg_action="обновить", то
дим стрскл
strsql = "обновить" & таблицу & "установить"
дим дж
j=0
Для i = 0 индекс - 1
если nItems(i).Columntype<>"edit" и nItems(i).Columntype <> "delete", а не nItems(i).readonly и nItems(i).field<>uniquefield, тогда
если j <> 0, то strsql = strsql & ","
Выберите регистр nItems(i).DataType
Дело «текст»
strsql = strsql & nItems(i).field & "='" & Request(nItems(i).field)&"' "
Регистр "номер", "int", "bigint", "tinyint"
strsql = strsql & nItems(i).field & "=" & Request(nItems(i).field) & " "
Регистр «дата», «время», «дата-время»
strsql = strsql & nItems(i).field & "=convert(datetime,'" & Request(nItems(i).field)&"',102) "
Случай еще
strsql = strsql & nItems(i).field & "='" & Request(nItems(i).field)&"' "
Завершить выбор
j=j+1
Конец, если
Следующий
strsql = strsql & " где " & UniqueField &" = "& uniquekey
set rst = Server.CreateObject("adodb.recordset")
рст.Открыть strsql,connstr
'первый.Закрыть
установить сначала = ничего
установить strsql = ничего
Конец, если
Если dg_action="удалить", то
стрскл = ""
strsql = "удалить из " & table & " где " & UniqueField &" = "& uniquekey
ответ. Напишите strsql
set rst = Server.CreateObject("adodb.recordset")
рст.Открыть strsql,connstr
'первый.Закрыть
установить сначала = ничего
Конец, если
ЕСЛИ dg_action = "addnew" и isAddnew = 1, то
'тусклая строка
set rst = Server.CreateObject("adodb.recordset")
первая.открытая таблица,connstr,1,3,2
первый.addnew
j=0
Для i = 0 индекс - 1
если nItems(i).Columntype<>"edit" и nItems(i).Columntype <> "delete", а не nItems(i).readonly и nItems(i).field<>uniquefield, тогда
если j <> 0, то strsql = strsql & ","
Выберите регистр nItems(i).DataType
Дело «текст»
rst(nItems(i).field) = Запрос(nItems(i).field)
Регистр "номер", "int", "bigint", "tinyint"
rst(nItems(i).field) = Запрос(nItems(i).field)
Регистр «дата», «время», «дата-время»
rst(nItems(i).field) = Запрос(nItems(i).field)
Случай еще
rst(nItems(i).field) = Запрос(nItems(i).field)
Завершить выбор
j=j+1
Конец, если
Следующий
первое обновление
установить сначала = ничего
Конец, если
rs.Open strSQLString, connstr, 1,1
strTable="<table border=" & intBorderWidth & " bordercolordark=" & strBorderColorDark & " bordercolorlight=" & strbordercolorlight & "class=" &cssclass & " cellpacing=0>" 'Добавить стиль
strTable = strTable & "<form action=" & formURL & " name=""gridform"" метод=post>"
если PagePosition="up" или PagePosition="updown" then strTable = strTable & "<tr><td colspan="& index &">"& page(rs.PageCount,Pagenumber,currPage )&"</td>< /тр>"
strTable = strTable & "<tr bgcolor=" & strHeadBackgroudColor & ">"
для i = 0 до индекса - 1
если nItems(i).Title<>"" тогда
strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & nItems(i).Title &"</td>"
еще
strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & rs.Fields(i).Item.Name &"</td>"
конец, если
Следующий
strTable = strTable & "</tr>"
если cint(currPage) > cint(rs.PageCount), то currPage = rs.PageCount
intPage = Размер страницы
rs.PageSize = размер страницы
rs.AbsolutePage = currPage
делайте, пока не rs.eof и intPage > 0
intPage = intPage - 1
dbuniquekey = rs (уникальное поле)
Если intPage mod 2, то
strTable = strTable & "<tr>"
Еще
strTable = strTable & "<tr "& strAlternateStyle &">"
Конец, если
'response. Напишите len(dg_action)>0 и int(dbuniquekey) = int(uniquekey)
если dg_action = "edit" и int(dbuniquekey) = int(uniquekey), то
для i = 0 до индекса - 1
если nItems(i).Columntype<>"edit" и nItems(i).Columntype <> "delete", а не nItems(i).readonly и nItems(i).field<>uniquefield, тогда
strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=Text name=""" & rs.Fields(nItems(i).field).Name &""" value="" " & rs(nItems(i).field) &"""></td>"
еще
Выберите регистр lcase(nItems(i).Columntype)
Корпус "этикетка"
strTable = strTable & "<td "& nItems(i).HTMLstr &">" & rs(nItems(i).field) &"</td>"
Корпус "Радио"
Дело «образ»
Корпус «флажок»
Дело «текстовое поле»
strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=text name=""" & rs.Fields(i).Name &""" value=" & rs(nItems(i) ).field) &"></td>"
Дело «ссылка»
Дело «редактировать»
если UniqueField="" то ErrorMsg="UniqueField не установлен"
если dg_action = "редактировать", то
strTable = strTable & "<td "&nItems(i).HTMLstr &"><a href=""JavaScript:document.gridform.submit()"">"&nItems(i).UpdateCommandText&"</a> <a href ="&actionURL&">"&nItems(i).CancelCommandText&"</a></td>"
еще
strTable = strTable & "<td "&nItems(i).HTMLstr &"><a href="&actionURL&"&dg_action=edit&uniquekey=" & rs(UniqueField) &">"&nItems(i).EditCommandText&"</a>< /тд>"
конец, если
Дело «удалить»
если UniqueField="" то ErrorMsg="UniqueField не установлен"
strTable = strTable & "<td "&nItems(i).HTMLstr &"><a href="&actionURL&"&dg_action=delete&uniquekey=" & rs(UniqueField) &">"&nItems(i).DeleteCommandText&"</a>< /тд>"
Кейс «обновление»
Случай еще
strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & rs(nItems(i).field) & "</td>"
Завершить выбор
конец, если
Следующий
еще
для i = 0 до индекса - 1
выберите регистр lcase(nItems(i).Columntype)
Корпус "этикетка"
strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & rs(nItems(i).field) &"</td>"
Корпус "Радио"
Дело «образ»
Корпус «флажок»
Дело «текстовое поле»
strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=text value=" & rs(nItems(i).field) &"></td>"
Дело «ссылка»
Дело «редактировать»
если UniqueField="" то ErrorMsg="UniqueField не установлен"
strTable = strTable & "<td " & nItems(i).HTMLstr & "><a href=" & actionURL & "&dg_action=edit&uniquekey=" & rs(UniqueField) & ">" & nItems(i).EditCommandText & " </a></td>"
Дело «удалить»
если UniqueField="" то ErrorMsg="UniqueField не установлен"
strTable = strTable & "<td " & nItems(i).HTMLstr &"><a href=" & actionURL & "&dg_action=delete&uniquekey=" & rs(UniqueField) &">" & nItems(i).DeleteCommandText&"< /а></тд>"
Кейс «обновление»
Случай еще
strTable = strTable & "<td " & nItems(i).HTMLstr &">" & rs(nItems(i).Field) & "</td>"
Завершить выбор
Следующий
Конец, если
'Конец, если
rs.movenext
strTable = strTable & "</tr>"& vbcrlf
петля
если PagePosition="down" или PagePosition="updown", то strTable = strTable & "<tr><td colspan="& index &">"& page(rs.PageCount,Pagenumber,currPage )
'strTable =strTable&"<tr>"
для i = 0 до индекса - 1
если nItems(i).Columntype<>"edit" и nItems(i).Columntype <> "delete", а не nItems(i).readonly и nItems(i).field<>uniquefield, тогда
'strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=Text name=""" & rs.Fields(nItems(i).field).Name &"""></ тд>"
еще
'strTable = strTable & "<td " & nItems(i).HTMLstr &"> </td>"
конец, если
следующий
strTable =strTable&"</tr>"
strTable = strTable & "</form></table>"
Если isAddnew = 1, то
strTable = strTable & "<form action=""?dg_action=addnew"" name=""dgridadd"" Method=""post""><table border=" & intBorderWidth & " bordercolordark=" & strBorderColorDark & " bordercolorlight=" & strbordercolorlight & "cellpacing=0><tr>"
для i = 0 до индекса - 1
если nItems(i).Columntype<>"edit" и nItems(i).Columntype <> "delete", а не nItems(i).readonly и nItems(i).field<>uniquefield, тогда
strTable = strTable & "<td " & nItems(i).HTMLstr &">" & rs.Fields(nItems(i).field).Name &"</td>"
еще
'strTable = strTable & "<td " & nItems(i).HTMLstr &">"&nItems(i).Title&"</td>"
конец, если
следующий
strTable = strTable & "<td rowspan=2><a href=""JavaScript:document.dgridadd.submit()"">Новое</a></td></tr><tr>"
для i = 0 до индекса - 1
если nItems(i).Columntype<>"edit" и nItems(i).Columntype <> "delete", а не nItems(i).readonly и nItems(i).field<>uniquefield, тогда
strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=Text name=""" & rs.Fields(nItems(i).field).Name &"""></td >" и vbcrlf
еще
'strTable = strTable & "<td " & nItems(i).HTMLstr &"> </td>"
конец, если
следующий
strTable = strTable &"</tr></table></form>"
Конец, если
Response.Write strTable
Конец субтитра
Публичная подписка AddColumn(cColumn)
'set tem = новый столбец
'tem = cColumn
'response.Write cColumn.ColumnHTMLstr
Столбцы.Добавить индекс,cColumn
индекс = индекс + 1
'Столбцы.Элементы(i)
Конец субтитра
Конечный класс
Столбец класса
Частный стртипе
Частный strAlign
Частный стрстиле
Частный столбецтекст
Частный intWidth
Частный intHight
Частная улица
Частное strTitle
Частное событие
Частный стрКсскласс
Частный стртекст
Частный strEditCommandText,strUpdateCommandText,strCancelCommandText,strDeleteCommandText
Частный стррегэксп
Частный strReadOnly
Частный стрдататипе
Общедоступное значение MaxValue, MinValue, MaxLength, MinLength, IsEmpty, IsChar, IsNumber, isCharNumber, isDate, isEmail
Частный подкласс_Initialize()
Тип Столбца = "Текст"
strEditCommandText = "РЕДАКТИРОВАТЬ"
strUpdateCommandText = "ОБНОВЛЕНИЕ"
стрCancelCommandText = "ОТМЕНА"
strDeleteCommandText = "УДАЛИТЬ"
Конец субтитра
Частный подкласс_Terminate()
Конец субтитра
Открытое свойство Let Columntype(Value)
strType = lcase (значение)
Конечная собственность
Открытая собственность Получить тип столбца()
Тип Столбца = СтрТип
Конечная собственность
Публичная собственность Let Para(значение)
Параметр=Значение
Конечная собственность
Открытая собственность Let ParaLink(Value)
ПараСсылка = Заменить(Значение, "{0}", Пара)
Конечная собственность
Открытое свойство Let ControlName(значение)
Имя элемента управления = Значение
Конечная собственность
Открытая собственность Let Style(значение)
стрСтиль = Значение
Конечная собственность
Публичная собственность Let Eventstr(Value)
стрEvent = Значение
Конечная собственность
Открытая собственность Let Align (значение)
стрАлинг = Значение
Конечная собственность
Открытая собственность GetAlign()
Выровнять = стрВыровнять
Конечная собственность
Открытая собственность GetEventstr()
Eventstr = стрEvent
Конечная собственность
Открытое свойство Let Width (значение)
intWidth = Значение
Конечная собственность
Открытое свойство Let Field (значение)
strField = lcase (значение)
Конечная собственность
Открытая собственность Получить поле()
Поле = стрФилд
Конечная собственность
Публичная собственность Let Title (значение)
if value="" then strTitle = strField else strTitle = Value
Конечная собственность
Публичная собственность Получить заголовок()
если strTitle="" то Title = strField else Title = strTitle
Конечная собственность
Открытое свойство Let CssClass (значение)
стрКссКласс = Значение
Конечная собственность
Открытая собственность Получить CssClass()
CssClass = стрCssClass
Конечная собственность
Открытое свойство Let DataType (значение)
strDataType = lcase (значение)
Конечная собственность
Открытая собственность Получить тип данных()
ТипДанных = стрДаТип
Конечная собственность
Открытое свойство Let Text(значение)
выберите значение регистра
случай ""
стртекст = стртип
случай ноль
стртекст = стртип
еще случай
стртекст = значение
конец выбора
Конечная собственность
Открытая собственность Получить текст()
Текст = стрТекст
Конечная собственность
Открытое свойство Let ReadOnly(Value)
если значение="" или isnull(значение), то strReadOnly = False, иначе strReadOnly = значение
Конечная собственность
Публичная собственность Get ReadOnly()
ТолькоReadOnly = стрReadOnly
Конечная собственность
Открытое свойство Let EditCommandText(Value)
стрредиткоммандтекст = значение
Конечная собственность
Открытая собственность Get EditCommandText()
EditCommandText = стрEditCommandText
Конечная собственность
Открытое свойство Let UpdateCommandText(Value)
стрUpdateCommandText = Значение
Конечная собственность
Открытое свойство GetUpdateCommandText()
UpdateCommandText = strUpdateCommandText
Конечная собственность
Открытое свойство Let CancelCommandText(Value)
стрCancelCommandText = Значение
Конечная собственность
Открытая собственность Get CancelCommandText()
ОтменаКоммандТекст = стрОтменаКоммандТекст
Конечная собственность
Открытое свойство Let DeleteCommandText(Value)
стрDeleteCommandText = Значение
Конечная собственность
Открытая собственность: Получить DeleteCommandText()
УдалитьКоммандТекст = стрУдалитьКоммандТекст
Конечная собственность
Открытое свойство Let RegExp(Value)
стррегэксп = значение
Конечная собственность
Публичная собственность Получить RegExp()
Регэксп = стррегэксп
Конечная собственность
Открытая собственность Получить HTMLstr()
темпстр = ""
если intWidth <> "" then tempstr = tempstr & " width=""" & intWidth & """"
if intHeight <> "" then tempstr = tempstr & " height=""" & intHeight & """"
if strStyle <> "" then tempstr = tempstr & " style=""" & strStyle & """"
если strEvent <> "" then tempstr = tempstr & " " & strEvent
if strAlign <> "" then tempstr = tempstr & " align=""" & strAlign & """"
HTMLstr = темпстр
Конечная собственность
Конечный класс
%>