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

5
我有一个C# WPF DataGrid,用于列出有关文档(例如发票)的信息。用户可以在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个回答

3

您可以通过列名从 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"];
}

0
你可以尝试使用 DataGridView 的 CellContentClick 事件。在那里,你可以访问 e.RowIndex 和 e.ColumnIndex 来获取所点击单元格的值。不过,你可能需要结合其他方法来判断是否是双击操作。

0
你似乎已经快完成了:
DataRowView docid = dataGrid_docs.SelectedItem;

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

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

这与ash的答案可能没有太大的实际区别,但我理解您的要求是想要DataRow本身,而不是由视图公开的行中的值。


-1
有时候在向stackoverflow提问之前,你应该更加努力地尝试。这个调用非常简单:
            DataRowView docid = dataGrid_docs.SelectedItem as DataRowView;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接