簡體   English   中英

如何在C#WPF DataGrid中獲取選定的行值?

[英]How do I get selected row value in C# WPF DataGrid?

我是使用Powershell命令在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; }
}

然后,以下代碼填充一個Datagrid,顯示我的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等),但我似乎無法讓它工作。 例如,此代碼返回一個值(ProjectName.FormName + Item),但不返回實際的對象值:

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

任何幫助表示贊賞! 謝謝。

DataGridSelectedItem屬性轉換為Item類型:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM