2010-09-03 5 views
0

J'ai un DataGrid WPF,texte Changement de DataGrid dans databound, en WPF

Voici mon DataGrid

<dg:DataGrid x:Name="dataGrid" AutoGenerateColumns="false" 
      ColumnHeaderStyle="{StaticResource columnHeaderStyle}" 
      AlternationCount="2" RowBackground="Beige" 
      RowStyle="{StaticResource rowStyle}" 
      AlternatingRowBackground="LightBlue" 

      HeadersVisibility="All" 
      HorizontalGridLinesBrush="#DDDDDD" 
      VerticalGridLinesBrush="#DDDDDD" Grid.ColumnSpan="2" Margin="0,0,0,26" IsReadOnly="True" ColumnHeaderHeight="30"> 

      <dg:DataGrid.Columns> 
       <dg:DataGridTextColumn Header=" Task Id" Binding="{Binding Path=TaskId}" Width="60" /> 
       <dg:DataGridTextColumn Header="Order Description" Binding="{Binding Path=OrderDescription}" Width="120"/> 
       <dg:DataGridTextColumn Header="Final Client Name" Binding="{Binding Path=ClientName}" Width="110"/> 
       <dg:DataGridTextColumn Header="Order Date" Binding="{Binding Path=OrderDate}" Width="80"/> 
       <dg:DataGridTextColumn Header="Task Description" Binding="{Binding Path=TaskDescription}" Width="130"/> 
       <dg:DataGridTextColumn Header="Group Name Short" Binding="{Binding Path=GroupNameShort}" Width="116"/> 
       <dg:DataGridTemplateColumn MinWidth="100" Header=" Actions"> 
        <dg:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button Click="DetailButton_Click">Close</Button> 
         </DataTemplate> 
        </dg:DataGridTemplateColumn.CellTemplate> 
       </dg:DataGridTemplateColumn> 

      </dg:DataGrid.Columns> 
     </dg:DataGrid> 

En ASPX changer le texte que nous utilisons onrowdatabound par exemple, ici dans WPF comment puis-je changer le champ Order Description et Date de commande. J'ai deux fonctions pour changer le texte, qui sont convertDatetimeToDate (string datetime) e htmltotext (texte de chaîne).

Répondre

2

Vous pouvez utiliser un convertisseur de valeur sur la liaison. Créez une classe qui implémente IValueConverter et définissez une instance de cette classe en tant que propriété Converter de la liaison.

public class DateTimeToDateConverter 
    : IValueConverter 
{ 
    public object Convert(
     object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     // Call convertDatetimeToDate here and return the result 
     return value; 
    } 

    public object ConvertBack(
     object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Dans votre code XAML, créez une instance du convertisseur. Vous devrez peut-être ajouter une référence d'espace de noms:

<Window.Resources xmlns:local="clr-namespace:YourNamespace"> 
    <local:DateTimeToDateConverter x:Key="myConverter"/> 
</Window.Resources> 

et l'utiliser dans la liaison:

<dg:DataGridTextColumn 
    Header="Order Date" 
    Binding="{Binding Path=OrderDate, Converter={StaticResource myConverter}}" 
    Width="80"/> 

Dans 3.5 SP1 ou version ultérieure, vous pouvez également utiliser la propriété StringFormat sur la liaison à faire la mise en forme simple, . Cela devrait formater le datetime comme une date simple en faisant l'équivalent de string.Format("{0:d}", OrderDate):

<dg:DataGridTextColumn 
    Header="Order Date" 
    Binding="{Binding Path=OrderDate, StringFormat='{}{0:d}'}" 
    Width="80"/> 
+0

Cela fonctionne. Tks beaucoup Quartermeister – Luis