or

| <telerik:RadGrid ID="RadGrid1" PageSize="15" AllowFilteringByColumn="true" runat="server" |
| AutoGenerateColumns="false" AllowAutomaticDeletes="false" AllowAutomaticUpdates="false" |
| AllowAutomaticInserts="false" AllowSorting="true" AllowPaging="true" AllowCustomPaging="true" |
| OnNeedDataSource="RadGrid1_NeedDataSource"> |
| <MasterTableView TableLayout="Auto" DataKeyNames="ID"> |
| <PagerStyle AlwaysVisible="true" Mode="NextPrevAndNumeric" /> |
| <ItemStyle Wrap="False" /> |
| <NoRecordsTemplate> |
| No Errors Logged at this time |
| </NoRecordsTemplate> |
| <NestedViewTemplate> |
| <fieldset> |
| <legend style="font-size: 14px; font-weight: bolder;">Error Details</legend> |
| <table> |
| <tr> |
| <td style="white-space: nowrap;"> |
| Error URL: |
| </td> |
| <td style="width: 100%;"> |
| <%#DataBinder.Eval(Container.DataItem, "errURL")%> |
| </td> |
| </tr> |
| <tr> |
| <td style="white-space: nowrap;"> |
| Error Source: |
| </td> |
| <td> |
| <%#DataBinder.Eval(Container.DataItem, "errSource")%> |
| </td> |
| </tr> |
| <tr> |
| <td style="white-space: nowrap;"> |
| Exception: |
| </td> |
| <td> |
| <%#DataBinder.Eval(Container.DataItem, "errEx")%> |
| </td> |
| </tr> |
| <tr> |
| <td style="white-space: nowrap;"> |
| Stack Trace: |
| </td> |
| <td> |
| <%#DataBinder.Eval(Container.DataItem, "errStack")%> |
| </td> |
| </tr> |
| <tr> |
| <td style="white-space: nowrap;"> |
| Additional Notes: |
| </td> |
| <td> |
| <%#DataBinder.Eval(Container.DataItem, "errNotes")%> |
| </td> |
| </tr> |
| </table> |
| </fieldset> |
| <fieldset> |
| <legend style="font-size: 14px; font-weight: bolder;">User Details</legend> |
| <table> |
| <tr> |
| <td style="white-space: nowrap;"> |
| User Name: |
| </td> |
| <td style="width: 100%;"> |
| <%#DataBinder.Eval(Container.DataItem, "errUser")%> |
| </td> |
| </tr> |
| <tr> |
| <td style="white-space: nowrap;"> |
| User IP Address: |
| </td> |
| <td> |
| <%#DataBinder.Eval(Container.DataItem, "errIP")%> |
| </td> |
| </tr> |
| <tr> |
| <td style="white-space: nowrap;"> |
| User Browser: |
| </td> |
| <td> |
| <%#DataBinder.Eval(Container.DataItem, "errBrowser")%> |
| </td> |
| </tr> |
| <tr> |
| <td style="white-space: nowrap;"> |
| User Operating System: |
| </td> |
| <td> |
| <%#DataBinder.Eval(Container.DataItem, "errOS")%> |
| </td> |
| </tr> |
| </table> |
| </fieldset> |
| <div style="height: 20px;"> |
| </div> |
| </NestedViewTemplate> |
| <Columns> |
| <telerik:GridBoundColumn DataField="ID" HeaderText="Error" UniqueName="ID" /> |
| <telerik:GridBoundColumn DataField="errUser" HeaderText="User" UniqueName="errUser" /> |
| <telerik:GridTemplateColumn DataField="errMessage" HeaderText="Message" UniqueName="Message"> |
| <ItemTemplate> |
| <asp:Label ID="lblMessage" runat="server" Text='<%# ShortenField(DataBinder.Eval(Container.DataItem, "errMessage")) %>' /> |
| </ItemTemplate> |
| </telerik:GridTemplateColumn> |
| <telerik:GridTemplateColumn Reorderable="true" DataField="errDate" HeaderText="Date" |
| UniqueName="Date"> |
| <ItemStyle Width="100px" /> |
| <ItemTemplate> |
| <asp:Label ID="lblDate" runat="server" Text='<%# FormatDate(DataBinder.Eval(Container.DataItem, "errDate")) %>' /> |
| </ItemTemplate> |
| </telerik:GridTemplateColumn> |
| </Columns> |
| </MasterTableView> |
| </telerik:RadGrid> |
| Partial Class App_Windows_Admin_Windows_Health_Monitor_Admin |
| Inherits System.Web.UI.Page |
| Function FormatDate(ByVal input As DateTime) As String |
| Return Format(input, "MMMM dd, yyyy") |
| End Function |
| Function ShortenField(ByVal input As String) As String |
| If input.Length > 50 Then |
| Return input.Substring(0, 50) & "..." |
| End If |
| End Function |
| Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit |
| If Not Page.IsPostBack Then |
| Dim HealthMonitorDC As New DAL.HealthMonitorDataContext |
| VirtualItemCount = Integer.Parse(HealthMonitorDC.bt_HealthMonitor_GetRecordCount().ReturnValue) |
| End If |
| End Sub |
| Private Shared VirtualItemCount As Integer |
| Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) |
| RadGrid1.MasterTableView.VirtualItemCount = VirtualItemCount |
| RadGrid1.VirtualItemCount = VirtualItemCount |
| Dim startRowIndex As Integer = (RadGrid1.CurrentPageIndex * RadGrid1.PageSize) |
| Dim maximumRows As Integer = RadGrid1.PageSize |
| Dim HealthMonitorDC As New DAL.HealthMonitorDataContext |
| Dim r = HealthMonitorDC.bt_HealthMonitor_GetAll(startRowIndex, maximumRows) |
| RadGrid1.DataSource = r |
| End Sub |
| End Class |
| ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetRecordCount] |
| AS |
| SET NOCOUNT ON |
| return (Select Count(ID) As TotalRecords From bt_HealthMonitor) |
| ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetAll] |
| ( |
| @StartRowIndex int, |
| @MaximumRows int |
| ) |
| AS |
| SET NOCOUNT ON |
| Select |
| RowNum, |
| [ID], |
| [errEx], |
| [errURL], |
| [errSource], |
| [errUser], |
| [errMessage], |
| [errIP], |
| [errBrowser], |
| [errOS], |
| [errStack], |
| [errDate], |
| [errNotes] |
| From |
| (Select |
| [ID], |
| [errEx], |
| [errURL], |
| [errSource], |
| [errUser], |
| [errMessage], |
| [errIP], |
| [errBrowser], |
| [errOS], |
| [errStack], |
| [errDate], |
| [errNotes], |
| Row_Number() Over(Order By [ID]) As RowNum |
| From dbo.[bt_HealthMonitor] t) |
| As DerivedTableName |
| Where RowNum Between @StartRowIndex And (@StartRowIndex + @MaximumRows) |
| Order By [errDate] Desc |
| Dim o_Grid As New Telerik.Web.UI.RadGrid |
| o_Grid.ID = o_I.GUID.ToString |
| o_Grid.AllowPaging = o_Table.Rows.Count > 10 |
| o_Grid.ShowStatusBar = o_Table.Rows.Count > 10 |
| o_Grid.Width = Unit.Percentage(100) |
| o_Grid.RegisterWithScriptManager = True |
| o_Grid.EnableEmbeddedScripts = True |
| AddHandler o_Grid.NeedDataSource, AddressOf _GridsNeedDataSource |
| AddHandler o_Grid.PageIndexChanged, AddressOf _GridsPageIndexChanged |
| AddHandler o_Grid.ColumnCreated, AddressOf _GridsColumnCreated |
| Debug.WriteLine(String.Format("Grid.UniqueID: {0}", o_Grid.UniqueID)) |
| o_SerialNumbers.Controls.Add(o_Grid) |
| o_Proxy.AjaxSettings.AddAjaxSetting(o_Grid, o_Grid) |
| BindingList<string> strings = Cache["LotsOfItems"] as BindingList<string>; |
| if (strings == null) |
| { |
| strings = MyClass.GetLotsOfStrings(); |
| Cache.Insert("LotsOfItems", strings, null, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration); |
| } |
| myGrid.DataSource = strings; |
| myGrid.DataBind(); |