I’m pleased to announce that with Q1 2009 release of RadControls for WPF / Silverlight you will be able to manipulate the controls very easily with two powerful extension methods: ParentOfType<> and ChildrenOfType<>.
Here are several small demos for RadGridView:
1) Get all grid rows:
var rows = RadGridView1.ChildrenOfType<GridViewRow>();
2) Get all grid cells:
var cells= RadGridView1.ChildrenOfType<GridViewCell>();
3) Get all grid header cells:
var headerCells = RadGridView1.ChildrenOfType<GridViewHeaderCell>();
4) Get (and show) new row:
var newRow = RadGridView1.ChildrenOfType<GridViewNewRow>().First();
newRow.Visibility = Visibility.Visible;
5) Find the grid vertical scrollbar and scroll the grid to bottom:
var verticalScrollBar = RadGridView1.ChildrenOfType<ScrollBar>().Where(s=>s.Orientation == Orientation.Vertical).First();
verticalScrollBar.Value = verticalScrollBar.Maximum;
6) Select specific row(s):
var row = RadGridView1.ChildrenOfType<GridViewRow>().Where(r => r.ChildrenOfType<GridViewCell>().Where(c => c.Content.ToString() == "ALFKI").Any()).First();
row.IsSelected = true;
7) Change specific cell(s) content:
var cell = RadGridView1.ChildrenOfType<GridViewCell>().Where(c => c.Content.ToString() == "ALFKI").First();
cell.Content = "Changed!";
8) Put specific cell in edit mode:
var cell = RadGridView1.ChildrenOfType<GridViewCell>().Where(c => c.Content.ToString() == "ALFKI").First();
cell.IsInEditMode = true;
9) Get visible rows count on scroll or size change:
void Window1_Loaded(object sender, RoutedEventArgs e)
{
var verticalScrollBar = RadGridView1.ChildrenOfType<ScrollBar>().Where(s => s.Orientation == Orientation.Vertical).First();
verticalScrollBar.SizeChanged += new SizeChangedEventHandler(verticalScrollBar_SizeChanged);
verticalScrollBar.Scroll += new ScrollEventHandler(verticalScrollBar_Scroll);
}
void verticalScrollBar_SizeChanged(object sender, SizeChangedEventArgs e)
{
var visibleRowsCount = RadGridView1.ChildrenOfType<GridViewRow>().Where(r => r.Visibility == Visibility.Visible).Count();
}
void verticalScrollBar_Scroll(object sender, ScrollEventArgs e)
{
var visibleRowsCount = RadGridView1.ChildrenOfType<GridViewRow>().Where(r => r.Visibility == Visibility.Visible).Count();
}
10) Perform conditional row(s) formatting:
var rows = RadGridView1.ChildrenOfType<GridViewRow>().Where(r => r.ChildrenOfType<GridViewCell>().Where(c => c.Content.ToString() == "ALFKI"|| c.Content.ToString() == "AROUT").Any()).ToList();
rows.ForEach(r => r.Background = Brushes.Red);
11) Expand first row in case of hierarchy:
var expandableRow = RadGridView1.ChildrenOfType<GridViewExpandableRow>().First();
expandableRow.IsExpanded = true;
12) Collapse first group header row:
var groupHeader = RadGridView1.ChildrenOfType<GridViewGroupRow>().First();
groupHeader.ChildrenOfType<Expander>().First().IsExpanded = false;
15) Check all CheckBox controls in specific column:
var cells = RadGridView1.ChildrenOfType<GridViewCell>().Where(c => c.Column.UniqueName == "Test").ToList();
cells.ForEach(c => c.ChildrenOfType<CheckBox>().First().IsChecked = true);
Enjoy!
Vladimir Enchev is Director of Engineering, Native Mobile UI & Frameworks