2014-02-25 71 views
1

我試圖從數據表填充一個gridview。但是,當我運行代碼時,Gridview中什麼也沒有顯示出來。下面是代碼:填充的GridView從數據表

string serverIP = drpServer.SelectedItem.Value.ToString(); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"\\" + serverIP + "\\root\\CIMV2", "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process"); 

     foreach (ManagementObject query in searcher.Get()) 
     {    
      var processName = query["Name"]; 
      var processID = query["IDProcess"]; 
      var cpuTime = query["PercentProcessorTime"]; 
      var memUsage = query["WorkingSet"]; 

      double newMemUsage = Convert.ToDouble(memUsage); 

      newMemUsage = newMemUsage/1024; 

      DataTable dt = new DataTable(); 
      dt.Columns.Add("ProcessName", typeof(string)); 
      dt.Columns.Add("ProcessID", typeof(int)); 
      dt.Columns.Add("CPUTime", typeof(string)); 
      dt.Columns.Add("MemoryUsage", typeof(string)); 

      DataRow row = dt.NewRow(); 
      row["ProcessName"] = processName; 
      row["ProcessID"] = processID; 
      row["CPUTime"] = cpuTime; 
      row["MemoryUsage"] = newMemUsage; 
      dt.Rows.Add(row); 

      GridView1.DataSource = dt; 
      GridView1.DataBind(); 

我喜歡的管理對象搜索器比使用Diagnostics.Process這就是爲什麼我要這條路線更好。

我已經創建了我的GridView中綁定字段爲好。

回答

2

爲什麼你的foreach包裝整個過程?每當您收到新的查詢時,這將創建一個全新的DataTable。我認爲你的意思是做下面的事情,它只包裹添加行塊:

string serverIP = drpServer.SelectedItem.Value.ToString(); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"\\" + serverIP + "\\root\\CIMV2", "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process"); 

DataTable dt = new DataTable(); 
dt.Columns.Add("ProcessName", typeof(string)); 
dt.Columns.Add("ProcessID", typeof(int)); 
dt.Columns.Add("CPUTime", typeof(string)); 
dt.Columns.Add("MemoryUsage", typeof(string)); 

foreach (ManagementObject query in searcher.Get()) 
{ 
    var processName = query["Name"]; 
    var processID = query["IDProcess"]; 
    var cpuTime = query["PercentProcessorTime"]; 
    var memUsage = query["WorkingSet"]; 

    double newMemUsage = Convert.ToDouble(memUsage); 

    newMemUsage = newMemUsage/1024; 

    DataRow row = dt.NewRow(); 
    row["ProcessName"] = processName; 
    row["ProcessID"] = processID; 
    row["CPUTime"] = cpuTime; 
    row["MemoryUsage"] = newMemUsage; 
    dt.Rows.Add(row); 
} 

GridView1.DataSource = dt; 
GridView1.DataBind(); 
+0

謝謝。我沒有注意到。我做了改變,現在看起來正在填充,但所有的行都是空白的。我將調試並查看這些值是否正在寫入。 – Matt

+1

沒問題。這可能是您的查詢本身的問題。如果你在'double newMemUsage'處設置了一個斷點,你應該能夠看到是否有'processName'等值。然後你可以在'foreach'的最後括號處設置另一個斷點,以查看'dt'包含結果集中的任何值(在Watch或Locals下)。 – grovesNL

+0

我通過這個在控制檯應用程序,所以我可以繞過gridview和數據被寫入控制檯。從我的下拉菜單中獲得正確的值可能存在問題。我會調試,看看。感謝您的幫助。 – Matt