我有一个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();
}
答案 0 :(得分:0)
您可以尝试DataGridView的CellContentClick事件。在这里,您可以访问e.RowIndex
和e.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"];