65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Rad Silverlight Gridview 和 Silverlight Gridview 的自动生成列中对齐文本

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (2投票s)

2012 年 7 月 18 日

CPOL

2分钟阅读

viewsIcon

23643

downloadIcon

348

在 Rad Silverlight Gridview 和 Silverlight Gridview 的自动生成列中对齐文本

在本文中,我将展示如何在 Silverlight GridView 以及 Rad Control Silverlight GridView 的自动生成列单元格中对齐数据。在下面两个 GridView 的示例中,我希望将单元格中的数字数据靠左对齐,其他非数字数据保持原有格式。

RAD Silverlight GridView Silverlight GridView 的 XAML 代码

<telerik:RadGridView  
         Name="clubsGrid" 
         ItemsSource="{Binding Clubs}"
 AutoGeneratingColumn="clubsGrid_AutoGeneratingColumn"
         Margin="5">
</telerik:RadGridView>
这里需要注意的一点是在 XAML 代码中,我注册了 AutoGeneratingColumn = "clubsGrid_AutoGeneratingColumn" 事件,该事件将在自动生成 GridView 的列时被调用。
private void clubsGrid_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
{
 GridViewDataColumn column = e.Column as GridViewDataColumn;
        if (column.DataType == typeof(int)
           || column.DataType == typeof(decimal)
           || column.DataType == typeof(float)
                )
       {
           column.TextAlignment = TextAlignment.Right;
       }
 }

如上代码所示,我将 AutoGeneratingColumn 事件附加到 GridView 控件上,并检查每列的 DataType,进而检查将要附加到该列的属性的 DataType。因此,当 DataType 为 int 或 decimal 或 float 时,我将列的 TextAlignment 属性设置为 Right,以便将数字值靠右显示。

输出

因此,输出结果显示,数值列“StadiumCapacity”已对齐到右侧。

Silvelight SDK GridView 控件

有几种方法可以在 Silverlight GridView 中实现这一点

     1) 从代码隐藏文件中设置单元格样式,但创建 Style

     2) 从代码隐藏文件中设置单元格样式,但使用资源 

Silverlight GridView 的 XAML 代码

<sdk:DataGrid   IsReadOnly="True" 
       Name="mysGrid" 
      AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"
       ItemsSource="{Binding Clubs, Mode=OneWay}">
</sdk:DataGrid>

与 RAD GridView 类似,这里也编写了 AutoGeneratingColumn="DataGrid_AutoGeneratingColumn",它负责自动生成的列。

第一种方法:创建 Style

 private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
 {
    if (e.PropertyType == typeof(int)
        || e.PropertyType == typeof(decimal)
        || e.PropertyType == typeof(float)
       )
    {
        var rightCellStyle = new Style(typeof(DataGridCell)); 
               
        rightCellStyle.Setters.Add(new Setter(
             Control.HorizontalContentAlignmentProperty,
             HorizontalAlignment.Right));

        DataGridBoundColumn obj = e.Column as DataGridBoundColumn;
        obj.CellStyle = rightCellStyle;
     }}

如上代码所示,与 RAD GridView 控件类似,这里也使用 e.PropertyType 来检查自动生成列的类型,但不同之处在于需要创建单元格样式,然后将样式分配给 GridView 列的 CellStyle 属性。

第二种方法:使用资源

在此解决方案中,您需要在 App.XAML 中注册 GridView 单元格的样式,如下所示,然后可以使用它来分配给 CellStyle。

App.XAML 中的资源

  <Style x:Key="RightCellStyle" TargetType="sdk:DataGridCell">
      <Setter Property="HorizontalContentAlignment" Value="Right" />
  </Style>
代码隐藏文件
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(int)
        || e.PropertyType == typeof(decimal)
        || e.PropertyType == typeof(float)
       )
       {
           DataGridBoundColumn obj = e.Column as DataGridBoundColumn;
           var rightCellStyle = Application.Current.Resources["RightCellStyle"] as Style;
           obj.CellStyle = rightCellStyle;
       }
}

现在,在此代码中,您不需要创建任何样式,只需获取在 App.XAML 文件中注册的资源,并将其转换为 Style 即可。

输出

因此,输出结果显示,数值列“StadiumCapacity”已对齐到右侧。

注意:两种方法输出结果相同。

来源: http://pranayamr.blogspot.in/2012/07/align-text-in-autogenerated-column-of.html

© . All rights reserved.