/
ivan
/
ModMas
Обзор
Документация
Войти
/
ivan
/
ModMas
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ModuleMaster/usercontrols/edgrid.ascx.vb
279 строк
10 KB
i.krivokon
Initial commit
13 мар 2026, 13:49
13 мар 2026, 13:49
00d9fb6
Код
Авторство
О чём код?
Imports System.Data Imports edGridNamespace Partial Class UserControls_edGrid Inherits System.Web.UI.UserControl '-----------------------------------Table params - ID and dbTableName Private _tId As Integer = 0 Public Property TableId As Integer Set(value As Integer) If Not IsNothing(value) Then _tId = value Else _tId = 0 End If End Set Get Return _tId End Get End Property Private _dbName As String = "[UserModules]" Public Property DbName As String Set(value As String) _dbName = "[" & value & "]" End Set Get Return _dbName End Get End Property Private _schema As String = "[user]" Public Property Schema As String Set(value As String) _schema = "[" & value & "]" End Set Get Return _schema End Get End Property Private _dbTableName As String = "" Public Property DbTableName As String Set(value As String) _dbTableName = _dbName & "." & _schema & ".[" & value & "]" End Set Get Return _dbTableName End Get End Property ''-----------------------------------SQL Query Params - Filters and Sorting order Private _filters As New Hashtable Private _sort As New Hashtable '--------------------------------Config Private _config As tableConfig Public ReadOnly Property config As tableConfig Get Return _config End Get End Property '---------------------------------SQL Private _sql As String = Nothing '--------------------------------Output Public Message As String = "" '------------------DB class Private _db As New sharedClasses.dbFunctions.SqlFunctions Public Event ErrorHappened(source As String, ex As Exception) Private helper As New edGridHelpers #Region "Page Life" Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If _tId <> 0 Then _config = New tableConfig(_tId) If Not IsNothing(_config) Then Session.Add("config_" & _tId, _config) DbTableName = _config.dbTableName _sql = PrepareSQL(_config.ColConfig, DbTableName) 'Message = _sql grid.DataSource = _db.GetData(_sql) grid.DataBind() End If End If End Sub Protected Sub Page_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender End Sub #End Region #Region "Grid" Protected Sub grid_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles grid.RowCommand End Sub Protected Sub grid_SelectedIndexChanged(sender As Object, e As EventArgs) Handles grid.SelectedIndexChanged End Sub Protected Sub grid_SelectedIndexChanging(sender As Object, e As GridViewSelectEventArgs) Handles grid.SelectedIndexChanging End Sub Protected Sub grid_Sorting(sender As Object, e As GridViewSortEventArgs) Handles grid.Sorting End Sub Protected Sub grid_Sorted(sender As Object, e As EventArgs) Handles grid.Sorted End Sub Protected Sub grid_PageIndexChanged(sender As Object, e As EventArgs) Handles grid.PageIndexChanged End Sub Protected Sub grid_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) Handles grid.PageIndexChanging End Sub Protected Sub grid_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles grid.RowDataBound 'If e.Row.RowType = DataControlRowType.DataRow Then '_colConfig.DefaultView.RowFilter = "Enabled='Y'" Dim rowView As DataRowView = CType(e.Row.DataItem, DataRowView) Dim cellCount As Integer = 0 For Each c As TableCell In e.Row.Cells If _config.GetParam(cellCount, "Visible") = "N" Then c.Visible = False ElseIf (_config.GetParam(cellCount, "Enabled") = "Y") And e.Row.RowType = DataControlRowType.DataRow Then Try c.CssClass = "click" c.Attributes.Add("tid", _tId) c.Attributes.Add("field", _config.GetParam(cellCount, "NAME")) c.Attributes.Add("type", _config.GetParam(cellCount, "Fieldtype")) c.Attributes.Add("rowid", rowView("id")) If e.Row.RowType = DataControlRowType.DataRow Then Dim cntrl As Object = helper.getControl(_config.GetParamRow(cellCount), c.Text) If Not IsNothing(cntrl) Then c.Controls.Add(cntrl) End If End If Catch ex As Exception End Try ElseIf e.Row.RowType = DataControlRowType.Footer Then c.Attributes.Add("field", "Total|" & _config.GetParam(cellCount, "NAME")) End If cellCount += 1 Next 'End If End Sub #End Region #Region "Controls" #End Region #Region "Prepare SQL query" Private Function PrepareSQL(ByVal colConfig As DataTable, ByVal dbTableName As String) As String iterationCount = 0 Dim sql As New StringBuilder If Not IsNothing(colConfig) Then sql.Append("SELECT ") Dim first As Boolean = False For Each dr As DataRow In colConfig.Rows If first Then sql.Append(", ") End If If dr("fieldtype").ToString = "FORMULA" Then sql.Append(PrepareFormula(dr("formula")) & " as [" & dr("FieldName") & "]") ElseIf dr("fieldtype").ToString = "DATEFORMULA" Then sql.Append(PrepareDateFormula(dr("formula")) & " as [" & dr("FieldName") & "]") Else sql.Append("[" & dr("name") & "] as [" & dr("FieldName") & "]") End If first = True Next Else sql.Append("SELECT * ") End If sql.Append(" FROM ") sql.Append("" & dbTableName & "") Return sql.ToString End Function #End Region #Region "Formula" Dim iterationCount As Integer = 0 Private Function PrepareFormula(ByVal formula As String) As String Dim params() As String = formula.Split(" ") Dim cnt As Integer = 1 Dim preparedFormula As String = "" For Each p As String In params p = p.Trim If {"*", "/", "+", "-", "(", ")"}.Contains(p) Then preparedFormula &= p Else preparedFormula &= " cast(" & CheckForFormula(p) & " as decimal(18,3)) " End If cnt += 1 Next Return "ROUND(" & preparedFormula & ",2)" End Function Private Function CheckForFormula(ByVal param As String) As String Try iterationCount += 1 If iterationCount > 100 Then Return "'" & param & "'" End If Dim rows() As DataRow = _config.ColConfig.Select("name='" & param & "'") If rows.Count > 0 Then Dim dr As DataRow = rows(0) If dr("fieldtype") = "FORMULA" Then Return "(" & PrepareFormula(dr("formula")) & ")" Else Return " nullif(rtrim([" & param & "]),'') " End If Else Return "'" & param & "'" End If Catch ex As Exception Return "'" & param & "'" End Try End Function Private Function PrepareDateFormula(formula As String) As String Dim params() As String = formula.Split(" ") If params.Count <> 3 Then Return "" End If If IsNumeric(params(0)) And IsNumeric(params(2)) Then Return "" End If If Not IsNumeric(params(0)) And Not IsNumeric(params(2)) And params(1) = "+" Then Return "" End If If params(1) <> "+" And params(1) <> "-" Then Return "" End If If Not IsNumeric(params(0)) And Not IsNumeric(params(2)) Then If params(0) = "TODAY" Then Return " DATEDIFF(day, convert (datetime, " & params(2) & ",20), getdate())" ElseIf params(2) = "TODAY" Then Return " DATEDIFF(day, convert (datetime, " & params(0) & ",20), getdate())" Else Return " DATEDIFF(day, convert (datetime, " & params(2) & ",20), convert (datetime, " & params(0) & ",20))" End If Else If IsNumeric(params(0)) Then If params(1) = "TODAY" Then Return " SUBSTRING(CONVERT(varchar, DATEADD(day," & params(1) & params(0) & ", getdate()), 120),1,10)" Else Return " SUBSTRING(CONVERT(varchar, DATEADD(day," & params(1) & params(0) & ", convert (datetime, " & params(1) & ",20)), 120),1,10)" End If Else If params(0) = "TODAY" Then Return " SUBSTRING(CONVERT(varchar, DATEADD(day," & params(1) & params(2) & ", getdate()), 120),1,10)" Else Return "SUBSTRING(CONVERT(varchar, DATEADD(day," & params(1) & params(2) & ", convert (datetime, " & params(0) & ",20)), 120),1,10)" End If End If End If End Function #End Region #Region "Misc" Private Sub ErrorHandling(source As String, ex As Exception) Message &= "Error: " & source & "->" & ex.Message End Sub #End Region End Class