Option Explicit On Option Strict On Imports ISNet.WebUI Imports ISNet.WebUI.WebGrid Imports System.Data Partial Class Modules_Default Inherits System.Web.UI.Page Private Const cNoData As String = "There is no data available!" Protected Sub grdResult_InitializeDataSource(ByVal sender As Object, ByVal e As ISNet.WebUI.WebGrid.DataSourceEventArgs) Handles grdResult.InitializeDataSource 'change cache timeout from 5 minutes (default) to 4 hours before loading data CType(sender, WebGrid).SetCacheControl(New System.TimeSpan(4, 0, 0), CacheItemPriority.Default) 'fill in some static data Dim ds As New DataSet() ds.Tables.Add() ds.Tables(0).Columns.Add(New System.Data.DataColumn("Description", Type.GetType("System.String"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X1", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X2", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X3", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X4", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X5", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X6", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X7", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X8", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X9", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X10", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X11", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X12", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X13", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X14", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X15", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X16", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X17", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X18", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X19", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X20", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X21", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X22", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X23", Type.GetType("System.String"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X24", Type.GetType("System.Double"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X25", Type.GetType("System.DateTime"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X26", Type.GetType("System.String"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X27", Type.GetType("System.String"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X28", Type.GetType("System.String"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X29", Type.GetType("System.String"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X30", Type.GetType("System.String"))) ds.Tables(0).Columns.Add(New System.Data.DataColumn("X31", Type.GetType("System.String"))) Dim ddl As String = ddlChoiceA.SelectedValue If ddl = "C" Then ds.Tables(0).Rows.Add()("Description") = cNoData Else ds.Tables(0).Rows.Add()("Description") = "Row 1 - " & ddl ds.Tables(0).Rows.Add()("Description") = "Row 2 - " & ddl ds.Tables(0).Rows.Add()("Description") = "Row 3 - " & ddl End If e.DataSource = ds End Sub Protected Sub grdResult_InitializeLayout(ByVal sender As Object, ByVal e As ISNet.WebUI.WebGrid.LayoutEventArgs) Handles grdResult.InitializeLayout SetColumnVisibility(grdResult.RootTable) End Sub Protected Sub grdResult_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdResult.PreRender SetColumnVisibility(grdResult.RootTable) SetColumnCaptions(grdResult.RootTable) End Sub Protected Sub grdResult_Export(ByVal sender As Object, ByVal e As ISNet.WebUI.WebGrid.ExportEventArgs) Handles grdResult.Export SetColumnVisibility(e.Table) SetColumnCaptions(e.Table) e.ReportInfo.IISReportPath = "TempReports" e.ReportInfo.ReportPath = Server.MapPath("~" & e.ReportInfo.IISReportPath) End Sub Private Sub SetColumnVisibility(ByVal Table As WebGridTable) Dim ddl As String = ddlChoiceA.SelectedValue Dim IsVarEs As Boolean = (ddl = "B") If grdResult.RootTable.Rows.Count = 1 AndAlso grdResult.RootTable.Rows(0).Cells(0).Value.ToString() = cNoData Then 'detected the 'no data' message, so remove all columns except the first one For Each col As WebGridColumn In grdResult.RootTable.Columns If col.Position <> 0 Then col.Visible = False End If Next Else 'Enable all columns, because not in 'no data' mode. 'Hide some columns based on the dropdown. For Each col As WebGridColumn In grdResult.RootTable.Columns If col.Position <> 0 Then col.Visible = True End If Next If IsVarEs Then grdResult.RootTable.Columns.GetNamedItem("X16").Visible = False grdResult.RootTable.Columns.GetNamedItem("X17").Visible = False grdResult.RootTable.Columns.GetNamedItem("X18").Visible = False grdResult.RootTable.Columns.GetNamedItem("X19").Visible = False grdResult.RootTable.Columns.GetNamedItem("X21").Visible = False grdResult.RootTable.Columns.GetNamedItem("X22").Visible = False End If End If End Sub Private Sub SetColumnCaptions(ByVal Table As WebGridTable) 'Change Caption of the columns depending on the selection item in combo boxes Dim ddl As String = ddlChoiceA.SelectedValue For Each col As WebGridColumn In Table.Columns col.Caption = Replace(col.Caption, "X", ddl) Next If ddl = "C" Then 'ddl="C" mean 'no data', so expand the first column to span the whole screen grdResult.RootTable.Columns(0).Width = New System.Web.UI.WebControls.Unit("1100px") Else grdResult.RootTable.Columns(0).Width = New System.Web.UI.WebControls.Unit("250px") End If End Sub Protected Sub ddlChoiceA_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlChoiceA.SelectedIndexChanged grdResult.ClearCachedDataSource() grdResult.RebindDataSource() End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then ddlChoiceA.Items.Add(New System.Web.UI.WebControls.ListItem("A: all columns", "A")) ddlChoiceA.Items.Add(New System.Web.UI.WebControls.ListItem("B: some hidden columns (16-19, 21-22)", "B")) ddlChoiceA.Items.Add(New System.Web.UI.WebControls.ListItem("C: no data", "C")) End If End Sub End Class