利用ajax无刷新显示系统进程(B/S)!~

<%@ Page language="C#" MasterPageFile="~/MasterPage.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
  <ajax:ajaxpanel ID="Ajaxpanel1" runat="server">
  <fieldset>
    <legend>Windows Processes (list is updated every 10 seconds using Callback Timer)</legend>
    <i>This example demonstrates the use of the MagicAjax CallbackTimer. <br />For this example we've set the Callback timer in the Page_Load event (hint: click 'View Source' at the bottom of this page to see the complete source of this aspx file).</i><br /><br />
    <div style="overflow:auto;height:400px;width:325px">
    <asp:DataGrid AutoGenerateColumns="false" AllowSorting="True" OnSortCommand="grid_SortCommand" runat="server" ID="DataGrid1" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="5" GridLines="Horizontal" >
      <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
      <SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
      <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" Mode="NumericPages" />
      <AlternatingItemStyle BackColor="#F7F7F7" />
      <ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
      <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
      <Columns>
        <asp:BoundColumn DataField="ProcessName" SortExpression="ProcessName" HeaderText="Image Name" />
        <asp:BoundColumn DataField="PhysicalMemory" SortExpression="PhysicalMemory" HeaderText="Mem Usage" DataFormatString="{0:###,###,###} K" />
        <asp:BoundColumn DataField="HandleCount" SortExpression="HandleCount" HeaderText="Handles" DataFormatString="{0:###,###}" />
      </Columns>
    </asp:DataGrid>
    </div>
  </fieldset>
  </ajax:ajaxpanel>
</asp:Content>

<script language="C#" runat="server">
  private void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
      // For automatic CallBack every 10 seconds.
      MagicAjax.AjaxCallHelper.SetAjaxCallTimerInterval(10000);
    }
    ShowProcesses();
  }

  private void ShowProcesses()
  {
    System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();

    System.Data.DataTable dt = new System.Data.DataTable("Processes");
    dt.Columns.Add("ProcessName");
    dt.Columns.Add("PhysicalMemory", typeof(Int64));
    dt.Columns.Add("HandleCount", typeof(Int32));

    foreach (System.Diagnostics.Process process in processes)
    {
      dt.Rows.Add(new object[] {process.ProcessName, process.WorkingSet64 /1000, process.HandleCount });
    }

    System.Data.DataView dv = dt.DefaultView;

    //sort data
    dv.Sort = SortExpression;

    //bind data
    DataGrid1.DataSource = dv;
    DataGrid1.DataBind();
  }

   /// <summary>
   /// SortExpression of the grid (stored in ViewState!)
   /// </summary>
   private string SortExpression
   {
     get
     {
       if (ViewState["_grid_SortExpression"] != null)
       {
         return (string)ViewState["_grid_SortExpression"];
       }
       else
       {
            return "PhysicalMemory desc"; //default
       }
     }
     set
     {
       ViewState["_grid_SortExpression"] = value;
     }
   }

   private void grid_SortCommand(object source, DataGridSortCommandEventArgs e)
   {
      string[] currentSort = SortExpression.Split(' ');
     
      if (currentSort[0] == e.SortExpression)
      {
        SortExpression = string.Format("{0} {1}", e.SortExpression, currentSort[1] == "desc" ? "asc" : "desc");
      }
      else
      {
        SortExpression = e.SortExpression + " asc";
      }

     //refill datagrid
    ShowProcesses();
   }
</script>

posted @ 2007-09-07 12:54  阳光囧男  阅读(276)  评论(0编辑  收藏  举报