利用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>

 

Lad.li

posted @   silverPerson  阅读(219)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示