zoukankan      html  css  js  c++  java
  • 【原创】Silverlight DataGrid对核心控件DataGrid的任意单元格进行获取和设置分析。

    前几天,公司同事有个需求需要对系统中的DataGrid控件的指定单元格(如图,申请人ID)进行禁用设置,尝试了很多次总是 整行整列的 禁用 没实现效果。 网上资料较少,没找到解决措施。

    尽管silverlight的datagrid控件和 asp.net的名字相同,但很多方面还是不大一样的。

    但是换个思维方式, 任何事务都是由对象 构成,Asp.net中的datagrid的单元格是cell对象,所以 silverlight的单元格 应该也是 一个对象,一种类型,可以通过一些方法被获取到。

    多次尝试后通过以下的 代码方案简单明了的 找到了 目标条件的 单元格 DataGridCell对象。

    前端xaml代码:

     1 <sdk:DataGrid x:Name="dataGrid" SelectionMode="Single" Grid.Row="1" Margin="-1,-1,-1,0" CopyingRowClipboardContent="dataGrid_CopyingRowClipboardContent"
     2                                       AutoGenerateColumns="False" VerticalContentAlignment="Stretch" Loaded="dataGrid2_Loaded"
     3                                       HorizontalContentAlignment="Stretch" Grid.ColumnSpan="2" CellEditEnded="dataGrid_CellEditEnded"
     4                                       ColumnHeaderStyle="{StaticResource DataGridHeaderStyle}" LoadingRow="dataGrid_LoadingRow" BeginningEdit="dataGrid_BeginningEdit"
     5                                       CurrentCellChanged="dataGrid_CurrentCellChanged">
     6                             <sdk:DataGrid.Columns>
     7                                 <sdk:DataGridTemplateColumn Width="100" Header="查询对象">
     8                                     <sdk:DataGridTemplateColumn.CellTemplate>
     9                                         <DataTemplate>
    10                                             <TextBlock Height="20" Margin="2,0" VerticalAlignment="Center" HorizontalAlignment="Left" 
    11                                                Text="{Binding QueryType, Converter={StaticResource QueryTypeConverter}, Mode=TwoWay}" />
    12                                         </DataTemplate>
    13                                     </sdk:DataGridTemplateColumn.CellTemplate>
    14                                     <sdk:DataGridTemplateColumn.CellEditingTemplate>
    15                                         <DataTemplate>
    16                                             <ComboBox ItemsSource="{Binding KeyNameList, Source={StaticResource QueryTypeConverter}}"
    17                                                       SelectedItem="{Binding QueryType, Converter={StaticResource QueryTypeConverter}, Mode=TwoWay}"/>
    18                                         </DataTemplate>
    19                                     </sdk:DataGridTemplateColumn.CellEditingTemplate>
    20                                 </sdk:DataGridTemplateColumn>
    21                                 <sdk:DataGridTextColumn  Width="0.3*" Header="查询内容" Binding="{Binding Content}"/>
    22   
    23                                 <sdk:DataGridTemplateColumn Width="70" Header="有无异常">
    24                                     <sdk:DataGridTemplateColumn.CellTemplate>
    25                                         <DataTemplate>
    26                                             <TextBlock Margin="2,0" VerticalAlignment="Center" HorizontalAlignment="Left" 
    27                                                Text="{Binding ResultDesc, Converter={StaticResource IsResultDescConverter}, Mode=TwoWay}" />
    28                                         </DataTemplate>
    29                                     </sdk:DataGridTemplateColumn.CellTemplate>
    30                                     <sdk:DataGridTemplateColumn.CellEditingTemplate>
    31                                         <DataTemplate>
    32                                             <ComboBox ItemsSource="{Binding KeyNameList, Source={StaticResource IsResultDescConverter}}"
    33                                                       SelectedItem="{Binding ResultDesc, Converter={StaticResource IsResultDescConverter}, Mode=TwoWay}"
    34                                                       Height="25"/>
    35                                         </DataTemplate>
    36                                     </sdk:DataGridTemplateColumn.CellEditingTemplate>
    37                                 </sdk:DataGridTemplateColumn>
    38                                 <!--<sdk:DataGridTextColumn Width="0.7*" Header="备注" Binding="{Binding Path=Remark}"/>-->
    39                                 <sdk:DataGridTemplateColumn Width="0.7*" Header="备注">
    40                                     <sdk:DataGridTemplateColumn.CellTemplate>
    41                                         <DataTemplate>
    42                                             <TextBlock Text="{Binding Remark}" TextWrapping="Wrap" VerticalAlignment="Center"/>
    43                                         </DataTemplate>
    44                                     </sdk:DataGridTemplateColumn.CellTemplate>
    45                                     <sdk:DataGridTemplateColumn.CellEditingTemplate>
    46                                         <DataTemplate>
    47                                             <TextBox Text="{Binding Remark, Mode=TwoWay}" AcceptsReturn="True" TextWrapping="Wrap"/>
    48                                         </DataTemplate>
    49                                     </sdk:DataGridTemplateColumn.CellEditingTemplate>
    50                                 </sdk:DataGridTemplateColumn>
    51                                 <sdk:DataGridTemplateColumn Width="45"  Header="操作">
    52                                     <sdk:DataGridTemplateColumn.CellTemplate>
    53                                         <DataTemplate>
    54                                             <StackPanel Orientation="Horizontal" Height="22">
    55                                                 <Image x:Name="btnAdd" ToolTipService.ToolTip="新增" MouseLeftButtonUp="btnAdd_MouseLeftButtonUp" Source="/CTOP2P;component/Assets/Image/Action_LinkUnlink_Link.png" Style="{StaticResource imgButton}"/>
    56                                                 <Image x:Name="btnCopy" Visibility="Collapsed" ToolTipService.ToolTip="复制" MouseLeftButtonUp="btnCopy_MouseLeftButtonUp" Source="/CTOP2P;component/Assets/Image/Action_Copy.png" Style="{StaticResource imgButton}"/>
    57                                                 <Image x:Name="btnDel" ToolTipService.ToolTip="删除" MouseLeftButtonUp="btnDel_MouseLeftButtonUp" Cursor="Hand" Source="/CTOP2P;component/Assets/Image/Action_Delete_12x12.png" Height="12" Width="12" Margin="2,0"/>
    58                                             </StackPanel>
    59                                         </DataTemplate>
    60                                     </sdk:DataGridTemplateColumn.CellTemplate>
    61                                 </sdk:DataGridTemplateColumn>
    62                             </sdk:DataGrid.Columns>
    63                         </sdk:DataGrid>
    View Code

    需要设置dataGrid_BeginningEdit事件。

    后端代码:

    private void dataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) {
                var item = e.Row.DataContext as AuditQueryInfo;
                if (item.QueryType.Equals("申请人ID")) {
    
                    var dataGrid = sender as DataGrid;
    
                    FrameworkElement fe = dataGrid.Columns[1].GetCellContent(item);
                    if (fe == null)
                        return;
                   FrameworkElement result = GetParent(fe, typeof(DataGridCell));
    
                    if (fe != null) {
                        DataGridCell cell = (DataGridCell)result;
    
                        cell.Foreground = new SolidColorBrush(Colors.Green);
                        cell.IsEnabled = false; 
                    }
                }
            }
    View Code
    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;
            }

    这样就能对指定条件的单元格进行获取操作了。

     相关资料:

    http://blog.csdn.net/jhqin/article/details/7645357/

  • 相关阅读:
    Android ListView常用用法
    android ListView详解
    /使用匿名内部类来复写Handler当中的handlerMessage()方法
    android Handler的使用(一)
    Android之Handler用法总结
    动态设置android:drawableLeft|Right|Top|Bottom
    Android Drawable Resource学习(十)、ScaleDrawable
    Android开发——关于onCreate的解读
    onCreate()方法中的参数Bundle savedInstanceState 的意义用法
    Android之drawable state各个属性详解
  • 原文地址:https://www.cnblogs.com/x-poior/p/5230986.html
Copyright © 2011-2022 走看看