2017-03-25 2 views
1

Ich schreibe dies in C# WPF mit Powershell-Befehle.Wie bekomme ich ausgewählten Zeilenwert in C# WPF DataGrid?

ich zuerst die Datagrid-Spalte-Objekte erstellen:

public class Item 
{ 
    public object ID { get; set; } 
    public object ProcessName { get; set; } 
    public object Handles { get; set; } 
    public object NPM { get; set; } 
    public object PM { get; set; } 
    public object WS { get; set; } 
    public object Path { get; set; } 
} 

Dann wird der folgende Code füllt eine Datagrid, die alle laufenden Prozesse auf meinem PC zeigt:

private void btnGetProcess_Click(object sender, RoutedEventArgs e) 
{ 
    //Creates fields 
    DataGridTextColumn c1 = new DataGridTextColumn(); 
    c1.Header = "ID"; 
    c1.Binding = new Binding("ID"); 

    dgdProcessList.Columns.Add(c1); 
    DataGridTextColumn c2 = new DataGridTextColumn(); 
    c2.Header = "Process Name"; 
    c2.Binding = new Binding("ProcessName"); 
    dgdProcessList.Columns.Add(c2); 

    DataGridTextColumn c3 = new DataGridTextColumn(); 
    c3.Header = "Handles"; 
    c3.Binding = new Binding("Handles"); 
    dgdProcessList.Columns.Add(c3); 

    DataGridTextColumn c4 = new DataGridTextColumn(); 
    c4.Header = "NPM(K)"; 
    c4.Binding = new Binding("NPM"); 
    dgdProcessList.Columns.Add(c4); 

    DataGridTextColumn c5 = new DataGridTextColumn(); 
    c5.Header = "PM(K)"; 
    c5.Binding = new Binding("PM"); 
    dgdProcessList.Columns.Add(c5); 

    DataGridTextColumn c6 = new DataGridTextColumn(); 
    c6.Header = "WS(K)"; 
    c6.Binding = new Binding("WS"); 
    dgdProcessList.Columns.Add(c6); 

    DataGridTextColumn c7 = new DataGridTextColumn(); 
    c6.Header = "Path"; 
    c6.Binding = new Binding("Path"); 
    dgdProcessList.Columns.Add(c7); 

    //Connection to hostname successful 
    Runspace runspace = RunspaceFactory.CreateRunspace(); 
    runspace.Open(); 

    PowerShell ps = PowerShell.Create(); // Create a new PowerShell instance 
    ps.Runspace = runspace; // Add the instance to the runspace 
    ps.Commands.AddScript("Get-Process | Select-Object ID, ProcessName, Handles, NPM, PM, WS, Path"); // Add a script 
    Collection<PSObject> results = ps.Invoke(); 

    runspace.Close(); 

    foreach (PSObject obj in results) 
    { 
     object IDOutput; 
     object ProcessNameOutput; 
     object HandlesOutput; 
     object NPMOutput; 
     object PMOutput; 
     object WSOutput; 
     object PathOutput; 

     IDOutput = obj.Properties["ID"].Value; 
     ProcessNameOutput = obj.Properties["ProcessName"].Value; 
     HandlesOutput = obj.Properties["Handles"].Value; 
     NPMOutput = obj.Properties["NPM"].Value; 
     PMOutput = obj.Properties["PM"].Value; 
     WSOutput = obj.Properties["WS"].Value; 
     PathOutput = obj.Properties["Path"].Value; 
     dgdProcessList.Items.Add(new Item() { ID = IDOutput, ProcessName = ProcessNameOutput, Handles = HandlesOutput, NPM = NPMOutput, PM = PMOutput, WS = WSOutput, Path = PathOutput }); 
    } 
} 

Ich versuche, herauszufinden, wie man um den ausgewählten Zeilenwert zu erhalten. Insbesondere möchte ich den Feldwert "ID" der Zeile, die ich ausgewählt habe, erhalten können.

Ich habe die letzten paar Stunden damit verbracht, mit verschiedenen Eigenschaftsvariationen (SelectedItem, SelectedValue, GetValue usw.) zu spielen, aber ich kann nicht scheinen, dass es funktioniert. Beispielsweise gibt diesen Code einen Wert (ProjectName.FormName + Artikel), aber nicht den tatsächlichen Objektwert:

MessageBox.Show(dgdProcessList.SelectedValue.ToString()); 

Jede Hilfe ist willkommen! Vielen Dank.

+0

Was ist 'Item'? –

+0

@ MathiasR.Jessen das ist der wörtliche Text, den ich erhalte, wenn ich das Beispiel der Nachrichtenbox benutze. –

+0

Nein, ich meine in 'dgdProcessList.Items.Add (neues Item() {...})' <- was ist 'Item'? –

Antwort

0

Guss die SelectedItem Eigenschaft des DataGrid auf Ihre Item Typ:

var selectedItem = dgdProcessList.SelectedItem as Item; 
if(selectedItem != null) 
    MessageBox.Show(selectedItem.ID.ToString()); 
+0

Perfekt! Das funktioniert. –

Verwandte Themen