Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击datagrid行后如何获取单元格值_C#_Wpf_Datatable_Datagrid - Fatal编程技术网

C# 单击datagrid行后如何获取单元格值

C# 单击datagrid行后如何获取单元格值,c#,wpf,datatable,datagrid,C#,Wpf,Datatable,Datagrid,我有一个C WPF数据网格来列出有关文档的信息,例如发票。 用户可以在Datagrid中选择一行。双击该行后,我需要访问特定的单元格值docId 不幸的是,我不知道如何访问所选datagrid行后面的正确datarow 我可以从我的网格访问以下值: dataGrid_docs.selectedValue dataGrid_docs.selectedItem 所选值不是我的问题的答案,因为用户单击的是任何行,而不总是正确的列 // Create a new DataTable.

我有一个C WPF数据网格来列出有关文档的信息,例如发票。 用户可以在Datagrid中选择一行。双击该行后,我需要访问特定的单元格值docId

不幸的是,我不知道如何访问所选datagrid行后面的正确datarow

我可以从我的网格访问以下值:

dataGrid_docs.selectedValue
dataGrid_docs.selectedItem

所选值不是我的问题的答案,因为用户单击的是任何行,而不总是正确的列

        // Create a new DataTable.    
        DataTable custTable = new DataTable("Customers");


        // Create docId column 
            dtColumn = new DataColumn();
            dtColumn.DataType = typeof(string);
            dtColumn.ColumnName = "docId";
            custTable.Columns.Add(dtColumn);

        // Create createDate column 
            dtColumn = new DataColumn();
            dtColumn.DataType = typeof(string);
            dtColumn.ColumnName = "createDate";
            custTable.Columns.Add(dtColumn);


        dtSet = new DataSet();
        dtSet.Tables.Add(custTable);



        foreach (var doc in docs)
        {
            myDataRow = custTable.NewRow();
            foreach (var attribute in ecoDmsAttributes)
            {                    
                myDataRow["docId"] = "123"
                myDataRow["createDate"] = "2019-08-27"
            }
            custTable.Rows.Add(myDataRow);
        }


        dataGrid_docs.ItemsSource = custTable.DefaultView;




    private void DataGrid_docs_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        DataRowView docid = dataGrid_docs.SelectedItem;

        txt_Debug.Text = "Clicked on docId: " + docid.ToString();
    }

您可以尝试DataGridView的CellContentClick事件。在那里,您可以访问e.RowIndex和e.ColumnIndex以获取所单击单元格的值。您可能需要以某种方式将其与另一种方法相结合,以查看是否是双击。

您可以尝试DataGridView的CellContentClick事件。在那里,您可以访问e.RowIndex和e.ColumnIndex以获取所单击单元格的值。您可能需要以某种方式将其与另一种方法结合起来,以查看它是否是双击。

您可以按列名从DataRowView中检索值,例如DataRowView[docId]


您可以按列名从DataRowView检索值,例如DataRowView[docId]


你似乎是最成功的:

DataRowView docid = dataGrid_docs.SelectedItem;
DataRowView具有将检索该视图正在通过的基础datarow的:

DataRow ro = (dataGrid_docs.SelectedItem as DataRowView)?.Row;
var docid = ro["docId"]; //returns object. Use cast (string) or .ToString()

虽然我将您的需求解释为需要DataRow本身,而不是视图所显示的行中的值,但这与ash的答案之间可能没有什么实际区别

DataRowView docid = dataGrid_docs.SelectedItem;
DataRowView具有将检索该视图正在通过的基础datarow的:

DataRow ro = (dataGrid_docs.SelectedItem as DataRowView)?.Row;
var docid = ro["docId"]; //returns object. Use cast (string) or .ToString()

这与ash的回答之间可能没有什么实际区别,尽管我将您的需求解释为需要DataRow本身,而不是视图所显示的行中的值,有时您应该在询问stackoverflow之前更努力。打电话很简单:

            DataRowView docid = dataGrid_docs.SelectedItem as DataRowView;

            txt_Debug.Text = "Clicked on: " + docid.Row["DocID"];

有时候,在询问stackoverflow之前,你应该更加努力。打电话很简单:

            DataRowView docid = dataGrid_docs.SelectedItem as DataRowView;

            txt_Debug.Text = "Clicked on: " + docid.Row["DocID"];