为了账号安全,请及时绑定邮箱和手机立即绑定

单击数据网格行后如何获取单元格值

单击数据网格行后如何获取单元格值

C#
动漫人物 2023-09-24 16:09:22
我有一个 C# WPF DataGrid 来列出有关文档(例如发票)的信息。用户可以在数据网格中选择一行。双击该行后,我需要访问特定的单元格值(docId)。不幸的是,我不知道如何访问所选数据网格行后面的正确数据行。我可以从网格中访问以下值:dataGrid_docs.selectedValue dataGrid_docs.selectedItem...selected Value 不是我的问题的答案,因为用户单击任何行,而不总是正确的列。        // 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 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以按列名称从 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"];

}



查看完整回答
反对 回复 2023-09-24
?
jeck猫

TA贡献1909条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-09-24
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你似乎最能做到这一点:

DataRowView docid = dataGrid_docs.SelectedItem;

ADataRowView有一个.Row 属性,它将检索视图正在传递的基础数据行:

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

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



查看完整回答
反对 回复 2023-09-24
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

调用起来非常简单:

            DataRowView docid = dataGrid_docs.SelectedItem as DataRowView;

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


查看完整回答
反对 回复 2023-09-24
  • 4 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信