我在wpf中有一個名爲datagrid1
的datagridview。我需要讀取datagrid中每個單元格的值。我知道如何做到這一點在Windows窗體讀取WPF gridview中的每個單元格值
string result = datagrid1.Rows[0].Cells[1].Value.ToString();
這是如何在WPF中?
我在wpf中有一個名爲datagrid1
的datagridview。我需要讀取datagrid中每個單元格的值。我知道如何做到這一點在Windows窗體讀取WPF gridview中的每個單元格值
string result = datagrid1.Rows[0].Cells[1].Value.ToString();
這是如何在WPF中?
有沒有簡單的方法來做到這一點在WPF中,但這tutorial可以用於你。
編輯:
所有我完全尼廷·喬希上述評論表示贊同的第一位。 二,根據這個answer WPF數據網格的建立是爲了綁定到類似於DataTable的東西。大多數情況下,您將修改DataTable
以及DataTable
內與DataGrid
綁定的行/列,而不是DataGrid
它自己,因此您不需要使用類似datagrid1.Rows[0].Cells[1].Value
的東西。但是,如果你仍然堅持得到值的方式,這裏是一個解決方案:
第二個編輯: 既然你只要求一個方法來讀取調用價值,我會讓我的答案短,但也有點更具體的: GetCellValue方法返回表示通過列/行索引給定DataGrid
的細胞內容的字符串值:
我寫這個方法假定列類型要麼TextBox
,TextBlock
或ComboBox
。其他類型可以用相同的方式處理。
public string GetCellValue(DataGrid datagrid, int row, int column)
{
var cellInfo = new DataGridCellInfo(
datagrid.Items[row], dataGrid.Columns[column]);
DataGridCell cell = null;
var cellContent = cellInfo.Column.GetCellContent(cellInfo.Item);
if (cellContent != null)
cell = (DataGridCell)cellContent.Parent;
if (cell == null) return string.Empty;
// if DataGridTextColumn/DataGridComboBoxColumn is used
// or AutoGeneratedColumns is True
if (cell.Content is TextBlock)
return ((TextBlock)cell.Content).Text;
else if (cell.Content is ComboBox)
return ((ComboBox)cell.Content).Text;
// if DataGridTemplateColumn is used
// assuming cells are either TextBox, TextBlock or ComboBox. Other Types could be handled the same way.
else
{
var txtPresenter = FindVisualChild<TextBox>((ContentPresenter)cell.Content);
if (txtPresenter != null) return txtPresenter.Text;
var txbPresenter = FindVisualChild<TextBlock>((ContentPresenter)cell.Content);
if (txbPresenter != null) return txbPresenter.Text;
var cmbPresenter = FindVisualChild<ComboBox>((ContentPresenter)cell.Content);
if (cmbPresenter != null) return cmbPresenter.Text;
}
return string.Empty;
}
public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is T)
return (T)child;
else
{
T childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
然後調用string result = GetCellValue(dataGrid, 2, 1);
(例如,從一個按鈕點擊事件),將返回的數據網格[2,1]的值。
*注:
DataGrid
的SelectionUnit
必須設置爲Cell
。DataGrid
必須完全產生,否則ItemContainerGenerator
返回null。UIElements
認爲更常見,可用作DataGridColumn
類型。感謝您的解決方案。但我有上面的代碼的另一個問題。即在方法「SelectCellByIndex」條件「if(cell.Content是TextBlock)」中返回false,則返回結果爲null(空)。 datagrid已完全生成,但爲什麼將空值作爲單元格值返回。 – Tharindu
我寫了一段代碼,假設你的datagrid中的每個單元都是一個TextBlock。什麼是cell.content類型?如果它不是TextBlock,則嘗試找出該類型,然後更改該部分代碼以返回表示單元格值的字符串值。 –
你在開發中使用'MVVM'模式嗎?如果沒有,你仍然可以在你的cs文件中訪問'datagrid1'。 –
請指定爲什麼要讀取單元格值?最佳做法是使用MVVM,而且不會遇到這種情況。 –