nipiv
nipiv

Reputation: 332

how to Change Datagridcombobox cell to textbox?

I need to change the 1st cell of 1st row to a blank text box. right now I have the column as datagridviewcombobox column?

                    <DataGridComboBoxColumn Header="And/Or" Width="60" ItemsSource="{Binding Source={StaticResource PredicateCombinationOperatorsEnumValues}}" SelectedItemBinding="{Binding PredicateCombinationOperator, Mode=TwoWay}" />
                    <DataGridComboBoxColumn Header="Field" ItemsSource="{Binding Source={StaticResource FieldTypeEnumValues}}" SelectedItemBinding="{Binding FieldType}"/>
                    <DataGridComboBoxColumn Header="Operator" MinWidth="70" ItemsSource="{Binding Source={StaticResource OperatorsEnumValues}}" SelectedItemBinding="{Binding Operator}"/>
                    <DataGridTextColumn Header="Value" MinWidth="100" Width="*"  Binding="{Binding Expression}"/>
                </DataGrid.Columns>
                <DataGrid.InputBindings>
                    <KeyBinding Command="{Binding Source={StaticResource DeleteContextMenuCommand}}" Key="Delete"/>
                </DataGrid.InputBindings>
                <DataGrid.ContextMenu>
                    <ContextMenu ItemsSource="{Binding MenuOptions}">
                        <ContextMenu.ItemContainerStyle>
                            <Style TargetType="{x:Type MenuItem}">
                                <Setter Property="Header" Value="{Binding Name}" />
                                <Setter Property="Command" Value="{Binding}" />
                                <Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}" />
                                <Setter Property="AutomationProperties.AutomationId" Value="{Binding Name}" />
                                <Setter Property="AutomationProperties.Name" Value="{Binding Name}" />
                            </Style>
                        </ContextMenu.ItemContainerStyle>
                    </ContextMenu>
                </DataGrid.ContextMenu>
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="ContextMenuOpening">
                        <trigger:ContextMenuOpeningTriggerAction/>
                    </i:EventTrigger>
                    <i:EventTrigger EventName="SelectionChanged">
                        <trigger:SelectionChangeTriggerAction/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </DataGrid>

Upvotes: 0

Views: 607

Answers (1)

biju
biju

Reputation: 18030

You could specify conditional data template and select the template according to your condition. First we have to inherit class from DataTemplateSelector and define properties of DataTemplate type. Define as much properties as data template you want.Then override the SelectTemplate method to return the datatemplate you want.Check the below sample code

  <Window.Resources>
    <local:Animals x:Key="animals"/>
    <DataTemplate x:Key="TextTemplate">
        <TextBox Margin="2" Width="60" />
    </DataTemplate>
    <DataTemplate x:Key="ComboTemplate" >
        <ComboBox Width="60" />
    </DataTemplate>
</Window.Resources>
<Grid>
    <Controls:DataGrid>
        <Controls:DataGrid.Columns>
            <Controls:DataGridTemplateColumn Header="And/Or" Width="60">
                <Controls:DataGridTemplateColumn.CellTemplateSelector>
                    <local:CustomTemplateSelector
        TextTemplate="{StaticResource TextTemplate}"
        ComboTemplate="{StaticResource ComboTemplate}"/>
                </Controls:DataGridTemplateColumn.CellTemplateSelector>
            </Controls:DataGridTemplateColumn>

            <Controls:DataGridComboBoxColumn Header="Field"/>
            <Controls:DataGridComboBoxColumn Header="Operator" MinWidth="70" />
            <Controls:DataGridTextColumn Header="Value" MinWidth="100" Width="*"/>
        </Controls:DataGrid.Columns>

    </Controls:DataGrid>

</Grid>



    public class CustomTemplateSelector : DataTemplateSelector
{
  public DataTemplate TextTemplate
  { get; set; }

  public DataTemplate ComboTemplate
  { get; set; }

  public override DataTemplate SelectTemplate(object item, DependencyObject container)
  {
     MyObject obj = item as MyObject;

    if (obj != null)
    {
            // custom logic to select appropriate data template and return
    }
    else
      return base.SelectTemplate(item, container);
  }


  }
}

for more check here

http://zamjad.wordpress.com/2010/08/23/apply-conditional-data-template-in-data-grid/

Upvotes: 1

Related Questions