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

时间:2019-08-27 12:38:56

标签: c# wpf datatable datagrid

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

不幸的是,我不知道如何访问所选数据网格行后面的正确数据行。

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

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

4 个答案:

答案 0 :(得分:0)

您可以尝试DataGridView的CellContentClick事件。在这里,您可以访问e.RowIndexe.ColumnIndex来获取单击的单元格的值。您可能不得不以某种方式将其与另一种方法结合使用,以查看是否是双击。

答案 1 :(得分:0)

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

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

    txt_Debug.Text = "Clicked on docId: " + dataRowView["docId"];
}

答案 2 :(得分:0)

您似乎最在那儿了

DataRowView docid = dataGrid_docs.SelectedItem;

DataRowView有一个.Row property,它将检索视图正在通过的基础数据行:

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

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

答案 3 :(得分:-1)

有时,您应该在询问stackoverflow之前就更加努力。调用非常简单:

            DataRowView docid = dataGrid_docs.SelectedItem as DataRowView;

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