使用ASP.NET 示事件日--
你当前的位置:烁空 --> 技术文档全集

在 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 物件, 指明 LOGMACHINENAME ("." 是本地端的器)。然後我就取事件日。

我使用 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 的使用非常多化,而不是止於用程式上料程式上的位而已。有多的功能可以使用,然而,要事件日 (唯) 就有什意,然也就不能使用了功能了。