Reputation: 1241
I am attempting to populate a Gridview from a Data Table. However, when I run the code, nothing at all is showing up in the Gridview. Here is the code:
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();
I like the Management Object Searcher better than using Diagnostics.Process which is why I am going that route.
I have created the Bound Fields in my Gridview as well.
Upvotes: 2
Views: 20571
Reputation: 6075
Why is your foreach
wrapping the entire procedure? That will create an entire new DataTable
each time you get a new query. I think you meant to do the following, which only wraps the add row piece:
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();
Upvotes: 2