2010-06-25 59 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; 
相关问题