silverlight 遍历datagrid行的数据
silverlight遍历datagrid,从而获取datagrid中模板列里的控件对象,选中所有行或者做其他操作。
刚开始就找到了一个遍历的方法,如下代码:
foreach (object obj in dg.ItemsSource) { CheckBox cb1 = dg.Columns[0].GetCellContent(obj).FindName("ck") as CheckBox; cb1.IsChecked = true; }
其中dg为DataGrid的name值,这样成功了,获取到了每一行的控件,但是一旦datagrid数据多的时候,datagrid自带的滚动条出现了,这时候遍历就出现问题了,只能遍历到页面上呈现的数据行里的控件;而页面不呈现的数据行的控件和数据却取不到。网上查了下,发现如下解决方法。
解决办法:禁用掉datagrid自己的滚动条,在datagrid控件外面加一个滚动条的控件,就可以了,代码如下:
<ScrollViewer Grid.Row="3" VerticalScrollBarVisibility="Auto" Margin="5,5,5,5" HorizontalScrollBarVisibility="Disabled" Height="auto" BorderBrush="#FFFDFAF8"> <sdk:DataGrid Name="SeriesValueDataGrid" Margin="0" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalScrollBarVisibility="Disabled" AutoGenerateColumns="False"> <sdk:DataGrid.Columns> <sdk:DataGridTemplateColumn Header="Include"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <CheckBox IsChecked="True" Name="ck"></CheckBox> </StackPanel> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> <sdk:DataGridTextColumn Header="Value" Binding="{Binding DisplayName}"></sdk:DataGridTextColumn> </sdk:DataGrid.Columns> </sdk:DataGrid> </ScrollViewer>
这样就达到了实现选中DataGrid中所有行的数据,并且带有滚动条的效果。