打印本文 打印本文  关闭窗口 关闭窗口
使用ASP.NET ?示事件日--?
作者:采集员 文章来源:来源于网络 点击数: 更新时间:2005/9/10 14:22:27

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



打印本文 打印本文  关闭窗口 关闭窗口