【问题标题】:validate a cell based on another cell value in datagrid in silverlight根据silverlight中数据网格中的另一个单元格值验证单元格
【发布时间】:2013-08-18 09:42:38
【问题描述】:

PFB 是我们 silverlight 应用程序中数据网格的代码,我需要根据其他列值 DatatypeName 验证每一行中的列 AttributeValue,例如,特定行的 DatatypeNamecolumn 值是 int 同一行中的 AttributeValue 列应该允许user only int ,如果用户输入的不是 int 单元格应该抛出验证异常。请帮助

<sdk:DataGrid Margin="0,0,0,50" Grid.Row="1" Grid.Column="0" RowStyle="{StaticResource DataGridRowStyle1}"  Style="{StaticResource DataGridStyle1}" IsReadOnly="True" Foreground="{StaticResource GrayBrush}" HorizontalScrollBarVisibility="Hidden" Name="dgKpiAttributes" MinHeight="5" VerticalAlignment="Stretch" FontSize="13.333" FontFamily="Segoe UI"  AutoGenerateColumns="False" GridLinesVisibility="None" >
                                                    <sdk:DataGrid.Columns>
                                                        <sdk:DataGridTemplateColumn Header=" " >
                                                            <sdk:DataGridTemplateColumn.CellTemplate>
                                                                <DataTemplate>
                                                                    <CheckBox x:Name="chkSelect" 
                                      VerticalAlignment="Center" IsChecked="False"  HorizontalAlignment="Center" HorizontalContentAlignment="Center"/>


                                                                </DataTemplate>
                                                            </sdk:DataGridTemplateColumn.CellTemplate>
                                                        </sdk:DataGridTemplateColumn>
                                                        <sdk:DataGridTemplateColumn Header="AttributeName" SortMemberPath="AttributeName" Width="50*" >
                                                            <sdk:DataGridTemplateColumn.CellTemplate>
                                                                <DataTemplate>
                                                                    <StackPanel VerticalAlignment="Center">
                                                                        <TextBlock x:Name="txtAttributeName" TextWrapping="Wrap" Padding="4" Text="{Binding AttributeName}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                                                                    </StackPanel>
                                                                </DataTemplate>
                                                            </sdk:DataGridTemplateColumn.CellTemplate>
                                                        </sdk:DataGridTemplateColumn>
                                                        <sdk:DataGridTemplateColumn Header="AttributeValue" SortMemberPath="AttributeValue" Width="80*" >
                                                            <sdk:DataGridTemplateColumn.CellTemplate>
                                                                <DataTemplate>
                                                                    <StackPanel VerticalAlignment="Center">
                                                                        <TextBox x:Name="AttributeValue"  Margin="0,0,10,0" HorizontalAlignment="Stretch" Text="{Binding AttributeValue}"  TextWrapping="Wrap" />
                                                                    </StackPanel>
                                                                </DataTemplate>
                                                            </sdk:DataGridTemplateColumn.CellTemplate>
                                                        </sdk:DataGridTemplateColumn>
                                                        <sdk:DataGridTemplateColumn Header="DataType" SortMemberPath="DataTypeName" Width="50*">
                                                            <sdk:DataGridTemplateColumn.CellTemplate>
                                                                <DataTemplate>
                                                                    <StackPanel VerticalAlignment="Center">

                                                                        <TextBox x:Name="DatatypeName"  HorizontalAlignment="Stretch"  TextWrapping="Wrap" IsEnabled="False"  Text="{Binding DataTypeName}" />
                                                                    </StackPanel>
                                                                </DataTemplate>
                                                            </sdk:DataGridTemplateColumn.CellTemplate>
                                                        </sdk:DataGridTemplateColumn>
                                                    </sdk:DataGrid.Columns>

                                                </sdk:DataGrid>

【问题讨论】:

    标签: xaml data-binding datagrid silverlight-4.0 validation


    【解决方案1】:

    嗯,从你的代码中我可以看到你的课程是这样的(如果我弄错了,请纠正我):

    class MyClass
    {
          public string AttributeName {get;set;}
          public string AttributeValue {get;set;}
          public string DatatypeName {get;set;}
    }
    

    在silverligth中,我想有一种方法可以检查数据网格中同一行中的其他单元格,但是由于您正在使用绑定,因此您不需要它,您可以直接在数据对象中工作:

    class MyClass
    {
          public string AttributeName {get;set;}
    
          public string DatatypeName {get;set;}
    
          private string _AttributeValue;
          public string AttributeValue {
                 get{
                      return _AttributeValue;  
                 }
                 set{
                      if (validate(DatatypeName,value)){
                        //Do something if validation is a success  
                        _AttributeValue = value;
                      }
                      else{
                         //Do something if validation fails
                      }
                  }
              }
    
          bool validate(string typename,string value){
            //do your validation, return true or false
            return true
          }
    
    
    }
    

    这样您就不需要关心遍历 UI,只关心数据。

    【讨论】: