Matt
Matt

Reputation: 1241

Populate Gridview from Data Table

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

Answers (1)

grovesNL
grovesNL

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

Related Questions