2010-06-25 83 views
4

我想從Silverlight數據網格的選定項目中獲取單元格值。在附加的代碼中,我可以獲取單元格的屬性並更改其前景色,但我無法獲取單元格的值。有人能讓我知道我做錯了什麼嗎?非常感謝您的幫助!Silverlight DataGrid如何從選定項目獲取單元格值?

private void FindDetails_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     DataGrid dataGrid = sender as DataGrid; 

     int selectedIndex = dataGrid.SelectedIndex; 
     if (selectedIndex > -1) 
     { 
      FindResult findResult = (FindResult)FindDetailsDataGrid.SelectedItem; 

      DataGridColumn column = dataGrid.Columns[0]; 
      FrameworkElement fe = column.GetCellContent(dataGrid.SelectedItem); 
      FrameworkElement result = GetParent(fe, typeof(DataGridCell)); 

      if (result != null) 
      { 
       DataGridCell cell = (DataGridCell)result; 
       //changes the forecolor 
       cell.Foreground = new SolidColorBrush(Colors.Blue); 
       //how to get cell value? 
      } 
     } 
    } 

    private FrameworkElement GetParent(FrameworkElement child, Type targetType) 
    { 
     object parent = child.Parent; 
     if (parent != null) 
     { 
      if (parent.GetType() == targetType) 
      { 
       return (FrameworkElement)parent; 
      } 
      else 
      { 
       return GetParent((FrameworkElement)parent, targetType); 
      } 
     } 
     return null; 
    } 
+0

什麼對象綁定到數據網格的列有問題的電池? – VoodooChild 2010-06-25 19:52:58

+0

這是一個TextBlock – Arkady 2010-06-25 20:26:03

+0

你應該標記這個答案,如果你完成這個問題,謝謝。 – VoodooChild 2010-06-30 01:12:46

回答

4

感謝VooDooChild,使用文本塊得到的值參見下面的我的解決方案。

private void FindDetails_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     DataGrid dataGrid = sender as DataGrid; 

     int selectedIndex = dataGrid.SelectedIndex; 
     if (selectedIndex > -1) 
     { 
      FindResult findResult = (FindResult)FindDetailsDataGrid.SelectedItem; 

      DataGridColumn column = dataGrid.Columns[0]; 
      FrameworkElement fe = column.GetCellContent(dataGrid.SelectedItem); 
      FrameworkElement result = GetParent(fe, typeof(DataGridCell)); 

      if (result != null) 
      { 
       DataGridCell cell = (DataGridCell)result; 
       //changes the forecolor 
       cell.Foreground = new SolidColorBrush(Colors.Blue); 
       //how to get cell value? 

       TextBlock block = fe as TextBlock; 
       if (block != null) 
       { 
        string cellText = block.Text; 
        MessageBox.Show(cellText); 
       } 
      } 
     } 
    } 
1
private void FindDetails_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    DataGrid dataGrid = sender as DataGrid; 
    var item = dataGrid.SelectedItem; 
    if (item != null) 
    { 
    //in here you can get the properties with the "item"'s object 
    } 
} 
+0

你能展示如何從選定的項目檢索值?我只能更改文本塊的屬性。 – Arkady 2010-06-25 20:30:33

1

您是否嘗試過這樣的僞:

string myString = ((MyNamespace.MyEntity)(myDataGrid.SelectedItem)).myStringProperty; 
相關問題