在 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 + ""> | "); Response.Write(entry.TimeGenerated.ToString() + " | "); Response.Write(entry.Source + " | "); 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 的使用非常多?化,而不是?止於?用程式上?料?程式??上的?位而已。有?多的功能可以使用,然而,要??事件日??? (唯?) 就?有什?意?,?然也就不能使用了??功能了。