在 WINDOWS 2000 (或 NT) 的事件日管理者可是最重要的息源,因所有的生的事件都在那 ─ 成功到重性的失。由於是如此的重要,那要是能透 WEB 使用,可不是更能突?
大家事件器不陌生,在篇文章我明如何使用 ASP.NET 和 .NET FRAMEWORK SDK 能完美地仿效列出日。了者作,我先保留於呈的建置。
使用篇文章的原始在你的 WEBSERVER 上必安 MICROSOFT .NET FRAMEWORK SDK。 同我也假者 C# 程式有一定程度的。
暴力手段法
了能更迅速且又不是那的乾俐落手段,我可以好好利用去 ASP 的知生一系列事件。(即使是 TABLE,然例不是要做 TABLE)。程式的名也就是玩意的名: SIMPLE.ASPX.
<% @PAGE LANGUAGE="C#" %><% @IMPORT NAMESPACE="SYSTEM.DIAGNOSTICS" %><%EVENTLOG ALOG = NEW EVENTLOG();ALOG.LOG = "SYSTEM";ALOG.MACHINENAME = "."; // LOCAL MACHINESTRING STRIMAGE = ""; // ICON FOR THE EVENTRESPONSE.WRITE("<P>THERE ARE " + ALOG.ENTRIES.COUNT + " ENTRIES IN THE SYSTEM EVENT LOG.</P>"); FOREACH (EVENTLOGENTRY ENTRY IN ALOG.ENTRIES) { SWITCH (ENTRY.ENTRYTYPE) { CASE EVENTLOGENTRYTYPE.WARNING: STRIMAGE = "WARNING.PNG"; BREAK; CASE EVENTLOGENTRYTYPE.ERROR: STRIMAGE = "ERROR.PNG"; BREAK; DEFAULT: STRIMAGE = "INFO.PNG"; BREAK; } RESPONSE.WRITE("<IMG SRC="" + STRIMAGE + "">&NBSP;|&NBSP;"); RESPONSE.WRITE(ENTRY.TIMEGENERATED.TOSTRING() + "&NBSP;|&NBSP;"); RESPONSE.WRITE(ENTRY.SOURCE + "&NBSP;|&NBSP;"); RESPONSE.WRITE(ENTRY.EVENTID.TOSTRING() + "<BR>
");}%>事件日的可以在名空找到 SYSTEM.DIAGNOSTICS,必它放在始的地方。打日本身就是很直接: 生新的 EVENTLOG 物件, 指明 LOG 和 MACHINENAME ("." 是本地端的器)。然後我就取事件日。
我使用 FOREACH 圈完成工作。使呈不那的缺乏意,我在每一都放一正的案,列出的器一般的序相反: 去的列最先。
使用 DATAGRID 更完美
在 ASP.NET 中有多的新,特是在料的展示,而且更棒的是料不一定要自料中。 DATAGRID WEB CONTROL 也是如此,也就如其名一,料中生 TABLE (GRID)。唯一需求料源必是支援 ICOLLECTION 介面 ─ 也就是使用 EVENTLOG 的集合 ENTRIES。
以下的原始 (SPECCOLSONLY.ASPX) 明了使用 DATAGRID 是如此的:
<% @PAGE LANGUAGE="C#" %><% @IMPORT NAMESPACE="SYSTEM.DIAGNOSTICS" %><SCRIPT LANGUAGE="C#" RUNAT="SERVER">VOID PAGE_LOAD(OBJECT SENDER, EVENTARGS E) { EVENTLOG ALOG = NEW EVENTLOG(); ALOG.LOG = "SYSTEM"; ALOG.MACHINENAME = "."; LOGGRID.DATASOURCE = ALOG.ENTRIES; LOGGRID.DATABIND();}</SCRIPT>DATAGRID 控制 (接下的程式) 只包含格式化的指令,有其他。GRID 是藉由 PAGE_LOAD 事件填去,就打了事件日,然後分配 ENTRIES () 作 DATAGRID 的 DATASOURCE 性。著呼叫 DATABIND 料就了 TABLE 中 ─ 但是我只用到位,如下像所示:
的限制完成工作都是在 DATAGRID 本身的 (SPECCOLSONLY.ASPX 包含完整程式):
<FORM RUNAT="SERVER"><ASP:DATAGRID ID="LOGGRID" RUNAT="SERVER" BORDERCOLOR="BLACK" BORDERWIDTH="1" GRIDLINES="BOTH" CELLPADDING="3" CELLSPACING="0" FONT-NAME="VERDANA" FONT-SIZE="8PT" HEADERSTYLE-BACKCOLOR="#AAAADD" AUTOGENERATECOLUMNS="FALSE"> <COLUMNS> <ASP:BOUNDCOLUMN HEADERTEXT="TOF" DATAFIELD="ENTRYTYPE" /> <ASP:BOUNDCOLUMN HEADERTEXT="DATE/TIME" DATAFIELD="TIMEGENERATED"/> <ASP:BOUNDCOLUMN HEADERTEXT="SOURCE" DATAFIELD="SOURCE"/> <ASP:BOUNDCOLUMN HEADERTEXT="EVENT ID" DATAFIELD="EVENTID"/> </COLUMNS></ASP:DATAGRID></FORM>
首要的步就是定 AUTOGENERATECOLUMNS 性 FALSE,一可避免自示所有性。在我藉可以指明我所要的位。
我使用了四位 (到料源),HEADERTEXT 呈在最上一列,而在 DATAFIELD 中取性填入所予的位中。
例中我故意位的定用得一。有多的位型,而你始使用格式化把玩位,者倒是可以你 "狂似的" 好好玩一玩呢!你可以在 QUICKSTART TUTORIAL 找到更多的例。
DATAGRID 中使用分
了完成工作,我使用另一 DATAGRID 特色,DB 程式都很熟 ─ 分。DATAGRID 的好就是分乎不用到任何的程式,看起就像:
一次我整原始 PAGING.ASPX 放文章中方便:
<% @PAGE LANGUAGE="C#" %><% @IMPORT NAMESPACE="SYSTEM.DIAGNOSTICS" %><SCRIPT LANGUAGE="C#" RUNAT="SERVER">VOID PAGE_LOAD(OBJECT SENDER, EVENTARGS E) { BINDGRID();}VOID LOGGRID_CHANGE(OBJECT SENDER, DATAGRIDPAGECHANGEDEVENTARGS E) { // SET CURRENTPAGEINDEX TO THE PAGE THE USER CLICKED. LOGGRID.CURRENTPAGEINDEX = E.NEWPAGEINDEX; // REBIND THE DATA. BINDGRID();} VOID BINDGRID() { EVENTLOG ALOG = NEW EVENTLOG(); ALOG.LOG = "SYSTEM"; ALOG.MACHINENAME = "."; LOGGRID.DATASOURCE = ALOG.ENTRIES; LOGGRID.DATABIND();}</SCRIPT><BODY BGCOLOR="#FFFFFF"><H3>SYSTEM EVENT LOG</H3><FORM RUNAT="SERVER"><ASP:DATAGRID ID="LOGGRID" RUNAT="SERVER" ALLOWPAGING="TRUE" PAGESIZE="10" PAGERSTYLE-MODE="NUMERICPAGES" PAGERSTYLE-HORIZONTALALIGN="RIGHT" PAGERSTYLE-NEXTPAGETEXT="NEXT" PAGERSTYLE-PREVPAGETEXT="PREV" ONPAGEINDEXCHANGED="LOGGRID_CHANGE" BORDERCOLOR="BLACK" BORDERWIDTH="1" GRIDLINES="BOTH" CELLPADDING="3" CELLSPACING="0" FONT-NAME="VERDANA" FONT-SIZE="8PT" HEADERSTYLE-BACKCOLOR="#AAAADD" AUTOGENERATECOLUMNS="FALSE"> <COLUMNS> <ASP:BOUNDCOLUMN HEADERTEXT="TOF" DATAFIELD="ENTRYTYPE" /> <ASP:BOUNDCOLUMN HEADERTEXT="DATE/TIME" DATAFIELD="TIMEGENERATED"/> <ASP:BOUNDCOLUMN HEADERTEXT="SOURCE" DATAFIELD="SOURCE"/> <ASP:BOUNDCOLUMN HEADERTEXT="EVENT ID" DATAFIELD="EVENTID"/> </COLUMNS></ASP:DATAGRID></FORM></BODY></HTML>首要的改可在 DATAGRID 控制上找到:
ALLOWPAGING="TRUE"PAGESIZE="10"PAGERSTYLE-MODE="NUMERICPAGES"PAGERSTYLE-HORIZONTALALIGN="RIGHT"PAGERSTYLE-NEXTPAGETEXT="NEXT"PAGERSTYLE-PREVPAGETEXT="PREV"ONPAGEINDEXCHANGED="LOGGRID_CHANGE"
二最重要的性分在第一列和最後一列: ALLOWPAGING ONPAGEINDEXCHANGED。 第一列代表分,最後一列代表更到另一事件方法。其他的性都只是性。
由於例我所使用的是集合而不是料提供的料,我使用得很: 我只是料至 GRID 中。了更好的行效能 ─ 特是料 ─ 在 "小程式" 中料被重新入。
今天文章真正的目的不是完全在於事件日,而是在明 DATAGRID 的使用非常多化,而不是止於用程式上料程式上的位而已。有多的功能可以使用,然而,要事件日 (唯) 就有什意,然也就不能使用了功能了。