2017-03-25 3 views
1

私はPowershellコマンドを使用してC#WPFでこれを書いています。C#WPF DataGridで行の値を選択するにはどうすればよいですか?

私は、最初のデータグリッドの列オブジェクトを作成します。

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; } 
} 

その後、次のコードは、私のPC上で実行中のすべてのプロセスを示してデータグリッドを取り込みます

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 }); 
    } 
} 

私はどのように把握しようとしています選択された行の値を取得します。具体的には、私が選択した行の「ID」フィールド値を取得できるようにしたい。

さまざまなプロパティのバリエーション(SelectedItem、SelectedValue、GetValueなど)を使用して再生していますが、動作しないようです。

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

任意の助けが理解される:例えば、このコードは、値(ProjectName.FormName +アイテム)ではなく、実際のオブジェクト値を返します!ありがとうございました。

+0

'Item'は何ですか? –

+0

@ MathiasR.Jessenは、上記のメッセージボックスの例を使用したときに受け取るリテラルテキストです。 –

+0

いいえ、 'dgdProcessList.Items.Add(new Item(){{{})' '' - 'Item'とは何ですか? –

答えて

0

キャストあなたItem型へDataGridSelectedItemプロパティ:

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

パーフェクト!これは機能します。 –

関連する問題